diff options
author | Petr Baudis <pasky@suse.cz> | 2006-06-24 04:34:53 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-07-02 17:14:41 -0700 |
commit | 8f00660fc13df9ed22f059f032a65c60168a2057 (patch) | |
tree | fe184e860c26346834fa896cad291ceb4af512de | |
parent | d5c7721d586225c46c675b893b7693220e28cfd5 (diff) | |
download | git-8f00660fc13df9ed22f059f032a65c60168a2057.tar.gz git-8f00660fc13df9ed22f059f032a65c60168a2057.tar.xz |
Convert git-mv to use Git.pm
Fairly straightforward.
Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-x | git-mv.perl | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/git-mv.perl b/git-mv.perl index 75aa8feeb..f1bde4307 100755 --- a/git-mv.perl +++ b/git-mv.perl @@ -10,6 +10,7 @@ use warnings; use strict; use Getopt::Std; +use Git; sub usage() { print <<EOT; @@ -24,9 +25,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 +61,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 +83,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 +216,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'; } } |