1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-03 22:28:09 +02:00

git-p4: print size values in appropriate units

The git-p4 script reports file sizes in various log messages.
Previously, in each case the script would print them as the number of
bytes divided by 1048576 i.e. the size in mebibytes, rounded down to an
integer.  This resulted in small files being described as having a size
of "0 MB".

This patch replaces the existing behaviour with a new helper function:
format_size_human_readable, which takes a number of bytes (or any other
quantity), and computes the appropriate prefix to use: none, Ki, Mi, Gi,
Ti, Pi, Ei, Zi, Yi.

For example, a size of 123456 will now be printed as "120.6 KiB" greatly
improving the readability of the log output.

Large valued prefixes such as pebi, exbi, zebi and yobi are included for
completeness, though they not expected to appear in any real-world
Perforce repository!

Signed-off-by: Joel Holdsworth <jholdsworth@nvidia.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Joel Holdsworth 2021-12-19 15:40:27 +00:00 committed by Junio C Hamano
parent e9d7761bb9
commit ae9b9509a7

View File

@ -56,6 +56,18 @@
p4_access_checked = False
def format_size_human_readable(num):
""" Returns a number of units (typically bytes) formatted as a human-readable
string.
"""
if num < 1024:
return '{:d} B'.format(num)
for unit in ["Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
num /= 1024.0
if num < 1024.0:
return "{:3.1f} {}B".format(num, unit)
return "{:.1f} YiB".format(num)
def p4_build_cmd(cmd):
"""Build a suitable p4 command line.
@ -2966,7 +2978,8 @@ def streamOneP4File(self, file, contents):
size = int(self.stream_file['fileSize'])
else:
size = 0 # deleted files don't get a fileSize apparently
sys.stdout.write('\r%s --> %s (%i MB)\n' % (file_path, relPath, size/1024/1024))
sys.stdout.write('\r%s --> %s (%s)\n' % (
file_path, relPath, format_size_human_readable(size)))
sys.stdout.flush()
(type_base, type_mods) = split_p4_type(file["type"])
@ -3064,9 +3077,8 @@ def streamP4FilesCb(self, marshalled):
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
)
err = 'Not enough space left on %s! Free at least %s.' % (
os.getcwd(), format_size_human_readable(required_bytes))
if err:
f = None
@ -3110,7 +3122,9 @@ def streamP4FilesCb(self, marshalled):
size = int(self.stream_file["fileSize"])
if size > 0:
progress = 100*self.stream_file['streamContentSize']/size
sys.stdout.write('\r%s %d%% (%i MB)' % (self.stream_file['depotFile'], progress, int(size/1024/1024)))
sys.stdout.write('\r%s %d%% (%s)' % (
self.stream_file['depotFile'], progress,
format_size_human_readable(size)))
sys.stdout.flush()
self.stream_have_file_info = True