Show More
@@ -659,20 +659,15 b' class cg1packer(object):' | |||
|
659 | 659 | rr, rl = revlog.rev, revlog.linkrev |
|
660 | 660 | return [n for n in missing if rl(rr(n)) not in commonrevs] |
|
661 | 661 | |
|
662 |
def _packmanifests(self, |
|
|
662 | def _packmanifests(self, dir, mfnodes, lookuplinknode): | |
|
663 | 663 | """Pack flat manifests into a changegroup stream.""" |
|
664 | ml = self._repo.manifest | |
|
665 | size = 0 | |
|
666 | for chunk in self.group( | |
|
667 | mfnodes, ml, lookuplinknode, units=_('manifests')): | |
|
668 | size += len(chunk) | |
|
664 | assert not dir | |
|
665 | for chunk in self.group(mfnodes, self._repo.manifest, | |
|
666 | lookuplinknode, units=_('manifests')): | |
|
669 | 667 | yield chunk |
|
670 | self._verbosenote(_('%8.i (manifests)\n') % size) | |
|
671 | # It looks odd to assert this here, but tmfnodes doesn't get | |
|
672 | # filled in until after we've called lookuplinknode for | |
|
673 | # sending root manifests, so the only way to tell the streams | |
|
674 | # got crossed is to check after we've done all the work. | |
|
675 | assert not tmfnodes | |
|
668 | ||
|
669 | def _manifestsdone(self): | |
|
670 | return '' | |
|
676 | 671 | |
|
677 | 672 | def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
|
678 | 673 | '''yield a sequence of changegroup chunks (strings)''' |
@@ -825,9 +820,15 b' class cg1packer(object):' | |||
|
825 | 820 | return clnode |
|
826 | 821 | |
|
827 | 822 | mfnodes = self.prune(ml, mfs, commonrevs) |
|
828 | for x in self._packmanifests( | |
|
829 |
|
|
|
823 | size = 0 | |
|
824 | for x in self._packmanifests('', mfnodes, lookupmflinknode): | |
|
825 | size += len(x) | |
|
830 | 826 | yield x |
|
827 | self._verbosenote(_('%8.i (manifests)\n') % size) | |
|
828 | for dir, nodes in tmfnodes.iteritems(): | |
|
829 | for x in self._packmanifests(dir, nodes, nodes.get): | |
|
830 | yield x | |
|
831 | yield self._manifestsdone() | |
|
831 | 832 | |
|
832 | 833 | # The 'source' parameter is useful for extensions |
|
833 | 834 | def generatefiles(self, changedfiles, linknodes, commonrevs, source): |
@@ -928,23 +929,15 b' class cg3packer(cg2packer):' | |||
|
928 | 929 | version = '03' |
|
929 | 930 | deltaheader = _CHANGEGROUPV3_DELTA_HEADER |
|
930 | 931 | |
|
931 |
def _packmanifests(self, |
|
|
932 | # Note that debug prints are super confusing in this code, as | |
|
933 | # tmfnodes gets populated by the calls to lookuplinknode in | |
|
934 | # the superclass's manifest packer. In the future we should | |
|
935 | # probably see if we can refactor this somehow to be less | |
|
936 | # confusing. | |
|
937 | for x in super(cg3packer, self)._packmanifests( | |
|
938 | mfnodes, {}, lookuplinknode): | |
|
939 | yield x | |
|
940 | dirlog = self._repo.manifest.dirlog | |
|
941 | for name, nodes in tmfnodes.iteritems(): | |
|
942 | # For now, directory headers are simply file headers with | |
|
943 | # a trailing '/' on the path (already in the name). | |
|
944 | yield self.fileheader(name) | |
|
945 | for chunk in self.group(nodes, dirlog(name), nodes.get): | |
|
932 | def _packmanifests(self, dir, mfnodes, lookuplinknode): | |
|
933 | if dir: | |
|
934 | yield self.fileheader(dir) | |
|
935 | for chunk in self.group(mfnodes, self._repo.manifest.dirlog(dir), | |
|
936 | lookuplinknode, units=_('manifests')): | |
|
946 | 937 |
|
|
947 | yield self.close() | |
|
938 | ||
|
939 | def _manifestsdone(self): | |
|
940 | return self.close() | |
|
948 | 941 | |
|
949 | 942 | def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags): |
|
950 | 943 | return struct.pack( |
General Comments 0
You need to be logged in to leave comments.
Login now