##// END OF EJS Templates
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP...
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP If a repo is accessed via static HTTP, then we obviously can't use os.stat() to just peek at the file size. Let's download the entire file to check its size. Yes, this feels wasteful, but: 1. If we're cloning or pulling a repo from a static HTTP server, we need the contents of the obsstore anyway. 2. Implementing statichttpvfs.stat() that uses HEAD will result in one more request to a static-only HTTP server, which is already slow. Also parsing a response to a HEAD request to construct os.stat_result is pretty hacky. There's also a question of the remote server properly supporting HEAD method and reporting at least file size. 3. Implementing statichttpvfs.stat() that uses GET is pretty much the same thing as we do here, except we can't even cache the response easily, unlike simply accessing obsstore._data, which is @propertycache'd. Importing statichttprepo locally to avoid circular import. See also: 4507bc001365 and commit message of f8f2ecdde4b5. Differential Revision: https://phab.mercurial-scm.org/D12195

File last commit:

r49351:791f5d5f default
r49640:ef50a62e default
Show More
lib.rs
132 lines | 3.9 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust-core: updated copyright notice...
r44455 // Copyright 2018-2020 Georges Racinet <georges.racinet@octobus.net>
// and Mercurial contributors
Georges Racinet
rust: pure Rust lazyancestors iterator...
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
rust: use HgError in RevlogError and Vfs...
r47172
Georges Racinet
rust: pure Rust lazyancestors iterator...
r40307 mod ancestors;
Georges Racinet on ishtar.racinet.fr
rust: dagop.headrevs() Rust counterparts...
r41278 pub mod dagops;
Simon Sapin
rust: Introduce an `HgError` enum for common error cases...
r47167 pub mod errors;
pacien
hg-core: dedup LazyAncestors Iterator impl...
r49351 pub use ancestors::{AncestorsIterator, MissingAncestors};
Simon Sapin
rust: Add a Timestamp struct instead of abusing Duration...
r47871 pub mod dirstate;
Simon Sapin
dirstate-tree: Make Rust DirstateMap bindings go through a trait object...
r47863 pub mod dirstate_tree;
Georges Racinet
rust-discovery: starting core implementation...
r42355 pub mod discovery;
Pulkit Goyal
rhg: add exit code to HgError::Abort()...
r48199 pub mod exit_codes;
Simon Sapin
requirements: move loading to hg-core and add parsing...
r46536 pub mod requirements;
Raphaël Gomès
rust-dirstate: add rust-cpython bindings to the new parse/pack functions...
r42489 pub mod testing; // unconditionally built, for use from integration tests
pub use dirstate::{
Yuya Nishihara
rust-dirstate: specify concrete return type of DirsMultiset::iter()...
r43155 dirs_multiset::{DirsMultiset, DirsMultisetIter},
Raphaël Gomès
rust-status: add bare `hg status` support in hg-core...
r45015 status::{
Simon Sapin
dirstate: Remove the flat Rust DirstateMap implementation...
r48882 BadMatch, BadType, DirstateStatus, HgPathCow, StatusError,
Simon Sapin
rhg: Add more conversions between error types...
r47555 StatusOptions,
Raphaël Gomès
rust-status: add bare `hg status` support in hg-core...
r45015 },
Simon Sapin
dirstate: Remove the flat Rust DirstateMap implementation...
r48882 DirstateEntry, DirstateParents, EntryState,
Raphaël Gomès
rust-dirstate: add rust-cpython bindings to the new parse/pack functions...
r42489 };
copies: introduce a basic Rust function for `combine_changeset_copies`...
r46556 pub mod copy_tracing;
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 mod filepatterns;
Raphaël Gomès
rust-matchers: add `Matcher` trait and implement `AlwaysMatcher`...
r43742 pub mod matchers;
Simon Sapin
rust: introduce Repo and Vfs types for filesystem abstraction...
r46782 pub mod repo;
Georges Racinet
rust-core: extracted a revlog submodule...
r44457 pub mod revlog;
pub use revlog::*;
Raphaël Gomès
hg-core: add basic config module...
r46803 pub mod config;
Simon Sapin
rhg: Initial repository locking...
r49245 pub mod lock;
Simon Sapin
rust: Add a log file rotation utility...
r47341 pub mod logging;
Antoine Cezar
hg-core: add Operation interface for high-level hg operations...
r45501 pub mod operations;
Simon Sapin
rhg: centralize parsing of `--rev` CLI arguments...
r47162 pub mod revset;
Raphaël Gomès
rust-utils: add docstrings and doctests for utils.rs...
r42829 pub mod utils;
Simon Sapin
rust: Move VFS code to its own module...
r48764 pub mod vfs;
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514
Raphaël Gomès
rust-dirs-multiset: improve temporary error message...
r44765 use crate::utils::hg_path::{HgPathBuf, HgPathError};
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 pub use filepatterns::{
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 parse_pattern_syntax, read_pattern_file, IgnorePattern,
PatternFileWarning, PatternSyntax,
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 };
Raphaël Gomès
rust-performance: introduce FastHashMap type alias for HashMap...
r44278 use std::collections::HashMap;
Simon Sapin
rust: replace ToString impls with Display...
r47173 use std::fmt;
Raphaël Gomès
rust-performance: introduce FastHashMap type alias for HashMap...
r44278 use twox_hash::RandomXxHashBuilder64;
Georges Racinet
rust: pure Rust lazyancestors iterator...
r40307
Raphaël Gomès
hg-core: add function timing information...
r45028 /// This is a contract between the `micro-timer` crate and us, to expose
/// the `log` crate as `crate::log`.
use log;
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 pub type LineNumber = usize;
Raphaël Gomès
rust-performance: introduce FastHashMap type alias for HashMap...
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>;
Raphaël Gomès
rust-dirstate: add rust implementation of `parse_dirstate` and `pack_dirstate`...
r42488 #[derive(Debug, PartialEq)]
Raphaël Gomès
rust-dirstate: add "dirs" Rust implementation...
r42736 pub enum DirstateMapError {
Raphaël Gomès
rust-hgpath: replace all paths and filenames with HgPath/HgPathBuf...
r43227 PathNotFound(HgPathBuf),
Raphaël Gomès
rust-dirstate: add "dirs" Rust implementation...
r42736 EmptyPath,
Raphaël Gomès
rust-dirs-multiset: improve temporary error message...
r44765 InvalidPath(HgPathError),
Raphaël Gomès
rust-dirs: address failing tests for `dirs` impl with a temporary fix...
r44227 }
Simon Sapin
rust: replace ToString impls with Display...
r47173 impl fmt::Display for DirstateMapError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
Raphaël Gomès
rust-dirs: address failing tests for `dirs` impl with a temporary fix...
r44227 match self {
Raphaël Gomès
rust-dirs-multiset: improve temporary error message...
r44765 DirstateMapError::PathNotFound(_) => {
Simon Sapin
rust: replace ToString impls with Display...
r47173 f.write_str("expected a value, found none")
Raphaël Gomès
rust-dirs: address failing tests for `dirs` impl with a temporary fix...
r44227 }
Simon Sapin
rust: replace ToString impls with Display...
r47173 DirstateMapError::EmptyPath => {
f.write_str("Overflow in dirstate.")
}
DirstateMapError::InvalidPath(path_error) => path_error.fmt(f),
Raphaël Gomès
rust-dirs: address failing tests for `dirs` impl with a temporary fix...
r44227 }
}
Raphaël Gomès
rust-dirstate: add "dirs" Rust implementation...
r42736 }
Simon Sapin
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`...
r47164 #[derive(Debug, derive_more::From)]
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994 pub enum DirstateError {
Map(DirstateMapError),
Simon Sapin
rust: Replace DirstatePackError with HgError...
r47168 Common(errors::HgError),
Raphaël Gomès
rust-dirstate: use EntryState enum instead of literals...
r42994 }
Simon Sapin
dirstate-v2: Make more APIs fallible, returning Result...
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
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`...
r47164 #[derive(Debug, derive_more::From)]
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 pub enum PatternError {
Simon Sapin
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`...
r47164 #[from]
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 Path(HgPathError),
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 UnsupportedSyntax(String),
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 UnsupportedSyntaxInFile(String, String, usize),
TooLong(usize),
Simon Sapin
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`...
r47164 #[from]
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 IO(std::io::Error),
Raphaël Gomès
rust-filepatterns: add support for `include` and `subinclude` patterns...
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
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 }
Simon Sapin
rust: replace ToString impls with Display...
r47173 impl fmt::Display for PatternError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 match self {
PatternError::UnsupportedSyntax(syntax) => {
Simon Sapin
rust: replace ToString impls with Display...
r47173 write!(f, "Unsupported syntax {}", syntax)
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 }
PatternError::UnsupportedSyntaxInFile(syntax, file_path, line) => {
Simon Sapin
rust: replace ToString impls with Display...
r47173 write!(
f,
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 "{}:{}: unsupported syntax {}",
file_path, line, syntax
)
}
PatternError::TooLong(size) => {
Simon Sapin
rust: replace ToString impls with Display...
r47173 write!(f, "matcher pattern is too long ({} bytes)", size)
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 }
Simon Sapin
rust: replace ToString impls with Display...
r47173 PatternError::IO(error) => error.fmt(f),
PatternError::Path(error) => error.fmt(f),
Raphaël Gomès
rust-filepatterns: add support for `include` and `subinclude` patterns...
r44785 PatternError::NonRegexPattern(pattern) => {
Simon Sapin
rust: replace ToString impls with Display...
r47173 write!(f, "'{:?}' cannot be turned into a regex", pattern)
Raphaël Gomès
rust-filepatterns: add support for `include` and `subinclude` patterns...
r44785 }
Raphaël Gomès
rust-filepatterns: improve API and robustness for pattern files parsing...
r44784 }
Raphaël Gomès
rust-filepatterns: add a Rust implementation of pattern-related utils...
r42514 }
}