From: Fahad Alrashed <fahad@xxxxxxxxxxx> During "git p4 clone" if p4 process returns an error from the server, it will store the message in the 'err' variable. Then it will send a text command "die-now" to git-fast-import. However, git-fast-import raises an exception: "fatal: Unsupported command: die-now" and err is never displayed. This patch ensures that err is shown to the end user. Signed-off-by: Fahad Alrashed <fahad@xxxxxxxxxxx> --- In git p4, git fast-import fails from die-now command and err (from Perforce) is not shown When importing from Perforce using git p4 clone <depot location>, cloning works fine until Perforce command p4 raises an error. This error message is stored in err variable then git-fast-import is sent a die-now command to kill it. An exception is raised fatal: Unsupported command: die-now. This patch forces python to call die() with the err message returned from Perforce. This commit fixes the root cause of a bug that took me hours to find. I'm sure many faced the cryptic error and declared that git-p4 is not working for them. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1668%2Falrashedf%2Fmaster-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1668/alrashedf/master-v3 Pull-Request: https://github.com/git/git/pull/1668 Range-diff vs v2: 1: 8d5b982bd08 ! 1: 16a0693b932 Bug fix: ensure P4 "err" is displayed when exception is raised. @@ Metadata Author: Fahad Alrashed <fahad@xxxxxxxxxxx> ## Commit message ## - Bug fix: ensure P4 "err" is displayed when exception is raised. + git-p4: show Perforce error to the user During "git p4 clone" if p4 process returns an error from the server, it will store the message in the 'err' variable. Then it will send a text command "die-now" to git-fast-import. However, git-fast-import raises an exception: "fatal: Unsupported command: die-now" and err is - never displayed. This patch ensures that err is dispayed using - "finally:". + never displayed. This patch ensures that err is shown to the end user. Signed-off-by: Fahad Alrashed <fahad@xxxxxxxxxxx> git-p4.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/git-p4.py b/git-p4.py index 28ab12c72b6..f1ab31d5403 100755 --- a/git-p4.py +++ b/git-p4.py @@ -3253,17 +3253,19 @@ def streamP4FilesCb(self, marshalled): if self.stream_have_file_info: if "depotFile" in self.stream_file: f = self.stream_file["depotFile"] - # force a failure in fast-import, else an empty - # commit will be made - self.gitStream.write("\n") - self.gitStream.write("die-now\n") - self.gitStream.close() - # ignore errors, but make sure it exits first - self.importProcess.wait() - if f: - die("Error from p4 print for %s: %s" % (f, err)) - else: - die("Error from p4 print: %s" % err) + try: + # force a failure in fast-import, else an empty + # commit will be made + self.gitStream.write("\n") + self.gitStream.write("die-now\n") + self.gitStream.close() + # ignore errors, but make sure it exits first + self.importProcess.wait() + finally: + if f: + die("Error from p4 print for %s: %s" % (f, err)) + else: + die("Error from p4 print: %s" % err) if 'depotFile' in marshalled and self.stream_have_file_info: # start of a new file - output the old one first base-commit: 235986be822c9f8689be2e9a0b7804d0b1b6d821 -- gitgitgadget