##// END OF EJS Templates
fix: allow tools to use :linerange, but also run if a file is unchanged...
fix: allow tools to use :linerange, but also run if a file is unchanged The definition of "unchanged" here is subtle, because pure deletion diff hunks are ignored. That means this is different from using the --whole flag. This change allows you to configure, for example, a code formatter that: 1. Formats specific line ranges if specified via flags 2. Does not format the entire file when there are no line ranges provided 3. Performs some other kind of formatting regardless of provided line ranges This sounds a little far fetched, but it is meant to address a specific corner case encountered in Google's use of the fix extension. The default behavior is kept because it exists to prevent mistakes that could erase uncommitted changes. Differential Revision: https://phab.mercurial-scm.org/D6723

File last commit:

r42980:565c143f default
r42983:69b37b72 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...
r42975 // 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...
r42976 use crate::DirstateParseError;
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42975 use std::collections::HashMap;
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42976 use std::convert::TryFrom;
Raphaël Gomès
rust-parsers: switch to parse/pack_dirstate to mutate-on-loop...
r42975
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...
r42980 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...
r42975 #[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...
r42975 #[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...
r42976 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...
r42975 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...
r42975 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...
r42976
#[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'?',
}
}
}