Make git-rename-script behave much better when faced with input contain Perl
regular expression metacharacters.
Also, restore support for the GIT_DIR
Signed-off-by: Ryan Anderson <[EMAIL PROTECTED]>
---
git-rename-script | 26 ++++++++++++++++----------
1 files changed, 16 insertions(+), 10 deletions(-)
28d2bb7cbb38424c4c6879110bf8aff1e3e5ac42
diff --git a/git-rename-script b/git-rename-script
--- a/git-rename-script
+++ b/git-rename-script
@@ -12,8 +12,11 @@ use strict;
sub usage($);
# Sanity checks:
-unless ( -d ".git" && -d ".git/objects" &&
- -d ".git/objects/00" && -d ".git/refs") {
+my $GIT_DIR = $$ENV{'GIT_DIR'};
+$GIT_DIR = ".git" unless defined $GIT_DIR;
+
+unless ( -d $GIT_DIR && -d $GIT_DIR . "/objects" &&
+ -d $GIT_DIR . "/objects/00" && -d $GIT_DIR . "/refs") {
usage("Git repository not found.");
}
@@ -31,23 +34,26 @@ if (-e $dst) {
my (@allfiles,@srcfiles,@dstfiles);
-open(F,"-|","git-ls-files")
+$/ = "\0";
+open(F,"-|","git-ls-files","-z")
or die "Failed to open pipe from git-ls-files: " . $!;
[EMAIL PROTECTED] = <F>;
[EMAIL PROTECTED] = map { chomp; $_; } <F>;
close(F);
-chomp for @allfiles;
-
[EMAIL PROTECTED] = grep /^$src/, @allfiles;
+my $safesrc = quotemeta($src);
[EMAIL PROTECTED] = grep /^$safesrc/, @allfiles;
@dstfiles = @srcfiles;
-s#^$src(/|$)#$dst$1# for @dstfiles;
+s#^$safesrc(/|$)#$dst$1# for @dstfiles;
rename($src,$dst)
or die "rename failed: $!";
-system("git-update-cache","--remove","--",@srcfiles);
-system("git-update-cache","--add","--",@dstfiles);
+my $rc = system("git-update-cache","--add","--",@dstfiles);
+die "git-update-cache failed to add new name with code $?\n" if $rc;
+
+$rc = system("git-update-cache","--remove","--",@srcfiles);
+die "git-update-cache failed to remove old name with code $?\n" if $rc;
sub usage($) {
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html