Git.pm: Handle failed commands' output

Currently if an external command returns error exit code, a generic exception
is thrown and there is no chance for the caller to retrieve the command's
output.

This patch introduces a Git::Error::Command exception class which is thrown
in this case and contains both the error code and the captured command output.
You can use the new git_cmd_try statement to fatally catch the exception
while producing a user-friendly message.

It also adds command_close_pipe() for easier checking of exit status of
a command we have just a pipe handle of. It has partial forward dependency
on the next patch, but basically only in the area of documentation.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Petr Baudis
2006-06-24 04:34:44 +02:00
committed by Junio C Hamano
parent 97b16c0674
commit 8b9150e3e3
2 changed files with 183 additions and 22 deletions

View File

@ -7,6 +7,7 @@
use strict;
use Git;
use Error qw(:try);
my $repo = Git->repository();
@ -31,7 +32,17 @@ sub andjoin {
}
sub repoconfig {
my ($val) = $repo->command_oneline('repo-config', '--get', 'merge.summary');
my $val;
try {
$val = $repo->command_oneline('repo-config', '--get', 'merge.summary');
} catch Git::Error::Command with {
my ($E) = shift;
if ($E->value() == 1) {
return undef;
} else {
throw $E;
}
};
return $val;
}