Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 26531:15ce78517d4b
bundle: extend the format of --type to support version and compression
We had some basic undocumented support for uncompressed bundle2 support. We now
have an official extensible syntax to specify both format type and compression
(eg: bzip2-v2).
In practice, this changeset introduce the 'v1' and 'v2' identifier to make it
possible to combine format and compression. The default format is still 'v1'.
We'll care about picking 'v1' or 'v2' in regard with general delta in the next
changesets.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 01 Oct 2015 19:16:00 -0700 |
parents | 77c13f3c01ca |
children | 3e61b325e79a |
comparison
equal
deleted
inserted
replaced
26530:52642e12e7b3 | 26531:15ce78517d4b |
---|---|
1217 If you omit the destination repository, then hg assumes the | 1217 If you omit the destination repository, then hg assumes the |
1218 destination will have all the nodes you specify with --base | 1218 destination will have all the nodes you specify with --base |
1219 parameters. To create a bundle containing all changesets, use | 1219 parameters. To create a bundle containing all changesets, use |
1220 -a/--all (or --base null). | 1220 -a/--all (or --base null). |
1221 | 1221 |
1222 You can change compression method with the -t/--type option. | 1222 You can change bundle format with the -t/--type option. You can |
1223 The available compression methods are: none, bzip2, and | 1223 specify a compression, a bundle version or both using a dash |
1224 gzip (by default, bundles are compressed using bzip2). | 1224 (comp-version). The available compression methods are: none, bzip2, |
1225 and gzip (by default, bundles are compressed using bzip2). The | |
1226 available format are: v1, v2 (default to v1). | |
1225 | 1227 |
1226 The bundle file can then be transferred using conventional means | 1228 The bundle file can then be transferred using conventional means |
1227 and applied to another repository with the unbundle or pull | 1229 and applied to another repository with the unbundle or pull |
1228 command. This is useful when direct push and pull are not | 1230 command. This is useful when direct push and pull are not |
1229 available or when exporting an entire repository is undesirable. | 1231 available or when exporting an entire repository is undesirable. |
1236 revs = None | 1238 revs = None |
1237 if 'rev' in opts: | 1239 if 'rev' in opts: |
1238 revs = scmutil.revrange(repo, opts['rev']) | 1240 revs = scmutil.revrange(repo, opts['rev']) |
1239 | 1241 |
1240 bundletype = opts.get('type', 'bzip2').lower() | 1242 bundletype = opts.get('type', 'bzip2').lower() |
1241 bundletype = cmdutil.parsebundletype(bundletype) | 1243 cgversion, bcompression = cmdutil.parsebundletype(repo, bundletype) |
1242 | 1244 |
1243 if opts.get('all'): | 1245 if opts.get('all'): |
1244 base = ['null'] | 1246 base = ['null'] |
1245 else: | 1247 else: |
1246 base = scmutil.revrange(repo, opts.get('base')) | 1248 base = scmutil.revrange(repo, opts.get('base')) |
1251 raise util.Abort(_("--base is incompatible with specifying " | 1253 raise util.Abort(_("--base is incompatible with specifying " |
1252 "a destination")) | 1254 "a destination")) |
1253 common = [repo.lookup(rev) for rev in base] | 1255 common = [repo.lookup(rev) for rev in base] |
1254 heads = revs and map(repo.lookup, revs) or revs | 1256 heads = revs and map(repo.lookup, revs) or revs |
1255 cg = changegroup.getchangegroup(repo, 'bundle', heads=heads, | 1257 cg = changegroup.getchangegroup(repo, 'bundle', heads=heads, |
1256 common=common, bundlecaps=bundlecaps) | 1258 common=common, bundlecaps=bundlecaps, |
1259 version=cgversion) | |
1257 outgoing = None | 1260 outgoing = None |
1258 else: | 1261 else: |
1259 dest = ui.expandpath(dest or 'default-push', dest or 'default') | 1262 dest = ui.expandpath(dest or 'default-push', dest or 'default') |
1260 dest, branches = hg.parseurl(dest, opts.get('branch')) | 1263 dest, branches = hg.parseurl(dest, opts.get('branch')) |
1261 other = hg.peer(repo, opts, dest) | 1264 other = hg.peer(repo, opts, dest) |
1264 outgoing = discovery.findcommonoutgoing(repo, other, | 1267 outgoing = discovery.findcommonoutgoing(repo, other, |
1265 onlyheads=heads, | 1268 onlyheads=heads, |
1266 force=opts.get('force'), | 1269 force=opts.get('force'), |
1267 portable=True) | 1270 portable=True) |
1268 cg = changegroup.getlocalchangegroup(repo, 'bundle', outgoing, | 1271 cg = changegroup.getlocalchangegroup(repo, 'bundle', outgoing, |
1269 bundlecaps) | 1272 bundlecaps, version=cgversion) |
1270 if not cg: | 1273 if not cg: |
1271 scmutil.nochangesfound(ui, repo, outgoing and outgoing.excluded) | 1274 scmutil.nochangesfound(ui, repo, outgoing and outgoing.excluded) |
1272 return 1 | 1275 return 1 |
1273 | 1276 |
1274 changegroup.writebundle(ui, cg, fname, bundletype) | 1277 if cgversion == '01': #bundle1 |
1278 if bcompression is None: | |
1279 bcompression = 'UN' | |
1280 bversion = 'HG10' + bcompression | |
1281 bcompression = None | |
1282 else: | |
1283 assert cgversion == '02' | |
1284 bversion = 'HG20' | |
1285 | |
1286 | |
1287 changegroup.writebundle(ui, cg, fname, bversion, compression=bcompression) | |
1275 | 1288 |
1276 @command('cat', | 1289 @command('cat', |
1277 [('o', 'output', '', | 1290 [('o', 'output', '', |
1278 _('print output to file with formatted name'), _('FORMAT')), | 1291 _('print output to file with formatted name'), _('FORMAT')), |
1279 ('r', 'rev', '', _('print the given revision'), _('REV')), | 1292 ('r', 'rev', '', _('print the given revision'), _('REV')), |