Mercurial > hg
comparison mercurial/metadata.py @ 45659:a475db79d84d
changing-files: add a "salvaged" set to track file that were not removed
We need this set for the copy tracing algorithm. See documentation for details
about this set.
Differential Revision: https://phab.mercurial-scm.org/D9118
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 14 Sep 2020 23:46:21 +0200 |
parents | 9003e6524f78 |
children | e66db30f95a8 |
comparison
equal
deleted
inserted
replaced
45658:6569b2371240 | 45659:a475db79d84d |
---|---|
29 Actions performed on files are gathered into 3 sets: | 29 Actions performed on files are gathered into 3 sets: |
30 | 30 |
31 - added: files actively added in the changeset. | 31 - added: files actively added in the changeset. |
32 - merged: files whose history got merged | 32 - merged: files whose history got merged |
33 - removed: files removed in the revision | 33 - removed: files removed in the revision |
34 - salvaged: files that might have been deleted by a merge but were not | |
34 - touched: files affected by the merge | 35 - touched: files affected by the merge |
35 | 36 |
36 and copies information is held by 2 mappings | 37 and copies information is held by 2 mappings |
37 | 38 |
38 - copied_from_p1: {"<new-name>": "<source-name-in-p1>"} mapping for copies | 39 - copied_from_p1: {"<new-name>": "<source-name-in-p1>"} mapping for copies |
45 self, | 46 self, |
46 touched=None, | 47 touched=None, |
47 added=None, | 48 added=None, |
48 removed=None, | 49 removed=None, |
49 merged=None, | 50 merged=None, |
51 salvaged=None, | |
50 p1_copies=None, | 52 p1_copies=None, |
51 p2_copies=None, | 53 p2_copies=None, |
52 ): | 54 ): |
53 self._added = set(() if added is None else added) | 55 self._added = set(() if added is None else added) |
54 self._merged = set(() if merged is None else merged) | 56 self._merged = set(() if merged is None else merged) |
55 self._removed = set(() if removed is None else removed) | 57 self._removed = set(() if removed is None else removed) |
56 self._touched = set(() if touched is None else touched) | 58 self._touched = set(() if touched is None else touched) |
59 self._salvaged = set(() if salvaged is None else salvaged) | |
57 self._touched.update(self._added) | 60 self._touched.update(self._added) |
58 self._touched.update(self._merged) | 61 self._touched.update(self._merged) |
59 self._touched.update(self._removed) | 62 self._touched.update(self._removed) |
60 self._p1_copies = dict(() if p1_copies is None else p1_copies) | 63 self._p1_copies = dict(() if p1_copies is None else p1_copies) |
61 self._p2_copies = dict(() if p2_copies is None else p2_copies) | 64 self._p2_copies = dict(() if p2_copies is None else p2_copies) |
63 def __eq__(self, other): | 66 def __eq__(self, other): |
64 return ( | 67 return ( |
65 self.added == other.added | 68 self.added == other.added |
66 and self.merged == other.merged | 69 and self.merged == other.merged |
67 and self.removed == other.removed | 70 and self.removed == other.removed |
71 and self.salvaged == other.salvaged | |
68 and self.touched == other.touched | 72 and self.touched == other.touched |
69 and self.copied_from_p1 == other.copied_from_p1 | 73 and self.copied_from_p1 == other.copied_from_p1 |
70 and self.copied_from_p2 == other.copied_from_p2 | 74 and self.copied_from_p2 == other.copied_from_p2 |
71 ) | 75 ) |
72 | 76 |
156 self.mark_touched(filename) | 160 self.mark_touched(filename) |
157 | 161 |
158 def update_removed(self, filenames): | 162 def update_removed(self, filenames): |
159 for f in filenames: | 163 for f in filenames: |
160 self.mark_removed(f) | 164 self.mark_removed(f) |
165 | |
166 @util.propertycache | |
167 def salvaged(self): | |
168 """files that might have been deleted by a merge, but still exists. | |
169 | |
170 During a merge, the manifest merging might select some files for | |
171 removal, or for a removed/changed conflict. If at commit time the file | |
172 still exists, its removal was "reverted" and the file is "salvaged" | |
173 """ | |
174 return frozenset(self._salvaged) | |
175 | |
176 def mark_salvaged(self, filename): | |
177 if "salvaged" in vars(self): | |
178 del self.salvaged | |
179 self._salvaged.add(filename) | |
180 self.mark_touched(filename) | |
181 | |
182 def update_salvaged(self, filenames): | |
183 for f in filenames: | |
184 self.mark_salvaged(f) | |
161 | 185 |
162 @util.propertycache | 186 @util.propertycache |
163 def touched(self): | 187 def touched(self): |
164 """files either actively modified, added or removed""" | 188 """files either actively modified, added or removed""" |
165 return frozenset(self._touched) | 189 return frozenset(self._touched) |