comparison mercurial/localrepo.py @ 20927:24a443948627

localrepo: move the changegroupsubset method in changegroup module This is a gratuitous code move aimed at reducing the localrepo bloatness. The method had few callers, not enough to be kept in local repo. The peer API remains unchanged.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 01 Apr 2014 14:25:03 -0700
parents 7c1ed40e3325
children 91b47139d0cb
comparison
equal deleted inserted replaced
20926:7c1ed40e3325 20927:24a443948627
141 141
142 def changegroup(self, basenodes, source): 142 def changegroup(self, basenodes, source):
143 return self._repo.changegroup(basenodes, source) 143 return self._repo.changegroup(basenodes, source)
144 144
145 def changegroupsubset(self, bases, heads, source): 145 def changegroupsubset(self, bases, heads, source):
146 return self._repo.changegroupsubset(bases, heads, source) 146 return changegroup.changegroupsubset(self._repo, bases, heads, source)
147 147
148 class localrepository(object): 148 class localrepository(object):
149 149
150 supportedformats = set(('revlogv1', 'generaldelta')) 150 supportedformats = set(('revlogv1', 'generaldelta'))
151 _basesupported = supportedformats | set(('store', 'fncache', 'shared', 151 _basesupported = supportedformats | set(('store', 'fncache', 'shared',
1681 pass 1681 pass
1682 1682
1683 def push(self, remote, force=False, revs=None, newbranch=False): 1683 def push(self, remote, force=False, revs=None, newbranch=False):
1684 return exchange.push(self, remote, force, revs, newbranch) 1684 return exchange.push(self, remote, force, revs, newbranch)
1685 1685
1686 def changegroupsubset(self, roots, heads, source):
1687 """Compute a changegroup consisting of all the nodes that are
1688 descendants of any of the roots and ancestors of any of the heads.
1689 Return a chunkbuffer object whose read() method will return
1690 successive changegroup chunks.
1691
1692 It is fairly complex as determining which filenodes and which
1693 manifest nodes need to be included for the changeset to be complete
1694 is non-trivial.
1695
1696 Another wrinkle is doing the reverse, figuring out which changeset in
1697 the changegroup a particular filenode or manifestnode belongs to.
1698 """
1699 cl = self.changelog
1700 if not roots:
1701 roots = [nullid]
1702 # TODO: remove call to nodesbetween.
1703 csets, roots, heads = cl.nodesbetween(roots, heads)
1704 discbases = []
1705 for n in roots:
1706 discbases.extend([p for p in cl.parents(n) if p != nullid])
1707 outgoing = discovery.outgoing(cl, discbases, heads)
1708 bundler = changegroup.bundle10(self)
1709 return changegroup.getsubset(self, outgoing, bundler, source)
1710
1711 def getlocalbundle(self, source, outgoing, bundlecaps=None): 1686 def getlocalbundle(self, source, outgoing, bundlecaps=None):
1712 """Like getbundle, but taking a discovery.outgoing as an argument. 1687 """Like getbundle, but taking a discovery.outgoing as an argument.
1713 1688
1714 This is only implemented for local repos and reuses potentially 1689 This is only implemented for local repos and reuses potentially
1715 precomputed sets in outgoing.""" 1690 precomputed sets in outgoing."""
1739 discovery.outgoing(cl, common, heads), 1714 discovery.outgoing(cl, common, heads),
1740 bundlecaps=bundlecaps) 1715 bundlecaps=bundlecaps)
1741 1716
1742 def changegroup(self, basenodes, source): 1717 def changegroup(self, basenodes, source):
1743 # to avoid a race we use changegroupsubset() (issue1320) 1718 # to avoid a race we use changegroupsubset() (issue1320)
1744 return self.changegroupsubset(basenodes, self.heads(), source) 1719 return changegroup.changegroupsubset(self, basenodes, self.heads(),
1720 source)
1745 1721
1746 @unfilteredmethod 1722 @unfilteredmethod
1747 def addchangegroup(self, source, srctype, url, emptyok=False): 1723 def addchangegroup(self, source, srctype, url, emptyok=False):
1748 """Add the changegroup returned by source.read() to this repo. 1724 """Add the changegroup returned by source.read() to this repo.
1749 srctype is a string like 'push', 'pull', or 'unbundle'. url is 1725 srctype is a string like 'push', 'pull', or 'unbundle'. url is