[Updated] [++ ] D9118: changing-files: add a "salvaged" set to track file that were not removed

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Wed Sep 30 13:10:35 UTC 2020


marmoute updated this revision to Diff 22940.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D9118?vs=22913&id=22940

BRANCH
  default

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D9118/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D9118

AFFECTED FILES
  mercurial/metadata.py

CHANGE DETAILS

diff --git a/mercurial/metadata.py b/mercurial/metadata.py
--- a/mercurial/metadata.py
+++ b/mercurial/metadata.py
@@ -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,27 @@
             self.mark_removed(f)
 
     @util.propertycache
+    def salvaged(self):
+        """files that might had been deleted by a merge, but were not
+
+        During a merge, the manifest merging might select some file for
+        removal, or for a removed/changed conflict. If at commit time the file
+        still exist in the final result. It the removal is "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)



To: marmoute, #hg-reviewers
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20200930/2a877a05/attachment-0002.html>


More information about the Mercurial-patches mailing list