comparison mercurial/changegroup.py @ 27751:a40e2f7fe49d

changegroup: hide packermap behind methods This is to prepare for hiding changegroup3 behind a config option.
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 12 Jan 2016 21:01:06 -0800
parents d6d3cf5fda6f
children 29cfc474c5fd
comparison
equal deleted inserted replaced
27750:443848eece18 27751:a40e2f7fe49d
912 912
913 def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags): 913 def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
914 return struct.pack( 914 return struct.pack(
915 self.deltaheader, node, p1n, p2n, basenode, linknode, flags) 915 self.deltaheader, node, p1n, p2n, basenode, linknode, flags)
916 916
917 packermap = {'01': (cg1packer, cg1unpacker), 917 _packermap = {'01': (cg1packer, cg1unpacker),
918 # cg2 adds support for exchanging generaldelta 918 # cg2 adds support for exchanging generaldelta
919 '02': (cg2packer, cg2unpacker), 919 '02': (cg2packer, cg2unpacker),
920 # cg3 adds support for exchanging treemanifests 920 # cg3 adds support for exchanging treemanifests
921 '03': (cg3packer, cg3unpacker), 921 '03': (cg3packer, cg3unpacker),
922 } 922 }
923
924 def supportedversions(repo):
925 return _packermap.keys()
926
927 def getbundler(version, repo, bundlecaps=None):
928 assert version in supportedversions(repo)
929 return _packermap[version][0](repo, bundlecaps)
930
931 def getunbundler(version, fh, alg):
932 return _packermap[version][1](fh, alg)
923 933
924 def _changegroupinfo(repo, nodes, source): 934 def _changegroupinfo(repo, nodes, source):
925 if repo.ui.verbose or source == 'bundle': 935 if repo.ui.verbose or source == 'bundle':
926 repo.ui.status(_("%d changesets found\n") % len(nodes)) 936 repo.ui.status(_("%d changesets found\n") % len(nodes))
927 if repo.ui.debugflag: 937 if repo.ui.debugflag:
945 _changegroupinfo(repo, csets, source) 955 _changegroupinfo(repo, csets, source)
946 return bundler.generate(commonrevs, csets, fastpathlinkrev, source) 956 return bundler.generate(commonrevs, csets, fastpathlinkrev, source)
947 957
948 def getsubset(repo, outgoing, bundler, source, fastpath=False): 958 def getsubset(repo, outgoing, bundler, source, fastpath=False):
949 gengroup = getsubsetraw(repo, outgoing, bundler, source, fastpath) 959 gengroup = getsubsetraw(repo, outgoing, bundler, source, fastpath)
950 return packermap[bundler.version][1](util.chunkbuffer(gengroup), None) 960 return getunbundler(bundler.version, util.chunkbuffer(gengroup), None)
951 961
952 def changegroupsubset(repo, roots, heads, source, version='01'): 962 def changegroupsubset(repo, roots, heads, source, version='01'):
953 """Compute a changegroup consisting of all the nodes that are 963 """Compute a changegroup consisting of all the nodes that are
954 descendants of any of the roots and ancestors of any of the heads. 964 descendants of any of the roots and ancestors of any of the heads.
955 Return a chunkbuffer object whose read() method will return 965 Return a chunkbuffer object whose read() method will return
971 # TODO: remove call to nodesbetween. 981 # TODO: remove call to nodesbetween.
972 csets, roots, heads = cl.nodesbetween(roots, heads) 982 csets, roots, heads = cl.nodesbetween(roots, heads)
973 included = set(csets) 983 included = set(csets)
974 discbases = [n for n in discbases if n not in included] 984 discbases = [n for n in discbases if n not in included]
975 outgoing = discovery.outgoing(cl, discbases, heads) 985 outgoing = discovery.outgoing(cl, discbases, heads)
976 bundler = packermap[version][0](repo) 986 bundler = getbundler(version, repo)
977 return getsubset(repo, outgoing, bundler, source) 987 return getsubset(repo, outgoing, bundler, source)
978 988
979 def getlocalchangegroupraw(repo, source, outgoing, bundlecaps=None, 989 def getlocalchangegroupraw(repo, source, outgoing, bundlecaps=None,
980 version='01'): 990 version='01'):
981 """Like getbundle, but taking a discovery.outgoing as an argument. 991 """Like getbundle, but taking a discovery.outgoing as an argument.
982 992
983 This is only implemented for local repos and reuses potentially 993 This is only implemented for local repos and reuses potentially
984 precomputed sets in outgoing. Returns a raw changegroup generator.""" 994 precomputed sets in outgoing. Returns a raw changegroup generator."""
985 if not outgoing.missing: 995 if not outgoing.missing:
986 return None 996 return None
987 bundler = packermap[version][0](repo, bundlecaps) 997 bundler = getbundler(version, repo, bundlecaps)
988 return getsubsetraw(repo, outgoing, bundler, source) 998 return getsubsetraw(repo, outgoing, bundler, source)
989 999
990 def getlocalchangegroup(repo, source, outgoing, bundlecaps=None, 1000 def getlocalchangegroup(repo, source, outgoing, bundlecaps=None,
991 version='01'): 1001 version='01'):
992 """Like getbundle, but taking a discovery.outgoing as an argument. 1002 """Like getbundle, but taking a discovery.outgoing as an argument.
993 1003
994 This is only implemented for local repos and reuses potentially 1004 This is only implemented for local repos and reuses potentially
995 precomputed sets in outgoing.""" 1005 precomputed sets in outgoing."""
996 if not outgoing.missing: 1006 if not outgoing.missing:
997 return None 1007 return None
998 bundler = packermap[version][0](repo, bundlecaps) 1008 bundler = getbundler(version, repo, bundlecaps)
999 return getsubset(repo, outgoing, bundler, source) 1009 return getsubset(repo, outgoing, bundler, source)
1000 1010
1001 def computeoutgoing(repo, heads, common): 1011 def computeoutgoing(repo, heads, common):
1002 """Computes which revs are outgoing given a set of common 1012 """Computes which revs are outgoing given a set of common
1003 and a set of heads. 1013 and a set of heads.