{"thread":{"id":"2689","subject":"git-mv: keep git index consistent with file system on failed rename","startedAt":"2005-11-27T21:04:14Z","lastAt":"2005-11-27T21:04:14Z","messageCount":1,"participants":["Josef Weidendorfer"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"12811","messageId":"200511272204.14835.Josef.Weidendorfer@gmx.de","threadId":"2689","inReplyTo":null,"subject":"git-mv: keep git index consistent with file system on failed rename","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2005-11-27T21:04:14Z","receivedAt":"2005-11-27T21:04:14Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"When doing multiple renames, and a rename in the middle fails,\ngit-mv did not store the successful renames in the git index;\nthis is fixed by delaying the error message on a failed rename\nto after the git updating.\n\nSigned-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>\n---\nThis is actually independent from the just sent patch, but\nthe context lines shows it applied...\n\n git-mv.perl |   12 ++++++++++--\n 1 files changed, 10 insertions(+), 2 deletions(-)\n\napplies-to: 8acd56ea24d565996dc4618f7d7e4fa152d8623c\n81f4a3e528094e5e2b0221fd6e76edd205c8e56d\ndiff --git a/git-mv.perl b/git-mv.perl\nindex 990bec5..ac19876 100755\n--- a/git-mv.perl\n+++ b/git-mv.perl\n@@ -142,14 +142,17 @@ while(scalar @srcArgs > 0) {\n \n # Final pass: rename/move\n my (@deletedfiles,@addedfiles,@changedfiles);\n+$bad = \"\";\n while(scalar @srcs > 0) {\n     $src = shift @srcs;\n     $dst = shift @dsts;\n \n     if ($opt_n || $opt_v) { print \"Renaming $src to $dst\\n\"; }\n     if (!$opt_n) {\n-\trename($src,$dst)\n-\t    or die \"rename failed: $!\";\n+\tif (!rename($src,$dst)) {\n+\t    $bad = \"renaming '$src' failed: $!\";\n+\t    last;\n+\t}\n     }\n \n     $safesrc = quotemeta($src);\n@@ -209,3 +212,8 @@ else {\n \tclose(H);\n     }\n }\n+\n+if ($bad ne \"\") {\n+    print \"Error: $bad\\n\";\n+    exit(1);\n+}\n---\n0.99.9.GIT\n"}]}