diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
index 898de425bcd67571dcb983df3811b9140f974081_bWVyY3VyaWFsL2NleHQvcGFyc2Vycy5j..20e41b3679535ce45c0ec5e199fc6c6edb23d90c_bWVyY3VyaWFsL2NleHQvcGFyc2Vycy5j 100644
--- a/mercurial/cext/parsers.c
+++ b/mercurial/cext/parsers.c
@@ -347,25 +347,6 @@
 	return (PyObject *)dirstate_item_from_v1_data(state, mode, size, mtime);
 };
 
-/* constructor to help legacy API to build a new "possibly" item
-
-Should eventually be removed */
-static PyObject *dirstate_item_new_possibly_dirty(PyTypeObject *subtype)
-{
-	/* We do all the initialization here and not a tp_init function because
-	 * dirstate_item is immutable. */
-	dirstateItemObject *t;
-	t = (dirstateItemObject *)subtype->tp_alloc(subtype, 1);
-	if (!t) {
-		return NULL;
-	}
-	t->flags = dirstate_flag_wc_tracked | dirstate_flag_p1_tracked;
-	t->mode = 0;
-	t->size = 0;
-	t->mtime = 0;
-	return (PyObject *)t;
-};
-
 /* constructor to help legacy API to build a new "normal" item
 
 Should eventually be removed */
@@ -456,9 +437,6 @@
      "True if the stored mtime would be ambiguous with the current time"},
     {"from_v1_data", (PyCFunction)dirstate_item_from_v1_meth,
      METH_VARARGS | METH_CLASS, "build a new DirstateItem object from V1 data"},
-    {"new_possibly_dirty", (PyCFunction)dirstate_item_new_possibly_dirty,
-     METH_NOARGS | METH_CLASS,
-     "constructor to help legacy API to build a new \"possibly_dirty\" item"},
     {"new_normal", (PyCFunction)dirstate_item_new_normal,
      METH_VARARGS | METH_CLASS,
      "constructor to help legacy API to build a new \"normal\" item"},
diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
index 898de425bcd67571dcb983df3811b9140f974081_bWVyY3VyaWFsL3B1cmUvcGFyc2Vycy5weQ==..20e41b3679535ce45c0ec5e199fc6c6edb23d90c_bWVyY3VyaWFsL3B1cmUvcGFyc2Vycy5weQ== 100644
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -109,14 +109,6 @@
             self._mtime = parentfiledata[2]
 
     @classmethod
-    def new_possibly_dirty(cls):
-        """constructor to help legacy API to build a new "possibly_dirty" item
-
-        Should eventually be removed
-        """
-        return cls(wc_tracked=True, p1_tracked=True)
-
-    @classmethod
     def new_normal(cls, mode, size, mtime):
         """constructor to help legacy API to build a new "normal" item
 
diff --git a/rust/hg-core/src/dirstate/entry.rs b/rust/hg-core/src/dirstate/entry.rs
index 898de425bcd67571dcb983df3811b9140f974081_cnVzdC9oZy1jb3JlL3NyYy9kaXJzdGF0ZS9lbnRyeS5ycw==..20e41b3679535ce45c0ec5e199fc6c6edb23d90c_cnVzdC9oZy1jb3JlL3NyYy9kaXJzdGF0ZS9lbnRyeS5ycw== 100644
--- a/rust/hg-core/src/dirstate/entry.rs
+++ b/rust/hg-core/src/dirstate/entry.rs
@@ -117,14 +117,6 @@
         }
     }
 
-    pub fn new_possibly_dirty() -> Self {
-        Self {
-            flags: Flags::WDIR_TRACKED | Flags::P1_TRACKED,
-            mode_size: None,
-            mtime: None,
-        }
-    }
-
     pub fn new_normal(mode: i32, size: i32, mtime: i32) -> Self {
         Self {
             flags: Flags::WDIR_TRACKED | Flags::P1_TRACKED,
diff --git a/rust/hg-cpython/src/dirstate/item.rs b/rust/hg-cpython/src/dirstate/item.rs
index 898de425bcd67571dcb983df3811b9140f974081_cnVzdC9oZy1jcHl0aG9uL3NyYy9kaXJzdGF0ZS9pdGVtLnJz..20e41b3679535ce45c0ec5e199fc6c6edb23d90c_cnVzdC9oZy1jcHl0aG9uL3NyYy9kaXJzdGF0ZS9pdGVtLnJz 100644
--- a/rust/hg-cpython/src/dirstate/item.rs
+++ b/rust/hg-cpython/src/dirstate/item.rs
@@ -139,12 +139,6 @@
     }
 
     @classmethod
-    def new_possibly_dirty(_cls) -> PyResult<Self> {
-        let entry = DirstateEntry::new_possibly_dirty();
-        DirstateItem::create_instance(py, Cell::new(entry))
-    }
-
-    @classmethod
     def new_normal(_cls, mode: i32, size: i32, mtime: i32) -> PyResult<Self> {
         let entry = DirstateEntry::new_normal(mode, size, mtime);
         DirstateItem::create_instance(py, Cell::new(entry))