]>
Commit | Line | Data |
---|---|---|
65f0d0ee | 1 | #!/bin/sh |
8ac069ac JH |
2 | # Copyright (c) 2005 Linus Torvalds |
3 | ||
215a7ad1 | 4 | . git-sh-setup || die "Not a git archive" |
d727782e | 5 | |
0fad0fdd | 6 | usage () { |
215a7ad1 | 7 | echo >&2 "Usage: git-tag [-a | -s] [-f] [-m "tag message"] tagname" |
0fad0fdd JH |
8 | exit 1 |
9 | } | |
10 | ||
11 | annotate= | |
d727782e LT |
12 | signed= |
13 | force= | |
c882bc93 | 14 | message= |
d727782e LT |
15 | while case "$#" in 0) break ;; esac |
16 | do | |
17 | case "$1" in | |
0fad0fdd JH |
18 | -a) |
19 | annotate=1 | |
20 | ;; | |
d727782e | 21 | -s) |
0fad0fdd | 22 | annotate=1 |
d727782e LT |
23 | signed=1 |
24 | ;; | |
25 | -f) | |
26 | force=1 | |
27 | ;; | |
c882bc93 CW |
28 | -m) |
29 | annotate=1 | |
30 | shift | |
31 | message="$1" | |
32 | ;; | |
0fad0fdd JH |
33 | -*) |
34 | usage | |
35 | ;; | |
d727782e LT |
36 | *) |
37 | break | |
38 | ;; | |
39 | esac | |
40 | shift | |
41 | done | |
42 | ||
918c05f1 | 43 | name="$1" |
0fad0fdd JH |
44 | [ "$name" ] || usage |
45 | if [ -e "$GIT_DIR/refs/tags/$name" -a -z "$force" ]; then | |
46 | die "tag '$name' already exists" | |
47 | fi | |
d727782e | 48 | shift |
8ac069ac | 49 | |
2ad77e67 | 50 | object=$(git-rev-parse --verify --default HEAD "$@") || exit 1 |
0fc65a45 | 51 | type=$(git-cat-file -t $object) || exit 1 |
c818566d | 52 | tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1 |
918c05f1 | 53 | |
0fad0fdd JH |
54 | trap 'rm -f .tmp-tag* .tagmsg .editmsg' 0 |
55 | ||
56 | if [ "$annotate" ]; then | |
c882bc93 CW |
57 | if [ -z "$message" ]; then |
58 | ( echo "#" | |
59 | echo "# Write a tag message" | |
60 | echo "#" ) > .editmsg | |
61 | ${VISUAL:-${EDITOR:-vi}} .editmsg || exit | |
62 | else | |
63 | echo "$message" > .editmsg | |
64 | fi | |
d727782e LT |
65 | |
66 | grep -v '^#' < .editmsg | git-stripspace > .tagmsg | |
918c05f1 | 67 | |
d727782e | 68 | [ -s .tagmsg ] || exit |
918c05f1 | 69 | |
d727782e LT |
70 | ( echo -e "object $object\ntype $type\ntag $name\ntagger $tagger\n"; cat .tagmsg ) > .tmp-tag |
71 | rm -f .tmp-tag.asc .tagmsg | |
0fad0fdd JH |
72 | if [ "$signed" ]; then |
73 | me=$(expr "$tagger" : '\(.*>\)') && | |
74 | gpg -bsa -u "$me" .tmp-tag && | |
75 | cat .tmp-tag.asc >>.tmp-tag || | |
76 | die "failed to sign the tag with GPG." | |
77 | fi | |
d727782e | 78 | object=$(git-mktag < .tmp-tag) |
d727782e | 79 | fi |
918c05f1 | 80 | |
ec3f5a46 | 81 | mkdir -p "$GIT_DIR/refs/tags" |
d727782e | 82 | echo $object > "$GIT_DIR/refs/tags/$name" |