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