X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FApp%2FRgit%2FRepository.pm;h=50cc9d015ff9dd6585f3499274582ed5e27be26d;hb=a43b4096bf0350b564465090554317935a84e7ef;hp=82c9f5607e79af6bed3a25da58ae043f5fc3f33c;hpb=67e585ffae69ce0c350a920658738d7864b1d54a;p=perl%2Fmodules%2Frgit.git diff --git a/lib/App/Rgit/Repository.pm b/lib/App/Rgit/Repository.pm index 82c9f56..50cc9d0 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; + } + 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