changeset 47517:28632eb3ca3e

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
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 04 Jul 2021 01:14:15 +0200
parents b8ffe85e399b
children f6f25ab6bfc8
files mercurial/cext/parsers.c mercurial/dirstate.py mercurial/pure/parsers.py
diffstat 3 files changed, 6 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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)
--- 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):