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

Re: [PATCH v2 2/3] rebase -i: re-fix short SHA-1 collision

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 22, 2020, 18:15 UTC
Message-ID
<xmqqr1zr73yh.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<nycvar.QRO.7.76.6.2001221508180.46@tvgsbejvaqbjf.bet>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 7 quoted lines
>> True.  Doesn't rev-parse have an appropriate option for this kind of
>> thing that gets rid of the need for "cut" in the first place?
>
> You mean `git rev-parse --short=4`? That does something _sligthly_
> different: it tries to shorten the OID to 4 characters _unless that would
> be ambiguous_. In our case, it _will_ be ambiguous. That's why I use
> `cut`.

Ah, yes of course; we want ambiguous prefix. I think a more thorough test would be to see that the output with --short=$n (where n is the length of the abbreviated object name in $colliding_sha1) is longer than $colliding_sha1 and the output prefix-matches $colliding_sha1 iow, something like

	abbreviated=$(git rev-parse --short=7 HEAD) &&
	case "$abbreviated" in
	"$colliding_sha1"?*) : happy ;;
	*) false ;;
	esac &&
	...
which would make sure that we are testing colliding case.
> As to the crash in `rev-parse` _after_ printing out the OID: yes, there is
> a possibility for that. But that regression test is not about `rev-parse`,
> so it is actually a good thing that it would not trigger on such a bug ;-)

No, I do not think this test should be about rev-parse working correctly---just that if it is easy enough to make the test robust enough against such a breakage, it would be nice to do so, that's all.

I'm not Eric but I suspect his primary point was not about worrying about rev-parse crashing but more about avoiding to add a pattern less experienced developers can copy&paste without thinking enough to realize why it would be OK here and not OK in the context of the tests they are adding. That would be what I would worry about more than rev-parse crashing in the part of the test under discussion.

Thanks.
Previous: Johannes SchindelinNext: Johannes Schindelin via GitGitGadget
Message 24 of 28 in “Re-fix rebase -i with SHA-1 collisions”
  1. 0/3 Re-fix rebase -i with SHA-1 collisionsJohannes Schindelin via GitGitGadget, Jan 16, 2020
  2. 1/3 parse_insn_line(): improve error message when parsing failedJohannes Schindelin via GitGitGadget, Jan 16, 2020
  3. Junio C HamanoJan 17, 2020
  4. 2/3 rebase -i: re-fix short SHA-1 collisionJohannes Schindelin via GitGitGadget, Jan 16, 2020
  5. Junio C HamanoJan 17, 2020
  6. Johannes SchindelinJan 17, 2020
  7. 3/3 rebase -i: also avoid SHA-1 collisions with missingCommitsCheckJohannes Schindelin via GitGitGadget, Jan 16, 2020
  8. brian m. carlsonJan 16, 2020
  9. Johannes SchindelinJan 17, 2020
  10. brian m. carlsonJan 17, 2020
  11. Junio C HamanoJan 21, 2020
  12. 0/3 Re-fix rebase -i with SHA-1 collisionsJohannes Schindelin via GitGitGadget, Jan 17, 2020
  13. 1/3 parse_insn_line(): improve error message when parsing failedJohannes Schindelin via GitGitGadget, Jan 17, 2020
  14. Junio C HamanoJan 21, 2020
  15. Johannes SchindelinJan 23, 2020
  16. 3/3 rebase -i: also avoid SHA-1 collisions with missingCommitsCheckJohannes Schindelin via GitGitGadget, Jan 17, 2020
  17. 2/3 rebase -i: re-fix short SHA-1 collisionJohannes Schindelin via GitGitGadget, Jan 17, 2020
  18. Eric SunshineJan 20, 2020
  19. Johannes SchindelinJan 20, 2020
  20. Eric SunshineJan 20, 2020
  21. Johannes SchindelinJan 21, 2020
  22. Junio C HamanoJan 21, 2020
  23. Johannes SchindelinJan 22, 2020
  24. Junio C HamanoJan 22, 2020
  25. 0/3 Re-fix rebase -i with SHA-1 collisionsJohannes Schindelin via GitGitGadget, Jan 23, 2020
  26. 1/3 parse_insn_line(): improve error message when parsing failedJohannes Schindelin via GitGitGadget, Jan 23, 2020
  27. 2/3 rebase -i: re-fix short SHA-1 collisionJohannes Schindelin via GitGitGadget, Jan 23, 2020
  28. 3/3 rebase -i: also avoid SHA-1 collisions with missingCommitsCheckJohannes Schindelin via GitGitGadget, Jan 23, 2020

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.