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 67f102f4 2023-12-28 benni die 1 "Usage: got-archive [-afsV] [-o outdir] [-t tmpdir] repo [ref...]"
12 db6c077f 2023-12-27 benni }
13 db6c077f 2023-12-27 benni
14 67f102f4 2023-12-28 benni args=$(getopt afo: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 67f102f4 2023-12-28 benni force=0
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 67f102f4 2023-12-28 benni -a)
27 67f102f4 2023-12-28 benni all=1
28 db6c077f 2023-12-27 benni shift
29 67f102f4 2023-12-28 benni ;;
30 67f102f4 2023-12-28 benni -f)
31 67f102f4 2023-12-28 benni force=1
32 db6c077f 2023-12-27 benni shift
33 db6c077f 2023-12-27 benni ;;
34 db6c077f 2023-12-27 benni -o)
35 db6c077f 2023-12-27 benni outdir=$2
36 db6c077f 2023-12-27 benni shift
37 db6c077f 2023-12-27 benni shift
38 db6c077f 2023-12-27 benni ;;
39 03bbf974 2023-12-27 benni -s)
40 03bbf974 2023-12-27 benni strip=1
41 03bbf974 2023-12-27 benni shift
42 03bbf974 2023-12-27 benni ;;
43 db6c077f 2023-12-27 benni -t)
44 db6c077f 2023-12-27 benni tmpdir=$2
45 db6c077f 2023-12-27 benni shift
46 db6c077f 2023-12-27 benni shift
47 db6c077f 2023-12-27 benni ;;
48 ec8f1d27 2023-12-27 benni -V)
49 ec8f1d27 2023-12-27 benni echo "got-archive-@VERSION@"
50 ec8f1d27 2023-12-27 benni exit 1
51 ec8f1d27 2023-12-27 benni ;;
52 db6c077f 2023-12-27 benni --)
53 db6c077f 2023-12-27 benni shift
54 db6c077f 2023-12-27 benni break
55 db6c077f 2023-12-27 benni ;;
56 db6c077f 2023-12-27 benni esac
57 db6c077f 2023-12-27 benni done
58 db6c077f 2023-12-27 benni
59 67f102f4 2023-12-28 benni [ $# -lt 1 ] && usage
60 db6c077f 2023-12-27 benni
61 db6c077f 2023-12-27 benni repo=$1
62 9362f1cc 2023-12-27 benni name=$(basename "$repo" .git)
63 67f102f4 2023-12-28 benni mkdir -p "$tmpdir"
64 67f102f4 2023-12-28 benni shift
65 db6c077f 2023-12-27 benni [ -d "$repo" ] || die 2 "Error: invalid repo: $repo"
66 db6c077f 2023-12-27 benni
67 67f102f4 2023-12-28 benni # $1 - ref
68 67f102f4 2023-12-28 benni # $2 - name
69 67f102f4 2023-12-28 benni gen() {
70 67f102f4 2023-12-28 benni cdir="$tmpdir/$2"
71 67f102f4 2023-12-28 benni tarfile="$outdir/$2.tgz"
72 db6c077f 2023-12-27 benni
73 67f102f4 2023-12-28 benni [ -e "$tarfile" ] && [ "$force" = 0 ] && return
74 67f102f4 2023-12-28 benni
75 e68d8559 2023-12-27 benni rm -rf "$cdir"
76 edeab4fb 2023-12-28 benni got checkout -q -c "$1" "$repo" "$cdir" || die 3 "Error: $2: failed to checkout: $2"
77 67f102f4 2023-12-28 benni rm -rf "$cdir/.got"
78 edeab4fb 2023-12-28 benni tar -czf "$tarfile" -C "$tmpdir" "$2" || die 4 "Error: $2: failed to create tarball: $tarfile"
79 e68d8559 2023-12-27 benni rm -rf "$cdir"
80 67f102f4 2023-12-28 benni }
81 67f102f4 2023-12-28 benni
82 67f102f4 2023-12-28 benni if [ "$all" = 1 ]; then
83 67f102f4 2023-12-28 benni [ $# -ne 0 ] && die 1 "Error: Can't combine -a and explicit refs"
84 67f102f4 2023-12-28 benni
85 67f102f4 2023-12-28 benni tags=$(find "$repo/refs/tags" -type f -exec basename {} \; 2>/dev/null)
86 6d4d72f4 2023-12-28 benni [ $? -ne 0 ] && exit 0
87 67f102f4 2023-12-28 benni set -- $tags
88 db6c077f 2023-12-27 benni fi
89 db6c077f 2023-12-27 benni
90 67f102f4 2023-12-28 benni mkdir -p "$outdir"
91 67f102f4 2023-12-28 benni
92 67f102f4 2023-12-28 benni if [ $# -gt 0 ]; then
93 67f102f4 2023-12-28 benni while [ $# -ne 0 ]; do
94 67f102f4 2023-12-28 benni if [ "$strip" = 1 ]; then
95 67f102f4 2023-12-28 benni ref=$(echo "$1" | sed 's/^v//g')
96 67f102f4 2023-12-28 benni else
97 67f102f4 2023-12-28 benni ref=$1
98 67f102f4 2023-12-28 benni fi
99 67f102f4 2023-12-28 benni gen "$1" "$name-$ref"
100 67f102f4 2023-12-28 benni shift
101 67f102f4 2023-12-28 benni done
102 67f102f4 2023-12-28 benni else
103 67f102f4 2023-12-28 benni gen "HEAD" "$name"
104 67f102f4 2023-12-28 benni fi
105 67f102f4 2023-12-28 benni