~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/info.py

Implemented table of constructs from BzrInfo specification.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from bzrlib.missing import find_unmerged
26
26
from bzrlib.osutils import format_date
27
27
from bzrlib.symbol_versioning import *
 
28
from bzrlib.trace import warning
28
29
 
29
30
 
30
31
def _countiter(it):
54
55
        return object.bzrdir._format    # Use rstrip to be safe?
55
56
 
56
57
 
 
58
def _print_other_locations(branch):
 
59
    """Output to stdout the parent, bound and push locations of branch,
 
60
    if not None.
 
61
    """
 
62
    if branch.get_parent():
 
63
        print '        Parent branch: %s' % branch.get_parent()
 
64
    if branch.get_bound_location():
 
65
        print '      Bound to branch: %s' % branch.get_bound_location()
 
66
    if branch.get_push_location():
 
67
        print '       Push to branch: %s' % branch.get_push_location()
 
68
 
 
69
 
 
70
def _print_formats(working_format, branch_format, repository_format):
 
71
    """Output to stdout the formats given, if not None."""
 
72
    if working_format:
 
73
        print '  Working tree format: %s' % working_format
 
74
    if branch_format:
 
75
        print '        Branch format: %s' % branch_format
 
76
    if repository_format:
 
77
        print '    Repository format: %s' % repository_format
 
78
 
 
79
 
57
80
@deprecated_function(zero_eight)
58
81
def show_info(b):
59
82
    """Please see show_bzrdir_info."""
74
97
def show_tree_info(working, debug):
75
98
    """Output to stdout the 'info' for working."""
76
99
 
77
 
    b = working.branch
78
 
    repository = b.repository
 
100
    branch = working.branch
 
101
    repository = branch.repository
79
102
    working_format = _get_format_string(working)
80
 
    branch_format = _get_format_string(b)
 
103
    branch_format = _get_format_string(branch)
81
104
    repository_format = _get_format_string(repository)
 
105
    # TODO Is it possible to get metadir format?
82
106
 
83
107
    if debug:
84
108
        print '   working.bzrdir = %s' % working.bzrdir.root_transport.base
85
 
        print '    branch.bzrdir = %s' % b.bzrdir.root_transport.base
 
109
        print '    branch.bzrdir = %s' % branch.bzrdir.root_transport.base
86
110
        print 'repository.bzrdir = %s' % repository.bzrdir.root_transport.base
87
 
        print '    branch.parent = %s' % (b.get_parent() or '')
88
 
        print '    branch.push   = %s' % (b.get_push_location() or '')
89
 
        print '    branch.bound  = %s' % (b.get_bound_location() or '')
 
111
        print '    branch.parent = %s' % (branch.get_parent() or '')
 
112
        print '    branch.push   = %s' % (branch.get_push_location() or '')
 
113
        print '    branch.bound  = %s' % (branch.get_bound_location() or '')
90
114
        print '   working.format = %s' % working_format
91
115
        print '    branch.format = %s' % branch_format
92
116
        print 'repository.format = %s' % repository_format
93
117
        print 'repository.shared = %s' % repository.is_shared()
94
118
        return
95
 
    
96
 
    if working.bzrdir != b.bzrdir:
97
 
        print 'working tree format:', working._format
98
 
        print 'branch location:', b.bzrdir.root_transport.base
99
 
    try:
100
 
        b._format.get_format_string()
101
 
        format = b._format
102
 
    except NotImplementedError:
103
 
        format = b.bzrdir._format
104
 
    print 'branch format:', format
105
119
 
106
 
    if b.get_bound_location():
107
 
        print 'bound to branch:',  b.get_bound_location()
 
120
    if working.bzrdir == branch.bzrdir:
 
121
        if working.bzrdir == repository.bzrdir:
 
122
            if working_format == branch_format == repository_format:
 
123
                # standalone branch
 
124
                print '          Branch root: %s' \
 
125
                        % branch.bzrdir.root_transport.base
 
126
                _print_other_locations(branch)
 
127
                print
 
128
                _print_formats(None, branch_format, None)
 
129
            else:
 
130
                # checkout (bound branch)
 
131
                print '        Checkout root: %s' \
 
132
                        % branch.bzrdir.root_transport.base
 
133
                _print_other_locations(branch)
 
134
                print
 
135
                _print_formats(working_format, branch_format,
 
136
                               repository_format)
 
137
        else:
 
138
            # working tree inside branch of shared repository
 
139
            print '        Checkout root: %s' \
 
140
                    % branch.bzrdir.root_transport.base
 
141
            if repository.is_shared():
 
142
                print '    Shared repository: %s' \
 
143
                        % repository.bzrdir.root_transport.base
 
144
            else:
 
145
                print '           Repository: %s' \
 
