Kiln » Dependencies » Dulwich Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in master-1, master-0, and 0.9.4

server: Make PackStreamCopier optionally record delta chains.

Change-Id: Iff85f1aaf145374cb58017281edc7b75f09faf70

Changeset c04fb4e4d918

Parent 4e51f1a0fa94

committed by Jelmer Vernooij

authored by Dave Borowitz

Changes to one file · Browse files at c04fb4e4d918 Showing diff from parent 4e51f1a0fa94 Diff from another changeset...

Change 1 of 2 Show Entire File dulwich/​server.py Stacked
 
125
126
127
128
129
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
132
 
133
134
135
 
140
141
142
143
144
 
 
 
 
 
 
145
146
147
 
125
126
127
 
 
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 
152
153
154
 
 
155
156
157
158
159
160
161
162
163
@@ -125,11 +125,23 @@
  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 @@
  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):