Bug fix: ensure P4 "err" is displayed when exception is raised.
PATCH 1/1 Bug fix: ensure P4 "err" is displayed when exception is raised.
From: Fahad Alrashed <[email protected]>
Bug fix: During "git p4 clone" if p4 process returns an error from the server, it will store it in variable "err". The 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:"
---
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-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1668/alrashedf/master-v1
Pull-Request: https://github.com/git/git/pull/1668
git-p4.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
git-p4.py +13 -11
@@ -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
Signature · 1 line
gitgitgadget
Hello Fahad,
Quoted 3 lines · Fahad Alrashed via GitGitGadget
From: Fahad Alrashed <[email protected]>
Bug fix: During "git p4 clone" if p4 process returns
Nit: I haven't seen us use a prefix for the commit message. Also we use a max line length of 72 characters (see .editorconfig). The commit message seems to be wrapped at a much lower threshold.
Quoted 1 line
an error from the server, it will store it in variable
perhaps in the 'err' variable or in a variable 'err'.
Quoted 1 line
"err". The it will send a text command "die-now" to
s/The/Then
Quoted 53 lines
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:"Signed-off-by Fahad Alrashed <[email protected]>---
In git p4, git fast-import fails from die-now command and err (from Perforce) is not shownWhen 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-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1668/alrashedf/master-v1
Pull-Request: https://github.com/git/git/pull/1668git-p4.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)git-p4.py +4
-11@@ -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")
git-p4.py def streamP4FilesCb(self, marshalled): · line 3269
Quoted 10 lines
git-p4.py +9
-0+ 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)
This part looks good.
Quoted 6 lines
git-p4.py +0
-0if 'depotFile' in marshalled and self.stream_have_file_info: # start of a new file - output the old one firstbase-commit:
235986be822c9f8689be2e9a0b7804d0b1b6d821--
gitgitgadget
Thanks,
Karthik
PATCH v2 1/1 Bug fix: ensure P4 "err" is displayed when exception is raised.
In reply to Fahad Alrashed via GitGitGadgetFrom: Fahad Alrashed <[email protected]>
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:".
---
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-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1668/alrashedf/master-v2
Pull-Request: https://github.com/git/git/pull/1668
Range-diff vs v1:
1: 8dd2c730128 ! 1: 8d5b982bd08 Bug fix: ensure P4 "err" is displayed when exception is raised.
@@ Metadata
## Commit message ##
Bug fix: ensure P4 "err" is displayed when exception is raised.
- Bug fix: During "git p4 clone" if p4 process returns
- an error from the server, it will store it in variable
- "err". The 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:"
+ 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:".
git-p4.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
git-p4.py +13 -11
@@ -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
Signature · 1 line
gitgitgadget
Quoted 2 lines · Fahad Alrashed via GitGitGadget
From: Fahad Alrashed <[email protected]>
Subject: Re: [PATCH v2] Bug fix: ensure P4 "err" is displayed when exception is raised.
Our convention is to use the name of the area as the prefix, e.g.,
git-p4: show Perforce error to the user
in the title. Documentation/SubmittingPatches has more guidance on the title, like omitting the full-stop at the end, and on the proposed log message in general.
Quoted 5 lines
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.
Nicely explained.
Quoted 2 lines
This patch ensures that err is dispayed using
"finally:".
Instead, we write it more like
Ensure that err is shown to the end user.
The implementation (i.e., catching an error with try/finally) can be seen from the patch text. What is more important to capture in the proposed log message is what _effect_ the commit wanted to make, which is a good way to show _why_ we are making the change.
The intent of the original code being to always die at this point. Even though it is necessary to enclose the earlier part up to .wait() inside a try block to catch an exception, the two calls to die() do not have to be inside finally block (in other words, finally block could be just a no-op, and the die() calls can be done after the whole try/finally block that kills the fast-import by sending die-now and makes sure .wait() sees the process go), which may have made the intent of the fix even more clear, which is "we use the try/finally construct only to work around an exception thrown by killing the fast-import process".
The patch posted as-is is not wrong per-se, though.
Thanks.
Quoted 37 lines
git-p4.py +13
-11@@ -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 firstbase-commit:
235986be822c9f8689be2e9a0b7804d0b1b6d821
PATCH v3 1/1 git-p4: show Perforce error to the user
In reply to Fahad Alrashed via GitGitGadgetFrom: Fahad Alrashed <[email protected]>
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.
---
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 <[email protected]>
## 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.
git-p4.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
git-p4.py +13 -11
@@ -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
Signature · 1 line
gitgitgadget
Re: [PATCH v3] git-p4: show Perforce error to the user
Quoted 10 lines · Fahad Alrashed via GitGitGadget
From: Fahad Alrashed <[email protected]>
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 <[email protected]>---
Looking good. Queued. Thanks.