equal
deleted
inserted
replaced
294 for c in self.revchunk(revlog, curr, prev, linknode): |
294 for c in self.revchunk(revlog, curr, prev, linknode): |
295 yield c |
295 yield c |
296 |
296 |
297 yield self.close() |
297 yield self.close() |
298 |
298 |
|
299 # filter any nodes that claim to be part of the known set |
|
300 def prune(self, revlog, missing, commonrevs, source): |
|
301 rr, rl = revlog.rev, revlog.linkrev |
|
302 return [n for n in missing if rl(rr(n)) not in commonrevs] |
|
303 |
299 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
304 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
300 '''yield a sequence of changegroup chunks (strings)''' |
305 '''yield a sequence of changegroup chunks (strings)''' |
301 repo = self._repo |
306 repo = self._repo |
302 cl = self._changelog |
307 cl = self._changelog |
303 mf = self._manifest |
308 mf = self._manifest |
308 msgbundling = _('bundling') |
313 msgbundling = _('bundling') |
309 |
314 |
310 mfs = {} # needed manifests |
315 mfs = {} # needed manifests |
311 fnodes = {} # needed file nodes |
316 fnodes = {} # needed file nodes |
312 changedfiles = set() |
317 changedfiles = set() |
313 |
|
314 # filter any nodes that claim to be part of the known set |
|
315 def prune(revlog, missing): |
|
316 rr, rl = revlog.rev, revlog.linkrev |
|
317 return [n for n in missing if rl(rr(n)) not in commonrevs] |
|
318 |
318 |
319 # Callback for the changelog, used to collect changed files and manifest |
319 # Callback for the changelog, used to collect changed files and manifest |
320 # nodes. |
320 # nodes. |
321 # Returns the linkrev node (identity in the changelog case). |
321 # Returns the linkrev node (identity in the changelog case). |
322 def lookupcl(x): |
322 def lookupcl(x): |
345 yield chunk |
345 yield chunk |
346 progress(msgbundling, None) |
346 progress(msgbundling, None) |
347 |
347 |
348 for f in changedfiles: |
348 for f in changedfiles: |
349 fnodes[f] = {} |
349 fnodes[f] = {} |
350 mfnodes = prune(mf, mfs) |
350 mfnodes = self.prune(mf, mfs, commonrevs, source) |
351 for chunk in self.group(mfnodes, mf, lookupmf, units=_('manifests'), |
351 for chunk in self.group(mfnodes, mf, lookupmf, units=_('manifests'), |
352 reorder=reorder): |
352 reorder=reorder): |
353 yield chunk |
353 yield chunk |
354 progress(msgbundling, None) |
354 progress(msgbundling, None) |
355 |
355 |
375 # Lookup for filenodes, we collected the linkrev nodes above in the |
375 # Lookup for filenodes, we collected the linkrev nodes above in the |
376 # fastpath case and with lookupmf in the slowpath case. |
376 # fastpath case and with lookupmf in the slowpath case. |
377 def lookupfilelog(x): |
377 def lookupfilelog(x): |
378 return linkrevnodes[x] |
378 return linkrevnodes[x] |
379 |
379 |
380 filenodes = prune(filerevlog, linkrevnodes) |
380 filenodes = self.prune(filerevlog, linkrevnodes, commonrevs, source) |
381 if filenodes: |
381 if filenodes: |
382 progress(msgbundling, i + 1, item=fname, unit=msgfiles, |
382 progress(msgbundling, i + 1, item=fname, unit=msgfiles, |
383 total=total) |
383 total=total) |
384 yield self.fileheader(fname) |
384 yield self.fileheader(fname) |
385 for chunk in self.group(filenodes, filerevlog, lookupfilelog, |
385 for chunk in self.group(filenodes, filerevlog, lookupfilelog, |