From patchwork Thu Feb 25 20:32:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: =?utf-8?q?D10077=3A_rhg=3A_Don=E2=80=99t_attempt_to_read_persisten?= =?utf-8?q?t_nodemap_without_=2Ehg/requires_opt-in?= From: phabricator X-Patchwork-Id: 48392 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Thu, 25 Feb 2021 20:32:25 +0000 SimonSapin created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D10077 AFFECTED FILES rust/hg-core/src/revlog/nodemap_docket.rs CHANGE DETAILS To: SimonSapin, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/rust/hg-core/src/revlog/nodemap_docket.rs b/rust/hg-core/src/revlog/nodemap_docket.rs --- a/rust/hg-core/src/revlog/nodemap_docket.rs +++ b/rust/hg-core/src/revlog/nodemap_docket.rs @@ -1,4 +1,5 @@ use crate::errors::{HgError, HgResultExt}; +use crate::requirements; use bytes_cast::{unaligned, BytesCast}; use memmap::Mmap; use std::path::{Path, PathBuf}; @@ -38,6 +39,14 @@ repo: &Repo, index_path: &Path, ) -> Result, RevlogError> { + if !repo + .requirements() + .contains(requirements::NODEMAP_REQUIREMENT) + { + // If .hg/requires does not opt it, don’t try to open a nodemap + return Ok(None); + } + let docket_path = index_path.with_extension("n"); let docket_bytes = if let Some(bytes) = repo.store_vfs().read(&docket_path).io_not_found_as_none()? @@ -88,6 +97,8 @@ Err(HgError::corrupted("persistent nodemap too short").into()) } } else { + // Even if .hg/requires opted in, some revlogs are deemed small + // enough to not need a persistent nodemap. Ok(None) } }