# HG changeset patch # User Pierre-Yves David # Date 1600933809 -7200 # Node ID e5578dbe36cbe44cabdaa9cc5ac65b542b637ff6 # Parent 496537c9c1b4b250406f2cf423cf3cb99479346e changing-files: add the ability to track merged files too The set of merged files is used when doing changeset centric copy tracing (cf `is_merged` in `mercurial/copies.py`. So tracking (and persisting) this set will be useful. We start with adding the attribute on the new object. Differential Revision: https://phab.mercurial-scm.org/D9087 diff -r 496537c9c1b4 -r e5578dbe36cb mercurial/metadata.py --- a/mercurial/metadata.py Wed Sep 30 18:10:29 2020 +0200 +++ b/mercurial/metadata.py Thu Sep 24 09:50:09 2020 +0200 @@ -28,6 +28,7 @@ Actions performed on files are gathered into 3 sets: - added: files actively added in the changeset. + - merged: files whose history got merged - removed: files removed in the revision - touched: files affected by the merge @@ -44,13 +45,16 @@ touched=None, added=None, removed=None, + merged=None, p1_copies=None, p2_copies=None, ): self._added = set(() if added is None else added) + 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._touched.update(self._added) + self._touched.update(self._merged) self._touched.update(self._removed) self._p1_copies = dict(() if p1_copies is None else p1_copies) self._p2_copies = dict(() if p2_copies is None else p2_copies) @@ -58,6 +62,7 @@ def __eq__(self, other): return ( self.added == other.added + and self.merged == other.merged and self.removed == other.removed and self.touched == other.touched and self.copied_from_p1 == other.copied_from_p1 @@ -86,6 +91,24 @@ self.mark_added(f) @property + def merged(self): + """files actively merged during a merge + + Any modified files which had modification on both size that needed merging. + + In this case a new filenode was created and it has two parents. + """ + return frozenset(self._merged) + + def mark_merged(self, filename): + self._merged.add(filename) + self._touched.add(filename) + + def update_merged(self, filenames): + for f in filenames: + self.mark_merged(f) + + @property def removed(self): """files actively removed by the changeset