changeset 47666:e53256a9f9c5

dirstate-item: add a `set_possibly_dirty` method See inline documentation for details. The pushes the AMBIGUOUS_TIME implementation further down the line within the DirstateItem only. When this cleanup is done we will be able to stop using this representation internally. Differential Revision: https://phab.mercurial-scm.org/D11119
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 19 Jul 2021 06:29:30 +0200
parents a4443f66be6a
children d06ced90c80f
files mercurial/cext/parsers.c mercurial/pure/parsers.py
diffstat 2 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cext/parsers.c	Tue Jul 13 13:06:50 2021 +0200
+++ b/mercurial/cext/parsers.c	Mon Jul 19 06:29:30 2021 +0200
@@ -31,6 +31,7 @@
 
 static const int dirstate_v1_from_p2 = -2;
 static const int dirstate_v1_nonnormal = -1;
+static const int ambiguous_time = -1;
 
 static PyObject *dict_new_presized(PyObject *self, PyObject *args)
 {
@@ -197,6 +198,14 @@
 	return (PyObject *)t;
 };
 
+/* This means the next status call will have to actually check its content
+   to make sure it is correct. */
+static PyObject *dirstate_item_set_possibly_dirty(dirstateItemObject *self)
+{
+	self->mtime = ambiguous_time;
+	Py_RETURN_NONE;
+}
+
 static PyMethodDef dirstate_item_methods[] = {
     {"v1_state", (PyCFunction)dirstate_item_v1_state, METH_NOARGS,
      "return a \"state\" suitable for v1 serialization"},
@@ -210,6 +219,8 @@
      "True if the stored mtime would be ambiguous with the current time"},
     {"from_v1_data", (PyCFunction)dirstate_item_from_v1_meth, METH_O,
      "build a new DirstateItem object from V1 data"},
+    {"set_possibly_dirty", (PyCFunction)dirstate_item_set_possibly_dirty,
+     METH_NOARGS, "mark a file as \"possibly dirty\""},
     {NULL} /* Sentinel */
 };
 
--- a/mercurial/pure/parsers.py	Tue Jul 13 13:06:50 2021 +0200
+++ b/mercurial/pure/parsers.py	Mon Jul 19 06:29:30 2021 +0200
@@ -81,6 +81,14 @@
             mtime=mtime,
         )
 
+    def set_possibly_dirty(self):
+        """Mark a file as "possibly dirty"
+
+        This means the next status call will have to actually check its content
+        to make sure it is correct.
+        """
+        self._mtime = AMBIGUOUS_TIME
+
     def __getitem__(self, idx):
         if idx == 0 or idx == -4:
             msg = b"do not use item[x], use item.state"