##// END OF EJS Templates
rust-dirstate: use PARENT_SIZE constant where appropriate
rust-dirstate: use PARENT_SIZE constant where appropriate

File last commit:

r42980:565c143f default
r43066:99dff426 default
Show More
dirstate.rs
80 lines | 2.0 KiB | application/rls-services+xml | RustLexer
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 // dirstate module
//
// Copyright 2019 Raphaël Gomès <rgomes@octobus.net>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994 use crate::DirstateParseError;
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 use std::collections::HashMap;
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994 use std::convert::TryFrom;
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 pub mod dirs_multiset;
Raphaël Gomès
rust-dirstate: rust implementation of dirstatemap...
r42998 pub mod dirstate_map;
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 pub mod parsers;
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 #[derive(Debug, PartialEq, Clone)]
pub struct DirstateParents {
pub p1: [u8; 20],
pub p2: [u8; 20],
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 }
/// The C implementation uses all signed types. This will be an issue
/// either when 4GB+ source files are commonplace or in 2038, whichever
/// comes first.
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 #[derive(Debug, PartialEq, Copy, Clone)]
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 pub struct DirstateEntry {
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994 pub state: EntryState,
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 pub mode: i32,
pub mtime: i32,
pub size: i32,
}
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 pub type StateMap = HashMap<Vec<u8>, DirstateEntry>;
pub type CopyMap = HashMap<Vec<u8>, Vec<u8>>;
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828
/// The Python implementation passes either a mapping (dirstate) or a flat
/// iterable (manifest)
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42993 pub enum DirsIterable<'a> {
Dirstate(&'a HashMap<Vec<u8>, DirstateEntry>),
Manifest(&'a Vec<Vec<u8>>),
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 }
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum EntryState {
Normal,
Added,
Removed,
Merged,
Unknown,
}
impl TryFrom<u8> for EntryState {
type Error = DirstateParseError;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
b'n' => Ok(EntryState::Normal),
b'a' => Ok(EntryState::Added),
b'r' => Ok(EntryState::Removed),
b'm' => Ok(EntryState::Merged),
b'?' => Ok(EntryState::Unknown),
_ => Err(DirstateParseError::CorruptedEntry(format!(
"Incorrect entry state {}",
value
))),
}
}
}
impl Into<u8> for EntryState {
fn into(self) -> u8 {
match self {
EntryState::Normal => b'n',
EntryState::Added => b'a',
EntryState::Removed => b'r',
EntryState::Merged => b'm',
EntryState::Unknown => b'?',
}
}
}