~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: John Arbash Meinel
  • Date: 2009-02-23 15:29:35 UTC
  • mfrom: (3943.7.7 bzr.code_style_cleanup)
  • mto: This revision was merged to the branch mainline in revision 4033.
  • Revision ID: john@arbash-meinel.com-20090223152935-oel9m92mwcc6nb4h
Merge the removal of all trailing whitespace, and resolve conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
131
131
 
132
132
    The filenames given are not required to exist.
133
133
 
134
 
    :param file_list: Filenames to convert.  
 
134
    :param file_list: Filenames to convert.
135
135
 
136
136
    :param default_branch: Fallback tree path to use if file_list is empty or
137
137
        None.
237
237
 
238
238
    To see ignored files use 'bzr ignored'.  For details on the
239
239
    changes to file texts, use 'bzr diff'.
240
 
    
 
240
 
241
241
    Note that --short or -S gives status flags for each item, similar
242
242
    to Subversion's status command. To get output similar to svn -q,
243
243
    use bzr status -SV.
255
255
    If a revision argument is given, the status is calculated against
256
256
    that revision, or between two revisions if two are provided.
257
257
    """
258
 
    
 
258
 
259
259
    # TODO: --no-recurse, --recurse options
260
 
    
 
260
 
261
261
    takes_args = ['file*']
262
262
    takes_options = ['show-ids', 'revision', 'change', 'verbose',
263
263
                     Option('short', help='Use short status indicators.',
271
271
 
272
272
    encoding_type = 'replace'
273
273
    _see_also = ['diff', 'revert', 'status-flags']
274
 
    
 
274
 
275
275
    @display_command
276
276
    def run(self, show_ids=False, file_list=None, revision=None, short=False,
277
277
            versioned=False, no_pending=False, verbose=False):
299
299
 
300
300
class cmd_cat_revision(Command):
301
301
    """Write out metadata for a revision.
302
 
    
 
302
 
303
303
    The revision to print can either be specified by a specific
304
304
    revision identifier, or you can use --revision.
305
305
    """
309
309
    takes_options = ['revision']
310
310
    # cat-revision is more for frontends so should be exact
311
311
    encoding = 'strict'
312
 
    
 
312
 
313
313
    @display_command
314
314
    def run(self, revision_id=None, revision=None):
315
315
        if revision_id is not None and revision is not None:
430
430
 
431
431
    def run(self, location='.', force=False):
432
432
        d = bzrdir.BzrDir.open(location)
433
 
        
 
433
 
434
434
        try:
435
435
            working = d.open_workingtree()
436
436
        except errors.NoWorkingTree:
448
448
        if working_path != branch_path:
449
449
            raise errors.BzrCommandError("You cannot remove the working tree from "
450
450
                                         "a lightweight checkout")
451
 
        
 
451
 
452
452
        d.destroy_workingtree()
453
 
        
 
453
 
454
454
 
455
455
class cmd_revno(Command):
456
456
    """Show current revision number.
506
506
                revno = '.'.join(str(i) for i in dotted_map[revision_id])
507
507
            print '%s %s' % (revno, revision_id)
508
508
 
509
 
    
 
509
 
510
510
class cmd_add(Command):
511
511
    """Add specified files or directories.
512
512
 
530
530
    you should never need to explicitly add a directory, they'll just
531
531
    get added when you add a file in the directory.
532
532
 
533
 
    --dry-run will show which files would be added, but not actually 
 
533
    --dry-run will show which files would be added, but not actually
534
534
    add them.
535
535
 
536
536
    --file-ids-from will try to use the file ids from the supplied path.
591
591
            if verbose:
592
592
                for glob in sorted(ignored.keys()):
593
593
                    for path in ignored[glob]:
594
 
                        self.outf.write("ignored %s matching \"%s\"\n" 
 
594
                        self.outf.write("ignored %s matching \"%s\"\n"
595
595
                                        % (path, glob))
596
596
            else:
597
597
                match_len = 0
624
624
 
625
625
    takes_args = ['filename']
626
626
    hidden = True
627
 
    
 
627
 
628
628
    @display_command
629
629
    def run(self, filename):
630
630
        # TODO: jam 20050106 Can relpath return a munged path if
801
801
                        # pathjoin with an empty tail adds a slash, which breaks
802
802
                        # relpath :(
803
803
                        dest_parent_fq = tree.basedir
804
 
    
 
804
 
805
805
                    dest_tail = osutils.canonical_relpath(
806
806
                                    dest_parent_fq,
807
807
                                    osutils.pathjoin(dest_parent_fq, spec_tail))
931
931
 
932
932
class cmd_push(Command):
933
933
    """Update a mirror of this branch.
