Răsfoiți Sursa

transform _chunk_content_equal into a global function to ease later benchmarking

Ronny Pfannschmidt 4 ani în urmă
părinte
comite
603023bbd5
2 a modificat fișierele cu 33 adăugiri și 33 ștergeri
  1. 30 30
      src/borg/item.pyx
  2. 3 3
      src/borg/testsuite/archiver.py

+ 30 - 30
src/borg/item.pyx

@@ -517,36 +517,36 @@ class ItemDiff:
             return self._item1.chunks == self._item2.chunks
         if self._item1.get_size() != self._item2.get_size():
             return False
-        return ItemDiff._chunk_content_equal(chunk_iterator1, chunk_iterator2)
+        return chunks_contents_equal(chunk_iterator1, chunk_iterator2)
 
-    @staticmethod
-    def _chunk_content_equal(chunks1, chunks2):
-        """
-        Compare chunk content and return True if they are identical.
 
-        The chunks must be given as chunk iterators (like returned by :meth:`.DownloadPipeline.fetch_many`).
-        """
+def chunks_contents_equal(chunks1, chunks2):
+    """
+    Compare chunk content and return True if they are identical.
 
-        end = object()
-        alen = ai = 0
-        blen = bi = 0
-        while True:
-            if not alen - ai:
-                a = next(chunks1, end)
-                if a is end:
-                    return not blen - bi and next(chunks2, end) is end
-                a = memoryview(a)
-                alen = len(a)
-                ai = 0
-            if not blen - bi:
-                b = next(chunks2, end)
-                if b is end:
-                    return not alen - ai and next(chunks1, end) is end
-                b = memoryview(b)
-                blen = len(b)
-                bi = 0
-            slicelen = min(alen - ai, blen - bi)
-            if a[ai:ai + slicelen] != b[bi:bi + slicelen]:
-                return False
-            ai += slicelen
-            bi += slicelen
+    The chunks must be given as chunk iterators (like returned by :meth:`.DownloadPipeline.fetch_many`).
+    """
+
+    end = object()
+    alen = ai = 0
+    blen = bi = 0
+    while True:
+        if not alen - ai:
+            a = next(chunks1, end)
+            if a is end:
+                return not blen - bi and next(chunks2, end) is end
+            a = memoryview(a)
+            alen = len(a)
+            ai = 0
+        if not blen - bi:
+            b = next(chunks2, end)
+            if b is end:
+                return not alen - ai and next(chunks1, end) is end
+            b = memoryview(b)
+            blen = len(b)
+            bi = 0
+        slicelen = min(alen - ai, blen - bi)
+        if a[ai:ai + slicelen] != b[bi:bi + slicelen]:
+            return False
+        ai += slicelen
+        bi += slicelen

+ 3 - 3
src/borg/testsuite/archiver.py

@@ -47,7 +47,7 @@ from ..helpers import msgpack
 from ..helpers import flags_noatime, flags_normal
 from ..nanorst import RstToTextLazy, rst_to_terminal
 from ..patterns import IECommand, PatternMatcher, parse_pattern
-from ..item import Item, ItemDiff
+from ..item import Item, ItemDiff, chunks_contents_equal
 from ..locking import LockFailed
 from ..logger import setup_logging
 from ..remote import RemoteRepository, PathNotAllowed
@@ -4218,8 +4218,8 @@ def test_chunk_content_equal():
     def ccc(a, b):
         chunks_a = [data for data in a]
         chunks_b = [data for data in b]
-        compare1 = ItemDiff._chunk_content_equal(iter(chunks_a), iter(chunks_b))
-        compare2 = ItemDiff._chunk_content_equal(iter(chunks_b), iter(chunks_a))
+        compare1 = chunks_contents_equal(iter(chunks_a), iter(chunks_b))
+        compare2 = chunks_contents_equal(iter(chunks_b), iter(chunks_a))
         assert compare1 == compare2
         return compare1
     assert ccc([