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

  • Committer: Robert Collins
  • Date: 2008-02-13 03:30:01 UTC
  • mfrom: (3221 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3224.
  • Revision ID: robertc@robertcollins.net-20080213033001-rw70ul0zb02ph856
Merge to fix conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
270
270
            # the Format factory and creation methods that are
271
271
            # permitted to do this.
272
272
            self._set_inventory(_inventory, dirty=False)
 
273
        self._detect_case_handling()
 
274
 
 
275
    def _detect_case_handling(self):
 
276
        wt_trans = self.bzrdir.get_workingtree_transport(None)
 
277
        try:
 
278
            wt_trans.stat("FoRMaT")
 
279
        except errors.NoSuchFile:
 
280
            self.case_sensitive = True
 
281
        else:
 
282
            self.case_sensitive = False
 
283
 
 
284
        self._setup_directory_is_tree_reference()
273
285
 
274
286
    branch = property(
275
287
        fget=lambda self: self._branch,
347
359
        """
348
360
        return WorkingTree.open(path, _unsupported=True)
349
361
 
 
362
    @staticmethod
 
363
    def find_trees(location):
 
364
        def list_current(transport):
 
365
            return [d for d in transport.list_dir('') if d != '.bzr']
 
366
        def evaluate(bzrdir):
 
367
            try:
 
368
                tree = bzrdir.open_workingtree()
 
369
            except errors.NoWorkingTree:
 
370
                return True, None
 
371
            else:
 
372
                return True, tree
 
373
        transport = get_transport(location)
 
374
        iterator = bzrdir.BzrDir.find_bzrdirs(transport, evaluate=evaluate,
 
375
                                              list_current=list_current)
 
376
        return [t for t in iterator if t is not None]
 
377
 
350
378
    # should be deprecated - this is slow and in any case treating them as a
351
379
    # container is (we now know) bad style -- mbp 20070302
352
380
    ## @deprecated_method(zero_fifteen)
980
1008
            other_tree.unlock()
981
1009
        other_tree.bzrdir.retire_bzrdir()
982
1010
 
983
 
    def _directory_is_tree_reference(self, relpath):
 
1011
    def _setup_directory_is_tree_reference(self):
 
1012
        if self._branch.repository._format.supports_tree_reference:
 
1013
            self._directory_is_tree_reference = \
 
1014
                self._directory_may_be_tree_reference
 
1015
        else:
 
1016
            self._directory_is_tree_reference = \
 
1017
                self._directory_is_never_tree_reference
 
1018
 
 
1019
    def _directory_is_never_tree_reference(self, relpath):
 
1020
        return False
 
1021
 
 
1022
    def _directory_may_be_tree_reference(self, relpath):
984
1023
        # as a special case, if a directory contains control files then 
985
1024
        # it's a tree reference, except that the root of the tree is not
986
1025
        return relpath and osutils.isdir(self.abspath(relpath) + u"/.bzr")
1013
1052
        sub_path = self.id2path(file_id)
1014
1053
        branch_transport = mkdirs(sub_path)
1015
1054
        if format is None:
1016
 
            format = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
 
1055
            format = self.bzrdir.cloning_metadir()
1017
1056
        branch_transport.ensure_base()
1018
1057
        branch_bzrdir = format.initialize_on_transport(branch_transport)
1019
1058
        try:
1020
1059
            repo = branch_bzrdir.find_repository()
1021
1060
        except errors.NoRepositoryPresent:
1022
1061
            repo = branch_bzrdir.create_repository()
1023
 
            assert repo.supports_rich_root()
1024
 
        else:
1025
 
            if not repo.supports_rich_root():
1026
 
                raise errors.RootNotRich()
 
1062
        if not repo.supports_rich_root():
 
1063
            raise errors.RootNotRich()
1027
1064
        new_branch = branch_bzrdir.create_branch()
1028
1065
        new_branch.pull(self.branch)
1029
1066
        for parent_id in self.get_parent_ids():
1318
1355
                only_change_inv = True
1319
1356
            elif self.has_filename(from_rel) and not self.has_filename(to_rel):
1320
1357
                only_change_inv = False
 
1358
            elif (sys.platform == 'win32'
 
1359
                and from_rel.lower() == to_rel.lower()
 
1360
                and self.has_filename(from_rel)):
 
1361
                only_change_inv = False
1321
1362
            else:
1322
1363
                # something is wrong, so lets determine what exactly
1323
1364
                if not self.has_filename(from_rel) and \
1889
1930
                     kind, executable) in self._iter_changes(self.basis_tree(),
1890
1931
                         include_unchanged=True, require_versioned=False,
1891
1932
                         want_unversioned=True, specific_files=files):
1892
 
                    # Check if it's an unknown (but not ignored) OR
1893
 
                    # changed (but not deleted) :
1894
 
                    if ((versioned == (False, False) or
1895
 
                         content_change and kind[1] != None)
1896
 
                        and not self.is_ignored(path[1])):
 
1933
                    if versioned == (False, False):
 
1934
                        # The record is unknown ...
 
1935
                        if not self.is_ignored(path[1]):
 
1936
                            # ... but not ignored
 
1937
                            has_changed_files = True
 
1938
                            break
 
1939
                    elif content_change and (kind[1] != None):
 
1940
                        # Versioned and changed, but not deleted
1897
1941
                        has_changed_files = True
1898
1942
                        break
1899
1943
 
1978
2022
                self.set_parent_trees(parent_trees)
1979
2023
                resolve(self)
1980
2024
            else:
1981
 
                resolve(self, filenames, ignore_misses=True)
 
2025
                resolve(self, filenames, ignore_misses=True, recursive=True)
1982
2026
        finally:
1983
2027
            if basis_tree is not None:
1984
2028
                basis_tree.unlock()
2718
2762
        control_files.put_bytes('pending-merges', '')
2719
2763
        
2720
2764
 
2721
 
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None):
 
2765
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None,
 
2766
                   accelerator_tree=None):
2722
2767
        """See WorkingTreeFormat.initialize()."""
2723
2768
        if not isinstance(a_bzrdir.transport, LocalTransport):
2724
2769
            raise errors.NotLocalUrl(a_bzrdir.transport.base)
2810
2855
        return LockableFiles(transport, self._lock_file_name, 
2811
2856
                             self._lock_class)
2812
2857
 
2813
 
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None):
 
2858
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None,
 
2859
                   accelerator_tree=None):
2814
2860
        """See WorkingTreeFormat.initialize().
2815
2861
        
2816
 
        revision_id allows creating a working tree at a different
2817
 
        revision than the branch is at.
 
2862
        :param revision_id: if supplied, create a working tree at a different
 
2863
            revision than the branch is at.
 
2864
        :param accelerator_tree: A tree which can be used for retrieving file
 
2865
            contents more quickly than the revision tree, i.e. a workingtree.
 
2866
            The revision tree will be used for cases where accelerator_tree's
 
2867
            content is different.
2818
2868
        """
2819
2869
        if not isinstance(a_bzrdir.transport, LocalTransport):
2820
2870
            raise errors.NotLocalUrl(a_bzrdir.transport.base)