lib.rs
144 lines
| 4.2 KiB
| application/rls-services+xml
|
RustLexer
Georges Racinet
|
r44455 | // Copyright 2018-2020 Georges Racinet <georges.racinet@octobus.net> | ||
// and Mercurial contributors | ||||
Georges Racinet
|
r40307 | // | ||
// This software may be used and distributed according to the terms of the | ||||
// GNU General Public License version 2 or any later version. | ||||
Simon Sapin
|
r47172 | |||
Georges Racinet
|
r40307 | mod ancestors; | ||
Georges Racinet on ishtar.racinet.fr
|
r41278 | pub mod dagops; | ||
Simon Sapin
|
r47167 | pub mod errors; | ||
Raphaël Gomès
|
r50383 | pub mod narrow; | ||
Raphaël Gomès
|
r50380 | pub mod sparse; | ||
pacien
|
r49351 | pub use ancestors::{AncestorsIterator, MissingAncestors}; | ||
Simon Sapin
|
r47871 | pub mod dirstate; | ||
Simon Sapin
|
r47863 | pub mod dirstate_tree; | ||
Georges Racinet
|
r42355 | pub mod discovery; | ||
Pulkit Goyal
|
r48199 | pub mod exit_codes; | ||
Simon Sapin
|
r46536 | pub mod requirements; | ||
Raphaël Gomès
|
r42489 | pub mod testing; // unconditionally built, for use from integration tests | ||
pub use dirstate::{ | ||||
Yuya Nishihara
|
r43155 | dirs_multiset::{DirsMultiset, DirsMultisetIter}, | ||
Raphaël Gomès
|
r45015 | status::{ | ||
Simon Sapin
|
r48882 | BadMatch, BadType, DirstateStatus, HgPathCow, StatusError, | ||
Simon Sapin
|
r47555 | StatusOptions, | ||
Raphaël Gomès
|
r45015 | }, | ||
Simon Sapin
|
r48882 | DirstateEntry, DirstateParents, EntryState, | ||
Raphaël Gomès
|
r42489 | }; | ||
r46556 | pub mod copy_tracing; | |||
Spencer Baugh
|
r51759 | pub mod filepatterns; | ||
Raphaël Gomès
|
r43742 | pub mod matchers; | ||
Simon Sapin
|
r46782 | pub mod repo; | ||
Georges Racinet
|
r44457 | pub mod revlog; | ||
pub use revlog::*; | ||||
Arseniy Alekseyev
|
r50789 | pub mod checkexec; | ||
Raphaël Gomès
|
r46803 | pub mod config; | ||
Simon Sapin
|
r49245 | pub mod lock; | ||
Simon Sapin
|
r47341 | pub mod logging; | ||
Antoine Cezar
|
r45501 | pub mod operations; | ||
Simon Sapin
|
r47162 | pub mod revset; | ||
Raphaël Gomès
|
r42829 | pub mod utils; | ||
Simon Sapin
|
r48764 | pub mod vfs; | ||
Raphaël Gomès
|
r42514 | |||
Raphaël Gomès
|
r44765 | use crate::utils::hg_path::{HgPathBuf, HgPathError}; | ||
Raphaël Gomès
|
r42514 | pub use filepatterns::{ | ||
Arseniy Alekseyev
|
r52498 | parse_pattern_syntax_kind, read_pattern_file, IgnorePattern, | ||
Raphaël Gomès
|
r44784 | PatternFileWarning, PatternSyntax, | ||
Raphaël Gomès
|
r42514 | }; | ||
Raphaël Gomès
|
r44278 | use std::collections::HashMap; | ||
Simon Sapin
|
r47173 | use std::fmt; | ||
Raphaël Gomès
|
r44278 | use twox_hash::RandomXxHashBuilder64; | ||
Georges Racinet
|
r40307 | |||
Raphaël Gomès
|
r42514 | pub type LineNumber = usize; | ||
Raphaël Gomès
|
r44278 | /// Rust's default hasher is too slow because it tries to prevent collision | ||
/// attacks. We are not concerned about those: if an ill-minded person has | ||||
/// write access to your repository, you have other issues. | ||||
pub type FastHashMap<K, V> = HashMap<K, V, RandomXxHashBuilder64>; | ||||
Simon Sapin
|
r49805 | // TODO: should this be the default `FastHashMap` for all of hg-core, not just | ||
// dirstate_tree? How does XxHash compare with AHash, hashbrown’s default? | ||||
pub type FastHashbrownMap<K, V> = | ||||
hashbrown::HashMap<K, V, RandomXxHashBuilder64>; | ||||
Raphaël Gomès
|
r42488 | #[derive(Debug, PartialEq)] | ||
Raphaël Gomès
|
r42736 | pub enum DirstateMapError { | ||
Raphaël Gomès
|
r43227 | PathNotFound(HgPathBuf), | ||
Raphaël Gomès
|
r44765 | InvalidPath(HgPathError), | ||
Raphaël Gomès
|
r44227 | } | ||
Spencer Baugh
|
r51753 | impl From<HgPathError> for DirstateMapError { | ||
fn from(error: HgPathError) -> Self { | ||||
Self::InvalidPath(error) | ||||
} | ||||
} | ||||
Simon Sapin
|
r47173 | impl fmt::Display for DirstateMapError { | ||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||
Raphaël Gomès
|
r44227 | match self { | ||
Raphaël Gomès
|
r44765 | DirstateMapError::PathNotFound(_) => { | ||
Simon Sapin
|
r47173 | f.write_str("expected a value, found none") | ||
Raphaël Gomès
|
r44227 | } | ||
Simon Sapin
|
r47173 | DirstateMapError::InvalidPath(path_error) => path_error.fmt(f), | ||
Raphaël Gomès
|
r44227 | } | ||
} | ||||
Raphaël Gomès
|
r42736 | } | ||
Simon Sapin
|
r47164 | #[derive(Debug, derive_more::From)] | ||
Raphaël Gomès
|
r42994 | pub enum DirstateError { | ||
Map(DirstateMapError), | ||||
Simon Sapin
|
r47168 | Common(errors::HgError), | ||
Raphaël Gomès
|
r42994 | } | ||
Spencer Baugh
|
r51753 | impl From<HgPathError> for DirstateError { | ||
fn from(error: HgPathError) -> Self { | ||||
Self::Map(DirstateMapError::InvalidPath(error)) | ||||
} | ||||
} | ||||
Simon Sapin
|
r48126 | impl fmt::Display for DirstateError { | ||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||
match self { | ||||
DirstateError::Map(error) => error.fmt(f), | ||||
DirstateError::Common(error) => error.fmt(f), | ||||
} | ||||
} | ||||
} | ||||
Simon Sapin
|
r47164 | #[derive(Debug, derive_more::From)] | ||
Raphaël Gomès
|
r42514 | pub enum PatternError { | ||
Simon Sapin
|
r47164 | #[from] | ||
Raphaël Gomès
|
r44784 | Path(HgPathError), | ||
Raphaël Gomès
|
r42514 | UnsupportedSyntax(String), | ||
Raphaël Gomès
|
r44784 | UnsupportedSyntaxInFile(String, String, usize), | ||
TooLong(usize), | ||||
Simon Sapin
|
r47164 | #[from] | ||
Raphaël Gomès
|
r44784 | IO(std::io::Error), | ||
Raphaël Gomès
|
r44785 | /// Needed a pattern that can be turned into a regex but got one that | ||
/// can't. This should only happen through programmer error. | ||||
NonRegexPattern(IgnorePattern), | ||||
Raphaël Gomès
|
r42514 | } | ||
Simon Sapin
|
r47173 | impl fmt::Display for PatternError { | ||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||
Raphaël Gomès
|
r44784 | match self { | ||
PatternError::UnsupportedSyntax(syntax) => { | ||||
Simon Sapin
|
r47173 | write!(f, "Unsupported syntax {}", syntax) | ||
Raphaël Gomès
|
r44784 | } | ||
PatternError::UnsupportedSyntaxInFile(syntax, file_path, line) => { | ||||
Simon Sapin
|
r47173 | write!( | ||
f, | ||||
Raphaël Gomès
|
r44784 | "{}:{}: unsupported syntax {}", | ||
file_path, line, syntax | ||||
) | ||||
} | ||||
PatternError::TooLong(size) => { | ||||
Simon Sapin
|
r47173 | write!(f, "matcher pattern is too long ({} bytes)", size) | ||
Raphaël Gomès
|
r44784 | } | ||
Simon Sapin
|
r47173 | PatternError::IO(error) => error.fmt(f), | ||
PatternError::Path(error) => error.fmt(f), | ||||
Raphaël Gomès
|
r44785 | PatternError::NonRegexPattern(pattern) => { | ||
Simon Sapin
|
r47173 | write!(f, "'{:?}' cannot be turned into a regex", pattern) | ||
Raphaël Gomès
|
r44785 | } | ||
Raphaël Gomès
|
r44784 | } | ||
Raphaël Gomès
|
r42514 | } | ||
} | ||||