]> git.vpit.fr Git - perl/modules/rgit.git/commitdiff
Check the value returned by git correctly. POSIX is now a dependency
authorVincent Pit <vince@profvince.com>
Tue, 7 Oct 2008 17:51:04 +0000 (19:51 +0200)
committerVincent Pit <vince@profvince.com>
Tue, 7 Oct 2008 17:51:04 +0000 (19:51 +0200)
Makefile.PL
bin/rgit
lib/App/Rgit/Repository.pm
t/20-each.t

index 64d2531098b939d2e409a871c7d264abe0f0554e..a3b5a0da9feaffda4b44b156e3e54df46f262803 100644 (file)
@@ -36,6 +36,7 @@ WriteMakefile(
         'File::Spec::Functions' => 0,
         'List::Util'            => 0,
         'Object::Tiny'          => 0,
+        'POSIX'                 => 0,
     },
     dist          => { 
         PREOP      => 'pod2text bin/rgit > $(DISTVNAME)/README; '
index e6bc9100cbb01edd930de2373521b6b353d5547c..53312f8ea1c4f19f956d294df6128568663e727c 100755 (executable)
--- a/bin/rgit
+++ b/bin/rgit
@@ -152,7 +152,7 @@ Add a remote to all repositories in "/foo/bar" to their bare counterpart in C<qu
 
 =head1 DEPENDENCIES
 
-The core modules L<Carp>, L<Cwd>, L<Exporter>, L<File::Find>, L<File::Spec::Functions> and L<List::Util>.
+The core modules L<Carp>, L<Cwd>, L<Exporter>, L<File::Find>, L<File::Spec::Functions>, L<List::Util> and L<POSIX>.
 
 L<Object::Tiny>.
 
index 82c9f5607e79af6bed3a25da58ae043f5fc3f33c..43c6d5b33cf1caa7c2d867ba8c810b311f324fca 100644 (file)
@@ -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<fake>
index 1c582464dcd9a9b566e66a2a0abd95b15b4ebf0a..ca87e8a0aa373134f1e3af9a54480adfaaf96ae1 100644 (file)
@@ -102,7 +102,7 @@ for my $cmd (qw/commit FAIL/) {
  isnt($ar, undef, "each $cmd has a defined object");
  my $exit = $ar->run;
  my $fail = $cmd eq 'FAIL' ? 1 : 0;
- is($exit, $fail << 8, "each $cmd returned $fail");
+ is($exit, $fail, "each $cmd returned $fail");
  my @lines = split /\n/, do { local $/; <$fh> };
  my $res = [ map [ split /\|/, $_ ], @lines ];
  my $exp = [ map [ $cmd, @$_ ], $fail ? $expected[0] : @expected ];