Browse Source

Merge pull request #6972 from glours/align_image_size_display_to_docker_cli

Format image size as decimal to be align with Docker CLI
Jean-Christophe Sirot 6 years ago
parent
commit
4be2fa010a
2 changed files with 15 additions and 11 deletions
  1. 2 2
      compose/cli/utils.py
  2. 13 9
      tests/unit/cli/utils_test.py

+ 2 - 2
compose/cli/utils.py

@@ -133,12 +133,12 @@ def generate_user_agent():
 
 def human_readable_file_size(size):
     suffixes = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', ]
-    order = int(math.log(size, 2) / 10) if size else 0
+    order = int(math.log(size, 1000)) if size else 0
     if order >= len(suffixes):
         order = len(suffixes) - 1
 
     return '{0:.4g} {1}'.format(
-        size / float(1 << (order * 10)),
+        size / pow(10, order * 3),
         suffixes[order]
     )
 

+ 13 - 9
tests/unit/cli/utils_test.py

@@ -29,16 +29,20 @@ class HumanReadableFileSizeTest(unittest.TestCase):
         assert human_readable_file_size(100) == '100 B'
 
     def test_1kb(self):
-        assert human_readable_file_size(1024) == '1 kB'
+        assert human_readable_file_size(1000) == '1 kB'
+        assert human_readable_file_size(1024) == '1.024 kB'
 
     def test_1023b(self):
-        assert human_readable_file_size(1023) == '1023 B'
+        assert human_readable_file_size(1023) == '1.023 kB'
+
+    def test_999b(self):
+        assert human_readable_file_size(999) == '999 B'
 
     def test_units(self):
-        assert human_readable_file_size((2 ** 10) ** 0) == '1 B'
-        assert human_readable_file_size((2 ** 10) ** 1) == '1 kB'
-        assert human_readable_file_size((2 ** 10) ** 2) == '1 MB'
-        assert human_readable_file_size((2 ** 10) ** 3) == '1 GB'
-        assert human_readable_file_size((2 ** 10) ** 4) == '1 TB'
-        assert human_readable_file_size((2 ** 10) ** 5) == '1 PB'
-        assert human_readable_file_size((2 ** 10) ** 6) == '1 EB'
+        assert human_readable_file_size((10 ** 3) ** 0) == '1 B'
+        assert human_readable_file_size((10 ** 3) ** 1) == '1 kB'
+        assert human_readable_file_size((10 ** 3) ** 2) == '1 MB'
+        assert human_readable_file_size((10 ** 3) ** 3) == '1 GB'
+        assert human_readable_file_size((10 ** 3) ** 4) == '1 TB'
+        assert human_readable_file_size((10 ** 3) ** 5) == '1 PB'
+        assert human_readable_file_size((10 ** 3) ** 6) == '1 EB'