X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-mv.perl;h=fe9c40e1b9ed81f0494bf2c20239c6a5d5b76d30;hb=38fd0721d0a2a1a723bc28fc0817e3571987b1ef;hp=8cd95c472ffb7b86fcd1faa0c7b8d365029b9597;hpb=5e6f85f6c1d988d125dfcba16bb43a9a65f9eab3;p=git.git diff --git a/git-mv.perl b/git-mv.perl index 8cd95c47..fe9c40e1 100755 --- a/git-mv.perl +++ b/git-mv.perl @@ -31,13 +31,14 @@ chomp($GIT_DIR); my (@srcArgs, @dstArgs, @srcs, @dsts); my ($src, $dst, $base, $dstDir); +# remove any trailing slash in arguments +for (@ARGV) { s/\/*$//; } + my $argCount = scalar @ARGV; if (-d $ARGV[$argCount-1]) { $dstDir = $ARGV[$argCount-1]; - # remove any trailing slash - $dstDir =~ s/\/$//; @srcArgs = @ARGV[0..$argCount-2]; - + foreach $src (@srcArgs) { $base = $src; $base =~ s/^.*\///; @@ -61,6 +62,16 @@ else { $dstDir = ""; } +# normalize paths, needed to compare against versioned files and update-index +# also, this is nicer to end-users by doing ".//a/./b/.//./c" ==> "a/b/c" +for (@srcArgs, @dstArgs) { + s|^\./||; + s|/\./|/| while (m|/\./|); + s|//+|/|g; + # Also "a/b/../c" ==> "a/c" + 1 while (s,(^|/)[^/]+/\.\./,$1,); +} + my (@allfiles,@srcfiles,@dstfiles); my $safesrc; my (%overwritten, %srcForDst);