14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
from __future__ import absolute_import
17
19
__all__ = ['show_bzrdir_info']
19
21
from cStringIO import StringIO
77
79
return [" %*s: %s\n" % (max_len, l, u) for l, u in self.locs ]
80
def gather_location_info(repository, branch=None, working=None):
82
def gather_location_info(repository=None, branch=None, working=None,
82
repository_path = repository.user_url
83
85
if branch is not None:
84
86
branch_path = branch.user_url
85
87
master_path = branch.get_bound_location()
106
113
locs['branch root'] = branch_path
108
115
working_path = None
109
if repository.is_shared():
116
if repository is not None and repository.is_shared():
110
117
# lightweight checkout of branch in shared repository
111
118
if branch_path is not None:
112
119
locs['repository branch'] = branch_path
113
120
elif branch_path is not None:
115
122
locs['branch root'] = branch_path
116
if master_path != branch_path:
117
locs['bound to branch'] = master_path
123
elif repository is not None:
124
locs['repository'] = repository.user_url
125
elif control is not None:
126
locs['control directory'] = control.user_url
119
locs['repository'] = repository_path
120
if repository.is_shared():
128
# Really, at least a control directory should be
129
# passed in for this method to be useful.
131
if master_path != branch_path:
132
locs['bound to branch'] = master_path
133
if repository is not None and repository.is_shared():
121
134
# lightweight checkout of branch in shared repository
122
locs['shared repository'] = repository_path
123
order = ['light checkout root', 'repository checkout root',
124
'checkout root', 'checkout of branch', 'shared repository',
135
locs['shared repository'] = repository.user_url
136
order = ['control directory', 'light checkout root',
137
'repository checkout root', 'checkout root',
138
'checkout of branch', 'shared repository',
125
139
'repository', 'repository branch', 'branch root',
126
140
'bound to branch']
127
141
return [(n, locs[n]) for n in order if n in locs]
159
173
outfile.writelines(locs.get_lines())
176
def _show_control_dir_info(control, outfile):
177
"""Show control dir information."""
178
if control._format.colocated_branches:
180
outfile.write('Control directory:\n')
181
outfile.write(' %d branches\n' % len(control.list_branches()))
162
184
def _show_format_info(control=None, repository=None, branch=None,
163
185
working=None, outfile=None):
164
186
"""Show known formats for control, working, branch and repository."""
178
200
repository._format.get_format_description())
181
def _show_locking_info(repository, branch=None, working=None, outfile=None):
203
def _show_locking_info(repository=None, branch=None, working=None,
182
205
"""Show locking status of working, branch and repository."""
183
if (repository.get_physical_lock_status() or
206
if (repository and repository.get_physical_lock_status() or
184
207
(branch and branch.get_physical_lock_status()) or
185
208
(working and working.get_physical_lock_status())):
186
209
outfile.write('\n')
328
351
tree = a_bzrdir.open_workingtree(
329
352
recommend_upgrade=False)
330
except (NoWorkingTree, NotLocalUrl):
353
except (NoWorkingTree, NotLocalUrl, NotBranchError):
333
branch = a_bzrdir.open_branch()
356
branch = a_bzrdir.open_branch(name="")
334
357
except NotBranchError:
337
360
repository = a_bzrdir.open_repository()
338
361
except NoRepositoryPresent:
339
# Return silently; cmd_info already returned NotBranchError
340
# if no controldir could be opened.
343
365
lockable = repository
349
371
repository = branch.repository
374
if lockable is not None:
354
377
show_component_info(a_bzrdir, repository, branch, tree, verbose,
380
if lockable is not None:
360
384
def show_component_info(control, repository, branch=None, working=None,
367
391
if verbose is True:
369
layout = describe_layout(repository, branch, working)
393
layout = describe_layout(repository, branch, working, control)
370
394
format = describe_format(control, repository, branch, working)
371
395
outfile.write("%s (format: %s)\n" % (layout, format))
372
_show_location_info(gather_location_info(repository, branch, working),
397
gather_location_info(control=control, repository=repository,
398
branch=branch, working=working),
374
400
if branch is not None:
375
401
_show_related_info(branch, outfile)
378
404
_show_format_info(control, repository, branch, working, outfile)
379
405
_show_locking_info(repository, branch, working, outfile)
406
_show_control_dir_info(control, outfile)
380
407
if branch is not None:
381
408
_show_missing_revisions_branch(branch, outfile)
382
409
if working is not None:
387
414
if branch is not None:
388
415
show_committers = verbose >= 2
389
416
stats = _show_branch_stats(branch, show_committers, outfile)
417
elif repository is not None:
391
418
stats = repository.gather_stats()
392
if branch is None and working is None:
419
if branch is None and working is None and repository is not None:
393
420
_show_repository_info(repository, outfile)
394
_show_repository_stats(repository, stats, outfile)
397
def describe_layout(repository=None, branch=None, tree=None):
421
if repository is not None:
422
_show_repository_stats(repository, stats, outfile)
425
def describe_layout(repository=None, branch=None, tree=None, control=None):
398
426
"""Convert a control directory layout into a user-understandable term
400
428
Common outputs include "Standalone tree", "Repository branch" and
401
429
"Checkout". Uncommon outputs include "Unshared repository with trees"
402
430
and "Empty control directory"
432
if branch is None and control is not None:
434
branch_reference = control.get_branch_reference()
435
except NotBranchError:
438
if branch_reference is not None:
439
return "Dangling branch reference"
404
440
if repository is None:
405
441
return 'Empty control directory'
406
442
if branch is None and tree is None:
408
444
phrase = 'Shared repository'
410
446
phrase = 'Unshared repository'
411
448
if repository.make_working_trees():
412
phrase += ' with trees'
449
extra.append('trees')
450
if len(control.get_branches()) > 0:
451
extra.append('colocated branches')
453
phrase += ' with ' + " and ".join(extra)
415
456
if repository.is_shared():