Mercurial > hg
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 |