##// END OF EJS Templates
changegroup: pass function to build delta header into constructor...
Gregory Szorc -
r38933:bd64b8b8 default
parent child Browse files
Show More
@@ -520,14 +520,16 b' class revisiondelta(object):'
520 520 deltachunks = attr.ib()
521 521
522 522 class cg1packer(object):
523 deltaheader = _CHANGEGROUPV1_DELTA_HEADER
524
525 def __init__(self, repo, filematcher, version, bundlecaps=None):
523 def __init__(self, repo, filematcher, version, builddeltaheader,
524 bundlecaps=None):
526 525 """Given a source repo, construct a bundler.
527 526
528 527 filematcher is a matcher that matches on files to include in the
529 528 changegroup. Used to facilitate sparse changegroups.
530 529
530 builddeltaheader is a callable that constructs the header for a group
531 delta.
532
531 533 bundlecaps is optional and can be used to specify the set of
532 534 capabilities which can be used to build the bundle. While bundlecaps is
533 535 unused in core Mercurial, extensions rely on this feature to communicate
@@ -537,6 +539,7 b' class cg1packer(object):'
537 539 self._filematcher = filematcher
538 540
539 541 self.version = version
542 self._builddeltaheader = builddeltaheader
540 543
541 544 # Set of capabilities we can use to build the bundle.
542 545 if bundlecaps is None:
@@ -933,9 +936,7 b' class cg1packer(object):'
933 936 if not delta:
934 937 return
935 938
936 meta = self.builddeltaheader(delta.node, delta.p1node, delta.p2node,
937 delta.basenode, delta.linknode,
938 delta.flags)
939 meta = self._builddeltaheader(delta)
939 940 l = len(meta) + sum(len(x) for x in delta.deltachunks)
940 941
941 942 yield chunkheader(l)
@@ -1096,16 +1097,11 b' class cg1packer(object):'
1096 1097 deltachunks=(diffheader, data),
1097 1098 )
1098 1099
1099 def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
1100 # do nothing with basenode, it is implicitly the previous one in HG10
1101 # do nothing with flags, it is implicitly 0 for cg1 and cg2
1102 return self.deltaheader.pack(node, p1n, p2n, linknode)
1103
1104 1100 class cg2packer(cg1packer):
1105 deltaheader = _CHANGEGROUPV2_DELTA_HEADER
1106
1107 def __init__(self, repo, filematcher, version, bundlecaps=None):
1101 def __init__(self, repo, filematcher, version, builddeltaheader,
1102 bundlecaps=None):
1108 1103 super(cg2packer, self).__init__(repo, filematcher, version,
1104 builddeltaheader,
1109 1105 bundlecaps=bundlecaps)
1110 1106
1111 1107 if self._reorder is None:
@@ -1153,13 +1149,7 b' class cg2packer(cg1packer):'
1153 1149 base = nullrev
1154 1150 return base
1155 1151
1156 def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
1157 # Do nothing with flags, it is implicitly 0 in cg1 and cg2
1158 return self.deltaheader.pack(node, p1n, p2n, basenode, linknode)
1159
1160 1152 class cg3packer(cg2packer):
1161 deltaheader = _CHANGEGROUPV3_DELTA_HEADER
1162
1163 1153 def _packmanifests(self, dir, mfnodes, lookuplinknode):
1164 1154 if dir:
1165 1155 yield self.fileheader(dir)
@@ -1172,17 +1162,26 b' class cg3packer(cg2packer):'
1172 1162 def _manifestsdone(self):
1173 1163 return self.close()
1174 1164
1175 def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
1176 return self.deltaheader.pack(node, p1n, p2n, basenode, linknode, flags)
1165 def _makecg1packer(repo, filematcher, bundlecaps):
1166 builddeltaheader = lambda d: _CHANGEGROUPV1_DELTA_HEADER.pack(
1167 d.node, d.p1node, d.p2node, d.linknode)
1177 1168
1178 def _makecg1packer(repo, filematcher, bundlecaps):
1179 return cg1packer(repo, filematcher, b'01', bundlecaps=bundlecaps)
1169 return cg1packer(repo, filematcher, b'01', builddeltaheader,
1170 bundlecaps=bundlecaps)
1180 1171
1181 1172 def _makecg2packer(repo, filematcher, bundlecaps):
1182 return cg2packer(repo, filematcher, b'02', bundlecaps=bundlecaps)
1173 builddeltaheader = lambda d: _CHANGEGROUPV2_DELTA_HEADER.pack(
1174 d.node, d.p1node, d.p2node, d.basenode, d.linknode)
1175
1176 return cg2packer(repo, filematcher, b'02', builddeltaheader,
1177 bundlecaps=bundlecaps)
1183 1178
1184 1179 def _makecg3packer(repo, filematcher, bundlecaps):
1185 return cg3packer(repo, filematcher, b'03', bundlecaps=bundlecaps)
1180 builddeltaheader = lambda d: _CHANGEGROUPV3_DELTA_HEADER.pack(
1181 d.node, d.p1node, d.p2node, d.basenode, d.linknode, d.flags)
1182
1183 return cg3packer(repo, filematcher, b'03', builddeltaheader,
1184 bundlecaps=bundlecaps)
1186 1185
1187 1186 _packermap = {'01': (_makecg1packer, cg1unpacker),
1188 1187 # cg2 adds support for exchanging generaldelta
General Comments 0
You need to be logged in to leave comments. Login now