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

  • Committer: Jelmer Vernooij
  • Date: 2010-04-30 11:35:43 UTC
  • mfrom: (5195 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5197.
  • Revision ID: jelmer@samba.org-20100430113543-tiqqhmqa3d8no4iu
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
86
86
    registry,
87
87
    symbol_versioning,
88
88
    )
89
 
 
90
 
 
91
 
class BzrDir(object):
 
89
    
 
90
    
 
91
class ControlComponent(object):
 
92
    """Abstract base class for control directory components.
 
93
    
 
94
    This provides interfaces that are common across bzrdirs, 
 
95
    repositories, branches, and workingtree control directories.
 
96
    
 
97
    They all expose two urls and transports: the *user* URL is the 
 
98
    one that stops above the control directory (eg .bzr) and that 
 
99
    should normally be used in messages, and the *control* URL is
 
100
    under that in eg .bzr/checkout and is used to read the control
 
101
    files.
 
102
    
 
103
    This can be used as a mixin and is intended to fit with 
 
104
    foreign formats.
 
105
    """
 
106
    
 
107
    @property
 
108
    def control_transport(self):
 
109
        raise NotImplementedError
 
110
   
 
111
    @property
 
112
    def control_url(self):
 
113
        return self.control_transport.base
 
114
    
 
115
    @property
 
116
    def user_transport(self):
 
117
        raise NotImplementedError
 
118
        
 
119
    @property
 
120
    def user_url(self):
 
121
        return self.user_transport.base
 
122
    
 
123
 
 
124
class BzrDir(ControlComponent):
92
125
    """A .bzr control diretory.
93
126
 
94
127
    BzrDir instances let you create or open any of the things that can be
261
294
                # copied, and finally if we are copying up to a specific
262
295
                # revision_id then we can use the pending-ancestry-result which
263
296
                # does not require traversing all of history to describe it.
264
 
                if (result_repo.bzrdir.root_transport.base ==
265
 
                    result.root_transport.base and not require_stacking and
 
297
                if (result_repo.user_url == result.user_url
 
298
                    and not require_stacking and
266
299
                    revision_id is not None):
267
300
                    fetch_spec = graph.PendingAncestryResult(
268
301
                        [revision_id], local_repo)
458
491
            stop = False
459
492
            stack_on = config.get_default_stack_on()
460
493
            if stack_on is not None:
461
 
                stack_on_pwd = found_bzrdir.root_transport.base
 
494
                stack_on_pwd = found_bzrdir.user_url
462
495
                stop = True
463
496
            # does it have a repository ?
464
497
            try:
466
499
            except errors.NoRepositoryPresent:
467
500
                repository = None
468
501
            else:
469
 
                if ((found_bzrdir.root_transport.base !=
470
 
                     self.root_transport.base) and not repository.is_shared()):
 
502
                if (found_bzrdir.user_url != self.user_url 
 
503
                    and not repository.is_shared()):
471
504
                    # Don't look higher, can't use a higher shared repo.
472
505
                    repository = None
473
506
                    stop = True
669
702
            if stop:
670
703
                return result
671
704
            next_transport = found_bzrdir.root_transport.clone('..')
672
 
            if (found_bzrdir.root_transport.base == next_transport.base):
 
705
            if (found_bzrdir.user_url == next_transport.base):
673
706
                # top of the file system
674
707
                return None
675
708
            # find the next containing bzrdir
692
725
                repository = found_bzrdir.open_repository()
693
726
            except errors.NoRepositoryPresent:
694
727
                return None, False
695
 
            if found_bzrdir.root_transport.base == self.root_transport.base:
 
728
            if found_bzrdir.user_url == self.user_url:
696
729
                return repository, True
697
730
            elif repository.is_shared():
698
731
                return repository, True
814
847
        :param _transport: the transport this dir is based at.
815
848
        """
816
849
        self._format = _format
 
850
        # these are also under the more standard names of 
 
851
        # control_transport and user_transport
817
852
        self.transport = _transport.clone('.bzr')
818
853
        self.root_transport = _transport
819
854
        self._mode_check_done = False
 
855
        
 
856
    @property 
 
857
    def user_transport(self):
 
