comparison mercurial/changegroup.py @ 39012:c921ad9cae08

changegroup: move manifest chunk emission to generate() We want to get to a point where we can emit data structures from deltagroup() and derive the raw changegroup data as late as possible. Differential Revision: https://phab.mercurial-scm.org/D4209
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 08 Aug 2018 15:14:59 -0700
parents 2ebdd265fe8c
children c4a2d19d393a
comparison
equal deleted inserted replaced
39011:2ebdd265fe8c 39012:c921ad9cae08
869 'treemanifest' not in repo.requirements) 869 'treemanifest' not in repo.requirements)
870 870
871 fnodes = {} # needed file nodes 871 fnodes = {} # needed file nodes
872 872
873 size = 0 873 size = 0
874 for chunk in self.generatemanifests(commonrevs, clrevorder, 874 it = self.generatemanifests(
875 fastpathlinkrev, mfs, fnodes, source, 875 commonrevs, clrevorder, fastpathlinkrev, mfs, fnodes, source,
876 clstate['clrevtomanifestrev']): 876 clstate['clrevtomanifestrev'])
877 size += len(chunk) 877
878 yield chunk 878 for dir, chunks in it:
879 if dir:
880 assert self.version == b'03'
881 chunk = _fileheader(dir)
882 size += len(chunk)
883 yield chunk
884
885 for chunk in chunks:
886 size += len(chunk)
887 yield chunk
888
889 close = closechunk()
890 size += len(close)
891 yield close
879 892
880 self._verbosenote(_('%8.i (manifests)\n') % size) 893 self._verbosenote(_('%8.i (manifests)\n') % size)
881 yield self._manifestsend 894 yield self._manifestsend
882 895
883 mfdicts = None 896 mfdicts = None
1051 lookupfn) 1064 lookupfn)
1052 else: 1065 else:
1053 revs = _sortnodesnormal(store, prunednodes, 1066 revs = _sortnodesnormal(store, prunednodes,
1054 self._reorder) 1067 self._reorder)
1055 1068
1056 if dir:
1057 assert self.version == b'03'
1058 chunk = _fileheader(dir)
1059 yield chunk
1060
1061 it = deltagroup( 1069 it = deltagroup(
1062 self._repo, revs, store, False, lookupfn, 1070 self._repo, revs, store, False, lookupfn,
1063 self._deltaparentfn, self._builddeltaheader, 1071 self._deltaparentfn, self._builddeltaheader,
1064 ellipses=self._ellipses, 1072 ellipses=self._ellipses,
1065 units=_('manifests'), 1073 units=_('manifests'),
1066 clrevtolocalrev=clrevtolocalrev, 1074 clrevtolocalrev=clrevtolocalrev,
1067 fullclnodes=self._fullclnodes, 1075 fullclnodes=self._fullclnodes,
1068 precomputedellipsis=self._precomputedellipsis) 1076 precomputedellipsis=self._precomputedellipsis)
1069 1077
1070 for chunk in it: 1078 yield dir, it
1071 yield chunk
1072
1073 close = closechunk()
1074 yield close
1075 1079
1076 # The 'source' parameter is useful for extensions 1080 # The 'source' parameter is useful for extensions
1077 def generatefiles(self, changedfiles, commonrevs, source, 1081 def generatefiles(self, changedfiles, commonrevs, source,
1078 mfdicts, fastpathlinkrev, fnodes, clrevs): 1082 mfdicts, fastpathlinkrev, fnodes, clrevs):
1079 changedfiles = list(filter(self._filematcher, changedfiles)) 1083 changedfiles = list(filter(self._filematcher, changedfiles))