##// END OF EJS Templates
changegroup.writebundle: HG2Y support...
Eric Sumner -
r23896:becfecaf default
parent child Browse files
Show More
@@ -71,6 +71,7 b' bundletypes = {'
71 "": ("", nocompress), # only when using unbundle on ssh and old http servers
71 "": ("", nocompress), # only when using unbundle on ssh and old http servers
72 # since the unification ssh accepts a header but there
72 # since the unification ssh accepts a header but there
73 # is no capability signaling it.
73 # is no capability signaling it.
74 "HG2Y": (), # special-cased below
74 "HG10UN": ("HG10UN", nocompress),
75 "HG10UN": ("HG10UN", nocompress),
75 "HG10BZ": ("HG10", lambda: bz2.BZ2Compressor()),
76 "HG10BZ": ("HG10", lambda: bz2.BZ2Compressor()),
76 "HG10GZ": ("HG10GZ", lambda: zlib.compressobj()),
77 "HG10GZ": ("HG10GZ", lambda: zlib.compressobj()),
@@ -101,9 +102,20 b' def writebundle(ui, cg, filename, bundle'
101 fh = os.fdopen(fd, "wb")
102 fh = os.fdopen(fd, "wb")
102 cleanup = filename
103 cleanup = filename
103
104
105 if bundletype == "HG2Y":
106 import bundle2
107 bundle = bundle2.bundle20(ui)
108 part = bundle.newpart('b2x:changegroup', data=cg.getchunks())
109 part.addparam('version', cg.version)
110 z = nocompress()
111 chunkiter = bundle.getchunks()
112 else:
113 if cg.version != '01':
114 raise util.Abort(_('Bundle1 only supports v1 changegroups\n'))
104 header, compressor = bundletypes[bundletype]
115 header, compressor = bundletypes[bundletype]
105 fh.write(header)
116 fh.write(header)
106 z = compressor()
117 z = compressor()
118 chunkiter = cg.getchunks()
107
119
108 # parse the changegroup data, otherwise we will block
120 # parse the changegroup data, otherwise we will block
109 # in case of sshrepo because we don't know the end of the stream
121 # in case of sshrepo because we don't know the end of the stream
@@ -111,7 +123,7 b' def writebundle(ui, cg, filename, bundle'
111 # an empty chunkgroup is the end of the changegroup
123 # an empty chunkgroup is the end of the changegroup
112 # a changegroup has at least 2 chunkgroups (changelog and manifest).
124 # a changegroup has at least 2 chunkgroups (changelog and manifest).
113 # after that, an empty chunkgroup is the end of the changegroup
125 # after that, an empty chunkgroup is the end of the changegroup
114 for chunk in cg.getchunks():
126 for chunk in chunkiter:
115 fh.write(z.compress(chunk))
127 fh.write(z.compress(chunk))
116 fh.write(z.flush())
128 fh.write(z.flush())
117 cleanup = None
129 cleanup = None
@@ -146,6 +158,7 b' def decompressor(fh, alg):'
146 class cg1unpacker(object):
158 class cg1unpacker(object):
147 deltaheader = _CHANGEGROUPV1_DELTA_HEADER
159 deltaheader = _CHANGEGROUPV1_DELTA_HEADER
148 deltaheadersize = struct.calcsize(deltaheader)
160 deltaheadersize = struct.calcsize(deltaheader)
161 version = '01'
149 def __init__(self, fh, alg):
162 def __init__(self, fh, alg):
150 self._stream = decompressor(fh, alg)
163 self._stream = decompressor(fh, alg)
151 self._type = alg
164 self._type = alg
@@ -238,6 +251,7 b' class cg1unpacker(object):'
238 class cg2unpacker(cg1unpacker):
251 class cg2unpacker(cg1unpacker):
239 deltaheader = _CHANGEGROUPV2_DELTA_HEADER
252 deltaheader = _CHANGEGROUPV2_DELTA_HEADER
240 deltaheadersize = struct.calcsize(deltaheader)
253 deltaheadersize = struct.calcsize(deltaheader)
254 version = '02'
241
255
242 def _deltaheader(self, headertuple, prevnode):
256 def _deltaheader(self, headertuple, prevnode):
243 node, p1, p2, deltabase, cs = headertuple
257 node, p1, p2, deltabase, cs = headertuple
@@ -257,6 +271,7 b' class headerlessfixup(object):'
257
271
258 class cg1packer(object):
272 class cg1packer(object):
259 deltaheader = _CHANGEGROUPV1_DELTA_HEADER
273 deltaheader = _CHANGEGROUPV1_DELTA_HEADER
274 version = '01'
260 def __init__(self, repo, bundlecaps=None):
275 def __init__(self, repo, bundlecaps=None):
261 """Given a source repo, construct a bundler.
276 """Given a source repo, construct a bundler.
262
277
@@ -484,7 +499,7 b' class cg1packer(object):'
484 return struct.pack(self.deltaheader, node, p1n, p2n, linknode)
499 return struct.pack(self.deltaheader, node, p1n, p2n, linknode)
485
500
486 class cg2packer(cg1packer):
501 class cg2packer(cg1packer):
487
502 version = '02'
488 deltaheader = _CHANGEGROUPV2_DELTA_HEADER
503 deltaheader = _CHANGEGROUPV2_DELTA_HEADER
489
504
490 def group(self, nodelist, revlog, lookup, units=None, reorder=None):
505 def group(self, nodelist, revlog, lookup, units=None, reorder=None):
@@ -1181,7 +1181,10 b' def bundle(ui, repo, fname, dest=None, *'
1181 revs = scmutil.revrange(repo, opts['rev'])
1181 revs = scmutil.revrange(repo, opts['rev'])
1182
1182
1183 bundletype = opts.get('type', 'bzip2').lower()
1183 bundletype = opts.get('type', 'bzip2').lower()
1184 btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'}
1184 btypes = {'none': 'HG10UN',
1185 'bzip2': 'HG10BZ',
1186 'gzip': 'HG10GZ',
1187 'bundle2': 'HG2Y'}
1185 bundletype = btypes.get(bundletype)
1188 bundletype = btypes.get(bundletype)
1186 if bundletype not in changegroup.bundletypes:
1189 if bundletype not in changegroup.bundletypes:
1187 raise util.Abort(_('unknown bundle type specified with --type'))
1190 raise util.Abort(_('unknown bundle type specified with --type'))
@@ -2161,7 +2164,10 b' def debuggetbundle(ui, repopath, bundlep'
2161 bundle = repo.getbundle('debug', **args)
2164 bundle = repo.getbundle('debug', **args)
2162
2165
2163 bundletype = opts.get('type', 'bzip2').lower()
2166 bundletype = opts.get('type', 'bzip2').lower()
2164 btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'}
2167 btypes = {'none': 'HG10UN',
2168 'bzip2': 'HG10BZ',
2169 'gzip': 'HG10GZ',
2170 'bundle2': 'HG2Y'}
2165 bundletype = btypes.get(bundletype)
2171 bundletype = btypes.get(bundletype)
2166 if bundletype not in changegroup.bundletypes:
2172 if bundletype not in changegroup.bundletypes:
2167 raise util.Abort(_('unknown bundle type specified with --type'))
2173 raise util.Abort(_('unknown bundle type specified with --type'))
@@ -165,7 +165,30 b' Get branch and merge:'
165 8365676dbab05860ce0d9110f2af51368b961bbd
165 8365676dbab05860ce0d9110f2af51368b961bbd
166 0b2f73f04880d9cb6a5cd8a757f0db0ad01e32c3
166 0b2f73f04880d9cb6a5cd8a757f0db0ad01e32c3
167
167
168 = Test bundle2 =
168
169
170 $ hg debuggetbundle repo bundle -t bundle2
171 $ hg debugbundle bundle
172 Stream params: {}
173 b2x:changegroup -- "{'version': '01'}"
174 7704483d56b2a7b5db54dcee7c62378ac629b348
175 29a4d1f17bd3f0779ca0525bebb1cfb51067c738
176 713346a995c363120712aed1aee7e04afd867638
177 d5f6e1ea452285324836a49d7d3c2a63cfed1d31
178 ff42371d57168345fdf1a3aac66a51f6a45d41d2
179 bac16991d12ff45f9dc43c52da1946dfadb83e80
180 6621d79f61b23ec74cf4b69464343d9e0980ec8b
181 8931463777131cd73923e560b760061f2aa8a4bc
182 f34414c64173e0ecb61b25dc55e116dbbcc89bee
183 928b5f94cdb278bb536eba552de348a4e92ef24d
184 700b7e19db54103633c4bf4a6a6b6d55f4d50c03
185 63476832d8ec6558cf9bbe3cbe0c757e5cf18043
186 13c0170174366b441dc68e8e33757232fa744458
187 5686dbbd9fc46cb806599c878d02fe1cb56b83d3
188 8365676dbab05860ce0d9110f2af51368b961bbd
189 0b2f73f04880d9cb6a5cd8a757f0db0ad01e32c3
190 4801a72e5d88cb515b0c7e40fae34180f3f837f2
191 10c14a2cc935e1d8c31f9e98587dcf27fb08a6da
169 = Test via HTTP =
192 = Test via HTTP =
170
193
171 Get everything:
194 Get everything:
General Comments 0
You need to be logged in to leave comments. Login now