Mercurial > public > mercurial-scm > hg
comparison mercurial/changegroup.py @ 39011:2ebdd265fe8c
changegroup: move size tracking and end of manifests to generate()
Preparing for all the generate* functions to emit data structures
instead of raw chunks.
Differential Revision: https://phab.mercurial-scm.org/D4208
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 08 Aug 2018 15:09:12 -0700 |
parents | fcdab6629dde |
children | c921ad9cae08 |
comparison
equal
deleted
inserted
replaced
39010:fcdab6629dde | 39011:2ebdd265fe8c |
---|---|
868 fastpathlinkrev = fastpathlinkrev and ( | 868 fastpathlinkrev = fastpathlinkrev and ( |
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 for chunk in self.generatemanifests(commonrevs, clrevorder, | 874 for chunk in self.generatemanifests(commonrevs, clrevorder, |
874 fastpathlinkrev, mfs, fnodes, source, | 875 fastpathlinkrev, mfs, fnodes, source, |
875 clstate['clrevtomanifestrev']): | 876 clstate['clrevtomanifestrev']): |
877 size += len(chunk) | |
876 yield chunk | 878 yield chunk |
879 | |
880 self._verbosenote(_('%8.i (manifests)\n') % size) | |
881 yield self._manifestsend | |
877 | 882 |
878 mfdicts = None | 883 mfdicts = None |
879 if self._ellipses and self._isshallow: | 884 if self._ellipses and self._isshallow: |
880 mfdicts = [(self._repo.manifestlog[n].read(), lr) | 885 mfdicts = [(self._repo.manifestlog[n].read(), lr) |
881 for (n, lr) in mfs.iteritems()] | 886 for (n, lr) in mfs.iteritems()] |
1023 if clrevorder[clnode] < clrevorder[fclnode]: | 1028 if clrevorder[clnode] < clrevorder[fclnode]: |
1024 fclnodes[n] = clnode | 1029 fclnodes[n] = clnode |
1025 return clnode | 1030 return clnode |
1026 return lookupmflinknode | 1031 return lookupmflinknode |
1027 | 1032 |
1028 size = 0 | |
1029 while tmfnodes: | 1033 while tmfnodes: |
1030 dir, nodes = tmfnodes.popitem() | 1034 dir, nodes = tmfnodes.popitem() |
1031 store = dirlog(dir) | 1035 store = dirlog(dir) |
1032 | 1036 |
1033 if not self._filematcher.visitdir(store._dir[:-1] or '.'): | 1037 if not self._filematcher.visitdir(store._dir[:-1] or '.'): |
1050 self._reorder) | 1054 self._reorder) |
1051 | 1055 |
1052 if dir: | 1056 if dir: |
1053 assert self.version == b'03' | 1057 assert self.version == b'03' |
1054 chunk = _fileheader(dir) | 1058 chunk = _fileheader(dir) |
1055 size += len(chunk) | |
1056 yield chunk | 1059 yield chunk |
1057 | 1060 |
1058 it = deltagroup( | 1061 it = deltagroup( |
1059 self._repo, revs, store, False, lookupfn, | 1062 self._repo, revs, store, False, lookupfn, |
1060 self._deltaparentfn, self._builddeltaheader, | 1063 self._deltaparentfn, self._builddeltaheader, |
1063 clrevtolocalrev=clrevtolocalrev, | 1066 clrevtolocalrev=clrevtolocalrev, |
1064 fullclnodes=self._fullclnodes, | 1067 fullclnodes=self._fullclnodes, |
1065 precomputedellipsis=self._precomputedellipsis) | 1068 precomputedellipsis=self._precomputedellipsis) |
1066 | 1069 |
1067 for chunk in it: | 1070 for chunk in it: |
1068 size += len(chunk) | |
1069 yield chunk | 1071 yield chunk |
1070 | 1072 |
1071 close = closechunk() | 1073 close = closechunk() |
1072 size += len(close) | |
1073 yield close | 1074 yield close |
1074 | |
1075 self._verbosenote(_('%8.i (manifests)\n') % size) | |
1076 yield self._manifestsend | |
1077 | 1075 |
1078 # The 'source' parameter is useful for extensions | 1076 # The 'source' parameter is useful for extensions |
1079 def generatefiles(self, changedfiles, commonrevs, source, | 1077 def generatefiles(self, changedfiles, commonrevs, source, |
1080 mfdicts, fastpathlinkrev, fnodes, clrevs): | 1078 mfdicts, fastpathlinkrev, fnodes, clrevs): |
1081 changedfiles = list(filter(self._filematcher, changedfiles)) | 1079 changedfiles = list(filter(self._filematcher, changedfiles)) |