Blob


1 #!/bin/sh
3 die() {
4 ec=$1
5 shift
6 echo "$@" >&2
7 exit "$ec"
8 }
10 usage() {
11 die 1 "Usage: got-archive [-afsV] [-o outdir] [-t tmpdir] repo [ref...]"
12 }
14 args=$(getopt afo:st:V $*)
15 [ $? -ne 0 ] && usage
17 set -- $args
19 strip=0
20 force=0
21 outdir=.
22 tmpdir="/tmp/got-archive"
24 while [ $# -ne 0 ]; do
25 case "$1" in
26 -a)
27 all=1
28 shift
29 ;;
30 -f)
31 force=1
32 shift
33 ;;
34 -o)
35 outdir=$2
36 shift
37 shift
38 ;;
39 -s)
40 strip=1
41 shift
42 ;;
43 -t)
44 tmpdir=$2
45 shift
46 shift
47 ;;
48 -V)
49 echo "got-archive-@VERSION@"
50 exit 1
51 ;;
52 --)
53 shift
54 break
55 ;;
56 esac
57 done
59 [ $# -lt 1 ] && usage
61 repo=$1
62 name=$(basename "$repo" .git)
63 mkdir -p "$tmpdir"
64 shift
65 [ -d "$repo" ] || die 2 "Error: invalid repo: $repo"
67 # $1 - ref
68 # $2 - name
69 gen() {
70 cdir="$tmpdir/$2"
71 tarfile="$outdir/$2.tgz"
73 [ -e "$tarfile" ] && [ "$force" = 0 ] && return
75 rm -rf "$cdir"
76 got checkout -q -c "$1" "$repo" "$cdir" || die 3 "Error: $2: failed to checkout: $2"
77 rm -rf "$cdir/.got"
78 tar -czf "$tarfile" -C "$tmpdir" "$2" || die 4 "Error: $2: failed to create tarball: $tarfile"
79 rm -rf "$cdir"
80 }
82 if [ "$all" = 1 ]; then
83 [ $# -ne 0 ] && die 1 "Error: Can't combine -a and explicit refs"
85 tags=$(find "$repo/refs/tags" -type f -exec basename {} \; 2>/dev/null)
86 [ $? -ne 0 ] && exit 0
87 set -- $tags
88 fi
90 mkdir -p "$outdir"
92 if [ $# -gt 0 ]; then
93 while [ $# -ne 0 ]; do
94 if [ "$strip" = 1 ]; then
95 ref=$(echo "$1" | sed 's/^v//g')
96 else
97 ref=$1
98 fi
99 gen "$1" "$name-$ref"
100 shift
101 done
102 else
103 gen "HEAD" "$name"
104 fi