dispatch.rs
353 lines
| 8.9 KiB
| application/rls-services+xml
|
RustLexer
Simon Sapin
|
r47863 | use std::path::PathBuf; | ||
Simon Sapin
|
r47871 | use crate::dirstate::parsers::Timestamp; | ||
Simon Sapin
|
r48126 | use crate::dirstate_tree::on_disk::DirstateV2ParseError; | ||
Simon Sapin
|
r47863 | use crate::matchers::Matcher; | ||
use crate::utils::hg_path::{HgPath, HgPathBuf}; | ||||
use crate::CopyMapIter; | ||||
use crate::DirstateEntry; | ||||
use crate::DirstateError; | ||||
use crate::DirstateMap; | ||||
use crate::DirstateParents; | ||||
use crate::DirstateStatus; | ||||
use crate::EntryState; | ||||
use crate::PatternFileWarning; | ||||
use crate::StateMapIter; | ||||
use crate::StatusError; | ||||
use crate::StatusOptions; | ||||
pub trait DirstateMapMethods { | ||||
fn clear(&mut self); | ||||
fn add_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
entry: DirstateEntry, | ||||
Simon Sapin
|
r48126 | ) -> Result<(), DirstateError>; | ||
Simon Sapin
|
r47863 | |||
fn remove_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
size: i32, | ||||
Simon Sapin
|
r48126 | ) -> Result<(), DirstateError>; | ||
Simon Sapin
|
r47863 | |||
fn drop_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
Simon Sapin
|
r48126 | ) -> Result<bool, DirstateError>; | ||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn clear_ambiguous_times( | ||
&mut self, | ||||
filenames: Vec<HgPathBuf>, | ||||
now: i32, | ||||
) -> Result<(), DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn non_normal_entries_contains( | ||
&mut self, | ||||
key: &HgPath, | ||||
) -> Result<bool, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47864 | |||
Simon Sapin
|
r47878 | fn non_normal_entries_remove(&mut self, key: &HgPath); | ||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r47864 | fn non_normal_or_other_parent_paths( | ||
Simon Sapin
|
r47863 | &mut self, | ||
Simon Sapin
|
r48126 | ) -> Box<dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + '_>; | ||
Simon Sapin
|
r47863 | |||
fn set_non_normal_other_parent_entries(&mut self, force: bool); | ||||
Simon Sapin
|
r47864 | fn iter_non_normal_paths( | ||
&mut self, | ||||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
>; | ||||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r47864 | fn iter_non_normal_paths_panic( | ||
&self, | ||||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
>; | ||||
Simon Sapin
|
r47864 | |||
fn iter_other_parent_paths( | ||||
Simon Sapin
|
r47863 | &mut self, | ||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
>; | ||||
Simon Sapin
|
r47863 | |||
fn has_tracked_dir( | ||||
&mut self, | ||||
directory: &HgPath, | ||||
Simon Sapin
|
r48126 | ) -> Result<bool, DirstateError>; | ||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn has_dir(&mut self, directory: &HgPath) -> Result<bool, DirstateError>; | ||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48055 | fn pack_v1( | ||
&mut self, | ||||
parents: DirstateParents, | ||||
now: Timestamp, | ||||
) -> Result<Vec<u8>, DirstateError>; | ||||
fn pack_v2( | ||||
Simon Sapin
|
r47863 | &mut self, | ||
parents: DirstateParents, | ||||
Simon Sapin
|
r47871 | now: Timestamp, | ||
Simon Sapin
|
r47863 | ) -> Result<Vec<u8>, DirstateError>; | ||
Simon Sapin
|
r48126 | fn set_all_dirs(&mut self) -> Result<(), DirstateError>; | ||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn set_dirs(&mut self) -> Result<(), DirstateError>; | ||
Simon Sapin
|
r47863 | |||
fn status<'a>( | ||||
Simon Sapin
|
r47882 | &'a mut self, | ||
Simon Sapin
|
r47863 | matcher: &'a (dyn Matcher + Sync), | ||
root_dir: PathBuf, | ||||
ignore_files: Vec<PathBuf>, | ||||
options: StatusOptions, | ||||
Simon Sapin
|
r47880 | ) -> Result<(DirstateStatus<'a>, Vec<PatternFileWarning>), StatusError>; | ||
Simon Sapin
|
r47863 | |||
fn copy_map_len(&self) -> usize; | ||||
fn copy_map_iter(&self) -> CopyMapIter<'_>; | ||||
Simon Sapin
|
r48126 | fn copy_map_contains_key( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<bool, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn copy_map_get( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<Option<&HgPath>, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn copy_map_remove( | ||
&mut self, | ||||
key: &HgPath, | ||||
) -> Result<Option<HgPathBuf>, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
fn copy_map_insert( | ||||
&mut self, | ||||
key: HgPathBuf, | ||||
value: HgPathBuf, | ||||
Simon Sapin
|
r48126 | ) -> Result<Option<HgPathBuf>, DirstateV2ParseError>; | ||
Simon Sapin
|
r47863 | |||
fn len(&self) -> usize; | ||||
Simon Sapin
|
r48126 | fn contains_key(&self, key: &HgPath) | ||
-> Result<bool, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
Simon Sapin
|
r48126 | fn get( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<Option<DirstateEntry>, DirstateV2ParseError>; | ||||
Simon Sapin
|
r47863 | |||
fn iter(&self) -> StateMapIter<'_>; | ||||
} | ||||
impl DirstateMapMethods for DirstateMap { | ||||
fn clear(&mut self) { | ||||
self.clear() | ||||
} | ||||
fn add_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
entry: DirstateEntry, | ||||
Simon Sapin
|
r48126 | ) -> Result<(), DirstateError> { | ||
Simon Sapin
|
r47863 | self.add_file(filename, old_state, entry) | ||
} | ||||
fn remove_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
size: i32, | ||||
Simon Sapin
|
r48126 | ) -> Result<(), DirstateError> { | ||
Simon Sapin
|
r47863 | self.remove_file(filename, old_state, size) | ||
} | ||||
fn drop_file( | ||||
&mut self, | ||||
filename: &HgPath, | ||||
old_state: EntryState, | ||||
Simon Sapin
|
r48126 | ) -> Result<bool, DirstateError> { | ||
Simon Sapin
|
r47863 | self.drop_file(filename, old_state) | ||
} | ||||
Simon Sapin
|
r48126 | fn clear_ambiguous_times( | ||
&mut self, | ||||
filenames: Vec<HgPathBuf>, | ||||
now: i32, | ||||
) -> Result<(), DirstateV2ParseError> { | ||||
Ok(self.clear_ambiguous_times(filenames, now)) | ||||
Simon Sapin
|
r47863 | } | ||
Simon Sapin
|
r48126 | fn non_normal_entries_contains( | ||
&mut self, | ||||
key: &HgPath, | ||||
) -> Result<bool, DirstateV2ParseError> { | ||||
Simon Sapin
|
r47864 | let (non_normal, _other_parent) = | ||
self.get_non_normal_other_parent_entries(); | ||||
Simon Sapin
|
r48126 | Ok(non_normal.contains(key)) | ||
Simon Sapin
|
r47864 | } | ||
Simon Sapin
|
r47878 | fn non_normal_entries_remove(&mut self, key: &HgPath) { | ||
Simon Sapin
|
r47863 | self.non_normal_entries_remove(key) | ||
} | ||||
Simon Sapin
|
r47864 | fn non_normal_or_other_parent_paths( | ||
Simon Sapin
|
r47863 | &mut self, | ||
Simon Sapin
|
r48126 | ) -> Box<dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + '_> | ||
{ | ||||
Simon Sapin
|
r47864 | let (non_normal, other_parent) = | ||
self.get_non_normal_other_parent_entries(); | ||||
Simon Sapin
|
r48126 | Box::new(non_normal.union(other_parent).map(|p| Ok(&**p))) | ||
Simon Sapin
|
r47863 | } | ||
fn set_non_normal_other_parent_entries(&mut self, force: bool) { | ||||
self.set_non_normal_other_parent_entries(force) | ||||
} | ||||
Simon Sapin
|
r47864 | fn iter_non_normal_paths( | ||
&mut self, | ||||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
> { | ||||
Simon Sapin
|
r47864 | let (non_normal, _other_parent) = | ||
self.get_non_normal_other_parent_entries(); | ||||
Simon Sapin
|
r48126 | Box::new(non_normal.iter().map(|p| Ok(&**p))) | ||
Simon Sapin
|
r47863 | } | ||
Simon Sapin
|
r47864 | fn iter_non_normal_paths_panic( | ||
&self, | ||||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
> { | ||||
Simon Sapin
|
r47864 | let (non_normal, _other_parent) = | ||
self.get_non_normal_other_parent_entries_panic(); | ||||
Simon Sapin
|
r48126 | Box::new(non_normal.iter().map(|p| Ok(&**p))) | ||
Simon Sapin
|
r47864 | } | ||
fn iter_other_parent_paths( | ||||
Simon Sapin
|
r47863 | &mut self, | ||
Simon Sapin
|
r48126 | ) -> Box< | ||
dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_, | ||||
> { | ||||
Simon Sapin
|
r47864 | let (_non_normal, other_parent) = | ||
self.get_non_normal_other_parent_entries(); | ||||
Simon Sapin
|
r48126 | Box::new(other_parent.iter().map(|p| Ok(&**p))) | ||
Simon Sapin
|
r47863 | } | ||
fn has_tracked_dir( | ||||
&mut self, | ||||
directory: &HgPath, | ||||
Simon Sapin
|
r48126 | ) -> Result<bool, DirstateError> { | ||
Simon Sapin
|
r47863 | self.has_tracked_dir(directory) | ||
} | ||||
Simon Sapin
|
r48126 | fn has_dir(&mut self, directory: &HgPath) -> Result<bool, DirstateError> { | ||
Simon Sapin
|
r47863 | self.has_dir(directory) | ||
} | ||||
Simon Sapin
|
r48055 | fn pack_v1( | ||
Simon Sapin
|
r47863 | &mut self, | ||
parents: DirstateParents, | ||||
Simon Sapin
|
r47871 | now: Timestamp, | ||
Simon Sapin
|
r47863 | ) -> Result<Vec<u8>, DirstateError> { | ||
self.pack(parents, now) | ||||
} | ||||
Simon Sapin
|
r48055 | fn pack_v2( | ||
&mut self, | ||||
_parents: DirstateParents, | ||||
_now: Timestamp, | ||||
) -> Result<Vec<u8>, DirstateError> { | ||||
panic!( | ||||
"should have used dirstate_tree::DirstateMap to use the v2 format" | ||||
) | ||||
} | ||||
Simon Sapin
|
r48126 | fn set_all_dirs(&mut self) -> Result<(), DirstateError> { | ||
Simon Sapin
|
r47863 | self.set_all_dirs() | ||
} | ||||
Simon Sapin
|
r48126 | fn set_dirs(&mut self) -> Result<(), DirstateError> { | ||
Simon Sapin
|
r47863 | self.set_dirs() | ||
} | ||||
fn status<'a>( | ||||
Simon Sapin
|
r47882 | &'a mut self, | ||
Simon Sapin
|
r47863 | matcher: &'a (dyn Matcher + Sync), | ||
root_dir: PathBuf, | ||||
ignore_files: Vec<PathBuf>, | ||||
options: StatusOptions, | ||||
Simon Sapin
|
r47880 | ) -> Result<(DirstateStatus<'a>, Vec<PatternFileWarning>), StatusError> | ||
{ | ||||
Simon Sapin
|
r47863 | crate::status(self, matcher, root_dir, ignore_files, options) | ||
} | ||||
fn copy_map_len(&self) -> usize { | ||||
self.copy_map.len() | ||||
} | ||||
fn copy_map_iter(&self) -> CopyMapIter<'_> { | ||||
Simon Sapin
|
r48126 | Box::new( | ||
self.copy_map | ||||
.iter() | ||||
.map(|(key, value)| Ok((&**key, &**value))), | ||||
) | ||||
Simon Sapin
|
r47863 | } | ||
Simon Sapin
|
r48126 | fn copy_map_contains_key( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<bool, DirstateV2ParseError> { | ||||
Ok(self.copy_map.contains_key(key)) | ||||
Simon Sapin
|
r47863 | } | ||
Simon Sapin
|
r48126 | fn copy_map_get( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<Option<&HgPath>, DirstateV2ParseError> { | ||||
Ok(self.copy_map.get(key).map(|p| &**p)) | ||||
} | ||||
fn copy_map_remove( | ||||
&mut self, | ||||
key: &HgPath, | ||||
) -> Result<Option<HgPathBuf>, DirstateV2ParseError> { | ||||
Ok(self.copy_map.remove(key)) | ||||
Simon Sapin
|
r47863 | } | ||
fn copy_map_insert( | ||||
&mut self, | ||||
key: HgPathBuf, | ||||
value: HgPathBuf, | ||||
Simon Sapin
|
r48126 | ) -> Result<Option<HgPathBuf>, DirstateV2ParseError> { | ||
Ok(self.copy_map.insert(key, value)) | ||||
Simon Sapin
|
r47863 | } | ||
fn len(&self) -> usize { | ||||
(&**self).len() | ||||
} | ||||
Simon Sapin
|
r48126 | fn contains_key( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<bool, DirstateV2ParseError> { | ||||
Ok((&**self).contains_key(key)) | ||||
Simon Sapin
|
r47863 | } | ||
Simon Sapin
|
r48126 | fn get( | ||
&self, | ||||
key: &HgPath, | ||||
) -> Result<Option<DirstateEntry>, DirstateV2ParseError> { | ||||
Ok((&**self).get(key).cloned()) | ||||
Simon Sapin
|
r47863 | } | ||
fn iter(&self) -> StateMapIter<'_> { | ||||
Simon Sapin
|
r48126 | Box::new((&**self).iter().map(|(key, value)| Ok((&**key, *value)))) | ||
Simon Sapin
|
r47863 | } | ||
} | ||||