rust/hg-cpython/src/dirstate/dirstate_map.rs
changeset 47525 fe4641cf9b72
parent 47524 69a463a4f193
child 47527 c6b91a9c242a
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs	Sat Jul 03 20:59:26 2021 +0200
+++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs	Sun Jul 04 01:42:10 2021 +0200
@@ -112,17 +112,28 @@
         mode: PyObject,
         size: PyObject,
         mtime: PyObject,
+        added: PyObject,
         from_p2: PyObject,
         possibly_dirty: PyObject,
     ) -> PyResult<PyObject> {
         let f = f.extract::<PyBytes>(py)?;
         let filename = HgPath::new(f.data(py));
-        let state = state.extract::<PyBytes>(py)?.data(py)[0]
+        let state = if state.is_none(py) {
+            // Arbitrary default value
+            EntryState::Normal
+        } else {
+            state.extract::<PyBytes>(py)?.data(py)[0]
             .try_into()
             .map_err(|e: HgError| {
                 PyErr::new::<exc::ValueError, _>(py, e.to_string())
-            })?;
-        let mode = mode.extract(py)?;
+            })?
+        };
+        let mode = if mode.is_none(py) {
+            // fallback default value
+            0
+        } else {
+            mode.extract(py)?
+        };
         let size = if size.is_none(py) {
             // fallback default value
             SIZE_NON_NORMAL
@@ -141,11 +152,13 @@
             size: size,
             mtime: mtime,
         };
+        let added = added.extract::<PyBool>(py)?.is_true();
         let from_p2 = from_p2.extract::<PyBool>(py)?.is_true();
         let possibly_dirty = possibly_dirty.extract::<PyBool>(py)?.is_true();
         self.inner(py).borrow_mut().add_file(
             filename,
             entry,
+            added,
             from_p2,
             possibly_dirty
         ).and(Ok(py.None())).or_else(|e: DirstateError| {