dulwich-users team mailing list archive
-
dulwich-users team
-
Mailing list archive
-
Message #00575
[PATCH 13/33] server: Make PackStreamCopier optionally record delta chains.
From: Dave Borowitz <dborowitz@xxxxxxxxxx>
Change-Id: Iff85f1aaf145374cb58017281edc7b75f09faf70
---
dulwich/server.py | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dulwich/server.py b/dulwich/server.py
index 99aea42..20832e8 100644
--- a/dulwich/server.py
+++ b/dulwich/server.py
@@ -125,11 +125,23 @@ class PackStreamCopier(PackStreamReader):
appropriate and written out to the given file-like object.
"""
- def __init__(self, read_all, read_some, outfile):
- super(PackStreamCopier, self).__init__(read_all, read_some)
+ 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
@@ -140,8 +152,12 @@ class PackStreamCopier(PackStreamReader):
See PackStreamReader.iterobjects for a list of exceptions this may
throw.
"""
- for _ in self.read_objects():
- pass
+ if self._delta_iter:
+ for type_num, uncomp, _, _ in self.read_objects():
+ self._delta_iter.record(self.offset, type_num, uncomp)
+ else:
+ for _ in self.read_objects():
+ pass
class DictBackend(Backend):
--
1.7.3.1
References