/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1551.10.18 by Aaron Bentley
Log works in local treeless branches (#84247)
1
# Copyright (C) 2004, 2005, 2006, 2007 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1185.33.90 by Martin Pool
[merge] add --dry-run option (mpe)
17
"""builtin bzr commands"""
18
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
19
import os
1551.12.26 by Aaron Bentley
Get email working, with optional message
20
from StringIO import StringIO
1185.33.90 by Martin Pool
[merge] add --dry-run option (mpe)
21
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
22
from bzrlib.lazy_import import lazy_import
23
lazy_import(globals(), """
1685.1.52 by John Arbash Meinel
[merge] bzr.dev 1704
24
import codecs
1508.1.20 by Robert Collins
Create a checkout command.
25
import errno
1551.12.26 by Aaron Bentley
Get email working, with optional message
26
import smtplib
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
27
import sys
2089.1.1 by wang
If a commit fails, the commit message is stored in a file at the root of
28
import tempfile
1551.12.8 by Aaron Bentley
Add merge-directive command
29
import time
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
30
1773.4.2 by Martin Pool
Cleanup of imports; undeprecate all_revision_ids()
31
import bzrlib
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
32
from bzrlib import (
33
    branch,
34
    bundle,
35
    bzrdir,
2225.1.1 by Aaron Bentley
Added revert change display, with tests
36
    delta,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
37
    config,
38
    errors,
2298.8.1 by Kent Gibson
Normalise ignore patterns to use '/' path separator.
39
    globbing,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
40
    ignores,
41
    log,
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
42
    merge as _mod_merge,
1551.12.8 by Aaron Bentley
Add merge-directive command
43
    merge_directive,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
44
    osutils,
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
45
    registry,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
46
    repository,
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
47
    symbol_versioning,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
48
    transport,
1996.3.30 by John Arbash Meinel
Don't import 'bzrlib.tree' directly in bzrlib.builtins
49
    tree as _mod_tree,
1836.1.26 by John Arbash Meinel
[merge] bzr.dev 1869
50
    ui,
51
    urlutils,
52
    )
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
53
from bzrlib.branch import Branch
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
54
from bzrlib.bundle.apply_bundle import install_bundle, merge_bundle
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
55
from bzrlib.conflicts import ConflictList
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
56
from bzrlib.revision import common_ancestor
57
from bzrlib.revisionspec import RevisionSpec
58
from bzrlib.workingtree import WorkingTree
59
""")
60
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
61
from bzrlib.commands import Command, display_command
2221.4.2 by Aaron Bentley
Implement RegistryOption on init
62
from bzrlib.option import Option, RegistryOption
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
63
from bzrlib.progress import DummyProgress, ProgressPhase
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
64
from bzrlib.trace import mutter, note, log_error, warning, is_quiet, info
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
65
66
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
67
def tree_files(file_list, default_branch=u'.'):
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
68
    try:
1508.1.15 by Robert Collins
Merge from mpool.
69
        return internal_tree_files(file_list, default_branch)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
70
    except errors.FileInWrongBranch, e:
71
        raise errors.BzrCommandError("%s is not in the same branch as %s" %
72
                                     (e.path, file_list[0]))
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
73
1185.85.12 by John Arbash Meinel
Refactoring AddAction to allow redirecting to an encoding file.
74
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
75
# XXX: Bad function name; should possibly also be a class method of
76
# WorkingTree rather than a function.
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
77
def internal_tree_files(file_list, default_branch=u'.'):
1658.1.8 by Martin Pool
(internal_tree_files) Better docstring
78
    """Convert command-line paths to a WorkingTree and relative paths.
79
80
    This is typically used for command-line processors that take one or
81
    more filenames, and infer the workingtree that contains them.
82
83
    The filenames given are not required to exist.
84
85
    :param file_list: Filenames to convert.  
86
2091.3.2 by Aaron Bentley
Traverse non-terminal symlinks for mv et al
87
    :param default_branch: Fallback tree path to use if file_list is empty or
88
        None.
1658.1.8 by Martin Pool
(internal_tree_files) Better docstring
89
90
    :return: workingtree, [relative_paths]
1185.12.101 by Aaron Bentley
Made commit take branch from first argument, if supplied.
91
    """
92
    if file_list is None or len(file_list) == 0:
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
93
        return WorkingTree.open_containing(default_branch)[0], file_list
2091.3.5 by Aaron Bentley
Move realpath functionality into osutils
94
    tree = WorkingTree.open_containing(osutils.realpath(file_list[0]))[0]
1185.12.101 by Aaron Bentley
Made commit take branch from first argument, if supplied.
95
    new_list = []
96
    for filename in file_list:
1185.35.32 by Aaron Bentley
Fixed handling of files in mixed branches
97
        try:
2091.3.7 by Aaron Bentley
Rename real_parent to dereferenced_path
98
            new_list.append(tree.relpath(osutils.dereference_path(filename)))
1185.31.45 by John Arbash Meinel
Refactoring Exceptions found some places where the wrong exception was caught.
99
        except errors.PathNotChild:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
100
            raise errors.FileInWrongBranch(tree.branch, filename)
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
101
    return tree, new_list
1185.12.101 by Aaron Bentley
Made commit take branch from first argument, if supplied.
102
103
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
104
@symbol_versioning.deprecated_function(symbol_versioning.zero_fifteen)
1553.5.78 by Martin Pool
New bzr init --format option and test
105
def get_format_type(typestring):
106
    """Parse and return a format specifier."""
2204.4.6 by Aaron Bentley
Fix default to work with RepositoryFormat.set_default_format
107
    # Have to use BzrDirMetaFormat1 directly, so that
108
    # RepositoryFormat.set_default_format works
109
    if typestring == "default":
110
        return bzrdir.BzrDirMetaFormat1()
2204.4.3 by Aaron Bentley
Reimplement get_format_type in terms of FormatRegistry
111
    try:
112
        return bzrdir.format_registry.make_bzrdir(typestring)
113
    except KeyError:
114
        msg = 'Unknown bzr format "%s". See "bzr help formats".' % typestring
115
        raise errors.BzrCommandError(msg)
1553.5.78 by Martin Pool
New bzr init --format option and test
116
117
1185.16.112 by mbp at sourcefrog
todo
118
# TODO: Make sure no commands unconditionally use the working directory as a
119
# branch.  If a filename argument is used, the first of them should be used to
120
# specify the branch.  (Perhaps this can be factored out into some kind of
121
# Argument class, representing a file in a branch, where the first occurrence
122
# opens the branch?)
123
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
124
class cmd_status(Command):
125
    """Display status summary.
126
127
    This reports on versioned and unknown files, reporting them
128
    grouped by state.  Possible states are:
129
1551.10.10 by Aaron Bentley
Add help text
130
    added
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
131
        Versioned in the working copy but not in the previous revision.
132
1551.10.10 by Aaron Bentley
Add help text
133
    removed
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
134
        Versioned in the previous revision but removed or deleted
135
        in the working copy.
136
1551.10.10 by Aaron Bentley
Add help text
137
    renamed
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
138
        Path of this file changed from the previous revision;
139
        the text may also have changed.  This includes files whose
140
        parent directory was renamed.
141
1551.10.10 by Aaron Bentley
Add help text
142
    modified
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
143
        Text has changed since the previous revision.
144
1551.10.10 by Aaron Bentley
Add help text
145
    kind changed
146
        File kind has been changed (e.g. from file to directory).
147
148
    unknown
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
149
        Not versioned and not matching an ignore pattern.
150
2374.1.1 by Ian Clatworthy
Help and man page fixes
151
    To see ignored files use 'bzr ignored'.  For details on the
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
152
    changes to file texts, use 'bzr diff'.
2147.2.1 by Keir Mierle
Add a --short flag to status to get svn-style status
153
    
1551.10.10 by Aaron Bentley
Add help text
154
    --short gives a status flags for each item, similar to the SVN's status
155
    command.
156
157
    Column 1: versioning / renames
158
      + File versioned
159
      - File unversioned
160
      R File renamed
161
      ? File unknown
162
      C File has conflicts
163
      P Entry for a pending merge (not a file)
164
165
    Column 2: Contents
166
      N File created
167
      D File deleted
168
      K File kind changed
169
      M File modified
170
171
    Column 3: Execute
172
      * The execute bit was changed
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
173
174
    If no arguments are specified, the status of the entire working
175
    directory is shown.  Otherwise, only the status of the specified
176
    files or directories is reported.  If a directory is given, status
177
    is reported for everything inside that directory.
1185.1.35 by Robert Collins
Heikki Paajanen's status -r patch
178
179
    If a revision argument is given, the status is calculated against
180
    that revision, or between two revisions if two are provided.
1185.3.2 by Martin Pool
- remove -r option from status command because it's not used
181
    """
1185.16.76 by Martin Pool
doc
182
    
183
    # TODO: --no-recurse, --recurse options
184
    
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
185
    takes_args = ['file*']
2374.1.1 by Ian Clatworthy
Help and man page fixes
186
    takes_options = ['show-ids', 'revision',
187
                     Option('short', help='Give short SVN-style status lines'),
2318.2.1 by Kent Gibson
Apply status versioned patch
188
                     Option('versioned', help='Only show versioned files')]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
189
    aliases = ['st', 'stat']
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
190
191
    encoding_type = 'replace'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
192
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
193
    @display_command
2318.2.1 by Kent Gibson
Apply status versioned patch
194
    def run(self, show_ids=False, file_list=None, revision=None, short=False,
195
            versioned=False):
1551.2.9 by Aaron Bentley
Fix status to work with checkouts
196
        from bzrlib.status import show_tree_status
1185.85.15 by John Arbash Meinel
Updated bzr status, adding test_cat
197
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
198
        tree, file_list = tree_files(file_list)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
199
            
1773.1.2 by Robert Collins
Remove --all option from status.
200
        show_tree_status(tree, show_ids=show_ids,
1185.85.84 by John Arbash Meinel
[merge] bzr.dev 1573, lots of updates
201
                         specific_files=file_list, revision=revision,
2318.2.1 by Kent Gibson
Apply status versioned patch
202
                         to_file=self.outf, short=short, versioned=versioned)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
203
204
205
class cmd_cat_revision(Command):
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
206
    """Write out metadata for a revision.
207
    
208
    The revision to print can either be specified by a specific
209
    revision identifier, or you can use --revision.
210
    """
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
211
212
    hidden = True
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
213
    takes_args = ['revision_id?']
214
    takes_options = ['revision']
1685.1.76 by Wouter van Heyst
codecleanup
215
    # cat-revision is more for frontends so should be exact
216
    encoding = 'strict'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
217
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
218
    @display_command
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
219
    def run(self, revision_id=None, revision=None):
220
221
        if revision_id is not None and revision is not None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
222
            raise errors.BzrCommandError('You can only supply one of'
223
                                         ' revision_id or --revision')
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
224
        if revision_id is None and revision is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
225
            raise errors.BzrCommandError('You must supply either'
226
                                         ' --revision or a revision_id')
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
227
        b = WorkingTree.open_containing(u'.')[0].branch
1185.85.72 by John Arbash Meinel
Fix some of the tests.
228
229
        # TODO: jam 20060112 should cat-revision always output utf-8?
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
230
        if revision_id is not None:
1185.85.78 by John Arbash Meinel
[merge] jam-integration 1512, includes Storage changes.
231
            self.outf.write(b.repository.get_revision_xml(revision_id).decode('utf-8'))
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
232
        elif revision is not None:
233
            for rev in revision:
234
                if rev is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
235
                    raise errors.BzrCommandError('You cannot specify a NULL'
236
                                                 ' revision.')
1185.5.3 by John Arbash Meinel
cat-revision allows --revision for easier investigation.
237
                revno, rev_id = rev.in_history(b)
1185.85.78 by John Arbash Meinel
[merge] jam-integration 1512, includes Storage changes.
238
                self.outf.write(b.repository.get_revision_xml(rev_id).decode('utf-8'))
1185.1.29 by Robert Collins
merge merge tweaks from aaron, which includes latest .dev
239
    
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
240
2127.2.1 by Daniel Silverstone
Add remove-tree and its blackbox tests
241
class cmd_remove_tree(Command):
242
    """Remove the working tree from a given branch/checkout.
243
244
    Since a lightweight checkout is little more than a working tree
245
    this will refuse to run against one.
246
    """
247
248
    takes_args = ['location?']
249
2127.2.2 by Daniel Silverstone
Refactor the remove-tree stuff after review from J-A-M
250
    def run(self, location='.'):
251
        d = bzrdir.BzrDir.open(location)
252
        
2127.2.1 by Daniel Silverstone
Add remove-tree and its blackbox tests
253
        try:
254
            working = d.open_workingtree()
2127.2.2 by Daniel Silverstone
Refactor the remove-tree stuff after review from J-A-M
255
        except errors.NoWorkingTree:
2127.2.1 by Daniel Silverstone
Add remove-tree and its blackbox tests
256
            raise errors.BzrCommandError("No working tree to remove")
2127.2.2 by Daniel Silverstone
Refactor the remove-tree stuff after review from J-A-M
257
        except errors.NotLocalUrl:
258
            raise errors.BzrCommandError("You cannot remove the working tree of a "
259
                                         "remote path")
260
        
261
        working_path = working.bzrdir.root_transport.base
262
        branch_path = working.branch.bzrdir.root_transport.base
263
        if working_path != branch_path:
264
            raise errors.BzrCommandError("You cannot remove the working tree from "
265
                                         "a lightweight checkout")
2127.2.1 by Daniel Silverstone
Add remove-tree and its blackbox tests
266
        
267
        d.destroy_workingtree()
268
        
269
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
270
class cmd_revno(Command):
271
    """Show current revision number.
272
1185.85.24 by John Arbash Meinel
Moved run_bzr_decode into TestCase
273
    This is equal to the number of revisions on this branch.
274
    """
275
1185.50.16 by John Arbash Meinel
[patch] Michael Ellerman: 'Trivial patch to allow revno to take a location'
276
    takes_args = ['location?']
1185.85.24 by John Arbash Meinel
Moved run_bzr_decode into TestCase
277
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
278
    @display_command
1185.50.16 by John Arbash Meinel
[patch] Michael Ellerman: 'Trivial patch to allow revno to take a location'
279
    def run(self, location=u'.'):
1185.85.24 by John Arbash Meinel
Moved run_bzr_decode into TestCase
280
        self.outf.write(str(Branch.open_containing(location)[0].revno()))
281
        self.outf.write('\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
282
1182 by Martin Pool
- more disentangling of xml storage format from objects
283
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
284
class cmd_revision_info(Command):
285
    """Show revision number and revision id for a given revision identifier.
286
    """
287
    hidden = True
288
    takes_args = ['revision_info*']
289
    takes_options = ['revision']
1185.85.24 by John Arbash Meinel
Moved run_bzr_decode into TestCase
290
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
291
    @display_command
1185.5.4 by John Arbash Meinel
Updated bzr revision-info, created tests.
292
    def run(self, revision=None, revision_info_list=[]):
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
293
294
        revs = []
295
        if revision is not None:
296
            revs.extend(revision)
1185.5.4 by John Arbash Meinel
Updated bzr revision-info, created tests.
297
        if revision_info_list is not None:
298
            for rev in revision_info_list:
1948.4.33 by John Arbash Meinel
Switch from get_revision_spec() to RevisionSpec.from_string() (as advised by Martin)
299
                revs.append(RevisionSpec.from_string(rev))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
300
        if len(revs) == 0:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
301
            raise errors.BzrCommandError('You must supply a revision identifier')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
302
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
303
        b = WorkingTree.open_containing(u'.')[0].branch
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
304
305
        for rev in revs:
1185.5.4 by John Arbash Meinel
Updated bzr revision-info, created tests.
306
            revinfo = rev.in_history(b)
307
            if revinfo.revno is None:
308
                print '     %s' % revinfo.rev_id
309
            else:
310
                print '%4d %s' % (revinfo.revno, revinfo.rev_id)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
311
312
    
313
class cmd_add(Command):
314
    """Add specified files or directories.
315
316
    In non-recursive mode, all the named items are added, regardless
317
    of whether they were previously ignored.  A warning is given if
318
    any of the named files are already versioned.
319
320
    In recursive mode (the default), files are treated the same way
321
    but the behaviour for directories is different.  Directories that
322
    are already versioned do not give a warning.  All directories,
323
    whether already versioned or not, are searched for files or
324
    subdirectories that are neither versioned or ignored, and these
325
    are added.  This search proceeds recursively into versioned
326
    directories.  If no names are given '.' is assumed.
327
328
    Therefore simply saying 'bzr add' will version all files that
329
    are currently unknown.
330
1185.3.3 by Martin Pool
- patch from mpe to automatically add parent directories
331
    Adding a file whose parent directory is not versioned will
332
    implicitly add the parent, and so on up to the root. This means
1759.2.1 by Jelmer Vernooij
Fix some types (found using aspell).
333
    you should never need to explicitly add a directory, they'll just
1185.3.3 by Martin Pool
- patch from mpe to automatically add parent directories
334
    get added when you add a file in the directory.
1185.33.90 by Martin Pool
[merge] add --dry-run option (mpe)
335
336
    --dry-run will show which files would be added, but not actually 
337
    add them.
1911.3.2 by John Arbash Meinel
Adding the AddFromBaseAction, which tries to reuse file ids from another tree
338
339
    --file-ids-from will try to use the file ids from the supplied path.
340
    It looks up ids trying to find a matching parent directory with the
341
    same filename, and then by pure path.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
342
    """
343
    takes_args = ['file*']
1911.3.2 by John Arbash Meinel
Adding the AddFromBaseAction, which tries to reuse file ids from another tree
344
    takes_options = ['no-recurse', 'dry-run', 'verbose',
345
                     Option('file-ids-from', type=unicode,
346
                            help='Lookup file ids from here')]
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
347
    encoding_type = 'replace'
1185.53.1 by Michael Ellerman
Add support for bzr add --dry-run
348
1911.3.2 by John Arbash Meinel
Adding the AddFromBaseAction, which tries to reuse file ids from another tree
349
    def run(self, file_list, no_recurse=False, dry_run=False, verbose=False,
350
            file_ids_from=None):
1185.53.1 by Michael Ellerman
Add support for bzr add --dry-run
351
        import bzrlib.add
352
2255.7.69 by Robert Collins
Fix all blackbox add tests, and the add --from-ids case in the UI.
353
        base_tree = None
1911.3.2 by John Arbash Meinel
Adding the AddFromBaseAction, which tries to reuse file ids from another tree
354
        if file_ids_from is not None:
355
            try:
356
                base_tree, base_path = WorkingTree.open_containing(
357
                                            file_ids_from)
358
            except errors.NoWorkingTree:
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
359
                base_branch, base_path = Branch.open_containing(
1911.3.2 by John Arbash Meinel
Adding the AddFromBaseAction, which tries to reuse file ids from another tree
360
                                            file_ids_from)
361
                base_tree = base_branch.basis_tree()
362
363
            action = bzrlib.add.AddFromBaseAction(base_tree, base_path,
364
                          to_file=self.outf, should_print=(not is_quiet()))
365
        else:
366
            action = bzrlib.add.AddAction(to_file=self.outf,
367
                should_print=(not is_quiet()))
368
2255.7.69 by Robert Collins
Fix all blackbox add tests, and the add --from-ids case in the UI.
369
        if base_tree:
370
            base_tree.lock_read()
371
        try:
372
            added, ignored = bzrlib.add.smart_add(file_list, not no_recurse,
373
                action=action, save=not dry_run)
374
        finally:
375
            if base_tree is not None:
376
                base_tree.unlock()
1185.46.8 by Aaron Bentley
bzr add reports ignored patterns.
377
        if len(ignored) > 0:
1711.1.2 by Robert Collins
'bzr add' is now less verbose in telling you what ignore globs were
378
            if verbose:
379
                for glob in sorted(ignored.keys()):
1185.46.9 by Aaron Bentley
Added verbose option to bzr add, to list all ignored files.
380
                    for path in ignored[glob]:
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
381
                        self.outf.write("ignored %s matching \"%s\"\n" 
382
                                        % (path, glob))
1711.1.2 by Robert Collins
'bzr add' is now less verbose in telling you what ignore globs were
383
            else:
384
                match_len = 0
385
                for glob, paths in ignored.items():
386
                    match_len += len(paths)
1685.1.69 by Wouter van Heyst
merge bzr.dev 1740
387
                self.outf.write("ignored %d file(s).\n" % match_len)
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
388
            self.outf.write("If you wish to add some of these files,"
389
                            " please add them by name.\n")
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
390
391
392
class cmd_mkdir(Command):
393
    """Create a new versioned directory.
394
395
    This is equivalent to creating the directory and then adding it.
396
    """
1685.1.80 by Wouter van Heyst
more code cleanup
397
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
398
    takes_args = ['dir+']
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
399
    encoding_type = 'replace'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
400
401
    def run(self, dir_list):
402
        for d in dir_list:
403
            os.mkdir(d)
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
404
            wt, dd = WorkingTree.open_containing(d)
1508.1.5 by Robert Collins
Move add from Branch to WorkingTree.
405
            wt.add([dd])
1685.1.80 by Wouter van Heyst
more code cleanup
406
            self.outf.write('added %s\n' % d)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
407
408
409
class cmd_relpath(Command):
410
    """Show path of a file relative to root"""
1685.1.80 by Wouter van Heyst
more code cleanup
411
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
412
    takes_args = ['filename']
413
    hidden = True
414
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
415
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
416
    def run(self, filename):
1185.85.19 by John Arbash Meinel
Updated bzr relpath
417
        # TODO: jam 20050106 Can relpath return a munged path if
418
        #       sys.stdout encoding cannot represent it?
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
419
        tree, relpath = WorkingTree.open_containing(filename)
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
420
        self.outf.write(relpath)
421
        self.outf.write('\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
422
423
424
class cmd_inventory(Command):
1185.33.33 by Martin Pool
[patch] add 'bzr inventory --kind directory'; remove 'bzr directories'
425
    """Show inventory of the current working copy or a revision.
426
427
    It is possible to limit the output to a particular entry
2027.4.2 by John Arbash Meinel
Fix bug #3631, allow 'bzr inventory filename'
428
    type using the --kind option.  For example: --kind file.
429
430
    It is also possible to restrict the list of files to a specific
431
    set. For example: bzr inventory --show-ids this/file
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
432
433
    See also: bzr ls
1185.33.33 by Martin Pool
[patch] add 'bzr inventory --kind directory'; remove 'bzr directories'
434
    """
1685.1.80 by Wouter van Heyst
more code cleanup
435
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
436
    hidden = True
1551.10.14 by Aaron Bentley
Add some blank lines
437
1185.33.33 by Martin Pool
[patch] add 'bzr inventory --kind directory'; remove 'bzr directories'
438
    takes_options = ['revision', 'show-ids', 'kind']
1551.10.14 by Aaron Bentley
Add some blank lines
439
2027.4.2 by John Arbash Meinel
Fix bug #3631, allow 'bzr inventory filename'
440
    takes_args = ['file*']
441
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
442
    @display_command
2027.4.2 by John Arbash Meinel
Fix bug #3631, allow 'bzr inventory filename'
443
    def run(self, revision=None, show_ids=False, kind=None, file_list=None):
1185.33.33 by Martin Pool
[patch] add 'bzr inventory --kind directory'; remove 'bzr directories'
444
        if kind and kind not in ['file', 'directory', 'symlink']:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
445
            raise errors.BzrCommandError('invalid kind specified')
2027.4.3 by John Arbash Meinel
Change how 'bzr inventory' finds paths
446
447
        work_tree, file_list = tree_files(file_list)
2255.7.24 by John Arbash Meinel
Rework cmd_inventory so that it uses paths2ids and locks the trees for read.
448
        work_tree.lock_read()
449
        try:
450
            if revision is not None:
451
                if len(revision) > 1:
452
                    raise errors.BzrCommandError(
453
                        'bzr inventory --revision takes exactly one revision'
454
                        ' identifier')
455
                revision_id = revision[0].in_history(work_tree.branch).rev_id
456
                tree = work_tree.branch.repository.revision_tree(revision_id)
457
458
                extra_trees = [work_tree]
459
                tree.lock_read()
460
            else:
461
                tree = work_tree
462
                extra_trees = []
463
464
            if file_list is not None:
465
                file_ids = tree.paths2ids(file_list, trees=extra_trees,
466
                                          require_versioned=True)
467
                # find_ids_across_trees may include some paths that don't
468
                # exist in 'tree'.
469
                entries = sorted((tree.id2path(file_id), tree.inventory[file_id])
470
                                 for file_id in file_ids if file_id in tree)
471
            else:
472
                entries = tree.inventory.entries()
473
        finally:
474
            tree.unlock()
475
            if tree is not work_tree:
476
                work_tree.unlock()
2027.4.2 by John Arbash Meinel
Fix bug #3631, allow 'bzr inventory filename'
477
478
        for path, entry in entries:
1185.33.33 by Martin Pool
[patch] add 'bzr inventory --kind directory'; remove 'bzr directories'
479
            if kind and kind != entry.kind:
480
                continue
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
481
            if show_ids:
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
482
                self.outf.write('%-50s %s\n' % (path, entry.file_id))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
483
            else:
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
484
                self.outf.write(path)
485
                self.outf.write('\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
486
487
488
class cmd_mv(Command):
489
    """Move or rename a file.
490
491
    usage:
492
        bzr mv OLDNAME NEWNAME
493
        bzr mv SOURCE... DESTINATION
494
495
    If the last argument is a versioned directory, all the other names
496
    are moved into it.  Otherwise, there must be exactly two arguments
2123.3.1 by Steffen Eichenberg
the mv command is now able to move files that have already been moved on the file system
497
    and the file is changed to a new name.
498
499
    If OLDNAME does not exist on the filesystem but is versioned and
500
    NEWNAME does exist on the filesystem but is not versioned, mv
501
    assumes that the file has been manually moved and only updates
502
    its internal inventory to reflect that change.
503
    The same is valid when moving many SOURCE files to a DESTINATION.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
504
505
    Files cannot be moved between branches.
506
    """
1685.1.80 by Wouter van Heyst
more code cleanup
507
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
508
    takes_args = ['names*']
2206.1.2 by Marius Kruger
* Made whitespace and puntuation improvements, as requested.
509
    takes_options = [Option("after", help="move only the bzr identifier"
510
        " of the file (file has already been moved). Use this flag if"
511
        " bzr is not able to detect this itself.")]
1616.1.8 by Martin Pool
Unify 'mv', 'move', 'rename'. (#5379, Matthew Fuller)
512
    aliases = ['move', 'rename']
1185.85.26 by John Arbash Meinel
bzr mv should succeed even if it can't display the paths.
513
    encoding_type = 'replace'
514
2123.3.1 by Steffen Eichenberg
the mv command is now able to move files that have already been moved on the file system
515
    def run(self, names_list, after=False):
1846.1.1 by Wouter van Heyst
Don't fail on 'bzr mv', extract move tests from OldTests.
516
        if names_list is None:
517
            names_list = []
518
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
519
        if len(names_list) < 2:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
520
            raise errors.BzrCommandError("missing file argument")
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
521
        tree, rel_names = tree_files(names_list)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
522
        
523
        if os.path.isdir(names_list[-1]):
524
            # move into existing directory
2123.3.5 by Steffen Eichenberg
specifying named parameters
525
            for pair in tree.move(rel_names[:-1], rel_names[-1], after=after):
1185.85.25 by John Arbash Meinel
updated 'bzr mv'
526
                self.outf.write("%s => %s\n" % pair)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
527
        else:
528
            if len(names_list) != 2:
2123.3.1 by Steffen Eichenberg
the mv command is now able to move files that have already been moved on the file system
529
                raise errors.BzrCommandError('to mv multiple files the'
530
                                             ' destination must be a versioned'
531
                                             ' directory')
2123.3.5 by Steffen Eichenberg
specifying named parameters
532
            tree.rename_one(rel_names[0], rel_names[1], after=after)
1185.85.25 by John Arbash Meinel
updated 'bzr mv'
533
            self.outf.write("%s => %s\n" % (rel_names[0], rel_names[1]))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
534
            
535
    
536
class cmd_pull(Command):
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
537
    """Turn this branch into a mirror of another branch.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
538
539
    This command only works on branches that have not diverged.  Branches are
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
540
    considered diverged if the destination branch's most recent commit is one
541
    that has not been merged (directly or indirectly) into the parent.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
542
1661.1.1 by Martin Pool
[merge] olaf's --remember changes
543
    If branches have diverged, you can use 'bzr merge' to integrate the changes
544
    from one into the other.  Once one branch has merged, the other should
545
    be able to pull it again.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
546
1185.12.92 by Aaron Bentley
Fixed pull help, renamed clobber to overwrite
547
    If you want to forget your local changes and just update your branch to
1661.1.1 by Martin Pool
[merge] olaf's --remember changes
548
    match the remote one, use pull --overwrite.
1614.2.3 by Olaf Conradi
In commands push and pull, moved help text for --remember down. It's not
549
550
    If there is no default location set, the first pull will set it.  After
551
    that, you can omit the location to use the default.  To change the
1785.1.4 by John Arbash Meinel
Update help for the new --remember semantics.
552
    default, use --remember. The value will only be saved if the remote
553
    location can be accessed.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
554
    """
1685.1.80 by Wouter van Heyst
more code cleanup
555
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
556
    takes_options = ['remember', 'overwrite', 'revision', 'verbose',
557
        Option('directory',
558
            help='branch to pull into, '
559
                 'rather than the one containing the working directory',
560
            short_name='d',
561
            type=unicode,
562
            ),
563
        ]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
564
    takes_args = ['location?']
1185.85.27 by John Arbash Meinel
Updated bzr branch and bzr pull
565
    encoding_type = 'replace'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
566
1551.11.10 by Aaron Bentley
Add change reporting to pull
567
    def run(self, location=None, remember=False, overwrite=False,
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
568
            revision=None, verbose=False,
569
            directory=None):
2220.2.30 by Martin Pool
split out tag-merging code and add some tests
570
        from bzrlib.tag import _merge_tags_if_possible
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
571
        # FIXME: too much stuff is in the command class
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
572
        revision_id = None
1551.14.7 by Aaron Bentley
test suite fixes
573
        mergeable = None
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
574
        if directory is None:
575
            directory = u'.'
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
576
        try:
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
577
            tree_to = WorkingTree.open_containing(directory)[0]
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
578
            branch_to = tree_to.branch
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
579
        except errors.NoWorkingTree:
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
580
            tree_to = None
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
581
            branch_to = Branch.open_containing(directory)[0]
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
582
583
        reader = None
584
        if location is not None:
585
            try:
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
586
                mergeable = bundle.read_mergeable_from_url(
1551.14.1 by Aaron Bentley
Allow pull from a merge directive
587
                    location)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
588
            except errors.NotABundle:
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
589
                pass # Continue on considering this url a Branch
590
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
591
        stored_loc = branch_to.get_parent()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
592
        if location is None:
593
            if stored_loc is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
594
                raise errors.BzrCommandError("No pull location known or"
595
                                             " specified.")
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
596
            else:
1685.1.58 by Martin Pool
urlutils.unescape_for_display should return Unicode
597
                display_url = urlutils.unescape_for_display(stored_loc,
598
                        self.outf.encoding)
599
                self.outf.write("Using saved location: %s\n" % display_url)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
600
                location = stored_loc
1185.56.1 by Michael Ellerman
Simplify handling of DivergedBranches in cmd_pull()
601
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
602
        if mergeable is not None:
603
            if revision is not None:
604
                raise errors.BzrCommandError(
605
                    'Cannot use -r with merge directives or bundles')
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
606
            revision_id = mergeable.install_revisions(branch_to.repository)
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
607
            branch_from = branch_to
608
        else:
609
            branch_from = Branch.open(location)
610
611
            if branch_to.get_parent() is None or remember:
612
                branch_to.set_parent(branch_from.base)
613
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
614
        if revision is not None:
615
            if len(revision) == 1:
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
616
                revision_id = revision[0].in_history(branch_from).rev_id
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
617
            else:
618
                raise errors.BzrCommandError(
619
                    'bzr pull --revision takes one value.')
1185.76.1 by Erik Bågfors
Support for --revision in pull
620
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
621
        old_rh = branch_to.revision_history()
622
        if tree_to is not None:
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
623
            result = tree_to.pull(branch_from, overwrite, revision_id,
1551.10.25 by Aaron Bentley
Make ChangeReporter private
624
                delta._ChangeReporter(unversioned_filter=tree_to.is_ignored))
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
625
        else:
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
626
            result = branch_to.pull(branch_from, overwrite, revision_id)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
627
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
628
        result.report(self.outf)
629
        if verbose:
2297.1.1 by Martin Pool
Pull now returns a PullResult rather than just an integer.
630
            from bzrlib.log import show_changed_revisions
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
631
            new_rh = branch_to.revision_history()
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
632
            show_changed_revisions(branch_to, old_rh, new_rh,
633
                                   to_file=self.outf)
1185.31.5 by John Arbash Meinel
Merged pull --verbose changes
634
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
635
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
636
class cmd_push(Command):
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
637
    """Update a mirror of this branch.
638
    
639
    The target branch will not have its working tree populated because this
640
    is both expensive, and is not supported on remote file systems.
641
    
642
    Some smart servers or protocols *may* put the working tree in place in
643
    the future.
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
644
645
    This command only works on branches that have not diverged.  Branches are
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
646
    considered diverged if the destination branch's most recent commit is one
647
    that has not been merged (directly or indirectly) by the source branch.
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
648
649
    If branches have diverged, you can use 'bzr push --overwrite' to replace
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
650
    the other branch completely, discarding its unmerged changes.
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
651
    
652
    If you want to ensure you have the different changes in the other branch,
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
653
    do a merge (see bzr help merge) from the other branch, and commit that.
654
    After that you will be able to do a push without '--overwrite'.
1614.2.3 by Olaf Conradi
In commands push and pull, moved help text for --remember down. It's not
655
656
    If there is no default push location set, the first push will set it.
657
    After that, you can omit the location to use the default.  To change the
1785.1.4 by John Arbash Meinel
Update help for the new --remember semantics.
658
    default, use --remember. The value will only be saved if the remote
659
    location can be accessed.
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
660
    """
1685.1.80 by Wouter van Heyst
more code cleanup
661
1185.85.31 by John Arbash Meinel
Updated bzr push, including bringing in the unused --verbose flag.
662
    takes_options = ['remember', 'overwrite', 'verbose',
2279.3.1 by mbp at sourcefrog
Add a -d option to push, pull, merge (ported from tags branch)
663
        Option('create-prefix',
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
664
               help='Create the path leading up to the branch '
665
                    'if it does not already exist'),
666
        Option('directory',
667
            help='branch to push from, '
668
                 'rather than the one containing the working directory',
669
            short_name='d',
670
            type=unicode,
671
            ),
2279.3.1 by mbp at sourcefrog
Add a -d option to push, pull, merge (ported from tags branch)
672
        Option('use-existing-dir',
673
               help='By default push will fail if the target'
674
                    ' directory exists, but does not already'
675
                    ' have a control directory. This flag will'
676
                    ' allow push to proceed.'),
677
        ]
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
678
    takes_args = ['location?']
1185.85.31 by John Arbash Meinel
Updated bzr push, including bringing in the unused --verbose flag.
679
    encoding_type = 'replace'
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
680
1495 by Robert Collins
Add a --create-prefix to the new push command.
681
    def run(self, location=None, remember=False, overwrite=False,
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
682
            create_prefix=False, verbose=False,
2279.3.1 by mbp at sourcefrog
Add a -d option to push, pull, merge (ported from tags branch)
683
            use_existing_dir=False,
684
            directory=None):
1185.33.45 by Martin Pool
[merge] refactoring of branch vs working tree, etc (robertc)
685
        # FIXME: Way too big!  Put this into a function called from the
686
        # command.
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
687
        if directory is None:
688
            directory = '.'
689
        br_from = Branch.open_containing(directory)[0]
1692.3.1 by Robert Collins
Fix push to work with just a branch, no need for a working tree.
690
        stored_loc = br_from.get_push_location()
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
691
        if location is None:
692
            if stored_loc is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
693
                raise errors.BzrCommandError("No push location known or specified.")
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
694
            else:
1685.1.59 by Martin Pool
[broken] Fix up & refactor display of remembered urls to unescape properly
695
                display_url = urlutils.unescape_for_display(stored_loc,
696
                        self.outf.encoding)
1785.1.1 by John Arbash Meinel
Fix the output of 'bzr push' so that it prints the location correctly.
697
                self.outf.write("Using saved location: %s\n" % display_url)
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
698
                location = stored_loc
1685.1.22 by John Arbash Meinel
cmd_push was passing the location directly to relpath, rather than a URL
699
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
700
        to_transport = transport.get_transport(location)
701
        location_url = to_transport.base
1685.1.70 by Wouter van Heyst
working on get_parent, set_parent and relative urls, broken
702
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
703
        br_to = repository_to = dir_to = None
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
704
        try:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
705
            dir_to = bzrdir.BzrDir.open_from_transport(to_transport)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
706
        except errors.NotBranchError:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
707
            pass # Didn't find anything
708
        else:
709
            # If we can open a branch, use its direct repository, otherwise see
710
            # if there is a repository without a branch.
711
            try:
712
                br_to = dir_to.open_branch()
713
            except errors.NotBranchError:
714
                # Didn't find a branch, can we find a repository?
1495 by Robert Collins
Add a --create-prefix to the new push command.
715
                try:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
716
                    repository_to = dir_to.find_repository()
717
                except errors.NoRepositoryPresent:
718
                    pass
1495 by Robert Collins
Add a --create-prefix to the new push command.
719
            else:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
720
                # Found a branch, so we must have found a repository
721
                repository_to = br_to.repository
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
722
        push_result = None
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
723
        old_rh = []
724
        if dir_to is None:
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
725
            # The destination doesn't exist; create it.
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
726
            # XXX: Refactor the create_prefix/no_create_prefix code into a
727
            #      common helper function
728
            try:
729
                to_transport.mkdir('.')
730
            except errors.FileExists:
2227.3.4 by John Arbash Meinel
Switch back to --use-existing-dir
731
                if not use_existing_dir:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
732
                    raise errors.BzrCommandError("Target directory %s"
2227.3.4 by John Arbash Meinel
Switch back to --use-existing-dir
733
                         " already exists, but does not have a valid .bzr"
734
                         " directory. Supply --use-existing-dir to push"
735
                         " there anyway." % location)
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
736
            except errors.NoSuchFile:
737
                if not create_prefix:
738
                    raise errors.BzrCommandError("Parent directory of %s"
739
                        " does not exist."
740
                        "\nYou may supply --create-prefix to create all"
741
                        " leading parent directories."
742
                        % location)
743
744
                cur_transport = to_transport
745
                needed = [cur_transport]
746
                # Recurse upwards until we can create a directory successfully
747
                while True:
748
                    new_transport = cur_transport.clone('..')
749
                    if new_transport.base == cur_transport.base:
750
                        raise errors.BzrCommandError("Failed to create path"
751
                                                     " prefix for %s."
752
                                                     % location)
1495 by Robert Collins
Add a --create-prefix to the new push command.
753
                    try:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
754
                        new_transport.mkdir('.')
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
755
                    except errors.NoSuchFile:
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
756
                        needed.append(new_transport)
757
                        cur_transport = new_transport
758
                    else:
759
                        break
760
761
                # Now we only need to create child directories
762
                while needed:
763
                    cur_transport = needed.pop()
764
                    cur_transport.mkdir('.')
765
            
766
            # Now the target directory exists, but doesn't have a .bzr
767
            # directory. So we need to create it, along with any work to create
768
            # all of the dependent branches, etc.
1685.1.69 by Wouter van Heyst
merge bzr.dev 1740
769
            dir_to = br_from.bzrdir.clone(location_url,
1711.2.3 by John Arbash Meinel
Fix push to only push revisions in the current ancestry. (bug???)
770
                revision_id=br_from.last_revision())
1563.2.38 by Robert Collins
make push preserve tree formats.
771
            br_to = dir_to.open_branch()
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
772
            # TODO: Some more useful message about what was copied
773
            note('Created new branch.')
1785.1.2 by John Arbash Meinel
Push should only save the location if it can actually connect (doesn't need to succeed)
774
            # We successfully created the target, remember it
775
            if br_from.get_push_location() is None or remember:
776
                br_from.set_push_location(br_to.base)
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
777
        elif repository_to is None:
778
            # we have a bzrdir but no branch or repository
779
            # XXX: Figure out what to do other than complain.
780
            raise errors.BzrCommandError("At %s you have a valid .bzr control"
2227.3.2 by John Arbash Meinel
Fix error message as suggested by Martin.
781
                " directory, but not a branch or repository. This is an"
782
                " unsupported configuration. Please move the target directory"
783
                " out of the way and try again."
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
784
                % location)
785
        elif br_to is None:
786
            # We have a repository but no branch, copy the revisions, and then
787
            # create a branch.
788
            last_revision_id = br_from.last_revision()
789
            repository_to.fetch(br_from.repository,
790
                                revision_id=last_revision_id)
791
            br_to = br_from.clone(dir_to, revision_id=last_revision_id)
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
792
            note('Created new branch.')
2227.3.1 by John Arbash Meinel
Allow push to create Branch when necessary, and add --use-existing
793
            if br_from.get_push_location() is None or remember:
794
                br_from.set_push_location(br_to.base)
795
        else: # We have a valid to branch
1785.1.2 by John Arbash Meinel
Push should only save the location if it can actually connect (doesn't need to succeed)
796
            # We were able to connect to the remote location, so remember it
797
            # we don't need to successfully push because of possible divergence.
798
            if br_from.get_push_location() is None or remember:
799
                br_from.set_push_location(br_to.base)
1692.3.6 by Robert Collins
Show the correct number of revisions pushed when pushing a new branch (Robert Collins).
800
            old_rh = br_to.revision_history()
1185.49.26 by John Arbash Meinel
Adding tests for remote sftp branches without working trees, plus a bugfix to allow push to still work with a warning.
801
            try:
1692.3.6 by Robert Collins
Show the correct number of revisions pushed when pushing a new branch (Robert Collins).
802
                try:
803
                    tree_to = dir_to.open_workingtree()
804
                except errors.NotLocalUrl:
805
                    warning('This transport does not update the working '
806
                            'tree of: %s' % (br_to.base,))
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
807
                    push_result = br_from.push(br_to, overwrite)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
808
                except errors.NoWorkingTree:
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
809
                    push_result = br_from.push(br_to, overwrite)
1692.3.6 by Robert Collins
Show the correct number of revisions pushed when pushing a new branch (Robert Collins).
810
                else:
2245.2.2 by Robert Collins
Update cmd_push to invoke the correct 'push' method on branch, rather than pull. This does not alter tests because the behaviour for push and pull is still symmetrical.
811
                    tree_to.lock_write()
812
                    try:
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
813
                        push_result = br_from.push(tree_to.branch, overwrite)
2245.2.2 by Robert Collins
Update cmd_push to invoke the correct 'push' method on branch, rather than pull. This does not alter tests because the behaviour for push and pull is still symmetrical.
814
                        tree_to.update()
815
                    finally:
816
                        tree_to.unlock()
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
817
            except errors.DivergedBranches:
1996.3.36 by John Arbash Meinel
[merge] bzr.dev 2070
818
                raise errors.BzrCommandError('These branches have diverged.'
819
                                        '  Try using "merge" and then "push".')
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
820
        if push_result is not None:
2220.2.37 by Martin Pool
Report conflicting tags from push.
821
            push_result.report(self.outf)
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
822
        elif verbose:
1185.31.5 by John Arbash Meinel
Merged pull --verbose changes
823
            new_rh = br_to.revision_history()
824
            if old_rh != new_rh:
825
                # Something changed
826
                from bzrlib.log import show_changed_revisions
1185.85.31 by John Arbash Meinel
Updated bzr push, including bringing in the unused --verbose flag.
827
                show_changed_revisions(br_to, old_rh, new_rh,
828
                                       to_file=self.outf)
2297.1.4 by Martin Pool
Push now returns a PushResult rather than just an integer.
829
        else:
830
            # we probably did a clone rather than a push, so a message was
831
            # emitted above
832
            pass
1490 by Robert Collins
Implement a 'bzr push' command, with saved locations; update diff to return 1.
833
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
834
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
835
class cmd_branch(Command):
836
    """Create a new copy of a branch.
837
838
    If the TO_LOCATION is omitted, the last component of the FROM_LOCATION will
839
    be used.  In other words, "branch ../foo/bar" will attempt to create ./bar.
840
841
    To retrieve the branch as of a particular revision, supply the --revision
842
    parameter, as in "branch foo/bar -r 5".
843
    """
844
    takes_args = ['from_location', 'to_location?']
2387.1.1 by Robert Collins
Remove the --basis parameter to clone etc. (Robert Collins)
845
    takes_options = ['revision']
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
846
    aliases = ['get', 'clone']
847
2387.1.1 by Robert Collins
Remove the --basis parameter to clone etc. (Robert Collins)
848
    def run(self, from_location, to_location=None, revision=None):
2220.2.30 by Martin Pool
split out tag-merging code and add some tests
849
        from bzrlib.tag import _merge_tags_if_possible
1185.17.3 by Martin Pool
[pick] larger read lock scope for branch command
850
        if revision is None:
851
            revision = [None]
852
        elif len(revision) > 1:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
853
            raise errors.BzrCommandError(
1185.17.3 by Martin Pool
[pick] larger read lock scope for branch command
854
                'bzr branch --revision takes exactly 1 revision value')
2283.1.1 by John Arbash Meinel
(John Arbash Meinel) (trivial) remove unused and incorrect code.
855
856
        br_from = Branch.open(from_location)
1185.17.3 by Martin Pool
[pick] larger read lock scope for branch command
857
        br_from.lock_read()
858
        try:
1185.8.4 by Aaron Bentley
Fixed branch -r
859
            if len(revision) == 1 and revision[0] is not None:
1390 by Robert Collins
pair programming worx... merge integration and weave
860
                revision_id = revision[0].in_history(br_from)[1]
1185.8.4 by Aaron Bentley
Fixed branch -r
861
            else:
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
862
                # FIXME - wt.last_revision, fallback to branch, fall back to
863
                # None or perhaps NULL_REVISION to mean copy nothing
864
                # RBC 20060209
865
                revision_id = br_from.last_revision()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
866
            if to_location is None:
867
                to_location = os.path.basename(from_location.rstrip("/\\"))
1442.1.71 by Robert Collins
'bzr branch' sets the branch-name,
868
                name = None
869
            else:
870
                name = os.path.basename(to_location) + '\n'
1685.1.20 by John Arbash Meinel
More changes to get 'bzr branch' and 'bzr pull' to work
871
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
872
            to_transport = transport.get_transport(to_location)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
873
            try:
1685.1.20 by John Arbash Meinel
More changes to get 'bzr branch' and 'bzr pull' to work
874
                to_transport.mkdir('.')
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
875
            except errors.FileExists:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
876
                raise errors.BzrCommandError('Target directory "%s" already'
877
                                             ' exists.' % to_location)
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
878
            except errors.NoSuchFile:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
879
                raise errors.BzrCommandError('Parent of "%s" does not exist.'
880
                                             % to_location)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
881
            try:
1587.1.14 by Robert Collins
Make bound branch creation happen via 'checkout'
882
                # preserve whatever source format we have.
2387.1.1 by Robert Collins
Remove the --basis parameter to clone etc. (Robert Collins)
883
                dir = br_from.bzrdir.sprout(to_transport.base, revision_id)
1587.1.14 by Robert Collins
Make bound branch creation happen via 'checkout'
884
                branch = dir.open_branch()
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
885
            except errors.NoSuchRevision:
1685.1.80 by Wouter van Heyst
more code cleanup
886
                to_transport.delete_tree('.')
1466 by Robert Collins
revision may be None in cmd_branch, do not treat as an int.
887
                msg = "The branch %s has no revision %s." % (from_location, revision[0])
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
888
                raise errors.BzrCommandError(msg)
1442.1.71 by Robert Collins
'bzr branch' sets the branch-name,
889
            if name:
1185.65.27 by Robert Collins
Tweak storage towards mergability.
890
                branch.control_files.put_utf8('branch-name', name)
2220.2.30 by Martin Pool
split out tag-merging code and add some tests
891
            _merge_tags_if_possible(br_from, branch)
1185.33.44 by Martin Pool
[patch] show number of revisions pushed/pulled/merged (Robey Pointer)
892
            note('Branched %d revision(s).' % branch.revno())
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
893
        finally:
1185.17.3 by Martin Pool
[pick] larger read lock scope for branch command
894
            br_from.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
895
896
1508.1.20 by Robert Collins
Create a checkout command.
897
class cmd_checkout(Command):
898
    """Create a new checkout of an existing branch.
899
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
900
    If BRANCH_LOCATION is omitted, checkout will reconstitute a working tree for
901
    the branch found in '.'. This is useful if you have removed the working tree
902
    or if it was never created - i.e. if you pushed the branch to its current
903
    location using SFTP.
904
    
1508.1.20 by Robert Collins
Create a checkout command.
905
    If the TO_LOCATION is omitted, the last component of the BRANCH_LOCATION will
906
    be used.  In other words, "checkout ../foo/bar" will attempt to create ./bar.
907
908
    To retrieve the branch as of a particular revision, supply the --revision
909
    parameter, as in "checkout foo/bar -r 5". Note that this will be immediately
910
    out of date [so you cannot commit] but it may be useful (i.e. to examine old
911
    code.)
912
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
913
    See "help checkouts" for more information on checkouts.
1508.1.20 by Robert Collins
Create a checkout command.
914
    """
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
915
    takes_args = ['branch_location?', 'to_location?']
2387.1.1 by Robert Collins
Remove the --basis parameter to clone etc. (Robert Collins)
916
    takes_options = ['revision',
1587.1.14 by Robert Collins
Make bound branch creation happen via 'checkout'
917
                     Option('lightweight',
918
                            help="perform a lightweight checkout. Lightweight "
919
                                 "checkouts depend on access to the branch for "
920
                                 "every operation. Normal checkouts can perform "
921
                                 "common operations like diff and status without "
922
                                 "such access, and also support local commits."
923
                            ),
924
                     ]
1733.2.8 by Michael Ellerman
Add CVS compatible aliases for checkout and annotate, from fullermd.
925
    aliases = ['co']
1508.1.20 by Robert Collins
Create a checkout command.
926
2387.1.1 by Robert Collins
Remove the --basis parameter to clone etc. (Robert Collins)
927
    def run(self, branch_location=None, to_location=None, revision=None,
1587.1.14 by Robert Collins
Make bound branch creation happen via 'checkout'
928
            lightweight=False):
1508.1.20 by Robert Collins
Create a checkout command.
929
        if revision is None:
930
            revision = [None]
931
        elif len(revision) > 1:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
932
            raise errors.BzrCommandError(
1508.1.20 by Robert Collins
Create a checkout command.
933
                'bzr checkout --revision takes exactly 1 revision value')
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
934
        if branch_location is None:
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
935
            branch_location = osutils.getcwd()
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
936
            to_location = branch_location
1508.1.20 by Robert Collins
Create a checkout command.
937
        source = Branch.open(branch_location)
938
        if len(revision) == 1 and revision[0] is not None:
939
            revision_id = revision[0].in_history(source)[1]
940
        else:
941
            revision_id = None
942
        if to_location is None:
943
            to_location = os.path.basename(branch_location.rstrip("/\\"))
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
944
        # if the source and to_location are the same, 
945
        # and there is no working tree,
946
        # then reconstitute a branch
1997.1.4 by Robert Collins
``bzr checkout --lightweight`` now operates on readonly branches as well
947
        if (osutils.abspath(to_location) ==
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
948
            osutils.abspath(branch_location)):
1508.1.28 by Robert Collins
Test using bzr checkout to reconstitute working trees.
949
            try:
950
                source.bzrdir.open_workingtree()
951
            except errors.NoWorkingTree:
952
                source.bzrdir.create_workingtree()
953
                return
1508.1.20 by Robert Collins
Create a checkout command.
954
        try:
955
            os.mkdir(to_location)
956
        except OSError, e:
957
            if e.errno == errno.EEXIST:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
958
                raise errors.BzrCommandError('Target directory "%s" already'
959
                                             ' exists.' % to_location)
1508.1.20 by Robert Collins
Create a checkout command.
960
            if e.errno == errno.ENOENT:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
961
                raise errors.BzrCommandError('Parent of "%s" does not exist.'
962
                                             % to_location)
1508.1.20 by Robert Collins
Create a checkout command.
963
            else:
964
                raise
2204.4.13 by Aaron Bentley
Update all test cases to avoid set_default_format
965
        source.create_checkout(to_location, revision_id, lightweight)
1508.1.20 by Robert Collins
Create a checkout command.
966
967
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
968
class cmd_renames(Command):
969
    """Show list of renamed files.
970
    """
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
971
    # TODO: Option to show renames between two historical versions.
972
973
    # TODO: Only show renames under dir, rather than in the whole branch.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
974
    takes_args = ['dir?']
975
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
976
    @display_command
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
977
    def run(self, dir=u'.'):
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
978
        tree = WorkingTree.open_containing(dir)[0]
2255.7.63 by Robert Collins
Fix cmd_renames to lock around inventory access.
979
        tree.lock_read()
980
        try:
981
            new_inv = tree.inventory
982
            old_tree = tree.basis_tree()
983
            old_tree.lock_read()
984
            try:
985
                old_inv = old_tree.inventory
986
                renames = list(_mod_tree.find_renames(old_inv, new_inv))
987
                renames.sort()
988
                for old_name, new_name in renames:
989
                    self.outf.write("%s => %s\n" % (old_name, new_name))
990
            finally:
991
                old_tree.unlock()
992
        finally:
993
            tree.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
994
995
1508.1.24 by Robert Collins
Add update command for use with checkouts.
996
class cmd_update(Command):
997
    """Update a tree to have the latest code committed to its branch.
998
    
999
    This will perform a merge into the working tree, and may generate
1587.1.10 by Robert Collins
update updates working tree and branch together.
1000
    conflicts. If you have any local changes, you will still 
1001
    need to commit them after the update for the update to be complete.
1002
    
1003
    If you want to discard your local changes, you can just do a 
1004
    'bzr revert' instead of 'bzr commit' after the update.
1508.1.24 by Robert Collins
Add update command for use with checkouts.
1005
    """
1006
    takes_args = ['dir?']
1815.3.1 by Stefan (metze) Metzmacher
add 'up' as alias for 'update'
1007
    aliases = ['up']
1508.1.24 by Robert Collins
Add update command for use with checkouts.
1008
1009
    def run(self, dir='.'):
1010
        tree = WorkingTree.open_containing(dir)[0]
2084.2.1 by Aaron Bentley
Support updating lightweight checkouts of readonly branches
1011
        master = tree.branch.get_master_branch()
1012
        if master is not None:
1013
            tree.lock_write()
1014
        else:
1015
            tree.lock_tree_write()
1508.1.24 by Robert Collins
Add update command for use with checkouts.
1016
        try:
2014.1.1 by John Arbash Meinel
Stop using pending_merges() in 'bzr update'
1017
            existing_pending_merges = tree.get_parent_ids()[1:]
1948.2.1 by Robert Collins
fix race condition in cmd_update that could lead to failure-to-unlock warnings.
1018
            last_rev = tree.last_revision()
1830.1.1 by John Arbash Meinel
Print up to date even if bound, also always print out current revno.
1019
            if last_rev == tree.branch.last_revision():
1587.1.11 by Robert Collins
Local commits appear to be working properly.
1020
                # may be up to date, check master too.
1021
                master = tree.branch.get_master_branch()
1830.1.1 by John Arbash Meinel
Print up to date even if bound, also always print out current revno.
1022
                if master is None or last_rev == master.last_revision():
1023
                    revno = tree.branch.revision_id_to_revno(last_rev)
1024
                    note("Tree is up to date at revision %d." % (revno,))
1025
                    return 0
1508.1.24 by Robert Collins
Add update command for use with checkouts.
1026
            conflicts = tree.update()
1830.1.1 by John Arbash Meinel
Print up to date even if bound, also always print out current revno.
1027
            revno = tree.branch.revision_id_to_revno(tree.last_revision())
1028
            note('Updated to revision %d.' % (revno,))
2014.1.1 by John Arbash Meinel
Stop using pending_merges() in 'bzr update'
1029
            if tree.get_parent_ids()[1:] != existing_pending_merges:
1711.2.108 by John Arbash Meinel
Assert that update informs the user about where their local commits went.
1030
                note('Your local commits will now show as pending merges with '
1878.3.2 by Adeodato Simó
Update with suggestions from John Arbash Meinel.
1031
                     "'bzr status', and can be committed with 'bzr commit'.")
1508.1.24 by Robert Collins
Add update command for use with checkouts.
1032
            if conflicts != 0:
1033
                return 1
1034
            else:
1035
                return 0
1036
        finally:
1037
            tree.unlock()
1038
1039
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1040
class cmd_info(Command):
1694.2.6 by Martin Pool
[merge] bzr.dev
1041
    """Show information about a working tree, branch or repository.
1042
1043
    This command will show all known locations and formats associated to the
1044
    tree, branch or repository.  Statistical information is included with
1045
    each report.
1046
1047
    Branches and working trees will also report any missing revisions.
1048
    """
1049
    takes_args = ['location?']
1624.3.21 by Olaf Conradi
Make bzr info command work on both local and remote locations. Support
1050
    takes_options = ['verbose']
1694.2.6 by Martin Pool
[merge] bzr.dev
1051
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1052
    @display_command
1694.2.6 by Martin Pool
[merge] bzr.dev
1053
    def run(self, location=None, verbose=False):
1054
        from bzrlib.info import show_bzrdir_info
1055
        show_bzrdir_info(bzrdir.BzrDir.open_containing(location)[0],
1056
                         verbose=verbose)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1057
1058
1059
class cmd_remove(Command):
1060
    """Make a file unversioned.
1061
1062
    This makes bzr stop tracking changes to a versioned file.  It does
1063
    not delete the working copy.
1551.6.26 by Aaron Bentley
Add support for remove --new
1064
1065
    You can specify one or more files, and/or --new.  If you specify --new,
1066
    only 'added' files will be removed.  If you specify both, then new files
1067
    in the specified directories will be removed.  If the directories are
1068
    also new, they will also be removed.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1069
    """
1551.6.26 by Aaron Bentley
Add support for remove --new
1070
    takes_args = ['file*']
1071
    takes_options = ['verbose', Option('new', help='remove newly-added files')]
1424 by Robert Collins
add rm alias to remove
1072
    aliases = ['rm']
1685.1.77 by Wouter van Heyst
WorkingTree.remove takes an optional output file
1073
    encoding_type = 'replace'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1074
    
1551.6.26 by Aaron Bentley
Add support for remove --new
1075
    def run(self, file_list, verbose=False, new=False):
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1076
        tree, file_list = tree_files(file_list)
1551.6.26 by Aaron Bentley
Add support for remove --new
1077
        if new is False:
1078
            if file_list is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1079
                raise errors.BzrCommandError('Specify one or more files to'
1080
                                             ' remove, or use --new.')
1551.6.26 by Aaron Bentley
Add support for remove --new
1081
        else:
1852.10.3 by Robert Collins
Remove all uses of compare_trees and replace with Tree.changes_from throughout bzrlib.
1082
            added = tree.changes_from(tree.basis_tree(),
1083
                specific_files=file_list).added
1084
            file_list = sorted([f[0] for f in added], reverse=True)
1551.6.26 by Aaron Bentley
Add support for remove --new
1085
            if len(file_list) == 0:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1086
                raise errors.BzrCommandError('No matching files.')
1685.1.77 by Wouter van Heyst
WorkingTree.remove takes an optional output file
1087
        tree.remove(file_list, verbose=verbose, to_file=self.outf)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1088
1089
1090
class cmd_file_id(Command):
1091
    """Print file_id of a particular file or directory.
1092
1093
    The file_id is assigned when the file is first added and remains the
1094
    same through all revisions where the file exists, even when it is
1095
    moved or renamed.
1096
    """
1685.1.80 by Wouter van Heyst
more code cleanup
1097
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1098
    hidden = True
1099
    takes_args = ['filename']
1185.85.35 by John Arbash Meinel
Updated file-path
1100
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1101
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1102
    def run(self, filename):
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1103
        tree, relpath = WorkingTree.open_containing(filename)
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1104
        i = tree.path2id(relpath)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
1105
        if i is None:
2067.3.1 by Martin Pool
Clean up BzrNewError, other exception classes and users.
1106
            raise errors.NotVersionedError(filename)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1107
        else:
1685.1.80 by Wouter van Heyst
more code cleanup
1108
            self.outf.write(i + '\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1109
1110
1111
class cmd_file_path(Command):
1112
    """Print path of file_ids to a file or directory.
1113
1114
    This prints one line for each directory down to the target,
1185.85.35 by John Arbash Meinel
Updated file-path
1115
    starting at the branch root.
1116
    """
1685.1.80 by Wouter van Heyst
more code cleanup
1117
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1118
    hidden = True
1119
    takes_args = ['filename']
1185.85.35 by John Arbash Meinel
Updated file-path
1120
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1121
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1122
    def run(self, filename):
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1123
        tree, relpath = WorkingTree.open_containing(filename)
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1124
        fid = tree.path2id(relpath)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
1125
        if fid is None:
2067.3.1 by Martin Pool
Clean up BzrNewError, other exception classes and users.
1126
            raise errors.NotVersionedError(filename)
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1127
        segments = osutils.splitpath(relpath)
1128
        for pos in range(1, len(segments) + 1):
1129
            path = osutils.joinpath(segments[:pos])
1130
            self.outf.write("%s\n" % tree.path2id(path))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1131
1132
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
1133
class cmd_reconcile(Command):
1134
    """Reconcile bzr metadata in a branch.
1135
1136
    This can correct data mismatches that may have been caused by
1137
    previous ghost operations or bzr upgrades. You should only
1138
    need to run this command if 'bzr check' or a bzr developer 
1139
    advises you to run it.
1140
1141
    If a second branch is provided, cross-branch reconciliation is
1142
    also attempted, which will check that data like the tree root
1143
    id which was not present in very early bzr versions is represented
1144
    correctly in both branches.
1145
1146
    At the same time it is run it may recompress data resulting in 
1147
    a potential saving in disk space or performance gain.
1148
1149
    The branch *MUST* be on a listable system such as local disk or sftp.
1150
    """
1151
    takes_args = ['branch?']
1152
1153
    def run(self, branch="."):
1154
        from bzrlib.reconcile import reconcile
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
1155
        dir = bzrdir.BzrDir.open(branch)
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
1156
        reconcile(dir)
1157
1158
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1159
class cmd_revision_history(Command):
1733.2.1 by Michael Ellerman
Add an optional location parameter to the 'revision-history' command.
1160
    """Display the list of revision ids on a branch."""
1161
    takes_args = ['location?']
1162
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1163
    hidden = True
1185.85.36 by John Arbash Meinel
Working on tests for revision-history, ancestry, and diff
1164
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1165
    @display_command
1733.2.1 by Michael Ellerman
Add an optional location parameter to the 'revision-history' command.
1166
    def run(self, location="."):
1167
        branch = Branch.open_containing(location)[0]
1168
        for revid in branch.revision_history():
1733.2.4 by Michael Ellerman
Merge bzr.dev, fix minor conflict in cmd_revision_history().
1169
            self.outf.write(revid)
1185.85.36 by John Arbash Meinel
Working on tests for revision-history, ancestry, and diff
1170
            self.outf.write('\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1171
1172
1225 by Martin Pool
- branch now tracks ancestry - all merged revisions
1173
class cmd_ancestry(Command):
1174
    """List all revisions merged into this branch."""
1733.2.2 by Michael Ellerman
Add optional location to ancestry and fix behaviour for checkouts.
1175
    takes_args = ['location?']
1176
1225 by Martin Pool
- branch now tracks ancestry - all merged revisions
1177
    hidden = True
1185.85.36 by John Arbash Meinel
Working on tests for revision-history, ancestry, and diff
1178
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1179
    @display_command
1733.2.2 by Michael Ellerman
Add optional location to ancestry and fix behaviour for checkouts.
1180
    def run(self, location="."):
1181
        try:
1182
            wt = WorkingTree.open_containing(location)[0]
1183
        except errors.NoWorkingTree:
1184
            b = Branch.open(location)
1185
            last_revision = b.last_revision()
1186
        else:
1187
            b = wt.branch
1188
            last_revision = wt.last_revision()
1189
1190
        revision_ids = b.repository.get_ancestry(last_revision)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
1191
        assert revision_ids[0] is None
1668.1.14 by Martin Pool
merge olaf - InvalidRevisionId fixes
1192
        revision_ids.pop(0)
1193
        for revision_id in revision_ids:
1685.1.69 by Wouter van Heyst
merge bzr.dev 1740
1194
            self.outf.write(revision_id + '\n')
1225 by Martin Pool
- branch now tracks ancestry - all merged revisions
1195
1196
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1197
class cmd_init(Command):
1198
    """Make a directory into a versioned branch.
1199
1200
    Use this to create an empty branch, or before importing an
1201
    existing project.
1202
1662.1.19 by Martin Pool
Better error message when initting existing tree
1203
    If there is a repository in a parent directory of the location, then 
1204
    the history of the branch will be stored in the repository.  Otherwise
2374.1.2 by Ian Clatworthy
Improved after feedback from reviewers
1205
    init creates a standalone branch which carries its own history
1206
    in the .bzr directory.
1662.1.19 by Martin Pool
Better error message when initting existing tree
1207
1208
    If there is already a branch at the location but it has no working tree,
1209
    the tree can be populated with 'bzr checkout'.
1210
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1211
    Recipe for importing a tree of files:
1212
        cd ~/project
1213
        bzr init
1185.12.93 by Aaron Bentley
Fixed obsolete help
1214
        bzr add .
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1215
        bzr status
1216
        bzr commit -m 'imported project'
1217
    """
1185.16.138 by Martin Pool
[patch] 'bzr init DIR' (John)
1218
    takes_args = ['location?']
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1219
    takes_options = [
2241.1.4 by Martin Pool
Moved old weave-based repository formats into bzrlib.repofmt.weaverepo.
1220
         RegistryOption('format',
1221
                help='Specify a format for this branch. '
1222
                'See "help formats".',
1223
                registry=bzrdir.format_registry,
2241.1.19 by mbp at sourcefrog
(merge) trunk
1224
                converter=bzrdir.format_registry.make_bzrdir,
1225
                value_switches=True,
1226
                title="Branch Format",
1227
                ),
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
1228
         Option('append-revisions-only',
1229
                help='Never change revnos or the existing log.'
1230
                '  Append revisions to it only.')
2241.1.4 by Martin Pool
Moved old weave-based repository formats into bzrlib.repofmt.weaverepo.
1231
         ]
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
1232
    def run(self, location=None, format=None, append_revisions_only=False):
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1233
        if format is None:
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
1234
            format = bzrdir.format_registry.make_bzrdir('default')
1185.16.138 by Martin Pool
[patch] 'bzr init DIR' (John)
1235
        if location is None:
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1236
            location = u'.'
1830.4.5 by Wouter van Heyst
cleanup
1237
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
1238
        to_transport = transport.get_transport(location)
1830.4.5 by Wouter van Heyst
cleanup
1239
1240
        # The path has to exist to initialize a
1241
        # branch inside of it.
1242
        # Just using os.mkdir, since I don't
1243
        # believe that we want to create a bunch of
1244
        # locations if the user supplies an extended path
1245
        # TODO: create-prefix
1246
        try:
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
1247
            to_transport.mkdir('.')
1830.4.8 by Wouter van Heyst
clean up imports (and get if collapsing right)
1248
        except errors.FileExists:
1830.4.5 by Wouter van Heyst
cleanup
1249
            pass
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
1250
                    
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
1251
        try:
1662.1.19 by Martin Pool
Better error message when initting existing tree
1252
            existing_bzrdir = bzrdir.BzrDir.open(location)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1253
        except errors.NotBranchError:
1662.1.19 by Martin Pool
Better error message when initting existing tree
1254
            # really a NotBzrDir error...
2294.2.1 by Alexander Belchenko
Bugfix #85599: ``bzr init`` works with unicode argument LOCATION
1255
            branch = bzrdir.BzrDir.create_branch_convenience(to_transport.base,
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
1256
                                                             format=format)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
1257
        else:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1258
            from bzrlib.transport.local import LocalTransport
1662.1.19 by Martin Pool
Better error message when initting existing tree
1259
            if existing_bzrdir.has_branch():
1830.4.8 by Wouter van Heyst
clean up imports (and get if collapsing right)
1260
                if (isinstance(to_transport, LocalTransport)
1261
                    and not existing_bzrdir.has_workingtree()):
1830.4.1 by Wouter van Heyst
Allow bzr init to create remote branches
1262
                        raise errors.BranchExistsWithoutWorkingTree(location)
1263
                raise errors.AlreadyBranchError(location)
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
1264
            else:
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
1265
                branch = existing_bzrdir.create_branch()
1662.1.19 by Martin Pool
Better error message when initting existing tree
1266
                existing_bzrdir.create_workingtree()
2230.3.42 by Aaron Bentley
add --append-revisions-only option to init
1267
        if append_revisions_only:
1268
            try:
1269
                branch.set_append_revisions_only(True)
1270
            except errors.UpgradeRequired:
1271
                raise errors.BzrCommandError('This branch format cannot be set'
1272
                    ' to append-revisions-only.  Try --experimental-branch6')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1273
1274
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
1275
class cmd_init_repository(Command):
1658.1.6 by Martin Pool
init-repo shouldn't insist on creating a new directory (Malone #38331)
1276
    """Create a shared repository to hold branches.
1277
1278
    New branches created under the repository directory will store their revisions
2366.1.2 by Matthew Fuller
Shared-capable formats are standard, and have been for a good long
1279
    in the repository, not in the branch directory.
1658.1.6 by Martin Pool
init-repo shouldn't insist on creating a new directory (Malone #38331)
1280
1662.1.11 by Martin Pool
Better help for init-repo (Erik)
1281
    example:
2257.2.1 by Wouter van Heyst
Change the ui level default for init-repo to --trees.
1282
        bzr init-repo --no-trees repo
1662.1.11 by Martin Pool
Better help for init-repo (Erik)
1283
        bzr init repo/trunk
1284
        bzr checkout --lightweight repo/trunk trunk-checkout
1285
        cd trunk-checkout
1658.1.6 by Martin Pool
init-repo shouldn't insist on creating a new directory (Malone #38331)
1286
        (add files here)
1287
    """
2353.2.1 by John Arbash Meinel
(Wouter van Heyst) switch 'bzr init-repo' to default to '--no-trees'
1288
2241.1.4 by Martin Pool
Moved old weave-based repository formats into bzrlib.repofmt.weaverepo.
1289
    takes_args = ["location"]
2221.4.9 by Aaron Bentley
Zap trailing whitespace
1290
    takes_options = [RegistryOption('format',
2221.4.12 by Aaron Bentley
Add option grouping to RegistryOption and clean up format options
1291
                            help='Specify a format for this repository. See'
1292
                                 ' "bzr help formats" for details',
2221.4.9 by Aaron Bentley
Zap trailing whitespace
1293
                            registry=bzrdir.format_registry,
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
1294
                            converter=bzrdir.format_registry.make_bzrdir,
2221.4.12 by Aaron Bentley
Add option grouping to RegistryOption and clean up format options
1295
                            value_switches=True, title='Repository format'),
2257.2.1 by Wouter van Heyst
Change the ui level default for init-repo to --trees.
1296
                     Option('no-trees',
2353.2.1 by John Arbash Meinel
(Wouter van Heyst) switch 'bzr init-repo' to default to '--no-trees'
1297
                             help='Branches in the repository will default to'
2366.1.1 by Matthew Fuller
Missing space in --no-trees help.
1298
                                  ' not having a working tree'),
2353.2.1 by John Arbash Meinel
(Wouter van Heyst) switch 'bzr init-repo' to default to '--no-trees'
1299
                    ]
1558.5.6 by Aaron Bentley
Renamed make-repo init-repo
1300
    aliases = ["init-repo"]
2353.2.1 by John Arbash Meinel
(Wouter van Heyst) switch 'bzr init-repo' to default to '--no-trees'
1301
2257.2.2 by Wouter van Heyst
Actually test that `bzr init-repo --{no,}-trees` still works
1302
    def run(self, location, format=None, no_trees=False):
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1303
        if format is None:
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
1304
            format = bzrdir.format_registry.make_bzrdir('default')
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1305
1306
        if location is None:
1307
            location = '.'
1308
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
1309
        to_transport = transport.get_transport(location)
1830.4.5 by Wouter van Heyst
cleanup
1310
        try:
1830.4.7 by Wouter van Heyst
review fixes, rename transport variable to to_transport
1311
            to_transport.mkdir('.')
1830.4.8 by Wouter van Heyst
clean up imports (and get if collapsing right)
1312
        except errors.FileExists:
1830.4.5 by Wouter van Heyst
cleanup
1313
            pass
1314
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1315
        newdir = format.initialize_on_transport(to_transport)
1558.5.2 by Aaron Bentley
Created *shared* repositories...
1316
        repo = newdir.create_repository(shared=True)
2257.2.2 by Wouter van Heyst
Actually test that `bzr init-repo --{no,}-trees` still works
1317
        repo.set_make_working_trees(not no_trees)
1558.5.1 by Aaron Bentley
Added make-repository command
1318
1319
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1320
class cmd_diff(Command):
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1321
    """Show differences in the working tree or between revisions.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1322
    
1323
    If files are listed, only the changes in those files are listed.
1324
    Otherwise, all changes for the tree are listed.
1325
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
1326
    "bzr diff -p1" is equivalent to "bzr diff --prefix old/:new/", and
1327
    produces patches suitable for "patch -p1".
1328
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1329
    examples:
1330
        bzr diff
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1331
            Shows the difference in the working tree versus the last commit
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1332
        bzr diff -r1
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1333
            Difference between the working tree and revision 1
1185.1.2 by Martin Pool
- merge various windows and other fixes from Ollie Rutherfurd
1334
        bzr diff -r1..2
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1335
            Difference between revision 2 and revision 1
2324.1.1 by Dmitry Vasiliev
Small fixes for bzr diff
1336
        bzr diff --prefix old/:new/
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1337
            Same as 'bzr diff' but prefix paths with old/ and new/
1694.2.4 by Martin Pool
When a diff prefix is given, don't show it in === summary lines, only on the diffs themselves.
1338
        bzr diff bzr.mine bzr.dev
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1339
            Show the differences between the two working trees
1694.2.4 by Martin Pool
When a diff prefix is given, don't show it in === summary lines, only on the diffs themselves.
1340
        bzr diff foo.c
1850.1.1 by John Arbash Meinel
Annotate the diff examples to explain what they do
1341
            Show just the differences for 'foo.c'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1342
    """
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
1343
    # TODO: Option to use external diff command; could be GNU diff, wdiff,
1344
    #       or a graphical diff.
1345
1346
    # TODO: Python difflib is not exactly the same as unidiff; should
1347
    #       either fix it up or prefer to use an external diff.
1348
1349
    # TODO: Selected-file diff is inefficient and doesn't show you
1350
    #       deleted files.
1351
1352
    # TODO: This probably handles non-Unix newlines poorly.
2197.2.1 by Martin Pool
Refactor cmd_diff
1353
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1354
    takes_args = ['file*']
2190.2.1 by Martin Pool
remove global registration of short options
1355
    takes_options = ['revision', 'diff-options',
2193.3.1 by Martin Pool
Finish removal of global short-option table
1356
        Option('prefix', type=str,
1357
               short_name='p',
2190.2.1 by Martin Pool
remove global registration of short options
1358
               help='Set prefixes to added to old and new filenames, as '
2325.1.2 by John Arbash Meinel
Add (eg "old/:new/") to errors to make it a little clearer.
1359
                    'two values separated by a colon. (eg "old/:new/")'),
2190.2.1 by Martin Pool
remove global registration of short options
1360
        ]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1361
    aliases = ['di', 'dif']
1185.85.36 by John Arbash Meinel
Working on tests for revision-history, ancestry, and diff
1362
    encoding_type = 'exact'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1363
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1364
    @display_command
1684.1.6 by Martin Pool
(patch) --diff-prefix option (goffredo, alexander)
1365
    def run(self, revision=None, file_list=None, diff_options=None,
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
1366
            prefix=None):
1551.2.15 by Aaron Bentley
Rename cmd_show_diff to diff_cmd_helper
1367
        from bzrlib.diff import diff_cmd_helper, show_diff_trees
1684.1.6 by Martin Pool
(patch) --diff-prefix option (goffredo, alexander)
1368
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
1369
        if (prefix is None) or (prefix == '0'):
1370
            # diff -p0 format
1694.2.1 by Martin Pool
Remove 'a/', 'b/' default prefixes on diff output.
1371
            old_label = ''
1372
            new_label = ''
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
1373
        elif prefix == '1':
1374
            old_label = 'old/'
1375
            new_label = 'new/'
2197.2.1 by Martin Pool
Refactor cmd_diff
1376
        elif ':' in prefix:
1694.2.3 by Martin Pool
Add -p0, -p1 options for diff.
1377
            old_label, new_label = prefix.split(":")
2197.2.1 by Martin Pool
Refactor cmd_diff
1378
        else:
2324.1.1 by Dmitry Vasiliev
Small fixes for bzr diff
1379
            raise errors.BzrCommandError(
2325.1.2 by John Arbash Meinel
Add (eg "old/:new/") to errors to make it a little clearer.
1380
                '--prefix expects two values separated by a colon'
1381
                ' (eg "old/:new/")')
2197.2.1 by Martin Pool
Refactor cmd_diff
1382
1383
        if revision and len(revision) > 2:
1384
            raise errors.BzrCommandError('bzr diff --revision takes exactly'
1385
                                         ' one or two revision specifiers')
2325.1.2 by John Arbash Meinel
Add (eg "old/:new/") to errors to make it a little clearer.
1386
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1387
        try:
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
1388
            tree1, file_list = internal_tree_files(file_list)
1389
            tree2 = None
1508.1.15 by Robert Collins
Merge from mpool.
1390
            b = None
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1391
            b2 = None
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1392
        except errors.FileInWrongBranch:
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1393
            if len(file_list) != 2:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1394
                raise errors.BzrCommandError("Files are in different branches")
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1395
1551.2.13 by Aaron Bentley
Got diff working properly with checkouts
1396
            tree1, file1 = WorkingTree.open_containing(file_list[0])
1397
            tree2, file2 = WorkingTree.open_containing(file_list[1])
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1398
            if file1 != "" or file2 != "":
1508.1.15 by Robert Collins
Merge from mpool.
1399
                # FIXME diff those two files. rbc 20051123
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1400
                raise errors.BzrCommandError("Files are in different branches")
1185.35.28 by Aaron Bentley
Support diff with two branches as input.
1401
            file_list = None
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1402
        except errors.NotBranchError:
1881.1.2 by Matthieu Moy
Formatting and style for the last patch.
1403
            if (revision is not None and len(revision) == 2
1881.1.4 by Matthieu Moy
needs_tree -> needs_branch
1404
                and not revision[0].needs_branch()
1405
                and not revision[1].needs_branch()):
1711.2.100 by John Arbash Meinel
clean up comment.
1406
                # If both revision specs include a branch, we can
1407
                # diff them without needing a local working tree
1881.1.2 by Matthieu Moy
Formatting and style for the last patch.
1408
                tree1, tree2 = None, None
1881.1.1 by Matthieu Moy
Fixed and tested "bzr diff" outside a working tree.
1409
            else:
1410
                raise
2197.2.1 by Martin Pool
Refactor cmd_diff
1411
1412
        if tree2 is not None:
1413
            if revision is not None:
1414
                # FIXME: but there should be a clean way to diff between
1415
                # non-default versions of two trees, it's not hard to do
1416
                # internally...
1417
                raise errors.BzrCommandError(
1418
                        "Sorry, diffing arbitrary revisions across branches "
1419
                        "is not implemented yet")
1420
            return show_diff_trees(tree1, tree2, sys.stdout, 
1421
                                   specific_files=file_list,
1422
                                   external_diff_options=diff_options,
1423
                                   old_label=old_label, new_label=new_label)
1424
1425
        return diff_cmd_helper(tree1, file_list, diff_options,
1426
                               revision_specs=revision,
1427
                               old_label=old_label, new_label=new_label)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1428
1429
1430
class cmd_deleted(Command):
1431
    """List files deleted in the working tree.
1432
    """
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
1433
    # TODO: Show files deleted since a previous revision, or
1434
    # between two revisions.
1435
    # TODO: Much more efficient way to do this: read in new
1436
    # directories with readdir, rather than stating each one.  Same
1437
    # level of effort but possibly much less IO.  (Or possibly not,
1438
    # if the directories are very large...)
1185.85.49 by John Arbash Meinel
Updated cmd_deleted, including adding --show-ids option.
1439
    takes_options = ['show-ids']
1440
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1441
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1442
    def run(self, show_ids=False):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1443
        tree = WorkingTree.open_containing(u'.')[0]
2255.7.72 by Robert Collins
Update cmd_deleted to lock around inventory access.
1444
        tree.lock_read()
1445
        try:
1446
            old = tree.basis_tree()
1447
            old.lock_read()
1448
            try:
1449
                for path, ie in old.inventory.iter_entries():
1450
                    if not tree.has_id(ie.file_id):
1451
                        self.outf.write(path)
1452
                        if show_ids:
1453
                            self.outf.write(' ')
1454
                            self.outf.write(ie.file_id)
1455
                        self.outf.write('\n')
1456
            finally:
1457
                old.unlock()
1458
        finally:
1459
            tree.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1460
1461
1462
class cmd_modified(Command):
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
1463
    """List files modified in working tree.
1464
1465
    See also: "bzr status".
1466
    """
1551.10.14 by Aaron Bentley
Add some blank lines
1467
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1468
    hidden = True
1551.10.14 by Aaron Bentley
Add some blank lines
1469
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1470
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1471
    def run(self):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1472
        tree = WorkingTree.open_containing(u'.')[0]
1852.10.3 by Robert Collins
Remove all uses of compare_trees and replace with Tree.changes_from throughout bzrlib.
1473
        td = tree.changes_from(tree.basis_tree())
1398 by Robert Collins
integrate in Gustavos x-bit patch
1474
        for path, id, kind, text_modified, meta_modified in td.modified:
1685.1.80 by Wouter van Heyst
more code cleanup
1475
            self.outf.write(path + '\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1476
1477
1478
class cmd_added(Command):
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
1479
    """List files added in working tree.
1480
1481
    See also: "bzr status".
1482
    """
1551.10.14 by Aaron Bentley
Add some blank lines
1483
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1484
    hidden = True
1551.10.14 by Aaron Bentley
Add some blank lines
1485
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1486
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1487
    def run(self):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1488
        wt = WorkingTree.open_containing(u'.')[0]
2255.7.69 by Robert Collins
Fix all blackbox add tests, and the add --from-ids case in the UI.
1489
        wt.lock_read()
1490
        try:
1491
            basis = wt.basis_tree()
1492
            basis.lock_read()
1493
            try:
1494
                basis_inv = basis.inventory
1495
                inv = wt.inventory
1496
                for file_id in inv:
1497
                    if file_id in basis_inv:
1498
                        continue
1499
                    if inv.is_root(file_id) and len(basis_inv) == 0:
1500
                        continue
1501
                    path = inv.id2path(file_id)
1502
                    if not os.access(osutils.abspath(path), os.F_OK):
1503
                        continue
1504
                    self.outf.write(path + '\n')
1505
            finally:
1506
                basis.unlock()
1507
        finally:
1508
            wt.unlock()
1185.85.53 by John Arbash Meinel
Updated cmd_root
1509
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1510
1511
class cmd_root(Command):
1512
    """Show the tree root directory.
1513
1514
    The root is the nearest enclosing directory with a .bzr control
1515
    directory."""
1516
    takes_args = ['filename?']
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1517
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1518
    def run(self, filename=None):
1519
        """Print the branch root."""
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1520
        tree = WorkingTree.open_containing(filename)[0]
1685.1.80 by Wouter van Heyst
more code cleanup
1521
        self.outf.write(tree.basedir + '\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1522
1523
1524
class cmd_log(Command):
1626.1.2 by Martin Pool
Better help message for log command.
1525
    """Show log of a branch, file, or directory.
1526
1527
    By default show the log of the branch containing the working directory.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1528
1185.16.153 by Martin Pool
[patch] fix help for bzr log (Matthieu)
1529
    To request a range of logs, you can use the command -r begin..end
1530
    -r revision requests a specific revision, -r ..end or -r begin.. are
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1531
    also valid.
1626.1.2 by Martin Pool
Better help message for log command.
1532
1533
    examples:
1534
        bzr log
1535
        bzr log foo.c
1536
        bzr log -r -10.. http://server/branch
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1537
    """
1538
1393.1.55 by Martin Pool
doc
1539
    # TODO: Make --revision support uuid: and hash: [future tag:] notation.
1540
1626.1.2 by Martin Pool
Better help message for log command.
1541
    takes_args = ['location?']
1185.16.46 by mbp at sourcefrog
- add help strings to some options
1542
    takes_options = [Option('forward', 
1543
                            help='show from oldest to newest'),
1626.1.2 by Martin Pool
Better help message for log command.
1544
                     'timezone', 
1545
                     Option('verbose', 
2193.3.3 by Martin Pool
Fix up other short options
1546
                             short_name='v',
1626.1.2 by Martin Pool
Better help message for log command.
1547
                             help='show files changed in each revision'),
1185.16.46 by mbp at sourcefrog
- add help strings to some options
1548
                     'show-ids', 'revision',
1553.2.1 by Erik Bågfors
Support for plugins to register log formatters and set default formatter
1549
                     'log-format',
1185.16.46 by mbp at sourcefrog
- add help strings to some options
1550
                     Option('message',
2193.3.3 by Martin Pool
Fix up other short options
1551
                            short_name='m',
1185.16.48 by mbp at sourcefrog
- more refactoring of and tests for option parsing
1552
                            help='show revisions whose message matches this regexp',
1553
                            type=str),
1185.16.57 by Martin Pool
[merge] from aaron
1554
                     ]
1185.85.22 by John Arbash Meinel
Updated cmd_inventory. Changing from having each Command request an encoded stdout to providing one before calling run()
1555
    encoding_type = 'replace'
1556
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1557
    @display_command
1626.1.2 by Martin Pool
Better help message for log command.
1558
    def run(self, location=None, timezone='original',
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1559
            verbose=False,
1560
            show_ids=False,
1561
            forward=False,
1562
            revision=None,
1553.2.1 by Erik Bågfors
Support for plugins to register log formatters and set default formatter
1563
            log_format=None,
2221.4.10 by Aaron Bentley
Implement log options using RegistryOption
1564
            message=None):
1565
        from bzrlib.log import show_log
1185.16.49 by mbp at sourcefrog
- more refactoring and tests of commandline
1566
        assert message is None or isinstance(message, basestring), \
1185.16.48 by mbp at sourcefrog
- more refactoring of and tests for option parsing
1567
            "invalid message argument %r" % message
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1568
        direction = (forward and 'forward') or 'reverse'
1569
        
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
1570
        # log everything
1571
        file_id = None
1626.1.2 by Martin Pool
Better help message for log command.
1572
        if location:
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
1573
            # find the file id to log:
1574
1551.10.18 by Aaron Bentley
Log works in local treeless branches (#84247)
1575
            tree, b, fp = bzrdir.BzrDir.open_containing_tree_or_branch(
1576
                location)
1442.1.64 by Robert Collins
Branch.open_containing now returns a tuple (Branch, relative-path).
1577
            if fp != '':
1551.10.18 by Aaron Bentley
Log works in local treeless branches (#84247)
1578
                if tree is None:
1579
                    tree = b.basis_tree()
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1580
                file_id = tree.path2id(fp)
2100.1.1 by wang
Running ``bzr log`` on nonexistent file gives an error instead of the
1581
                if file_id is None:
1582
                    raise errors.BzrCommandError(
1583
                        "Path does not have any revision history: %s" %
1584
                        location)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1585
        else:
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
1586
            # local dir only
1587
            # FIXME ? log the current subdir only RBC 20060203 
1907.4.10 by Matthieu Moy
Cut long lines, prevent "path" component from being used in revno:branch/path.
1588
            if revision is not None \
1589
                    and len(revision) > 0 and revision[0].get_branch():
1907.4.2 by Matthieu Moy
Make log work nicely with revno:N:path too.
1590
                location = revision[0].get_branch()
1591
            else:
1592
                location = '.'
1593
            dir, relpath = bzrdir.BzrDir.open_containing(location)
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
1594
            b = dir.open_branch()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1595
2230.4.1 by Aaron Bentley
Get log as fast branch5
1596
        b.lock_read()
1597
        try:
1598
            if revision is None:
1599
                rev1 = None
1600
                rev2 = None
1601
            elif len(revision) == 1:
1602
                rev1 = rev2 = revision[0].in_history(b).revno
1603
            elif len(revision) == 2:
1604
                if revision[1].get_branch() != revision[0].get_branch():
1605
                    # b is taken from revision[0].get_branch(), and
1606
                    # show_log will use its revision_history. Having
1607
                    # different branches will lead to weird behaviors.
1608
                    raise errors.BzrCommandError(
1609
                        "Log doesn't accept two revisions in different"
1610
                        " branches.")
1611
                if revision[0].spec is None:
1612
                    # missing begin-range means first revision
1613
                    rev1 = 1
1614
                else:
1615
                    rev1 = revision[0].in_history(b).revno
1616
1617
                if revision[1].spec is None:
1618
                    # missing end-range means last known revision
1619
                    rev2 = b.revno()
1620
                else:
1621
                    rev2 = revision[1].in_history(b).revno
1622
            else:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1623
                raise errors.BzrCommandError(
2230.4.1 by Aaron Bentley
Get log as fast branch5
1624
                    'bzr log --revision takes one or two values.')
1625
1626
            # By this point, the revision numbers are converted to the +ve
1627
            # form if they were supplied in the -ve form, so we can do
1628
            # this comparison in relative safety
1629
            if rev1 > rev2:
1630
                (rev2, rev1) = (rev1, rev2)
1631
1632
            if log_format is None:
1633
                log_format = log.log_formatter_registry.get_default(b)
1634
1635
            lf = log_format(show_ids=show_ids, to_file=self.outf,
1636
                            show_timezone=timezone)
1637
1638
            show_log(b,
1639
                     lf,
1640
                     file_id,
1641
                     verbose=verbose,
1642
                     direction=direction,
1643
                     start_revision=rev1,
1644
                     end_revision=rev2,
1645
                     search=message)
1646
        finally:
1647
            b.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1648
1185.85.4 by John Arbash Meinel
currently broken, trying to fix things up.
1649
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
1650
def get_log_format(long=False, short=False, line=False, default='long'):
1651
    log_format = default
1652
    if long:
1653
        log_format = 'long'
1654
    if short:
1655
        log_format = 'short'
1656
    if line:
1657
        log_format = 'line'
1658
    return log_format
1659
1660
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1661
class cmd_touching_revisions(Command):
1662
    """Return revision-ids which affected a particular file.
1663
1685.1.80 by Wouter van Heyst
more code cleanup
1664
    A more user-friendly interface is "bzr log FILE".
1665
    """
1666
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1667
    hidden = True
1668
    takes_args = ["filename"]
1185.85.55 by John Arbash Meinel
Updated cmd_touching_revisions
1669
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1670
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1671
    def run(self, filename):
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1672
        tree, relpath = WorkingTree.open_containing(filename)
1673
        b = tree.branch
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1674
        file_id = tree.path2id(relpath)
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
1675
        for revno, revision_id, what in log.find_touching_revisions(b, file_id):
1185.85.55 by John Arbash Meinel
Updated cmd_touching_revisions
1676
            self.outf.write("%6d %s\n" % (revno, what))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1677
1678
1679
class cmd_ls(Command):
1680
    """List files in a tree.
1681
    """
1551.9.24 by Aaron Bentley
Unhide ls, add kind flag
1682
2215.3.1 by Aaron Bentley
Allow ls to take a PATH
1683
    takes_args = ['path?']
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
1684
    # TODO: Take a revision or remote path and list that tree instead.
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1685
    takes_options = ['verbose', 'revision',
1686
                     Option('non-recursive',
1687
                            help='don\'t recurse into sub-directories'),
1688
                     Option('from-root',
1689
                            help='Print all paths from the root of the branch.'),
1690
                     Option('unknown', help='Print unknown files'),
1691
                     Option('versioned', help='Print versioned files'),
1692
                     Option('ignored', help='Print ignored files'),
1693
1694
                     Option('null', help='Null separate the files'),
1551.9.27 by Aaron Bentley
Implement show-ids for all output formats
1695
                     'kind', 'show-ids'
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1696
                    ]
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1697
    @display_command
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1698
    def run(self, revision=None, verbose=False, 
1699
            non_recursive=False, from_root=False,
1700
            unknown=False, versioned=False, ignored=False,
2215.3.1 by Aaron Bentley
Allow ls to take a PATH
1701
            null=False, kind=None, show_ids=False, path=None):
1551.9.24 by Aaron Bentley
Unhide ls, add kind flag
1702
1703
        if kind and kind not in ('file', 'directory', 'symlink'):
1704
            raise errors.BzrCommandError('invalid kind specified')
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1705
1706
        if verbose and null:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1707
            raise errors.BzrCommandError('Cannot set both --verbose and --null')
1551.6.36 by Aaron Bentley
Revert --debris/--detritus changes
1708
        all = not (unknown or versioned or ignored)
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1709
1551.6.36 by Aaron Bentley
Revert --debris/--detritus changes
1710
        selection = {'I':ignored, '?':unknown, 'V':versioned}
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1711
2215.3.1 by Aaron Bentley
Allow ls to take a PATH
1712
        if path is None:
1713
            fs_path = '.'
1714
            prefix = ''
1715
        else:
1716
            if from_root:
1717
                raise errors.BzrCommandError('cannot specify both --from-root'
1718
                                             ' and PATH')
1719
            fs_path = path
1720
            prefix = path
2215.3.3 by Aaron Bentley
Get ls working on branches
1721
        tree, branch, relpath = bzrdir.BzrDir.open_containing_tree_or_branch(
1722
            fs_path)
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1723
        if from_root:
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1724
            relpath = u''
1185.26.1 by John Arbash Meinel
Made ls work again, and take extra arguments.
1725
        elif relpath:
1726
            relpath += '/'
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1727
        if revision is not None:
2215.3.3 by Aaron Bentley
Get ls working on branches
1728
            tree = branch.repository.revision_tree(
1729
                revision[0].in_history(branch).rev_id)
1730
        elif tree is None:
1731
            tree = branch.basis_tree()
1551.6.36 by Aaron Bentley
Revert --debris/--detritus changes
1732
2255.2.61 by John Arbash Meinel
Find callers of list_files() and make sure the tree is always locked.
1733
        tree.lock_read()
1734
        try:
1735
            for fp, fc, fkind, fid, entry in tree.list_files(include_root=False):
1736
                if fp.startswith(relpath):
1737
                    fp = osutils.pathjoin(prefix, fp[len(relpath):])
1738
                    if non_recursive and '/' in fp:
1739
                        continue
1740
                    if not all and not selection[fc]:
1741
                        continue
1742
                    if kind is not None and fkind != kind:
1743
                        continue
1744
                    if verbose:
1745
                        kindch = entry.kind_character()
1746
                        outstring = '%-8s %s%s' % (fc, fp, kindch)
1747
                        if show_ids and fid is not None:
1748
                            outstring = "%-50s %s" % (outstring, fid)
1749
                        self.outf.write(outstring + '\n')
1750
                    elif null:
1751
                        self.outf.write(fp + '\0')
1752
                        if show_ids:
1753
                            if fid is not None:
1754
                                self.outf.write(fid)
1755
                            self.outf.write('\0')
1756
                        self.outf.flush()
1757
                    else:
1551.9.27 by Aaron Bentley
Implement show-ids for all output formats
1758
                        if fid is not None:
2255.2.61 by John Arbash Meinel
Find callers of list_files() and make sure the tree is always locked.
1759
                            my_id = fid
1760
                        else:
1761
                            my_id = ''
1762
                        if show_ids:
1763
                            self.outf.write('%-50s %s\n' % (fp, my_id))
1764
                        else:
1765
                            self.outf.write(fp + '\n')
1766
        finally:
1767
            tree.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1768
1769
1770
class cmd_unknowns(Command):
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
1771
    """List unknown files.
1772
1773
    See also: "bzr ls --unknown".
1774
    """
1551.10.14 by Aaron Bentley
Add some blank lines
1775
1551.10.13 by Aaron Bentley
Hide 'unknowns', document alterntatives to hidden commands
1776
    hidden = True
1551.10.14 by Aaron Bentley
Add some blank lines
1777
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1778
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1779
    def run(self):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1780
        for f in WorkingTree.open_containing(u'.')[0].unknowns():
1773.4.2 by Martin Pool
Cleanup of imports; undeprecate all_revision_ids()
1781
            self.outf.write(osutils.quotefn(f) + '\n')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1782
1783
1784
class cmd_ignore(Command):
2063.5.1 by wang
"bzr ignore" takes multiple arguments. Fixes bug 29488.
1785
    """Ignore specified files or patterns.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1786
1787
    To remove patterns from the ignore list, edit the .bzrignore file.
1788
2077.1.2 by Kent Gibson
Strip trailing slashes from ignore patterns (#4559).
1789
    Trailing slashes on patterns are ignored. 
2135.2.2 by Kent Gibson
Ignore pattern matcher (glob.py) patches:
1790
    If the pattern contains a slash or is a regular expression, it is compared 
1791
    to the whole path from the branch root.  Otherwise, it is compared to only
1792
    the last component of the path.  To match a file only in the root 
1793
    directory, prepend './'.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1794
2077.1.2 by Kent Gibson
Strip trailing slashes from ignore patterns (#4559).
1795
    Ignore patterns specifying absolute paths are not allowed.
1796
2135.2.2 by Kent Gibson
Ignore pattern matcher (glob.py) patches:
1797
    Ignore patterns may include globbing wildcards such as:
1798
      ? - Matches any single character except '/'
1799
      * - Matches 0 or more characters except '/'
1800
      /**/ - Matches 0 or more directories in a path
1801
      [a-z] - Matches a single character from within a group of characters
1802
 
1803
    Ignore patterns may also be Python regular expressions.  
1804
    Regular expression ignore patterns are identified by a 'RE:' prefix 
1805
    followed by the regular expression.  Regular expression ignore patterns
1806
    may not include named or numbered groups.
1807
1808
    Note: ignore patterns containing shell wildcards must be quoted from 
1809
    the shell on Unix.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1810
1811
    examples:
1812
        bzr ignore ./Makefile
1813
        bzr ignore '*.class'
2135.2.2 by Kent Gibson
Ignore pattern matcher (glob.py) patches:
1814
        bzr ignore 'lib/**/*.o'
1815
        bzr ignore 'RE:lib/.*\.o'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1816
    """
2063.5.1 by wang
"bzr ignore" takes multiple arguments. Fixes bug 29488.
1817
    takes_args = ['name_pattern*']
1765.1.1 by Robert Collins
Remove the default ignores list from bzr, lowering the minimum overhead in bzr add.
1818
    takes_options = [
1819
                     Option('old-default-rules',
1820
                            help='Out the ignore rules bzr < 0.9 always used.')
1821
                     ]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1822
    
2063.5.2 by wang
Don't use mutable values as default argument definitions.
1823
    def run(self, name_pattern_list=None, old_default_rules=None):
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1824
        from bzrlib.atomicfile import AtomicFile
1765.1.1 by Robert Collins
Remove the default ignores list from bzr, lowering the minimum overhead in bzr add.
1825
        if old_default_rules is not None:
1826
            # dump the rules and exit
1836.1.12 by John Arbash Meinel
Move ignores into a file of their own, make DEFAULT_IGNORE a deprecated list. Create deprecated_list in symbol versioning.
1827
            for pattern in ignores.OLD_DEFAULTS:
1765.1.1 by Robert Collins
Remove the default ignores list from bzr, lowering the minimum overhead in bzr add.
1828
                print pattern
1829
            return
2077.1.2 by Kent Gibson
Strip trailing slashes from ignore patterns (#4559).
1830
        if not name_pattern_list:
2063.5.5 by wang
resolve a conflict
1831
            raise errors.BzrCommandError("ignore requires at least one "
2063.5.4 by wang
Copy Kent Gibson's changes that incorporates John Arbash Meinel's
1832
                                  "NAME_PATTERN or --old-default-rules")
2298.8.4 by Kent Gibson
Fix whitespace and alignment.
1833
        name_pattern_list = [globbing.normalize_pattern(p) 
1834
                             for p in name_pattern_list]
2077.1.2 by Kent Gibson
Strip trailing slashes from ignore patterns (#4559).
1835
        for name_pattern in name_pattern_list:
2298.8.1 by Kent Gibson
Normalise ignore patterns to use '/' path separator.
1836
            if (name_pattern[0] == '/' or 
1837
                (len(name_pattern) > 1 and name_pattern[1] == ':')):
2077.1.2 by Kent Gibson
Strip trailing slashes from ignore patterns (#4559).
1838
                raise errors.BzrCommandError(
1839
                    "NAME_PATTERN should not be an absolute path")
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1840
        tree, relpath = WorkingTree.open_containing(u'.')
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1841
        ifn = tree.abspath('.bzrignore')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1842
        if os.path.exists(ifn):
1843
            f = open(ifn, 'rt')
1844
            try:
1845
                igns = f.read().decode('utf-8')
1846
            finally:
1847
                f.close()
1848
        else:
1849
            igns = ''
1850
1851
        # TODO: If the file already uses crlf-style termination, maybe
1852
        # we should use that for the newly added lines?
1853
1854
        if igns and igns[-1] != '\n':
1855
            igns += '\n'
2063.5.3 by wang
Change error message. Use spaces instead of tabs.
1856
        for name_pattern in name_pattern_list:
2298.8.1 by Kent Gibson
Normalise ignore patterns to use '/' path separator.
1857
            igns += name_pattern + '\n'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1858
2063.5.4 by wang
Copy Kent Gibson's changes that incorporates John Arbash Meinel's
1859
        f = AtomicFile(ifn, 'wb')
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1860
        try:
1861
            f.write(igns.encode('utf-8'))
1862
            f.commit()
1863
        finally:
1864
            f.close()
1865
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
1866
        if not tree.path2id('.bzrignore'):
1508.1.5 by Robert Collins
Move add from Branch to WorkingTree.
1867
            tree.add(['.bzrignore'])
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1868
1869
1870
class cmd_ignored(Command):
1871
    """List ignored files and the patterns that matched them.
1872
1873
    See also: bzr ignore"""
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1874
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1875
    def run(self):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1876
        tree = WorkingTree.open_containing(u'.')[0]
2255.2.61 by John Arbash Meinel
Find callers of list_files() and make sure the tree is always locked.
1877
        tree.lock_read()
1878
        try:
1879
            for path, file_class, kind, file_id, entry in tree.list_files():
1880
                if file_class != 'I':
1881
                    continue
1882
                ## XXX: Slightly inefficient since this was already calculated
1883
                pat = tree.is_ignored(path)
1884
                print '%-50s %s' % (path, pat)
1885
        finally:
1886
            tree.unlock()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1887
1888
1889
class cmd_lookup_revision(Command):
1890
    """Lookup the revision-id from a revision-number
1891
1892
    example:
1893
        bzr lookup-revision 33
1894
    """
1895
    hidden = True
1896
    takes_args = ['revno']
1897
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1898
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1899
    def run(self, revno):
1900
        try:
1901
            revno = int(revno)
1902
        except ValueError:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1903
            raise errors.BzrCommandError("not a valid revision-number: %r" % revno)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1904
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
1905
        print WorkingTree.open_containing(u'.')[0].branch.get_rev_id(revno)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1906
1907
1908
class cmd_export(Command):
2374.1.1 by Ian Clatworthy
Help and man page fixes
1909
    """Export current or past revision to a destination directory or archive.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1910
1911
    If no revision is specified this exports the last committed revision.
1912
1913
    Format may be an "exporter" name, such as tar, tgz, tbz2.  If none is
1914
    given, try to find the format with the extension. If no extension
1915
    is found exports to a directory (equivalent to --format=dir).
1916
1917
    Root may be the top directory for tar, tgz and tbz2 formats. If none
1185.31.11 by John Arbash Meinel
Merging Alexander's zip export patch
1918
    is given, the top directory will be the root name of the file.
1919
2374.1.2 by Ian Clatworthy
Improved after feedback from reviewers
1920
    If branch is omitted then the branch containing the current working
1921
    directory will be used.
2099.1.1 by Daniel Silverstone
Add source branch support to export command
1922
1185.31.11 by John Arbash Meinel
Merging Alexander's zip export patch
1923
    Note: export of tree with non-ascii filenames to zip is not supported.
1924
1551.3.11 by Aaron Bentley
Merge from Robert
1925
     Supported formats       Autodetected by extension
1926
     -----------------       -------------------------
1185.31.11 by John Arbash Meinel
Merging Alexander's zip export patch
1927
         dir                            -
1928
         tar                          .tar
1929
         tbz2                    .tar.bz2, .tbz2
1930
         tgz                      .tar.gz, .tgz
1931
         zip                          .zip
1932
    """
2099.1.1 by Daniel Silverstone
Add source branch support to export command
1933
    takes_args = ['dest', 'branch?']
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1934
    takes_options = ['revision', 'format', 'root']
2099.1.1 by Daniel Silverstone
Add source branch support to export command
1935
    def run(self, dest, branch=None, revision=None, format=None, root=None):
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
1936
        from bzrlib.export import export
2099.1.1 by Daniel Silverstone
Add source branch support to export command
1937
1938
        if branch is None:
1939
            tree = WorkingTree.open_containing(u'.')[0]
1940
            b = tree.branch
1941
        else:
1942
            b = Branch.open(branch)
1943
            
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1944
        if revision is None:
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1945
            # should be tree.last_revision  FIXME
1241 by Martin Pool
- rename last_patch to last_revision
1946
            rev_id = b.last_revision()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1947
        else:
1948
            if len(revision) != 1:
2067.3.3 by Martin Pool
merge bzr.dev and reconcile several changes, also some test fixes
1949
                raise errors.BzrCommandError('bzr export --revision takes exactly 1 argument')
1185.11.5 by John Arbash Meinel
Merged up-to-date against mainline, still broken.
1950
            rev_id = revision[0].in_history(b).rev_id
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
1951
        t = b.repository.revision_tree(rev_id)
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
1952
        try:
1953
            export(t, dest, format, root)
1954
        except errors.NoSuchExportFormat, e:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
1955
            raise errors.BzrCommandError('Unsupported export format: %s' % e.format)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1956
1957
1958
class cmd_cat(Command):
2374.1.1 by Ian Clatworthy
Help and man page fixes
1959
    """Write the contents of a file as of a given revision to standard output.
1960
1961
    If no revision is nominated, the last revision is used.
1962
2374.1.2 by Ian Clatworthy
Improved after feedback from reviewers
1963
    Note: Take care to redirect standard output when using this command on a
1964
    binary file. 
2374.1.1 by Ian Clatworthy
Help and man page fixes
1965
    """
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1966
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
1967
    takes_options = ['revision', 'name-from-revision']
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1968
    takes_args = ['filename']
2178.4.4 by Alexander Belchenko
encoding_type = 'exact' force sys.stdout to be binary stream on win32
1969
    encoding_type = 'exact'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
1970
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
1971
    @display_command
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
1972
    def run(self, filename, revision=None, name_from_revision=False):
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
1973
        if revision is not None and len(revision) != 1:
2073.2.1 by wang
``bzr cat`` can look up contents of removed or renamed files. If the
1974
            raise errors.BzrCommandError("bzr cat --revision takes exactly"
1975
                                        " one number")
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
1976
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
1977
        tree = None
1907.4.5 by Matthieu Moy
Make bzr cat -r revno:N:foo consistant with bzr cat -r branch:foo.
1978
        try:
2309.1.2 by James Westby
Use BzrDir.open_containing_tree_or_branch as suggested by Aaron.
1979
            tree, b, relpath = \
1980
                    bzrdir.BzrDir.open_containing_tree_or_branch(filename)
1981
        except errors.NotBranchError:
1907.4.5 by Matthieu Moy
Make bzr cat -r revno:N:foo consistant with bzr cat -r branch:foo.
1982
            pass
1983
2158.1.1 by Wouter van Heyst
Fix #73500 mostly by catching a NotLocalUrl exception in cmd_cat.
1984
        if revision is not None and revision[0].get_branch() is not None:
1985
            b = Branch.open(revision[0].get_branch())
1907.4.5 by Matthieu Moy
Make bzr cat -r revno:N:foo consistant with bzr cat -r branch:foo.
1986
        if tree is None:
2158.1.1 by Wouter van Heyst
Fix #73500 mostly by catching a NotLocalUrl exception in cmd_cat.
1987
            tree = b.basis_tree()
1185.50.9 by John Arbash Meinel
[bug 3632] Matthieu Moy- bzr cat should default to last revision
1988
        if revision is None:
1989
            revision_id = b.last_revision()
1990
        else:
1991
            revision_id = revision[0].in_history(b).rev_id
2073.2.1 by wang
``bzr cat`` can look up contents of removed or renamed files. If the
1992
1993
        cur_file_id = tree.path2id(relpath)
1994
        rev_tree = b.repository.revision_tree(revision_id)
1995
        old_file_id = rev_tree.path2id(relpath)
1996
        
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
1997
        if name_from_revision:
2073.2.1 by wang
``bzr cat`` can look up contents of removed or renamed files. If the
1998
            if old_file_id is None:
1999
                raise errors.BzrCommandError("%r is not present in revision %s"
2000
                                                % (filename, revision_id))
2001
            else:
2002
                rev_tree.print_file(old_file_id)
2073.2.2 by wang
Make the decision tree a little clearer. Add more tests for exceptions.
2003
        elif cur_file_id is not None:
2073.2.3 by wang
Change option name to --name-from-revision. Always make new tree the
2004
            rev_tree.print_file(cur_file_id)
2073.2.1 by wang
``bzr cat`` can look up contents of removed or renamed files. If the
2005
        elif old_file_id is not None:
2006
            rev_tree.print_file(old_file_id)
2007
        else:
2008
            raise errors.BzrCommandError("%r is not present in revision %s" %
2009
                                         (filename, revision_id))
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2010
2011
2012
class cmd_local_time_offset(Command):
2013
    """Show the offset in seconds from GMT to local time."""
2014
    hidden = True    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2015
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2016
    def run(self):
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2017
        print osutils.local_time_offset()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2018
2019
2020
2021
class cmd_commit(Command):
2022
    """Commit changes into a new revision.
2023
    
2024
    If no arguments are given, the entire tree is committed.
2025
2026
    If selected files are specified, only changes to those files are
2027
    committed.  If a directory is specified then the directory and everything 
2028
    within it is committed.
2029
2030
    A selected-file commit may fail in some cases where the committed
2031
    tree would be invalid, such as trying to commit a file in a
2032
    newly-added directory that is not itself committed.
2033
    """
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
2034
    # TODO: Run hooks on tree to-be-committed, and after commit.
2035
1185.16.65 by mbp at sourcefrog
- new commit --strict option
2036
    # TODO: Strict commit that fails if there are deleted files.
2037
    #       (what does "deleted files" mean ??)
2038
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
2039
    # TODO: Give better message for -s, --summary, used by tla people
2040
2041
    # XXX: verbose currently does nothing
2042
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2043
    takes_args = ['selected*']
1185.16.48 by mbp at sourcefrog
- more refactoring of and tests for option parsing
2044
    takes_options = ['message', 'verbose', 
2045
                     Option('unchanged',
2046
                            help='commit even if nothing has changed'),
2047
                     Option('file', type=str, 
2193.3.3 by Martin Pool
Fix up other short options
2048
                            short_name='F',
1185.16.48 by mbp at sourcefrog
- more refactoring of and tests for option parsing
2049
                            argname='msgfile',
2050
                            help='file containing commit message'),
1185.16.65 by mbp at sourcefrog
- new commit --strict option
2051
                     Option('strict',
2052
                            help="refuse to commit if there are unknown "
2053
                            "files in the working tree."),
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
2054
                     Option('local',
2055
                            help="perform a local only commit in a bound "
2056
                                 "branch. Such commits are not pushed to "
2057
                                 "the master branch until a normal commit "
2058
                                 "is performed."
2059
                            ),
1185.16.43 by Martin Pool
- clean up handling of option objects
2060
                     ]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2061
    aliases = ['ci', 'checkin']
2062
2063
    def run(self, message=None, file=None, verbose=True, selected_list=None,
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
2064
            unchanged=False, strict=False, local=False):
1607.1.5 by Robert Collins
Make commit verbose mode work!.
2065
        from bzrlib.commit import (NullCommitReporter, ReportCommitToLog)
1185.16.65 by mbp at sourcefrog
- new commit --strict option
2066
        from bzrlib.errors import (PointlessCommit, ConflictsInTree,
2067
                StrictCommitFailed)
1185.33.76 by Martin Pool
Fix import error.
2068
        from bzrlib.msgeditor import edit_commit_message, \
2069
                make_commit_message_template
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2070
1185.33.77 by Martin Pool
doc
2071
        # TODO: Need a blackbox test for invoking the external editor; may be
2072
        # slightly problematic to run this cross-platform.
2073
1185.33.72 by Martin Pool
Fix commit message template for non-ascii files, and add test for handling of
2074
        # TODO: do more checks that the commit will succeed before 
2075
        # spending the user's valuable time typing a commit message.
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2076
        tree, selected_list = tree_files(selected_list)
1704.2.11 by Martin Pool
Handle 'bzr commit DIR' when dir contains pending merges.
2077
        if selected_list == ['']:
2078
            # workaround - commit of root of tree should be exactly the same
2079
            # as just default commit in that tree, and succeed even though
2080
            # selected-file merge commit is not done yet
2081
            selected_list = []
2082
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
2083
        if local and not tree.branch.get_bound_location():
2084
            raise errors.LocalRequiresBoundBranch()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2085
2149.1.4 by Aaron Bentley
Add additional test that callback is called with a Commit instance
2086
        def get_message(commit_obj):
2149.1.2 by Aaron Bentley
Defer getting the commit message until the revision is almost-committed
2087
            """Callback to get commit message"""
2088
            my_message = message
2089
            if my_message is None and not file:
2090
                template = make_commit_message_template(tree, selected_list)
2091
                my_message = edit_commit_message(template)
2092
                if my_message is None:
2093
                    raise errors.BzrCommandError("please specify a commit"
2094
                        " message with either --message or --file")
2095
            elif my_message and file:
2096
                raise errors.BzrCommandError(
2097
                    "please specify either --message or --file")
2098
            if file:
2099
                my_message = codecs.open(file, 'rt', 
2100
                                         bzrlib.user_encoding).read()
2101
            if my_message == "":
2102
                raise errors.BzrCommandError("empty commit message specified")
2103
            return my_message
1607.1.5 by Robert Collins
Make commit verbose mode work!.
2104
        
2105
        if verbose:
2106
            reporter = ReportCommitToLog()
2107
        else:
2108
            reporter = NullCommitReporter()
2089.1.1 by wang
If a commit fails, the commit message is stored in a file at the root of
2109
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2110
        try:
2149.1.2 by Aaron Bentley
Defer getting the commit message until the revision is almost-committed
2111
            tree.commit(message_callback=get_message,
2112
                        specific_files=selected_list,
1607.1.5 by Robert Collins
Make commit verbose mode work!.
2113
                        allow_pointless=unchanged, strict=strict, local=local,
2114
                        reporter=reporter)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2115
        except PointlessCommit:
2116
            # FIXME: This should really happen before the file is read in;
2117
            # perhaps prepare the commit; get the message; then actually commit
1551.9.5 by Aaron Bentley
Revert broken save-commit-message code
2118
            raise errors.BzrCommandError("no changes to commit."
2119
                              " use --unchanged to commit anyhow")
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
2120
        except ConflictsInTree:
1551.9.5 by Aaron Bentley
Revert broken save-commit-message code
2121
            raise errors.BzrCommandError('Conflicts detected in working '
2122
                'tree.  Use "bzr conflicts" to list, "bzr resolve FILE" to'
2123
                ' resolve.')
1185.16.65 by mbp at sourcefrog
- new commit --strict option
2124
        except StrictCommitFailed:
1551.9.5 by Aaron Bentley
Revert broken save-commit-message code
2125
            raise errors.BzrCommandError("Commit refused because there are"
2126
                              " unknown files in the working tree.")
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
2127
        except errors.BoundBranchOutOfDate, e:
1551.9.5 by Aaron Bentley
Revert broken save-commit-message code
2128
            raise errors.BzrCommandError(str(e) + "\n"
2129
            'To commit to master branch, run update and then commit.\n'
2130
            'You can also pass --local to commit to continue working '
2131
            'disconnected.')
2111.1.1 by Martin Pool
Fix #32054, save message if commit fails.
2132
2133
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2134
class cmd_check(Command):
2135
    """Validate consistency of branch history.
2136
2137
    This command checks various invariants about the branch storage to
2138
    detect data corruption or bzr bugs.
2139
    """
1512 by Robert Collins
Merge from Martin. Adjust check to work with HTTP again.
2140
    takes_args = ['branch?']
1449 by Robert Collins
teach check about ghosts
2141
    takes_options = ['verbose']
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2142
1512 by Robert Collins
Merge from Martin. Adjust check to work with HTTP again.
2143
    def run(self, branch=None, verbose=False):
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2144
        from bzrlib.check import check
1512 by Robert Collins
Merge from Martin. Adjust check to work with HTTP again.
2145
        if branch is None:
2146
            tree = WorkingTree.open_containing()[0]
2147
            branch = tree.branch
2148
        else:
2149
            branch = Branch.open(branch)
2150
        check(branch, verbose)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2151
2152
2153
class cmd_upgrade(Command):
2154
    """Upgrade branch storage to current format.
2155
2156
    The check command or bzr developers may sometimes advise you to run
1534.4.13 by Robert Collins
Give a reasonable warning on attempts to upgrade a readonly url.
2157
    this command. When the default format has changed you may also be warned
2158
    during other operations to upgrade.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2159
    """
1534.4.13 by Robert Collins
Give a reasonable warning on attempts to upgrade a readonly url.
2160
    takes_args = ['url?']
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
2161
    takes_options = [
2221.4.9 by Aaron Bentley
Zap trailing whitespace
2162
                    RegistryOption('format',
2221.4.12 by Aaron Bentley
Add option grouping to RegistryOption and clean up format options
2163
                        help='Upgrade to a specific format.  See "bzr help'
2164
                             ' formats" for details',
2221.4.9 by Aaron Bentley
Zap trailing whitespace
2165
                        registry=bzrdir.format_registry,
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
2166
                        converter=bzrdir.format_registry.make_bzrdir,
2221.4.12 by Aaron Bentley
Add option grouping to RegistryOption and clean up format options
2167
                        value_switches=True, title='Branch format'),
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
2168
                    ]
2169
2170
    def run(self, url='.', format=None):
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2171
        from bzrlib.upgrade import upgrade
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
2172
        if format is None:
2204.5.5 by Aaron Bentley
Remove RepositoryFormat.set_default_format, deprecate get_format_type
2173
            format = bzrdir.format_registry.make_bzrdir('default')
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
2174
        upgrade(url, format)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2175
2176
2177
class cmd_whoami(Command):
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2178
    """Show or set bzr user id.
2179
    
2180
    examples:
2181
        bzr whoami --email
2182
        bzr whoami 'Frank Chu <fchu@example.com>'
2183
    """
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2184
    takes_options = [ Option('email',
2185
                             help='display email address only'),
2186
                      Option('branch',
2187
                             help='set identity for the current branch instead of '
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2188
                                  'globally'),
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2189
                    ]
2190
    takes_args = ['name?']
2191
    encoding_type = 'replace'
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2192
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2193
    @display_command
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2194
    def run(self, email=False, branch=False, name=None):
2195
        if name is None:
2196
            # use branch if we're inside one; otherwise global config
2197
            try:
1816.2.10 by Robey Pointer
code style changes
2198
                c = Branch.open_containing('.')[0].get_config()
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2199
            except errors.NotBranchError:
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2200
                c = config.GlobalConfig()
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2201
            if email:
1816.2.10 by Robey Pointer
code style changes
2202
                self.outf.write(c.user_email() + '\n')
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2203
            else:
1816.2.10 by Robey Pointer
code style changes
2204
                self.outf.write(c.username() + '\n')
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2205
            return
1816.2.2 by Robey Pointer
fix 'whoami' to use encodings and allow setting the global or branch identity
2206
1840.1.2 by Robey Pointer
instead of raising an error, just display an exception if 'whoami' is given a name that doesn't look like it contains an email address
2207
        # display a warning if an email address isn't included in the given name.
2208
        try:
2209
            config.extract_email_address(name)
2055.2.2 by John Arbash Meinel
Switch extract_email_address() to use a more specific exception
2210
        except errors.NoEmailInUsername, e:
1840.1.5 by Robey Pointer
change the warning message for a 'whoami' with no email address, on jam's recommendation
2211
            warning('"%s" does not seem to contain an email address.  '
2212
                    'This is allowed, but not recommended.', name)
1840.1.1 by Robey Pointer
raise an exception if 'whoami' is given a name without a decodable email address
2213
        
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2214
        # use global config unless --branch given
2215
        if branch:
1816.2.10 by Robey Pointer
code style changes
2216
            c = Branch.open_containing('.')[0].get_config()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2217
        else:
1816.2.4 by Robey Pointer
flesh out 'whoami' docs a little, and don't display the identity after setting it
2218
            c = config.GlobalConfig()
2219
        c.set_user_option('email', name)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2220
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2221
1185.35.14 by Aaron Bentley
Implemented nick command
2222
class cmd_nick(Command):
1551.3.11 by Aaron Bentley
Merge from Robert
2223
    """Print or set the branch nickname.  
2224
1185.35.14 by Aaron Bentley
Implemented nick command
2225
    If unset, the tree root directory name is used as the nickname
2226
    To print the current nickname, execute with no argument.  
2227
    """
2228
    takes_args = ['nickname?']
2229
    def run(self, nickname=None):
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
2230
        branch = Branch.open_containing(u'.')[0]
1185.35.14 by Aaron Bentley
Implemented nick command
2231
        if nickname is None:
2232
            self.printme(branch)
2233
        else:
2234
            branch.nick = nickname
2235
2236
    @display_command
2237
    def printme(self, branch):
2367.1.8 by Robert Collins
Whitespace.
2238
        print branch.nick
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2239
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2240
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2241
class cmd_selftest(Command):
1393.1.46 by Martin Pool
- bzr selftest arguments can be partial ids of tests to run
2242
    """Run internal test suite.
2243
    
2213.2.1 by Martin Pool
Add selftest --first flag
2244
    This creates temporary test directories in the working directory, but not
2245
    existing data is affected.  These directories are deleted if the tests
2246
    pass, or left behind to help in debugging if they fail and --keep-output
2247
    is specified.
1393.1.46 by Martin Pool
- bzr selftest arguments can be partial ids of tests to run
2248
    
2213.2.1 by Martin Pool
Add selftest --first flag
2249
    If arguments are given, they are regular expressions that say which tests
2250
    should run.  Tests matching any expression are run, and other tests are
2251
    not run.
2252
2253
    Alternatively if --first is given, matching tests are run first and then
2254
    all other tests are run.  This is useful if you have been working in a
2255
    particular area, but want to make sure nothing else was broken.
1552 by Martin Pool
Improved help text for bzr selftest
2256
2257
    If the global option '--no-plugins' is given, plugins are not loaded
2258
    before running the selftests.  This has two effects: features provided or
2259
    modified by plugins will not be tested, and tests provided by plugins will
2260
    not be run.
2261
2213.2.1 by Martin Pool
Add selftest --first flag
2262
    examples::
1552 by Martin Pool
Improved help text for bzr selftest
2263
        bzr selftest ignore
2213.2.1 by Martin Pool
Add selftest --first flag
2264
            run only tests relating to 'ignore'
1552 by Martin Pool
Improved help text for bzr selftest
2265
        bzr --no-plugins selftest -v
2213.2.1 by Martin Pool
Add selftest --first flag
2266
            disable plugins and list tests as they're run
2321.2.1 by Alexander Belchenko
`bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir
2267
2268
    For each test, that needs actual disk access, bzr create their own
2269
    subdirectory in the temporary testing directory (testXXXX.tmp).
2270
    By default the name of such subdirectory is based on the name of the test.
2271
    If option '--numbered-dirs' is given, bzr will use sequent numbers
2272
    of running tests to create such subdirectories. This is default behavior
2273
    on Windows because of path length limitation.
1185.16.58 by mbp at sourcefrog
- run all selftests by default
2274
    """
1393.1.46 by Martin Pool
- bzr selftest arguments can be partial ids of tests to run
2275
    # TODO: --list should give a list of all available tests
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2276
2277
    # NB: this is used from the class without creating an instance, which is
2278
    # why it does not have a self parameter.
2279
    def get_transport_type(typestring):
2280
        """Parse and return a transport specifier."""
2281
        if typestring == "sftp":
2282
            from bzrlib.transport.sftp import SFTPAbsoluteServer
2283
            return SFTPAbsoluteServer
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
2284
        if typestring == "memory":
2285
            from bzrlib.transport.memory import MemoryServer
2286
            return MemoryServer
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
2287
        if typestring == "fakenfs":
1558.10.2 by Robert Collins
Refactor the FakeNFS support into a TransportDecorator.
2288
            from bzrlib.transport.fakenfs import FakeNFSServer
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
2289
            return FakeNFSServer
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2290
        msg = "No known transport type %s. Supported types are: sftp\n" %\
2291
            (typestring)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2292
        raise errors.BzrCommandError(msg)
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2293
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2294
    hidden = True
1185.1.57 by Robert Collins
nuke --pattern to selftest, replace with regexp.search calls.
2295
    takes_args = ['testspecs*']
1552 by Martin Pool
Improved help text for bzr selftest
2296
    takes_options = ['verbose',
1185.16.58 by mbp at sourcefrog
- run all selftests by default
2297
                     Option('one', help='stop when one test fails'),
2333.1.1 by Dmitry Vasiliev
Fixed typo and removed some trailing whitespaces
2298
                     Option('keep-output',
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2299
                            help='keep output directories when tests fail'),
2333.1.1 by Dmitry Vasiliev
Fixed typo and removed some trailing whitespaces
2300
                     Option('transport',
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
2301
                            help='Use a different transport by default '
2302
                                 'throughout the test suite.',
2303
                            type=get_transport_type),
2333.1.1 by Dmitry Vasiliev
Fixed typo and removed some trailing whitespaces
2304
                     Option('benchmark', help='run the bzr benchmarks.'),
1725.1.1 by Robert Collins
'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate
2305
                     Option('lsprof-timed',
2306
                            help='generate lsprof output for benchmarked'
2307
                                 ' sections of code.'),
1908.2.4 by John Arbash Meinel
Add the ability to specify a benchmark cache directory.
2308
                     Option('cache-dir', type=str,
2309
                            help='a directory to cache intermediate'
2310
                                 ' benchmark steps'),
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
2311
                     Option('clean-output',
2172.4.2 by Alexander Belchenko
Update NEWS and help for '--clean' option
2312
                            help='clean temporary tests directories'
2313
                                 ' without running tests'),
2213.2.1 by Martin Pool
Add selftest --first flag
2314
                     Option('first',
2333.1.1 by Dmitry Vasiliev
Fixed typo and removed some trailing whitespaces
2315
                            help='run all tests, but run specified tests first'
2321.2.1 by Alexander Belchenko
`bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir
2316
                            ),
2317
                     Option('numbered-dirs',
2318
                            help='use numbered dirs for TestCaseInTempDir'),
1725.1.1 by Robert Collins
'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate
2319
                     ]
2204.3.4 by Alexander Belchenko
Command 'selftest' use 'replace' encoding_type to prevent sudden traceback
2320
    encoding_type = 'replace'
1185.16.58 by mbp at sourcefrog
- run all selftests by default
2321
1725.1.1 by Robert Collins
'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate
2322
    def run(self, testspecs_list=None, verbose=None, one=False,
2323
            keep_output=False, transport=None, benchmark=None,
2213.2.1 by Martin Pool
Add selftest --first flag
2324
            lsprof_timed=None, cache_dir=None, clean_output=False,
2321.2.1 by Alexander Belchenko
`bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir
2325
            first=False, numbered_dirs=None):
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2326
        import bzrlib.ui
1707.2.2 by Robert Collins
Start on bench_add, an add benchtest.
2327
        from bzrlib.tests import selftest
2328
        import bzrlib.benchmarks as benchmarks
1908.2.16 by John Arbash Meinel
Move all the new TreeCreator classes into separate files.
2329
        from bzrlib.benchmarks import tree_creator
1908.2.4 by John Arbash Meinel
Add the ability to specify a benchmark cache directory.
2330
2172.4.3 by Alexander Belchenko
Change name of option to '--clean-output' and provide tests
2331
        if clean_output:
2332
            from bzrlib.tests import clean_selftest_output
2333
            clean_selftest_output()
2172.4.1 by Alexander Belchenko
'bzr selftest --clean' allows easily clean temporary tests directories
2334
            return 0
2335
2321.2.1 by Alexander Belchenko
`bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir
2336
        if numbered_dirs is None and sys.platform == 'win32':
2337
            numbered_dirs = True
2338
1908.2.4 by John Arbash Meinel
Add the ability to specify a benchmark cache directory.
2339
        if cache_dir is not None:
1908.2.16 by John Arbash Meinel
Move all the new TreeCreator classes into separate files.
2340
            tree_creator.TreeCreator.CACHE_ROOT = osutils.abspath(cache_dir)
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2341
        print '%10s: %s' % ('bzr', osutils.realpath(sys.argv[0]))
1707.2.1 by Robert Collins
'bzr selftest --benchmark' will run a new benchmarking selftest.
2342
        print '%10s: %s' % ('bzrlib', bzrlib.__path__[0])
2343
        print
2095.4.1 by Martin Pool
Better progress bars during tests
2344
        if testspecs_list is not None:
2345
            pattern = '|'.join(testspecs_list)
2346
        else:
2347
            pattern = ".*"
2348
        if benchmark:
2349
            test_suite_factory = benchmarks.test_suite
2350
            if verbose is None:
2351
                verbose = True
2352
            # TODO: should possibly lock the history file...
2197.1.1 by Martin Pool
Use line buffering to write .perf_history
2353
            benchfile = open(".perf_history", "at", buffering=1)
2095.4.1 by Martin Pool
Better progress bars during tests
2354
        else:
2355
            test_suite_factory = None
2356
            if verbose is None:
2357
                verbose = False
2358
            benchfile = None
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2359
        try:
2095.4.1 by Martin Pool
Better progress bars during tests
2360
            result = selftest(verbose=verbose, 
2361
                              pattern=pattern,
2362
                              stop_on_failure=one, 
2363
                              keep_output=keep_output,
2364
                              transport=transport,
2365
                              test_suite_factory=test_suite_factory,
2366
                              lsprof_timed=lsprof_timed,
2213.2.1 by Martin Pool
Add selftest --first flag
2367
                              bench_history=benchfile,
2368
                              matching_tests_first=first,
2321.2.1 by Alexander Belchenko
`bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir
2369
                              numbered_dirs=numbered_dirs,
2213.2.1 by Martin Pool
Add selftest --first flag
2370
                              )
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2371
        finally:
2095.4.1 by Martin Pool
Better progress bars during tests
2372
            if benchfile is not None:
2373
                benchfile.close()
2374
        if result:
2375
            info('tests passed')
2376
        else:
2377
            info('tests failed')
2378
        return int(not result)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2379
2380
2381
class cmd_version(Command):
2382
    """Show version of bzr."""
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
2383
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2384
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2385
    def run(self):
1819.1.8 by Martin Pool
Improved reporting of bzrlib revision_id
2386
        from bzrlib.version import show_version
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2387
        show_version()
2388
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
2389
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2390
class cmd_rocks(Command):
2391
    """Statement of optimism."""
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
2392
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2393
    hidden = True
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
2394
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2395
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2396
    def run(self):
2227.4.1 by v.ladeuil+lp at free
Fix #78026.
2397
        print "It sure does!"
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2398
2399
2400
class cmd_find_merge_base(Command):
1871.1.1 by Robert Collins
Relocate bzrlib selftest external output tests to bzrlib/tests/blackbox/test_selftest.py.
2401
    """Find and print a base revision for merging two branches."""
1185.16.3 by Martin Pool
- remove all TODOs from bzr help messages
2402
    # TODO: Options to specify revisions on either side, as if
2403
    #       merging only part of the history.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2404
    takes_args = ['branch', 'other']
2405
    hidden = True
2406
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2407
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2408
    def run(self, branch, other):
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
2409
        from bzrlib.revision import MultipleRevisionSources
1155 by Martin Pool
- update find-merge-base to use new common_ancestor code
2410
        
1442.1.64 by Robert Collins
Branch.open_containing now returns a tuple (Branch, relative-path).
2411
        branch1 = Branch.open_containing(branch)[0]
2412
        branch2 = Branch.open_containing(other)[0]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2413
1241 by Martin Pool
- rename last_patch to last_revision
2414
        last1 = branch1.last_revision()
2415
        last2 = branch2.last_revision()
1155 by Martin Pool
- update find-merge-base to use new common_ancestor code
2416
1551.2.2 by Aaron Bentley
Fix find-merge-base for new API [recommit]
2417
        source = MultipleRevisionSources(branch1.repository, 
2418
                                         branch2.repository)
1155 by Martin Pool
- update find-merge-base to use new common_ancestor code
2419
        
2420
        base_rev_id = common_ancestor(last1, last2, source)
2421
2422
        print 'merge base is revision %s' % base_rev_id
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2423
2424
2425
class cmd_merge(Command):
2426
    """Perform a three-way merge.
2427
    
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2428
    The branch is the branch you will merge from.  By default, it will merge
2429
    the latest revision.  If you specify a revision, that revision will be
2430
    merged.  If you specify two revisions, the first will be used as a BASE,
2431
    and the second one as OTHER.  Revision numbers are always relative to the
2432
    specified branch.
1172 by Martin Pool
- better explanation when merge fails with AmbiguousBase
2433
1551.2.19 by Aaron Bentley
Added See Conflicts to merge help
2434
    By default, bzr will try to merge in all new work from the other
1172 by Martin Pool
- better explanation when merge fails with AmbiguousBase
2435
    branch, automatically determining an appropriate base.  If this
2436
    fails, you may need to give an explicit base.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2437
    
1551.2.18 by Aaron Bentley
Updated docs to clarify conflict handling
2438
    Merge will do its best to combine the changes in two branches, but there
2439
    are some kinds of problems only a human can fix.  When it encounters those,
2440
    it will mark a conflict.  A conflict means that you need to fix something,
2441
    before you should commit.
2442
1551.2.19 by Aaron Bentley
Added See Conflicts to merge help
2443
    Use bzr resolve when you have fixed a problem.  See also bzr conflicts.
1551.2.18 by Aaron Bentley
Updated docs to clarify conflict handling
2444
1614.2.4 by Olaf Conradi
Renamed argument location in command merge back to branch.
2445
    If there is no default branch set, the first merge will set it. After
2446
    that, you can omit the branch to use the default.  To change the
1785.1.4 by John Arbash Meinel
Update help for the new --remember semantics.
2447
    default, use --remember. The value will only be saved if the remote
2448
    location can be accessed.
1614.2.2 by Olaf Conradi
Merge command:
2449
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2450
    The results of the merge are placed into the destination working
2451
    directory, where they can be reviewed (with bzr diff), tested, and then
2452
    committed to record the result of the merge.
2453
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2454
    Examples:
2455
2456
    To merge the latest revision from bzr.dev
2457
    bzr merge ../bzr.dev
2458
2459
    To merge changes up to and including revision 82 from bzr.dev
2460
    bzr merge -r 82 ../bzr.dev
2461
2462
    To merge the changes introduced by 82, without previous changes:
2463
    bzr merge -r 81..82 ../bzr.dev
2464
    
2465
    merge refuses to run if there are any uncommitted changes, unless
2466
    --force is given.
2467
    """
1614.2.4 by Olaf Conradi
Renamed argument location in command merge back to branch.
2468
    takes_args = ['branch?']
1614.2.2 by Olaf Conradi
Merge command:
2469
    takes_options = ['revision', 'force', 'merge-type', 'reprocess', 'remember',
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2470
        Option('show-base', help="Show base revision text in "
2471
               "conflicts"),
2472
        Option('uncommitted', help='Apply uncommitted changes'
2473
               ' from a working copy, instead of branch changes'),
2474
        Option('pull', help='If the destination is already'
2475
                ' completely merged into the source, pull from the'
2476
                ' source rather than merging. When this happens,'
2477
                ' you do not need to commit the result.'),
2478
        Option('directory',
2220.2.26 by Martin Pool
merge trunk, in particular new Branch6 changes
2479
            help='Branch to merge into, '
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2480
                 'rather than the one containing the working directory',
2481
            short_name='d',
2482
            type=unicode,
2483
            ),
2484
    ]
1551.6.22 by Aaron Bentley
Improved help for remerge and merge
2485
1614.2.4 by Olaf Conradi
Renamed argument location in command merge back to branch.
2486
    def run(self, branch=None, revision=None, force=False, merge_type=None,
2279.3.1 by mbp at sourcefrog
Add a -d option to push, pull, merge (ported from tags branch)
2487
            show_base=False, reprocess=False, remember=False,
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2488
            uncommitted=False, pull=False,
2489
            directory=None,
2490
            ):
2220.2.30 by Martin Pool
split out tag-merging code and add some tests
2491
        from bzrlib.tag import _merge_tags_if_possible
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
2492
        other_revision_id = None
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2493
        if merge_type is None:
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
2494
            merge_type = _mod_merge.Merge3Merger
1614.2.2 by Olaf Conradi
Merge command:
2495
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2496
        if directory is None: directory = u'.'
2255.7.1 by John Arbash Meinel
_iter_changes should return Unicode paths.
2497
        # XXX: jam 20070225 WorkingTree should be locked before you extract its
2498
        #      inventory. Because merge is a mutating operation, it really
2499
        #      should be a lock_write() for the whole cmd_merge operation.
2500
        #      However, cmd_merge open's its own tree in _merge_helper, which
2501
        #      means if we lock here, the later lock_write() will always block.
2502
        #      Either the merge helper code should be updated to take a tree,
2255.7.96 by Robert Collins
Change _iter_changes interface to yield both old and new paths.
2503
        #      (What about tree.merge_from_branch?)
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2504
        tree = WorkingTree.open_containing(directory)[0]
1551.10.25 by Aaron Bentley
Make ChangeReporter private
2505
        change_reporter = delta._ChangeReporter(
2255.7.98 by Robert Collins
Merge bzr.dev.
2506
            unversioned_filter=tree.is_ignored)
1685.1.69 by Wouter van Heyst
merge bzr.dev 1740
2507
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
2508
        if branch is not None:
2509
            try:
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2510
                mergeable = bundle.read_mergeable_from_url(
1551.14.2 by Aaron Bentley
Support manual merge from merge directives
2511
                    branch)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2512
            except errors.NotABundle:
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
2513
                pass # Continue on considering this url a Branch
1185.82.25 by Aaron Bentley
Added changeset-merging functionality
2514
            else:
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2515
                if revision is not None:
2516
                    raise errors.BzrCommandError(
2517
                        'Cannot use -r with merge directives or bundles')
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
2518
                other_revision_id = mergeable.install_revisions(
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2519
                    tree.branch.repository)
2520
                revision = [RevisionSpec.from_string(
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
2521
                    'revid:' + other_revision_id)]
1185.82.25 by Aaron Bentley
Added changeset-merging functionality
2522
1907.4.10 by Matthieu Moy
Cut long lines, prevent "path" component from being used in revno:branch/path.
2523
        if revision is None \
2524
                or len(revision) < 1 or revision[0].needs_branch():
1907.4.1 by Matthieu Moy
Fixed merge to work nicely with -r revno:N:path
2525
            branch = self._get_remembered_parent(tree, branch, 'Merging from')
1614.2.6 by Olaf Conradi
Add testcase for --remember when merge fails. It should still remember
2526
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2527
        if revision is None or len(revision) < 1:
1910.1.1 by Aaron Bentley
Merge takes --uncommitted parameter
2528
            if uncommitted:
2529
                base = [branch, -1]
2530
                other = [branch, None]
2531
            else:
2532
                base = [None, None]
2533
                other = [branch, -1]
1645.1.1 by Aaron Bentley
Implement single-file merge
2534
            other_branch, path = Branch.open_containing(branch)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2535
        else:
1910.1.1 by Aaron Bentley
Merge takes --uncommitted parameter
2536
            if uncommitted:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2537
                raise errors.BzrCommandError('Cannot use --uncommitted and'
2538
                                             ' --revision at the same time.')
1907.4.1 by Matthieu Moy
Fixed merge to work nicely with -r revno:N:path
2539
            branch = revision[0].get_branch() or branch
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2540
            if len(revision) == 1:
974.1.52 by aaron.bentley at utoronto
Merged mpool's latest changes (~0.0.7)
2541
                base = [None, None]
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
2542
                if other_revision_id is not None:
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2543
                    other_branch = None
2544
                    path = ""
2545
                    other = None
2546
                else:
2547
                    other_branch, path = Branch.open_containing(branch)
2548
                    revno = revision[0].in_history(other_branch).revno
2549
                    other = [branch, revno]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2550
            else:
2551
                assert len(revision) == 2
2552
                if None in revision:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2553
                    raise errors.BzrCommandError(
1907.4.10 by Matthieu Moy
Cut long lines, prevent "path" component from being used in revno:branch/path.
2554
                        "Merge doesn't permit empty revision specifier.")
1907.4.12 by Matthieu Moy
Made merge work with two revisions in different branches.
2555
                base_branch, path = Branch.open_containing(branch)
2556
                branch1 = revision[1].get_branch() or branch
2557
                other_branch, path1 = Branch.open_containing(branch1)
2558
                if revision[0].get_branch() is not None:
2559
                    # then path was obtained from it, and is None.
2560
                    path = path1
1685.1.19 by John Arbash Meinel
pull/merge/branch/missing should all save the absolute path to the other branch, not the relative one
2561
1907.4.12 by Matthieu Moy
Made merge work with two revisions in different branches.
2562
                base = [branch, revision[0].in_history(base_branch).revno]
2563
                other = [branch1, revision[1].in_history(other_branch).revno]
1685.1.19 by John Arbash Meinel
pull/merge/branch/missing should all save the absolute path to the other branch, not the relative one
2564
1551.14.7 by Aaron Bentley
test suite fixes
2565
        if ((tree.branch.get_parent() is None or remember) and
2566
            other_branch is not None):
1685.1.19 by John Arbash Meinel
pull/merge/branch/missing should all save the absolute path to the other branch, not the relative one
2567
            tree.branch.set_parent(other_branch.base)
2568
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2569
        # pull tags now... it's a bit inconsistent to do it ahead of copying
2570
        # the history but that's done inside the merge code
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2571
        if other_branch is not None:
2572
            _merge_tags_if_possible(other_branch, tree.branch)
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2573
1645.1.1 by Aaron Bentley
Implement single-file merge
2574
        if path != "":
2575
            interesting_files = [path]
2576
        else:
2577
            interesting_files = None
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2578
        pb = ui.ui_factory.nested_progress_bar()
1172 by Martin Pool
- better explanation when merge fails with AmbiguousBase
2579
        try:
1551.2.25 by Aaron Bentley
Stop using deprecated methods in merge and revert
2580
            try:
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
2581
                conflict_count = _merge_helper(
1551.14.11 by Aaron Bentley
rename rev_id and other_rev_id
2582
                    other, base, other_rev_id=other_revision_id,
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
2583
                    check_clean=(not force),
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
2584
                    merge_type=merge_type,
2585
                    reprocess=reprocess,
2586
                    show_base=show_base,
2149.2.1 by Jan Hudec
Option --pull for merge command.
2587
                    pull=pull,
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
2588
                    this_dir=directory,
1551.11.13 by Aaron Bentley
Merge bzr.dev
2589
                    pb=pb, file_list=interesting_files,
1551.11.9 by Aaron Bentley
Apply change reporting to merge
2590
                    change_reporter=change_reporter)
1551.2.25 by Aaron Bentley
Stop using deprecated methods in merge and revert
2591
            finally:
2592
                pb.finished()
1476 by Robert Collins
Merge now has a retcode of 1 when conflicts occur. (Robert Collins)
2593
            if conflict_count != 0:
2594
                return 1
2595
            else:
2596
                return 0
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2597
        except errors.AmbiguousBase, e:
1173 by Martin Pool
- message typo
2598
            m = ("sorry, bzr can't determine the right merge base yet\n"
1172 by Martin Pool
- better explanation when merge fails with AmbiguousBase
2599
                 "candidates are:\n  "
2600
                 + "\n  ".join(e.bases)
2601
                 + "\n"
2602
                 "please specify an explicit base with -r,\n"
2603
                 "and (if you want) report this to the bzr developers\n")
2604
            log_error(m)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2605
1685.1.59 by Martin Pool
[broken] Fix up & refactor display of remembered urls to unescape properly
2606
    # TODO: move up to common parent; this isn't merge-specific anymore. 
2607
    def _get_remembered_parent(self, tree, supplied_location, verb_string):
2608
        """Use tree.branch's parent if none was supplied.
2609
2610
        Report if the remembered location was used.
2611
        """
2612
        if supplied_location is not None:
2613
            return supplied_location
2614
        stored_location = tree.branch.get_parent()
1685.1.71 by Wouter van Heyst
change branch.{get,set}_parent to store a relative path but return full urls
2615
        mutter("%s", stored_location)
1685.1.59 by Martin Pool
[broken] Fix up & refactor display of remembered urls to unescape properly
2616
        if stored_location is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2617
            raise errors.BzrCommandError("No location specified or remembered")
1685.1.59 by Martin Pool
[broken] Fix up & refactor display of remembered urls to unescape properly
2618
        display_url = urlutils.unescape_for_display(stored_location, self.outf.encoding)
2619
        self.outf.write("%s remembered location %s\n" % (verb_string, display_url))
2620
        return stored_location
2621
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2622
1185.35.4 by Aaron Bentley
Implemented remerge
2623
class cmd_remerge(Command):
2624
    """Redo a merge.
1551.6.22 by Aaron Bentley
Improved help for remerge and merge
2625
2626
    Use this if you want to try a different merge technique while resolving
2627
    conflicts.  Some merge techniques are better than others, and remerge 
2628
    lets you try different ones on different files.
2629
2630
    The options for remerge have the same meaning and defaults as the ones for
2631
    merge.  The difference is that remerge can (only) be run when there is a
2632
    pending merge, and it lets you specify particular files.
2633
2634
    Examples:
2635
    $ bzr remerge --show-base
2636
        Re-do the merge of all conflicted files, and show the base text in
2637
        conflict regions, in addition to the usual THIS and OTHER texts.
2638
2639
    $ bzr remerge --merge-type weave --reprocess foobar
2640
        Re-do the merge of "foobar", using the weave merge algorithm, with
2641
        additional processing to reduce the size of conflict regions.
2374.1.1 by Ian Clatworthy
Help and man page fixes
2642
    """
1185.35.4 by Aaron Bentley
Implemented remerge
2643
    takes_args = ['file*']
2644
    takes_options = ['merge-type', 'reprocess',
2645
                     Option('show-base', help="Show base revision text in "
2646
                            "conflicts")]
2647
2648
    def run(self, file_list=None, merge_type=None, show_base=False,
2649
            reprocess=False):
2650
        if merge_type is None:
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
2651
            merge_type = _mod_merge.Merge3Merger
1508.1.15 by Robert Collins
Merge from mpool.
2652
        tree, file_list = tree_files(file_list)
2653
        tree.lock_write()
1185.35.4 by Aaron Bentley
Implemented remerge
2654
        try:
1908.6.8 by Robert Collins
Remove remerges dependence on pending_merges, also makes it simpler.
2655
            parents = tree.get_parent_ids()
2656
            if len(parents) != 2:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2657
                raise errors.BzrCommandError("Sorry, remerge only works after normal"
2658
                                             " merges.  Not cherrypicking or"
2659
                                             " multi-merges.")
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
2660
            repository = tree.branch.repository
1908.6.8 by Robert Collins
Remove remerges dependence on pending_merges, also makes it simpler.
2661
            base_revision = common_ancestor(parents[0],
2662
                                            parents[1], repository)
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
2663
            base_tree = repository.revision_tree(base_revision)
1908.6.8 by Robert Collins
Remove remerges dependence on pending_merges, also makes it simpler.
2664
            other_tree = repository.revision_tree(parents[1])
1185.35.4 by Aaron Bentley
Implemented remerge
2665
            interesting_ids = None
1551.7.10 by Aaron Bentley
Remerge doesn't clear unrelated conflicts
2666
            new_conflicts = []
2667
            conflicts = tree.conflicts()
1185.35.4 by Aaron Bentley
Implemented remerge
2668
            if file_list is not None:
2669
                interesting_ids = set()
2670
                for filename in file_list:
1508.1.15 by Robert Collins
Merge from mpool.
2671
                    file_id = tree.path2id(filename)
1558.2.1 by Aaron Bentley
Ensure remerge errors when file-id is None
2672
                    if file_id is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2673
                        raise errors.NotVersionedError(filename)
1185.35.4 by Aaron Bentley
Implemented remerge
2674
                    interesting_ids.add(file_id)
1508.1.15 by Robert Collins
Merge from mpool.
2675
                    if tree.kind(file_id) != "directory":
1185.35.4 by Aaron Bentley
Implemented remerge
2676
                        continue
1185.35.13 by Aaron Bentley
Merged Martin
2677
                    
1508.1.15 by Robert Collins
Merge from mpool.
2678
                    for name, ie in tree.inventory.iter_entries(file_id):
1185.35.4 by Aaron Bentley
Implemented remerge
2679
                        interesting_ids.add(ie.file_id)
1551.7.10 by Aaron Bentley
Remerge doesn't clear unrelated conflicts
2680
                new_conflicts = conflicts.select_conflicts(tree, file_list)[0]
2080.2.1 by John Arbash Meinel
Make 'bzr remerge' not use deprecated WorkingTree.iter_conflicts
2681
            else:
2080.2.3 by John Arbash Meinel
remerge only supports text or content conflicts
2682
                # Remerge only supports resolving contents conflicts
2683
                allowed_conflicts = ('text conflict', 'contents conflict')
2684
                restore_files = [c.path for c in conflicts
2685
                                 if c.typestring in allowed_conflicts]
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
2686
            _mod_merge.transform_tree(tree, tree.basis_tree(), interesting_ids)
1551.7.10 by Aaron Bentley
Remerge doesn't clear unrelated conflicts
2687
            tree.set_conflicts(ConflictList(new_conflicts))
2080.2.1 by John Arbash Meinel
Make 'bzr remerge' not use deprecated WorkingTree.iter_conflicts
2688
            if file_list is not None:
1185.35.4 by Aaron Bentley
Implemented remerge
2689
                restore_files = file_list
2690
            for filename in restore_files:
2691
                try:
1508.1.15 by Robert Collins
Merge from mpool.
2692
                    restore(tree.abspath(filename))
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2693
                except errors.NotConflicted:
1185.35.4 by Aaron Bentley
Implemented remerge
2694
                    pass
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
2695
            conflicts = _mod_merge.merge_inner(
2696
                                      tree.branch, other_tree, base_tree,
2697
                                      this_tree=tree,
2698
                                      interesting_ids=interesting_ids,
2699
                                      other_rev_id=parents[1],
2700
                                      merge_type=merge_type,
2701
                                      show_base=show_base,
2702
                                      reprocess=reprocess)
1185.35.4 by Aaron Bentley
Implemented remerge
2703
        finally:
1508.1.15 by Robert Collins
Merge from mpool.
2704
            tree.unlock()
1185.35.4 by Aaron Bentley
Implemented remerge
2705
        if conflicts > 0:
2706
            return 1
2707
        else:
2708
            return 0
2709
2023.1.1 by ghigo
add topics help
2710
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2711
class cmd_revert(Command):
1551.8.27 by Aaron Bentley
Update docs again
2712
    """Revert files to a previous revision.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2713
1551.8.27 by Aaron Bentley
Update docs again
2714
    Giving a list of files will revert only those files.  Otherwise, all files
2715
    will be reverted.  If the revision is not specified with '--revision', the
2716
    last committed revision is used.
1551.8.26 by Aaron Bentley
Update revert help text
2717
2718
    To remove only some changes, without reverting to a prior version, use
2719
    merge instead.  For example, "merge . --r-2..-3" will remove the changes
2720
    introduced by -2, without affecting the changes introduced by -1.  Or
2721
    to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
2722
    
2723
    By default, any files that have been manually changed will be backed up
2724
    first.  (Files changed only by merge are not backed up.)  Backup files have
1551.8.27 by Aaron Bentley
Update docs again
2725
    '.~#~' appended to their name, where # is a number.
2726
2727
    When you provide files, you can use their current pathname or the pathname
2728
    from the target revision.  So you can use revert to "undelete" a file by
2729
    name.  If you name a directory, all the contents of that directory will be
2730
    reverted.
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2731
    """
2732
    takes_options = ['revision', 'no-backup']
2733
    takes_args = ['file*']
2734
2735
    def run(self, revision=None, no_backup=False, file_list=None):
2736
        if file_list is not None:
2737
            if len(file_list) == 0:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2738
                raise errors.BzrCommandError("No files specified")
1457.1.9 by Robert Collins
Change cmd_revert implementation to call workingtree.Revert.
2739
        else:
2740
            file_list = []
1185.50.53 by John Arbash Meinel
[patch] Aaron Bentley: make revert work in a subdirectory.
2741
        
2742
        tree, file_list = tree_files(file_list)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2743
        if revision is None:
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2744
            # FIXME should be tree.last_revision
1558.4.2 by Aaron Bentley
Revert in checkout works properly
2745
            rev_id = tree.last_revision()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2746
        elif len(revision) != 1:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2747
            raise errors.BzrCommandError('bzr revert --revision takes exactly 1 argument')
1185.5.8 by John Arbash Meinel
Fixed bzr revert with the new RevisionSpec code.
2748
        else:
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2749
            rev_id = revision[0].in_history(tree.branch).rev_id
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2750
        pb = ui.ui_factory.nested_progress_bar()
1551.2.25 by Aaron Bentley
Stop using deprecated methods in merge and revert
2751
        try:
2752
            tree.revert(file_list, 
2753
                        tree.branch.repository.revision_tree(rev_id),
2225.1.1 by Aaron Bentley
Added revert change display, with tests
2754
                        not no_backup, pb, report_changes=True)
1551.2.25 by Aaron Bentley
Stop using deprecated methods in merge and revert
2755
        finally:
2756
            pb.finished()
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2757
2758
2759
class cmd_assert_fail(Command):
2760
    """Test reporting of assertion failures"""
2090.2.1 by Martin Pool
Fix some code which relies on assertions and breaks under python -O
2761
    # intended just for use in testing
2762
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2763
    hidden = True
2090.2.1 by Martin Pool
Fix some code which relies on assertions and breaks under python -O
2764
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2765
    def run(self):
2090.2.1 by Martin Pool
Fix some code which relies on assertions and breaks under python -O
2766
        raise AssertionError("always fails")
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2767
2768
2769
class cmd_help(Command):
2770
    """Show help on a command or other topic.
2771
2023.1.1 by ghigo
add topics help
2772
    For a list of all available commands, say 'bzr help commands'.
2773
    """
1993.4.6 by John Arbash Meinel
Cleanup the cmd_help class
2774
    takes_options = [Option('long', 'show help on all commands')]
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2775
    takes_args = ['topic?']
1616.1.15 by Martin Pool
Handle 'bzr ?', etc.
2776
    aliases = ['?', '--help', '-?', '-h']
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2777
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2778
    @display_command
1993.4.6 by John Arbash Meinel
Cleanup the cmd_help class
2779
    def run(self, topic=None, long=False):
2023.1.1 by ghigo
add topics help
2780
        import bzrlib.help
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2781
        if topic is None and long:
2782
            topic = "commands"
2023.1.1 by ghigo
add topics help
2783
        bzrlib.help.help(topic)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2784
2785
2786
class cmd_shell_complete(Command):
2787
    """Show appropriate completions for context.
2788
2023.1.1 by ghigo
add topics help
2789
    For a list of all available commands, say 'bzr shell-complete'.
2790
    """
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2791
    takes_args = ['context?']
2792
    aliases = ['s-c']
2793
    hidden = True
2794
    
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2795
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2796
    def run(self, context=None):
2797
        import shellcomplete
2798
        shellcomplete.shellcomplete(context)
2799
2800
1228 by Martin Pool
- add fetch command as builtin
2801
class cmd_fetch(Command):
2802
    """Copy in history from another branch but don't merge it.
2803
2023.1.1 by ghigo
add topics help
2804
    This is an internal method used for pull and merge.
2805
    """
1228 by Martin Pool
- add fetch command as builtin
2806
    hidden = True
2807
    takes_args = ['from_branch', 'to_branch']
2808
    def run(self, from_branch, to_branch):
2809
        from bzrlib.fetch import Fetcher
1185.16.100 by mbp at sourcefrog
Update fetch command for new Branch constructors.
2810
        from_b = Branch.open(from_branch)
2811
        to_b = Branch.open(to_branch)
1185.65.27 by Robert Collins
Tweak storage towards mergability.
2812
        Fetcher(to_b, from_b)
1228 by Martin Pool
- add fetch command as builtin
2813
2814
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2815
class cmd_missing(Command):
1185.54.3 by Aaron Bentley
Factored out find_unmerged
2816
    """Show unmerged/unpulled revisions between two branches.
1185.54.1 by Aaron Bentley
Import Kinnison's plugin
2817
2023.1.1 by ghigo
add topics help
2818
    OTHER_BRANCH may be local or remote.
2819
    """
1185.54.1 by Aaron Bentley
Import Kinnison's plugin
2820
    takes_args = ['other_branch?']
2821
    takes_options = [Option('reverse', 'Reverse the order of revisions'),
1185.54.12 by Aaron Bentley
Added log formatter selection and show-ids to missing
2822
                     Option('mine-only', 
2823
                            'Display changes in the local branch only'),
2824
                     Option('theirs-only', 
2825
                            'Display changes in the remote branch only'), 
1553.2.3 by Erik Bågfors
cover the missing command with formatters as well
2826
                     'log-format',
1185.54.12 by Aaron Bentley
Added log formatter selection and show-ids to missing
2827
                     'show-ids',
1185.54.19 by Aaron Bentley
All tests pass
2828
                     'verbose'
1185.54.12 by Aaron Bentley
Added log formatter selection and show-ids to missing
2829
                     ]
1816.1.2 by Alexander Belchenko
fix non-ascii messages handling in 'missing' command
2830
    encoding_type = 'replace'
1185.54.1 by Aaron Bentley
Import Kinnison's plugin
2831
1816.1.2 by Alexander Belchenko
fix non-ascii messages handling in 'missing' command
2832
    @display_command
1185.54.1 by Aaron Bentley
Import Kinnison's plugin
2833
    def run(self, other_branch=None, reverse=False, mine_only=False,
1857.1.20 by Aaron Bentley
Strip out all the EnumOption stuff
2834
            theirs_only=False, log_format=None, long=False, short=False, line=False, 
1185.54.19 by Aaron Bentley
All tests pass
2835
            show_ids=False, verbose=False):
2836
        from bzrlib.missing import find_unmerged, iter_log_data
1185.54.12 by Aaron Bentley
Added log formatter selection and show-ids to missing
2837
        from bzrlib.log import log_formatter
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2838
        local_branch = Branch.open_containing(u".")[0]
1185.54.16 by Aaron Bentley
fixed location handling to match old missing
2839
        parent = local_branch.get_parent()
1185.54.1 by Aaron Bentley
Import Kinnison's plugin
2840
        if other_branch is None:
1185.54.16 by Aaron Bentley
fixed location handling to match old missing
2841
            other_branch = parent
2842
            if other_branch is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2843
                raise errors.BzrCommandError("No peer location known or specified.")
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
2844
            display_url = urlutils.unescape_for_display(parent,
2845
                                                        self.outf.encoding)
2846
            print "Using last location: " + display_url
2847
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
2848
        remote_branch = Branch.open(other_branch)
1551.2.46 by abentley
Made bzr missing . work on win32
2849
        if remote_branch.base == local_branch.base:
2850
            remote_branch = local_branch
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
2851
        local_branch.lock_read()
1594.3.6 by Robert Collins
Take out appropriate locks for missing.
2852
        try:
1551.2.46 by abentley
Made bzr missing . work on win32
2853
            remote_branch.lock_read()
1594.3.6 by Robert Collins
Take out appropriate locks for missing.
2854
            try:
2855
                local_extra, remote_extra = find_unmerged(local_branch, remote_branch)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
2856
                if (log_format is None):
2221.4.10 by Aaron Bentley
Implement log options using RegistryOption
2857
                    log_format = log.log_formatter_registry.get_default(
2858
                        local_branch)
2859
                lf = log_format(to_file=self.outf,
2860
                                show_ids=show_ids,
2861
                                show_timezone='original')
1594.3.6 by Robert Collins
Take out appropriate locks for missing.
2862
                if reverse is False:
2863
                    local_extra.reverse()
2864
                    remote_extra.reverse()
2865
                if local_extra and not theirs_only:
2866
                    print "You have %d extra revision(s):" % len(local_extra)
2867
                    for data in iter_log_data(local_extra, local_branch.repository,
2868
                                              verbose):
2869
                        lf.show(*data)
2870
                    printed_local = True
2871
                else:
2872
                    printed_local = False
2873
                if remote_extra and not mine_only:
2874
                    if printed_local is True:
2875
                        print "\n\n"
2876
                    print "You are missing %d revision(s):" % len(remote_extra)
2877
                    for data in iter_log_data(remote_extra, remote_branch.repository, 
2878
                                              verbose):
2879
                        lf.show(*data)
2880
                if not remote_extra and not local_extra:
2881
                    status_code = 0
2882
                    print "Branches are up to date."
2883
                else:
2884
                    status_code = 1
2885
            finally:
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
2886
                remote_branch.unlock()
2887
        finally:
2888
            local_branch.unlock()
2889
        if not status_code and parent is None and other_branch is not None:
2890
            local_branch.lock_write()
2891
            try:
2892
                # handle race conditions - a parent might be set while we run.
2893
                if local_branch.get_parent() is None:
1685.1.19 by John Arbash Meinel
pull/merge/branch/missing should all save the absolute path to the other branch, not the relative one
2894
                    local_branch.set_parent(remote_branch.base)
1594.3.6 by Robert Collins
Take out appropriate locks for missing.
2895
            finally:
2896
                local_branch.unlock()
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
2897
        return status_code
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2898
2899
2900
class cmd_plugins(Command):
2901
    """List plugins"""
2902
    hidden = True
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2903
    @display_command
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2904
    def run(self):
2905
        import bzrlib.plugin
2906
        from inspect import getdoc
1516 by Robert Collins
* bzrlib.plugin.all_plugins has been changed from an attribute to a
2907
        for name, plugin in bzrlib.plugin.all_plugins().items():
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
2908
            if getattr(plugin, '__path__', None) is not None:
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2909
                print plugin.__path__[0]
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
2910
            elif getattr(plugin, '__file__', None) is not None:
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2911
                print plugin.__file__
2912
            else:
1963.2.4 by Robey Pointer
remove usage of hasattr
2913
                print repr(plugin)
1147 by Martin Pool
- split builtin commands into separate module bzrlib.builtins;
2914
                
2915
            d = getdoc(plugin)
2916
            if d:
2917
                print '\t', d.split('\n')[0]
2918
2919
1185.16.24 by Martin Pool
- add and test 'testament' builtin command
2920
class cmd_testament(Command):
2921
    """Show testament (signing-form) of a revision."""
1857.1.12 by Aaron Bentley
Fix a bunch of test cases that assumed --merge-type or log-format
2922
    takes_options = ['revision', 
2923
                     Option('long', help='Produce long-format testament'), 
1551.7.1 by Aaron Bentley
Implement --strict at commandline, fix up strict format
2924
                     Option('strict', help='Produce a strict-format'
2925
                            ' testament')]
1185.16.24 by Martin Pool
- add and test 'testament' builtin command
2926
    takes_args = ['branch?']
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2927
    @display_command
1551.7.1 by Aaron Bentley
Implement --strict at commandline, fix up strict format
2928
    def run(self, branch=u'.', revision=None, long=False, strict=False):
2929
        from bzrlib.testament import Testament, StrictTestament
2930
        if strict is True:
2931
            testament_class = StrictTestament
2932
        else:
2933
            testament_class = Testament
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2934
        b = WorkingTree.open_containing(branch)[0].branch
1185.16.24 by Martin Pool
- add and test 'testament' builtin command
2935
        b.lock_read()
2936
        try:
2937
            if revision is None:
2938
                rev_id = b.last_revision()
2939
            else:
2940
                rev_id = revision[0].in_history(b).rev_id
1551.7.1 by Aaron Bentley
Implement --strict at commandline, fix up strict format
2941
            t = testament_class.from_revision(b.repository, rev_id)
1185.16.24 by Martin Pool
- add and test 'testament' builtin command
2942
            if long:
2943
                sys.stdout.writelines(t.as_text_lines())
2944
            else:
2945
                sys.stdout.write(t.as_short_text())
2946
        finally:
2947
            b.unlock()
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2948
2949
2950
class cmd_annotate(Command):
2951
    """Show the origin of each line in a file.
2952
1185.16.53 by Martin Pool
- annotate improvements from Goffreddo, with extra bug fixes and tests
2953
    This prints out the given file with an annotation on the left side
2954
    indicating which revision, author and date introduced the change.
2955
2956
    If the origin is the same for a run of consecutive lines, it is 
2957
    shown only at the top, unless the --all option is given.
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2958
    """
2959
    # TODO: annotate directories; showing when each file was last changed
1185.16.53 by Martin Pool
- annotate improvements from Goffreddo, with extra bug fixes and tests
2960
    # TODO: if the working copy is modified, show annotations on that 
2961
    #       with new uncommitted lines marked
1733.2.8 by Michael Ellerman
Add CVS compatible aliases for checkout and annotate, from fullermd.
2962
    aliases = ['ann', 'blame', 'praise']
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2963
    takes_args = ['filename']
1185.16.53 by Martin Pool
- annotate improvements from Goffreddo, with extra bug fixes and tests
2964
    takes_options = [Option('all', help='show annotations on all lines'),
2965
                     Option('long', help='show date in annotations'),
2182.3.1 by John Arbash Meinel
Annotate now shows dotted revnos instead of plain revnos.
2966
                     'revision',
2967
                     'show-ids',
1185.16.53 by Martin Pool
- annotate improvements from Goffreddo, with extra bug fixes and tests
2968
                     ]
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2969
1185.12.56 by Aaron Bentley
Prevented display commands from printing broken pipe errors
2970
    @display_command
2182.3.1 by John Arbash Meinel
Annotate now shows dotted revnos instead of plain revnos.
2971
    def run(self, filename, all=False, long=False, revision=None,
2972
            show_ids=False):
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2973
        from bzrlib.annotate import annotate_file
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2974
        tree, relpath = WorkingTree.open_containing(filename)
2975
        branch = tree.branch
2976
        branch.lock_read()
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2977
        try:
1694.2.6 by Martin Pool
[merge] bzr.dev
2978
            if revision is None:
1558.14.5 by Aaron Bentley
Changed rev_id to revision_id in cmd_annotate
2979
                revision_id = branch.last_revision()
1694.2.6 by Martin Pool
[merge] bzr.dev
2980
            elif len(revision) != 1:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
2981
                raise errors.BzrCommandError('bzr annotate --revision takes exactly 1 argument')
1694.2.6 by Martin Pool
[merge] bzr.dev
2982
            else:
1558.14.5 by Aaron Bentley
Changed rev_id to revision_id in cmd_annotate
2983
                revision_id = revision[0].in_history(branch).rev_id
2255.7.39 by Robert Collins
Remove gratuitous references to inventory.path2id from builtins.py, allowing more commands to work on dirstate trees.
2984
            file_id = tree.path2id(relpath)
1558.14.5 by Aaron Bentley
Changed rev_id to revision_id in cmd_annotate
2985
            tree = branch.repository.revision_tree(revision_id)
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2986
            file_version = tree.inventory[file_id].revision
2182.3.1 by John Arbash Meinel
Annotate now shows dotted revnos instead of plain revnos.
2987
            annotate_file(branch, file_version, file_id, long, all, sys.stdout,
2988
                          show_ids=show_ids)
1185.16.32 by Martin Pool
- add a basic annotate built-in command
2989
        finally:
1508.1.4 by Robert Collins
Convert most of the front ends commands to use WorkingTree.open_containing
2990
            branch.unlock()
1185.16.33 by Martin Pool
- move 'conflict' and 'resolved' from shipped plugin to regular builtins
2991
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
2992
2993
class cmd_re_sign(Command):
2994
    """Create a digital signature for an existing revision."""
2995
    # TODO be able to replace existing ones.
2996
2997
    hidden = True # is this right ?
1185.78.1 by John Arbash Meinel
Updating bzr re-sign to allow multiple arguments, and updating tests
2998
    takes_args = ['revision_id*']
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
2999
    takes_options = ['revision']
3000
    
1185.78.1 by John Arbash Meinel
Updating bzr re-sign to allow multiple arguments, and updating tests
3001
    def run(self, revision_id_list=None, revision=None):
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
3002
        import bzrlib.gpg as gpg
1185.78.1 by John Arbash Meinel
Updating bzr re-sign to allow multiple arguments, and updating tests
3003
        if revision_id_list is not None and revision is not None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3004
            raise errors.BzrCommandError('You can only supply one of revision_id or --revision')
1185.78.1 by John Arbash Meinel
Updating bzr re-sign to allow multiple arguments, and updating tests
3005
        if revision_id_list is None and revision is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3006
            raise errors.BzrCommandError('You must supply either --revision or a revision_id')
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
3007
        b = WorkingTree.open_containing(u'.')[0].branch
1770.2.9 by Aaron Bentley
Add Branch.get_config, update BranchConfig() callers
3008
        gpg_strategy = gpg.GPGStrategy(b.get_config())
1185.78.1 by John Arbash Meinel
Updating bzr re-sign to allow multiple arguments, and updating tests
3009
        if revision_id_list is not None:
3010
            for revision_id in revision_id_list:
3011
                b.repository.sign_revision(revision_id, gpg_strategy)
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
3012
        elif revision is not None:
1483 by Robert Collins
BUGFIX: re-sign should accept ranges
3013
            if len(revision) == 1:
3014
                revno, rev_id = revision[0].in_history(b)
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
3015
                b.repository.sign_revision(rev_id, gpg_strategy)
1483 by Robert Collins
BUGFIX: re-sign should accept ranges
3016
            elif len(revision) == 2:
3017
                # are they both on rh- if so we can walk between them
3018
                # might be nice to have a range helper for arbitrary
3019
                # revision paths. hmm.
3020
                from_revno, from_revid = revision[0].in_history(b)
3021
                to_revno, to_revid = revision[1].in_history(b)
3022
                if to_revid is None:
3023
                    to_revno = b.revno()
3024
                if from_revno is None or to_revno is None:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3025
                    raise errors.BzrCommandError('Cannot sign a range of non-revision-history revisions')
1483 by Robert Collins
BUGFIX: re-sign should accept ranges
3026
                for revno in range(from_revno, to_revno + 1):
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
3027
                    b.repository.sign_revision(b.get_rev_id(revno), 
3028
                                               gpg_strategy)
1483 by Robert Collins
BUGFIX: re-sign should accept ranges
3029
            else:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3030
                raise errors.BzrCommandError('Please supply either one revision, or a range.')
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
3031
1505.1.22 by John Arbash Meinel
Some small cleanup and discussion in preparation for modifying commit, pull, and merge
3032
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3033
class cmd_bind(Command):
2270.1.2 by John Arbash Meinel
Tweak the help text for bind/unbind according to Robert's suggestions.
3034
    """Convert the current branch into a checkout of the supplied branch.
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3035
2270.1.2 by John Arbash Meinel
Tweak the help text for bind/unbind according to Robert's suggestions.
3036
    Once converted into a checkout, commits must succeed on the master branch
3037
    before they will be applied to the local branch.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
3038
3039
    See "help checkouts" for more information on checkouts.
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3040
    """
3041
2230.3.31 by Aaron Bentley
Implement re-binding previously-bound branches
3042
    takes_args = ['location?']
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3043
    takes_options = []
3044
3045
    def run(self, location=None):
1505.1.22 by John Arbash Meinel
Some small cleanup and discussion in preparation for modifying commit, pull, and merge
3046
        b, relpath = Branch.open_containing(u'.')
2230.3.31 by Aaron Bentley
Implement re-binding previously-bound branches
3047
        if location is None:
3048
            try:
3049
                location = b.get_old_bound_location()
3050
            except errors.UpgradeRequired:
3051
                raise errors.BzrCommandError('No location supplied.  '
3052
                    'This format does not remember old locations.')
3053
            else:
3054
                if location is None:
2230.3.45 by Aaron Bentley
Change error message (mpool)
3055
                    raise errors.BzrCommandError('No location supplied and no '
3056
                        'previous location known')
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3057
        b_other = Branch.open(location)
1505.1.3 by John Arbash Meinel
(broken) Adding more tests, and some functionality
3058
        try:
3059
            b.bind(b_other)
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3060
        except errors.DivergedBranches:
3061
            raise errors.BzrCommandError('These branches have diverged.'
3062
                                         ' Try merging, and then bind again.')
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3063
1505.1.22 by John Arbash Meinel
Some small cleanup and discussion in preparation for modifying commit, pull, and merge
3064
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3065
class cmd_unbind(Command):
2270.1.2 by John Arbash Meinel
Tweak the help text for bind/unbind according to Robert's suggestions.
3066
    """Convert the current checkout into a regular branch.
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3067
2270.1.2 by John Arbash Meinel
Tweak the help text for bind/unbind according to Robert's suggestions.
3068
    After unbinding, the local branch is considered independent and subsequent
3069
    commits will be local only.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
3070
3071
    See "help checkouts" for more information on checkouts.
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
3072
    """
3073
3074
    takes_args = []
3075
    takes_options = []
3076
3077
    def run(self):
1505.1.22 by John Arbash Meinel
Some small cleanup and discussion in preparation for modifying commit, pull, and merge
3078
        b, relpath = Branch.open_containing(u'.')
3079
        if not b.unbind():
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3080
            raise errors.BzrCommandError('Local branch is not bound')
1505.1.22 by John Arbash Meinel
Some small cleanup and discussion in preparation for modifying commit, pull, and merge
3081
1442.1.59 by Robert Collins
Add re-sign command to generate a digital signature on a single revision.
3082
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
3083
class cmd_uncommit(Command):
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3084
    """Remove the last committed revision.
3085
3086
    --verbose will print out what is being removed.
3087
    --dry-run will go through all the motions, but not actually
3088
    remove anything.
3089
    
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
3090
    In the future, uncommit will create a revision bundle, which can then
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3091
    be re-applied.
1553.5.34 by Martin Pool
Stub lock-breaking command
3092
    """
1185.62.11 by John Arbash Meinel
Added TODO for bzr uncommit to remove unreferenced information.
3093
1553.5.34 by Martin Pool
Stub lock-breaking command
3094
    # TODO: jam 20060108 Add an option to allow uncommit to remove
1759.2.1 by Jelmer Vernooij
Fix some types (found using aspell).
3095
    # unreferenced information in 'branch-as-repository' branches.
1553.5.34 by Martin Pool
Stub lock-breaking command
3096
    # TODO: jam 20060108 Add the ability for uncommit to remove unreferenced
3097
    # information in shared branches as well.
1185.62.10 by John Arbash Meinel
Removed --all from bzr uncommit, it was broken anyway.
3098
    takes_options = ['verbose', 'revision',
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3099
                    Option('dry-run', help='Don\'t actually make changes'),
3100
                    Option('force', help='Say yes to all questions.')]
3101
    takes_args = ['location?']
3102
    aliases = []
3103
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
3104
    def run(self, location=None,
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3105
            dry_run=False, verbose=False,
3106
            revision=None, force=False):
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
3107
        from bzrlib.log import log_formatter, show_log
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3108
        import sys
3109
        from bzrlib.uncommit import uncommit
3110
3111
        if location is None:
1185.33.66 by Martin Pool
[patch] use unicode literals for all hardcoded paths (Alexander Belchenko)
3112
            location = u'.'
1558.1.12 by Aaron Bentley
Got uncommit working properly with checkouts
3113
        control, relpath = bzrdir.BzrDir.open_containing(location)
3114
        try:
3115
            tree = control.open_workingtree()
1558.9.1 by Aaron Bentley
Fix uncommit to handle bound branches, and to do locking
3116
            b = tree.branch
1558.1.12 by Aaron Bentley
Got uncommit working properly with checkouts
3117
        except (errors.NoWorkingTree, errors.NotLocalUrl):
3118
            tree = None
1558.9.1 by Aaron Bentley
Fix uncommit to handle bound branches, and to do locking
3119
            b = control.open_branch()
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3120
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
3121
        rev_id = None
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3122
        if revision is None:
3123
            revno = b.revno()
3124
        else:
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
3125
            # 'bzr uncommit -r 10' actually means uncommit
3126
            # so that the final tree is at revno 10.
3127
            # but bzrlib.uncommit.uncommit() actually uncommits
3128
            # the revisions that are supplied.
3129
            # So we need to offset it by one
3130
            revno = revision[0].in_history(b).revno+1
3131
3132
        if revno <= b.revno():
3133
            rev_id = b.get_rev_id(revno)
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3134
        if rev_id is None:
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
3135
            self.outf.write('No revisions to uncommit.\n')
3136
            return 1
3137
3138
        lf = log_formatter('short',
3139
                           to_file=self.outf,
3140
                           show_timezone='original')
3141
3142
        show_log(b,
3143
                 lf,
3144
                 verbose=False,
3145
                 direction='forward',
3146
                 start_revision=revno,
3147
                 end_revision=b.revno())
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3148
3149
        if dry_run:
3150
            print 'Dry-run, pretending to remove the above revisions.'
3151
            if not force:
3152
                val = raw_input('Press <enter> to continue')
3153
        else:
3154
            print 'The above revision(s) will be removed.'
3155
            if not force:
3156
                val = raw_input('Are you sure [y/N]? ')
3157
                if val.lower() not in ('y', 'yes'):
3158
                    print 'Canceled'
3159
                    return 0
3160
1558.1.12 by Aaron Bentley
Got uncommit working properly with checkouts
3161
        uncommit(b, tree=tree, dry_run=dry_run, verbose=verbose,
1185.31.24 by John Arbash Meinel
[merge] Added the uncommit plugin
3162
                revno=revno)
3163
3164
1553.5.34 by Martin Pool
Stub lock-breaking command
3165
class cmd_break_lock(Command):
3166
    """Break a dead lock on a repository, branch or working directory.
3167
1553.5.35 by Martin Pool
Start break-lock --show
3168
    CAUTION: Locks should only be broken when you are sure that the process
1553.5.34 by Martin Pool
Stub lock-breaking command
3169
    holding the lock has been stopped.
1687.1.12 by Robert Collins
Hook in the full break-lock ui.
3170
3171
    You can get information on what locks are open via the 'bzr info' command.
1553.5.35 by Martin Pool
Start break-lock --show
3172
    
3173
    example:
1687.1.12 by Robert Collins
Hook in the full break-lock ui.
3174
        bzr break-lock
1553.5.34 by Martin Pool
Stub lock-breaking command
3175
    """
1687.1.12 by Robert Collins
Hook in the full break-lock ui.
3176
    takes_args = ['location?']
3177
3178
    def run(self, location=None, show=False):
3179
        if location is None:
3180
            location = u'.'
3181
        control, relpath = bzrdir.BzrDir.open_containing(location)
1687.1.17 by Robert Collins
Test break lock on old format branches.
3182
        try:
3183
            control.break_lock()
3184
        except NotImplementedError:
3185
            pass
1687.1.12 by Robert Collins
Hook in the full break-lock ui.
3186
        
1553.5.35 by Martin Pool
Start break-lock --show
3187
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
3188
class cmd_wait_until_signalled(Command):
3189
    """Test helper for test_start_and_stop_bzr_subprocess_send_signal.
3190
3191
    This just prints a line to signal when it is ready, then blocks on stdin.
3192
    """
3193
3194
    hidden = True
3195
3196
    def run(self):
1910.17.6 by Andrew Bennetts
Use sys.stdout consistently, rather than mixed with print.
3197
        sys.stdout.write("running\n")
1910.17.2 by Andrew Bennetts
Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue
3198
        sys.stdout.flush()
3199
        sys.stdin.readline()
3200
1553.5.35 by Martin Pool
Start break-lock --show
3201
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3202
class cmd_serve(Command):
2020.1.1 by Robert Collins
Add readonly support to the smart server, enabled by default via `bzr server`.
3203
    """Run the bzr server."""
3204
3205
    aliases = ['server']
3206
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3207
    takes_options = [
3208
        Option('inet',
3209
               help='serve on stdin/out for use from inetd or sshd'),
3210
        Option('port',
1910.19.7 by Andrew Bennetts
Allow specifying the host/interface to bzr serve, and use the new test
3211
               help='listen for connections on nominated port of the form '
3212
                    '[hostname:]portnumber. Passing 0 as the port number will '
2298.4.1 by Andrew Bennetts
Give bzr:// a default port of 4155.
3213
                    'result in a dynamically allocated port. Default port is '
3214
                    '4155.',
1910.19.7 by Andrew Bennetts
Allow specifying the host/interface to bzr serve, and use the new test
3215
               type=str),
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3216
        Option('directory',
3217
               help='serve contents of directory',
3218
               type=unicode),
2020.1.1 by Robert Collins
Add readonly support to the smart server, enabled by default via `bzr server`.
3219
        Option('allow-writes',
3220
               help='By default the server is a readonly server. Supplying '
3221
                    '--allow-writes enables write access to the contents of '
3222
                    'the served directory and below. '
3223
                ),
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3224
        ]
3225
2020.1.1 by Robert Collins
Add readonly support to the smart server, enabled by default via `bzr server`.
3226
    def run(self, port=None, inet=False, directory=None, allow_writes=False):
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3227
        from bzrlib.transport import smart
3228
        from bzrlib.transport import get_transport
3229
        if directory is None:
3230
            directory = os.getcwd()
2044.2.1 by Lukáš Lalinský
Use urlutils.local_path_to_url to get an URL from the directory path.
3231
        url = urlutils.local_path_to_url(directory)
2020.1.1 by Robert Collins
Add readonly support to the smart server, enabled by default via `bzr server`.
3232
        if not allow_writes:
3233
            url = 'readonly+' + url
3234
        t = get_transport(url)
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3235
        if inet:
2018.2.14 by Andrew Bennetts
Seperate SmartServer{Pipe,Socket}StreamMedium out of SmartServerStreamMedium. Use recv to make the socket server medium better.
3236
            server = smart.SmartServerPipeStreamMedium(sys.stdin, sys.stdout, t)
2298.4.1 by Andrew Bennetts
Give bzr:// a default port of 4155.
3237
        else:
3238
            if port is None:
2298.4.3 by Andrew Bennetts
Use a BZR_DEFAULT_PORT constant instead of bare 4155.
3239
                port = smart.BZR_DEFAULT_PORT
1910.19.7 by Andrew Bennetts
Allow specifying the host/interface to bzr serve, and use the new test
3240
                host = '127.0.0.1'
2298.4.1 by Andrew Bennetts
Give bzr:// a default port of 4155.
3241
            else:
3242
                if ':' in port:
3243
                    host, port = port.split(':')
3244
                else:
3245
                    host = '127.0.0.1'
3246
                port = int(port)
3247
            server = smart.SmartTCPServer(t, host=host, port=port)
1910.19.7 by Andrew Bennetts
Allow specifying the host/interface to bzr serve, and use the new test
3248
            print 'listening on port: ', server.port
3249
            sys.stdout.flush()
1910.19.1 by Andrew Bennetts
Support bzr:// urls to work with the new RPC-based transport which will be used
3250
        server.serve()
3251
1731.2.7 by Aaron Bentley
Add join command
3252
class cmd_join(Command):
3253
    """Combine a subtree into its containing tree.
3254
    
2338.3.1 by Aaron Bentley
Hide nested-tree commands and improve their docs
3255
    This command is for experimental use only.  It requires the target tree
3256
    to be in dirstate-with-subtree format, which cannot be converted into
3257
    earlier formats.
3258
3259
    The TREE argument should be an independent tree, inside another tree, but
3260
    not part of it.  (Such trees can be produced by "bzr split", but also by
3261
    running "bzr branch" with the target inside a tree.)
3262
3263
    The result is a combined tree, with the subtree no longer an independant
3264
    part.  This is marked as a merge of the subtree into the containing tree,
3265
    and all history is preserved.
3266
3267
    If --reference is specified, the subtree retains its independence.  It can
3268
    be branched by itself, and can be part of multiple projects at the same
3269
    time.  But operations performed in the containing tree, such as commit
3270
    and merge, will recurse into the subtree.
1731.2.7 by Aaron Bentley
Add join command
3271
    """
3272
3273
    takes_args = ['tree']
2100.3.11 by Aaron Bentley
Add join --reference support
3274
    takes_options = [Option('reference', 'join by reference')]
2338.3.1 by Aaron Bentley
Hide nested-tree commands and improve their docs
3275
    hidden = True
1731.2.7 by Aaron Bentley
Add join command
3276
2100.3.11 by Aaron Bentley
Add join --reference support
3277
    def run(self, tree, reference=False):
1731.2.7 by Aaron Bentley
Add join command
3278
        sub_tree = WorkingTree.open(tree)
3279
        parent_dir = osutils.dirname(sub_tree.basedir)
3280
        containing_tree = WorkingTree.open_containing(parent_dir)[0]
2255.2.235 by Martin Pool
Add blackbox test that join gives clean error when the repository doesn't support rich roots
3281
        repo = containing_tree.branch.repository
3282
        if not repo.supports_rich_root():
3283
            raise errors.BzrCommandError(
3284
                "Can't join trees because %s doesn't support rich root data.\n"
3285
                "You can use bzr upgrade on the repository."
3286
                % (repo,))
2100.3.11 by Aaron Bentley
Add join --reference support
3287
        if reference:
2255.2.219 by Martin Pool
fix unbound local error in cmd_join
3288
            try:
2100.3.11 by Aaron Bentley
Add join --reference support
3289
                containing_tree.add_reference(sub_tree)
2255.2.219 by Martin Pool
fix unbound local error in cmd_join
3290
            except errors.BadReferenceTarget, e:
2255.2.235 by Martin Pool
Add blackbox test that join gives clean error when the repository doesn't support rich roots
3291
                # XXX: Would be better to just raise a nicely printable
3292
                # exception from the real origin.  Also below.  mbp 20070306
2255.2.219 by Martin Pool
fix unbound local error in cmd_join
3293
                raise errors.BzrCommandError("Cannot join %s.  %s" %
2100.3.11 by Aaron Bentley
Add join --reference support
3294
                                             (tree, e.reason))
3295
        else:
3296
            try:
3297
                containing_tree.subsume(sub_tree)
3298
            except errors.BadSubsumeSource, e:
3299
                raise errors.BzrCommandError("Cannot join %s.  %s" % 
3300
                                             (tree, e.reason))
1553.5.35 by Martin Pool
Start break-lock --show
3301
1731.2.22 by Aaron Bentley
Initial work on split command
3302
3303
class cmd_split(Command):
3304
    """Split a tree into two trees.
2338.3.1 by Aaron Bentley
Hide nested-tree commands and improve their docs
3305
3306
    This command is for experimental use only.  It requires the target tree
3307
    to be in dirstate-with-subtree format, which cannot be converted into
3308
    earlier formats.
3309
3310
    The TREE argument should be a subdirectory of a working tree.  That
3311
    subdirectory will be converted into an independent tree, with its own
3312
    branch.  Commits in the top-level tree will not apply to the new subtree.
3313
    If you want that behavior, do "bzr join --reference TREE".
3314
3315
    To undo this operation, do "bzr join TREE".
1731.2.22 by Aaron Bentley
Initial work on split command
3316
    """
3317
3318
    takes_args = ['tree']
3319
2338.3.1 by Aaron Bentley
Hide nested-tree commands and improve their docs
3320
    hidden = True
3321
1731.2.22 by Aaron Bentley
Initial work on split command
3322
    def run(self, tree):
3323
        containing_tree, subdir = WorkingTree.open_containing(tree)
3324
        sub_id = containing_tree.path2id(subdir)
3325
        if sub_id is None:
3326
            raise errors.NotVersionedError(subdir)
1731.2.23 by Aaron Bentley
Throw user-friendly error splitting in shared repo with wrong format
3327
        try:
3328
            containing_tree.extract(sub_id)
3329
        except errors.RootNotRich:
3330
            raise errors.UpgradeRequired(containing_tree.branch.base)
1731.2.22 by Aaron Bentley
Initial work on split command
3331
3332
3333
1551.12.8 by Aaron Bentley
Add merge-directive command
3334
class cmd_merge_directive(Command):
1551.12.32 by Aaron Bentley
Improve merge directive help
3335
    """Generate a merge directive for auto-merge tools.
3336
3337
    A directive requests a merge to be performed, and also provides all the
3338
    information necessary to do so.  This means it must either include a
3339
    revision bundle, or the location of a branch containing the desired
3340
    revision.
3341
3342
    A submit branch (the location to merge into) must be supplied the first
3343
    time the command is issued.  After it has been supplied once, it will
3344
    be remembered as the default.
3345
3346
    A public branch is optional if a revision bundle is supplied, but required
3347
    if --diff or --plain is specified.  It will be remembered as the default
3348
    after the first use.
3349
    """
1551.12.20 by Aaron Bentley
Pull directive registry into command class
3350
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3351
    takes_args = ['submit_branch?', 'public_branch?']
3352
1551.12.43 by Aaron Bentley
Misc changes from review
3353
    takes_options = [
3354
        RegistryOption.from_kwargs('patch-type',
3355
            'The type of patch to include in the directive',
3356
            title='Patch type', value_switches=True, enum_switch=False,
3357
            bundle='Bazaar revision bundle (default)',
3358
            diff='Normal unified diff',
3359
            plain='No patch, just directive'),
1551.12.26 by Aaron Bentley
Get email working, with optional message
3360
        Option('sign', help='GPG-sign the directive'), 'revision',
3361
        Option('mail-to', type=str,
1551.12.27 by Aaron Bentley
support custom message everywhere
3362
            help='Instead of printing the directive, email to this address'),
3363
        Option('message', type=str, short_name='m',
3364
            help='Message to use when committing this merge')
3365
        ]
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3366
1551.12.16 by Aaron Bentley
Enable signing merge directives
3367
    def run(self, submit_branch=None, public_branch=None, patch_type='bundle',
1551.12.27 by Aaron Bentley
support custom message everywhere
3368
            sign=False, revision=None, mail_to=None, message=None):
1551.12.24 by Aaron Bentley
Add RegistryOption.from_swargs to simplify simple registry options
3369
        if patch_type == 'plain':
3370
            patch_type = None
1551.12.8 by Aaron Bentley
Add merge-directive command
3371
        branch = Branch.open('.')
1551.12.44 by Aaron Bentley
Add (set|get)_public_branch
3372
        stored_submit_branch = branch.get_submit_branch()
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3373
        if submit_branch is None:
1551.12.44 by Aaron Bentley
Add (set|get)_public_branch
3374
            submit_branch = stored_submit_branch
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3375
        else:
1551.12.44 by Aaron Bentley
Add (set|get)_public_branch
3376
            if stored_submit_branch is None:
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3377
                branch.set_submit_branch(submit_branch)
3378
        if submit_branch is None:
3379
            submit_branch = branch.get_parent()
3380
        if submit_branch is None:
3381
            raise errors.BzrCommandError('No submit branch specified or known')
1551.12.44 by Aaron Bentley
Add (set|get)_public_branch
3382
3383
        stored_public_branch = branch.get_public_branch()
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3384
        if public_branch is None:
1551.12.44 by Aaron Bentley
Add (set|get)_public_branch
3385
            public_branch = stored_public_branch
3386
        elif stored_public_branch is None:
3387
            branch.set_public_branch(public_branch)
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3388
        if patch_type != "bundle" and public_branch is None:
1551.12.24 by Aaron Bentley
Add RegistryOption.from_swargs to simplify simple registry options
3389
            raise errors.BzrCommandError('No public branch specified or'
3390
                                         ' known')
1551.12.17 by Aaron Bentley
add revision selection to mergedirective
3391
        if revision is not None:
3392
            if len(revision) != 1:
3393
                raise errors.BzrCommandError('bzr merge-directive takes '
1551.12.24 by Aaron Bentley
Add RegistryOption.from_swargs to simplify simple registry options
3394
                    'exactly one revision identifier')
1551.12.17 by Aaron Bentley
add revision selection to mergedirective
3395
            else:
3396
                revision_id = revision[0].in_history(branch).rev_id
3397
        else:
3398
            revision_id = branch.last_revision()
1551.12.8 by Aaron Bentley
Add merge-directive command
3399
        directive = merge_directive.MergeDirective.from_objects(
1551.12.17 by Aaron Bentley
add revision selection to mergedirective
3400
            branch.repository, revision_id, time.time(),
1551.12.8 by Aaron Bentley
Add merge-directive command
3401
            osutils.local_time_offset(), submit_branch,
1551.12.27 by Aaron Bentley
support custom message everywhere
3402
            public_branch=public_branch, patch_type=patch_type,
3403
            message=message)
1551.12.26 by Aaron Bentley
Get email working, with optional message
3404
        if mail_to is None:
3405
            if sign:
3406
                self.outf.write(directive.to_signed(branch))
3407
            else:
3408
                self.outf.writelines(directive.to_lines())
1551.12.16 by Aaron Bentley
Enable signing merge directives
3409
        else:
1551.12.26 by Aaron Bentley
Get email working, with optional message
3410
            message = directive.to_email(mail_to, branch, sign)
3411
            s = smtplib.SMTP()
3412
            server = branch.get_config().get_user_option('smtp_server')
3413
            if not server:
3414
                server = 'localhost'
2358.1.1 by Vincent Ladeuil
Fix bug #92195.
3415
            s.connect(server)
1551.12.26 by Aaron Bentley
Get email working, with optional message
3416
            s.sendmail(message['From'], message['To'], message.as_string())
1551.12.8 by Aaron Bentley
Add merge-directive command
3417
1551.12.14 by Aaron Bentley
Get merge-directive command basically working
3418
2220.2.2 by Martin Pool
Add tag command and basic implementation
3419
class cmd_tag(Command):
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
3420
    """Create a tag naming a revision.
3421
    
3422
    Tags give human-meaningful names to revisions.  Commands that take a -r
3423
    (--revision) option can be given -rtag:X, where X is any previously
3424
    created tag.
3425
2220.2.41 by Martin Pool
Fix tag help (fullermd)
3426
    Tags are stored in the branch.  Tags are copied from one branch to another
3427
    along when you branch, push, pull or merge.
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3428
3429
    It is an error to give a tag name that already exists unless you pass 
3430
    --force, in which case the tag is moved to point to the new revision.
2220.2.8 by Martin Pool
Add -d option to push, pull, merge commands.
3431
    """
2220.2.2 by Martin Pool
Add tag command and basic implementation
3432
3433
    takes_args = ['tag_name']
3434
    takes_options = [
2220.2.21 by Martin Pool
Add tag --delete command and implementation
3435
        Option('delete',
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3436
            help='Delete this tag rather than placing it.',
3437
            ),
3438
        Option('directory',
3439
            help='Branch in which to place the tag.',
3440
            short_name='d',
3441
            type=unicode,
3442
            ),
3443
        Option('force',
3444
            help='Replace existing tags',
2220.2.21 by Martin Pool
Add tag --delete command and implementation
3445
            ),
2220.2.6 by Martin Pool
Add tag -r option
3446
        'revision',
2220.2.2 by Martin Pool
Add tag command and basic implementation
3447
        ]
3448
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3449
    def run(self, tag_name,
3450
            delete=None,
3451
            directory='.',
3452
            force=None,
2220.2.21 by Martin Pool
Add tag --delete command and implementation
3453
            revision=None,
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3454
            ):
2220.2.2 by Martin Pool
Add tag command and basic implementation
3455
        branch, relpath = Branch.open_containing(directory)
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3456
        branch.lock_write()
3457
        try:
3458
            if delete:
3459
                branch.tags.delete_tag(tag_name)
3460
                self.outf.write('Deleted tag %s.\n' % tag_name)
2220.2.21 by Martin Pool
Add tag --delete command and implementation
3461
            else:
2220.2.42 by Martin Pool
Tag command refuses to replace existing tags unless you force it.
3462
                if revision:
3463
                    if len(revision) != 1:
3464
                        raise errors.BzrCommandError(
3465
                            "Tags can only be placed on a single revision, "
3466
                            "not on a range")
3467
                    revision_id = revision[0].in_history(branch).rev_id
3468
                else:
3469
                    revision_id = branch.last_revision()
3470
                if (not force) and branch.tags.has_tag(tag_name):
3471
                    raise errors.TagAlreadyExists(tag_name)
3472
                branch.tags.set_tag(tag_name, revision_id)
3473
                self.outf.write('Created tag %s.\n' % tag_name)
3474
        finally:
3475
            branch.unlock()
2220.2.2 by Martin Pool
Add tag command and basic implementation
3476
3477
2220.2.24 by Martin Pool
Add tags command
3478
class cmd_tags(Command):
3479
    """List tags.
3480
3481
    This tag shows a table of tag names and the revisions they reference.
3482
    """
3483
3484
    takes_options = [
3485
        Option('directory',
3486
            help='Branch whose tags should be displayed',
3487
            short_name='d',
3488
            type=unicode,
3489
            ),
3490
    ]
3491
3492
    @display_command
3493
    def run(self,
3494
            directory='.',
3495
            ):
3496
        branch, relpath = Branch.open_containing(directory)
3497
        for tag_name, target in sorted(branch.tags.get_tag_dict().items()):
2220.2.45 by Martin Pool
Make tags output less wide
3498
            self.outf.write('%-20s %s\n' % (tag_name, target))
2220.2.24 by Martin Pool
Add tags command
3499
3500
1553.5.35 by Martin Pool
Start break-lock --show
3501
# command-line interpretation helper for merge-related commands
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
3502
def _merge_helper(other_revision, base_revision,
3503
                  check_clean=True, ignore_zero=False,
3504
                  this_dir=None, backup_files=False,
1996.3.7 by John Arbash Meinel
lazy import versionedfile, late-load bzrlib.merge
3505
                  merge_type=None,
1996.3.1 by John Arbash Meinel
Demandloading builtins.py drops our load time from 350ms to 291ms
3506
                  file_list=None, show_base=False, reprocess=False,
2149.2.1 by Jan Hudec
Option --pull for merge command.
3507
                  pull=False,
1551.11.9 by Aaron Bentley
Apply change reporting to merge
3508
                  pb=DummyProgress(),
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
3509
                  change_reporter=None,
3510
                  other_rev_id=None):
1545.2.9 by Aaron Bentley
Moved merge.merge to builtins
3511
    """Merge changes into a tree.
3512
3513
    base_revision
3514
        list(path, revno) Base for three-way merge.  
3515
        If [None, None] then a base will be automatically determined.
3516
    other_revision
3517
        list(path, revno) Other revision for three-way merge.
3518
    this_dir
3519
        Directory to merge changes into; '.' by default.
3520
    check_clean
3521
        If true, this_dir must have no uncommitted changes before the
3522
        merge begins.
3523
    ignore_zero - If true, suppress the "zero conflicts" message when 
3524
        there are no conflicts; should be set when doing something we expect
3525
        to complete perfectly.
3526
    file_list - If supplied, merge only changes to selected files.
3527
3528
    All available ancestors of other_revision and base_revision are
3529
    automatically pulled into the branch.
3530
3531
    The revno may be -1 to indicate the last revision on the branch, which is
3532
    the typical case.
3533
3534
    This function is intended for use from the command line; programmatic
3535
    clients might prefer to call merge.merge_inner(), which has less magic 
3536
    behavior.
3537
    """
1996.3.7 by John Arbash Meinel
lazy import versionedfile, late-load bzrlib.merge
3538
    # Loading it late, so that we don't always have to import bzrlib.merge
3539
    if merge_type is None:
3540
        merge_type = _mod_merge.Merge3Merger
1545.2.9 by Aaron Bentley
Moved merge.merge to builtins
3541
    if this_dir is None:
3542
        this_dir = u'.'
1534.4.28 by Robert Collins
first cut at merge from integration.
3543
    this_tree = WorkingTree.open_containing(this_dir)[0]
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
3544
    if show_base and not merge_type is _mod_merge.Merge3Merger:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3545
        raise errors.BzrCommandError("Show-base is not supported for this merge"
3546
                                     " type. %s" % merge_type)
1551.6.8 by Aaron Bentley
Implemented reprocess for weave
3547
    if reprocess and not merge_type.supports_reprocess:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3548
        raise errors.BzrCommandError("Conflict reduction is not supported for merge"
3549
                                     " type %s." % merge_type)
1545.2.9 by Aaron Bentley
Moved merge.merge to builtins
3550
    if reprocess and show_base:
1996.3.34 by John Arbash Meinel
Update builtins to use errors.foo. Now errors can be avoided entirely for a bzr rocks run
3551
        raise errors.BzrCommandError("Cannot do conflict reduction and show base.")
2255.7.12 by John Arbash Meinel
Some comments on merge code, fix merge tests that
3552
    # TODO: jam 20070226 We should really lock these trees earlier. However, we
3553
    #       only want to take out a lock_tree_write() if we don't have to pull
3554
    #       any ancestry. But merge might fetch ancestry in the middle, in
3555
    #       which case we would need a lock_write().
3556
    #       Because we cannot upgrade locks, for now we live with the fact that
3557
    #       the tree will be locked multiple times during a merge. (Maybe
3558
    #       read-only some of the time, but it means things will get read
3559
    #       multiple times.)
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
3560
    try:
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
3561
        merger = _mod_merge.Merger(this_tree.branch, this_tree=this_tree,
1551.11.9 by Aaron Bentley
Apply change reporting to merge
3562
                                   pb=pb, change_reporter=change_reporter)
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
3563
        merger.pp = ProgressPhase("Merge phase", 5, pb)
3564
        merger.pp.next_phase()
3565
        merger.check_basis(check_clean)
1551.14.4 by Aaron Bentley
Change bundle reader and merge directive to both be 'mergeables'
3566
        if other_rev_id is not None:
3567
            merger.set_other_revision(other_rev_id, this_tree.branch)
3568
        else:
3569
            merger.set_other(other_revision)
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
3570
        merger.pp.next_phase()
3571
        merger.set_base(base_revision)
3572
        if merger.base_rev_id == merger.other_rev_id:
3573
            note('Nothing to do.')
3574
            return 0
2149.2.1 by Jan Hudec
Option --pull for merge command.
3575
        if file_list is None:
3576
            if pull and merger.base_rev_id == merger.this_rev_id:
2297.1.1 by Martin Pool
Pull now returns a PullResult rather than just an integer.
3577
                # FIXME: deduplicate with pull
3578
                result = merger.this_tree.pull(merger.this_branch,
2149.2.1 by Jan Hudec
Option --pull for merge command.
3579
                        False, merger.other_rev_id)
2297.1.1 by Martin Pool
Pull now returns a PullResult rather than just an integer.
3580
                if result.old_revid == result.new_revid:
3581
                    note('No revisions to pull.')
3582
                else:
3583
                    note('Now on revision %d.' % result.new_revno)
2149.2.1 by Jan Hudec
Option --pull for merge command.
3584
                return 0
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
3585
        merger.backup_files = backup_files
3586
        merger.merge_type = merge_type 
3587
        merger.set_interesting_files(file_list)
3588
        merger.show_base = show_base 
3589
        merger.reprocess = reprocess
3590
        conflicts = merger.do_merge()
1645.1.1 by Aaron Bentley
Implement single-file merge
3591
        if file_list is None:
3592
            merger.set_pending()
1551.2.32 by Aaron Bentley
Handle progress phases more nicely in merge
3593
    finally:
3594
        pb.clear()
1545.2.9 by Aaron Bentley
Moved merge.merge to builtins
3595
    return conflicts
3596
3597
1996.3.5 by John Arbash Meinel
Cleanup, deprecated, and get the tests passing again.
3598
# Compatibility
3599
merge = _merge_helper
3600
3601
1185.16.33 by Martin Pool
- move 'conflict' and 'resolved' from shipped plugin to regular builtins
3602
# these get imported and then picked up by the scan for cmd_*
3603
# TODO: Some more consistent way to split command definitions across files;
3604
# we do need to load at least some information about them to know of 
1616.1.7 by Martin Pool
New developer commands 'weave-list' and 'weave-join'.
3605
# aliases.  ideally we would avoid loading the implementation until the
3606
# details were needed.
2022.1.2 by John Arbash Meinel
rename version_info => cmd_version_info
3607
from bzrlib.cmd_version_info import cmd_version_info
1185.35.4 by Aaron Bentley
Implemented remerge
3608
from bzrlib.conflicts import cmd_resolve, cmd_conflicts, restore
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
3609
from bzrlib.bundle.commands import cmd_bundle_revisions
1185.78.6 by John Arbash Meinel
Adding sign-my-commits as a builtin, along with some simple tests.
3610
from bzrlib.sign_my_commits import cmd_sign_my_commits
1616.1.17 by Martin Pool
New 'weave-plan-merge' and 'weave-merge-text' commands lifted from weave.py
3611
from bzrlib.weave_commands import cmd_weave_list, cmd_weave_join, \
3612
        cmd_weave_plan_merge, cmd_weave_merge_text