git-p4: fix key error for p4 problem
authorPete Wyckoff <pw@padd.com>
Sat, 19 Feb 2011 13:17:55 +0000 (08:17 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 Feb 2011 17:50:16 +0000 (09:50 -0800)
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>
contrib/fast-import/git-p4
t/t9800-git-p4.sh

index 04ce7e3b020f489d59fe103970fc989d7b351127..2fefea4de5ee644d6cc1c6cf8a3e5d8524396743 100755 (executable)
@@ -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"])
index 2d354f86d04250e48c2e9fe9358282145a8c477e..c1ea4d445caa1bd30a7c97547b635d84abfbdb9e 100755 (executable)
@@ -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" &&