diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4 index 04ce7e3b020f489d59fe103970fc989d7b351127..2fefea4de5ee644d6cc1c6cf8a3e5d8524396743 100755 --- a/contrib/fast-import/git-p4 +++ b/contrib/fast-import/git-p4 @@ -1440,10 +1440,13 @@ class P4Sync(Command): % (p, revision) for p in self.depotPaths])): - if info['code'] == 'error': + if 'code' in info and info['code'] == 'error': sys.stderr.write("p4 returned an error: %s\n" % info['data']) sys.exit(1) + if 'p4ExitCode' in info: + sys.stderr.write("p4 exitcode: %s\n" % info['p4ExitCode']) + sys.exit(1) change = int(info["change"]) diff --git a/t/t9800-git-p4.sh b/t/t9800-git-p4.sh index 2d354f86d04250e48c2e9fe9358282145a8c477e..c1ea4d445caa1bd30a7c97547b635d84abfbdb9e 100755 --- a/t/t9800-git-p4.sh +++ b/t/t9800-git-p4.sh @@ -45,6 +45,19 @@ test_expect_success 'basic git-p4 clone' ' rm -rf "$git" && mkdir "$git" ' +test_expect_success 'exit when p4 fails to produce marshaled output' ' + badp4dir="$TRASH_DIRECTORY/badp4dir" && + mkdir -p "$badp4dir" && + cat >"$badp4dir"/p4 <<-EOF && + #!$SHELL_PATH + exit 1 + EOF + chmod 755 "$badp4dir"/p4 && + PATH="$badp4dir:$PATH" "$GITP4" clone --dest="$git" //depot >errs 2>&1 ; retval=$? && + test $retval -eq 1 && + test_must_fail grep -q Traceback errs +' + test_expect_success 'shutdown' ' pid=`pgrep -f p4d` && test -n "$pid" &&