# git fast-export problem with tags

6 messages from 2008-11-22 to 2008-11-24. Participants: Miklos Vajna, Johannes Schindelin, Junio C Hamano.
Thread: https://gitlist.dev/t/16428

## Miklos Vajna, 2008-11-22 02:29

Subject: git fast-export problem with tags
Message-ID: <20081122022913.GC4746@genesis.frugalware.org>
URL: https://gitlist.dev/e/20081122022913.GC4746%40genesis.frugalware.org

```
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, 2008-11-22 18:22

Subject: [PATCH] Add new testcase to show fast-export does not always exports all tags
Message-ID: <1227378168-14992-1-git-send-email-vmiklos@frugalware.org>
URL: https://gitlist.dev/e/1227378168-14992-1-git-send-email-vmiklos%40frugalware.org
In-Reply-To: <20081122022913.GC4746@genesis.frugalware.org>

```
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, 2008-11-23 11:55

Subject: [PATCH 1/2] Simplify and fix t9301
Message-ID: <alpine.DEB.1.00.0811231254580.30769@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0811231254580.30769%40pacific.mpi-cbg.de
In-Reply-To: <1227378168-14992-1-git-send-email-vmiklos@frugalware.org>

```

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, 2008-11-23 11:55

Subject: [BUGFIX PATCH 2/2] fast-export: use an unsorted string list for extra_refs
Message-ID: <alpine.DEB.1.00.0811231255380.30769@pacific.mpi-cbg.de>
URL: https://gitlist.dev/e/alpine.DEB.1.00.0811231255380.30769%40pacific.mpi-cbg.de
In-Reply-To: <alpine.DEB.1.00.0811231254580.30769@pacific.mpi-cbg.de>

```

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, 2008-11-23 18:03

Subject: Re: [BUGFIX PATCH 2/2] fast-export: use an unsorted string list for extra_refs
Message-ID: <20081123180353.GM4746@genesis.frugalware.org>
URL: https://gitlist.dev/e/20081123180353.GM4746%40genesis.frugalware.org
In-Reply-To: <alpine.DEB.1.00.0811231255380.30769@pacific.mpi-cbg.de>

```
On Sun, Nov 23, 2008 at 12:55:54PM +0100, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> 
> 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!

```

## Junio C Hamano, 2008-11-24 01:07

Subject: Re: [BUGFIX PATCH 2/2] fast-export: use an unsorted string list for extra_refs
Message-ID: <7vwseund8i.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vwseund8i.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <20081123180353.GM4746@genesis.frugalware.org>

```
Thanks both; I do not have time to actually double-check and apply for the
next 36 hours or so, though.

```
