{"thread":{"id":"1249","subject":"[PATCH 6/6] Update tags to record who made them","startedAt":"2005-07-15T01:02:10Z","lastAt":"2005-07-15T01:02:10Z","messageCount":1,"participants":["Eric W. Biederman"],"isPatch":true,"patchVersion":1,"patchTotal":6},"messages":[{"id":"6161","messageId":"m17jfsyj8t.fsf@ebiederm.dsl.xmission.com","threadId":"1249","inReplyTo":null,"subject":"[PATCH 6/6] Update tags to record who made them","fromName":"Eric W. Biederman","fromEmail":"ebiederm@xmission.com","sentAt":"2005-07-15T01:02:10Z","receivedAt":"2005-07-15T01:02:10Z","isPatch":true,"sender":{"key":"ebiederm@xmission.com","avatar":"https://avatars.githubusercontent.com/u/7477136?v=4"},"body":"\nAnd finally what all of this has been leading up to.\nThe 2 line code change to record who made a tag,\nand the 8 line code change to check that we recorded\nthe tag.\n\nGosh the error checking is always so much bigger than the code :)\n\n---\n\n git-tag-script |    3 ++-\n mktag.c        |   10 ++++++++--\n 2 files changed, 10 insertions(+), 3 deletions(-)\n\n6ba7a00f34b28cf6761b517a2ad377c80780186b\ndiff --git a/git-tag-script b/git-tag-script\n--- a/git-tag-script\n+++ b/git-tag-script\n@@ -7,6 +7,7 @@ name=\"$1\"\n \n object=${2:-$(cat \"$GIT_DIR\"/HEAD)}\n type=$(git-cat-file -t $object) || exit 1\n+tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1\n \n ( echo \"#\"\n   echo \"# Write a tag message\"\n@@ -17,7 +18,7 @@ grep -v '^#' < .editmsg | git-stripspace\n \n [ -s .tagmsg ] || exit\n \n-( echo -e \"object $object\\ntype $type\\ntag $name\\n\"; cat .tagmsg ) > .tmp-tag\n+( echo -e \"object $object\\ntype $type\\ntag $name\\ntagger $tagger\\n\"; cat .tagmsg ) > .tmp-tag\n rm -f .tmp-tag.asc .tagmsg\n gpg -bsa .tmp-tag && cat .tmp-tag.asc >> .tmp-tag\n mkdir -p \"$GIT_DIR/refs/tags\"\ndiff --git a/mktag.c b/mktag.c\n--- a/mktag.c\n+++ b/mktag.c\n@@ -42,7 +42,7 @@ static int verify_tag(char *buffer, unsi\n \tint typelen;\n \tchar type[20];\n \tunsigned char sha1[20];\n-\tconst char *object, *type_line, *tag_line;\n+\tconst char *object, *type_line, *tag_line, *tagger_line;\n \n \tif (size < 64 || size > MAXSIZE-1)\n \t\treturn -1;\n@@ -92,6 +92,12 @@ static int verify_tag(char *buffer, unsi\n \t\treturn -1;\n \t}\n \n+\t/* Verify the tagger line */\n+\ttagger_line = tag_line;\n+\n+\tif (memcmp(tagger_line, \"tagger\", 6) || (tagger_line[6] == '\\n'))\n+\t\treturn -1;\n+\n \t/* The actual stuff afterwards we don't care about.. */\n \treturn 0;\n }\n@@ -119,7 +125,7 @@ int main(int argc, char **argv)\n \t\tsize += ret;\n \t}\n \n-\t// Verify it for some basic sanity: it needs to start with \"object <sha1>\\ntype \"\n+\t// Verify it for some basic sanity: it needs to start with \"object <sha1>\\ntype\\ntagger \"\n \tif (verify_tag(buffer, size) < 0)\n \t\tdie(\"invalid tag signature file\");\n \n"}]}