rust/hg-core/src/dirstate/dirstate_map.rs
changeset 42817 1a535313ad1b
parent 42815 5399532510ae
child 42818 2e1f74cc3350
equal deleted inserted replaced
42816:79561843729a 42817:1a535313ad1b
    66         self.state_map.clear();
    66         self.state_map.clear();
    67         self.copy_map.clear();
    67         self.copy_map.clear();
    68         self.file_fold_map = None;
    68         self.file_fold_map = None;
    69         self.non_normal_set.clear();
    69         self.non_normal_set.clear();
    70         self.other_parent_set.clear();
    70         self.other_parent_set.clear();
    71         self.set_parents(DirstateParents {
    71         self.set_parents(&DirstateParents {
    72             p1: NULL_ID,
    72             p1: NULL_ID,
    73             p2: NULL_ID,
    73             p2: NULL_ID,
    74         })
    74         })
    75     }
    75     }
    76 
    76 
   251     }
   251     }
   252 
   252 
   253     pub fn parents(
   253     pub fn parents(
   254         &mut self,
   254         &mut self,
   255         file_contents: &[u8],
   255         file_contents: &[u8],
   256     ) -> Result<DirstateParents, DirstateError> {
   256     ) -> Result<&DirstateParents, DirstateError> {
   257         if let Some(ref parents) = self.parents {
   257         if let Some(ref parents) = self.parents {
   258             return Ok(parents.clone());
   258             return Ok(parents);
   259         }
   259         }
   260         let parents;
   260         let parents;
   261         if file_contents.len() == PARENT_SIZE * 2 {
   261         if file_contents.len() == PARENT_SIZE * 2 {
   262             parents = DirstateParents {
   262             parents = DirstateParents {
   263                 p1: file_contents[..PARENT_SIZE].try_into().unwrap(),
   263                 p1: file_contents[..PARENT_SIZE].try_into().unwrap(),
   272             };
   272             };
   273         } else {
   273         } else {
   274             return Err(DirstateError::Parse(DirstateParseError::Damaged));
   274             return Err(DirstateError::Parse(DirstateParseError::Damaged));
   275         }
   275         }
   276 
   276 
   277         self.parents = Some(parents.to_owned());
   277         self.parents = Some(parents);
   278         Ok(parents.clone())
   278         Ok(self.parents.as_ref().unwrap())
   279     }
   279     }
   280 
   280 
   281     pub fn set_parents(&mut self, parents: DirstateParents) {
   281     pub fn set_parents(&mut self, parents: &DirstateParents) {
   282         self.parents = Some(parents.clone());
   282         self.parents = Some(parents.clone());
   283         self.dirty_parents = true;
   283         self.dirty_parents = true;
   284     }
   284     }
   285 
   285 
   286     pub fn read(
   286     pub fn read(
   296             &mut self.copy_map,
   296             &mut self.copy_map,
   297             file_contents,
   297             file_contents,
   298         )?;
   298         )?;
   299 
   299 
   300         if !self.dirty_parents {
   300         if !self.dirty_parents {
   301             self.set_parents(parents.to_owned());
   301             self.set_parents(&parents);
   302         }
   302         }
   303 
   303 
   304         Ok(Some(parents))
   304         Ok(Some(parents))
   305     }
   305     }
   306 
   306 
   318         self.non_normal_set = result.0;
   318         self.non_normal_set = result.0;
   319         self.other_parent_set = result.1;
   319         self.other_parent_set = result.1;
   320         Ok(packed)
   320         Ok(packed)
   321     }
   321     }
   322 
   322 
   323     pub fn build_file_fold_map(&mut self) -> FileFoldMap {
   323     pub fn build_file_fold_map(&mut self) -> &FileFoldMap {
   324         if let Some(ref file_fold_map) = self.file_fold_map {
   324         if let Some(ref file_fold_map) = self.file_fold_map {
   325             return file_fold_map.to_owned();
   325             return file_fold_map;
   326         }
   326         }
   327         let mut new_file_fold_map = FileFoldMap::new();
   327         let mut new_file_fold_map = FileFoldMap::new();
   328         for (filename, DirstateEntry { state, .. }) in self.state_map.borrow()
   328         for (filename, DirstateEntry { state, .. }) in self.state_map.borrow()
   329         {
   329         {
   330             if *state == EntryState::Removed {
   330             if *state == EntryState::Removed {
   333                     filename.to_owned(),
   333                     filename.to_owned(),
   334                 );
   334                 );
   335             }
   335             }
   336         }
   336         }
   337         self.file_fold_map = Some(new_file_fold_map);
   337         self.file_fold_map = Some(new_file_fold_map);
   338         self.file_fold_map.to_owned().unwrap()
   338         self.file_fold_map.as_ref().unwrap()
   339     }
   339     }
   340 }
   340 }
   341 
   341 
   342 #[cfg(test)]
   342 #[cfg(test)]
   343 mod tests {
   343 mod tests {