comparison mercurial/commands.py @ 51552:15e680a44502

unbundle: move most of the logic on cmdutil to help debug::unbundle reuse This make sure `hg debug::unbundle` focus on the core logic.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 27 Mar 2024 17:46:23 +0000
parents a151fd01e98c
children cc44b3df9bb4
comparison
equal deleted inserted replaced
51551:a151fd01e98c 51552:15e680a44502
58 rewriteutil, 58 rewriteutil,
59 scmutil, 59 scmutil,
60 server, 60 server,
61 shelve as shelvemod, 61 shelve as shelvemod,
62 state as statemod, 62 state as statemod,
63 streamclone,
64 tags as tagsmod, 63 tags as tagsmod,
65 ui as uimod, 64 ui as uimod,
66 util, 65 util,
67 verify as verifymod, 66 verify as verifymod,
68 vfs as vfsmod, 67 vfs as vfsmod,
7690 ) 7689 )
7691 ], 7690 ],
7692 _(b'[-u] FILE...'), 7691 _(b'[-u] FILE...'),
7693 helpcategory=command.CATEGORY_IMPORT_EXPORT, 7692 helpcategory=command.CATEGORY_IMPORT_EXPORT,
7694 ) 7693 )
7695 def unbundle(ui, repo, fname1, *fnames, _unbundle_source=b'unbundle', **opts): 7694 def unbundle(ui, repo, fname1, *fnames, **opts):
7696 """apply one or more bundle files 7695 """apply one or more bundle files
7697 7696
7698 Apply one or more bundle files generated by :hg:`bundle`. 7697 Apply one or more bundle files generated by :hg:`bundle`.
7699 7698
7700 Returns 0 on success, 1 if an update has unresolved files. 7699 Returns 0 on success, 1 if an update has unresolved files.
7701 """ 7700 """
7702 fnames = (fname1,) + fnames 7701 fnames = (fname1,) + fnames
7703 7702 modheads = cmdutil.unbundle_files(ui, repo, fnames)
7704 with repo.lock():
7705 for fname in fnames:
7706 f = hg.openpath(ui, fname)
7707 gen = exchange.readbundle(ui, f, fname)
7708 if isinstance(gen, streamclone.streamcloneapplier):
7709 raise error.InputError(
7710 _(
7711 b'packed bundles cannot be applied with '
7712 b'"hg unbundle"'
7713 ),
7714 hint=_(b'use "hg debugapplystreamclonebundle"'),
7715 )
7716 url = b'bundle:' + fname
7717 try:
7718 txnname = b'unbundle'
7719 if not isinstance(gen, bundle2.unbundle20):
7720 txnname = b'unbundle\n%s' % urlutil.hidepassword(url)
7721 with repo.transaction(txnname) as tr:
7722 op = bundle2.applybundle(
7723 repo,
7724 gen,
7725 tr,
7726 source=_unbundle_source, # used by debug::unbundle
7727 url=url,
7728 )
7729 except error.BundleUnknownFeatureError as exc:
7730 raise error.Abort(
7731 _(b'%s: unknown bundle feature, %s') % (fname, exc),
7732 hint=_(
7733 b"see https://mercurial-scm.org/"
7734 b"wiki/BundleFeature for more "
7735 b"information"
7736 ),
7737 )
7738 modheads = bundle2.combinechangegroupresults(op)
7739 7703
7740 if cmdutil.postincoming(ui, repo, modheads, opts.get('update'), None, None): 7704 if cmdutil.postincoming(ui, repo, modheads, opts.get('update'), None, None):
7741 return 1 7705 return 1
7742 else: 7706 else:
7743 return 0 7707 return 0