comparison mercurial/localrepo.py @ 20930:4a987060d97e

localrepo: move the getbundle 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:40:35 -0700
parents 91b47139d0cb
children de60ca3a390e
comparison
equal deleted inserted replaced
20929:afe0b48ef2d7 20930:4a987060d97e
4 # 4 #
5 # This software may be used and distributed according to the terms of the 5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version. 6 # GNU General Public License version 2 or any later version.
7 from node import hex, nullid, short 7 from node import hex, nullid, short
8 from i18n import _ 8 from i18n import _
9 import peer, changegroup, subrepo, discovery, pushkey, obsolete, repoview 9 import peer, changegroup, subrepo, pushkey, obsolete, repoview
10 import changelog, dirstate, filelog, manifest, context, bookmarks, phases 10 import changelog, dirstate, filelog, manifest, context, bookmarks, phases
11 import lock as lockmod 11 import lock as lockmod
12 import transaction, store, encoding, exchange 12 import transaction, store, encoding, exchange
13 import scmutil, util, extensions, hook, error, revset 13 import scmutil, util, extensions, hook, error, revset
14 import match as matchmod 14 import match as matchmod
102 102
103 def known(self, nodes): 103 def known(self, nodes):
104 return self._repo.known(nodes) 104 return self._repo.known(nodes)
105 105
106 def getbundle(self, source, heads=None, common=None, bundlecaps=None): 106 def getbundle(self, source, heads=None, common=None, bundlecaps=None):
107 return self._repo.getbundle(source, heads=heads, common=common, 107 return changegroup.getbundle(self._repo, source, heads=heads,
108 bundlecaps=None) 108 common=common, bundlecaps=None)
109 109
110 # TODO We might want to move the next two calls into legacypeer and add 110 # TODO We might want to move the next two calls into legacypeer and add
111 # unbundle instead. 111 # unbundle instead.
112 112
113 def lock(self): 113 def lock(self):
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 getbundle(self, source, heads=None, common=None, bundlecaps=None):
1687 """Like changegroupsubset, but returns the set difference between the
1688 ancestors of heads and the ancestors common.
1689
1690 If heads is None, use the local heads. If common is None, use [nullid].
1691
1692 The nodes in common might not all be known locally due to the way the
1693 current discovery protocol works.
1694 """
1695 cl = self.changelog
1696 if common:
1697 hasnode = cl.hasnode
1698 common = [n for n in common if hasnode(n)]
1699 else:
1700 common = [nullid]
1701 if not heads:
1702 heads = cl.heads()
1703 outgoing = discovery.outgoing(cl, common, heads)
1704 return changegroup.getlocalbundle(self, source, outgoing,
1705 bundlecaps=bundlecaps)
1706
1707 def changegroup(self, basenodes, source): 1686 def changegroup(self, basenodes, source):
1708 # to avoid a race we use changegroupsubset() (issue1320) 1687 # to avoid a race we use changegroupsubset() (issue1320)
1709 return changegroup.changegroupsubset(self, basenodes, self.heads(), 1688 return changegroup.changegroupsubset(self, basenodes, self.heads(),
1710 source) 1689 source)
1711 1690