934
 
    
 
934
 
935
935
    The target branch will not have its working tree populated because this
936
936
    is both expensive, and is not supported on remote file systems.
937
 
    
 
937
 
938
938
    Some smart servers or protocols *may* put the working tree in place in
939
939
    the future.
940
940
 
944
944
 
945
945
    If branches have diverged, you can use 'bzr push --overwrite' to replace
946
946
    the other branch completely, discarding its unmerged changes.
947
 
    
 
947
 
948
948
    If you want to ensure you have the different changes in the other branch,
949
949
    do a merge (see bzr help merge) from the other branch, and commit that.
950
950
    After that you will be able to do a push without '--overwrite'.
1127
1127
    the branch found in '.'. This is useful if you have removed the working tree
1128
1128
    or if it was never created - i.e. if you pushed the branch to its current
1129
1129
    location using SFTP.
1130
 
    
 
1130
 
1131
1131
    If the TO_LOCATION is omitted, the last component of the BRANCH_LOCATION will
1132
1132
    be used.  In other words, "checkout ../foo/bar" will attempt to create ./bar.
1133
1133
    If the BRANCH_LOCATION has no / or path separator embedded, the TO_LOCATION
1175
1175
            revision_id = None
1176
1176
        if to_location is None:
1177
1177
            to_location = urlutils.derive_to_location(branch_location)
1178
 
        # if the source and to_location are the same, 
 
1178
        # if the source and to_location are the same,
1179
1179
        # and there is no working tree,
1180
1180
        # then reconstitute a branch
