[PATCH] Make git-rename-script behave better with input containing Perl regexp metachars.
- From
- Ryan Anderson <ryan@michonline.com>
- Date
- Jul 26, 2005, 07:40 UTC
- Message-ID
- <20050726074028.GL6098@mythryan2.michonline.com>
- In-Reply-To
- <20050726065657.GI6098@mythryan2.michonline.com>
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 <ryan@michonline.com> ---
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: " . $!; -@allfiles = <F>; +@allfiles = map { chomp; $_; } <F>; close(F); -chomp for @allfiles; - -@srcfiles = grep /^$src/, @allfiles; +my $safesrc = quotemeta($src); +@srcfiles = 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($) {