diff --git a/rust/hg-cpython/src/dirstate/dirstate_map.rs b/rust/hg-cpython/src/dirstate/dirstate_map.rs --- a/rust/hg-cpython/src/dirstate/dirstate_map.rs +++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs @@ -112,23 +112,31 @@ size: PyObject, mtime: PyObject ) -> PyResult { + let f = f.extract::(py)?; + let filename = HgPath::new(f.data(py)); + let oldstate = oldstate.extract::(py)?.data(py)[0] + .try_into() + .map_err(|e: HgError| { + PyErr::new::(py, e.to_string()) + })?; + let state = state.extract::(py)?.data(py)[0] + .try_into() + .map_err(|e: HgError| { + PyErr::new::(py, e.to_string()) + })?; + let mode = mode.extract(py)?; + let size = size.extract(py)?; + let mtime = mtime.extract(py)?; + let entry = DirstateEntry { + state: state, + mode: mode, + size: size, + mtime: mtime, + }; self.inner(py).borrow_mut().add_file( - HgPath::new(f.extract::(py)?.data(py)), - oldstate.extract::(py)?.data(py)[0] - .try_into() - .map_err(|e: HgError| { - PyErr::new::(py, e.to_string()) - })?, - DirstateEntry { - state: state.extract::(py)?.data(py)[0] - .try_into() - .map_err(|e: HgError| { - PyErr::new::(py, e.to_string()) - })?, - mode: mode.extract(py)?, - size: size.extract(py)?, - mtime: mtime.extract(py)?, - }, + filename, + oldstate, + entry, ).and(Ok(py.None())).or_else(|e: DirstateError| { Err(PyErr::new::(py, e.to_string())) })