1181
1181
        if (osutils.abspath(to_location) ==
1227
1227
 
1228
1228
class cmd_update(Command):
1229
1229
    """Update a tree to have the latest code committed to its branch.
1230
 
    
 
1230
 
1231
1231
    This will perform a merge into the working tree, and may generate
1232
 
    conflicts. If you have any local changes, you will still 
 
1232
    conflicts. If you have any local changes, you will still
1233
1233
    need to commit them after the update for the update to be complete.
1234
 
    
1235
 
    If you want to discard your local changes, you can just do a 
 
1234
 
 
1235
    If you want to discard your local changes, you can just do a
1236
1236
    'bzr revert' instead of 'bzr commit' after the update.
1237
1237
    """
1238
1238
 
1408
1408
 
1409
1409
    This can correct data mismatches that may have been caused by
1410
1410
    previous ghost operations or bzr upgrades. You should only
1411
 
    need to run this command if 'bzr check' or a bzr developer 
 
1411
    need to run this command if 'bzr check' or a bzr developer
1412
1412
    advises you to run it.
1413
1413
 
1414
1414
    If a second branch is provided, cross-branch reconciliation is
1416
1416
    id which was not present in very early bzr versions is represented
1417
1417
    correctly in both branches.
1418
1418
 
1419
 
    At the same time it is run it may recompress data resulting in 
 
1419
    At the same time it is run it may recompress data resulting in
1420
1420
    a potential saving in disk space or performance gain.
1421
1421
 
1422
1422
    The branch *MUST* be on a listable system such as local disk or sftp.
1478
1478
    Use this to create an empty branch, or before importing an
1479
1479
    existing project.
1480
1480
 
1481
 
    If there is a repository in a parent directory of the location, then 
 
1481
    If there is a repository in a parent directory of the location, then
1482
1482
    the history of the branch will be stored in the repository.  Otherwise
1483
1483
    init creates a standalone branch which carries its own history
1484
1484
    in the .bzr directory.
1637
1637
 
1638
1638
class cmd_diff(Command):
1639
1639
    """Show differences in the working tree, between revisions or branches.
1640
 
    
 
1640
 
1641
1641
    If no arguments are given, all changes for the current tree are listed.
1642
1642
    If files are given, only the changes in those files are listed.
1643
1643
    Remote and multiple branches can be compared by using the --old and
1744
1744
        old_tree, new_tree, specific_files, extra_trees = \
1745
1745
                _get_trees_to_diff(file_list, revision, old, new,
1746
1746
                apply_view=True)
1747
 
        return show_diff_trees(old_tree, new_tree, sys.stdout, 
 
1747
        return show_diff_trees(old_tree, new_tree, sys.stdout,
1748
1748
                               specific_files=specific_files,
1749
1749
                               external_diff_options=diff_options,
1750
1750
                               old_label=old_label, new_label=new_label,
1897
1897
    were merged.
1898
1898
 
1899
1899
    :Output control:
1900
 
 
 
1900
 
1901
1901
      The log format controls how information about each revision is
1902
1902
      displayed. The standard log formats are called ``long``, ``short``
1903
1903
      and ``line``. The default is long. See ``bzr help log-formats``
1905
1905
 
1906
1906
      The following options can be used to control what information is
1907
1907
      displayed::
1908
 
  
 
1908
 
1909
1909
        -l N        display a maximum of N revisions
1910
1910
        -n N        display N levels of revisions (0 for all, 1 for collapsed)
1911
1911
        -v          display a status summary (delta) for each revision
1912
1912
        -p          display a diff (patch) for each revision
1913
1913
        --show-ids  display revision-ids (and file-ids), not just revnos
1914
 
  
 
1914
 
1915
1915
      Note that the default number of levels to display is a function of the
1916
1916
      log format. If the -n option is not used, ``short`` and ``line`` show
1917
1917
      just the top level (mainline) while ``long`` shows all levels of merged
1918
1918
      revisions.
1919
 
  
 
1919
 
1920
1920
      Status summaries are shown using status flags like A, M, etc. To see
1921
1921
      the changes explained using words like ``added`` and ``modified``
1922
1922
      instead, use the -vv option.
1923
 
  
 
1923
 
1924
1924
    :Ordering control:
1925
 
  
 
1925
 
1926
1926
      To display revisions from oldest to newest, use the --forward option.
1927
1927
      In most cases, using this option will have little impact on the total
1928
1928
      time taken to produce a log, though --forward does not incrementally
1929
1929
      display revisions like --reverse does when it can.
1930
 
  
 
1930
 
1931
1931
    :Revision filtering:
1932
 
  
 
1932
 
1933
1933
      The -r option can be used to specify what revision or range of revisions
1934
1934
      to filter against. The various forms are shown below::
1935
 
  
 
1935
 
1936
1936
        -rX      display revision X
1937
1937
        -rX..    display revision X and later
1938
1938
        -r..Y    display up to and including revision Y
1939
1939
        -rX..Y   display from X to Y inclusive
1940
 
  
 
1940
 
1941
1941
      See ``bzr help revisionspec`` for details on how to specify X and Y.
1942
1942
      Some common examples are given below::
1943
 
  
 
1943
 
1944
1944
        -r-1                show just the tip
1945
1945
        -r-10..             show the last 10 mainline revisions
1946
1946
        -rsubmit:..         show what's new on this branch
1947
1947
        -rancestor:path..   show changes since the common ancestor of this
1948
1948
                            branch and the one at location path
1949
1949
        -rdate:yesterday..  show changes since yesterday
1950
 
  
 
1950
 
1951
1951
      When logging a range of revisions using -rX..Y, log starts at
1952
1952
      revision Y and searches back in history through the primary
1953
1953
      ("left-hand") parents until it finds X. When logging just the
1956
1956
      a nested merge revision and the log will be truncated accordingly.
1957
1957
 
1958
1958
    :Path filtering:
1959
 
  
 
1959
 
1960
1960
      If a parameter is given and it's not a branch, the log will be filtered
1961
1961
      to show only those revisions that changed the nominated file or
1962
1962
      directory.
1963
 
  
 
1963
 
1964
1964
      Filenames are interpreted within their historical context. To log a
1965
1965
      deleted file, specify a revision range so that the file existed at
1966
1966
      the end or start of the range.
1967
 
  
 
1967
 
1968
1968
      Historical context is also important when interpreting pathnames of
1969
1969
      renamed files/directories. Consider the following example:
1970
 
  
 
1970
 
1971
1971
      * revision 1: add tutorial.txt
1972
1972
      * revision 2: modify tutorial.txt
1973
1973
      * revision 3: rename tutorial.txt to guide.txt; add tutorial.txt
1974
 
  
 
1974
 
1975
1975
      In this case:
1976
 
  
 
1976
 
1977
1977
      * ``bzr log guide.txt`` will log the file added in revision 1
1978
 
  
 
1978
 
1979
1979
      * ``bzr log tutorial.txt`` will log the new file added in revision 3
1980
 
  
 
1980
 
1981
1981
      * ``bzr log -r2 -p tutorial.txt`` will show the changes made to
1982
1982
        the original file in revision 2.
1983
 
  
 
1983
 
1984
1984
      * ``bzr log -r2 -p guide.txt`` will display an error message as there
1985
1985
        was no file called guide.txt in revision 2.
1986
 
  
 
1986
 
1987
1987
      Renames are always followed by log. By design, there is no need to
1988
1988
      explicitly ask for this (and no way to stop logging a file back
1989
1989
      until it was last renamed).
1990
 
  
 
1990
 
1991
1991
      Note: If the path is a directory, only revisions that directly changed
1992
1992
      that directory object are currently shown. This is considered a bug.
1993
1993
      (Support for filtering against multiple files and for files within a
1994
1994
      directory is under development.)
1995
 
  
 
1995
 
1996
1996
    :Other filtering:
1997
 
  
 
1997
 
1998
1998
      The --message option can be used for finding revisions that match a
1999
1999
      regular expression in a commit message.
2000
 
  
 
2000
 
2001
2001
    :Tips & tricks:
2002
 
  
 
2002
 
2003
2003
      GUI tools and IDEs are often better at exploring history than command
2004
2004
      line tools. You may prefer qlog or glog from the QBzr and Bzr-Gtk packages
2005
2005
      respectively for example. (TortoiseBzr uses qlog for displaying logs.) See
2006
2006
      http://bazaar-vcs.org/BzrPlugins and http://bazaar-vcs.org/IDEIntegration.
2007
 
  
 
2007
 
2008
2008
      Web interfaces are often better at exploring history than command line
2009
2009
      tools, particularly for branches on servers. You may prefer Loggerhead
2010
2010
      or one of its alternatives. See http://bazaar-vcs.org/WebInterface.
2011
 
  
 
2011
 
2012
2012
      You may find it useful to add the aliases below to ``bazaar.conf``::
2013
 
  
 
2013
 
2014
2014
        [ALIASES]
2015
2015
        tip = log -r-1 -n1
2016
2016
        top = log -r-10.. --short --forward
2017
2017
        show = log -v -p -n1 --long
2018
 
  
 
2018
 
2019
2019
      ``bzr tip`` will then show the latest revision while ``bzr top``
2020
2020
      will show the last 10 mainline revisions. To see the details of a
2021
2021
      particular revision X,  ``bzr show -rX``.
2022
 
  
 
2022
 
2023
2023
      As many GUI tools and Web interfaces do, you may prefer viewing
2024
2024
      history collapsed initially. If you are interested in looking deeper
2025
2025
      into a particular merge X, use ``bzr log -n0 -rX``. If you like
2026
2026
      working this way, you may wish to either:
2027
 
  
 
2027
 
2028
2028
      * change your default log format to short (or line)
2029
2029
      * add this alias: log = log -n1
2030
 
  
 
2030
 
2031
2031
      ``bzr log -v`` on a branch with lots of history is currently
2032
2032
      very slow. A fix for this issue is currently under development.
2033
2033
      With or without that fix, it is recommended that a revision range
2034
2034
      be given when using the -v option.
2035
 
  
 
2035
 
2036
2036
      bzr has a generic full-text matching plugin, bzr-search, that can be
2037
2037
      used to find revisions matching user names, commit messages, etc.
2038
2038
      Among other features, this plugin can find all revisions containing
2039
2039
      a list of words but not others.
2040
 
  
 
2040
 
2041
2041
      When exploring non-mainline history on large projects with deep
2042
2042
      history, the performance of log can be greatly improved by installing
2043
2043
      the revnocache plugin. This plugin buffers historical information
2119
2119
                        location)
2120
2120
        else:
2121
2121
            # local dir only
2122
 
            # FIXME ? log the current subdir only RBC 20060203 
 
2122
            # FIXME ? log the current subdir only RBC 20060203
2123
2123
            if revision is not None \
2124
2124
                    and len(revision) > 0 and revision[0].get_branch():
2125
2125
                location = revision[0].get_branch()
2346
2346
    using this command or directly by using an editor, be sure to commit
2347
2347
    it.
2348
2348
 
2349
 
    Note: ignore patterns containing shell wildcards must be quoted from 
 
2349
    Note: ignore patterns containing shell wildcards must be quoted from
2350
2350
    the shell on Unix.
2351
2351
 
2352
2352
    :Examples:
2377
2377
        Option('old-default-rules',
2378
2378
               help='Write out the ignore rules bzr < 0.9 always used.')
2379
2379
        ]
2380
 
    
 
2380
 
2381
2381
    def run(self, name_pattern_list=None, old_default_rules=None):
2382
2382
        from bzrlib import ignores
2383
2383
        if old_default_rules is not None:
2388
2388
        if not name_pattern_list:
2389
2389
            raise errors.BzrCommandError("ignore requires at least one "
2390
2390
                                  "NAME_PATTERN or --old-default-rules")
2391
 
        name_pattern_list = [globbing.normalize_pattern(p) 
 
2391
        name_pattern_list = [globbing.normalize_pattern(p)
2392
2392
                             for p in name_pattern_list]
2393
2393
        for name_pattern in name_pattern_list:
2394
 
            if (name_pattern[0] == '/' or 
 
2394
            if (name_pattern[0] == '/' or
2395
2395
                (len(name_pattern) > 1 and name_pattern[1] == ':')):
2396
2396
                raise errors.BzrCommandError(
2397
2397
                    "NAME_PATTERN should not be an absolute path")
2449
2449
    """
2450
2450
    hidden = True
2451
2451
    takes_args = ['revno']
2452
 
    
 
2452
 
2453
2453
    @display_command
2454
2454
    def run(self, revno):
2455
2455
        try:
2523
2523
    If no revision is nominated, the last revision is used.
2524
2524
 
2525
2525
    Note: Take care to redirect standard output when using this command on a
2526
 
    binary file. 
 
2526
    binary file.
2527
2527
    """
2528
2528
 
2529
2529
    _see_also = ['ls']
2576
2576
 
2577
2577
class cmd_local_time_offset(Command):
2578
2578
    """Show the offset in seconds from GMT to local time."""
2579
 
    hidden = True    
 
2579
    hidden = True
2580
2580
    @display_command
2581
2581
    def run(self):
2582
2582
        print osutils.local_time_offset()
2585
2585
 
2586
2586
class cmd_commit(Command):
2587
2587
    """Commit changes into a new revision.
2588
 
    
 
2588
 
2589
2589
    If no arguments are given, the entire tree is committed.
2590
2590
 
2591
2591
    If selected files are specified, only changes to those files are
2592
 
    committed.  If a directory is specified then the directory and everything 
 
2592
    committed.  If a directory is specified then the directory and everything
2593
2593
    within it is committed.
2594
2594
 
2595
2595
    When excludes are given, they take precedence over selected files.
2704
2704
        # TODO: Need a blackbox test for invoking the external editor; may be
2705
2705
        # slightly problematic to run this cross-platform.
2706
2706
 
2707
 
        # TODO: do more checks that the commit will succeed before 
 
2707
        # TODO: do more checks that the commit will succeed before
2708
2708
        # spending the user's valuable time typing a commit message.
2709
2709
 
2710
2710
        properties = {}
2733
2733
                        selected_list, diff=show_diff,
2734
2734
                        output_encoding=osutils.get_user_encoding())
