~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisiontree.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-01-02 08:23:44 UTC
  • mfrom: (3140.1.9 find-branches)
  • Revision ID: pqm@pqm.ubuntu.com-20080102082344-qret383z2bdk1ud4
Optimize find_branches for standalone repositories (abentley)

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from bzrlib import (
22
22
    osutils,
23
23
    revision,
 
24
    symbol_versioning,
24
25
    )
25
26
from bzrlib.tree import Tree
26
27
 
40
41
        self._repository = branch
41
42
        self._weave_store = branch.weave_store
42
43
        self._inventory = inv
43
 
        self._revision_id = osutils.safe_revision_id(revision_id)
 
44
        self._revision_id = revision_id
44
45
 
45
46
    def supports_tree_reference(self):
46
47
        return True
61
62
        """Return the revision id associated with this tree."""
62
63
        return self._revision_id
63
64
 
 
65
    @symbol_versioning.deprecated_method(symbol_versioning.zero_ninety)
64
66
    def get_weave(self, file_id):
65
 
        file_id = osutils.safe_file_id(file_id)
 
67
        return self._get_weave(file_id)
 
68
 
 
69
    def _get_weave(self, file_id):
66
70
        return self._weave_store.get_weave(file_id,
67
71
                self._repository.get_transaction())
68
72
 
69
73
    def get_file_lines(self, file_id):
70
 
        file_id = osutils.safe_file_id(file_id)
71
74
        ie = self._inventory[file_id]
72
 
        weave = self.get_weave(file_id)
 
75
        weave = self._get_weave(file_id)
73
76
        return weave.get_lines(ie.revision)
74
77
 
75
78
    def get_file_text(self, file_id):
76
 
        file_id = osutils.safe_file_id(file_id)
77
79
        return ''.join(self.get_file_lines(file_id))
78
80
 
79
 
    def get_file(self, file_id):
80
 
        file_id = osutils.safe_file_id(file_id)
 
81
    def get_file(self, file_id, path=None):
81
82
        return StringIO(self.get_file_text(file_id))
82
83
 
83
 
    def annotate_iter(self, file_id):
 
84
    def iter_files_bytes(self, desired_files):
 
85
        """See Tree.extract_files_bytes.
 
86
 
 
87
        This version is implemented on top of Repository.extract_files_bytes"""
 
88
        repo_desired_files = [(f, self.inventory[f].revision, i)
 
89
                              for f, i in desired_files]
 
90
        return self._repository.iter_files_bytes(repo_desired_files)
 
91
 
 
92
    def annotate_iter(self, file_id,
 
93
                      default_revision=revision.CURRENT_REVISION):
84
94
        """See Tree.annotate_iter"""
85
 
        file_id = osutils.safe_file_id(file_id)
86
 
        w = self.get_weave(file_id)
 
95
        w = self._get_weave(file_id)
87
96
        return w.annotate_iter(self.inventory[file_id].revision)
88
97
 
89
98
    def get_file_size(self, file_id):
90
 
        file_id = osutils.safe_file_id(file_id)
91
99
        return self._inventory[file_id].text_size
92
100
 
93
101
    def get_file_sha1(self, file_id, path=None, stat_value=None):
94
 
        file_id = osutils.safe_file_id(file_id)
95
102
        ie = self._inventory[file_id]
96
103
        if ie.kind == "file":
97
104
            return ie.text_sha1
98
105
        return None
99
106
 
100
107
    def get_file_mtime(self, file_id, path=None):
101
 
        file_id = osutils.safe_file_id(file_id)
102
108
        ie = self._inventory[file_id]
103
109
        revision = self._repository.get_revision(ie.revision)
104
110
        return revision.timestamp
105
111
 
106
112
    def is_executable(self, file_id, path=None):
107
 
        file_id = osutils.safe_file_id(file_id)
108
113
        ie = self._inventory[file_id]
109
114
        if ie.kind != "file":
110
115
            return None
124
129
            yield path, 'V', entry.kind, entry.file_id, entry
125
130
 
126
131
    def get_symlink_target(self, file_id):
127
 
        file_id = osutils.safe_file_id(file_id)
128
132
        ie = self._inventory[file_id]
129
133
        return ie.symlink_target;
130
134
 
136
140
            return self.inventory.root.file_id
137
141
 
138
142
    def kind(self, file_id):
139
 
        file_id = osutils.safe_file_id(file_id)
140
143
        return self._inventory[file_id].kind
141
144
 
 
145
    def path_content_summary(self, path):
 
146
        """See Tree.path_content_summary."""
 
147
        id = self.inventory.path2id(path)
 
148
        if id is None:
 
149
            return ('missing', None, None, None)
 
150
        entry = self._inventory[id]
 
151
        kind = entry.kind
 
152
        if kind == 'file':
 
153
            return (kind, entry.text_size, entry.executable, entry.text_sha1)
 
154
        elif kind == 'symlink':
 
155
            return (kind, None, None, entry.symlink_target)
 
156
        else:
 
157
            return (kind, None, None, None)
 
158
 
142
159
    def _comparison_data(self, entry, path):
143
160
        if entry is None:
144
161
            return None, False, None
148
165
        assert entry.text_size is not None
149
166
        return entry.text_size
150
167
 
 
168
    def _get_ancestors(self, default_revision):
 
169
        return set(self._repository.get_ancestry(self._revision_id,
 
170
                                                 topo_sorted=False))
 
171
 
151
172
    def lock_read(self):
152
173
        self._repository.lock_read()
153
174