diff rust/hg-core/src/repo.rs @ 47380:bd88b6bfd8da

rhg: Add support for dirstate-v2 Differential Revision: https://phab.mercurial-scm.org/D10804
author Simon Sapin <simon.sapin@octobus.net>
date Tue, 25 May 2021 09:20:30 +0200
parents c71e8d9e7f2a
children ebdef6283798
line wrap: on
line diff
--- a/rust/hg-core/src/repo.rs	Wed May 26 11:53:37 2021 +0200
+++ b/rust/hg-core/src/repo.rs	Tue May 25 09:20:30 2021 +0200
@@ -218,12 +218,23 @@
         }
     }
 
+    pub fn has_dirstate_v2(&self) -> bool {
+        self.requirements
+            .contains(requirements::DIRSTATE_V2_REQUIREMENT)
+    }
+
     pub fn dirstate_parents(
         &self,
     ) -> Result<crate::dirstate::DirstateParents, HgError> {
         let dirstate = self.hg_vfs().mmap_open("dirstate")?;
-        let parents =
-            crate::dirstate::parsers::parse_dirstate_parents(&dirstate)?;
+        if dirstate.is_empty() {
+            return Ok(crate::dirstate::DirstateParents::NULL);
+        }
+        let parents = if self.has_dirstate_v2() {
+            crate::dirstate_tree::on_disk::parse_dirstate_parents(&dirstate)?
+        } else {
+            crate::dirstate::parsers::parse_dirstate_parents(&dirstate)?
+        };
         Ok(parents.clone())
     }
 }