Thread (6 messages) flat view 6 messages, 4 authors, 2016-06-15

Re: git mv messed up file mapping if folders contain identical files

From: Stefan Beller <hidden>
Date: 2016-06-15 23:08:27

On Thu, Feb 25, 2016 at 3:49 AM, Kevin Daudt [off-list ref] wrote:
On Wed, Feb 24, 2016 at 04:38:11PM -0700, Bill Okara wrote:
quoted
Hi,

I noticed the following 'git mv' issue with:
git version 2.6.4


If there are identical files in different subfolders, 'git mv' the
root folder (and/or each file individually) will mess up the file path
mapping. that is, if having identical 'content.txt' file under
gitmvtest
    |--demo/content.txt
    |--dev/content.txt
    |--prod/content.txt

after doing the "git mv gitmvtest/resources
gitmvtest/src/main/resources", the 'git status' will show:

renamed:    gitmvtest/resources/demo/content.txt ->
gitmvtest/src/main/resources/demo/content.txt
renamed:    gitmvtest/resources/prod/content.txt ->
gitmvtest/src/main/resources/dev/content.txt            <== NOTE:
wrongly mapped the prod/content.txt to dev/content.txt
renamed:    gitmvtest/resources/dev/content.txt ->
gitmvtest/src/main/resources/prod/content.txt            <== NOTE:
wrongly mapped the dev/content.txt to prod/content.txt

I tried running 'git mv' on each file individually, got the same problem:
quoted
git mv gitmvtest/resources/demo/content.txt gitmvtest/src/main/resources/demo/content.txt
git mv gitmvtest/resources/dev/content.txt gitmvtest/src/main/resources/dev/content.txt
git mv gitmvtest/resources/prod/content.txt gitmvtest/src/main/resources/prod/content.txt
quoted
git status
renamed:    gitmvtest/resources/demo/content.txt ->
gitmvtest/src/main/resources/demo/content.txt
renamed:    gitmvtest/resources/prod/content.txt ->
gitmvtest/src/main/resources/dev/content.txt          <== WRONG
renamed:    gitmvtest/resources/dev/content.txt ->
gitmvtest/src/main/resources/prod/content.txt          <== WRONG


NOTE:
=======
if modified the content.txt in the 3 folders to contain different
data, then repeating the above 'git mv' will produce correct result,

renamed:    gitmvtest/resources/demo/content.txt ->
gitmvtest/src/main/resources/demo/content.txt       <== CORRECT
renamed:    gitmvtest/resources/dev/content.txt ->
gitmvtest/src/main/resources/dev/content.txt             <== CORRECT
renamed:    gitmvtest/resources/prod/content.txt ->
gitmvtest/src/main/resources/prod/content.txt          <== CORRECT



just want to see if this is a bug, user error (on my end), or??
This looks like the same issue as submodule--helper list has:
http://article.gmane.org/gmane.comp.version-control.git/287227
The submodule--helper is not called from within git-mv, so it may be
a similar but not the same issue. ;)

Looking through the code, the pathspec is not treated according to the newest
style convention, I think it is one of the last places where the
pathspec internals
are poked with, instead of using parse_parsespec && match_parsespec.
(That said it is very old hence often tested code in the wild. old
code != bad code)

Stefan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help