/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: John Arbash Meinel
  • Date: 2006-05-10 19:59:55 UTC
  • mfrom: (1704 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: john@arbash-meinel.com-20060510195955-df080afb1daa3a96
[merge] bzr.dev 1704

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""builtin bzr commands"""
18
18
 
19
19
 
 
20
import codecs
20
21
import errno
21
22
import os
22
 
import codecs
23
23
from shutil import rmtree
24
24
import sys
25
25
 
88
88
    """Parse and return a format specifier."""
89
89
    if typestring == "weave":
90
90
        return bzrdir.BzrDirFormat6()
91
 
    if typestring == "metadir":
 
91
    if typestring == "default":
92
92
        return bzrdir.BzrDirMetaFormat1()
 
93
    if typestring == "metaweave":
 
94
        format = bzrdir.BzrDirMetaFormat1()
 
95
        format.repository_format = bzrlib.repository.RepositoryFormat7()
 
96
        return format
93
97
    if typestring == "knit":
94
98
        format = bzrdir.BzrDirMetaFormat1()
95
99
        format.repository_format = bzrlib.repository.RepositoryFormatKnit1()
96
100
        return format
97
 
    msg = "No known bzr-dir format %s. Supported types are: weave, metadir\n" %\
98
 
        (typestring)
 
101
    msg = "Unknown bzr format %s. Current formats are: default, knit,\n" \
 
102
          "metaweave and weave" % typestring
99
103
    raise BzrCommandError(msg)
100
104
 
101
105
 
496
500
        # command.
497
501
        from bzrlib.transport import get_transport
498
502
        
499
 
        tree_from = WorkingTree.open_containing(u'.')[0]
500
 
        br_from = tree_from.branch
501
 
        stored_loc = tree_from.branch.get_push_location()
502
 
 
 
503
        br_from = Branch.open_containing('.')[0]
 
504
        stored_loc = br_from.get_push_location()
503
505
        if location is None:
504
506
            if stored_loc is None:
505
507
                raise BzrCommandError("No push location known or specified.")
591
593
 
592
594
    def run(self, from_location, to_location=None, revision=None, basis=None):
593
595
        from bzrlib.transport import get_transport
 
596
        from bzrlib.osutils import rmtree
594
597
        if revision is None:
595
598
            revision = [None]
596
599
        elif len(revision) > 1:
673
676
 
674
677
    --basis is to speed up checking out from remote branches.  When specified, it
675
678
    uses the inventory and file contents from the basis branch in preference to the
676
 
    branch being checked out. [Not implemented yet.]
 
679
    branch being checked out.
677
680
    """
678
681
    takes_args = ['branch_location?', 'to_location?']
679
682
    takes_options = ['revision', # , 'basis']
797
800
 
798
801
 
799
802
class cmd_info(Command):
800
 
    """Show statistical information about a branch."""
801
 
    takes_args = ['branch?']
 
803
    """Show information about a working tree, branch or repository.
 
804
 
 
805
    This command will show all known locations and formats associated to the
 
806
    tree, branch or repository.  Statistical information is included with
 
807
    each report.
 
808
 
 
809
    Branches and working trees will also report any missing revisions.
 
810
    """
 
811
    takes_args = ['location?']
802
812
    takes_options = ['verbose']
803
 
    
 
813
 
804
814
    @display_command
805
 
    def run(self, branch=None, verbose=False):
806
 
        import bzrlib.info
807
 
        bzrlib.info.show_bzrdir_info(bzrdir.BzrDir.open_containing(branch)[0],
808
 
                                     verbose=verbose)
 
815
    def run(self, location=None, verbose=False):
 
816
        from bzrlib.info import show_bzrdir_info
 
817
        show_bzrdir_info(bzrdir.BzrDir.open_containing(location)[0],
 
818
                         verbose=verbose)
809
819
 
810
820
 
811
821
class cmd_remove(Command):
943
953
    takes_args = ['location?']
944
954
    takes_options = [
945
955
                     Option('format', 
946
 
                            help='Create a specific format rather than the'
947
 
                                 ' current default format. Currently this '
948
 
                                 ' option only accepts "metadir"',
 
956
                            help='Specify a format for this branch. Current'
 
957
                                 ' formats are: default, knit, metaweave and'
 
958
                                 ' weave. Default is knit; metaweave and'
 
959
                                 ' weave are deprecated',
949
960
                            type=get_format_type),
950
961
                     ]
951
962
    def run(self, location=None, format=None):
952
963
        from bzrlib.branch import Branch
 
964
        if format is None:
 
965
            format = get_format_type('default')
953
966
        if location is None:
954
967
            location = u'.'
955
968
        else:
992
1005
    """
993
1006
    takes_args = ["location"] 
994
1007
    takes_options = [Option('format', 
995
 
                            help='Use a specific format rather than the'
996
 
                            ' current default format. Currently this'
997
 
                            ' option accepts "weave", "metadir" and "knit"',
 
1008
                            help='Specify a format for this repository.'
 
1009
                                 ' Current formats are: default, knit,'
 
1010
                                 ' metaweave and weave. Default is knit;'
 
1011
                                 ' metaweave and weave are deprecated',
998
1012
                            type=get_format_type),
999
1013
                     Option('trees',
1000
1014
                             help='Allows branches in repository to have'
1001
1015
                             ' a working tree')]
1002
1016
    aliases = ["init-repo"]
1003
1017
    def run(self, location, format=None, trees=False):
1004
 
        from bzrlib.bzrdir import BzrDirMetaFormat1
1005
1018
        from bzrlib.transport import get_transport
1006
1019
        if format is None:
1007
 
            format = BzrDirMetaFormat1()
 
1020
            format = get_format_type('default')
1008
1021
        transport = get_transport(location)
1009
1022
        if not transport.has('.'):
1010
1023
            transport.mkdir('')
1019
1032
    If files are listed, only the changes in those files are listed.
1020
1033
    Otherwise, all changes for the tree are listed.
1021
1034
 
 
1035
    "bzr diff -p1" is equivalent to "bzr diff --prefix old/:new/", and
 
1036
    produces patches suitable for "patch -p1".
 
1037
 
1022
1038
    examples:
1023
1039
        bzr diff
1024
1040
        bzr diff -r1
1025
1041
        bzr diff -r1..2
 
1042
        bzr diff --diff-prefix old/:new/
 
1043
        bzr diff bzr.mine bzr.dev
 
1044
        bzr diff foo.c
1026
1045
    """
1027
 
    # TODO: Allow diff across branches.
1028
1046
    # TODO: Option to use external diff command; could be GNU diff, wdiff,
1029
1047
    #       or a graphical diff.
1030
1048
 
1031
1049
    # TODO: Python difflib is not exactly the same as unidiff; should
1032
1050
    #       either fix it up or prefer to use an external diff.
1033
1051
 
1034
 
    # TODO: If a directory is given, diff everything under that.
1035
 
 
1036
1052
    # TODO: Selected-file diff is inefficient and doesn't show you
1037
1053
    #       deleted files.
1038
1054
 
1039
1055
    # TODO: This probably handles non-Unix newlines poorly.
1040
1056
    
1041
1057
    takes_args = ['file*']
1042
 
    takes_options = ['revision', 'diff-options']
 
1058
    takes_options = ['revision', 'diff-options', 'prefix']
1043
1059
    aliases = ['di', 'dif']
1044
1060
    encoding_type = 'exact'
1045
1061
 
1046
1062
    @display_command
1047
 
    def run(self, revision=None, file_list=None, diff_options=None):
 
1063
    def run(self, revision=None, file_list=None, diff_options=None,
 
1064
            prefix=None):
1048
1065
        from bzrlib.diff import diff_cmd_helper, show_diff_trees
 
1066
 
 
1067
        if (prefix is None) or (prefix == '0'):
 
1068
            # diff -p0 format
 
1069
            old_label = ''
 
1070
            new_label = ''
 
1071
        elif prefix == '1':
 
1072
            old_label = 'old/'
 
1073
            new_label = 'new/'
 
1074
        else:
 
1075
            if not ':' in prefix:
 
1076
                 raise BzrError("--diff-prefix expects two values separated by a colon")
 
1077
            old_label, new_label = prefix.split(":")
 
1078
        
1049
1079
        try:
1050
1080
            tree1, file_list = internal_tree_files(file_list)
1051
1081
            tree2 = None
1066
1096
                raise BzrCommandError("Can't specify -r with two branches")
1067
1097
            if (len(revision) == 1) or (revision[1].spec is None):
1068
1098
                return diff_cmd_helper(tree1, file_list, diff_options,
1069
 
                                       revision[0])
 
1099
                                       revision[0], 
 
1100
                                       old_label=old_label, new_label=new_label)
1070
1101
            elif len(revision) == 2:
1071
1102
                return diff_cmd_helper(tree1, file_list, diff_options,
1072
 
                                       revision[0], revision[1])
 
1103
                                       revision[0], revision[1],
 
1104
                                       old_label=old_label, new_label=new_label)
