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

Re: [PATCH 6/8] apply: fall back on three-way merge

From
Junio C Hamano <gitster@pobox.com>
Date
May 10, 2012, 21:06 UTC
Message-ID
<7vaa1fn3u8.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20120510203113.GB18276@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 11 quoted lines
> On Wed, May 09, 2012 at 11:02:23PM -0700, Junio C Hamano wrote:
> ...
>> +	/* No point falling back to 3-way merge in these cases */
>> +	if (patch->is_binary || patch->is_new || patch->is_delete ||
>> +	    S_ISGITLINK(patch->old_mode) || S_ISGITLINK(patch->new_mode))
>> +		return -1;
>
> Is it true that there is no point in doing a 3-way fallback when
> patch->is_binary? What if the user has a custom merge driver?
> ...
> It seems like we should just keep the logic here as stupid as possible,

Actually, the motivation behind that "No point" is to keep the logic as stupid as possible.

We had a history of setting up logic that covers cases far wider than we originally designed the behaviours for, leaving the corner case behaviour of the code "undefined", without saying exactly what is and what is not the defined use case, which lead users to try unexpected (possibly but not necessarily stupid) things and getting a random "you get whatever the code happens to do" results. The above is an attempt to limit the scope of the initial implementation to a narrow, well defined, and commonly occurring subset of the problem space.

I can buy that lifting "must not be binary" would be very cheap, but adding support for new/delete case would mean the index-stuffing part needs to gain more code, so removing the "not new, not delete" conditionals actually goes against keeping the logic as stupid as possible.

Previous: Jeff KingNext: Jeff King
Message 14 of 19 in “"git apply --threeway"”
  1. 0/8 "git apply --threeway"Junio C Hamano, May 10, 2012
  2. 1/8 apply: reformat commentJunio C Hamano, May 10, 2012
  3. 2/8 apply: accept --threeway command line optionJunio C Hamano, May 10, 2012
  4. Nguyen Thai Ngoc DuyMay 10, 2012
  5. Junio C HamanoMay 10, 2012
  6. 3/8 apply: split load_preimage() helper function outJunio C Hamano, May 10, 2012
  7. 4/8 apply: clear_image() clears things a bit moreJunio C Hamano, May 10, 2012
  8. 5/8 apply: refactor read_file_or_gitlink()Junio C Hamano, May 10, 2012
  9. 6/8 apply: fall back on three-way mergeJunio C Hamano, May 10, 2012
  10. Matthieu MoyMay 10, 2012
  11. Junio C HamanoMay 10, 2012
  12. Matthieu MoyMay 10, 2012
  13. Jeff KingMay 10, 2012
  14. Junio C HamanoMay 10, 2012
  15. Jeff KingMay 10, 2012
  16. 7/8 apply: plug the three-way merge logic inJunio C Hamano, May 10, 2012
  17. 8/8 apply: register conflicted stages to the indexJunio C Hamano, May 10, 2012
  18. Matthieu MoyMay 10, 2012
  19. Junio C HamanoMay 10, 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.