From: "David D. Kilzer" <ddkilzer@kilzer.net>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH] Fix rebase with file move when diff.renames = copies
Date: Thu, 22 Jul 2010 14:59:49 -0700 (PDT) [thread overview]
Message-ID: <681325.9577.qm@web30002.mail.mud.yahoo.com> (raw)
In-Reply-To: <20100722075133.GA9292@burratino>
On Jonathan Nieder wrote:
> David D. Kilzer wrote:
>
> > With diff.renames = copies, a rebase with a file move will fail with
> > the following error:
> >
> > fatal: mode change for <file>, which is not in current HEAD
> > Repository lacks necessary blobs to fall back on 3-way merge.
> > Cannot fall back to three-way merge.
> > Patch failed at 0001.
>
> I would think that the following works fine:
>
> git init test-repo &&
> cd test-repo &&
> echo hello >greeting.txt &&
> git add greeting.txt &&
> git commit -m base &&
> git checkout -b move &&
> git mv greeting.txt moved.txt &&
> git commit -m move &&
> git checkout master &&
> echo hi >greeting.txt &&
> git add greeting.txt &&
> git commit -m change &&
> git checkout move &&
> echo '[diff] renames = copies' >>.git/config &&
> git rebase master
>
> What am I doing wrong?
Given the following tree:
B' topic
/
A---B master
A: New file "F1" is committed.
B: New file "F2" is committed.
B': New file "F2" is committed (identical in content to "F2" on B), and "F1" is
renamed to "F3".
When the topic branch is rebased onto master with diff.renames=copies, git fails
when attempting to build a fake ancestor for F1. The key to reproducing the bug
is to have an identical new file added on both B and B'.
My original patch in <http://marc.info/?l=git&m=122635667614099&w=2> addressed
this in builtin-apply.c, but Junio didn't like this approach as noted in
<http://marc.info/?l=git&m=122636097120953&w=2>.
> Patch does not apply to master or maint, due to conflict with
> v1.7.1-rc0~37^2~5 (rebase: support automatic notes copying,
> 2010-03-12). One sneaky way to avoid this kind of thing would be to
> insert new tests at some logical point in the middle of a test script.
Sorry about that--I forgot to rebase it to maint before sending it.
> Test nitpicks:
Thanks! I'll make the requested changes in the next patch.
> This wants to notice that Y was already added so the top patch can be
> simplified to include only a rename.
Actually, this is the key to reproducing the bug!
> Can you explain why this test will fail without your patch?
Here is a stand-alone script that reproduces the bug:
git init test-repo &&
cd test-repo &&
echo hello > F1 &&
git add F1 &&
git commit -m "A" &&
git checkout -b topic &&
echo hi > F2 &&
git add F2 &&
git mv F1 F3 &&
git commit -m "B'" &&
git checkout master &&
echo hi > F2 &&
git add F2 &&
git commit -m "B" &&
git checkout topic &&
git config diff.renames copies &&
GIT_TRACE=1 git rebase master
Note that the test case in my patch depended on "F1" (which was "A") being
committed by an earlier test.
Dave
next prev parent reply other threads:[~2010-07-22 21:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-10 22:26 [PATCH] 3-way merge with file move fails when diff.renames = copies David D. Kilzer
2008-11-10 23:41 ` Johannes Schindelin
2008-11-10 23:53 ` [PATCH] Fix 3-way merge with file move " David D. Kilzer
2008-11-10 23:49 ` [PATCH] 3-way merge with file move fails " Junio C Hamano
2008-11-11 0:06 ` David D. Kilzer
2008-11-11 0:15 ` Junio C Hamano
2010-07-21 19:58 ` [PATCH] Fix rebase with file move " David D. Kilzer
2010-07-21 21:54 ` Junio C Hamano
2010-07-22 0:22 ` David D. Kilzer
2010-07-22 7:51 ` Jonathan Nieder
2010-07-22 21:59 ` David D. Kilzer [this message]
2010-07-23 17:01 ` [PATCH 0/5] " Jonathan Nieder
2010-07-23 17:03 ` [PATCH 1/5] t4150 (am): style tweaks Jonathan Nieder
2010-07-23 17:04 ` [PATCH 2/5] t4150 (am): futureproof against failing tests Jonathan Nieder
2010-07-23 17:04 ` [PATCH 3/5] Teach "apply --index-info" to handle rename patches Jonathan Nieder
2010-07-23 17:05 ` [PATCH 4/5] t3400 (rebase): whitespace cleanup Jonathan Nieder
2010-07-23 17:06 ` [PATCH 5/5] rebase: protect against diff.renames configuration Jonathan Nieder
2010-07-23 19:51 ` Sverre Rabbelier
2010-07-23 21:03 ` Junio C Hamano
2010-07-23 19:53 ` Sverre Rabbelier
2010-07-23 18:47 ` [PATCH 0/5] Fix rebase with file move when diff.renames = copies David D. Kilzer
2010-07-24 21:59 ` Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=681325.9577.qm@web30002.mail.mud.yahoo.com \
--to=ddkilzer@kilzer.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=jrnieder@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).