rust/hg-cpython/src/dirstate/dirstate_map.rs
changeset 47280 1766130fe9ba
parent 47124 cd8ca38fccff
child 47332 4ee9f419c52e
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs	Wed May 19 13:15:00 2021 +0200
+++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs	Wed May 19 13:15:00 2021 +0200
@@ -55,13 +55,17 @@
 
     /// Returns a `(dirstate_map, parents)` tuple
     @staticmethod
-    def new(use_dirstate_tree: bool, on_disk: PyBytes) -> PyResult<PyObject> {
-        let dirstate_error = |_: DirstateError| {
-            PyErr::new::<exc::OSError, _>(py, "Dirstate error".to_string())
+    def new(
+        use_dirstate_tree: bool,
+        use_dirstate_v2: bool,
+        on_disk: PyBytes,
+    ) -> PyResult<PyObject> {
+        let dirstate_error = |e: DirstateError| {
+            PyErr::new::<exc::OSError, _>(py, format!("Dirstate error: {:?}", e))
         };
-        let (inner, parents) = if use_dirstate_tree {
+        let (inner, parents) = if use_dirstate_tree || use_dirstate_v2 {
             let (map, parents) =
-                OwningDirstateMap::new(py, on_disk)
+                OwningDirstateMap::new(py, on_disk, use_dirstate_v2)
                 .map_err(dirstate_error)?;
             (Box::new(map) as _, parents)
         } else {
@@ -288,6 +292,7 @@
 
     def write(
         &self,
+        use_dirstate_v2: bool,
         p1: PyObject,
         p2: PyObject,
         now: PyObject
@@ -298,7 +303,13 @@
             p2: extract_node_id(py, &p2)?,
         };
 
-        match self.inner(py).borrow_mut().pack(parents, now) {
+        let mut inner = self.inner(py).borrow_mut();
+        let result = if use_dirstate_v2 {
+            inner.pack_v2(parents, now)
+        } else {
+            inner.pack_v1(parents, now)
+        };
+        match result {
             Ok(packed) => Ok(PyBytes::new(py, &packed)),
             Err(_) => Err(PyErr::new::<exc::OSError, _>(
                 py,