|
|
|
@ -99,7 +99,7 @@ increase notwithstanding).
@@ -99,7 +99,7 @@ increase notwithstanding).
|
|
|
|
|
|
|
|
|
|
use Carp qw(carp croak); # but croak is bad - throw instead |
|
|
|
|
use Error qw(:try); |
|
|
|
|
use Cwd qw(abs_path); |
|
|
|
|
use Cwd qw(abs_path cwd); |
|
|
|
|
use IPC::Open2 qw(open2); |
|
|
|
|
use Fcntl qw(SEEK_SET SEEK_CUR); |
|
|
|
|
} |
|
|
|
@ -396,7 +396,16 @@ See C<command_close_bidi_pipe()> for details.
@@ -396,7 +396,16 @@ See C<command_close_bidi_pipe()> for details.
|
|
|
|
|
|
|
|
|
|
sub command_bidi_pipe { |
|
|
|
|
my ($pid, $in, $out); |
|
|
|
|
my ($self) = _maybe_self(@_); |
|
|
|
|
local %ENV = %ENV; |
|
|
|
|
my $cwd_save = undef; |
|
|
|
|
if ($self) { |
|
|
|
|
shift; |
|
|
|
|
$cwd_save = cwd(); |
|
|
|
|
_setup_git_cmd_env($self); |
|
|
|
|
} |
|
|
|
|
$pid = open2($in, $out, 'git', @_); |
|
|
|
|
chdir($cwd_save) if $cwd_save; |
|
|
|
|
return ($pid, $in, $out, join(' ', @_)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -843,7 +852,7 @@ sub _open_hash_and_insert_object_if_needed {
@@ -843,7 +852,7 @@ sub _open_hash_and_insert_object_if_needed {
|
|
|
|
|
|
|
|
|
|
($self->{hash_object_pid}, $self->{hash_object_in}, |
|
|
|
|
$self->{hash_object_out}, $self->{hash_object_ctx}) = |
|
|
|
|
command_bidi_pipe(qw(hash-object -w --stdin-paths --no-filters)); |
|
|
|
|
$self->command_bidi_pipe(qw(hash-object -w --stdin-paths --no-filters)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sub _close_hash_and_insert_object { |
|
|
|
@ -932,7 +941,7 @@ sub _open_cat_blob_if_needed {
@@ -932,7 +941,7 @@ sub _open_cat_blob_if_needed {
|
|
|
|
|
|
|
|
|
|
($self->{cat_blob_pid}, $self->{cat_blob_in}, |
|
|
|
|
$self->{cat_blob_out}, $self->{cat_blob_ctx}) = |
|
|
|
|
command_bidi_pipe(qw(cat-file --batch)); |
|
|
|
|
$self->command_bidi_pipe(qw(cat-file --batch)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sub _close_cat_blob { |
|
|
|
@ -1279,6 +1288,14 @@ sub _command_common_pipe {
@@ -1279,6 +1288,14 @@ sub _command_common_pipe {
|
|
|
|
|
# for the given repository and execute the git command. |
|
|
|
|
sub _cmd_exec { |
|
|
|
|
my ($self, @args) = @_; |
|
|
|
|
_setup_git_cmd_env($self); |
|
|
|
|
_execv_git_cmd(@args); |
|
|
|
|
die qq[exec "@args" failed: $!]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# set up the appropriate state for git command |
|
|
|
|
sub _setup_git_cmd_env { |
|
|
|
|
my $self = shift; |
|
|
|
|
if ($self) { |
|
|
|
|
$self->repo_path() and $ENV{'GIT_DIR'} = $self->repo_path(); |
|
|
|
|
$self->repo_path() and $self->wc_path() |
|
|
|
@ -1286,8 +1303,6 @@ sub _cmd_exec {
@@ -1286,8 +1303,6 @@ sub _cmd_exec {
|
|
|
|
|
$self->wc_path() and chdir($self->wc_path()); |
|
|
|
|
$self->wc_subdir() and chdir($self->wc_subdir()); |
|
|
|
|
} |
|
|
|
|
_execv_git_cmd(@args); |
|
|
|
|
die qq[exec "@args" failed: $!]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Execute the given Git command ($_[0]) with arguments ($_[1..]) |
|
|
|
|