~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-04-22 07:28:09 UTC
  • mfrom: (1551.2.56 win32fixes)
  • Revision ID: pqm@pqm.ubuntu.com-20060422072809-b06e742274a4e9f4
Misc fixes for win32

Show diffs side-by-side

added added

removed removed

Lines of Context:
62
62
        a transport connected to the directory this bzr was opened from.
63
63
    """
64
64
 
65
 
    def break_lock(self):
66
 
        """Invoke break_lock on the first object in the bzrdir.
67
 
 
68
 
        If there is a tree, the tree is opened and break_lock() called.
69
 
        Otherwise, branch is tried, and finally repository.
70
 
        """
71
 
        try:
72
 
            thing_to_unlock = self.open_workingtree()
73
 
        except (errors.NotLocalUrl, errors.NoWorkingTree):
74
 
            try:
75
 
                thing_to_unlock = self.open_branch()
76
 
            except errors.NotBranchError:
77
 
                try:
78
 
                    thing_to_unlock = self.open_repository()
79
 
                except errors.NoRepositoryPresent:
80
 
                    return
81
 
        thing_to_unlock.break_lock()
82
 
 
83
65
    def can_convert_format(self):
84
66
        """Return true if this bzrdir is one whose format we can convert from."""
85
67
        return True
118
100
        if local_repo:
119
101
            # may need to copy content in
120
102
            if force_new_repo:
121
 
                result_repo = local_repo.clone(
122
 
                    result,
123
 
                    revision_id=revision_id,
124
 
                    basis=basis_repo)
125
 
                result_repo.set_make_working_trees(local_repo.make_working_trees())
 
103
                local_repo.clone(result, revision_id=revision_id, basis=basis_repo)
126
104
            else:
127
105
                try:
128
106
                    result_repo = result.find_repository()
134
112
                    result_repo.fetch(local_repo, revision_id=revision_id)
135
113
                except errors.NoRepositoryPresent:
136
114
                    # needed to make one anyway.
137
 
                    result_repo = local_repo.clone(
138
 
                        result,
139
 
                        revision_id=revision_id,
140
 
                        basis=basis_repo)
141
 
                    result_repo.set_make_working_trees(local_repo.make_working_trees())
 
115
                    local_repo.clone(result, revision_id=revision_id, basis=basis_repo)
142
116
        # 1 if there is a branch present
143
117
        #   make sure its content is available in the target repository
144
118
        #   clone it.
412
386
        self.transport = _transport.clone('.bzr')
413
387
        self.root_transport = _transport
414
388
 
415
 
    def is_control_filename(self, filename):
416
 
        """True if filename is the name of a path which is reserved for bzrdir's.
417
 
        
418
 
        :param filename: A filename within the root transport of this bzrdir.
419
 
 
420
 
        This is true IF and ONLY IF the filename is part of the namespace reserved
421
 
        for bzr control dirs. Currently this is the '.bzr' directory in the root
422
 
        of the root_transport. it is expected that plugins will need to extend
423
 
        this in the future - for instance to make bzr talk with svn working
424
 
        trees.
425
 
        """
426
 
        # this might be better on the BzrDirFormat class because it refers to 
427
 
        # all the possible bzrdir disk formats. 
428
 
        # This method is tested via the workingtree is_control_filename tests- 
429
 
        # it was extractd from WorkingTree.is_control_filename. If the methods
430
 
        # contract is extended beyond the current trivial  implementation please
431
 
        # add new tests for it to the appropriate place.
432
 
        return filename == '.bzr' or filename.startswith('.bzr/')
433
 
 
434
389
    def needs_format_conversion(self, format=None):
435
390
        """Return true if this bzrdir needs convert_format run on it.
436
391
        
594
549
            # no repo available, make a new one
595
550
            result.create_repository()
596
551
        elif source_repository is not None and result_repo is None:
597
 
            # have source, and want to make a new target repo
598
 
            # we dont clone the repo because that preserves attributes
599
 
            # like is_shared(), and we have not yet implemented a 
600
 
            # repository sprout().
601
 
            result_repo = result.create_repository()
602
 
        if result_repo is not None:
 
552
            # have soure, and want to make a new target repo
 
553
            source_repository.clone(result,
 
554
                                    revision_id=revision_id,
 
555
                                    basis=basis_repo)
 
556
        else:
603
557
            # fetch needed content into target.
604
558
            if basis_repo:
605
559
                # XXX FIXME RBC 20060214 need tests for this when the basis
627
581
                                            self._format._lock_file_name,
628
582
                                            self._format._lock_class)
629
583
 
630
 
    def break_lock(self):
631
 
        """Pre-splitout bzrdirs do not suffer from stale locks."""
632
 
        raise NotImplementedError(self.break_lock)
633
 
 
634
584
    def clone(self, url, revision_id=None, basis=None, force_new_repo=False):
635
585
        """See BzrDir.clone()."""
636
586
        from bzrlib.workingtree import WorkingTreeFormat2
638
588
        result = self._format._initialize_for_clone(url)
639
589
        basis_repo, basis_branch, basis_tree = self._get_basis_components(basis)
640
590
        self.open_repository().clone(result, revision_id=revision_id, basis=basis_repo)
641
 
        from_branch = self.open_branch()
642
 
        from_branch.clone(result, revision_id=revision_id)
 
591
        self.open_branch().clone(result, revision_id=revision_id)
643
592
        try:
644
593
            self.open_workingtree().clone(result, basis=basis_tree)
645
594
        except errors.NotLocalUrl:
647
596
            try:
648
597
                WorkingTreeFormat2().initialize(result)
649
598
            except errors.NotLocalUrl:
650
 
                # but we cannot do it for remote trees.
651
 
                to_branch = result.open_branch()
652
 
                WorkingTreeFormat2().stub_initialize_remote(to_branch.control_files)
 
599
                # but we canot do it for remote trees.
 
600
                pass
653
601
        return result
654
602
 
655
603
    def create_branch(self):