~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Aaron Bentley
  • Date: 2008-04-03 20:59:59 UTC
  • mto: (3242.3.25 stacking-policy)
  • mto: This revision was merged to the branch mainline in revision 3538.
  • Revision ID: aaron@aaronbentley.com-20080403205959-abiglb18vfp3bkpa
Initial determination of stacking policy

Show diffs side-by-side

added added

removed removed

Lines of Context:
358
358
 
359
359
    def determine_repository_policy(self, force_new_repo=False):
360
360
        def repository_policy(found_bzrdir):
 
361
            stack_on = None
 
362
            config = found_bzrdir.get_config()
 
363
            stop = False
 
364
            if config is not None:
 
365
                stack_on = config.get_option('default_stack_on')
 
366
                if stack_on is not None:
 
367
                    stop = True
361
368
            # does it have a repository ?
362
369
            try:
363
370
                repository = found_bzrdir.open_repository()
364
371
            except errors.NoRepositoryPresent:
 
372
                repository = None
 
373
            else:
 
374
                if ((found_bzrdir.root_transport.base !=
 
375
                     self.root_transport.base) and not repository.is_shared()):
 
376
                    repository = None
 
377
                else:
 
378
                    stop = True
 
379
            if not stop:
365
380
                return None, False
366
 
            stop = not repository.is_shared()
367
 
            if ((found_bzrdir.root_transport.base ==
368
 
                 self.root_transport.base) or repository.is_shared()):
369
 
                return UseExistingRepository(repository), True
 
381
            if repository:
 
382
                return UseExistingRepository(repository, stack_on), True
370
383
            else:
371
 
                return None, stop
 
384
                return CreateRepository(repository, stack_on), True
372
385
 
373
386
        if not force_new_repo:
374
387
            policy = self._find_containing(repository_policy)
2673
2686
 
2674
2687
class CreateRepository(object):
2675
2688
 
2676
 
    def __init__(self, bzrdir):
 
2689
    def __init__(self, bzrdir, stack_on=None):
2677
2690
        self._bzrdir = bzrdir
 
2691
        self._stack_on = stack_on
2678
2692
 
2679
2693
    def apply(self):
2680
2694
        return self._bzrdir.create_repository()
2682
2696
 
2683
2697
class UseExistingRepository(object):
2684
2698
 
2685
 
    def __init__(self, repository):
 
2699
    def __init__(self, repository, stack_on=None):
2686
2700
        self._repository = repository
 
2701
        self._stack_on = stack_on
2687
2702
 
2688
2703
    def apply(self):
2689
2704
        return self._repository