From: Jeff King <peff@peff.net>
To: Mike Hommey <mh@glandium.org>
Cc: git@vger.kernel.org
Subject: Re: Should copy/rename detection consider file overwrites?
Date: Fri, 23 Jan 2015 06:04:19 -0500 [thread overview]
Message-ID: <20150123110418.GA10028@peff.net> (raw)
In-Reply-To: <20150123012908.GA8558@glandium.org>
On Fri, Jan 23, 2015 at 10:29:08AM +0900, Mike Hommey wrote:
> While fooling around with copy/rename detection, I noticed that it
> doesn't detect the case where you copy or rename a file on top of
> another:
>
> $ git init
> $ (echo foo; echo bar) > foo
If I replace this with a longer input, like:
cp /usr/share/dict/words foo
> $ git add foo
> $ git commit -m foo
> $ echo 0 > bar
> $ git add bar
> $ git commit -m bar
> $ git mv -f foo bar
> $ git commit -m foobar
> $ git log --oneline --reverse
> 7dc2765 foo
> b0c837d bar
> 88caeba foobar
> $ git blame -s -C -C bar
> 88caebab 1) foo
> 88caebab 2) bar
Then the blame shows me the initial "foo" commit. So I think it is
mainly that your toy example is too small (I think we will do
exact rename detection whatever the size is, but I expect we are getting
hung up on the break detection between "0\n" and "foo\nbar\n").
> I can see how this is not trivially representable in e.g. git diff-tree,
> but shouldn't at least blame try to tell that those lines actually come
> from 7dc2765?
diff-tree can show this, too, but you need to turn on "break detection"
which will notice that "bar" has essentially been rewritten (and then
consider its sides as candidates for rename detection). For example
(with the longer input, as above):
$ git diff-tree --name-status -M HEAD
c6fe146b0c73adcbc4dbc2e58eb83af9007678bc
M bar
D foo
$ git diff-tree --name-status -M -B HEAD
c6fe146b0c73adcbc4dbc2e58eb83af9007678bc
R100 foo bar
Presumably if you set the break score low enough, your original example
would behave the same way, but I couldn't get it to work (I didn't look
closely, but I imagine it is just so tiny that we hit the internal
limits on how low you can set the score).
-Peff
next prev parent reply other threads:[~2015-01-23 11:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-23 1:29 Should copy/rename detection consider file overwrites? Mike Hommey
2015-01-23 11:04 ` Jeff King [this message]
2015-01-23 22:37 ` Mike Hommey
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=20150123110418.GA10028@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=mh@glandium.org \
/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).