equal
deleted
inserted
replaced
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, |