Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmdutil.py @ 51593: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 | 493034cc3265 |
comparison
equal
deleted
inserted
replaced
51592:a151fd01e98c | 51593:15e680a44502 |
---|---|
33 ) | 33 ) |
34 from .thirdparty import attr | 34 from .thirdparty import attr |
35 | 35 |
36 from . import ( | 36 from . import ( |
37 bookmarks, | 37 bookmarks, |
38 bundle2, | |
38 changelog, | 39 changelog, |
39 copies, | 40 copies, |
40 crecord as crecordmod, | 41 crecord as crecordmod, |
41 encoding, | 42 encoding, |
42 error, | 43 error, |
44 exchange, | |
43 formatter, | 45 formatter, |
44 logcmdutil, | 46 logcmdutil, |
45 match as matchmod, | 47 match as matchmod, |
46 merge as mergemod, | 48 merge as mergemod, |
47 mergestate as mergestatemod, | 49 mergestate as mergestatemod, |
54 repair, | 56 repair, |
55 revlog, | 57 revlog, |
56 rewriteutil, | 58 rewriteutil, |
57 scmutil, | 59 scmutil, |
58 state as statemod, | 60 state as statemod, |
61 streamclone, | |
59 subrepoutil, | 62 subrepoutil, |
60 templatekw, | 63 templatekw, |
61 templater, | 64 templater, |
62 util, | 65 util, |
63 vfs as vfsmod, | 66 vfs as vfsmod, |
64 ) | 67 ) |
65 | 68 |
66 from .utils import ( | 69 from .utils import ( |
67 dateutil, | 70 dateutil, |
68 stringutil, | 71 stringutil, |
72 urlutil, | |
69 ) | 73 ) |
70 | 74 |
71 from .revlogutils import ( | 75 from .revlogutils import ( |
72 constants as revlog_constants, | 76 constants as revlog_constants, |
73 ) | 77 ) |
4176 else: | 4180 else: |
4177 ui.status(_(b"(run 'hg heads' to see heads)\n")) | 4181 ui.status(_(b"(run 'hg heads' to see heads)\n")) |
4178 elif not ui.configbool(b'commands', b'update.requiredest'): | 4182 elif not ui.configbool(b'commands', b'update.requiredest'): |
4179 ui.status(_(b"(run 'hg update' to get a working copy)\n")) | 4183 ui.status(_(b"(run 'hg update' to get a working copy)\n")) |
4180 return False | 4184 return False |
4185 | |
4186 | |
4187 def unbundle_files(ui, repo, fnames, unbundle_source=b'unbundle'): | |
4188 """utility for `hg unbundle` and `hg debug::unbundle`""" | |
4189 assert fnames | |
4190 # avoid circular import | |
4191 from . import hg | |
4192 | |
4193 with repo.lock(): | |
4194 for fname in fnames: | |
4195 f = hg.openpath(ui, fname) | |
4196 gen = exchange.readbundle(ui, f, fname) | |
4197 if isinstance(gen, streamclone.streamcloneapplier): | |
4198 raise error.InputError( | |
4199 _( | |
4200 b'packed bundles cannot be applied with ' | |
4201 b'"hg unbundle"' | |
4202 ), | |
4203 hint=_(b'use "hg debugapplystreamclonebundle"'), | |
4204 ) | |
4205 url = b'bundle:' + fname | |
4206 try: | |
4207 txnname = b'unbundle' | |
4208 if not isinstance(gen, bundle2.unbundle20): | |
4209 txnname = b'unbundle\n%s' % urlutil.hidepassword(url) | |
4210 with repo.transaction(txnname) as tr: | |
4211 op = bundle2.applybundle( | |
4212 repo, | |
4213 gen, | |
4214 tr, | |
4215 source=unbundle_source, # used by debug::unbundle | |
4216 url=url, | |
4217 ) | |
4218 except error.BundleUnknownFeatureError as exc: | |
4219 raise error.Abort( | |
4220 _(b'%s: unknown bundle feature, %s') % (fname, exc), | |
4221 hint=_( | |
4222 b"see https://mercurial-scm.org/" | |
4223 b"wiki/BundleFeature for more " | |
4224 b"information" | |
4225 ), | |
4226 ) | |
4227 modheads = bundle2.combinechangegroupresults(op) | |
4228 return modheads |