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

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

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 12, 2012, 16:28 UTC
Message-ID
<CAMP44s0WH-P7WY4UqhMX3WdrrSCYXUR9yCgsUV+mzLOCK5LkHQ@mail.gmail.com>
In-Reply-To
<1352642392-28387-16-git-send-email-felipe.contreras@gmail.com>

On Sun, Nov 11, 2012 at 2:59 PM, Felipe Contreras <felipe.contreras@gmail.com> wrote:

Show 44 quoted lines
> 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>
And here's yet another reason why this is obviously correct that I just found:

% git fast-export --use-done-feature --{import,export}-marks=.git/hg/origin/marks-git ^refs/hg/origin/branches/default ^refs/hg/origin/bookmarks/test6 refs/heads/test6 ^refs/hg/origin/bookmarks/master ^refs/hg/origin/bookmarks/test feature done reset refs/hg/origin/bookmarks/test from :4

reset refs/heads/test6 from :14

done
What is that refs/hg/origin/bookmarks/test doing there?

transport-helper does use a fast-export command like that to specify precisely what refs should be *IGNORED*, and yet fast-export will throw a reset for a ref that has been marked as UNINTERESTING. So, the receiving end in the helper will see a reset for a ref that it explicitly said was marked as outside it's refspec realm:

refspec refs/heads/*:refs/hg/origin/bookmarks/*

What is remote-hg supposed to do with 'refs/hg/origin/bookmarks/test'? There's nothing that can be done, it's a bug in fast-export that such a thing was exported in the first place. And the reason it happens is that another ref happens to be pointing to the same object, (in this case refs/hg/origin/branches/default)

So yeah, the patch is good.

Of course, transport-helper shouldn't even be specifying the negative (^) refs, but that's another story.

Cheers.
-- 
Felipe Contreras
Previous: Felipe ContrerasNext: Junio C Hamano
Message 40 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.