588 |
588 |
589 # filter any nodes that claim to be part of the known set |
589 # filter any nodes that claim to be part of the known set |
590 def prune(self, revlog, missing, commonrevs): |
590 def prune(self, revlog, missing, commonrevs): |
591 rr, rl = revlog.rev, revlog.linkrev |
591 rr, rl = revlog.rev, revlog.linkrev |
592 return [n for n in missing if rl(rr(n)) not in commonrevs] |
592 return [n for n in missing if rl(rr(n)) not in commonrevs] |
|
593 |
|
594 def _packmanifests(self, mfnodes, lookuplinknode): |
|
595 """Pack flat manifests into a changegroup stream.""" |
|
596 ml = self._repo.manifest |
|
597 size = 0 |
|
598 for chunk in self.group( |
|
599 mfnodes, ml, lookuplinknode, units=_('manifests')): |
|
600 size += len(chunk) |
|
601 yield chunk |
|
602 self._verbosenote(_('%8.i (manifests)\n') % size) |
593 |
603 |
594 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
604 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
595 '''yield a sequence of changegroup chunks (strings)''' |
605 '''yield a sequence of changegroup chunks (strings)''' |
596 repo = self._repo |
606 repo = self._repo |
597 cl = repo.changelog |
607 cl = repo.changelog |
652 if clrevorder[clnode] < clrevorder[fclnode]: |
662 if clrevorder[clnode] < clrevorder[fclnode]: |
653 fclnodes[n] = clnode |
663 fclnodes[n] = clnode |
654 return clnode |
664 return clnode |
655 |
665 |
656 mfnodes = self.prune(ml, mfs, commonrevs) |
666 mfnodes = self.prune(ml, mfs, commonrevs) |
657 size = 0 |
667 for x in self._packmanifests(mfnodes, lookupmflinknode): |
658 for chunk in self.group( |
668 yield x |
659 mfnodes, ml, lookupmflinknode, units=_('manifests')): |
|
660 size += len(chunk) |
|
661 yield chunk |
|
662 self._verbosenote(_('%8.i (manifests)\n') % size) |
|
663 |
669 |
664 mfs.clear() |
670 mfs.clear() |
665 clrevs = set(cl.rev(x) for x in clnodes) |
671 clrevs = set(cl.rev(x) for x in clnodes) |
666 |
672 |
667 def linknodes(filerevlog, fname): |
673 def linknodes(filerevlog, fname): |