Re: What's cooking in git.git (Jun 2011, #02; Sat, 11)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jun 13, 2011 at 10:27:50PM -0600, Elijah Newren wrote:

> On Sun, Jun 12, 2011 at 12:49 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> > Here are the topics that have been cooking. ÂCommits prefixed with '-' are
> > only in 'pu' while commits prefixed with '+' are in 'next'.
> >
> > --------------------------------------------------
> > [Stalled]
> >
> > * jk/maint-merge-rename-create (2011-03-25) 3 commits
> > Â- merge: turn on rewrite detection
> > Â- merge: handle renames with replacement content
> > Â- t3030: fix accidental success in symlink rename
> >
> > Peff wanted to reroll this. Perhaps will discard to make room for Elijah's
> > merge-recursive series in the meantime.
> 
> Peff: Do you want any help rerolling, updating, reviewing, etc.?  I
> don't want to cause any undue problems with my merge-recursive series,
> and besides, the idea you have in this series looks like it may be
> interesting.

Thanks. The sticking point in my series that there is a weird regression
it introduces, and I haven't quite figured out the cause.

I'm cc'ing Jay Soffian, who found it. You can reproduce with this recipe
(sorry, the chromium repo is huge, but I don't have a smaller test case
yet):

  git clone http://git.chromium.org/git/chromium.git &&
  cd chromium &&
  git config merge.renameLimit 0 &&
  git checkout 0f6d00c &&
  git cherry-pick d7081a74

Looking at d7081a74, you can see that it's a tiny commit, and in fact it
should cherry-pick just fine. But due to the 3-way merge that
cherry-pick does, we still end up considering a lot of renames between
the merge base (d7081a74^) and 0f6d00c. Which is fine and correct, of
course, but makes the merge a lot more complex than it would at first
appear.

With git v1.7.5.3, it works just fine. With my patches on top, it
reliably fails the merge (even though there were no conflicts!), and
leaves a ton of crufty temporary files in the working directory.

Bumping up the merge verbosity, it does report a bunch of rename/add
conflicts. Which are totally bogus, of course. Here's what I wrote
earlier to Jay:

   The final patch turned on break detection. The patch before it fixed
   the "source" case: when the source of a rename comes from something
   besides empty (because the source is a broken pair), we need to merge
   properly and not just delete. But I never did the "dest" case, in
   which merge-recursive assumes that renamed content started as empty.

   And that's why you see the bogus "rename/add" conflict, I think. It's
   assuming the file came from nowhere, but it came from a break pair.
   So the good news is I think I can come up with a simple test case,
   and the fix is probably something like comparing against the ancestor
   sha1 instead of the null sha1.

But then I got sidetracked, and as you probably know from working on
merge-recursive, it's some pretty hairy code. Every time I start to look
at it I get confused and can't remember what breakthrough I thought I
was close to making before. :)

If you have any input, I'd appreciate it.

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]