git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Make git-rename-script behave better with input containing Perl regexp metachars.

From
RARyan 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($) {
Previous: Ryan Anderson
Message 5 of 5 in “Add support for directories to git-rename-script.”
  1. Add support for directories to git-rename-script.Ryan Anderson, Jul 25, 2005
  2. Add documentation for git-rename-scriptRyan Anderson, Jul 25, 2005
  3. Junio C HamanoJul 25, 2005
  4. Make git-rename-script behave much better when faced with input contain Perl regular expression metacharacters.Ryan Anderson, Jul 26, 2005
  5. Make git-rename-script behave better with input containing Perl regexp metachars.Ryan Anderson, Jul 26, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.