ls-tree: major rewrite to do pathspec
[gitweb.git] / git-mv.perl
index 990bec50343a337c90d269e3b860cc82fad414e3..53046bafd66ebc4c3a7ef5c65a6363ef5201dcdd 100755 (executable)
@@ -108,7 +108,7 @@ ()
        }
     }
     
-    if (($bad eq "") && ($src eq $dstDir)) {
+    if (($bad eq "") && ($dst =~ /^$safesrc\//)) {
        $bad = "can not move directory '$src' into itself";
     }
 
@@ -142,14 +142,22 @@ ()
 
 # Final pass: rename/move
 my (@deletedfiles,@addedfiles,@changedfiles);
+$bad = "";
 while(scalar @srcs > 0) {
     $src = shift @srcs;
     $dst = shift @dsts;
 
     if ($opt_n || $opt_v) { print "Renaming $src to $dst\n"; }
     if (!$opt_n) {
-       rename($src,$dst)
-           or die "rename failed: $!";
+       if (!rename($src,$dst)) {
+           $bad = "renaming '$src' failed: $!";
+           if ($opt_k) {
+               print "Warning: skipped: $bad\n";
+               $bad = "";
+               next;
+           }
+           last;
+       }
     }
 
     $safesrc = quotemeta($src);
@@ -209,3 +217,8 @@ ()
        close(H);
     }
 }
+
+if ($bad ne "") {
+    print "Error: $bad\n";
+    exit(1);
+}