diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c --- a/mercurial/cext/parsers.c +++ b/mercurial/cext/parsers.c @@ -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 */ }; diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py --- a/mercurial/pure/parsers.py +++ b/mercurial/pure/parsers.py @@ -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"