Blame


1 db6c077f 2023-12-27 benni #!/bin/sh
2 db6c077f 2023-12-27 benni
3 db6c077f 2023-12-27 benni die() {
4 db6c077f 2023-12-27 benni ec=$1
5 db6c077f 2023-12-27 benni shift
6 db6c077f 2023-12-27 benni echo "$@" >&2
7 db6c077f 2023-12-27 benni exit "$ec"
8 db6c077f 2023-12-27 benni }
9 db6c077f 2023-12-27 benni
10 db6c077f 2023-12-27 benni usage() {
11 ec8f1d27 2023-12-27 benni die 1 "Usage: got-archive [-sV] [-b branch/tag] [-o outdir] [-t tmpdir] repo"
12 db6c077f 2023-12-27 benni }
13 db6c077f 2023-12-27 benni
14 ec8f1d27 2023-12-27 benni args=$(getopt b:o:st:V $*)
15 db6c077f 2023-12-27 benni [ $? -ne 0 ] && usage
16 db6c077f 2023-12-27 benni
17 db6c077f 2023-12-27 benni set -- $args
18 db6c077f 2023-12-27 benni
19 db6c077f 2023-12-27 benni strip=0
20 db6c077f 2023-12-27 benni branch=
21 db6c077f 2023-12-27 benni outdir=.
22 db6c077f 2023-12-27 benni tmpdir="/tmp/got-archive"
23 db6c077f 2023-12-27 benni
24 db6c077f 2023-12-27 benni while [ $# -ne 0 ]; do
25 db6c077f 2023-12-27 benni case "$1" in
26 db6c077f 2023-12-27 benni -b)
27 db6c077f 2023-12-27 benni branch=$2
28 db6c077f 2023-12-27 benni shift
29 db6c077f 2023-12-27 benni shift
30 db6c077f 2023-12-27 benni ;;
31 db6c077f 2023-12-27 benni -o)
32 db6c077f 2023-12-27 benni outdir=$2
33 db6c077f 2023-12-27 benni shift
34 db6c077f 2023-12-27 benni shift
35 db6c077f 2023-12-27 benni ;;
36 03bbf974 2023-12-27 benni -s)
37 03bbf974 2023-12-27 benni strip=1
38 03bbf974 2023-12-27 benni shift
39 03bbf974 2023-12-27 benni ;;
40 db6c077f 2023-12-27 benni -t)
41 db6c077f 2023-12-27 benni tmpdir=$2
42 db6c077f 2023-12-27 benni shift
43 db6c077f 2023-12-27 benni shift
44 db6c077f 2023-12-27 benni ;;
45 ec8f1d27 2023-12-27 benni -V)
46 ec8f1d27 2023-12-27 benni echo "got-archive-@VERSION@"
47 ec8f1d27 2023-12-27 benni exit 1
48 ec8f1d27 2023-12-27 benni ;;
49 db6c077f 2023-12-27 benni --)
50 db6c077f 2023-12-27 benni shift
51 db6c077f 2023-12-27 benni break
52 db6c077f 2023-12-27 benni ;;
53 db6c077f 2023-12-27 benni esac
54 db6c077f 2023-12-27 benni done
55 db6c077f 2023-12-27 benni
56 db6c077f 2023-12-27 benni [ $# -ne 1 ] && usage
57 db6c077f 2023-12-27 benni
58 db6c077f 2023-12-27 benni repo=$1
59 9362f1cc 2023-12-27 benni name=$(basename "$repo" .git)
60 db6c077f 2023-12-27 benni if [ "$strip" = 1 ]; then
61 db6c077f 2023-12-27 benni ver=$(echo "$branch" | sed 's/^v//g')
62 db6c077f 2023-12-27 benni else
63 db6c077f 2023-12-27 benni ver=$branch
64 db6c077f 2023-12-27 benni fi
65 db6c077f 2023-12-27 benni
66 db6c077f 2023-12-27 benni [ -d "$repo" ] || die 2 "Error: invalid repo: $repo"
67 db6c077f 2023-12-27 benni
68 db6c077f 2023-12-27 benni mkdir -p "$tmpdir"
69 db6c077f 2023-12-27 benni
70 db6c077f 2023-12-27 benni if [ "$branch" ]; then
71 db6c077f 2023-12-27 benni cname="$name-$ver"
72 03bbf974 2023-12-27 benni got checkout -q -c "$branch" "$repo" "$tmpdir/$cname" || die 3 "Error: failed to checkout"
73 db6c077f 2023-12-27 benni else
74 db6c077f 2023-12-27 benni cname="$name"
75 db6c077f 2023-12-27 benni got checkout -q "$repo" "$tmpdir/$cname" || die 3 "Error: failed to checkout"
76 db6c077f 2023-12-27 benni fi
77 db6c077f 2023-12-27 benni
78 db6c077f 2023-12-27 benni rm -rf "$tmpdir/$cname/.got"
79 db6c077f 2023-12-27 benni tar -czf "$outdir/$cname.tgz" -C "$tmpdir" "$cname" || die 4 "Error: failed to create tarball"
80 db6c077f 2023-12-27 benni rm -rf "$tmpdir/$cname"