/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/info.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-09 21:42:24 UTC
  • mto: This revision was merged to the branch mainline in revision 3543.
  • Revision ID: john@arbash-meinel.com-20080709214224-r75k87r6a01pfc3h
Restore a real weave merge to 'bzr merge --weave'.

To do so efficiently, we only add the simple LCAs to the final weave
object, unless we run into complexities with the merge graph.
This gives the same effective result as adding all the texts,
with the advantage of not having to extract all of them.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
2
 
#
 
1
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 
2
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
__all__ = ['show_bzrdir_info']
18
18
 
19
 
from cStringIO import StringIO
 
19
import os
20
20
import time
21
21
import sys
22
22
 
23
23
from bzrlib import (
24
24
    bzrdir,
 
25
    diff,
25
26
    errors,
26
 
    hooks as _mod_hooks,
27
27
    osutils,
28
28
    urlutils,
29
29
    )
78
78
 
79
79
def gather_location_info(repository, branch=None, working=None):
80
80
    locs = {}
81
 
    repository_path = repository.user_url
 
81
    repository_path = repository.bzrdir.root_transport.base
82
82
    if branch is not None:
83
 
        branch_path = branch.user_url
 
83
        branch_path = branch.bzrdir.root_transport.base
84
84
        master_path = branch.get_bound_location()
85
85
        if master_path is None:
86
86
            master_path = branch_path
88
88
        branch_path = None
89
89
        master_path = None
90
90
    if working:
91
 
        working_path = working.user_url
 
91
        working_path = working.bzrdir.root_transport.base
92
92
        if working_path != branch_path:
93
93
            locs['light checkout root'] = working_path
94
94
        if master_path != branch_path:
141
141
    locs.add_url('push branch', branch.get_push_location())
142
142
    locs.add_url('parent branch', branch.get_parent())
143
143
    locs.add_url('submit branch', branch.get_submit_branch())
144
 
    try:
145
 
        locs.add_url('stacked on', branch.get_stacked_on_url())
146
 
    except (errors.UnstackableBranchFormat, errors.UnstackableRepositoryFormat,
147
 
        errors.NotStacked):
148
 
        pass
149
144
    return locs
150
145
 
151
146
 
261
256
 
262
257
    dir_cnt = 0
263
258
    for file_id in work_inv:
264
 
        if (work_inv.get_file_kind(file_id) == 'directory' and
 
259
        if (work_inv.get_file_kind(file_id) == 'directory' and 
265
260
            not work_inv.is_root(file_id)):
266
261
            dir_cnt += 1
267
262
    outfile.write('  %8d versioned %s\n' % (dir_cnt,
299
294
            'the repository.\n')
300
295
 
301
296
 
302
 
def _show_repository_stats(repository, stats, outfile):
 
297
def _show_repository_stats(stats, outfile):
303
298
    """Show statistics about a repository."""
304
 
    f = StringIO()
 
299
    if 'revisions' in stats or 'size' in stats:
 
300
        outfile.write('\n')
 
301
        outfile.write('Repository:\n')
305
302
    if 'revisions' in stats:
306
303
        revisions = stats['revisions']
307
 
        f.write('  %8d revision%s\n' % (revisions, plural(revisions)))
 
304
        outfile.write('  %8d revision%s\n' % (revisions, plural(revisions)))
308
305
    if 'size' in stats:
309
 
        f.write('  %8d KiB\n' % (stats['size']/1024))
310
 
    for hook in hooks['repository']:
311
 
        hook(repository, stats, f)
312
 
    if f.getvalue() != "":
313
 
        outfile.write('\n')
314
 
        outfile.write('Repository:\n')
315
 
        outfile.write(f.getvalue())
 
306
        outfile.write('  %8d KiB\n' % (stats['size']/1024))
316
307
 
317
308
 
318
309
def show_bzrdir_info(a_bzrdir, verbose=False, outfile=None):
380
371
    elif branch is not None:
381
372
        _show_missing_revisions_branch(branch, outfile)
382
373
    if branch is not None:
383
 
        show_committers = verbose >= 2
384
 
        stats = _show_branch_stats(branch, show_committers, outfile)
 
374
        stats = _show_branch_stats(branch, verbose==2, outfile)
385
375
    else:
386
376
        stats = repository.gather_stats()
387
377
    if branch is None and working is None:
388
378
        _show_repository_info(repository, outfile)
389
 
    _show_repository_stats(repository, stats, outfile)
 
379
    _show_repository_stats(stats, outfile)
390
380
 
391
381
 
392
382
def describe_layout(repository=None, branch=None, tree=None):
418
408
        if branch is None and tree is not None:
419
409
            phrase = "branchless tree"
420
410
        else:
421
 
            if (tree is not None and tree.user_url !=
422
 
                branch.user_url):
 
411
            if (tree is not None and tree.bzrdir.root_transport.base !=
 
412
                branch.bzrdir.root_transport.base):
423
413
                independence = ''
424
414
                phrase = "Lightweight checkout"
425
415
            elif branch.get_bound_location() is not None:
444
434
    """
445
435
    candidates  = []
446
436
    if (branch is not None and tree is not None and
447
 
        branch.user_url != tree.user_url):
 
437
        branch.bzrdir.root_transport.base !=
 
438
        tree.bzrdir.root_transport.base):
448
439
        branch = None
449
440
        repository = None
450
441
    non_aliases = set(bzrdir.format_registry.keys())
475
466
        # do.
476
467
        candidates = new_candidates
477
468
    return ' or '.join(candidates)
478
 
 
479
 
 
480
 
class InfoHooks(_mod_hooks.Hooks):
481
 
    """Hooks for the info command."""
482
 
 
483
 
    def __init__(self):
484
 
        super(InfoHooks, self).__init__()
485
 
        self.create_hook(_mod_hooks.HookPoint('repository',
486
 
            "Invoked when displaying the statistics for a repository. "
487
 
            "repository is called with a statistics dictionary as returned "
488
 
            "by the repository and a file-like object to write to.", (1, 15), 
489
 
            None))
490
 
 
491
 
 
492
 
hooks = InfoHooks()