~abentley/bzrtools/bzrtools.dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/python

"""Show paths used by bzr itself and push/pull locations for current branch
Written by Alexander Belchenko, 2006
"""

from bzrlib.commands import register_command
from command import BzrToolsCommand
from bzrlib.option import Option


FORMAT = '%18s: %s'


def _bzr_system_info(to_file):
    import os
    import site
    import sys

    import bzrlib
    from bzrlib.config import config_dir
    from bzrlib import osutils
    from bzrlib.plugin import DEFAULT_PLUGIN_PATH
    from bzrlib import plugins
    from bzrlib import trace

    print >>to_file, FORMAT % ('Python interpreter', sys.executable)
    print >>to_file, FORMAT % ('Python library',
                               os.path.dirname(site.__file__))

    print >>to_file, FORMAT % ('bzr executable', osutils.realpath(sys.argv[0]))
    print >>to_file, FORMAT % ('bzrlib', osutils.realpath(bzrlib.__path__[0]))

    print >>to_file, FORMAT % ('bzr config dir', osutils.realpath(config_dir()))

    dirs = os.environ.get('BZR_PLUGIN_PATH', DEFAULT_PLUGIN_PATH).split(os.pathsep)
    dirs.insert(0, os.path.dirname(plugins.__file__))
    if len(dirs) == 1:
        print >>to_file, FORMAT % ('bzr plugins dir', osutils.realpath(dirs[0]))
    else:
        print >>to_file, FORMAT % ('bzr plugins dirs', osutils.realpath(dirs[0]))
        for dir_ in dirs[1:]:
            print >>to_file, FORMAT % ('', osutils.realpath(dir_))

    print >>to_file, FORMAT % ('.bzr.log', osutils.realpath(trace._bzr_log_file.name))
#/def _bzr_system_info


class cmd_show_paths(BzrToolsCommand):
    """Show paths used by bzr itself and for current branch.

    The standard "bzr info" command now includes this functionality.

    If you run this command from branch you'll see
    saved path locations for current branch:

        * branch root - root directory of current branch
        * pull from   - default location for pull command
        * push to     - default location for push command
        * bound to    - for checkouts: location of repository branch
        * submit to   - default reference location for bundle generation
    """

    takes_options = [Option('system',
                            help='Show full bzr system information.'),
                    ]
    takes_args = ['branch?']

    hidden = True

    _see_also = ['info']

    def run(self, system=False, branch=u'.'):
        import sys

        from bzrlib.branch import Branch
        from bzrlib.errors import NotBranchError, NoWorkingTree
        from bzrlib import urlutils
        from bzrlib.workingtree import WorkingTree

        def local_path(path):
            if path.startswith("file://"):
                return urlutils.local_path_from_url(path)
            else:
                return urlutils.unescape(path)

        to_file = getattr(self, 'outf', sys.stdout)

        if system:
            print >>to_file, "*** Main bzr paths info ***"
            _bzr_system_info(to_file)

        try:
            branch = Branch.open_containing(branch)[0]

            if system:
                print >>to_file
            print >>to_file, "*** Current branch paths info ***"

            branch_root = branch.bzrdir.root_transport.base
            print >>to_file, FORMAT % ('branch root', local_path(branch_root))

            pull_loc = branch.get_parent() or 'None'
            print >>to_file, FORMAT % ('branch pull from', local_path(pull_loc))

            push_loc = branch.get_push_location() or 'None'
            print >>to_file, FORMAT % ('branch push to', local_path(push_loc))

            bound_loc = branch.get_bound_location() or 'None'
            print >>to_file, FORMAT % ('bound to branch', local_path(bound_loc))

            if hasattr(branch, 'get_submit_branch'):
                submit_loc = branch.get_submit_branch() or 'None'
                print >>to_file, FORMAT % ('submit to branch', local_path(submit_loc))

        except NotBranchError:
            if not system:
                raise
#/class cmd_show_paths


register_command(cmd_show_paths)