rust/hg-core/src/dirstate_tree/dirstate_map.rs
changeset 47511 eaae39894312
parent 47483 ca8121d26732
child 47521 abed645b8e96
equal deleted inserted replaced
47510:94c58f3aab56 47511:eaae39894312
     9 use super::path_with_basename::WithBasename;
     9 use super::path_with_basename::WithBasename;
    10 use crate::dirstate::parsers::pack_entry;
    10 use crate::dirstate::parsers::pack_entry;
    11 use crate::dirstate::parsers::packed_entry_size;
    11 use crate::dirstate::parsers::packed_entry_size;
    12 use crate::dirstate::parsers::parse_dirstate_entries;
    12 use crate::dirstate::parsers::parse_dirstate_entries;
    13 use crate::dirstate::parsers::Timestamp;
    13 use crate::dirstate::parsers::Timestamp;
       
    14 use crate::dirstate::SIZE_FROM_OTHER_PARENT;
       
    15 use crate::dirstate::SIZE_NON_NORMAL;
    14 use crate::matchers::Matcher;
    16 use crate::matchers::Matcher;
    15 use crate::utils::hg_path::{HgPath, HgPathBuf};
    17 use crate::utils::hg_path::{HgPath, HgPathBuf};
    16 use crate::CopyMapIter;
    18 use crate::CopyMapIter;
    17 use crate::DirstateEntry;
    19 use crate::DirstateEntry;
    18 use crate::DirstateError;
    20 use crate::DirstateError;
   724     }
   726     }
   725 
   727 
   726     fn remove_file(
   728     fn remove_file(
   727         &mut self,
   729         &mut self,
   728         filename: &HgPath,
   730         filename: &HgPath,
   729         old_state: EntryState,
   731         in_merge: bool,
   730         size: i32,
       
   731     ) -> Result<(), DirstateError> {
   732     ) -> Result<(), DirstateError> {
       
   733         let old_entry_opt = self.get(filename)?;
       
   734         let old_state = match old_entry_opt {
       
   735             Some(e) => e.state,
       
   736             None => EntryState::Unknown,
       
   737         };
       
   738         let mut size = 0;
       
   739         if in_merge {
       
   740             // XXX we should not be able to have 'm' state and 'FROM_P2' if not
       
   741             // during a merge. So I (marmoute) am not sure we need the
       
   742             // conditionnal at all. Adding double checking this with assert
       
   743             // would be nice.
       
   744             if let Some(old_entry) = old_entry_opt {
       
   745                 // backup the previous state
       
   746                 if old_entry.state == EntryState::Merged {
       
   747                     size = SIZE_NON_NORMAL;
       
   748                 } else if old_entry.state == EntryState::Normal
       
   749                     && old_entry.size == SIZE_FROM_OTHER_PARENT
       
   750                 {
       
   751                     // other parent
       
   752                     size = SIZE_FROM_OTHER_PARENT;
       
   753                 }
       
   754             }
       
   755         }
       
   756         if size == 0 {
       
   757             self.copy_map_remove(filename)?;
       
   758         }
   732         let entry = DirstateEntry {
   759         let entry = DirstateEntry {
   733             state: EntryState::Removed,
   760             state: EntryState::Removed,
   734             mode: 0,
   761             mode: 0,
   735             size,
   762             size,
   736             mtime: 0,
   763             mtime: 0,