Linus Torvalds [EMAIL PROTECTED] writes:
On Tue, 5 Jul 2005, Eric W. Biederman wrote:
True but if you can you will get multiple tags with the
same suggested name. So you need so way to find the one you
care about.
I do agree that it would make sense to have a tagger field with the same
semantics as the committer in a commit (including all the same fields:
real name, email, and date).
Ok here is a patch that implements it.
I don't know how robust my code to get the defaults of tagger
email address and especially tagger name are but basically it
works.
In addition I added a message when git-tag-script is waiting
for you to type the tag message so people aren't confused.
And of course I modified git-mktag to check that the tagger
field is present.
Now git-pull-script just needs to be tweaked to optionally
add tags in the update into .git/refs/tags :) Using git-fsck-cache
to find tags is doable but it slows down as your archive grows.
Eric
diff --git a/date.c b/date.c
diff --git a/git-tag-script b/git-tag-script
--- a/git-tag-script
+++ b/git-tag-script
@@ -1,12 +1,30 @@
#!/bin/sh
# Copyright (c) 2005 Linus Torvalds
+usage() {
+ echo 'git tag tag name [sha1]'
+ exit 1
+}
+
: ${GIT_DIR=.git}
+if [ ! -d $GIT_DIR ]; then
+ echo Not a git directory 12
+ exit 1
+fi
+
+if [ $# -gt 2 -o $# -lt 1 ]; then
+ usage
+fi
object=${2:-$(cat $GIT_DIR/HEAD)}
type=$(git-cat-file -t $object) || exit 1
-( echo -e object $object\ntype $type\ntag $1\n; cat ) .tmp-tag
+tagger_name=${GIT_COMMITTER_NAME:-$(sed -n -e
s/^$(whoami):[^:]*:[^:]*:[^:]*:\([^:,]*\).*:.*$/\1/p /etc/passwd)}
+tagger_email=${GIT_COMMITTER_EMAIL:-$(whoami)@$(hostname --fqdn)}
+tagger_date=$(date -d ${GIT_COMMITTER_DATE:-$(date -R)} +%s %z) || exit 1
+echo Enter tag message now. ^D when finished
+( echo -e object $object\ntype $type\ntag $1\ntagger $tagger_name
$tagger_email $tagger_date\n; cat) .tmp-tag
rm -f .tmp-tag.asc
gpg -bsa .tmp-tag cat .tmp-tag.asc .tmp-tag
-git-mktag .tmp-tag
-#rm .tmp-tag .tmp-tag.sig
+exit 1
+./git-mktag .tmp-tag
+rm -f .tmp-tag .tmp-tag.sig
diff --git a/mktag.c b/mktag.c
--- a/mktag.c
+++ b/mktag.c
@@ -42,7 +42,7 @@ static int verify_tag(char *buffer, unsi
int typelen;
char type[20];
unsigned char sha1[20];
- const char *object, *type_line, *tag_line;
+ const char *object, *type_line, *tag_line, *tagger_line;
if (size 64 || size MAXSIZE-1)
return -1;
@@ -91,6 +91,11 @@ static int verify_tag(char *buffer, unsi
continue;
return -1;
}
+ /* Verify the tagger line */
+ tagger_line = tag_line;
+
+ if (memcmp(tagger_line, tagger , 7) || (tagger_line[7] == '\n'))
+ return -1;
/* The actual stuff afterwards we don't care about.. */
return 0;
@@ -119,7 +124,7 @@ int main(int argc, char **argv)
size += ret;
}
- // Verify it for some basic sanity: it needs to start with object
sha1\ntype
+ // Verify it for some basic sanity: it needs to start with object
sha1\ntype\ntagger
if (verify_tag(buffer, size) 0)
die(invalid tag signature file);
-
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html