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
Jeff King <peff@peff.net>
Date
May 10, 2012, 20:31 UTC
Message-ID
<20120510203113.GB18276@sigill.intra.peff.net>
In-Reply-To
<1336629745-22436-7-git-send-email-gitster@pobox.com>
On Wed, May 09, 2012 at 11:02:23PM -0700, Junio C Hamano wrote:
Show 13 quoted lines
> +static int try_threeway_fallback(struct image *image, struct patch *patch,
> +				 struct stat *st, struct cache_entry *ce)
> +{
> +	unsigned char pre_sha1[20], post_sha1[20], our_sha1[20];
> +	struct strbuf buf = STRBUF_INIT;
> +	size_t len;
> +	char *img;
> +	struct image tmp_image;
> +
> +	/* 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? For that matter, a custom driver could handle additions or deletions, too (e.g., for a sorted record-oriented file, merging two additions might just mean collating the records).

It seems like we should just keep the logic here as stupid as possible, try to setup the 3-way content, and then hand it off to the merge code to try to make something happen. The only thing we have to lose is a little bit of efficiency in setting up blobs that are unlikely to actually get merged.

-Peff
Previous: Matthieu MoyNext: Junio C Hamano
Message 13 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.