~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: 2007-11-04 18:51:39 UTC
  • mfrom: (2961.1.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20071104185139-kaio3sneodg2kp71
Authentication ring implementation (read-only)

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
from cStringIO import StringIO
20
20
 
21
21
from bzrlib import (
22
 
    errors,
23
22
    osutils,
24
23
    revision,
25
24
    symbol_versioning,
32
31
 
33
32
    File text can be retrieved from the text store.
34
33
    """
35
 
 
 
34
    
36
35
    def __init__(self, branch, inv, revision_id):
37
36
        # for compatability the 'branch' parameter has not been renamed to 
38
37
        # repository at this point. However, we should change RevisionTree's
40
39
        # construction - this will mean that we can change the constructor
41
40
        # with much less chance of breaking client code.
42
41
        self._repository = branch
 
42
        self._weave_store = branch.weave_store
43
43
        self._inventory = inv
44
44
        self._revision_id = revision_id
45
 
        self._rules_searcher = None
46
45
 
47
46
    def supports_tree_reference(self):
48
47
        return True
63
62
        """Return the revision id associated with this tree."""
64
63
        return self._revision_id
65
64
 
 
65
    @symbol_versioning.deprecated_method(symbol_versioning.zero_ninety)
 
66
    def get_weave(self, file_id):
 
67
        return self._get_weave(file_id)
 
68
 
 
69
    def _get_weave(self, file_id):
 
70
        return self._weave_store.get_weave(file_id,
 
71
                self._repository.get_transaction())
 
72
 
66
73
    def get_file_lines(self, file_id):
67
 
        return osutils.split_lines(self.get_file_text(file_id))
 
74
        ie = self._inventory[file_id]
 
75
        weave = self._get_weave(file_id)
 
76
        return weave.get_lines(ie.revision)
68
77
 
69
78
    def get_file_text(self, file_id):
70
 
        return list(self.iter_files_bytes([(file_id, None)]))[0][1]
 
79
        return ''.join(self.get_file_lines(file_id))
71
80
 
72
81
    def get_file(self, file_id, path=None):
73
82
        return StringIO(self.get_file_text(file_id))
74
83
 
75
84
    def iter_files_bytes(self, desired_files):
76
 
        """See Tree.iter_files_bytes.
 
85
        """See Tree.extract_files_bytes.
77
86
 
78
87
        This version is implemented on top of Repository.extract_files_bytes"""
79
88
        repo_desired_files = [(f, self.inventory[f].revision, i)
80
89
                              for f, i in desired_files]
81
 
        try:
82
 
            for result in self._repository.iter_files_bytes(repo_desired_files):
83
 
                yield result
84
 
        except errors.RevisionNotPresent, e:
85
 
            raise errors.NoSuchFile(e.revision_id)
 
90
        return self._repository.iter_files_bytes(repo_desired_files)
86
91
 
87
92
    def annotate_iter(self, file_id,
88
93
                      default_revision=revision.CURRENT_REVISION):
89
94
        """See Tree.annotate_iter"""
90
 
        text_key = (file_id, self.inventory[file_id].revision)
91
 
        annotations = self._repository.texts.annotate(text_key)
92
 
        return [(key[-1], line) for key, line in annotations]
 
95
        w = self._get_weave(file_id)
 
96
        return w.annotate_iter(self.inventory[file_id].revision)
93
97
 
94
98
    def get_file_size(self, file_id):
95
 
        """See Tree.get_file_size"""
96
99
        return self._inventory[file_id].text_size
97
100
 
98
101
    def get_file_sha1(self, file_id, path=None, stat_value=None):
159
162
        return entry.kind, entry.executable, None
160
163
 
161
164
    def _file_size(self, entry, stat_value):
 
165
        assert entry.text_size is not None
162
166
        return entry.text_size
163
167
 
164
168
    def _get_ancestors(self, default_revision):
203
207
            for dir in reversed(dirblock):
204
208
                if dir[2] == _directory:
205
209
                    pending.append(dir)
206
 
 
207
 
    def _get_rules_searcher(self, default_searcher):
208
 
        """See Tree._get_rules_searcher."""
209
 
        if self._rules_searcher is None:
210
 
            self._rules_searcher = super(RevisionTree,
211
 
                self)._get_rules_searcher(default_searcher)
212
 
        return self._rules_searcher