1073
1105
            else:
1074
1106
                raise BzrCommandError('bzr diff --revision takes exactly one or two revision identifiers')
1075
1107
        else:
1076
1108
            if tree2 is not None:
1077
1109
                return show_diff_trees(tree1, tree2, sys.stdout, 
1078
1110
                                       specific_files=file_list,
1079
 
                                       external_diff_options=diff_options)
 
1111
                                       external_diff_options=diff_options,
 
1112
                                       old_label=old_label, new_label=new_label)
1080
1113
            else:
1081
 
                return diff_cmd_helper(tree1, file_list, diff_options)
 
1114
                return diff_cmd_helper(tree1, file_list, diff_options,
 
1115
                                       old_label=old_label, new_label=new_label)
1082
1116
 
1083
1117
 
1084
1118
class cmd_deleted(Command):
1682
1716
    takes_args = ['url?']
1683
1717
    takes_options = [
1684
1718
                     Option('format', 
1685
 
                            help='Upgrade to a specific format rather than the'
1686
 
                                 ' current default format. Currently this'
1687
 
                                 ' option accepts "weave", "metadir" and'
1688
 
                                 ' "knit".',
 
1719
                            help='Upgrade to a specific format. Current formats'
 
1720
                                 ' are: default, knit, metaweave and weave.'
 
1721
                                 ' Default is knit; metaweave and weave are'
 
1722
                                 ' deprecated',
1689
1723
                            type=get_format_type),
1690
1724
                    ]
