lib.rs
184 lines
| 5.3 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. | ||||
mod ancestors; | ||||
Georges Racinet on ishtar.racinet.fr
|
r41278 | pub mod dagops; | ||
Georges Racinet
|
r41084 | pub use ancestors::{AncestorsIterator, LazyAncestors, MissingAncestors}; | ||
Raphaël Gomès
|
r42489 | mod dirstate; | ||
Georges Racinet
|
r42355 | pub mod discovery; | ||
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
|
r42998 | dirstate_map::DirstateMap, | ||
Raphaël Gomès
|
r42993 | parsers::{pack_dirstate, parse_dirstate, PARENT_SIZE}, | ||
Raphaël Gomès
|
r45011 | status::{status, StatusOptions, StatusResult}, | ||
Yuya Nishihara
|
r43156 | CopyMap, CopyMapIter, DirstateEntry, DirstateParents, EntryState, | ||
StateMap, StateMapIter, | ||||
Raphaël Gomès
|
r42489 | }; | ||
Raphaël Gomès
|
r42514 | mod filepatterns; | ||
Raphaël Gomès
|
r43742 | pub mod matchers; | ||
Georges Racinet
|
r44457 | pub mod revlog; | ||
pub use revlog::*; | ||||
Raphaël Gomès
|
r44786 | #[cfg(feature = "with-re2")] | ||
pub mod re2; | ||||
Raphaël Gomès
|
r42829 | pub mod utils; | ||
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::{ | ||
Raphaël Gomès
|
r44784 | parse_pattern_syntax, read_pattern_file, IgnorePattern, | ||
PatternFileWarning, PatternSyntax, | ||||
Raphaël Gomès
|
r42514 | }; | ||
Raphaël Gomès
|
r44278 | use std::collections::HashMap; | ||
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>; | ||||
Georges Racinet
|
r40307 | #[derive(Clone, Debug, PartialEq)] | ||
Raphaël Gomès
|
r42488 | pub enum DirstateParseError { | ||
TooLittleData, | ||||
Overflow, | ||||
CorruptedEntry(String), | ||||
Raphaël Gomès
|
r42993 | Damaged, | ||
Raphaël Gomès
|
r42488 | } | ||
Raphaël Gomès
|
r42994 | impl From<std::io::Error> for DirstateParseError { | ||
fn from(e: std::io::Error) -> Self { | ||||
DirstateParseError::CorruptedEntry(e.to_string()) | ||||
} | ||||
} | ||||
impl ToString for DirstateParseError { | ||||
fn to_string(&self) -> String { | ||||
use crate::DirstateParseError::*; | ||||
match self { | ||||
TooLittleData => "Too little data for dirstate.".to_string(), | ||||
Overflow => "Overflow in dirstate.".to_string(), | ||||
CorruptedEntry(e) => format!("Corrupted entry: {:?}.", e), | ||||
Damaged => "Dirstate appears to be damaged.".to_string(), | ||||
} | ||||
} | ||||
} | ||||
Raphaël Gomès
|
r42488 | #[derive(Debug, PartialEq)] | ||
pub enum DirstatePackError { | ||||
CorruptedEntry(String), | ||||
CorruptedParent, | ||||
BadSize(usize, usize), | ||||
} | ||||
Raphaël Gomès
|
r42994 | impl From<std::io::Error> for DirstatePackError { | ||
fn from(e: std::io::Error) -> Self { | ||||
DirstatePackError::CorruptedEntry(e.to_string()) | ||||
} | ||||
} | ||||
Raphaël Gomès
|
r42736 | #[derive(Debug, PartialEq)] | ||
pub enum DirstateMapError { | ||||
Raphaël Gomès
|
r43227 | PathNotFound(HgPathBuf), | ||
Raphaël Gomès
|
r42736 | EmptyPath, | ||
Raphaël Gomès
|
r44765 | InvalidPath(HgPathError), | ||
Raphaël Gomès
|
r44227 | } | ||
impl ToString for DirstateMapError { | ||||
fn to_string(&self) -> String { | ||||
match self { | ||||
Raphaël Gomès
|
r44765 | DirstateMapError::PathNotFound(_) => { | ||
"expected a value, found none".to_string() | ||||
Raphaël Gomès
|
r44227 | } | ||
Raphaël Gomès
|
r44765 | DirstateMapError::EmptyPath => "Overflow in dirstate.".to_string(), | ||
DirstateMapError::InvalidPath(e) => e.to_string(), | ||||
Raphaël Gomès
|
r44227 | } | ||
} | ||||
Raphaël Gomès
|
r42736 | } | ||
Raphaël Gomès
|
r42994 | pub enum DirstateError { | ||
Parse(DirstateParseError), | ||||
Pack(DirstatePackError), | ||||
Map(DirstateMapError), | ||||
IO(std::io::Error), | ||||
} | ||||
impl From<DirstateParseError> for DirstateError { | ||||
fn from(e: DirstateParseError) -> Self { | ||||
DirstateError::Parse(e) | ||||
Raphaël Gomès
|
r42488 | } | ||
} | ||||
Raphaël Gomès
|
r42994 | impl From<DirstatePackError> for DirstateError { | ||
fn from(e: DirstatePackError) -> Self { | ||||
DirstateError::Pack(e) | ||||
Raphaël Gomès
|
r42488 | } | ||
} | ||||
Raphaël Gomès
|
r42514 | |||
#[derive(Debug)] | ||||
pub enum PatternError { | ||||
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), | ||||
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
|
r45006 | /// This is temporary, see `re2/mod.rs`. | ||
/// This will cause a fallback to Python. | ||||
Re2NotInstalled, | ||||
Raphaël Gomès
|
r42514 | } | ||
Raphaël Gomès
|
r44784 | impl ToString for PatternError { | ||
fn to_string(&self) -> String { | ||||
match self { | ||||
PatternError::UnsupportedSyntax(syntax) => { | ||||
format!("Unsupported syntax {}", syntax) | ||||
} | ||||
PatternError::UnsupportedSyntaxInFile(syntax, file_path, line) => { | ||||
format!( | ||||
"{}:{}: unsupported syntax {}", | ||||
file_path, line, syntax | ||||
) | ||||
} | ||||
PatternError::TooLong(size) => { | ||||
format!("matcher pattern is too long ({} bytes)", size) | ||||
} | ||||
PatternError::IO(e) => e.to_string(), | ||||
PatternError::Path(e) => e.to_string(), | ||||
Raphaël Gomès
|
r44785 | PatternError::NonRegexPattern(pattern) => { | ||
format!("'{:?}' cannot be turned into a regex", pattern) | ||||
} | ||||
Raphaël Gomès
|
r45006 | PatternError::Re2NotInstalled => { | ||
"Re2 is not installed, cannot use regex functionality." | ||||
.to_string() | ||||
} | ||||
Raphaël Gomès
|
r44784 | } | ||
Raphaël Gomès
|
r42514 | } | ||
} | ||||
Raphaël Gomès
|
r42994 | |||
impl From<DirstateMapError> for DirstateError { | ||||
fn from(e: DirstateMapError) -> Self { | ||||
DirstateError::Map(e) | ||||
} | ||||
} | ||||
impl From<std::io::Error> for DirstateError { | ||||
fn from(e: std::io::Error) -> Self { | ||||
DirstateError::IO(e) | ||||
} | ||||
} | ||||
Raphaël Gomès
|
r44784 | |||
impl From<std::io::Error> for PatternError { | ||||
fn from(e: std::io::Error) -> Self { | ||||
PatternError::IO(e) | ||||
} | ||||
} | ||||
impl From<HgPathError> for PatternError { | ||||
fn from(e: HgPathError) -> Self { | ||||
PatternError::Path(e) | ||||
} | ||||
} | ||||