X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FApp%2FRgit%2FRepository.pm;h=43c6d5b33cf1caa7c2d867ba8c810b311f324fca;hb=b70184fed49dd0135e68ab3491475f50521992f3;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..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/; @@ -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 @@ -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