1691
1725
 
1692
1726
 
1693
1727
    def run(self, url='.', format=None):
1694
1728
        from bzrlib.upgrade import upgrade
 
1729
        if format is None:
 
1730
            format = get_format_type('default')
1695
1731
        upgrade(url, format)
1696
1732
 
1697
1733
 
2294
2330
    shown only at the top, unless the --all option is given.
2295
2331
    """
2296
2332
    # TODO: annotate directories; showing when each file was last changed
2297
 
    # TODO: annotate a previous version of a file
2298
2333
    # TODO: if the working copy is modified, show annotations on that 
2299
2334
    #       with new uncommitted lines marked
2300
2335
    aliases = ['blame', 'praise']
2301
2336
    takes_args = ['filename']
2302
2337
    takes_options = [Option('all', help='show annotations on all lines'),
2303
2338
                     Option('long', help='show date in annotations'),
 
2339
                     'revision'
2304
2340
                     ]
2305
2341
 
2306
2342
    @display_command
2307
 
    def run(self, filename, all=False, long=False):
 
2343
    def run(self, filename, all=False, long=False, revision=None):
2308
2344
        from bzrlib.annotate import annotate_file
2309
2345
        tree, relpath = WorkingTree.open_containing(filename)
2310
2346
        branch = tree.branch
2311
2347
        branch.lock_read()
2312
2348
        try:
 
2349
            if revision is None:
 
2350
                revision_id = branch.last_revision()
 
2351
            elif len(revision) != 1:
 
2352
                raise BzrCommandError('bzr annotate --revision takes exactly 1 argument')
 
2353
            else:
 
2354
                revision_id = revision[0].in_history(branch).rev_id
2313
2355
            file_id = tree.inventory.path2id(relpath)
2314
 
            tree = branch.repository.revision_tree(branch.last_revision())
 
2356
            tree = branch.repository.revision_tree(revision_id)
2315
2357
            file_version = tree.inventory[file_id].revision
2316
2358
            annotate_file(branch, file_version, file_id, long, all, sys.stdout)
2317
2359
        finally:
2380
2422
 
2381
2423
 
2382
2424
class cmd_unbind(Command):
2383
 
    """Bind the current branch to its parent.
 
2425
    """Unbind the current branch from its master branch.
2384
2426
 
2385
2427
    After unbinding, the local branch is considered independent.
 
2428
    All subsequent commits will be local.
2386
2429
    """
2387
2430
 
2388
2431
    takes_args = []
2471
2514
 
2472
2515
    CAUTION: Locks should only be broken when you are sure that the process
2473
2516
    holding the lock has been stopped.
 
2517
 
 
2518
    You can get information on what locks are open via the 'bzr info' command.
2474
2519
    
2475
2520
    example:
2476
 
        bzr break-lock .
 
2521
        bzr break-lock
2477
2522
    """
2478
 
    takes_args = ['location']
2479
 
    takes_options = [Option('show',
2480
 
                            help="just show information on the lock, " \
2481
 
                                 "don't break it"),
2482
 
                    ]
2483
 
    def run(self, location, show=False):
2484
 
        raise NotImplementedError("sorry, break-lock is not complete yet; "
2485
 
                "you can remove the 'held' directory manually to break the lock")
 
2523
    takes_args = ['location?']
 
2524
 
 
2525
    def run(self, location=None, show=False):
 
2526
        if location is None:
 
2527
            location = u'.'
 
2528
        control, relpath = bzrdir.BzrDir.open_containing(location)
 
2529
        try:
 
2530
            control.break_lock()
 
2531
        except NotImplementedError:
 
2532
            pass
 
2533
        
2486
2534
 
2487
2535
 
2488
2536
# command-line interpretation helper for merge-related commands