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

Re: [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Feb 13, 2008, 02:06 UTC
Message-ID
<alpine.LFD.1.00.0802121758220.2920@woody.linux-foundation.org>
In-Reply-To
<alpine.LSU.1.00.0802130108060.3870@racer.site>
On Wed, 13 Feb 2008, Johannes Schindelin wrote:
> 
> With XDL_MERGE_ZEALOUS_ALNUM, we use the following heuristics: when a
> hunk does not contain any letters or digits, it is treated as conflicting.
Well, I think this is interesting in itself, but..

To some degree it would be even more interesting to at least partially separate the issue of "what conflicts" with the issue of "how do we express things when they _do_ conflict".

IOW, it's quite possible that we want to have the ZEALOUS algorithm for doing conflict resolution (on the assumption that we want aggressively merge), but then when conflicts happen _despite_ being zealous in the resolver, print out the resulting conflict with near-by conflicts merged into bigger block.

Show 25 quoted lines
> In other words, a conflict which used to look like this:
> 
> 	<<<<<<<
> 	if (a == 1)
> 	=======
> 	if (a == 2)
> 	>>>>>>>
> 	{
> 	<<<<<<<
> 		b = 2;
> 	=======
> 		b = 1;
> 	>>>>>>>
> 
> will look like this with ZEALOUS_ALNUM:
> 
> 	<<<<<<<
> 	if (a == 1)
> 	{
> 		b = 2;
> 	=======
> 	if (a == 2)
> 	{
> 		b = 1;
> 	>>>>>>>

I think this is an improvement already, but to take the example that voltspike had:

 <<<<<<< HEAD:file.txt
 void newfunc1()
 =======
 void newfunc2()
 >>>>>>> merge:file.txt
 {
   int err;
 <<<<<<< HEAD:file.txt
   err = doSomething();
 =======
   err = doSomethingElse();
 >>>>>>> merge:file.txt

this does have alnum's in the shared region ("int err") so it wouldn't have been modified by this, but it would be nice to notice: "there were just two small lines between two conflicts, and we could actually make the final conflict marker _smaller_ by merging them", and just doing the reverse of xdl_refine_conflicts(), and do a "xdl_merge_conflicts()" before printout, and get

 <<<<<<< HEAD:file.txt
 void newfunc1()
 {
   int err;
   err = doSomething();
 =======
 void newfunc2()
 {
   int err;
   err = doSomethingElse();
 >>>>>>> merge:file.txt

(note how this really *is* smaller: it's 11 lines rather than 12 lines, because while we had to duplicate the two common lines in between the conflicts (+2), we got rid of the three marker lines (-3), giving us a net win of one line.

So the "merge adjacent conflicts" logic should actually be pretty simple: if there is less than three lines between two conflicts, the conflicts should always be merged, because the end result is smaller.

(And with three lines in between the end result is as many lines, but arguably simpler, so it's probably better to merge then too).

Hmm? What do you think?
			Linus
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 17 of 23 in “Merge-Recursive Improvements”
  1. Voltage SpikeFeb 12, 2008
  2. Stefan MonnierFeb 12, 2008
  3. Junio C HamanoFeb 12, 2008
  4. Linus TorvaldsFeb 12, 2008
  5. Johannes SchindelinFeb 13, 2008
  6. xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUMJohannes Schindelin, Feb 13, 2008
  7. Junio C HamanoFeb 13, 2008
  8. Johannes SchindelinFeb 13, 2008
  9. Junio C HamanoFeb 15, 2008
  10. Linus TorvaldsFeb 15, 2008
  11. Johannes SchindelinFeb 15, 2008
  12. Johannes SchindelinFeb 17, 2008
  13. 1/2 xdl_merge(): make XDL_MERGE_ZEALOUS output simplerJohannes Schindelin, Feb 17, 2008
  14. 2/2 xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUMJohannes Schindelin, Feb 17, 2008
  15. Junio C HamanoFeb 18, 2008
  16. Johannes SchindelinFeb 18, 2008
  17. Linus TorvaldsFeb 13, 2008
  18. Johannes SchindelinFeb 13, 2008
  19. Johannes SixtFeb 13, 2008
  20. Steffen ProhaskaFeb 13, 2008
  21. Voltage SpikeFeb 13, 2008
  22. Johannes SixtFeb 13, 2008
  23. Junio C HamanoFeb 15, 2008

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.