git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] fast-export: Omit tags that tag trees

From
newren@gmail.com <newren@gmail.com>
Date
Jun 22, 2009, 13:06 UTC
Message-ID
<1245676001-14734-2-git-send-email-newren@gmail.com>
In-Reply-To
<1245676001-14734-1-git-send-email-newren@gmail.com>
From: Elijah Newren <newren@gmail.com>

Commit c0582c53bcf4e83bba70e1ad23abbad31f96ebc8 introduced logic to just omit tags that point to tree objects. However, a case was missed resulting in a tag being output which pointed at "mark :0", which would cause fast-import to crash.

Signed-off-by: Elijah Newren <newren@gmail.com>
---
Includes changes suggested by Stephen Boyd (squashing commits together
and moving the NEEDSWORK comment to where it is still relevant) and
Johannes Sixt (fixing the testcase to remain in the right directory
even if git init fails and to catch failures in git fast-export).
 builtin-fast-export.c  |    8 +++++++-
 t/t9301-fast-export.sh |    8 +++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/builtin-fast-export.c b/builtin-fast-export.c
index 6cef810..891e2d4 100644
--- a/builtin-fast-export.c
+++ b/builtin-fast-export.c
@@ -407,9 +407,15 @@ static void handle_tags_and_duplicates(struct string_list *extra_refs)
 	for (i = extra_refs->nr - 1; i >= 0; i--) {
 		const char *name = extra_refs->items[i].string;
 		struct object *object = extra_refs->items[i].util;
+		struct tag *tag;
 		switch (object->type) {
 		case OBJ_TAG:
-			handle_tag(name, (struct tag *)object);
+			tag = (struct tag *)object;
+			if (tag->tagged->type == OBJ_TREE) {
+				/* Ignore this tag altogether */
+				return;
+			}
+			handle_tag(name, tag);
 			break;
 		case OBJ_COMMIT:
 			/* create refs pointing to already seen commits */
diff --git a/t/t9301-fast-export.sh b/t/t9301-fast-export.sh
index 8c8a9e6..3f13e6b 100755
--- a/t/t9301-fast-export.sh
+++ b/t/t9301-fast-export.sh
@@ -271,8 +271,14 @@ test_expect_success 'set-up a few more tags for tag export tests' '
 	git tag -a tag-obj_tag-obj -m "tagging a tag" tree_tag-obj
 '
 
+test_expect_success 'tree_tag'        '
+	mkdir result &&
+	(cd result && git init) &&
+	git fast-export tree_tag > fe-stream &&
+	(cd result && git fast-import < ../fe-stream)
+'
+
 # NEEDSWORK: not just check return status, but validate the output
-test_expect_success 'tree_tag'        'git fast-export tree_tag'
 test_expect_success 'tree_tag-obj'    'git fast-export tree_tag-obj'
 test_expect_success 'tag-obj_tag'     'git fast-export tag-obj_tag'
 test_expect_success 'tag-obj_tag-obj' 'git fast-export tag-obj_tag-obj'
-- 
1.6.0.6
Previous: newren@gmail.comNext: Junio C Hamano
Message 2 of 11 in “A few fast export fixups -- round 2”
  1. newren@gmail.comJun 22, 2009
  2. fast-export: Omit tags that tag treesnewren@gmail.com, Jun 22, 2009
  3. Junio C HamanoJun 22, 2009
  4. fast-export: Make sure we show actual ref names instead of "(null)"newren@gmail.com, Jun 22, 2009
  5. Junio C HamanoJun 22, 2009
  6. fast-export: Do parent rewriting to avoid dropping relevant commitsnewren@gmail.com, Jun 22, 2009
  7. fast-export: Add a --tag-of-filtered-object option for newly dangling tagsnewren@gmail.com, Jun 22, 2009
  8. Junio C HamanoJun 22, 2009
  9. Elijah NewrenJun 26, 2009
  10. Add new fast-export testcasesnewren@gmail.com, Jun 22, 2009
  11. fast-export: Document the fact that git-rev-list arguments are acceptednewren@gmail.com, Jun 22, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.