~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree_4.py

  • Committer: Patch Queue Manager
  • Date: 2012-09-05 20:52:26 UTC
  • mfrom: (6549.3.1 dev_2.5_integration)
  • Revision ID: pqm@pqm.ubuntu.com-20120905205226-8s3bzolvduug3ifj
(gz) Merge 2.5 (Martin Packman)

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
    cache_utf8,
39
39
    config,
40
40
    conflicts as _mod_conflicts,
 
41
    controldir,
41
42
    debug,
42
43
    dirstate,
43
44
    errors,
68
69
    realpath,
69
70
    safe_unicode,
70
71
    )
 
72
from bzrlib.symbol_versioning import (
 
73
    deprecated_in,
 
74
    deprecated_method,
 
75
    )
71
76
from bzrlib.transport.local import LocalTransport
72
77
from bzrlib.tree import (
73
78
    InterTree,
414
419
                return link_or_sha1
415
420
        return None
416
421
 
417
 
    def _get_inventory(self):
 
422
    def _get_root_inventory(self):
418
423
        """Get the inventory for the tree. This is only valid within a lock."""
419
424
        if 'evil' in debug.debug_flags:
420
425
            trace.mutter_callsite(2,
425
430
        self._generate_inventory()
426
431
        return self._inventory
427
432
 
 
433
    @deprecated_method(deprecated_in((2, 5, 0)))
 
434
    def _get_inventory(self):
 
435
        return self.root_inventory
 
436
 
428
437
    inventory = property(_get_inventory,
429
438
                         doc="Inventory of this Tree")
430
439
 
 
440
    root_inventory = property(_get_root_inventory,
 
441
        "Root inventory of this tree")
 
442
 
431
443
    @needs_read_lock
432
444
    def get_parent_ids(self):
433
445
        """See Tree.get_parent_ids.
680
692
 
681
693
        if self._inventory is not None:
682
694
            update_inventory = True
683
 
            inv = self.inventory
 
695
            inv = self.root_inventory
684
696
            to_dir_id = to_entry[0][2]
685
697
            to_dir_ie = inv[to_dir_id]
686
698
        else:
882
894
    @needs_read_lock
883
895
    def path2id(self, path):
884
896
        """Return the id for path in this tree."""
 
897
        if isinstance(path, list):
 
898
            if path == []:
 
899
                path = [""]
 
900
            path = osutils.pathjoin(*path)
885
901
        path = path.strip('/')
886
902
        entry = self._get_entry(path=path)
887
903
        if entry == (None, None):
1035
1051
 
1036
1052
        This is a meaningless operation for dirstate, but we obey it anyhow.
1037
1053
        """
1038
 
        return self.inventory
 
1054
        return self.root_inventory
1039
1055
 
1040
1056
    @needs_read_lock
1041
1057
    def revision_tree(self, revision_id):
1149
1165
                # _make_delta if we can't get the RevisionTree
1150
1166
                pass
1151
1167
            else:
1152
 
                delta = rev_tree.inventory._make_delta(
1153
 
                    basis_tree.inventory)
 
1168
                delta = rev_tree.root_inventory._make_delta(
 
1169
                    basis_tree.root_inventory)
1154
1170
                dirstate.update_basis_by_delta(delta, rev_id)
1155
1171
                updated = True
1156
1172
        if not updated:
1327
1343
        # being created.
1328
1344
        self._inventory = None
1329
1345
        # generate a delta,
1330
 
        delta = inv._make_delta(self.inventory)
 
1346
        delta = inv._make_delta(self.root_inventory)
1331
1347
        # and apply it.
1332
1348
        self.apply_inventory_delta(delta)
1333
1349
        if had_inventory:
1353
1369
            base_tree = trees[0][1]
1354
1370
        state = self.current_dirstate()
1355
1371
        # We don't support ghosts yet
1356
 
        state.set_state_from_scratch(base_tree.inventory, trees, [])
 
1372
        state.set_state_from_scratch(base_tree.root_inventory, trees, [])
1357
1373
 
1358
1374
 
1359
1375
class ContentFilterAwareSHA1Provider(dirstate.SHA1Provider):
1597
1613
    def _get_matchingbzrdir(self):
1598
1614
        """Overrideable method to get a bzrdir for testing."""
1599
1615
        # please test against something that will let us do tree references
1600
 
        return bzrdir.format_registry.make_bzrdir(
 
1616
        return controldir.format_registry.make_bzrdir(
1601
1617
            'development-subtree')
1602
1618
 
1603
1619
    _matchingbzrdir = property(__get_matchingbzrdir)
1765
1781
        if path is not None:
1766
1782
            path = path.encode('utf8')
1767
1783
        parent_index = self._get_parent_index()
1768
 
        return self._dirstate._get_entry(parent_index, fileid_utf8=file_id, path_utf8=path)
 
1784
        return self._dirstate._get_entry(parent_index, fileid_utf8=file_id,
 
1785
            path_utf8=path)
1769
1786
 
1770
1787
    def _generate_inventory(self):
1771
1788
        """Create and set self.inventory from the dirstate object.
1919
1936
        """Return the revision id for this tree."""
1920
1937
        return self._revision_id
1921
1938
 
1922
 
    def _get_inventory(self):
 
1939
    def _get_root_inventory(self):
1923
1940
        if self._inventory is not None:
1924
1941
            return self._inventory
1925
1942
        self._must_be_locked()
1926
1943
        self._generate_inventory()
1927
1944
        return self._inventory
1928
1945
 
 
1946
    root_inventory = property(_get_root_inventory,
 
1947
                         doc="Inventory of this Tree")
 
1948
 
 
1949
    @deprecated_method(deprecated_in((2, 5, 0)))
 
1950
    def _get_inventory(self):
 
1951
        return self.root_inventory
 
1952
 
1929
1953
    inventory = property(_get_inventory,
1930
1954
                         doc="Inventory of this Tree")
1931
1955
 
1975
1999
        # We use a standard implementation, because DirStateRevisionTree is
1976
2000
        # dealing with one of the parents of the current state
1977
2001
        if from_dir is None:
1978
 
            inv = self.inventory
 
2002
            inv = self.root_inventory
1979
2003
            from_dir_id = None
1980
2004
        else:
1981
2005
            inv, from_dir_id = self._path2inv_file_id(from_dir)
1982
2006
            if from_dir_id is None:
1983
2007
                # Directory not versioned
1984
2008
                return
 
2009
        # FIXME: Support nested trees
1985
2010
        entries = inv.iter_entries(from_dir=from_dir_id, recursive=recursive)
1986
2011
        if inv.root is not None and not include_root and from_dir is None:
1987
2012
            entries.next()
2009
2034
    def path2id(self, path):
2010
2035
        """Return the id for path in this tree."""
2011
2036
        # lookup by path: faster than splitting and walking the ivnentory.
 
2037
        if isinstance(path, list):
 
2038
            if path == []:
 
2039
                path = [""]
 
2040
            path = osutils.pathjoin(*path)
2012
2041
        entry = self._get_entry(path=path)
2013
2042
        if entry == (None, None):
2014
2043
            return None
2037
2066
        # So for now, we just build up the parent inventory, and extract
2038
2067
        # it the same way RevisionTree does.
2039
2068
        _directory = 'directory'
2040
 
        inv = self._get_inventory()
 
2069
        inv = self._get_root_inventory()
2041
2070
        top_id = inv.path2id(prefix)
2042
2071
        if top_id is None:
2043
2072
            pending = []