THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Browse Source

git-p4: auto-delete named temporary file

Avoid double-open exceptions on Windows platform when
calculating for lfs compressed size threshold
(git-p4.largeFileCompressedThreshold) comparisons.

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 had double-open exception on Windows
platform because file still open from NamedTemporaryFile()
using 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>
Reviewed-by: Andrey Mazo <ahippo@yandex.com>
Acked-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
tags/v2.24.0-rc0
Philip.McGraw Junio C Hamano 2 months ago
parent
commit
de5abb5f7a
1 changed files with 6 additions and 7 deletions
  1. +6
    -7
      git-p4.py

+ 6
- 7
git-p4.py View File

@@ -1160,13 +1160,11 @@ class LargeFileSystem(object):
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
@@ -3525,8 +3523,9 @@ class P4Sync(Command, P4UserMap):
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):

Loading…
Cancel
Save