250
250
To skip the display of pending merge information altogether, use
251
251
the no-pending option or specify a file/directory.
253
To compare the working directory to a specific revision, pass a
254
single revision to the revision argument.
256
To see which files have changed in a specific revision, or between
257
two revisions, pass a revision range to the revision argument.
258
This will produce the same results as calling 'bzr diff --summarize'.
253
If a revision argument is given, the status is calculated against
254
that revision, or between two revisions if two are provided.
261
257
# TODO: --no-recurse, --recurse options
485
477
d.destroy_workingtree()
488
class cmd_repair_workingtree(Command):
489
__doc__ = """Reset the working tree state file.
491
This is not meant to be used normally, but more as a way to recover from
492
filesystem corruption, etc. This rebuilds the working inventory back to a
493
'known good' state. Any new modifications (adding a file, renaming, etc)
494
will be lost, though modified files will still be detected as such.
496
Most users will want something more like "bzr revert" or "bzr update"
497
unless the state file has become corrupted.
499
By default this attempts to recover the current state by looking at the
500
headers of the state file. If the state file is too corrupted to even do
501
that, you can supply --revision to force the state of the tree.
504
takes_options = ['revision', 'directory',
506
help='Reset the tree even if it doesn\'t appear to be'
511
def run(self, revision=None, directory='.', force=False):
512
tree, _ = WorkingTree.open_containing(directory)
513
self.add_cleanup(tree.lock_tree_write().unlock)
517
except errors.BzrError:
518
pass # There seems to be a real error here, so we'll reset
521
raise errors.BzrCommandError(
522
'The tree does not appear to be corrupt. You probably'
523
' want "bzr revert" instead. Use "--force" if you are'
524
' sure you want to reset the working tree.')
528
revision_ids = [r.as_revision_id(tree.branch) for r in revision]
530
tree.reset_state(revision_ids)
531
except errors.BzrError, e:
532
if revision_ids is None:
533
extra = (', the header appears corrupt, try passing -r -1'
534
' to set the state to the last commit')
537
raise errors.BzrCommandError('failed to reset the tree state'
541
480
class cmd_revno(Command):
542
481
__doc__ = """Show current revision number.
962
901
match the remote one, use pull --overwrite. This will work even if the two
963
902
branches have diverged.
965
If there is no default location set, the first pull will set it (use
966
--no-remember to avoid settting it). After that, you can omit the
967
location to use the default. To change the default, use --remember. The
968
value will only be saved if the remote location can be accessed.
904
If there is no default location set, the first pull will set it. After
905
that, you can omit the location to use the default. To change the
906
default, use --remember. The value will only be saved if the remote
907
location can be accessed.
970
909
Note: The location can be specified either in the form of a branch,
971
910
or in the form of a path to a file containing a merge directive generated
984
923
"branch. Local pulls are not applied to "
985
924
"the master branch."
988
help="Show base revision text in conflicts.")
990
927
takes_args = ['location?']
991
928
encoding_type = 'replace'
993
def run(self, location=None, remember=None, overwrite=False,
930
def run(self, location=None, remember=False, overwrite=False,
994
931
revision=None, verbose=False,
995
directory=None, local=False,
932
directory=None, local=False):
997
933
# FIXME: too much stuff is in the command class
998
934
revision_id = None
1099
1026
do a merge (see bzr help merge) from the other branch, and commit that.
1100
1027
After that you will be able to do a push without '--overwrite'.
1102
If there is no default push location set, the first push will set it (use
1103
--no-remember to avoid settting it). After that, you can omit the
1104
location to use the default. To change the default, use --remember. The
1105
value will only be saved if the remote location can be accessed.
1029
If there is no default push location set, the first push will set it.
1030
After that, you can omit the location to use the default. To change the
1031
default, use --remember. The value will only be saved if the remote
1032
location can be accessed.
1108
1035
_see_also = ['pull', 'update', 'working-trees']
1129
1056
Option('strict',
1130
1057
help='Refuse to push if there are uncommitted changes in'
1131
1058
' the working tree, --no-strict disables the check.'),
1133
help="Don't populate the working tree, even for protocols"
1134
" that support it."),
1136
1060
takes_args = ['location?']
1137
1061
encoding_type = 'replace'
1139
def run(self, location=None, remember=None, overwrite=False,
1063
def run(self, location=None, remember=False, overwrite=False,
1140
1064
create_prefix=False, verbose=False, revision=None,
1141
1065
use_existing_dir=False, directory=None, stacked_on=None,
1142
stacked=False, strict=None, no_tree=False):
1066
stacked=False, strict=None):
1143
1067
from bzrlib.push import _show_push_branch
1145
1069
if directory is None:
1191
1115
_show_push_branch(br_from, revision_id, location, self.outf,
1192
1116
verbose=verbose, overwrite=overwrite, remember=remember,
1193
1117
stacked_on=stacked_on, create_prefix=create_prefix,
1194
use_existing_dir=use_existing_dir, no_tree=no_tree)
1118
use_existing_dir=use_existing_dir)
1197
1121
class cmd_branch(Command):
1243
1165
files_from=None):
1244
1166
from bzrlib import switch as _mod_switch
1245
1167
from bzrlib.tag import _merge_tags_if_possible
1246
if self.invoked_as in ['get', 'clone']:
1247
ui.ui_factory.show_user_warning(
1248
'deprecated_command',
1249
deprecated_name=self.invoked_as,
1250
recommended_name='branch',
1251
deprecated_in_version='2.4')
1252
1168
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1254
1170
if not (hardlink or files_from):
1438
1354
If you want to discard your local changes, you can just do a
1439
1355
'bzr revert' instead of 'bzr commit' after the update.
1441
If you want to restore a file that has been removed locally, use
1442
'bzr revert' instead of 'bzr update'.
1444
1357
If the tree's branch is bound to a master branch, it will also update
1445
1358
the branch from the master.
1448
1361
_see_also = ['pull', 'working-trees', 'status-flags']
1449
1362
takes_args = ['dir?']
1450
takes_options = ['revision',
1452
help="Show base revision text in conflicts."),
1363
takes_options = ['revision']
1454
1364
aliases = ['up']
1456
def run(self, dir='.', revision=None, show_base=None):
1366
def run(self, dir='.', revision=None):
1457
1367
if revision is not None and len(revision) != 1:
1458
1368
raise errors.BzrCommandError(
1459
1369
"bzr update --revision takes exactly one revision")
1582
1491
title='Deletion Strategy', value_switches=True, enum_switch=False,
1583
1492
safe='Backup changed files (default).',
1584
1493
keep='Delete from bzr but leave the working copy.',
1585
no_backup='Don\'t backup changed files.',
1586
1494
force='Delete all the specified files, even if they can not be '
1587
'recovered and even if they are non-empty directories. '
1588
'(deprecated, use no-backup)')]
1495
'recovered and even if they are non-empty directories.')]
1589
1496
aliases = ['rm', 'del']
1590
1497
encoding_type = 'replace'
1592
1499
def run(self, file_list, verbose=False, new=False,
1593
1500
file_deletion_strategy='safe'):
1594
if file_deletion_strategy == 'force':
1595
note("(The --force option is deprecated, rather use --no-backup "
1597
file_deletion_strategy = 'no-backup'
1599
1501
tree, file_list = WorkingTree.open_containing_paths(file_list)
1601
1503
if file_list is not None:
1784
1686
Option('append-revisions-only',
1785
1687
help='Never change revnos or the existing log.'
1786
' Append revisions to it only.'),
1788
'Create a branch without a working tree.')
1688
' Append revisions to it only.')
1790
1690
def run(self, location=None, format=None, append_revisions_only=False,
1791
create_prefix=False, no_tree=False):
1691
create_prefix=False):
1792
1692
if format is None:
1793
1693
format = bzrdir.format_registry.make_bzrdir('default')
1794
1694
if location is None:
3115
2984
to trigger updates to external systems like bug trackers. The --fixes
3116
2985
option can be used to record the association between a revision and
3117
2986
one or more bugs. See ``bzr help bugs`` for details.
2988
A selective commit may fail in some cases where the committed
2989
tree would be invalid. Consider::
2994
bzr commit foo -m "committing foo"
2995
bzr mv foo/bar foo/baz
2998
bzr commit foo/bar -m "committing bar but not baz"
3000
In the example above, the last commit will fail by design. This gives
3001
the user the opportunity to decide whether they want to commit the
3002
rename at the same time, separately first, or not at all. (As a general
3003
rule, when in doubt, Bazaar has a policy of Doing the Safe Thing.)
3005
# TODO: Run hooks on tree to-be-committed, and after commit.
3007
# TODO: Strict commit that fails if there are deleted files.
3008
# (what does "deleted files" mean ??)
3010
# TODO: Give better message for -s, --summary, used by tla people
3012
# XXX: verbose currently does nothing
3120
3014
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3121
3015
takes_args = ['selected*']
3182
3072
def run(self, message=None, file=None, verbose=False, selected_list=None,
3183
3073
unchanged=False, strict=False, local=False, fixes=None,
3184
author=None, show_diff=False, exclude=None, commit_time=None,
3074
author=None, show_diff=False, exclude=None, commit_time=None):
3186
3075
from bzrlib.errors import (
3187
3076
PointlessCommit,
3188
3077
ConflictsInTree,
3284
3179
reporter=None, verbose=verbose, revprops=properties,
3285
3180
authors=author, timestamp=commit_stamp,
3286
3181
timezone=offset,
3287
exclude=tree.safe_relpath_files(exclude),
3182
exclude=tree.safe_relpath_files(exclude))
3289
3183
except PointlessCommit:
3290
3184
raise errors.BzrCommandError("No changes to commit."
3291
" Please 'bzr add' the files you want to commit, or use"
3292
" --unchanged to force an empty commit.")
3185
" Use --unchanged to commit anyhow.")
3293
3186
except ConflictsInTree:
3294
3187
raise errors.BzrCommandError('Conflicts detected in working '
3295
3188
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3378
3271
class cmd_upgrade(Command):
3379
__doc__ = """Upgrade a repository, branch or working tree to a newer format.
3381
When the default format has changed after a major new release of
3382
Bazaar, you may be informed during certain operations that you
3383
should upgrade. Upgrading to a newer format may improve performance
3384
or make new features available. It may however limit interoperability
3385
with older repositories or with older versions of Bazaar.
3387
If you wish to upgrade to a particular format rather than the
3388
current default, that can be specified using the --format option.
3389
As a consequence, you can use the upgrade command this way to
3390
"downgrade" to an earlier format, though some conversions are
3391
a one way process (e.g. changing from the 1.x default to the
3392
2.x default) so downgrading is not always possible.
3394
A backup.bzr.~#~ directory is created at the start of the conversion
3395
process (where # is a number). By default, this is left there on
3396
completion. If the conversion fails, delete the new .bzr directory
3397
and rename this one back in its place. Use the --clean option to ask
3398
for the backup.bzr directory to be removed on successful conversion.
3399
Alternatively, you can delete it by hand if everything looks good
3402
If the location given is a shared repository, dependent branches
3403
are also converted provided the repository converts successfully.
3404
If the conversion of a branch fails, remaining branches are still
3407
For more information on upgrades, see the Bazaar Upgrade Guide,
3408
http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
3272
__doc__ = """Upgrade branch storage to current format.
3274
The check command or bzr developers may sometimes advise you to run
3275
this command. When the default format has changed you may also be warned
3276
during other operations to upgrade.
3411
_see_also = ['check', 'reconcile', 'formats']
3279
_see_also = ['check']
3412
3280
takes_args = ['url?']
3413
3281
takes_options = [
3414
RegistryOption('format',
3415
help='Upgrade to a specific format. See "bzr help'
3416
' formats" for details.',
3417
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3418
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3419
value_switches=True, title='Branch format'),
3421
help='Remove the backup.bzr directory if successful.'),
3423
help="Show what would be done, but don't actually do anything."),
3282
RegistryOption('format',
3283
help='Upgrade to a specific format. See "bzr help'
3284
' formats" for details.',
3285
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3286
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3287
value_switches=True, title='Branch format'),
3426
def run(self, url='.', format=None, clean=False, dry_run=False):
3290
def run(self, url='.', format=None):
3427
3291
from bzrlib.upgrade import upgrade
3428
exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3430
if len(exceptions) == 1:
3431
# Compatibility with historical behavior
3292
upgrade(url, format)
3437
3295
class cmd_whoami(Command):
3836
3690
with bzr send. If neither is specified, the default is the upstream branch
3837
3691
or the branch most recently merged using --remember.
3839
When merging from a branch, by default bzr will try to merge in all new
3840
work from the other branch, automatically determining an appropriate base
3841
revision. If this fails, you may need to give an explicit base.
3843
To pick a different ending revision, pass "--revision OTHER". bzr will
3844
try to merge in all new work up to and including revision OTHER.
3846
If you specify two values, "--revision BASE..OTHER", only revisions BASE
3847
through OTHER, excluding BASE but including OTHER, will be merged. If this
3848
causes some revisions to be skipped, i.e. if the destination branch does
3849
not already contain revision BASE, such a merge is commonly referred to as
3850
a "cherrypick". Unlike a normal merge, Bazaar does not currently track
3851
cherrypicks. The changes look like a normal commit, and the history of the
3852
changes from the other branch is not stored in the commit.
3854
Revision numbers are always relative to the source branch.
3693
When merging a branch, by default the tip will be merged. To pick a different
3694
revision, pass --revision. If you specify two values, the first will be used as
3695
BASE and the second one as OTHER. Merging individual revisions, or a subset of
3696
available revisions, like this is commonly referred to as "cherrypicking".
3698
Revision numbers are always relative to the branch being merged.
3700
By default, bzr will try to merge in all new work from the other
3701
branch, automatically determining an appropriate base. If this
3702
fails, you may need to give an explicit base.
3856
3704
Merge will do its best to combine the changes in two branches, but there
3857
3705
are some kinds of problems only a human can fix. When it encounters those,
3861
3709
Use bzr resolve when you have fixed a problem. See also bzr conflicts.
3863
If there is no default branch set, the first merge will set it (use
3864
--no-remember to avoid settting it). After that, you can omit the branch
3865
to use the default. To change the default, use --remember. The value will
3866
only be saved if the remote location can be accessed.
3711
If there is no default branch set, the first merge will set it. After
3712
that, you can omit the branch to use the default. To change the
3713
default, use --remember. The value will only be saved if the remote
3714
location can be accessed.
3868
3716
The results of the merge are placed into the destination working
3869
3717
directory, where they can be reviewed (with bzr diff), tested, and then
3936
3784
def run(self, location=None, revision=None, force=False,
3937
merge_type=None, show_base=False, reprocess=None, remember=None,
3785
merge_type=None, show_base=False, reprocess=None, remember=False,
3938
3786
uncommitted=False, pull=False,
3939
3787
directory=None,
4121
3965
if other_revision_id is None:
4122
3966
other_revision_id = _mod_revision.ensure_null(
4123
3967
other_branch.last_revision())
4124
# Remember where we merge from. We need to remember if:
4125
# - user specify a location (and we don't merge from the parent
4127
# - user ask to remember or there is no previous location set to merge
4128
# from and user didn't ask to *not* remember
4129
if (user_location is not None
4131
or (remember is None
4132
and tree.branch.get_submit_branch() is None)))):
3968
# Remember where we merge from
3969
if ((remember or tree.branch.get_submit_branch() is None) and
3970
user_location is not None):
4133
3971
tree.branch.set_submit_branch(other_branch.base)
4134
# Merge tags (but don't set them in the master branch yet, the user
4135
# might revert this merge). Commit will propagate them.
4136
_merge_tags_if_possible(other_branch, tree.branch, ignore_master=True)
3972
_merge_tags_if_possible(other_branch, tree.branch)
4137
3973
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4138
3974
other_revision_id, base_revision_id, other_branch, base_branch)
4139
3975
if other_path != '':
4307
4143
last committed revision is used.
4309
4145
To remove only some changes, without reverting to a prior version, use
4310
merge instead. For example, "merge . -r -2..-3" (don't forget the ".")
4311
will remove the changes introduced by the second last commit (-2), without
4312
affecting the changes introduced by the last commit (-1). To remove
4313
certain changes on a hunk-by-hunk basis, see the shelve command.
4146
merge instead. For example, "merge . --revision -2..-3" will remove the
4147
changes introduced by -2, without affecting the changes introduced by -1.
4148
Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4315
4150
By default, any files that have been manually changed will be backed up
4316
4151
first. (Files changed only by merge are not backed up.) Backup files have
4646
4481
@display_command
4647
4482
def run(self, verbose=False):
4648
from bzrlib import plugin
4649
# Don't give writelines a generator as some codecs don't like that
4650
self.outf.writelines(
4651
list(plugin.describe_plugins(show_paths=verbose)))
4483
import bzrlib.plugin
4484
from inspect import getdoc
4486
for name, plugin in bzrlib.plugin.plugins().items():
4487
version = plugin.__version__
4488
if version == 'unknown':
4490
name_ver = '%s %s' % (name, version)
4491
d = getdoc(plugin.module)
4493
doc = d.split('\n')[0]
4495
doc = '(no description)'
4496
result.append((name_ver, doc, plugin.path()))
4497
for name_ver, doc, path in sorted(result):
4498
self.outf.write("%s\n" % name_ver)
4499
self.outf.write(" %s\n" % doc)
4501
self.outf.write(" %s\n" % path)
4502
self.outf.write("\n")
4654
4505
class cmd_testament(Command):
4718
4567
self.add_cleanup(branch.lock_read().unlock)
4719
4568
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4720
4569
self.add_cleanup(tree.lock_read().unlock)
4721
if wt is not None and revision is None:
4722
4571
file_id = wt.path2id(relpath)
4724
4573
file_id = tree.path2id(relpath)
4725
4574
if file_id is None:
4726
4575
raise errors.NotVersionedError(filename)
4576
file_version = tree.inventory[file_id].revision
4727
4577
if wt is not None and revision is None:
4728
4578
# If there is a tree and we're not annotating historical
4729
4579
# versions, annotate the working tree's content.
4730
4580
annotate_file_tree(wt, file_id, self.outf, long, all,
4731
4581
show_ids=show_ids)
4733
annotate_file_tree(tree, file_id, self.outf, long, all,
4734
show_ids=show_ids, branch=branch)
4583
annotate_file(branch, file_version, file_id, long, all, self.outf,
4737
4587
class cmd_re_sign(Command):
4988
4835
takes_options = [
4989
4836
Option('config',
4990
4837
help='LOCATION is the directory where the config lock is.'),
4992
help='Do not ask for confirmation before breaking the lock.'),
4995
def run(self, location=None, config=False, force=False):
4840
def run(self, location=None, config=False):
4996
4841
if location is None:
4997
4842
location = u'.'
4999
ui.ui_factory = ui.ConfirmationUserInterfacePolicy(ui.ui_factory,
5001
{'bzrlib.lockdir.break': True})
5003
4844
conf = _mod_config.LockableConfig(file_name=location)
5004
4845
conf.break_lock()
5294
5135
source branch defaults to that containing the working directory, but can
5295
5136
be changed using --from.
5297
Both the submit branch and the public branch follow the usual behavior with
5298
respect to --remember: If there is no default location set, the first send
5299
will set it (use --no-remember to avoid settting it). After that, you can
5300
omit the location to use the default. To change the default, use
5301
--remember. The value will only be saved if the location can be accessed.
5303
5138
In order to calculate those changes, bzr must analyse the submit branch.
5304
5139
Therefore it is most efficient for the submit branch to be a local mirror.
5305
5140
If a public location is known for the submit_branch, that location is used
5376
5211
def run(self, submit_branch=None, public_branch=None, no_bundle=False,
5377
no_patch=False, revision=None, remember=None, output=None,
5212
no_patch=False, revision=None, remember=False, output=None,
5378
5213
format=None, mail_to=None, message=None, body=None,
5379
5214
strict=None, **kwargs):
5380
5215
from bzrlib.send import send
5537
5372
takes_options = [
5538
5373
custom_help('directory',
5539
5374
help='Branch whose tags should be displayed.'),
5540
RegistryOption('sort',
5375
RegistryOption.from_kwargs('sort',
5541
5376
'Sort tags by different criteria.', title='Sorting',
5542
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5377
alpha='Sort tags lexicographically (default).',
5378
time='Sort tags chronologically.',
5548
5384
@display_command
5549
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5550
from bzrlib.tag import tag_sort_methods
5551
5391
branch, relpath = Branch.open_containing(directory)
5553
5393
tags = branch.tags.get_tag_dict().items()
5562
5402
# only show revisions between revid1 and revid2 (inclusive)
5563
5403
tags = [(tag, revid) for tag, revid in tags if
5564
5404
graph.is_between(revid, revid1, revid2)]
5566
sort = tag_sort_methods.get()
5407
elif sort == 'time':
5409
for tag, revid in tags:
5411
revobj = branch.repository.get_revision(revid)
5412
except errors.NoSuchRevision:
5413
timestamp = sys.maxint # place them at the end
5415
timestamp = revobj.timestamp
5416
timestamps[revid] = timestamp
5417
tags.sort(key=lambda x: timestamps[x[1]])
5568
5418
if not show_ids:
5569
5419
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5570
5420
for index, (tag, revid) in enumerate(tags):
5994
5844
You can put multiple items on the shelf, and by default, 'unshelve' will
5995
5845
restore the most recently shelved changes.
5997
For complicated changes, it is possible to edit the changes in a separate
5998
editor program to decide what the file remaining in the working copy
5999
should look like. To do this, add the configuration option
6001
change_editor = PROGRAM @new_path @old_path
6003
where @new_path is replaced with the path of the new version of the
6004
file and @old_path is replaced with the path of the old version of
6005
the file. The PROGRAM should save the new file with the desired
6006
contents of the file in the working tree.
6010
5848
takes_args = ['file*']
6022
5860
Option('destroy',
6023
5861
help='Destroy removed changes instead of shelving them.'),
6025
_see_also = ['unshelve', 'configuration']
5863
_see_also = ['unshelve']
6027
5865
def run(self, revision=None, all=False, file_list=None, message=None,
6028
writer=None, list=False, destroy=False, directory=None):
5866
writer=None, list=False, destroy=False, directory=u'.'):
6030
return self.run_for_list(directory=directory)
5868
return self.run_for_list()
6031
5869
from bzrlib.shelf_ui import Shelver
6032
5870
if writer is None:
6033
5871
writer = bzrlib.option.diff_writer_registry.get()
6110
5946
takes_options = ['directory',
6111
5947
Option('ignored', help='Delete all ignored files.'),
6112
Option('detritus', help='Delete conflict files, merge and revert'
5948
Option('detritus', help='Delete conflict files, merge'
6113
5949
' backups, and failed selftest dirs.'),
6114
5950
Option('unknown',
6115
5951
help='Delete files unknown to bzr (default).'),
6174
6010
self.outf.write('%s %s\n' % (path, location))
6177
class cmd_export_pot(Command):
6178
__doc__ = """Export command helps and error messages in po format."""
6183
from bzrlib.export_pot import export_pot
6184
export_pot(self.outf)
6187
6013
def _register_lazy_builtins():
6188
6014
# register lazy builtins from other modules; called at startup and should
6189
6015
# be only called once.
6190
6016
for (name, aliases, module_name) in [
6191
6017
('cmd_bundle_info', [], 'bzrlib.bundle.commands'),
6192
('cmd_config', [], 'bzrlib.config'),
6193
6018
('cmd_dpush', [], 'bzrlib.foreign'),
6194
6019
('cmd_version_info', [], 'bzrlib.cmd_version_info'),
6195
6020
('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6196
6021
('cmd_conflicts', [], 'bzrlib.conflicts'),
6197
6022
('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6198
('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6200
6024
builtin_command_registry.register_lazy(name, aliases, module_name)