git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Merge-Recursive Improvements
@ 2008-02-12 22:16 Voltage Spike
  2008-02-12 23:03 ` Stefan Monnier
                   ` (3 more replies)
  0 siblings, 4 replies; 23+ messages in thread
From: Voltage Spike @ 2008-02-12 22:16 UTC (permalink / raw)
  To: git

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.

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2008-02-18 11:34 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-12 22:16 Merge-Recursive Improvements Voltage Spike
2008-02-12 23:03 ` Stefan Monnier
2008-02-12 23:11 ` Junio C Hamano
2008-02-12 23:48 ` Linus Torvalds
2008-02-13  0:05   ` Johannes Schindelin
2008-02-13  1:10     ` [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Johannes Schindelin
2008-02-13  1:34       ` Junio C Hamano
2008-02-13 11:16         ` Johannes Schindelin
2008-02-15 17:32           ` Junio C Hamano
2008-02-15 18:17             ` Linus Torvalds
2008-02-15 18:23               ` Johannes Schindelin
2008-02-17 19:06               ` Johannes Schindelin
2008-02-17 19:07                 ` [PATCH 1/2] xdl_merge(): make XDL_MERGE_ZEALOUS output simpler Johannes Schindelin
2008-02-17 19:07                   ` [PATCH(RFC) 2/2] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Johannes Schindelin
2008-02-18  8:35                   ` [PATCH 1/2] xdl_merge(): make XDL_MERGE_ZEALOUS output simpler Junio C Hamano
2008-02-18 11:33                     ` Johannes Schindelin
2008-02-13  2:06       ` [PATCH] xdl_merge(): introduce XDL_MERGE_ZEALOUS_ALNUM Linus Torvalds
2008-02-13 11:22         ` Johannes Schindelin
2008-02-13  7:39 ` Merge-Recursive Improvements Johannes Sixt
2008-02-13  8:17   ` Steffen Prohaska
2008-02-13  8:21   ` Voltage Spike
2008-02-13  8:46     ` Johannes Sixt
2008-02-15 19:21   ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).