X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FApp%2FRgit%2FRepository.pm;h=ec96328a57882cc5e8f076b2b4ee2444141df69e;hb=313864be3ae1c0d2120b434ff18150c53f8b352e;hp=c282ebde52d6ce6113daf5896749f5c59ca9c138;hpb=d9762c0e9806aa955f290f36740496f0013747fd;p=perl%2Fmodules%2Frgit.git diff --git a/lib/App/Rgit/Repository.pm b/lib/App/Rgit/Repository.pm index c282ebd..ec96328 100644 --- a/lib/App/Rgit/Repository.pm +++ b/lib/App/Rgit/Repository.pm @@ -5,6 +5,7 @@ use warnings; use Cwd qw/cwd abs_path/; use File::Spec::Functions qw/catdir splitdir abs2rel file_name_is_absolute/; +use POSIX qw/WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG SIGINT SIGQUIT/; use Object::Tiny qw/fake repo bare name work/; @@ -16,11 +17,11 @@ App::Rgit::Repository - Class representing a Git repository. =head1 VERSION -Version 0.02 +Version 0.03 =cut -our $VERSION = '0.02'; +our $VERSION = '0.03'; =head1 DESCRIPTION @@ -44,7 +45,7 @@ sub new { $dir = cwd unless defined $dir; my ($repo, $bare, $name, $work); if ($args{fake}) { - $work = $dir; + $repo = $work = $dir; } else { my @tries = ($dir); my @chunks = splitdir $dir; @@ -128,7 +129,29 @@ sub run { ); s/\^([\^ngGwWbBR])/$escapes{$1}->()/eg for @args; } - system { $conf->git } $conf->git, @args; + { + local $ENV{GIT_DIR} = $self->repo if exists $ENV{GIT_DIR}; + local $ENV{GIT_EXEC_PATH} = $conf->git if exists $ENV{GIT_EXEC_PATH}; + system { $conf->git } $conf->git, @args; + } + if ($? == -1) { + warn "Failed to execute git: $!\n"; + return; + } + my $ret; + $ret = WEXITSTATUS($?) if WIFEXITED($?); + my $sig; + if (WIFSIGNALED($?)) { + $sig = WTERMSIG($?); + warn "git died with signal $sig\n"; + if ($sig == SIGINT || $sig == SIGQUIT) { + warn "Aborting.\n"; + exit $sig; + } + } elsif ($ret) { + warn "git returned $ret\n"; + } + return wantarray ? ($ret, $sig) : $ret; } =head2 C