Mercurial > hg
diff 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 |
line wrap: on
line diff
--- a/mercurial/metadata.py Thu Oct 08 23:14:41 2020 -0700 +++ b/mercurial/metadata.py Mon Sep 14 23:46:21 2020 +0200 @@ -31,6 +31,7 @@ - added: files actively added in the changeset. - merged: files whose history got merged - removed: files removed in the revision + - salvaged: files that might have been deleted by a merge but were not - touched: files affected by the merge and copies information is held by 2 mappings @@ -47,6 +48,7 @@ added=None, removed=None, merged=None, + salvaged=None, p1_copies=None, p2_copies=None, ): @@ -54,6 +56,7 @@ self._merged = set(() if merged is None else merged) self._removed = set(() if removed is None else removed) self._touched = set(() if touched is None else touched) + self._salvaged = set(() if salvaged is None else salvaged) self._touched.update(self._added) self._touched.update(self._merged) self._touched.update(self._removed) @@ -65,6 +68,7 @@ self.added == other.added and self.merged == other.merged and self.removed == other.removed + and self.salvaged == other.salvaged and self.touched == other.touched and self.copied_from_p1 == other.copied_from_p1 and self.copied_from_p2 == other.copied_from_p2 @@ -160,6 +164,26 @@ self.mark_removed(f) @util.propertycache + def salvaged(self): + """files that might have been deleted by a merge, but still exists. + + During a merge, the manifest merging might select some files for + removal, or for a removed/changed conflict. If at commit time the file + still exists, its removal was "reverted" and the file is "salvaged" + """ + return frozenset(self._salvaged) + + def mark_salvaged(self, filename): + if "salvaged" in vars(self): + del self.salvaged + self._salvaged.add(filename) + self.mark_touched(filename) + + def update_salvaged(self, filenames): + for f in filenames: + self.mark_salvaged(f) + + @util.propertycache def touched(self): """files either actively modified, added or removed""" return frozenset(self._touched)