Mercurial > hg
changeset 39732:e03c1a63155c
changegroup: tease out a temporary prune method for manifests
It's extracted so extensions can filter manifest nodes if needed. This
is an unfortunate hack, but I think I only need it for manifests. The
long-term solution will be to rework the relationship between
changegroups and storage so that this isn't required.
Differential Revision: https://phab.mercurial-scm.org/D4685
author | Augie Fackler <augie@google.com> |
---|---|
date | Wed, 19 Sep 2018 23:38:30 -0400 |
parents | c71f80bfb414 |
children | 5adc5fe41a7d |
files | mercurial/changegroup.py |
diffstat | 1 files changed, 11 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/changegroup.py Wed Sep 19 23:36:16 2018 -0400 +++ b/mercurial/changegroup.py Wed Sep 19 23:38:30 2018 -0400 @@ -1073,10 +1073,7 @@ if not self._filematcher.visitdir(store.tree[:-1] or '.'): prunednodes = [] else: - frev, flr = store.rev, store.linkrev - prunednodes = [n for n in nodes - if flr(frev(n)) not in commonrevs] - + prunednodes = self._prunemanifests(store, nodes, commonrevs) if tree and not prunednodes: continue @@ -1093,6 +1090,16 @@ yield tree, deltas + def _prunemanifests(self, store, nodes, commonrevs): + # This is split out as a separate method to allow filtering + # commonrevs in extension code. + # + # TODO(augie): this shouldn't be required, instead we should + # make filtering of revisions to send delegated to the store + # layer. + frev, flr = store.rev, store.linkrev + return [n for n in nodes if flr(frev(n)) not in commonrevs] + # The 'source' parameter is useful for extensions def generatefiles(self, changedfiles, commonrevs, source, mfdicts, fastpathlinkrev, fnodes, clrevs):