threads / discuss / 16428

git fast-export problem with tags

Subject: git fast-export problem with tags

## tl;dr

6 messages between Nov 22, 2008 and Nov 24, 2008.

replies: 5people: 3as markdown or json

Miklos Vajna· Nov 22, 2008, 02:29 UTC · lore
Hi Johannes,

It seems in some cases the tag messages of annotated tags are not exported. Here is a reproducer:

git init echo a > file git add file git commit -m i git tag -a -m "one dot zero" 1.0

Now the output of 'git fast-export --all' does not contain the "one dot zero" message.

But if you go a bit futher and make master point to a commit different to the tag:

echo b > file git add file git commit -m b

then the output of 'git fast-export --all' clearly has it.
Is this a bug or have I missed something? ;-)
Thanks.
Miklos Vajna· Nov 22, 2008, 18:22 UTC · re: Miklos Vajna · lore

[PATCH] Add new testcase to show fast-export does not always exports all tags

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
Here is a testcase for the bug I mentioned.
 t/t9301-fast-export.sh |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/t/t9301-fast-export.sh b/t/t9301-fast-export.sh
index 6ddd7c1..078832f 100755
--- a/t/t9301-fast-export.sh
+++ b/t/t9301-fast-export.sh
@@ -231,4 +231,15 @@ test_expect_success 'fast-export -C -C | fast-import' '
 
 '
 
+test_expect_failure 'fast-export | fast-import when master is tagged' '
+
+	git tag -m msg last &&
+	rm -rf new &&
+	mkdir new &&
+	git --git-dir=new/.git init &&
+	git fast-export -C -C --signed-tags=strip --all > output &&
+	test $(grep -c "^tag" output) = 3
+
+'
+
 test_done
-- 
1.6.0.4.770.gf38d.dirty
Johannes Schindelin· Nov 23, 2008, 11:55 UTC · re: Miklos Vajna · lore

[PATCH 1/2] Simplify and fix t9301

The recent addition to the test to show the tag related breakage was not minimal.

Further, it tested for the string "tag" at the start of the lines, which matches, "tagger", too. Test for "tag " instead.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	I'll have no problem if this is squashed into Miklos' patch.
 t/t9301-fast-export.sh |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/t/t9301-fast-export.sh b/t/t9301-fast-export.sh
index 078832f..9af50b5 100755
--- a/t/t9301-fast-export.sh
+++ b/t/t9301-fast-export.sh
@@ -234,11 +234,8 @@ test_expect_success 'fast-export -C -C | fast-import' '
 test_expect_failure 'fast-export | fast-import when master is tagged' '
 
 	git tag -m msg last &&
-	rm -rf new &&
-	mkdir new &&
-	git --git-dir=new/.git init &&
 	git fast-export -C -C --signed-tags=strip --all > output &&
-	test $(grep -c "^tag" output) = 3
+	test $(grep -c "^tag " output) = 3
 
 '
 
-- 
1.6.0.2.749.g0cc32
Johannes Schindelin· Nov 23, 2008, 11:55 UTC · re: Johannes Schindelin · lore

[BUGFIX PATCH 2/2] fast-export: use an unsorted string list for extra_refs

The list extra_refs contains tags and the objects referenced by them, so that they can be handled at the end. When a tag references a commit, that commit is added to the list using the same name.

Also, the function handle_tags_and_duplicates() relies on the order the items were added to extra_refs, so clearly we do not want to use a sorted list here.

Noticed by Miklos Vajna.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	My bad.  Sorry.
 builtin-fast-export.c  |    4 ++--
 t/t9301-fast-export.sh |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/builtin-fast-export.c b/builtin-fast-export.c
index 7c93eb8..7d5d57a 100644
--- a/builtin-fast-export.c
+++ b/builtin-fast-export.c
@@ -354,7 +354,7 @@ static void get_tags_and_duplicates(struct object_array *pending,
 		case OBJ_TAG:
 			tag = (struct tag *)e->item;
 			while (tag && tag->object.type == OBJ_TAG) {
-				string_list_insert(full_name, extra_refs)->util = tag;
+				string_list_append(full_name, extra_refs)->util = tag;
 				tag = (struct tag *)tag->tagged;
 			}
 			if (!tag)
@@ -374,7 +374,7 @@ static void get_tags_and_duplicates(struct object_array *pending,
 		}
 		if (commit->util)
 			/* more than one name for the same object */
-			string_list_insert(full_name, extra_refs)->util = commit;
+			string_list_append(full_name, extra_refs)->util = commit;
 		else
 			commit->util = full_name;
 	}
diff --git a/t/t9301-fast-export.sh b/t/t9301-fast-export.sh
index 9af50b5..2057435 100755
--- a/t/t9301-fast-export.sh
+++ b/t/t9301-fast-export.sh
@@ -231,7 +231,7 @@ test_expect_success 'fast-export -C -C | fast-import' '
 
 '
 
-test_expect_failure 'fast-export | fast-import when master is tagged' '
+test_expect_success 'fast-export | fast-import when master is tagged' '
 
 	git tag -m msg last &&
 	git fast-export -C -C --signed-tags=strip --all > output &&
-- 
1.6.0.2.749.g0cc32
Miklos Vajna· Nov 23, 2008, 18:03 UTC · re: Johannes Schindelin · lore

Re: [BUGFIX PATCH 2/2] fast-export: use an unsorted string list for extra_refs

On Sun, Nov 23, 2008 at 12:55:54PM +0100, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
Show 8 quoted lines
> 
> The list extra_refs contains tags and the objects referenced by them,
> so that they can be handled at the end.  When a tag references a
> commit, that commit is added to the list using the same name.
> 
> Also, the function handle_tags_and_duplicates() relies on the order
> the items were added to extra_refs, so clearly we do not want to
> use a sorted list here.
Tested-by: Miklos Vajna <vmiklos@frugalware.org>
Thanks!

← back to recent threads