git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/1] git-p4: auto-delete named temporary file

From
GGGit Gadget <gitgitgadget@gmail.com>
Date
Aug 26, 2019, 13:51 UTC
Message-ID
<CANg4QoGSVQWG3QXzoiA8oDsjXaXGoZ+WMNLSPpu75eJWdrWxLQ@mail.gmail.com>
In-Reply-To
<pull.303.git.gitgitgadget@gmail.com>
From: "Philip.McGraw" <Philip.McGraw@bentley.com>

Take new approach using the NamedTemporaryFile() file-like object as input to the ZipFile() which auto-deletes after implicit close leaving with scope.

Original code produced double-open problems on Windows platform from using already open NamedTemporaryFile() generated filename instead of object.

Thanks to Andrey for patiently suggesting several iterations on this change for avoiding exceptions!

Also print error details after resulting IOError to make debugging cause of exception less mysterious when it has nothing to do with "git version recent enough."

Signed-off-by: Philip.McGraw <Philip.McGraw@bentley.com>
---
 git-p4.py | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index c71a6832e2..33bdb14fd1 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1160,13 +1160,11 @@ def exceedsLargeFileThreshold(self, relPath, contents):
             if contentsSize <=
gitConfigInt('git-p4.largeFileCompressedThreshold'):
                 return False
             contentTempFile = self.generateTempFile(contents)
-            compressedContentFile =
tempfile.NamedTemporaryFile(prefix='git-p4-large-file', delete=False)
-            zf = zipfile.ZipFile(compressedContentFile.name, mode='w')
-            zf.write(contentTempFile, compress_type=zipfile.ZIP_DEFLATED)
-            zf.close()
-            compressedContentsSize = zf.infolist()[0].compress_size
+            compressedContentFile =
tempfile.NamedTemporaryFile(prefix='git-p4-large-file', delete=True)
+            with zipfile.ZipFile(compressedContentFile, mode='w') as zf:
+                zf.write(contentTempFile, compress_type=zipfile.ZIP_DEFLATED)
+                compressedContentsSize = zf.infolist()[0].compress_size
             os.remove(contentTempFile)
-            os.remove(compressedContentFile.name)
             if compressedContentsSize >
gitConfigInt('git-p4.largeFileCompressedThreshold'):
                 return True
         return False
@@ -3514,8 +3512,9 @@ def importHeadRevision(self, revision):
         self.updateOptionDict(details)
         try:
             self.commit(details,
self.extractFilesFromCommit(details), self.branch)
-        except IOError:
+        except IOError as err:
             print("IO error with git fast-import. Is your git version
recent enough?")
+            print("IO error details: {}".format(err))
             print(self.gitError.read())

     def openStreams(self):

--
gitgitgadget
Previous: Luke DiamandNext: Junio C Hamano
Message 7 of 12 in “git-p4: auto-delete named temporary file”
  1. 0/1 git-p4: auto-delete named temporary filePhilip McGraw via GitGitGadget, Aug 1, 2019
  2. AndreyAug 2, 2019
  3. 0/1 git-p4: auto-delete named temporary filePhilip McGraw via GitGitGadget, Aug 2, 2019
  4. 1/1 git-p4: auto-delete named temporary fileAndrey Mazo, Aug 27, 2019
  5. Junio C HamanoAug 27, 2019
  6. Luke DiamandAug 28, 2019
  7. 1/1 git-p4: auto-delete named temporary fileGit Gadget, Aug 26, 2019
  8. Junio C HamanoAug 26, 2019
  9. Johannes SchindelinAug 28, 2019
  10. Junio C HamanoAug 29, 2019
  11. Johannes SchindelinAug 29, 2019
  12. Junio C HamanoOct 6, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.