41
40
self._repository = branch
42
41
self._weave_store = branch.weave_store
43
42
self._inventory = inv
44
self._revision_id = osutils.safe_revision_id(revision_id)
46
def supports_tree_reference(self):
43
self._revision_id = revision_id
49
45
def get_parent_ids(self):
50
46
"""See Tree.get_parent_ids.
52
48
A RevisionTree's parents match the revision graph.
54
if self._revision_id in (None, revision.NULL_REVISION):
50
if self._revision_id not in (None, 'null:'):
57
51
parent_ids = self._repository.get_revision(
58
52
self._revision_id).parent_ids
61
57
def get_revision_id(self):
62
58
"""Return the revision id associated with this tree."""
63
59
return self._revision_id
65
@symbol_versioning.deprecated_method(symbol_versioning.zero_nineteen)
66
61
def get_weave(self, file_id):
67
return self._get_weave(file_id)
69
def _get_weave(self, file_id):
70
file_id = osutils.safe_file_id(file_id)
71
62
return self._weave_store.get_weave(file_id,
72
63
self._repository.get_transaction())
74
65
def get_file_lines(self, file_id):
75
file_id = osutils.safe_file_id(file_id)
76
66
ie = self._inventory[file_id]
77
weave = self._get_weave(file_id)
67
weave = self.get_weave(file_id)
78
68
return weave.get_lines(ie.revision)
80
70
def get_file_text(self, file_id):
81
file_id = osutils.safe_file_id(file_id)
82
71
return ''.join(self.get_file_lines(file_id))
84
73
def get_file(self, file_id):
85
file_id = osutils.safe_file_id(file_id)
86
74
return StringIO(self.get_file_text(file_id))
88
def annotate_iter(self, file_id,
89
default_revision=revision.CURRENT_REVISION):
76
def annotate_iter(self, file_id):
90
77
"""See Tree.annotate_iter"""
91
file_id = osutils.safe_file_id(file_id)
92
w = self._get_weave(file_id)
78
w = self.get_weave(file_id)
93
79
return w.annotate_iter(self.inventory[file_id].revision)
95
81
def get_file_size(self, file_id):
96
file_id = osutils.safe_file_id(file_id)
97
82
return self._inventory[file_id].text_size
99
84
def get_file_sha1(self, file_id, path=None, stat_value=None):
100
file_id = osutils.safe_file_id(file_id)
101
85
ie = self._inventory[file_id]
102
86
if ie.kind == "file":
103
87
return ie.text_sha1
106
90
def get_file_mtime(self, file_id, path=None):
107
file_id = osutils.safe_file_id(file_id)
108
91
ie = self._inventory[file_id]
109
92
revision = self._repository.get_revision(ie.revision)
110
93
return revision.timestamp
112
95
def is_executable(self, file_id, path=None):
113
file_id = osutils.safe_file_id(file_id)
114
96
ie = self._inventory[file_id]
115
97
if ie.kind != "file":
99
return self._inventory[file_id].executable
119
101
def has_filename(self, filename):
120
102
return bool(self.inventory.path2id(filename))
130
112
yield path, 'V', entry.kind, entry.file_id, entry
132
114
def get_symlink_target(self, file_id):
133
file_id = osutils.safe_file_id(file_id)
134
115
ie = self._inventory[file_id]
135
116
return ie.symlink_target;
137
def get_reference_revision(self, file_id, path=None):
138
return self.inventory[file_id].reference_revision
140
def get_root_id(self):
141
if self.inventory.root:
142
return self.inventory.root.file_id
144
118
def kind(self, file_id):
145
file_id = osutils.safe_file_id(file_id)
146
119
return self._inventory[file_id].kind
148
121
def _comparison_data(self, entry, path):
154
127
assert entry.text_size is not None
155
128
return entry.text_size
157
def _get_ancestors(self, default_revision):
158
return set(self._repository.get_ancestry(self._revision_id,
161
130
def lock_read(self):
162
131
self._repository.lock_read()
165
return '<%s instance at %x, rev_id=%r>' % (
166
self.__class__.__name__, id(self), self._revision_id)
168
133
def unlock(self):
169
134
self._repository.unlock()
171
def walkdirs(self, prefix=""):
172
_directory = 'directory'
174
top_id = inv.path2id(prefix)
178
pending = [(prefix, '', _directory, None, top_id, None)]
181
currentdir = pending.pop()
182
# 0 - relpath, 1- basename, 2- kind, 3- stat, id, v-kind
184
relroot = currentdir[0] + '/'
187
# FIXME: stash the node in pending
188
entry = inv[currentdir[4]]
189
for name, child in entry.sorted_children():
190
toppath = relroot + name
191
dirblock.append((toppath, name, child.kind, None,
192
child.file_id, child.kind
194
yield (currentdir[0], entry.file_id), dirblock
195
# push the user specified dirs from dirblock
196
for dir in reversed(dirblock):
197
if dir[2] == _directory: