Thread (5 messages) 5 messages, 2 authors, 2021-12-17

Re: [PATCH 1/2] git-p4: print size values in appropriate units

flat view

From: Andrew Oakley <hidden>
Date: 2021-12-17 16:56:33

On Fri, 17 Dec 2021 14:59:48 +0000
Joel Holdsworth [off-list ref] wrote:
quoted hunk ↗ jump to hunk
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 <redacted>
---
 git-p4.py | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index 2b4500226a..8c1130cb8f 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -56,6 +56,16 @@
 
 p4_access_checked = False
 
+def format_size_human_readable(num, suffix="B"):
+    """ Returns a number of units (typically bytes) formatted as a
human-readable
+        string.
+    """
+    for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
+        if abs(num) < 1024.0:
+            return "{:3.1f} {}{}".format(num, unit, suffix)
+        num /= 1024.0
+    return "{:.1f} Yi{}".format(num, suffix)
If it's always bytes, why keep the suffix separate?
quoted hunk ↗ jump to hunk
+
 def p4_build_cmd(cmd):
     """Build a suitable p4 command line.
 
@@ -2966,7 +2976,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 MB)\n' % (
+                file_path, relPath,
format_size_human_readable(size))) sys.stdout.flush()
You've left the "MB" in.  The same thing happens elsewhere.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help