瀏覽代碼

Move PackStreamReader from server to pack.

This will prevent a circular import in the next commit.

Change-Id: I4512d45b22461d8b4ed6fe35a1bc2577f67f8819
Dave Borowitz 14 年之前
父節點
當前提交
08c92bc83c
共有 3 個文件被更改,包括 45 次插入43 次删除
  1. 2 0
      NEWS
  2. 42 0
      dulwich/pack.py
  3. 1 43
      dulwich/server.py

+ 2 - 0
NEWS

@@ -44,6 +44,8 @@
 
   * Include offset in PackStreamReader results. (Dave Borowitz)
 
+  * Move PackStreamReader from server to pack. (Dave Borowitz)
+
  TEST CHANGES
 
   * If setuptools is installed, "python setup.py test" will now run the testsuite.

+ 42 - 0
dulwich/pack.py

@@ -743,6 +743,48 @@ class PackStreamReader(object):
             raise ChecksumMismatch(sha_to_hex(pack_sha), self.sha.hexdigest())
 
 
+class PackStreamCopier(PackStreamReader):
+    """Class to verify a pack stream as it is being read.
+
+    The pack is read from a ReceivableProtocol using read() or recv() as
+    appropriate and written out to the given file-like object.
+    """
+
+    def __init__(self, read_all, read_some, outfile, delta_iter=None):
+        """Initialize the copier.
+
+        :param read_all: Read function that blocks until the number of requested
+            bytes are read.
+        :param read_some: Read function that returns at least one byte, but may
+            not return the number of bytes requested.
+        :param outfile: File-like object to write output through.
+        :param delta_iter: Optional DeltaChainIterator to record deltas as we
+            read them.
+        """
+        super(PackStreamCopier, self).__init__(read_all, read_some=read_some)
+        self.outfile = outfile
+        self._delta_iter = delta_iter
+
+    def _read(self, read, size):
+        """Read data from the read callback and write it to the file."""
+        data = super(PackStreamCopier, self)._read(read, size)
+        self.outfile.write(data)
+        return data
+
+    def verify(self):
+        """Verify a pack stream and write it to the output file.
+
+        See PackStreamReader.iterobjects for a list of exceptions this may
+        throw.
+        """
+        if self._delta_iter:
+            for offset, type_num, uncomp, _, _ in self.read_objects():
+                self._delta_iter.record(offset, type_num, uncomp)
+        else:
+            for _ in self.read_objects():
+                pass
+
+
 def obj_sha(type, chunks):
     """Compute the SHA for a numeric type and object chunks."""
     sha = make_sha()

+ 1 - 43
dulwich/server.py

@@ -44,7 +44,7 @@ from dulwich.objects import (
     hex_to_sha,
     )
 from dulwich.pack import (
-    PackStreamReader,
+    PackStreamCopier,
     write_pack_objects,
     )
 from dulwich.protocol import (
@@ -118,48 +118,6 @@ class BackendRepo(object):
         raise NotImplementedError
 
 
-class PackStreamCopier(PackStreamReader):
-    """Class to verify a pack stream as it is being read.
-
-    The pack is read from a ReceivableProtocol using read() or recv() as
-    appropriate and written out to the given file-like object.
-    """
-
-    def __init__(self, read_all, read_some, outfile, delta_iter=None):
-        """Initialize the copier.
-
-        :param read_all: Read function that blocks until the number of requested
-            bytes are read.
-        :param read_some: Read function that returns at least one byte, but may
-            not return the number of bytes requested.
-        :param outfile: File-like object to write output through.
-        :param delta_iter: Optional DeltaChainIterator to record deltas as we
-            read them.
-        """
-        super(PackStreamCopier, self).__init__(read_all, read_some=read_some)
-        self.outfile = outfile
-        self._delta_iter = delta_iter
-
-    def _read(self, read, size):
-        """Read data from the read callback and write it to the file."""
-        data = super(PackStreamCopier, self)._read(read, size)
-        self.outfile.write(data)
-        return data
-
-    def verify(self):
-        """Verify a pack stream and write it to the output file.
-
-        See PackStreamReader.iterobjects for a list of exceptions this may
-        throw.
-        """
-        if self._delta_iter:
-            for offset, type_num, uncomp, _, _ in self.read_objects():
-                self._delta_iter.record(offset, type_num, uncomp)
-        else:
-            for _ in self.read_objects():
-                pass
-
-
 class DictBackend(Backend):
     """Trivial backend that looks up Git repositories in a dictionary."""