146
                        % repository.bzrdir.root_transport.base
 
147
            _print_other_locations(branch)
 
148
            print
 
149
            _print_formats(working_format, branch_format, repository_format)
 
150
    else:
 
151
        if working.bzrdir == repository.bzrdir:
 
152
            # strange variation of lightweight checkout
 
153
            # Working has the same location as repository, but not branch.
 
154
            # FIXME This UI needs review, just show all values for now.
 
155
            warning('User interface for this construct needs to be tuned.')
 
156
            print '         Working tree: %s' \
 
157
                    % working.bzrdir.root_transport.base
 
158
            print '   Checkout of branch: %s' \
 
159
                    % branch.bzrdir.root_transport.base
 
160
            if repository.is_shared():
 
161
                print '    Shared repository: %s' \
 
162
                        % repository.bzrdir.root_transport.base
 
163
            else:
 
164
                print '           Repository: %s' \
 
165
                        % repository.bzrdir.root_transport.base
 
166
        else:
 
167
            # lightweight checkout (could be of standalone branch)
 
168
            print '         Working tree: %s' \
 
169
                    % working.bzrdir.root_transport.base
 
170
            print '   Checkout of branch: %s' \
 
171
                    % branch.bzrdir.root_transport.base
 
172
            if branch.bzrdir != repository.bzrdir:
 
173
                # lightweight checkout
 
174
                if repository.is_shared():
 
175
                    print '    Shared repository: %s' \
 
176
                            % repository.bzrdir.root_transport.base
 
177
                else:
 
178
                    print '           Repository: %s' \
 
179
                            % repository.bzrdir.root_transport.base
 
180
            _print_other_locations(branch)
 
181
            print
 
182
            _print_formats(working_format, branch_format, repository_format)
108
183
 
109
184
    count_version_dirs = 0
110
185
 
111
186
    basis = working.basis_tree()
112
187
    work_inv = working.inventory
113
188
    delta = diff.compare_trees(basis, working, want_unchanged=True)
114
 
    history = b.revision_history()
 
189
    history = branch.revision_history()
115
190
    
116
191
    print
117
192
    # Try with inaccessible branch ?
118
 
    master = b.get_master_branch()
 
193
    master = branch.get_master_branch()
119
194
    if master:
120
 
        local_extra, remote_extra = find_unmerged(b, b.get_master_branch())
 
195
        local_extra, remote_extra = find_unmerged(branch, master)
121
196
        if remote_extra:
122
197
            print 'Branch is out of date: missing %d revision%s.' % (
123
198
                len(remote_extra), plural(len(remote_extra)))
161
236
    print '  %8d revision%s' % (revno, plural(revno))
162
237
    committers = {}
163
238
    for rev in history:
164
 
        committers[b.repository.get_revision(rev).committer] = True
 
239
        committers[branch.repository.get_revision(rev).committer] = True
165
240
    print '  %8d committer%s' % (len(committers), plural(len(committers)))
166
241
    if revno > 0:
167
 
        firstrev = b.repository.get_revision(history[0])
 
242
        firstrev = branch.repository.get_revision(history[0])
168
243
        age = int((time.time() - firstrev.timestamp) / 3600 / 24)
169
244
        print '  %8d day%s old' % (age, plural(age))
170
245
        print '   first revision: %s' % format_date(firstrev.timestamp,
171
246
                                                    firstrev.timezone)
172
247
 
173
 
        lastrev = b.repository.get_revision(history[-1])
 
248
        lastrev = branch.repository.get_revision(history[-1])
174
249
        print '  latest revision: %s' % format_date(lastrev.timestamp,
175
250
                                                    lastrev.timezone)
176
251
 
177
252
#     print
178
253
#     print 'text store:'
179
 
#     c, t = b.text_store.total_size()
 
254
#     c, t = branch.text_store.total_size()
180
255
#     print '  %8d file texts' % c
181
256
#     print '  %8d kB' % (t/1024)
182
257
 
183
258
    print
184
259
    print 'revision store:'
185
 
    c, t = b.repository._revision_store.total_size(b.repository.get_transaction())
 
260
    c, t = branch.repository._revision_store.total_size(branch.repository.get_transaction())
186
261
    print '  %8d revision%s' % (c, plural(c))
187
262
    print '  %8d kB' % (t/1024)
188
263
 
189
 
 
190
264
#     print
191
265
#     print 'inventory store:'
192
 
#     c, t = b.inventory_store.total_size()
 
266
#     c, t = branch.inventory_store.total_size()
193
267
#     print '  %8d inventories' % c
194
268
#     print '  %8d kB' % (t/1024)
195
 
 
196
 
    loc = b.get_parent()
197
 
    if loc is not None:
198
 
        print
199
 
        print 'parent location:'
200
 
        print '  %s' % loc
201