2735
2735
                start_message = generate_commit_message_template(commit_obj)
2736
 
                my_message = edit_commit_message_encoded(t, 
 
2736
                my_message = edit_commit_message_encoded(t,
2737
2737
                    start_message=start_message)
2738
2738
                if my_message is None:
2739
2739
                    raise errors.BzrCommandError("please specify a commit"
2863
2863
 
2864
2864
class cmd_whoami(Command):
2865
2865
    """Show or set bzr user id.
2866
 
    
 
2866
 
2867
2867
    :Examples:
2868
2868
        Show the email of the current user::
2869
2869
 
2881
2881
                    ]
2882
2882
    takes_args = ['name?']
2883
2883
    encoding_type = 'replace'
2884
 
    
 
2884
 
2885
2885
    @display_command
2886
2886
    def run(self, email=False, branch=False, name=None):
2887
2887
        if name is None:
2902
2902
        except errors.NoEmailInUsername, e:
2903
2903
            warning('"%s" does not seem to contain an email address.  '
2904
2904
                    'This is allowed, but not recommended.', name)
2905
 
        
 
2905
 
2906
2906
        # use global config unless --branch given
2907
2907
        if branch:
2908
2908
            c = Branch.open_containing('.')[0].get_config()
3007
3007
 
3008
3008
class cmd_selftest(Command):
3009
3009
    """Run internal test suite.
3010
 
    
 
3010
 
3011
3011
    If arguments are given, they are regular expressions that say which tests
3012
3012
    should run.  Tests matching any expression are run, and other tests are
3013
3013
    not run.
3036
3036
    modified by plugins will not be tested, and tests provided by plugins will
3037
3037
    not be run.
3038
3038
 
3039
 
    Tests that need working space on disk use a common temporary directory, 
 
3039
    Tests that need working space on disk use a common temporary directory,
3040
3040
    typically inside $TMPDIR or /tmp.
3041
3041
 
3042
3042
    :Examples:
3212
3212
    #       merging only part of the history.
3213
3213
    takes_args = ['branch', 'other']
3214
3214
    hidden = True
3215
 
    
 
3215
 
3216
3216
    @display_command
3217
3217
    def run(self, branch, other):
3218
3218
        from bzrlib.revision import ensure_null
3219
 
        
 
3219
 
3220
3220
        branch1 = Branch.open_containing(branch)[0]
3221
3221
        branch2 = Branch.open_containing(other)[0]
3222
3222
        branch1.lock_read()
3238
3238
 
3239
3239
class cmd_merge(Command):
3240
3240
    """Perform a three-way merge.
3241
 
    
 
3241
 
3242
3242
    The source of the merge can be specified either in the form of a branch,
3243
3243
    or in the form of a path to a file containing a merge directive generated
3244
3244
    with bzr send. If neither is specified, the default is the upstream branch
3254
3254
    By default, bzr will try to merge in all new work from the other
3255
3255
    branch, automatically determining an appropriate base.  If this
3256
3256
    fails, you may need to give an explicit base.
3257
 
    
 
3257
 
3258
3258
    Merge will do its best to combine the changes in two branches, but there
3259
3259
    are some kinds of problems only a human can fix.  When it encounters those,
3260
3260
    it will mark a conflict.  A conflict means that you need to fix something,
3270
3270
    The results of the merge are placed into the destination working
3271
3271
    directory, where they can be reviewed (with bzr diff), tested, and then
3272
3272
    committed to record the result of the merge.
3273
 
    
 
3273
 
3274
3274
    merge refuses to run if there are any uncommitted changes, unless
3275
3275
    --force is given.
3276
3276
 
3542
3542
    """Redo a merge.
3543
3543
 
3544
3544
    Use this if you want to try a different merge technique while resolving
3545
 
    conflicts.  Some merge techniques are better than others, and remerge 
 
3545
    conflicts.  Some merge techniques are better than others, and remerge
3546
3546
    lets you try different ones on different files.
3547
3547
 
3548
3548
    The options for remerge have the same meaning and defaults as the ones for
3552
3552
    :Examples:
3553
3553
        Re-do the merge of all conflicted files, and show the base text in
3554
3554
        conflict regions, in addition to the usual THIS and OTHER texts::
3555
 
      
 
3555
 
3556
3556
            bzr remerge --show-base
3557
3557
 
3558
3558
        Re-do the merge of "foobar", using the weave merge algorithm, with
3559
3559
        additional processing to reduce the size of conflict regions::
3560
 
      
 
3560
 
3561
3561
            bzr remerge --merge-type weave --reprocess foobar
3562
3562
    """
3563
3563
    takes_args = ['file*']
3593
3593
                    interesting_ids.add(file_id)
3594
3594
                    if tree.kind(file_id) != "directory":
3595
3595
                        continue
3596
 
                    
 
3596
 
3597
3597
                    for name, ie in tree.inventory.iter_entries(file_id):
3598
3598
                        interesting_ids.add(ie.file_id)
3599
3599
                new_conflicts = conflicts.select_conflicts(tree, file_list)[0]
3648
3648
    merge instead.  For example, "merge . --revision -2..-3" will remove the
3649
3649
    changes introduced by -2, without affecting the changes introduced by -1.
3650
3650
    Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
3651
 
    
 
3651
 
3652
3652
    By default, any files that have been manually changed will be backed up
3653
3653
    first.  (Files changed only by merge are not backed up.)  Backup files have
3654
3654
    '.~#~' appended to their name, where # is a number.
3723
3723
            ]
3724
3724
    takes_args = ['topic?']
3725
3725
    aliases = ['?', '--help', '-?', '-h']
3726
 
    
 
3726
 
3727
3727
    @display_command
3728
3728
    def run(self, topic=None, long=False):
3729
3729
        import bzrlib.help
3740
3740
    takes_args = ['context?']
3741
3741
    aliases = ['s-c']
3742
3742
    hidden = True
3743
 
    
 
3743
 
3744
3744
    @display_command
3745
3745
    def run(self, context=None):
3746
3746
        import shellcomplete
3936
3936
 
3937
3937
class cmd_plugins(Command):
3938
3938
    """List the installed plugins.
3939
 
    
 
3939
 
3940
3940
    This command displays the list of installed plugins including
3941
3941
    version of plugin and a short description of each.
3942
3942
 
4019
4019
    This prints out the given file with an annotation on the left side
4020
4020
    indicating which revision, author and date introduced the change.
4021
4021
 
4022
 
    If the origin is the same for a run of consecutive lines, it is 
 
4022
    If the origin is the same for a run of consecutive lines, it is
4023
4023
    shown only at the top, unless the --all option is given.
4024
4024
    """
4025
4025
    # TODO: annotate directories; showing when each file was last changed
4026
 
    # TODO: if the working copy is modified, show annotations on that 
 
4026
    # TODO: if the working copy is modified, show annotations on that
4027
4027
    #       with new uncommitted lines marked
4028
4028
    aliases = ['ann', 'blame', 'praise']
4029
4029
    takes_args = ['filename']
4075
4075
    hidden = True # is this right ?
4076
4076
    takes_args = ['revision_id*']
4077
4077
    takes_options = ['revision']
4078
 
    
 
4078
 
4079
4079
    def run(self, revision_id_list=None, revision=None):
4080
4080
        if revision_id_list is not None and revision is not None:
4081
4081
            raise errors.BzrCommandError('You can only supply one of revision_id or --revision')
4311
4311
    holding the lock has been stopped.
4312
4312
 
4313
4313
    You can get information on what locks are open via the 'bzr info' command.
4314
 
    
 
4314
 
4315
4315
    :Examples:
4316
4316
        bzr break-lock
4317
4317
    """
4325
4325
            control.break_lock()
4326
4326
        except NotImplementedError:
4327
4327
            pass
4328
 
        
 
4328
 
4329
4329
 
4330
4330
class cmd_wait_until_signalled(Command):
4331
4331
    """Test helper for test_start_and_stop_bzr_subprocess_send_signal.
4445
4445
 
4446
4446
class cmd_join(Command):
4447
4447
    """Combine a subtree into its containing tree.
4448
 
    
 
4448
 
4449
4449
    This command is for experimental use only.  It requires the target tree
4450
4450
    to be in dirstate-with-subtree format, which cannot be converted into
4451
4451
    earlier formats.
4493
4493
            try:
4494
4494
                containing_tree.subsume(sub_tree)
4495
4495
            except errors.BadSubsumeSource, e:
4496
 
                raise errors.BzrCommandError("Cannot join %s.  %s" % 
 
4496
                raise errors.BzrCommandError("Cannot join %s.  %s" %
4497
4497
                                             (tree, e.reason))
4498
4498
 
4499
4499
 
4652
4652
    Mail is sent using your preferred mail program.  This should be transparent
4653
4653
    on Windows (it uses MAPI).  On Linux, it requires the xdg-email utility.
4654
4654
    If the preferred client can't be found (or used), your editor will be used.
4655
 
    
 
4655
 
4656
4656
    To use a specific mail program, set the mail_client configuration option.
4657
4657
    (For Thunderbird 1.5, this works around some bugs.)  Supported values for
4658
4658
    specific clients are "claws", "evolution", "kmail", "mutt", and
4661
4661
 
4662
4662
    If mail is being sent, a to address is required.  This can be supplied
4663
4663
    either on the commandline, by setting the submit_to configuration
4664
 
    option in the branch itself or the child_submit_to configuration option 
 
4664
    option in the branch itself or the child_submit_to configuration option
4665
4665
    in the submit branch.
4666
4666
 
4667
4667
    Two formats are currently supported: "4" uses revision bundle format 4 and
4669
4669
    older formats.  It is compatible with Bazaar 0.19 and later.  It is the
4670
4670
    default.  "0.9" uses revision bundle format 0.9 and merge directive
4671
4671
    format 1.  It is compatible with Bazaar 0.12 - 0.18.
4672
 
    
 
4672
 
4673
4673
    Merge directives are applied using the merge command or the pull command.
4674
4674
    """
4675
4675
 
4892
4892
 
4893
4893
class cmd_tag(Command):
4894
4894
    """Create, remove or modify a tag naming a revision.
4895
 
    
 
4895
 
4896
4896
    Tags give human-meaningful names to revisions.  Commands that take a -r
4897
4897
    (--revision) option can be given -rtag:X, where X is any previously
4898
4898
    created tag.
4900
4900
    Tags are stored in the branch.  Tags are copied from one branch to another
4901
4901
    along when you branch, push, pull or merge.
4902
4902
 
4903
 
    It is an error to give a tag name that already exists unless you pass 
 
4903
    It is an error to give a tag name that already exists unless you pass
4904
4904
    --force, in which case the tag is moved to point to the new revision.
4905
4905
 
4906
4906
    To rename a tag (change the name but keep it on the same revsion), run ``bzr
5091
5091
 
5092
5092
class cmd_switch(Command):
5093
5093
    """Set the branch of a checkout and update.
5094
 
    
 
5094
 
5095
5095
    For lightweight checkouts, this changes the branch being referenced.
5096
5096
    For heavyweight checkouts, this checks that there are no local commits
5097
5097
    versus the current bound branch, then it makes the local branch a mirror
5437
5437
 
5438
5438
# these get imported and then picked up by the scan for cmd_*
5439
5439
# TODO: Some more consistent way to split command definitions across files;
5440
 
# we do need to load at least some information about them to know of 
 
5440
# we do need to load at least some information about them to know of
5441
5441
# aliases.  ideally we would avoid loading the implementation until the
5442
5442
# details were needed.
5443
5443
from bzrlib.cmd_version_info import cmd_version_info