summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-12-19 22:41:21 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-12-20 03:25:06 (GMT)
commit88fbf67b78c7bbe6c94150e7cd05f9398b571c48 (patch)
tree6ac233c4cb1a6f3a7f49a8a246767f43f7a36299
parent4e46a8d62c551e11e21bd04e059e9ae3cdcfd029 (diff)
downloadgit-88fbf67b78c7bbe6c94150e7cd05f9398b571c48.zip
git-88fbf67b78c7bbe6c94150e7cd05f9398b571c48.tar.gz
git-88fbf67b78c7bbe6c94150e7cd05f9398b571c48.tar.bz2
fast-import: make tagger information optional
Even though newer Porcelain tools always record the tagger information when creating new tags, export/import pair should be able to faithfully reproduce ancient tag objects that lack tagger information. Signed-off-by: Junio C Hamano <gitster@pobox.com> Acked-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--fast-import.c26
-rwxr-xr-xt/t9300-fast-import.sh18
2 files changed, 33 insertions, 11 deletions
diff --git a/fast-import.c b/fast-import.c
index 13b3614..d58cca5 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -43,7 +43,7 @@ Format of STDIN stream:
new_tag ::= 'tag' sp tag_str lf
'from' sp (ref_str | hexsha1 | sha1exp_str | idnum) lf
- 'tagger' sp name '<' email '>' when lf
+ ('tagger' sp name '<' email '>' when lf)?
tag_msg;
tag_msg ::= data;
@@ -2264,23 +2264,27 @@ static void parse_new_tag(void)
read_next_command();
/* tagger ... */
- if (prefixcmp(command_buf.buf, "tagger "))
- die("Expected tagger command, got %s", command_buf.buf);
- tagger = parse_ident(command_buf.buf + 7);
+ if (!prefixcmp(command_buf.buf, "tagger ")) {
+ tagger = parse_ident(command_buf.buf + 7);
+ read_next_command();
+ } else
+ tagger = NULL;
/* tag payload/message */
- read_next_command();
parse_data(&msg);
/* build the tag object */
strbuf_reset(&new_data);
+
strbuf_addf(&new_data,
- "object %s\n"
- "type %s\n"
- "tag %s\n"
- "tagger %s\n"
- "\n",
- sha1_to_hex(sha1), commit_type, t->name, tagger);
+ "object %s\n"
+ "type %s\n"
+ "tag %s\n",
+ sha1_to_hex(sha1), commit_type, t->name);
+ if (tagger)
+ strbuf_addf(&new_data,
+ "tagger %s\n", tagger);
+ strbuf_addch(&new_data, '\n');
strbuf_addbuf(&new_data, &msg);
free(tagger);
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index dba3a1b..8b79de5 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -56,6 +56,12 @@ M 644 :2 file2
M 644 :3 file3
M 755 :4 file4
+tag series-A
+from :5
+data <<EOF
+An annotated tag without a tagger
+EOF
+
INPUT_END
test_expect_success \
'A: create pack from stdin' \
@@ -102,6 +108,18 @@ test_expect_success \
'git cat-file blob master:file4 >actual && test_cmp expect actual'
cat >expect <<EOF
+object $(git rev-parse refs/heads/master)
+type commit
+tag series-A
+
+An annotated tag without a tagger
+EOF
+test_expect_success 'A: verify tag/series-A' '
+ git cat-file tag tags/series-A >actual &&
+ test_cmp expect actual
+'
+
+cat >expect <<EOF
:2 `git rev-parse --verify master:file2`
:3 `git rev-parse --verify master:file3`
:4 `git rev-parse --verify master:file4`