Linus Torvalds | 65f0d0e | 2005-04-25 15:23:53 -0700 | [diff] [blame] | 1 | #!/bin/sh |
Junio C Hamano | 8ac069a | 2005-05-09 22:57:58 -0700 | [diff] [blame] | 2 | # Copyright (c) 2005 Linus Torvalds |
| 3 | |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 4 | USAGE='-l [<pattern>] | [-a | -s | -u <key-id>] [-f | -d] [-m <msg>] <tagname> [<head>]' |
freku045@student.liu.se | 806f36d | 2005-12-13 23:30:31 +0100 | [diff] [blame] | 5 | SUBDIRECTORY_OK='Yes' |
| 6 | . git-sh-setup |
Junio C Hamano | d165fa1 | 2005-11-27 23:33:54 -0800 | [diff] [blame] | 7 | |
Han-Wen Nienhuys | aabd769 | 2006-11-26 17:42:49 +0100 | [diff] [blame] | 8 | message_given= |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 9 | annotate= |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 10 | signed= |
| 11 | force= |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 12 | message= |
Linus Torvalds | bc162e4 | 2005-10-06 14:10:39 -0700 | [diff] [blame] | 13 | username= |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 14 | list= |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 15 | while case "$#" in 0) break ;; esac |
| 16 | do |
| 17 | case "$1" in |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 18 | -a) |
| 19 | annotate=1 |
| 20 | ;; |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 21 | -s) |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 22 | annotate=1 |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 23 | signed=1 |
| 24 | ;; |
| 25 | -f) |
| 26 | force=1 |
| 27 | ;; |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 28 | -l) |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 29 | case "$#" in |
| 30 | 1) |
Sean | e6ebb8a | 2006-05-14 20:07:39 -0400 | [diff] [blame] | 31 | set x . ;; |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 32 | esac |
Sean | e6ebb8a | 2006-05-14 20:07:39 -0400 | [diff] [blame] | 33 | shift |
| 34 | git rev-parse --symbolic --tags | sort | grep "$@" |
Junio C Hamano | b867c7c | 2006-02-17 04:04:39 -0800 | [diff] [blame] | 35 | exit $? |
| 36 | ;; |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 37 | -m) |
| 38 | annotate=1 |
| 39 | shift |
| 40 | message="$1" |
Han-Wen Nienhuys | aabd769 | 2006-11-26 17:42:49 +0100 | [diff] [blame] | 41 | if test "$#" = "0"; then |
| 42 | die "error: option -m needs an argument" |
| 43 | exit 2 |
| 44 | else |
| 45 | message_given=1 |
| 46 | fi |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 47 | ;; |
Linus Torvalds | bc162e4 | 2005-10-06 14:10:39 -0700 | [diff] [blame] | 48 | -u) |
| 49 | annotate=1 |
| 50 | signed=1 |
| 51 | shift |
| 52 | username="$1" |
| 53 | ;; |
Kai Ruemmler | 61f8151 | 2005-11-08 11:44:33 +0100 | [diff] [blame] | 54 | -d) |
| 55 | shift |
| 56 | tag_name="$1" |
Christian Couder | d3d0013 | 2006-10-01 22:16:22 +0200 | [diff] [blame] | 57 | tag=$(git-show-ref --verify --hash -- "refs/tags/$tag_name") || |
| 58 | die "Seriously, what tag are you talking about?" |
| 59 | git-update-ref -m 'tag: delete' -d "refs/tags/$tag_name" "$tag" && |
| 60 | echo "Deleted tag $tag_name." |
Kai Ruemmler | 61f8151 | 2005-11-08 11:44:33 +0100 | [diff] [blame] | 61 | exit $? |
| 62 | ;; |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 63 | -*) |
| 64 | usage |
| 65 | ;; |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 66 | *) |
| 67 | break |
| 68 | ;; |
| 69 | esac |
| 70 | shift |
| 71 | done |
| 72 | |
Linus Torvalds | 918c05f | 2005-07-08 18:23:06 -0700 | [diff] [blame] | 73 | name="$1" |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 74 | [ "$name" ] || usage |
Junio C Hamano | cede752 | 2006-09-27 02:06:31 -0700 | [diff] [blame] | 75 | prev=0000000000000000000000000000000000000000 |
Christian Couder | b431b28 | 2006-10-01 22:33:04 +0200 | [diff] [blame] | 76 | if git-show-ref --verify --quiet -- "refs/tags/$name" |
Junio C Hamano | cede752 | 2006-09-27 02:06:31 -0700 | [diff] [blame] | 77 | then |
| 78 | test -n "$force" || die "tag '$name' already exists" |
| 79 | prev=`git rev-parse "refs/tags/$name"` |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 80 | fi |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 81 | shift |
Junio C Hamano | 03feddd | 2005-10-13 18:57:39 -0700 | [diff] [blame] | 82 | git-check-ref-format "tags/$name" || |
| 83 | die "we do not like '$name' as a tag name." |
Junio C Hamano | 8ac069a | 2005-05-09 22:57:58 -0700 | [diff] [blame] | 84 | |
Junio C Hamano | 2ad77e6 | 2005-08-15 15:37:37 -0700 | [diff] [blame] | 85 | object=$(git-rev-parse --verify --default HEAD "$@") || exit 1 |
Junio C Hamano | 0fc65a4 | 2005-04-29 16:25:05 -0700 | [diff] [blame] | 86 | type=$(git-cat-file -t $object) || exit 1 |
Eric W. Biederman | c818566 | 2005-07-14 19:02:10 -0600 | [diff] [blame] | 87 | tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1 |
Mark Wooding | f327dbc | 2006-04-13 22:01:24 +0000 | [diff] [blame] | 88 | : ${username:=$(expr "z$tagger" : 'z\(.*>\)')} |
Linus Torvalds | 918c05f | 2005-07-08 18:23:06 -0700 | [diff] [blame] | 89 | |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 90 | trap 'rm -f "$GIT_DIR"/TAG_TMP* "$GIT_DIR"/TAG_FINALMSG "$GIT_DIR"/TAG_EDITMSG' 0 |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 91 | |
| 92 | if [ "$annotate" ]; then |
Han-Wen Nienhuys | aabd769 | 2006-11-26 17:42:49 +0100 | [diff] [blame] | 93 | if [ -z "$message_given" ]; then |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 94 | ( echo "#" |
| 95 | echo "# Write a tag message" |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 96 | echo "#" ) > "$GIT_DIR"/TAG_EDITMSG |
| 97 | ${VISUAL:-${EDITOR:-vi}} "$GIT_DIR"/TAG_EDITMSG || exit |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 98 | else |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 99 | echo "$message" >"$GIT_DIR"/TAG_EDITMSG |
Chris Wright | c882bc9 | 2005-08-08 17:04:42 -0700 | [diff] [blame] | 100 | fi |
Linus Torvalds | 918c05f | 2005-07-08 18:23:06 -0700 | [diff] [blame] | 101 | |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 102 | grep -v '^#' <"$GIT_DIR"/TAG_EDITMSG | |
| 103 | git-stripspace >"$GIT_DIR"/TAG_FINALMSG |
Linus Torvalds | 918c05f | 2005-07-08 18:23:06 -0700 | [diff] [blame] | 104 | |
Han-Wen Nienhuys | aabd769 | 2006-11-26 17:42:49 +0100 | [diff] [blame] | 105 | [ -s "$GIT_DIR"/TAG_FINALMSG -o -n "$message_given" ] || { |
Linus Torvalds | bc162e4 | 2005-10-06 14:10:39 -0700 | [diff] [blame] | 106 | echo >&2 "No tag message?" |
| 107 | exit 1 |
| 108 | } |
Linus Torvalds | 918c05f | 2005-07-08 18:23:06 -0700 | [diff] [blame] | 109 | |
Alex Riesen | 0dbc4e8 | 2006-02-12 19:05:34 +0100 | [diff] [blame] | 110 | ( printf 'object %s\ntype %s\ntag %s\ntagger %s\n\n' \ |
| 111 | "$object" "$type" "$name" "$tagger"; |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 112 | cat "$GIT_DIR"/TAG_FINALMSG ) >"$GIT_DIR"/TAG_TMP |
| 113 | rm -f "$GIT_DIR"/TAG_TMP.asc "$GIT_DIR"/TAG_FINALMSG |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 114 | if [ "$signed" ]; then |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 115 | gpg -bsa -u "$username" "$GIT_DIR"/TAG_TMP && |
| 116 | cat "$GIT_DIR"/TAG_TMP.asc >>"$GIT_DIR"/TAG_TMP || |
Junio C Hamano | 0fad0fd | 2005-07-25 15:18:35 -0700 | [diff] [blame] | 117 | die "failed to sign the tag with GPG." |
| 118 | fi |
Junio C Hamano | a10aad6 | 2005-11-03 15:26:43 -0800 | [diff] [blame] | 119 | object=$(git-mktag < "$GIT_DIR"/TAG_TMP) |
Linus Torvalds | d727782 | 2005-07-23 15:21:22 -0700 | [diff] [blame] | 120 | fi |
| 121 | |
Christian Couder | 3673370 | 2006-10-02 06:36:15 +0200 | [diff] [blame] | 122 | git update-ref "refs/tags/$name" "$object" "$prev" |
| 123 | |