Mercurial > hg
diff rust/hg-core/src/lib.rs @ 42302:d1786c1d34fa
rust-dirstate: add rust implementation of `parse_dirstate` and `pack_dirstate`
Working towards the goal of having a complete Rust implementation of
`hg status`, these two utils are a first step of many to be taken
to improve performance and code maintainability.
Two dependencies have been added: `memchr` and `byteorder`.
Both of them have been written by reputable community members and are
very mature crates.
The Rust code will often need to use their byte-oriented functions.
A few unit tests have been added and may help future development and debugging.
In a future patch that uses `parse_dirstate` to stat the working tree in
parallel - which neither the Python nor the C implementations do - actual
performance improvements will be seen for larger repositories.
Differential Revision: https://phab.mercurial-scm.org/D6348
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 06 May 2019 22:48:09 +0200 |
parents | 10b465d61556 |
children | e240bec26626 |
line wrap: on
line diff
--- a/rust/hg-core/src/lib.rs Tue May 14 22:56:58 2019 -0700 +++ b/rust/hg-core/src/lib.rs Mon May 06 22:48:09 2019 +0200 @@ -2,6 +2,9 @@ // // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. +extern crate byteorder; +extern crate memchr; + mod ancestors; pub mod dagops; pub use ancestors::{AncestorsIterator, LazyAncestors, MissingAncestors}; @@ -40,3 +43,29 @@ ParentOutOfRange(Revision), WorkingDirectoryUnsupported, } + +#[derive(Clone, Debug, PartialEq)] +pub enum DirstateParseError { + TooLittleData, + Overflow, + CorruptedEntry(String), +} + +#[derive(Debug, PartialEq)] +pub enum DirstatePackError { + CorruptedEntry(String), + CorruptedParent, + BadSize(usize, usize), +} + +impl From<std::io::Error> for DirstatePackError { + fn from(e: std::io::Error) -> Self { + DirstatePackError::CorruptedEntry(e.to_string()) + } +} + +impl From<std::io::Error> for DirstateParseError { + fn from(e: std::io::Error) -> Self { + DirstateParseError::CorruptedEntry(e.to_string()) + } +}