Skip to contentSkip to conversation

git-mv dest ending with slash would deletes file only

PATCH Ben Lau 2 participants 2 messages Jun 15, 2016

lore
Share & tools
lore

Ben Lau

author
#0 lore raw

Hi,

I just tried to use the git-mv to move several files to another
directory. As the bash's auto completetion leaves the dest path ending with slash, the command become:

$ git-mv entry.c Documentation/
Ignoring path Documentation//entry.c
$ git status
#
# Updated but not checked in:
#   (will commit)
#
#       deleted:  entry.c
#

Checked from the source, git-update-index do not accept
multiple-successive-slashes (verify_path()@update-index.c), which should be considered as one slash according to POSIX standard.

However, changes the verify_path() function do not help. It seems
that git consider file with single slash and multiple slashes as two different object. Therefore, I added a line inside git-mv script to replace multiple-successive-slashes as one and it works fine in my system now.

git-mv.perl +1 -0
index 17e35b0..283d7e1 100755
@@ -92,6 +92,7 @@ while(scalar @srcArgs > 0) {
     $src = shift @srcArgs;
     $dst = shift @dstArgs;
     $bad = "";
+    $dst =~ s/\/+/\//g;
 
     if ($opt_v) {
 	print "Checking rename of '$src' to '$dst'\n";
update-index.c +0 -0
#1 lore raw
Quoted 2 lines · Ben Lau
$ git-mv entry.c Documentation/
Ignoring path Documentation//entry.c

Instead of mangling all destination paths, I only would strip a trailing slash of the destination argument. See my other mail with the patch.

Thanks for noting this bug,
Josef