git-p4: fix key error for p4 problem
Some p4 failures result in an error, but the info['code'] is not set. These include a bad p4 executable, or a core dump from p4, and other odd internal errors where p4 fails to generate proper marshaled output. Make sure the info key exists before using it to avoid a python traceback. Signed-off-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
d00d2ed1c5
commit
68b2859389
|
@ -1440,10 +1440,13 @@ class P4Sync(Command):
|
||||||
% (p, revision)
|
% (p, revision)
|
||||||
for p in self.depotPaths])):
|
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"
|
sys.stderr.write("p4 returned an error: %s\n"
|
||||||
% info['data'])
|
% info['data'])
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
if 'p4ExitCode' in info:
|
||||||
|
sys.stderr.write("p4 exitcode: %s\n" % info['p4ExitCode'])
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
change = int(info["change"])
|
change = int(info["change"])
|
||||||
|
|
|
@ -45,6 +45,19 @@ test_expect_success 'basic git-p4 clone' '
|
||||||
rm -rf "$git" && mkdir "$git"
|
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' '
|
test_expect_success 'shutdown' '
|
||||||
pid=`pgrep -f p4d` &&
|
pid=`pgrep -f p4d` &&
|
||||||
test -n "$pid" &&
|
test -n "$pid" &&
|
||||||
|
|
Loading…
Reference in New Issue