15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
# TODO: Split the command framework away from the actual commands.
20
# TODO: probably should say which arguments are candidates for glob
21
# expansion on windows and do that at the command level.
27
22
from bzrlib.trace import mutter, note, log_error, warning
130
def get_merge_type(typestring):
131
"""Attempt to find the merge class/factory associated with a string."""
132
from merge import merge_types
134
return merge_types[typestring][0]
136
templ = '%s%%7s: %%s' % (' '*12)
137
lines = [templ % (f[0], f[1][1]) for f in merge_types.iteritems()]
138
type_list = '\n'.join(lines)
139
msg = "No known merge type %s. Supported types are:\n%s" %\
140
(typestring, type_list)
141
raise BzrCommandError(msg)
145
126
def _get_cmd_dict(plugins_override=True):
539
class cmd_mv(Command):
540
"""Move or rename a file.
543
bzr mv OLDNAME NEWNAME
544
bzr mv SOURCE... DESTINATION
546
If the last argument is a versioned directory, all the other names
547
are moved into it. Otherwise, there must be exactly two arguments
548
and the file is changed to a new name, which must not already exist.
550
Files cannot be moved between branches.
552
takes_args = ['names*']
553
def run(self, names_list):
554
if len(names_list) < 2:
555
raise BzrCommandError("missing file argument")
556
b = find_branch(names_list[0])
558
rel_names = [b.relpath(x) for x in names_list]
560
if os.path.isdir(names_list[-1]):
561
# move into existing directory
562
b.move(rel_names[:-1], rel_names[-1])
564
if len(names_list) != 2:
565
raise BzrCommandError('to mv multiple files the destination '
566
'must be a versioned directory')
567
b.move(rel_names[0], rel_names[1])
572
521
class cmd_pull(Command):
640
589
takes_args = ['from_location', 'to_location?']
641
590
takes_options = ['revision']
642
aliases = ['get', 'clone']
644
592
def run(self, from_location, to_location=None, revision=None):
646
594
from bzrlib.merge import merge
647
from bzrlib.branch import DivergedBranches, \
595
from bzrlib.branch import DivergedBranches, NoSuchRevision, \
648
596
find_cached_branch, Branch
649
597
from shutil import rmtree
650
598
from meta_store import CachedStore
1455
1403
--force is given.
1457
1405
takes_args = ['other_spec', 'base_spec?']
1458
takes_options = ['force', 'merge-type']
1406
takes_options = ['force']
1460
def run(self, other_spec, base_spec=None, force=False, merge_type=None):
1408
def run(self, other_spec, base_spec=None, force=False):
1461
1409
from bzrlib.merge import merge
1462
from bzrlib.merge_core import ApplyMerge3
1463
if merge_type is None:
1464
merge_type = ApplyMerge3
1465
1410
merge(parse_spec(other_spec), parse_spec(base_spec),
1466
check_clean=(not force), merge_type=merge_type)
1411
check_clean=(not force))
1469
1415
class cmd_revert(Command):
1416
"""Restore selected files from a previous revision.
1418
takes_args = ['file+']
1419
def run(self, file_list):
1420
from bzrlib.branch import find_branch
1425
b = find_branch(file_list[0])
1427
b.revert([b.relpath(f) for f in file_list])
1430
class cmd_merge_revert(Command):
1470
1431
"""Reverse all changes since the last commit.
1472
Only versioned files are affected. Specify filenames to revert only
1473
those files. By default, any files that are changed will be backed up
1474
first. Backup files have a '~' appended to their name.
1433
Only versioned files are affected.
1435
TODO: Store backups of any files that will be reverted, so
1436
that the revert can be undone.
1476
takes_options = ['revision', 'no-backup']
1477
takes_args = ['file*']
1478
aliases = ['merge-revert']
1438
takes_options = ['revision']
1480
def run(self, revision=None, no_backup=False, file_list=None):
1440
def run(self, revision=None):
1481
1441
from bzrlib.merge import merge
1482
if file_list is not None:
1483
if len(file_list) == 0:
1484
raise BzrCommandError("No files specified")
1485
1442
if revision is None:
1486
1443
revision = [-1]
1487
1444
elif len(revision) != 1:
1488
raise BzrCommandError('bzr revert --revision takes exactly 1 argument')
1445
raise BzrCommandError('bzr merge-revert --revision takes exactly 1 argument')
1489
1446
merge(('.', revision[0]), parse_spec('.'),
1490
1447
check_clean=False,
1492
backup_files=not no_backup,
1493
file_list=file_list)
1496
1451
class cmd_assert_fail(Command):