17
17
"""builtin bzr commands"""
19
# DO NOT change this to cStringIO - it results in control files
21
# FIXIT! (Only deal with byte streams OR unicode at any one layer.)
24
from StringIO import StringIO
22
from shutil import rmtree
29
from bzrlib import BZRDIR
27
from bzrlib.branch import Branch
28
import bzrlib.bzrdir as bzrdir
30
29
from bzrlib.commands import Command, display_command
31
from bzrlib.branch import Branch
32
30
from bzrlib.revision import common_ancestor
33
31
import bzrlib.errors as errors
34
32
from bzrlib.errors import (BzrError, BzrCheckError, BzrCommandError,
35
33
NotBranchError, DivergedBranches, NotConflicted,
36
NoSuchFile, NoWorkingTree, FileInWrongBranch)
34
NoSuchFile, NoWorkingTree, FileInWrongBranch,
36
from bzrlib.log import show_one_log
37
from bzrlib.merge import Merge3Merger
37
38
from bzrlib.option import Option
39
from bzrlib.progress import DummyProgress
38
40
from bzrlib.revisionspec import RevisionSpec
39
41
import bzrlib.trace
40
42
from bzrlib.trace import mutter, note, log_error, warning, is_quiet
43
from bzrlib.transport.local import LocalTransport
41
45
from bzrlib.workingtree import WorkingTree
42
from bzrlib.log import show_one_log
45
48
def tree_files(file_list, default_branch=u'.'):
123
126
def run(self, all=False, show_ids=False, file_list=None, revision=None):
124
127
tree, file_list = tree_files(file_list)
126
from bzrlib.status import show_status
127
show_status(tree.branch, show_unchanged=all, show_ids=show_ids,
128
specific_files=file_list, revision=revision)
129
from bzrlib.status import show_tree_status
130
show_tree_status(tree, show_unchanged=all, show_ids=show_ids,
131
specific_files=file_list, revision=revision)
131
134
class cmd_cat_revision(Command):
395
398
If you want to forget your local changes and just update your branch to
396
399
match the remote one, use --overwrite.
398
takes_options = ['remember', 'overwrite', 'verbose']
401
takes_options = ['remember', 'overwrite', 'revision', 'verbose']
399
402
takes_args = ['location?']
401
def run(self, location=None, remember=False, overwrite=False, verbose=False):
402
from bzrlib.merge import merge
403
from shutil import rmtree
404
def run(self, location=None, remember=False, overwrite=False, revision=None, verbose=False):
405
405
# FIXME: too much stuff is in the command class
406
406
tree_to = WorkingTree.open_containing(u'.')[0]
407
407
stored_loc = tree_to.branch.get_parent()
594
copy_branch(br_from, to_location, revision_id, basis_branch)
599
# preserve whatever source format we have.
600
dir = br_from.bzrdir.sprout(to_location, revision_id, basis_dir)
601
branch = dir.open_branch()
595
602
except bzrlib.errors.NoSuchRevision:
596
603
rmtree(to_location)
597
604
msg = "The branch %s has no revision %s." % (from_location, revision[0])
598
605
raise BzrCommandError(msg)
599
606
except bzrlib.errors.UnlistableBranch:
600
607
rmtree(to_location)
601
msg = "The branch %s cannot be used as a --basis"
608
msg = "The branch %s cannot be used as a --basis" % (basis,)
602
609
raise BzrCommandError(msg)
603
branch = Branch.open(to_location)
605
name = StringIO(name)
606
branch.put_controlfile('branch-name', name)
611
branch.control_files.put_utf8('branch-name', name)
607
613
note('Branched %d revision(s).' % branch.revno())
618
class cmd_checkout(Command):
619
"""Create a new checkout of an existing branch.
621
If the TO_LOCATION is omitted, the last component of the BRANCH_LOCATION will
622
be used. In other words, "checkout ../foo/bar" will attempt to create ./bar.
624
To retrieve the branch as of a particular revision, supply the --revision
625
parameter, as in "checkout foo/bar -r 5". Note that this will be immediately
626
out of date [so you cannot commit] but it may be useful (i.e. to examine old
629
--basis is to speed up checking out from remote branches. When specified, it
630
uses the inventory and file contents from the basis branch in preference to the
631
branch being checked out. [Not implemented yet.]
633
takes_args = ['branch_location', 'to_location?']
634
takes_options = ['revision', # , 'basis']
635
Option('lightweight',
636
help="perform a lightweight checkout. Lightweight "
637
"checkouts depend on access to the branch for "
638
"every operation. Normal checkouts can perform "
639
"common operations like diff and status without "
640
"such access, and also support local commits."
644
def run(self, branch_location, to_location=None, revision=None, basis=None,
648
elif len(revision) > 1:
649
raise BzrCommandError(
650
'bzr checkout --revision takes exactly 1 revision value')
651
source = Branch.open(branch_location)
652
if len(revision) == 1 and revision[0] is not None:
653
revision_id = revision[0].in_history(source)[1]
656
if to_location is None:
657
to_location = os.path.basename(branch_location.rstrip("/\\"))
659
os.mkdir(to_location)
661
if e.errno == errno.EEXIST:
662
raise BzrCommandError('Target directory "%s" already'
663
' exists.' % to_location)
664
if e.errno == errno.ENOENT:
665
raise BzrCommandError('Parent of "%s" does not exist.' %
669
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
670
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
673
checkout = bzrdir.BzrDirMetaFormat1().initialize(to_location)
674
bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
676
checkout_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(
677
to_location, force_new_tree=False)
678
checkout = checkout_branch.bzrdir
679
checkout_branch.bind(source)
680
if revision_id is not None:
681
rh = checkout_branch.revision_history()
682
checkout_branch.set_revision_history(rh[:rh.index(revision_id) + 1])
683
checkout.create_workingtree(revision_id)
685
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
612
688
class cmd_renames(Command):
613
689
"""Show list of renamed files.
629
705
print "%s => %s" % (old_name, new_name)
708
class cmd_update(Command):
709
"""Update a tree to have the latest code committed to its branch.
711
This will perform a merge into the working tree, and may generate
712
conflicts. If you have any local changes, you will still
713
need to commit them after the update for the update to be complete.
715
If you want to discard your local changes, you can just do a
716
'bzr revert' instead of 'bzr commit' after the update.
718
takes_args = ['dir?']
720
def run(self, dir='.'):
721
tree = WorkingTree.open_containing(dir)[0]
724
if tree.last_revision() == tree.branch.last_revision():
725
# may be up to date, check master too.
726
master = tree.branch.get_master_branch()
727
if master is None or master.last_revision == tree.last_revision():
728
note("Tree is up to date.")
730
conflicts = tree.update()
731
note('Updated to revision %d.' %
732
(tree.branch.revision_id_to_revno(tree.last_revision()),))
632
741
class cmd_info(Command):
633
742
"""Show statistical information about a branch."""
634
743
takes_args = ['branch?']
637
746
def run(self, branch=None):
639
b = WorkingTree.open_containing(branch)[0].branch
748
bzrlib.info.show_bzrdir_info(bzrdir.BzrDir.open_containing(branch)[0])
643
751
class cmd_remove(Command):
803
class cmd_reconcile(Command):
804
"""Reconcile bzr metadata in a branch.
806
This can correct data mismatches that may have been caused by
807
previous ghost operations or bzr upgrades. You should only
808
need to run this command if 'bzr check' or a bzr developer
809
advises you to run it.
811
If a second branch is provided, cross-branch reconciliation is
812
also attempted, which will check that data like the tree root
813
id which was not present in very early bzr versions is represented
814
correctly in both branches.
816
At the same time it is run it may recompress data resulting in
817
a potential saving in disk space or performance gain.
819
The branch *MUST* be on a listable system such as local disk or sftp.
821
takes_args = ['branch?']
823
def run(self, branch="."):
824
from bzrlib.reconcile import reconcile
825
dir = bzrlib.bzrdir.BzrDir.open(branch)
695
829
class cmd_revision_history(Command):
696
830
"""Display list of revision ids on this branch."""
776
910
def run(self, revision=None, file_list=None, diff_options=None):
777
from bzrlib.diff import show_diff
911
from bzrlib.diff import diff_cmd_helper, show_diff_trees
779
tree, file_list = internal_tree_files(file_list)
913
tree1, file_list = internal_tree_files(file_list)
782
917
except FileInWrongBranch:
783
918
if len(file_list) != 2:
784
919
raise BzrCommandError("Files are in different branches")
786
b, file1 = Branch.open_containing(file_list[0])
787
b2, file2 = Branch.open_containing(file_list[1])
921
tree1, file1 = WorkingTree.open_containing(file_list[0])
922
tree2, file2 = WorkingTree.open_containing(file_list[1])
788
923
if file1 != "" or file2 != "":
789
924
# FIXME diff those two files. rbc 20051123
790
925
raise BzrCommandError("Files are in different branches")
792
927
if revision is not None:
928
if tree2 is not None:
794
929
raise BzrCommandError("Can't specify -r with two branches")
795
if len(revision) == 1:
796
return show_diff(tree.branch, revision[0], specific_files=file_list,
797
external_diff_options=diff_options)
930
if (len(revision) == 1) or (revision[1].spec is None):
931
return diff_cmd_helper(tree1, file_list, diff_options,
798
933
elif len(revision) == 2:
799
return show_diff(tree.branch, revision[0], specific_files=file_list,
800
external_diff_options=diff_options,
801
revision2=revision[1])
934
return diff_cmd_helper(tree1, file_list, diff_options,
935
revision[0], revision[1])
803
937
raise BzrCommandError('bzr diff --revision takes exactly one or two revision identifiers')
806
return show_diff(b, None, specific_files=file_list,
807
external_diff_options=diff_options, b2=b2)
939
if tree2 is not None:
940
return show_diff_trees(tree1, tree2, sys.stdout,
941
specific_files=file_list,
942
external_diff_options=diff_options)
809
return show_diff(tree.branch, None, specific_files=file_list,
810
external_diff_options=diff_options)
944
return diff_cmd_helper(tree1, file_list, diff_options)
813
947
class cmd_deleted(Command):
914
1050
"invalid message argument %r" % message
915
1051
direction = (forward and 'forward') or 'reverse'
921
tree, fp = WorkingTree.open_containing(filename)
924
inv = tree.read_working_inventory()
925
except NotBranchError:
928
b, fp = Branch.open_containing(filename)
930
inv = b.get_inventory(b.last_revision())
1056
# find the file id to log:
1058
dir, fp = bzrdir.BzrDir.open_containing(filename)
1059
b = dir.open_branch()
1063
inv = dir.open_workingtree().inventory
1064
except (errors.NotBranchError, errors.NotLocalUrl):
1065
# either no tree, or is remote.
1066
inv = b.basis_tree().inventory
932
1067
file_id = inv.path2id(fp)
934
file_id = None # points to branch root
936
tree, relpath = WorkingTree.open_containing(u'.')
1070
# FIXME ? log the current subdir only RBC 20060203
1071
dir, relpath = bzrdir.BzrDir.open_containing('.')
1072
b = dir.open_branch()
940
1074
if revision is None:
1272
1415
Option('strict',
1273
1416
help="refuse to commit if there are unknown "
1274
1417
"files in the working tree."),
1419
help="perform a local only commit in a bound "
1420
"branch. Such commits are not pushed to "
1421
"the master branch until a normal commit "
1276
1425
aliases = ['ci', 'checkin']
1278
1427
def run(self, message=None, file=None, verbose=True, selected_list=None,
1279
unchanged=False, strict=False):
1428
unchanged=False, strict=False, local=False):
1280
1429
from bzrlib.errors import (PointlessCommit, ConflictsInTree,
1281
1430
StrictCommitFailed)
1282
1431
from bzrlib.msgeditor import edit_commit_message, \
1283
1432
make_commit_message_template
1284
from bzrlib.status import show_status
1285
1433
from tempfile import TemporaryFile
1364
1519
if c.needs_write:
1523
def get_format_type(typestring):
1524
"""Parse and return a format specifier."""
1525
if typestring == "metadir":
1526
return bzrdir.BzrDirMetaFormat1()
1527
if typestring == "knit":
1528
format = bzrdir.BzrDirMetaFormat1()
1529
format.repository_format = bzrlib.repository.RepositoryFormatKnit1()
1531
msg = "No known bzr-dir format %s. Supported types are: metadir\n" %\
1533
raise BzrCommandError(msg)
1369
1536
class cmd_upgrade(Command):
1370
1537
"""Upgrade branch storage to current format.
1372
1539
The check command or bzr developers may sometimes advise you to run
1375
This version of this command upgrades from the full-text storage
1376
used by bzr 0.0.8 and earlier to the weave format (v5).
1540
this command. When the default format has changed you may also be warned
1541
during other operations to upgrade.
1378
takes_args = ['dir?']
1380
def run(self, dir=u'.'):
1543
takes_args = ['url?']
1546
help='Upgrade to a specific format rather than the'
1547
' current default format. Currently this '
1548
' option only accepts =metadir',
1549
type=get_format_type),
1553
def run(self, url='.', format=None):
1381
1554
from bzrlib.upgrade import upgrade
1555
upgrade(url, format)
1385
1558
class cmd_whoami(Command):
1428
1603
If arguments are given, they are regular expressions that say
1429
1604
which tests should run.
1606
If the global option '--no-plugins' is given, plugins are not loaded
1607
before running the selftests. This has two effects: features provided or
1608
modified by plugins will not be tested, and tests provided by plugins will
1613
bzr --no-plugins selftest -v
1431
1615
# TODO: --list should give a list of all available tests
1617
# NB: this is used from the class without creating an instance, which is
1618
# why it does not have a self parameter.
1619
def get_transport_type(typestring):
1620
"""Parse and return a transport specifier."""
1621
if typestring == "sftp":
1622
from bzrlib.transport.sftp import SFTPAbsoluteServer
1623
return SFTPAbsoluteServer
1624
if typestring == "memory":
1625
from bzrlib.transport.memory import MemoryServer
1627
msg = "No known transport type %s. Supported types are: sftp\n" %\
1629
raise BzrCommandError(msg)
1433
1632
takes_args = ['testspecs*']
1434
takes_options = ['verbose',
1633
takes_options = ['verbose',
1435
1634
Option('one', help='stop when one test fails'),
1436
1635
Option('keep-output',
1437
help='keep output directories when tests fail')
1636
help='keep output directories when tests fail'),
1638
help='Use a different transport by default '
1639
'throughout the test suite.',
1640
type=get_transport_type),
1440
1643
def run(self, testspecs_list=None, verbose=False, one=False,
1644
keep_output=False, transport=None):
1442
1645
import bzrlib.ui
1443
1646
from bzrlib.tests import selftest
1444
1647
# we don't want progress meters from the tests to go to the
1655
1858
raise BzrCommandError("Sorry, remerge only works after normal"
1656
1859
+ " merges. Not cherrypicking or"
1657
1860
+ "multi-merges.")
1861
repository = tree.branch.repository
1658
1862
base_revision = common_ancestor(tree.branch.last_revision(),
1659
pending_merges[0], tree.branch)
1660
base_tree = tree.branch.revision_tree(base_revision)
1661
other_tree = tree.branch.revision_tree(pending_merges[0])
1863
pending_merges[0], repository)
1864
base_tree = repository.revision_tree(base_revision)
1865
other_tree = repository.revision_tree(pending_merges[0])
1662
1866
interesting_ids = None
1663
1867
if file_list is not None:
1664
1868
interesting_ids = set()
1665
1869
for filename in file_list:
1666
1870
file_id = tree.path2id(filename)
1872
raise NotVersionedError(filename)
1667
1873
interesting_ids.add(file_id)
1668
1874
if tree.kind(file_id) != "directory":
1671
1877
for name, ie in tree.inventory.iter_entries(file_id):
1672
1878
interesting_ids.add(ie.file_id)
1673
transform_tree(tree, tree.branch.basis_tree(), interesting_ids)
1879
transform_tree(tree, tree.basis_tree(), interesting_ids)
1674
1880
if file_list is None:
1675
1881
restore_files = list(tree.iter_conflicts())
1705
1911
aliases = ['merge-revert']
1707
1913
def run(self, revision=None, no_backup=False, file_list=None):
1708
from bzrlib.merge import merge_inner
1709
1914
from bzrlib.commands import parse_spec
1710
1915
if file_list is not None:
1711
1916
if len(file_list) == 0:
1712
1917
raise BzrCommandError("No files specified")
1921
tree, file_list = tree_files(file_list)
1715
1922
if revision is None:
1717
tree = WorkingTree.open_containing(u'.')[0]
1718
1923
# FIXME should be tree.last_revision
1719
1924
rev_id = tree.branch.last_revision()
1720
1925
elif len(revision) != 1:
1721
1926
raise BzrCommandError('bzr revert --revision takes exactly 1 argument')
1723
tree, file_list = tree_files(file_list)
1724
1928
rev_id = revision[0].in_history(tree.branch).rev_id
1725
tree.revert(file_list, tree.branch.revision_tree(rev_id),
1929
tree.revert(file_list, tree.branch.repository.revision_tree(rev_id),
1930
not no_backup, bzrlib.ui.ui_factory.progress_bar())
1729
1933
class cmd_assert_fail(Command):
1805
2002
def run(self, other_branch=None, reverse=False, mine_only=False,
1806
theirs_only=False, long=True, short=False, line=False,
2003
theirs_only=False, log_format=None, long=False, short=False, line=False,
1807
2004
show_ids=False, verbose=False):
1808
2005
from bzrlib.missing import find_unmerged, iter_log_data
1809
2006
from bzrlib.log import log_formatter
1816
2013
print "Using last location: " + local_branch.get_parent()
1817
2014
remote_branch = bzrlib.branch.Branch.open(other_branch)
1818
2015
local_extra, remote_extra = find_unmerged(local_branch, remote_branch)
1819
log_format = get_log_format(long=long, short=short, line=line)
2016
if (log_format == None):
2017
default = bzrlib.config.BranchConfig(local_branch).log_format()
2018
log_format = get_log_format(long=long, short=short, line=line, default=default)
1820
2019
lf = log_formatter(log_format, sys.stdout,
1821
2020
show_ids=show_ids,
1822
2021
show_timezone='original')
1928
2129
# TODO be able to replace existing ones.
1930
2131
hidden = True # is this right ?
1931
takes_args = ['revision_id?']
2132
takes_args = ['revision_id*']
1932
2133
takes_options = ['revision']
1934
def run(self, revision_id=None, revision=None):
2135
def run(self, revision_id_list=None, revision=None):
1935
2136
import bzrlib.config as config
1936
2137
import bzrlib.gpg as gpg
1937
if revision_id is not None and revision is not None:
2138
if revision_id_list is not None and revision is not None:
1938
2139
raise BzrCommandError('You can only supply one of revision_id or --revision')
1939
if revision_id is None and revision is None:
2140
if revision_id_list is None and revision is None:
1940
2141
raise BzrCommandError('You must supply either --revision or a revision_id')
1941
2142
b = WorkingTree.open_containing(u'.')[0].branch
1942
2143
gpg_strategy = gpg.GPGStrategy(config.BranchConfig(b))
1943
if revision_id is not None:
1944
b.sign_revision(revision_id, gpg_strategy)
2144
if revision_id_list is not None:
2145
for revision_id in revision_id_list:
2146
b.repository.sign_revision(revision_id, gpg_strategy)
1945
2147
elif revision is not None:
1946
2148
if len(revision) == 1:
1947
2149
revno, rev_id = revision[0].in_history(b)
1948
b.sign_revision(rev_id, gpg_strategy)
2150
b.repository.sign_revision(rev_id, gpg_strategy)
1949
2151
elif len(revision) == 2:
1950
2152
# are they both on rh- if so we can walk between them
1951
2153
# might be nice to have a range helper for arbitrary
1957
2159
if from_revno is None or to_revno is None:
1958
2160
raise BzrCommandError('Cannot sign a range of non-revision-history revisions')
1959
2161
for revno in range(from_revno, to_revno + 1):
1960
b.sign_revision(b.get_rev_id(revno), gpg_strategy)
2162
b.repository.sign_revision(b.get_rev_id(revno),
1962
2165
raise BzrCommandError('Please supply either one revision, or a range.')
2168
class cmd_bind(Command):
2169
"""Bind the current branch to a master branch.
2171
After binding, commits must succeed on the master branch
2172
before they are executed on the local one.
2175
takes_args = ['location']
2178
def run(self, location=None):
2179
b, relpath = Branch.open_containing(u'.')
2180
b_other = Branch.open(location)
2183
except DivergedBranches:
2184
raise BzrCommandError('These branches have diverged.'
2185
' Try merging, and then bind again.')
2188
class cmd_unbind(Command):
2189
"""Bind the current branch to its parent.
2191
After unbinding, the local branch is considered independent.
2198
b, relpath = Branch.open_containing(u'.')
2200
raise BzrCommandError('Local branch is not bound')
1965
2203
class cmd_uncommit(bzrlib.commands.Command):
1966
2204
"""Remove the last committed revision.
1976
2214
In the future, uncommit will create a changeset, which can then
1979
takes_options = ['all', 'verbose', 'revision',
2218
# TODO: jam 20060108 Add an option to allow uncommit to remove
2219
# unreferenced information in 'branch-as-repostory' branches.
2220
# TODO: jam 20060108 Add the ability for uncommit to remove unreferenced
2221
# information in shared branches as well.
2222
takes_options = ['verbose', 'revision',
1980
2223
Option('dry-run', help='Don\'t actually make changes'),
1981
2224
Option('force', help='Say yes to all questions.')]
1982
2225
takes_args = ['location?']
1985
def run(self, location=None, all=False,
2228
def run(self, location=None,
1986
2229
dry_run=False, verbose=False,
1987
2230
revision=None, force=False):
1988
2231
from bzrlib.branch import Branch
2019
2267
print 'Canceled'
2022
uncommit(b, remove_files=all,
2023
dry_run=dry_run, verbose=verbose,
2270
uncommit(b, tree=tree, dry_run=dry_run, verbose=verbose,
2274
class cmd_break_lock(Command):
2275
"""Break a dead lock on a repository, branch or working directory.
2277
CAUTION: Locks should only be broken when you are sure that the process
2278
holding the lock has been stopped.
2283
takes_args = ['location']
2284
takes_options = [Option('show',
2285
help="just show information on the lock, " \
2288
def run(self, location, show=False):
2289
d = bzrdir.BzrDir.open(location)
2290
repo = d.open_repository()
2291
if not repo.is_locked():
2292
raise errors.ObjectNotLocked(repo)
2295
# command-line interpretation helper for merge-related commands
2296
def merge(other_revision, base_revision,
2297
check_clean=True, ignore_zero=False,
2298
this_dir=None, backup_files=False, merge_type=Merge3Merger,
2299
file_list=None, show_base=False, reprocess=False,
2300
pb=DummyProgress()):
2301
"""Merge changes into a tree.
2304
list(path, revno) Base for three-way merge.
2305
If [None, None] then a base will be automatically determined.
2307
list(path, revno) Other revision for three-way merge.
2309
Directory to merge changes into; '.' by default.
2311
If true, this_dir must have no uncommitted changes before the
2313
ignore_zero - If true, suppress the "zero conflicts" message when
2314
there are no conflicts; should be set when doing something we expect
2315
to complete perfectly.
2316
file_list - If supplied, merge only changes to selected files.
2318
All available ancestors of other_revision and base_revision are
2319
automatically pulled into the branch.
2321
The revno may be -1 to indicate the last revision on the branch, which is
2324
This function is intended for use from the command line; programmatic
2325
clients might prefer to call merge.merge_inner(), which has less magic
2328
from bzrlib.merge import Merger
2329
if this_dir is None:
2331
this_tree = WorkingTree.open_containing(this_dir)[0]
2332
if show_base and not merge_type is Merge3Merger:
2333
raise BzrCommandError("Show-base is not supported for this merge"
2334
" type. %s" % merge_type)
2335
if reprocess and not merge_type is Merge3Merger:
2336
raise BzrCommandError("Reprocess is not supported for this merge"
2337
" type. %s" % merge_type)
2338
if reprocess and show_base:
2339
raise BzrCommandError("Cannot reprocess and show base.")
2340
merger = Merger(this_tree.branch, this_tree=this_tree, pb=pb)
2341
merger.check_basis(check_clean)
2342
merger.set_other(other_revision)
2343
merger.set_base(base_revision)
2344
if merger.base_rev_id == merger.other_rev_id:
2345
note('Nothing to do.')
2347
merger.backup_files = backup_files
2348
merger.merge_type = merge_type
2349
merger.set_interesting_files(file_list)
2350
merger.show_base = show_base
2351
merger.reprocess = reprocess
2352
conflicts = merger.do_merge()
2353
merger.set_pending()
2027
2357
# these get imported and then picked up by the scan for cmd_*
2028
2358
# TODO: Some more consistent way to split command definitions across files;
2029
2359
# we do need to load at least some information about them to know of
2031
2361
from bzrlib.conflicts import cmd_resolve, cmd_conflicts, restore
2362
from bzrlib.sign_my_commits import cmd_sign_my_commits