Merge-Recursive Improvements

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Voltage Spike
Date: Tuesday, February 12, 2008 - 3:16 pm

I would like to make a series of significant improvements to the
merge-recursive mechanism in git, but I was hoping to solicit some early
feedback before submitting patches.

First, git is overly zealous at merging differences and two functions  
added
at the same point in a file become intertwined during the merge. A  
trivial
example of this behavior:

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

Second, git doesn't tell me the original code inside the conflict  
markers so
I almost always resort to "MERGE_HEAD...ORIG_HEAD" and
"ORIG_HEAD...MERGE_HEAD" diffs to see what was going on. I could use an
external diff tool (yuck), but I would like to modify the conflict  
markers
to resemble those of Perforce:

   >>>>>>> merge-base:file.txt
   Original code.
   ======= HEAD:file.txt
   Head code.
   ======= merge:file.txt
   Merged code.
   <<<<<<<

Third, git doesn't appear to have any sense of context when performing a
merge. Another contrived example which wouldn't be flagged as a merge
conflict:

   ptr = malloc(len); // Added in HEAD.
   init();            // Included in merge-base.
   ptr = malloc(len); // Added in "merge".

Fourth, git doesn't provide a mechanism for merges to ignore whitespace
changes.

I resolved issues the first and the fourth through the introduction  
of new
configuration variables and trivial modifications to the manner in  
which we
call xdl_merge. I suspect the second and third issue may also be  
simple to
solve but would require that I modify libxdiff directly.

Are these changes something other people might be interested in? (It  
seems
odd that nobody is complaining about these really irritating flaws.)  
Should
I concern myself with writing a custom merge driver rather than  
modify core
behavior (even if the change is configurable)?  If I should focus on an
external driver, under what circumstances would merge.*.recursive  
come into
play (i.e., when do I have to worry about poor behavior for an "internal
merge")?

Thank you in advance for the feedback.

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Merge-Recursive Improvements, Voltage Spike, (Tue Feb 12, 3:16 pm)
Re: Merge-Recursive Improvements, Junio C Hamano, (Tue Feb 12, 4:11 pm)
Re: Merge-Recursive Improvements, Linus Torvalds, (Tue Feb 12, 4:48 pm)
Re: Merge-Recursive Improvements, Johannes Schindelin, (Tue Feb 12, 5:05 pm)
[PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM, Johannes Schindelin, (Tue Feb 12, 6:10 pm)
Re: [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM, Junio C Hamano, (Tue Feb 12, 6:34 pm)
Re: [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM, Linus Torvalds, (Tue Feb 12, 7:06 pm)
Re: Merge-Recursive Improvements, Johannes Sixt, (Wed Feb 13, 12:39 am)
Re: Merge-Recursive Improvements, Steffen Prohaska, (Wed Feb 13, 1:17 am)
Re: Merge-Recursive Improvements, Voltage Spike, (Wed Feb 13, 1:21 am)
Re: Merge-Recursive Improvements, Johannes Sixt, (Wed Feb 13, 1:46 am)
Re: [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM, Johannes Schindelin, (Wed Feb 13, 4:16 am)
Re: [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM, Johannes Schindelin, (Wed Feb 13, 4:22 am)
Re: Merge-Recursive Improvements, Junio C Hamano, (Fri Feb 15, 12:21 pm)