Merge lp:~jelmer/brz-git/no-more-ie-revision into lp:brz-git

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 1894
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz-git/no-more-ie-revision
Merge into: lp:brz-git
Diff against target: 183 lines (+20/-31)
2 files modified
object_store.py (+3/-3)
tree.py (+17/-28)
To merge this branch: bzr merge lp:~jelmer/brz-git/no-more-ie-revision
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+342062@code.launchpad.net

This proposal supersedes a proposal from 2018-03-24.

Description of the change

Stop setting TreeEntry.revision.

Calculating this field is slow for git trees, and callers can use Tree.get_file_revision if they really care.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'object_store.py'
2--- object_store.py 2018-03-24 13:10:08 +0000
3+++ object_store.py 2018-03-25 14:14:15 +0000
4@@ -268,7 +268,7 @@
5 if file_id is None or not inv.has_id(file_id):
6 continue
7 trees[inv.id2path(file_id)] = file_id
8- ie = inv[file_id]
9+ ie = inv.get_entry(file_id)
10 if ie.parent_id is not None:
11 new_dirs.add(ie.parent_id)
12 dirty_dirs = new_dirs
13@@ -302,7 +302,7 @@
14 file_id = trees[path]
15 if tree.kind(path, file_id) != 'directory':
16 raise AssertionError
17- ie = inv[file_id]
18+ ie = inv.get_entry(file_id)
19 obj = directory_to_tree(ie.children, ie_to_hexsha, unusual_modes,
20 dummy_file_name, path == "")
21 if obj is not None:
22@@ -553,7 +553,7 @@
23 inv = bzr_tree.root_inventory
24 except AttributeError:
25 inv = bzr_tree.inventory
26- tree = directory_to_tree(inv[fileid].children,
27+ tree = directory_to_tree(inv.get_entry(fileid).children,
28 get_ie_sha1, unusual_modes, self.mapping.BZR_DUMMY_FILE,
29 bzr_tree.get_root_id() == fileid)
30 if (bzr_tree.get_root_id() == fileid and
31
32=== modified file 'tree.py'
33--- tree.py 2018-03-24 15:41:33 +0000
34+++ tree.py 2018-03-25 14:14:15 +0000
35@@ -61,15 +61,14 @@
36
37 class GitTreeDirectory(_mod_tree.TreeDirectory):
38
39- __slots__ = ['file_id', 'name', 'parent_id', 'children', 'revision']
40+ __slots__ = ['file_id', 'name', 'parent_id', 'children']
41
42- def __init__(self, file_id, name, parent_id, revision=None):
43+ def __init__(self, file_id, name, parent_id):
44 self.file_id = file_id
45 self.name = name
46 self.parent_id = parent_id
47 # TODO(jelmer)
48 self.children = {}
49- self.revision = revision
50
51 @property
52 def kind(self):
53@@ -81,32 +80,30 @@
54
55 def copy(self):
56 return self.__class__(
57- self.file_id, self.name, self.parent_id, self.revision)
58+ self.file_id, self.name, self.parent_id)
59
60 def __repr__(self):
61- return "%s(file_id=%r, name=%r, parent_id=%r, revision=%r)" % (
62+ return "%s(file_id=%r, name=%r, parent_id=%r)" % (
63 self.__class__.__name__, self.file_id, self.name,
64- self.parent_id, self.revision)
65+ self.parent_id)
66
67 def __eq__(self, other):
68 return (self.kind == other.kind and
69 self.file_id == other.file_id and
70 self.name == other.name and
71- self.parent_id == other.parent_id and
72- self.revision == other.revision)
73+ self.parent_id == other.parent_id)
74
75
76 class GitTreeFile(_mod_tree.TreeFile):
77
78- __slots__ = ['file_id', 'name', 'parent_id', 'text_size', 'text_sha1', 'revision',
79+ __slots__ = ['file_id', 'name', 'parent_id', 'text_size', 'text_sha1',
80 'executable']
81
82- def __init__(self, file_id, name, parent_id, revision=None, text_size=None,
83+ def __init__(self, file_id, name, parent_id, text_size=None,
84 text_sha1=None, executable=None):
85 self.file_id = file_id
86 self.name = name
87 self.parent_id = parent_id
88- self.revision = revision
89 self.text_size = text_size
90 self.text_sha1 = text_sha1
91 self.executable = executable
92@@ -120,20 +117,18 @@
93 self.file_id == other.file_id and
94 self.name == other.name and
95 self.parent_id == other.parent_id and
96- self.revision == other.revision and
97 self.text_sha1 == other.text_sha1 and
98 self.text_size == other.text_size and
99 self.executable == other.executable)
100
101 def __repr__(self):
102- return "%s(file_id=%r, name=%r, parent_id=%r, revision=%r, text_size=%r, text_sha1=%r, executable=%r)" % (
103+ return "%s(file_id=%r, name=%r, parent_id=%r, text_size=%r, text_sha1=%r, executable=%r)" % (
104 type(self).__name__, self.file_id, self.name, self.parent_id,
105- self.revision, self.text_size, self.text_sha1, self.executable)
106+ self.text_size, self.text_sha1, self.executable)
107
108 def copy(self):
109 ret = self.__class__(
110- self.file_id, self.name, self.parent_id,
111- self.revision)
112+ self.file_id, self.name, self.parent_id)
113 ret.text_sha1 = self.text_sha1
114 ret.text_size = self.text_size
115 ret.executable = self.executable
116@@ -142,14 +137,13 @@
117
118 class GitTreeSymlink(_mod_tree.TreeLink):
119
120- __slots__ = ['file_id', 'name', 'parent_id', 'symlink_target', 'revision']
121+ __slots__ = ['file_id', 'name', 'parent_id', 'symlink_target']
122
123- def __init__(self, file_id, name, parent_id, revision=None,
124+ def __init__(self, file_id, name, parent_id,
125 symlink_target=None):
126 self.file_id = file_id
127 self.name = name
128 self.parent_id = parent_id
129- self.revision = revision
130 self.symlink_target = symlink_target
131
132 @property
133@@ -165,22 +159,21 @@
134 return None
135
136 def __repr__(self):
137- return "%s(file_id=%r, name=%r, parent_id=%r, revision=%r, symlink_target=%r)" % (
138+ return "%s(file_id=%r, name=%r, parent_id=%r, symlink_target=%r)" % (
139 type(self).__name__, self.file_id, self.name, self.parent_id,
140- self.revision, self.symlink_target)
141+ self.symlink_target)
142
143 def __eq__(self, other):
144 return (self.kind == other.kind and
145 self.file_id == other.file_id and
146 self.name == other.name and
147 self.parent_id == other.parent_id and
148- self.revision == other.revision and
149 self.symlink_target == other.symlink_target)
150
151 def copy(self):
152 return self.__class__(
153 self.file_id, self.name, self.parent_id,
154- self.revision, self.symlink_target)
155+ self.symlink_target)
156
157
158 entry_factory = {
159@@ -389,15 +382,12 @@
160 ie.text_sha1 = osutils.sha_string(data)
161 ie.text_size = len(data)
162 ie.executable = mode_is_executable(mode)
163- ie.revision = self.get_file_revision(path.decode('utf-8'))
164 return ie
165
166 def _get_dir_ie(self, path, parent_id):
167 file_id = self._fileid_map.lookup_file_id(path)
168- ie = GitTreeDirectory(file_id,
169+ return GitTreeDirectory(file_id,
170 posixpath.basename(path).decode("utf-8"), parent_id)
171- ie.revision = self.get_file_revision(path.decode('utf-8'))
172- return ie
173
174 def iter_child_entries(self, path, file_id=None):
175 (mode, tree_sha) = self._lookup_path(path)
176@@ -897,7 +887,6 @@
177 ie.text_sha1 = osutils.sha_string(data)
178 ie.text_size = len(data)
179 ie.executable = bool(stat.S_ISREG(mode) and stat.S_IEXEC & mode)
180- ie.revision = None
181 return ie
182
183 def _add_missing_parent_ids(self, path, dir_ids):

Subscribers

People subscribed via source and target branches

to all changes: