[PATCH v3] git-p4: show Perforce error to the user
- From
- Fahad Alrashed via GitGitGadget <gitgitgadget@gmail.com>
- Date
- May 8, 2024, 22:11 UTC
- Message-ID
- <pull.1668.v3.git.git.1715206266214.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1668.v2.git.git.1715168796873.gitgitgadget@gmail.com>
From: Fahad Alrashed <fahad@keylock.net>
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@keylock.net>
---
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@keylock.net>
## 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@keylock.net>
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