Mercurial > hg-stable
changeset 47991:001d747c2baf
rust: Return HgError instead of RevlogError in revlog constructors
This leaves fewer cases for callers to handle, as RevlogError is more general
Differential Revision: https://phab.mercurial-scm.org/D11410
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Mon, 13 Sep 2021 18:02:45 +0200 |
parents | 8c29af0f6d6e |
children | 796206e74b10 |
files | rust/hg-core/src/repo.rs rust/hg-core/src/revlog/changelog.rs rust/hg-core/src/revlog/filelog.rs rust/hg-core/src/revlog/index.rs rust/hg-core/src/revlog/manifest.rs rust/hg-core/src/revlog/nodemap_docket.rs rust/hg-core/src/revlog/revlog.rs |
diffstat | 7 files changed, 19 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/repo.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/repo.rs Mon Sep 13 18:02:45 2021 +0200 @@ -29,8 +29,8 @@ // None means not known/initialized yet dirstate_parents: Cell<Option<DirstateParents>>, dirstate_map: LazyCell<OwningDirstateMap, DirstateError>, - changelog: LazyCell<Changelog, RevlogError>, - manifestlog: LazyCell<Manifestlog, RevlogError>, + changelog: LazyCell<Changelog, HgError>, + manifestlog: LazyCell<Manifestlog, HgError>, } #[derive(Debug, derive_more::From)] @@ -320,19 +320,19 @@ self.dirstate_map.get_mut_or_init(self) } - pub fn changelog(&self) -> Result<Ref<Changelog>, RevlogError> { + pub fn changelog(&self) -> Result<Ref<Changelog>, HgError> { self.changelog.get_or_init(self) } - pub fn changelog_mut(&self) -> Result<RefMut<Changelog>, RevlogError> { + pub fn changelog_mut(&self) -> Result<RefMut<Changelog>, HgError> { self.changelog.get_mut_or_init(self) } - pub fn manifestlog(&self) -> Result<Ref<Manifestlog>, RevlogError> { + pub fn manifestlog(&self) -> Result<Ref<Manifestlog>, HgError> { self.manifestlog.get_or_init(self) } - pub fn manifestlog_mut(&self) -> Result<RefMut<Manifestlog>, RevlogError> { + pub fn manifestlog_mut(&self) -> Result<RefMut<Manifestlog>, HgError> { self.manifestlog.get_mut_or_init(self) } @@ -349,7 +349,7 @@ manifest.get_node(manifest_node.into()) } - pub fn filelog(&self, path: &HgPath) -> Result<Filelog, RevlogError> { + pub fn filelog(&self, path: &HgPath) -> Result<Filelog, HgError> { Filelog::open(self, path) } }
--- a/rust/hg-core/src/revlog/changelog.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/changelog.rs Mon Sep 13 18:02:45 2021 +0200 @@ -12,7 +12,7 @@ impl Changelog { /// Open the `changelog` of a repository given by its root. - pub fn open(repo: &Repo) -> Result<Self, RevlogError> { + pub fn open(repo: &Repo) -> Result<Self, HgError> { let revlog = Revlog::open(repo, "00changelog.i", None)?; Ok(Self { revlog }) }
--- a/rust/hg-core/src/revlog/filelog.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/filelog.rs Mon Sep 13 18:02:45 2021 +0200 @@ -17,7 +17,7 @@ } impl Filelog { - pub fn open(repo: &Repo, file_path: &HgPath) -> Result<Self, RevlogError> { + pub fn open(repo: &Repo, file_path: &HgPath) -> Result<Self, HgError> { let index_path = store_path(file_path, b".i"); let data_path = store_path(file_path, b".d"); let revlog = Revlog::open(repo, index_path, Some(&data_path))?;
--- a/rust/hg-core/src/revlog/index.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/index.rs Mon Sep 13 18:02:45 2021 +0200 @@ -5,7 +5,6 @@ use crate::errors::HgError; use crate::revlog::node::Node; -use crate::revlog::revlog::RevlogError; use crate::revlog::{Revision, NULL_REVISION}; pub const INDEX_ENTRY_SIZE: usize = 64; @@ -23,7 +22,7 @@ /// Calculate the start of each entry when is_inline is true. pub fn new( bytes: Box<dyn Deref<Target = [u8]> + Send>, - ) -> Result<Self, RevlogError> { + ) -> Result<Self, HgError> { if is_inline(&bytes) { let mut offset: usize = 0; let mut offsets = Vec::new();
--- a/rust/hg-core/src/revlog/manifest.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/manifest.rs Mon Sep 13 18:02:45 2021 +0200 @@ -1,3 +1,4 @@ +use crate::errors::HgError; use crate::repo::Repo; use crate::revlog::revlog::{Revlog, RevlogError}; use crate::revlog::NodePrefix; @@ -12,7 +13,7 @@ impl Manifestlog { /// Open the `manifest` of a repository given by its root. - pub fn open(repo: &Repo) -> Result<Self, RevlogError> { + pub fn open(repo: &Repo) -> Result<Self, HgError> { let revlog = Revlog::open(repo, "00manifest.i", None)?; Ok(Self { revlog }) }
--- a/rust/hg-core/src/revlog/nodemap_docket.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/nodemap_docket.rs Mon Sep 13 18:02:45 2021 +0200 @@ -4,7 +4,6 @@ use memmap2::Mmap; use std::path::{Path, PathBuf}; -use super::revlog::RevlogError; use crate::repo::Repo; use crate::utils::strip_suffix; @@ -38,7 +37,7 @@ pub fn read_from_file( repo: &Repo, index_path: &Path, - ) -> Result<Option<(Self, Mmap)>, RevlogError> { + ) -> Result<Option<(Self, Mmap)>, HgError> { if !repo .requirements() .contains(requirements::NODEMAP_REQUIREMENT) @@ -65,10 +64,9 @@ }; /// Treat any error as a parse error - fn parse<T, E>(result: Result<T, E>) -> Result<T, RevlogError> { - result.map_err(|_| { - HgError::corrupted("nodemap docket parse error").into() - }) + fn parse<T, E>(result: Result<T, E>) -> Result<T, HgError> { + result + .map_err(|_| HgError::corrupted("nodemap docket parse error")) } let (header, rest) = parse(DocketHeader::from_bytes(input))?; @@ -94,7 +92,7 @@ if mmap.len() >= data_length { Ok(Some((docket, mmap))) } else { - Err(HgError::corrupted("persistent nodemap too short").into()) + Err(HgError::corrupted("persistent nodemap too short")) } } else { // Even if .hg/requires opted in, some revlogs are deemed small
--- a/rust/hg-core/src/revlog/revlog.rs Mon Sep 13 17:23:42 2021 +0200 +++ b/rust/hg-core/src/revlog/revlog.rs Mon Sep 13 18:02:45 2021 +0200 @@ -68,14 +68,14 @@ repo: &Repo, index_path: impl AsRef<Path>, data_path: Option<&Path>, - ) -> Result<Self, RevlogError> { + ) -> Result<Self, HgError> { let index_path = index_path.as_ref(); let index_mmap = repo.store_vfs().mmap_open(&index_path)?; let version = get_version(&index_mmap); if version != 1 { // A proper new version should have had a repo/store requirement. - return Err(RevlogError::corrupted()); + return Err(HgError::corrupted("corrupted revlog")); } let index = Index::new(Box::new(index_mmap))?;