858
        return self.root_transport
 
859
        
 
860
    @property
 
861
    def control_transport(self):
 
862
        return self.transport
820
863
 
821
864
    def is_control_filename(self, filename):
822
865
        """True if filename is the name of a path which is reserved for bzrdir's.
1330
1373
        self.create_hook(hooks.HookPoint('pre_open',
1331
1374
            "Invoked before attempting to open a BzrDir with the transport "
1332
1375
            "that the open will use.", (1, 14), None))
 
1376
        self.create_hook(hooks.HookPoint('post_repo_init',
 
1377
            "Invoked after a repository has been initialized. "
 
1378
            "post_repo_init is called with a "
 
1379
            "bzrlib.bzrdir.RepoInitHookParams.",
 
1380
            (2, 2), None))
1333
1381
 
1334
1382
# install the default hooks
1335
1383
BzrDir.hooks = BzrDirHooks()
1336
1384
 
1337
1385
 
 
1386
class RepoInitHookParams(object):
 
1387
    """Object holding parameters passed to *_repo_init hooks.
 
1388
 
 
1389
    There are 4 fields that hooks may wish to access:
 
1390
 
 
1391
    :ivar repository: Repository created
 
1392
    :ivar format: Repository format
 
1393
    :ivar bzrdir: The bzrdir for the repository
 
1394
    :ivar shared: The repository is shared
 
1395
    """
 
1396
 
 
1397
    def __init__(self, repository, format, a_bzrdir, shared):
 
1398
        """Create a group of RepoInitHook parameters.
 
1399
 
 
1400
        :param repository: Repository created
 
1401
        :param format: Repository format
 
1402
        :param bzrdir: The bzrdir for the repository
 
1403
        :param shared: The repository is shared
 
1404
        """
 
1405
        self.repository = repository
 
1406
        self.format = format
 
1407
        self.bzrdir = a_bzrdir
 
1408
        self.shared = shared
 
1409
 
 
1410
    def __eq__(self, other):
 
1411
        return self.__dict__ == other.__dict__
 
1412
 
 
1413
    def __repr__(self):
 
1414
        if self.repository:
 
1415
            return "<%s for %s>" % (self.__class__.__name__,
 
1416
                self.repository)
 
1417
        else:
 
1418
            return "<%s for %s>" % (self.__class__.__name__,
 
1419
                self.bzrdir)
 
1420
 
 
1421
 
1338
1422
class BzrDirPreSplitOut(BzrDir):
1339
1423
    """A common class for the all-in-one formats."""
1340
1424
 
2651
2735
            if isinstance(self.bzrdir.transport, local.LocalTransport):
2652
2736
                self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
2653
2737
            self._convert_to_weaves()
2654
 
            return BzrDir.open(self.bzrdir.root_transport.base)
 
2738
            return BzrDir.open(self.bzrdir.user_url)
2655
2739
        finally:
2656
2740
            self.pb.finished()
2657
2741
 
2904
2988
        try:
2905
2989
            ui.ui_factory.note('starting upgrade from format 5 to 6')
2906
2990
            self._convert_to_prefixed()
2907
 
            return BzrDir.open(self.bzrdir.root_transport.base)
 
2991
            return BzrDir.open(self.bzrdir.user_url)
2908
2992
        finally:
2909
2993
            pb.finished()
2910
2994
 
3032
3116
            BzrDirMetaFormat1().get_format_string(),
3033
3117
            mode=self.file_mode)
3034
3118
        self.pb.finished()
3035
 
        return BzrDir.open(self.bzrdir.root_transport.base)
 
3119
        return BzrDir.open(self.bzrdir.user_url)
3036
3120
 
3037
3121
    def make_lock(self, name):
3038
3122
        """Make a lock for the new control dir name."""
3619
3703
            try:
3620
3704
                stack_on = urlutils.rebase_url(self._stack_on,
3621
3705
                    self._stack_on_pwd,
3622
 
                    branch.bzrdir.root_transport.base)
 
3706
                    branch.user_url)
3623
3707
            except errors.InvalidRebaseURLs:
3624
3708
                stack_on = self._get_full_stack_on()
3625
3709
        try: