X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FApp%2FRgit%2FRepository.pm;h=43c6d5b33cf1caa7c2d867ba8c810b311f324fca;hb=b70184fed49dd0135e68ab3491475f50521992f3;hp=82c9f5607e79af6bed3a25da58ae043f5fc3f33c;hpb=e267749b5294c865fa9584c6f15bb0af85e24e30;p=perl%2Fmodules%2Frgit.git diff --git a/lib/App/Rgit/Repository.pm b/lib/App/Rgit/Repository.pm index 82c9f56..43c6d5b 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/; @@ -129,6 +130,24 @@ sub run { s/\^([\^ngGwWbBR])/$escapes{$1}->()/eg for @args; } system { $conf->git } $conf->git, @args; + if ($? == -1) { + warn "Failed to execute git: $!\n"; + return -1, -1; + } + 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