diff mbox series

[v3] git-p4: show Perforce error to the user

Message ID pull.1668.v3.git.git.1715206266214.gitgitgadget@gmail.com (mailing list archive)
State Accepted
Commit 55702c543ea39230847dfc635ea1b604d66d9b83
Headers show
Series [v3] git-p4: show Perforce error to the user | expand

Commit Message

Fahad Alrashed May 8, 2024, 10:11 p.m. UTC
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(-)


base-commit: 235986be822c9f8689be2e9a0b7804d0b1b6d821

Comments

Junio C Hamano May 9, 2024, 3:30 p.m. UTC | #1
"Fahad Alrashed via GitGitGadget" <gitgitgadget@gmail.com> writes:

> 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>
> ---

Looking good.  Queued.  Thanks.
diff mbox series

Patch

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