rust/hg-core/src/dirstate_tree/dirstate_map.rs
changeset 49104 b5c2aca84618
parent 49101 dd0430434ce9
child 49106 c1a3fdedc492
equal deleted inserted replaced
49103:77dfde417e5e 49104:b5c2aca84618
    19 use crate::dirstate::SIZE_NON_NORMAL;
    19 use crate::dirstate::SIZE_NON_NORMAL;
    20 use crate::matchers::Matcher;
    20 use crate::matchers::Matcher;
    21 use crate::utils::hg_path::{HgPath, HgPathBuf};
    21 use crate::utils::hg_path::{HgPath, HgPathBuf};
    22 use crate::DirstateEntry;
    22 use crate::DirstateEntry;
    23 use crate::DirstateError;
    23 use crate::DirstateError;
       
    24 use crate::DirstateMapError;
    24 use crate::DirstateParents;
    25 use crate::DirstateParents;
    25 use crate::DirstateStatus;
    26 use crate::DirstateStatus;
    26 use crate::EntryState;
    27 use crate::EntryState;
    27 use crate::FastHashbrownMap as FastHashMap;
    28 use crate::FastHashbrownMap as FastHashMap;
    28 use crate::PatternFileWarning;
    29 use crate::PatternFileWarning;
   758             },
   759             },
   759         )?;
   760         )?;
   760         if !had_entry {
   761         if !had_entry {
   761             self.nodes_with_entry_count += 1
   762             self.nodes_with_entry_count += 1
   762         }
   763         }
       
   764         node.data = NodeData::Entry(new_entry);
       
   765         Ok(())
       
   766     }
       
   767 
       
   768     fn set_clean(
       
   769         &mut self,
       
   770         filename: &HgPath,
       
   771         old_entry: DirstateEntry,
       
   772         mode: u32,
       
   773         size: u32,
       
   774         mtime: TruncatedTimestamp,
       
   775     ) -> Result<(), DirstateError> {
       
   776         let node = Self::get_or_insert_node(
       
   777             self.on_disk,
       
   778             &mut self.unreachable_bytes,
       
   779             &mut self.root,
       
   780             filename,
       
   781             WithBasename::to_cow_owned,
       
   782             |ancestor| {
       
   783                 if !old_entry.tracked() {
       
   784                     ancestor.tracked_descendants_count += 1;
       
   785                 }
       
   786             },
       
   787         )?;
       
   788         let mut new_entry = old_entry.clone();
       
   789         new_entry.set_clean(mode, size, mtime);
   763         node.data = NodeData::Entry(new_entry);
   790         node.data = NodeData::Entry(new_entry);
   764         Ok(())
   791         Ok(())
   765     }
   792     }
   766 
   793 
   767     fn iter_nodes<'tree>(
   794     fn iter_nodes<'tree>(
   877         &mut self,
   904         &mut self,
   878         filename: &HgPath,
   905         filename: &HgPath,
   879     ) -> Result<bool, DirstateV2ParseError> {
   906     ) -> Result<bool, DirstateV2ParseError> {
   880         let old_entry_opt = self.get(filename)?;
   907         let old_entry_opt = self.get(filename)?;
   881         self.with_dmap_mut(|map| map.set_tracked(filename, old_entry_opt))
   908         self.with_dmap_mut(|map| map.set_tracked(filename, old_entry_opt))
       
   909     }
       
   910 
       
   911     pub fn set_clean(
       
   912         &mut self,
       
   913         filename: &HgPath,
       
   914         mode: u32,
       
   915         size: u32,
       
   916         mtime: TruncatedTimestamp,
       
   917     ) -> Result<(), DirstateError> {
       
   918         let old_entry = match self.get(filename)? {
       
   919             None => {
       
   920                 return Err(
       
   921                     DirstateMapError::PathNotFound(filename.into()).into()
       
   922                 )
       
   923             }
       
   924             Some(e) => e,
       
   925         };
       
   926         self.copy_map_remove(filename)?;
       
   927         self.with_dmap_mut(|map| {
       
   928             map.set_clean(filename, old_entry, mode, size, mtime)
       
   929         })
   882     }
   930     }
   883 
   931 
   884     pub fn reset_state(
   932     pub fn reset_state(
   885         &mut self,
   933         &mut self,
   886         filename: &HgPath,
   934         filename: &HgPath,