diff options
author | Lars Schneider <larsxschneider@gmail.com> | 2015-09-26 09:55:02 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-10-03 10:21:13 -0700 |
commit | 4d25dc4475639395b4c567d947218613de359f09 (patch) | |
tree | 29f64051d577ed0343fbf733b67af9888caa4970 /git-p4.py | |
parent | d2176a5060c73a04846e270ab07b90aad4d8b8f0 (diff) | |
download | git-4d25dc4475639395b4c567d947218613de359f09.tar.gz |
git-p4: check free space during streaming
git-p4 will just halt if there is not enough disk space while
streaming content from P4 to Git. Add a check to ensure at least
4 times (arbitrarily chosen) the size of a streamed file is available.
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-p4.py')
-rwxr-xr-x | git-p4.py | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -104,6 +104,16 @@ def chdir(path, is_client_path=False): path = os.getcwd() os.environ['PWD'] = path +def calcDiskFree(): + """Return free space in bytes on the disk of the given dirname.""" + if platform.system() == 'Windows': + free_bytes = ctypes.c_ulonglong(0) + ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(os.getcwd()), None, None, ctypes.pointer(free_bytes)) + return free_bytes.value + else: + st = os.statvfs(os.getcwd()) + return st.f_bavail * st.f_frsize + def die(msg): if verbose: raise Exception(msg) @@ -2263,6 +2273,14 @@ class P4Sync(Command, P4UserMap): if marshalled["code"] == "error": if "data" in marshalled: err = marshalled["data"].rstrip() + + if not err and 'fileSize' in self.stream_file: + required_bytes = int((4 * int(self.stream_file["fileSize"])) - calcDiskFree()) + if required_bytes > 0: + err = 'Not enough space left on %s! Free at least %i MB.' % ( + os.getcwd(), required_bytes/1024/1024 + ) + if err: f = None if self.stream_have_file_info: |