~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
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
29
29
 
30
30
import os
31
31
import sys
32
 
import warnings
33
32
 
34
33
from bzrlib.lazy_import import lazy_import
35
34
lazy_import(globals(), """
355
354
                for subdir in sorted(subdirs, reverse=True):
356
355
                    pending.append(current_transport.clone(subdir))
357
356
 
358
 
    def list_branches(self):
359
 
        """Return a sequence of all branches local to this control directory.
360
 
 
361
 
        """
362
 
        try:
363
 
            return [self.open_branch()]
364
 
        except errors.NotBranchError:
365
 
            return []
366
 
 
367
357
    @staticmethod
368
358
    def find_branches(transport):
369
359
        """Find all branches under a transport.
381
371
            except errors.NoRepositoryPresent:
382
372
                pass
383
373
            else:
384
 
                return False, ([], repository)
385
 
            return True, (bzrdir.list_branches(), None)
386
 
        ret = []
387
 
        for branches, repo in BzrDir.find_bzrdirs(transport,
388
 
                                                  evaluate=evaluate):
 
374
                return False, (None, repository)
 
375
            try:
 
376
                branch = bzrdir.open_branch()
 
377
            except errors.NotBranchError:
 
378
                return True, (None, None)
 
379
            else:
 
380
                return True, (branch, None)
 
381
        branches = []
 
382
        for branch, repo in BzrDir.find_bzrdirs(transport, evaluate=evaluate):
389
383
            if repo is not None:
390
 
                ret.extend(repo.find_branches())
391
 
            if branches is not None:
392
 
                ret.extend(branches)
393
 
        return ret
 
384
                branches.extend(repo.find_branches())
 
385
            if branch is not None:
 
386
                branches.append(branch)
 
387
        return branches
394
388
 
395
389
    def destroy_repository(self):
396
390
        """Destroy the repository in this BzrDir"""
2615
2609
    def convert(self, to_convert, pb):
2616
2610
        """See Converter.convert()."""
2617
2611
        self.bzrdir = to_convert
2618
 
        if pb is not None:
2619
 
            warnings.warn("pb parameter to convert() is deprecated")
2620
 
        self.pb = ui.ui_factory.nested_progress_bar()
2621
 
        try:
2622
 
            ui.ui_factory.note('starting upgrade from format 4 to 5')
2623
 
            if isinstance(self.bzrdir.transport, local.LocalTransport):
2624
 
                self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
2625
 
            self._convert_to_weaves()
2626
 
            return BzrDir.open(self.bzrdir.root_transport.base)
2627
 
        finally:
2628
 
            self.pb.finished()
 
2612
        self.pb = pb
 
2613
        ui.ui_factory.note('starting upgrade from format 4 to 5')
 
2614
        if isinstance(self.bzrdir.transport, local.LocalTransport):
 
2615
            self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
 
2616
        self._convert_to_weaves()
 
2617
        return BzrDir.open(self.bzrdir.root_transport.base)
2629
2618
 
2630
2619
    def _convert_to_weaves(self):
2631
2620
        ui.ui_factory.note('note: upgrade may be faster if all store files are ungzipped first')
2872
2861
    def convert(self, to_convert, pb):
2873
2862
        """See Converter.convert()."""
2874
2863
        self.bzrdir = to_convert
2875
 
        pb = ui.ui_factory.nested_progress_bar()
2876
 
        try:
2877
 
            ui.ui_factory.note('starting upgrade from format 5 to 6')
2878
 
            self._convert_to_prefixed()
2879
 
            return BzrDir.open(self.bzrdir.root_transport.base)
2880
 
        finally:
2881
 
            pb.finished()
 
2864
        self.pb = pb
 
2865
        ui.ui_factory.note('starting upgrade from format 5 to 6')
 
2866
        self._convert_to_prefixed()
 
2867
        return BzrDir.open(self.bzrdir.root_transport.base)
2882
2868
 
2883
2869
    def _convert_to_prefixed(self):
2884
2870
        from bzrlib.store import TransportStore
2917
2903
        from bzrlib.repofmt.weaverepo import RepositoryFormat7
2918
2904
        from bzrlib.branch import BzrBranchFormat5
2919
2905
        self.bzrdir = to_convert
2920
 
        self.pb = ui.ui_factory.nested_progress_bar()
 
2906
        self.pb = pb
2921
2907
        self.count = 0
2922
2908
        self.total = 20 # the steps we know about
2923
2909
        self.garbage_inventories = []
3003
2989
            'branch-format',
3004
2990
            BzrDirMetaFormat1().get_format_string(),
3005
2991
            mode=self.file_mode)
3006
 
        self.pb.finished()
3007
2992
        return BzrDir.open(self.bzrdir.root_transport.base)
3008
2993
 
3009
2994
    def make_lock(self, name):
3045
3030
    def convert(self, to_convert, pb):
3046
3031
        """See Converter.convert()."""
3047
3032
        self.bzrdir = to_convert
3048
 
        self.pb = ui.ui_factory.nested_progress_bar()
 
3033
        self.pb = pb
3049
3034
        self.count = 0
3050
3035
        self.total = 1
3051
3036
        self.step('checking repository format')
3059
3044
                ui.ui_factory.note('starting repository conversion')
3060
3045
                converter = CopyConverter(self.target_format.repository_format)
3061
3046
                converter.convert(repo, pb)
3062
 
        for branch in self.bzrdir.list_branches():
 
3047
        try:
 
3048
            branch = self.bzrdir.open_branch()
 
3049
        except errors.NotBranchError:
 
3050
            pass
 
3051
        else:
3063
3052
            # TODO: conversions of Branch and Tree should be done by
3064
3053
            # InterXFormat lookups/some sort of registry.
3065
3054
            # Avoid circular imports
3107
3096
                isinstance(self.target_format.workingtree_format,
3108
3097
                    workingtree_4.WorkingTreeFormat6)):
3109
3098
                workingtree_4.Converter4or5to6().convert(tree)
3110
 
        self.pb.finished()
3111
3099
        return to_convert
3112
3100
 
3113
3101