Browse Source

Allow "-u" flag to tag signing

The current "git tag -s" thing always uses the tagger name as the signing
user key, which is very irritating, since my key is under my email
address, but the tagger key obviously contains the actual machine name
too.

Now, I could just use "GIT_COMMITTER_EMAIL" and force it to be my real
email, but I actually think that it's nice to see which machine I use for
my work.

So rather than force my tagger ID to have to match the gpg key name, just
support the "-u" flag to "git tag" instead. It implicitly enables signing,
since it doesn't make any sense without it. Thus:

	git tag -u <gpg-key-name> <tag-name> [<tagged-object>]

will use the named gpg key for signing.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Linus Torvalds 19 years ago committed by Junio C Hamano
parent
commit
bc162e40ea
  1. 22
      Documentation/git-tag.txt
  2. 18
      git-tag.sh

22
Documentation/git-tag.txt

@ -10,19 +10,27 @@ git-tag - Create a tag object signed with GPG


SYNOPSIS SYNOPSIS
-------- --------
'git-tag' [-s | -a] [-f] <name> 'git-tag' [-a | -s | -u <key-id>] [-f] [-m <msg>] <name>


DESCRIPTION DESCRIPTION
----------- -----------
Adds a "tag" reference in .git/refs/tags/ Adds a 'tag' reference in .git/refs/tags/


Unless "-f" is given, the tag must not yet exist in ".git/refs/tags" Unless `-f` is given, the tag must not yet exist in
`.git/refs/tags/` directory.


If "-s" or "-a" is passed, the user will be prompted for a tag message. If one of `-a`, `-s`, or `-u <key-id>` is passed, the command
and a tag object is created. Otherwise just the SHA1 object creates a 'tag' object, and requires the tag message. Unless
name of the commit object is written. `-m <msg>` is given, an editor is started for the user to type
in the tag message.


A GnuPG signed tag object will be created when "-s" is used. Otherwise just the SHA1 object name of the commit object is
written (i.e. an lightweight tag).

A GnuPG signed tag object will be created when `-s` or `-u
<key-id>` is used. When `-u <key-id>` is not used, the
committer identity for the current user is used to find the
GnuPG key for signing.




Author Author

18
git-tag.sh

@ -4,7 +4,7 @@
. git-sh-setup || die "Not a git archive" . git-sh-setup || die "Not a git archive"


usage () { usage () {
echo >&2 "Usage: git-tag [-a | -s] [-f] [-m "tag message"] tagname" echo >&2 "Usage: git-tag [-a | -s | -u <key-id>] [-f] [-m <msg>] <tagname>"
exit 1 exit 1
} }


@ -12,6 +12,7 @@ annotate=
signed= signed=
force= force=
message= message=
username=
while case "$#" in 0) break ;; esac while case "$#" in 0) break ;; esac
do do
case "$1" in case "$1" in
@ -30,6 +31,12 @@ do
shift shift
message="$1" message="$1"
;; ;;
-u)
annotate=1
signed=1
shift
username="$1"
;;
-*) -*)
usage usage
;; ;;
@ -50,6 +57,7 @@ shift
object=$(git-rev-parse --verify --default HEAD "$@") || exit 1 object=$(git-rev-parse --verify --default HEAD "$@") || exit 1
type=$(git-cat-file -t $object) || exit 1 type=$(git-cat-file -t $object) || exit 1
tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1 tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1
: ${username:=$(expr "$tagger" : '\(.*>\)')}


trap 'rm -f .tmp-tag* .tagmsg .editmsg' 0 trap 'rm -f .tmp-tag* .tagmsg .editmsg' 0


@ -65,13 +73,15 @@ if [ "$annotate" ]; then


grep -v '^#' < .editmsg | git-stripspace > .tagmsg grep -v '^#' < .editmsg | git-stripspace > .tagmsg


[ -s .tagmsg ] || exit [ -s .tagmsg ] || {
echo >&2 "No tag message?"
exit 1
}


( echo -e "object $object\ntype $type\ntag $name\ntagger $tagger\n"; cat .tagmsg ) > .tmp-tag ( echo -e "object $object\ntype $type\ntag $name\ntagger $tagger\n"; cat .tagmsg ) > .tmp-tag
rm -f .tmp-tag.asc .tagmsg rm -f .tmp-tag.asc .tagmsg
if [ "$signed" ]; then if [ "$signed" ]; then
me=$(expr "$tagger" : '\(.*>\)') && gpg -bsa -u "$username" .tmp-tag &&
gpg -bsa -u "$me" .tmp-tag &&
cat .tmp-tag.asc >>.tmp-tag || cat .tmp-tag.asc >>.tmp-tag ||
die "failed to sign the tag with GPG." die "failed to sign the tag with GPG."
fi fi

Loading…
Cancel
Save