+ unshift @args, $conf->git;
+ $conf->info('Executing "', join(' ', @args), '" into ', $self->work, "\n");
+ {
+ 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 { $args[0] } @args;
+ }
+ if ($? == -1) {
+ $conf->crit("Failed to execute git: $!\n");
+ return;
+ }
+ my $ret;
+ $ret = WEXITSTATUS($?) if WIFEXITED($?);
+ my $sig;
+ if (WIFSIGNALED($?)) {
+ $sig = WTERMSIG($?);
+ $conf->warn("git died with signal $sig\n");
+ if ($sig == SIGINT || $sig == SIGQUIT) {
+ $conf->err("Aborting\n");
+ exit $sig;
+ }
+ } elsif ($ret) {
+ $conf->info("git returned $ret\n");
+ }
+ return wantarray ? ($ret, $sig) : $ret;