# HG changeset patch # User Pierre-Yves David # Date 1625354055 -7200 # Node ID 28632eb3ca3e2183a73016a30c90ed5f50ea6c66 # Parent b8ffe85e399bdc944648786a45b64dcc282fe8af dirstate-entry: restrict `from_p2` property to tracked file The other case is now handled in `from_p2_removed`, and should ideally be moved to a lower level. So we can drop the `state == 'n'` narrowing and move it in the property itself. Differential Revision: https://phab.mercurial-scm.org/D10959 diff -r b8ffe85e399b -r 28632eb3ca3e mercurial/cext/parsers.c --- a/mercurial/cext/parsers.c Sat Jul 03 20:34:09 2021 +0200 +++ b/mercurial/cext/parsers.c Sun Jul 04 01:14:15 2021 +0200 @@ -178,7 +178,7 @@ static PyObject *dirstatetuple_get_from_p2(dirstateTupleObject *self) { - if (self->size == dirstate_v1_from_p2) { + if (self->state == 'n' && self->size == dirstate_v1_from_p2) { Py_RETURN_TRUE; } else { Py_RETURN_FALSE; diff -r b8ffe85e399b -r 28632eb3ca3e mercurial/dirstate.py --- a/mercurial/dirstate.py Sat Jul 03 20:34:09 2021 +0200 +++ b/mercurial/dirstate.py Sun Jul 04 01:14:15 2021 +0200 @@ -393,7 +393,7 @@ copies[f] = source self.normallookup(f) # Also fix up otherparent markers - elif s.state == b'n' and s.from_p2: + elif s.from_p2: source = self._map.copymap.get(f) if source: copies[f] = source @@ -542,7 +542,7 @@ if source is not None: self.copy(source, f) return - elif entry.merged or entry.state == b'n' and entry.from_p2: + elif entry.merged or entry.from_p2: return self._addpath(f, b'n', 0, possibly_dirty=True) self._map.copymap.pop(f, None) diff -r b8ffe85e399b -r 28632eb3ca3e mercurial/pure/parsers.py --- a/mercurial/pure/parsers.py Sat Jul 03 20:34:09 2021 +0200 +++ b/mercurial/pure/parsers.py Sun Jul 04 01:14:15 2021 +0200 @@ -98,9 +98,11 @@ def from_p2(self): """True if the file have been fetched from p2 during the current merge + This is only True is the file is currently tracked. + Should only be set if a merge is in progress in the dirstate """ - return self._size == FROM_P2 + return self._state == b'n' and self._size == FROM_P2 @property def from_p2_removed(self):