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

[PATCH 12/12] Convert git-mv to use Git.pm

From
Petr Baudis <pasky@suse.cz>
Date
Jun 24, 2006, 02:34 UTC
Message-ID
<20060624023453.32751.73126.stgit@machine.or.cz>
In-Reply-To
<20060624023429.32751.80619.stgit@machine.or.cz>
Fairly straightforward.
Signed-off-by: Petr Baudis <pasky@suse.cz>
---
 git-mv.perl |   46 ++++++++++++++++++++++------------------------
 1 files changed, 22 insertions(+), 24 deletions(-)
diff --git a/git-mv.perl b/git-mv.perl
index 75aa8fe..b9e3537 100755
--- a/git-mv.perl
+++ b/git-mv.perl
@@ -10,6 +10,8 @@ # at the discretion of Linus Torvalds.
 use warnings;
 use strict;
 use Getopt::Std;
+use Git;
+use Error qw(:try);
 
 sub usage() {
 	print <<EOT;
@@ -24,9 +26,7 @@ getopts("hnfkv") || usage;
 usage() if $opt_h;
 @ARGV >= 1 or usage;
 
-my $GIT_DIR = `git rev-parse --git-dir`;
-exit 1 if $?; # rev-parse would have given "not a git dir" message.
-chomp($GIT_DIR);
+my $repo = Git->repository();
 
 my (@srcArgs, @dstArgs, @srcs, @dsts);
 my ($src, $dst, $base, $dstDir);
@@ -62,11 +62,11 @@ else {
     $dstDir = "";
 }
 
-my $subdir_prefix = `git rev-parse --show-prefix`;
-chomp($subdir_prefix);
+my $subdir_prefix = $repo->wc_subdir();
 
 # run in git base directory, so that git-ls-files lists all revisioned files
-chdir "$GIT_DIR/..";
+chdir $repo->wc_path();
+$repo->wc_chdir('');
 
 # normalize paths, needed to compare against versioned files and update-index
 # also, this is nicer to end-users by doing ".//a/./b/.//./c" ==> "a/b/c"
@@ -84,12 +84,10 @@ my (@allfiles,@srcfiles,@dstfiles);
 my $safesrc;
 my (%overwritten, %srcForDst);
 
-$/ = "\0";
-open(F, 'git-ls-files -z |')
-        or die "Failed to open pipe from git-ls-files: " . $!;
-
-@allfiles = map { chomp; $_; } <F>;
-close(F);
+{
+	local $/ = "\0";
+	@allfiles = $repo->command('ls-files', '-z');
+}
 
 
 my ($i, $bad);
@@ -219,28 +217,28 @@ if ($opt_n) {
 }
 else {
     if (@changedfiles) {
-	open(H, "| git-update-index -z --stdin")
-		or die "git-update-index failed to update changed files with code $!\n";
+	my ($fd, $ctx) = $repo->command_input_pipe('update-index', '-z', '--stdin');
 	foreach my $fileName (@changedfiles) {
-		print H "$fileName\0";
+		print $fd "$fileName\0";
 	}
-	close(H);
+	git_cmd_try { $repo->command_close_pipe($fd, $ctx); }
+		'git-update-index failed to update changed files with code %d';
     }
     if (@addedfiles) {
-	open(H, "| git-update-index --add -z --stdin")
-		or die "git-update-index failed to add new names with code $!\n";
+	my ($fd, $ctx) = $repo->command_input_pipe('update-index', '--add', '-z', '--stdin');
 	foreach my $fileName (@addedfiles) {
-		print H "$fileName\0";
+		print $fd "$fileName\0";
 	}
-	close(H);
+	git_cmd_try { $repo->command_close_pipe($fd, $ctx); }
+		'git-update-index failed to add new files with code %d';
     }
     if (@deletedfiles) {
-	open(H, "| git-update-index --remove -z --stdin")
-		or die "git-update-index failed to remove old names with code $!\n";
+	my ($fd, $ctx) = $repo->command_input_pipe('update-index', '--remove', '-z', '--stdin');
 	foreach my $fileName (@deletedfiles) {
-		print H "$fileName\0";
+		print $fd "$fileName\0";
 	}
-	close(H);
+	git_cmd_try { $repo->command_close_pipe($fd, $ctx); }
+		'git-update-index failed to remove old files with code %d';
     }
 }
 
Previous: Petr BaudisNext: Petr Baudis
Message 16 of 25 in “Introduce Git.pm (v4)”
  1. 01/12 Introduce Git.pm (v4)Petr Baudis, Jun 24, 2006
  2. 02/12 Git.pm: Implement Git::exec_path()Petr Baudis, Jun 24, 2006
  3. 03/12 Git.pm: Call external commands using execv_git_cmd()Petr Baudis, Jun 24, 2006
  4. 04/12 Git.pm: Implement Git::version()Petr Baudis, Jun 24, 2006
  5. 05/12 Customizable error handlersPetr Baudis, Jun 24, 2006
  6. 06/12 Add Error.pm to the distributionPetr Baudis, Jun 24, 2006
  7. 07/12 Git.pm: Better error handlingPetr Baudis, Jun 24, 2006
  8. Junio C HamanoJun 24, 2006
  9. Petr BaudisJun 24, 2006
  10. Petr BaudisJun 25, 2006
  11. Junio C HamanoJun 25, 2006
  12. 08/12 Git.pm: Handle failed commands' outputPetr Baudis, Jun 24, 2006
  13. 09/12 Git.pm: Enhance the command_pipe() mechanismPetr Baudis, Jun 24, 2006
  14. 10/12 Git.pm: Implement options for the command interfacePetr Baudis, Jun 24, 2006
  15. 11/12 Git.pm: Add support for subdirectories inside of working copiesPetr Baudis, Jun 24, 2006
  16. 12/12 Convert git-mv to use Git.pmPetr Baudis, Jun 24, 2006
  17. Petr BaudisJun 24, 2006
  18. Junio C HamanoJun 24, 2006
  19. Petr BaudisJun 24, 2006
  20. Junio C HamanoJun 24, 2006
  21. Petr BaudisJun 24, 2006
  22. Petr BaudisJun 24, 2006
  23. Junio C HamanoJun 24, 2006
  24. Petr BaudisJun 24, 2006
  25. Junio C HamanoJun 25, 2006

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.