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

[PATCH v5 15/15] fast-export: don't handle uninteresting refs

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 11, 2012, 13:59 UTC
Message-ID
<1352642392-28387-16-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1352642392-28387-1-git-send-email-felipe.contreras@gmail.com>
They have been marked as UNINTERESTING for a reason, lets respect that.
Currently the first ref is handled properly, but not the rest, so:
 % git fast-export master ^master

Would currently throw a reset for master (2nd ref), which is not what we want.

 % git fast-export master ^foo ^bar ^roo
 % git fast-export master salsa..tacos

Even if all these refs point to the same object; foo, bar, roo, salsa, and tacos would all get a reset, and to a non-existing object (invalid mark :0).

And even more, it would only happen if the ref is pointing to exactly the same commit, but not otherwise:

 % git fast-export ^next next
 reset refs/heads/next
 from :0
 % git fast-export ^next next^{commit}
 # nothing
 % git fast-export ^next next~0
 # nothing
 % git fast-export ^next next~1
 # nothing
 % git fast-export ^next next~2
 # nothing

The reason this happens is that before traversing the commits, fast-export checks if any of the refs point to the same object, and any duplicated ref gets added to a list in order to issue 'reset' commands after the traversing. Unfortunately, it's not even checking if the commit is flagged as UNINTERESTING. The fix of course, is to do precisely that.

The current behavior is most certainly not what we want. After this patch, nothing gets exported, because nothing was selected (everything is UNINTERESTING).

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 builtin/fast-export.c  | 4 +++-
 t/t9350-fast-export.sh | 6 ++++++
 2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 26f6d1c..7a310e4 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -529,7 +529,9 @@ static void get_tags_and_duplicates(struct object_array *pending,
 		 * sure it gets properly upddated eventually.
 		 */
 		if (commit->util || commit->object.flags & SHOWN)
-			string_list_append(extra_refs, full_name)->util = commit;
+			if (!(commit->object.flags & UNINTERESTING))
+				string_list_append(extra_refs, full_name)->util = commit;
+
 		if (!commit->util)
 			commit->util = full_name;
 	}
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index 67a7372..9b53ba7 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -469,4 +469,10 @@ test_expect_success 'refs are updated even if no commits need to be exported' '
 	test_cmp expected actual
 '
 
+test_expect_success 'proper extra refs handling' '
+	git fast-export master ^master master..master > actual &&
+	echo -n > expected &&
+	test_cmp expected actual
+'
+
 test_done
-- 
1.8.0
Previous: Junio C HamanoNext: Felipe Contreras
Message 39 of 65 in “fast-export and remote-testgit improvements”
  1. 00/15 fast-export and remote-testgit improvementsFelipe Contreras, Nov 11, 2012
  2. 01/15 fast-export: avoid importing blob marksFelipe Contreras, Nov 11, 2012
  3. Torsten BögershausenNov 11, 2012
  4. Jeff KingNov 11, 2012
  5. Junio C HamanoNov 12, 2012
  6. Felipe ContrerasNov 11, 2012
  7. 02/15 remote-testgit: fix direction of marksFelipe Contreras, Nov 11, 2012
  8. Max HornNov 11, 2012
  9. 03/15 remote-helpers: fix failure messageFelipe Contreras, Nov 11, 2012
  10. 04/15 Rename git-remote-testgit to git-remote-testpyFelipe Contreras, Nov 11, 2012
  11. 05/15 Add new simplified git-remote-testgitFelipe Contreras, Nov 11, 2012
  12. Max HornNov 11, 2012
  13. Junio C HamanoNov 21, 2012
  14. Felipe ContrerasNov 21, 2012
  15. 06/15 remote-testgit: get rid of non-local functionalityFelipe Contreras, Nov 11, 2012
  16. Junio C HamanoNov 21, 2012
  17. Felipe ContrerasNov 21, 2012
  18. 07/15 remote-testgit: remove irrelevant testFelipe Contreras, Nov 11, 2012
  19. 08/15 remote-testgit: cleanup testsFelipe Contreras, Nov 11, 2012
  20. Junio C HamanoNov 21, 2012
  21. Felipe ContrerasNov 22, 2012
  22. 09/15 remote-testgit: exercise more featuresFelipe Contreras, Nov 11, 2012
  23. Junio C HamanoNov 21, 2012
  24. Felipe ContrerasNov 21, 2012
  25. 10/15 remote-testgit: report success after an importFelipe Contreras, Nov 11, 2012
  26. 11/15 remote-testgit: make clear the 'done' featureFelipe Contreras, Nov 11, 2012
  27. Max HornNov 11, 2012
  28. Felipe ContrerasNov 11, 2012
  29. Max HornNov 12, 2012
  30. Jonathan NiederNov 12, 2012
  31. Felipe ContrerasNov 12, 2012
  32. Junio C HamanoNov 21, 2012
  33. Sverre RabbelierNov 21, 2012
  34. 12/15 fast-export: trivial cleanupFelipe Contreras, Nov 11, 2012
  35. 13/15 fast-export: fix comparison in testsFelipe Contreras, Nov 11, 2012
  36. 14/15 fast-export: make sure updated refs get updatedFelipe Contreras, Nov 11, 2012
  37. Max HornNov 11, 2012
  38. Junio C HamanoNov 21, 2012
  39. 15/15 fast-export: don't handle uninteresting refsFelipe Contreras, Nov 11, 2012
  40. Felipe ContrerasNov 12, 2012
  41. Junio C HamanoNov 20, 2012
  42. Felipe ContrerasNov 21, 2012
  43. Jonathan NiederNov 21, 2012
  44. Felipe ContrerasNov 21, 2012
  45. Junio C HamanoNov 21, 2012
  46. Felipe ContrerasNov 21, 2012
  47. Felipe ContrerasNov 21, 2012
  48. Jeff KingNov 21, 2012
  49. Felipe ContrerasNov 22, 2012
  50. Junio C HamanoNov 26, 2012
  51. Felipe ContrerasNov 26, 2012
  52. Johannes SchindelinNov 26, 2012
  53. Junio C HamanoNov 26, 2012
  54. Felipe ContrerasNov 26, 2012
  55. Johannes SchindelinNov 26, 2012
  56. Sverre RabbelierNov 26, 2012
  57. Junio C HamanoNov 26, 2012
  58. Max HornNov 21, 2012
  59. Felipe ContrerasNov 22, 2012
  60. Junio C HamanoNov 21, 2012
  61. Felipe ContrerasNov 22, 2012
  62. Felipe ContrerasNov 24, 2012
  63. Felipe ContrerasNov 21, 2012
  64. Junio C HamanoNov 21, 2012
  65. Felipe ContrerasNov 22, 2012

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.