diff -r 38488d488ec1 -r ab5a7fdbf75c rust/hg-core/src/dirstate/entry.rs --- a/rust/hg-core/src/dirstate/entry.rs Fri Oct 01 20:35:30 2021 +0200 +++ b/rust/hg-core/src/dirstate/entry.rs Fri Oct 01 18:49:33 2021 +0200 @@ -15,13 +15,13 @@ /// comes first. #[derive(Debug, PartialEq, Copy, Clone)] pub struct DirstateEntry { - flags: Flags, + pub(crate) flags: Flags, mode_size: Option<(i32, i32)>, mtime: Option, } bitflags! { - struct Flags: u8 { + pub(crate) struct Flags: u8 { const WDIR_TRACKED = 1 << 0; const P1_TRACKED = 1 << 1; const P2_INFO = 1 << 2; @@ -41,7 +41,7 @@ pub const SIZE_NON_NORMAL: i32 = -1; impl DirstateEntry { - pub fn new( + pub fn from_v2_data( wdir_tracked: bool, p1_tracked: bool, p2_info: bool, @@ -193,6 +193,22 @@ ) } + /// Returns `(wdir_tracked, p1_tracked, p2_info, mode_size, mtime)` + pub(crate) fn v2_data( + &self, + ) -> (bool, bool, bool, Option<(i32, i32)>, Option) { + if !self.any_tracked() { + // TODO: return an Option instead? + panic!("Accessing v1_state of an untracked DirstateEntry") + } + let wdir_tracked = self.flags.contains(Flags::WDIR_TRACKED); + let p1_tracked = self.flags.contains(Flags::P1_TRACKED); + let p2_info = self.flags.contains(Flags::P2_INFO); + let mode_size = self.mode_size; + let mtime = self.mtime; + (wdir_tracked, p1_tracked, p2_info, mode_size, mtime) + } + fn v1_state(&self) -> EntryState { if !self.any_tracked() { // TODO: return an Option instead?