diff -r 631f6b445a77 -r 1b2ee68e85f9 rust/hg-core/src/dirstate_tree/dirstate_map.rs --- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs Mon Sep 20 20:21:35 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs Mon Sep 20 20:55:38 2021 +0200 @@ -593,12 +593,13 @@ fn add_or_remove_file( &mut self, path: &HgPath, - old_state: EntryState, + old_state: Option, new_entry: DirstateEntry, ) -> Result<(), DirstateV2ParseError> { - let had_entry = old_state != EntryState::Unknown; + let had_entry = old_state.is_some(); + let was_tracked = old_state.map_or(false, |s| s.is_tracked()); let tracked_count_increment = - match (old_state.is_tracked(), new_entry.state().is_tracked()) { + match (was_tracked, new_entry.state().is_tracked()) { (false, true) => 1, (true, false) => -1, _ => 0, @@ -808,10 +809,7 @@ let mode = entry.mode(); let entry = DirstateEntry::from_v1_data(state, mode, size, mtime); - let old_state = match self.get(filename)? { - Some(e) => e.state(), - None => EntryState::Unknown, - }; + let old_state = self.get(filename)?.map(|e| e.state()); Ok(self.add_or_remove_file(filename, old_state, entry)?) } @@ -822,10 +820,7 @@ in_merge: bool, ) -> Result<(), DirstateError> { let old_entry_opt = self.get(filename)?; - let old_state = match old_entry_opt { - Some(e) => e.state(), - None => EntryState::Unknown, - }; + let old_state = old_entry_opt.map(|e| e.state()); let mut size = 0; if in_merge { // XXX we should not be able to have 'm' state and 'FROM_P2' if not @@ -852,10 +847,9 @@ } fn drop_file(&mut self, filename: &HgPath) -> Result { - let old_state = match self.get(filename)? { - Some(e) => e.state(), - None => EntryState::Unknown, - }; + let was_tracked = self + .get(filename)? + .map_or(false, |e| e.state().is_tracked()); struct Dropped { was_tracked: bool, had_entry: bool, @@ -955,7 +949,7 @@ } Ok(dropped.had_entry) } else { - debug_assert!(!old_state.is_tracked()); + debug_assert!(!was_tracked); Ok(false) } }