瀏覽代碼

Improve sizeof_fmt()

- Use built-in sign handling
- Format integer correctly when using biggest unit
- Use consistent format inside and outside of loop
Dark Dragon 5 年之前
父節點
當前提交
831448684c
共有 2 個文件被更改,包括 9 次插入8 次删除
  1. 8 7
      src/borg/helpers/parseformat.py
  2. 1 1
      src/borg/testsuite/helpers.py

+ 8 - 7
src/borg/helpers/parseformat.py

@@ -271,16 +271,17 @@ def parse_file_size(s):
 
 
 def sizeof_fmt(num, suffix='B', units=None, power=None, sep='', precision=2, sign=False):
-    prefix = '+' if sign and num > 0 else ''
-
+    sign = '+' if sign else ''
+    fmt = '{0:{1}.{2}f}{3}{4}{5}'
+    prec = 0
     for unit in units[:-1]:
         if abs(round(num, precision)) < power:
-            if isinstance(num, int):
-                return "{}{}{}{}{}".format(prefix, num, sep, unit, suffix)
-            else:
-                return "{}{:3.{}f}{}{}{}".format(prefix, num, precision, sep, unit, suffix)
+            break
         num /= float(power)
-    return "{}{:.{}f}{}{}{}".format(prefix, num, precision, sep, units[-1], suffix)
+        prec = precision
+    else:
+        unit = units[-1]
+    return fmt.format(num, sign, prec, sep, unit, suffix)
 
 
 def sizeof_fmt_iec(num, suffix='B', sep='', precision=2, sign=False):

+ 1 - 1
src/borg/testsuite/helpers.py

@@ -579,7 +579,7 @@ def test_file_size_precision():
 
 def test_file_size_sign():
     si_size_map = {
-        0: '0 B',
+        0: '+0 B',
         1: '+1 B',
         1234: '+1.23 kB',
         -1: '-1 B',