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