Mercurial > hg
comparison mercurial/metadata.py @ 45623:d31483377673
changing-files: cache the various property
We are going to start using them more having some basic caching would be good.
The focus is not about performance yet, however avoid some easy N² trap seems
reasonable.
Differential Revision: https://phab.mercurial-scm.org/D9112
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 28 Sep 2020 12:26:09 +0200 |
parents | 42bb6c4f8106 |
children | 9a6b409b8ebc |
comparison
equal
deleted
inserted
replaced
45622:42bb6c4f8106 | 45623:d31483377673 |
---|---|
67 and self.touched == other.touched | 67 and self.touched == other.touched |
68 and self.copied_from_p1 == other.copied_from_p1 | 68 and self.copied_from_p1 == other.copied_from_p1 |
69 and self.copied_from_p2 == other.copied_from_p2 | 69 and self.copied_from_p2 == other.copied_from_p2 |
70 ) | 70 ) |
71 | 71 |
72 @property | 72 @util.propertycache |
73 def added(self): | 73 def added(self): |
74 """files actively added in the changeset | 74 """files actively added in the changeset |
75 | 75 |
76 Any file present in that revision that was absent in all the changeset's | 76 Any file present in that revision that was absent in all the changeset's |
77 parents. | 77 parents. |
81 added by an ancestor) | 81 added by an ancestor) |
82 """ | 82 """ |
83 return frozenset(self._added) | 83 return frozenset(self._added) |
84 | 84 |
85 def mark_added(self, filename): | 85 def mark_added(self, filename): |
86 if 'added' in vars(self): | |
87 del self.added | |
86 self._added.add(filename) | 88 self._added.add(filename) |
87 self.mark_touched(filename) | 89 self.mark_touched(filename) |
88 | 90 |
89 def update_added(self, filenames): | 91 def update_added(self, filenames): |
90 for f in filenames: | 92 for f in filenames: |
91 self.mark_added(f) | 93 self.mark_added(f) |
92 | 94 |
93 @property | 95 @util.propertycache |
94 def merged(self): | 96 def merged(self): |
95 """files actively merged during a merge | 97 """files actively merged during a merge |
96 | 98 |
97 Any modified files which had modification on both size that needed merging. | 99 Any modified files which had modification on both size that needed merging. |
98 | 100 |
99 In this case a new filenode was created and it has two parents. | 101 In this case a new filenode was created and it has two parents. |
100 """ | 102 """ |
101 return frozenset(self._merged) | 103 return frozenset(self._merged) |
102 | 104 |
103 def mark_merged(self, filename): | 105 def mark_merged(self, filename): |
106 if 'merged' in vars(self): | |
107 del self.merged | |
104 self._merged.add(filename) | 108 self._merged.add(filename) |
105 self.mark_touched(filename) | 109 self.mark_touched(filename) |
106 | 110 |
107 def update_merged(self, filenames): | 111 def update_merged(self, filenames): |
108 for f in filenames: | 112 for f in filenames: |
109 self.mark_merged(f) | 113 self.mark_merged(f) |
110 | 114 |
111 @property | 115 @util.propertycache |
112 def removed(self): | 116 def removed(self): |
113 """files actively removed by the changeset | 117 """files actively removed by the changeset |
114 | 118 |
115 In case of merge this will only contain the set of files removing "new" | 119 In case of merge this will only contain the set of files removing "new" |
116 content. For any file absent in the current changeset: | 120 content. For any file absent in the current changeset: |
143 (d) | one | new filenode || yes | 147 (d) | one | new filenode || yes |
144 """ | 148 """ |
145 return frozenset(self._removed) | 149 return frozenset(self._removed) |
146 | 150 |
147 def mark_removed(self, filename): | 151 def mark_removed(self, filename): |
152 if 'removed' in vars(self): | |
153 del self.removed | |
148 self._removed.add(filename) | 154 self._removed.add(filename) |
149 self.mark_touched(filename) | 155 self.mark_touched(filename) |
150 | 156 |
151 def update_removed(self, filenames): | 157 def update_removed(self, filenames): |
152 for f in filenames: | 158 for f in filenames: |
153 self.mark_removed(f) | 159 self.mark_removed(f) |
154 | 160 |
155 @property | 161 @util.propertycache |
156 def touched(self): | 162 def touched(self): |
157 """files either actively modified, added or removed""" | 163 """files either actively modified, added or removed""" |
158 return frozenset(self._touched) | 164 return frozenset(self._touched) |
159 | 165 |
160 def mark_touched(self, filename): | 166 def mark_touched(self, filename): |
167 if 'touched' in vars(self): | |
168 del self.touched | |
161 self._touched.add(filename) | 169 self._touched.add(filename) |
162 | 170 |
163 def update_touched(self, filenames): | 171 def update_touched(self, filenames): |
164 for f in filenames: | 172 for f in filenames: |
165 self.mark_touched(f) | 173 self.mark_touched(f) |
166 | 174 |
167 @property | 175 @util.propertycache |
168 def copied_from_p1(self): | 176 def copied_from_p1(self): |
169 return self._p1_copies.copy() | 177 return self._p1_copies.copy() |
170 | 178 |
171 def mark_copied_from_p1(self, source, dest): | 179 def mark_copied_from_p1(self, source, dest): |
180 if 'copied_from_p1' in vars(self): | |
181 del self.copied_from_p1 | |
172 self._p1_copies[dest] = source | 182 self._p1_copies[dest] = source |
173 | 183 |
174 def update_copies_from_p1(self, copies): | 184 def update_copies_from_p1(self, copies): |
175 for dest, source in copies.items(): | 185 for dest, source in copies.items(): |
176 self.mark_copied_from_p1(source, dest) | 186 self.mark_copied_from_p1(source, dest) |
177 | 187 |
178 @property | 188 @util.propertycache |
179 def copied_from_p2(self): | 189 def copied_from_p2(self): |
180 return self._p2_copies.copy() | 190 return self._p2_copies.copy() |
181 | 191 |
182 def mark_copied_from_p2(self, source, dest): | 192 def mark_copied_from_p2(self, source, dest): |
193 if 'copied_from_p2' in vars(self): | |
194 del self.copied_from_p2 | |
183 self._p2_copies[dest] = source | 195 self._p2_copies[dest] = source |
184 | 196 |
185 def update_copies_from_p2(self, copies): | 197 def update_copies_from_p2(self, copies): |
186 for dest, source in copies.items(): | 198 for dest, source in copies.items(): |
187 self.mark_copied_from_p2(source, dest) | 199 self.mark_copied_from_p2(source, dest) |