# HG changeset patch # User Simon Sapin # Date 1614284952 -3600 # Node ID 842f2372ced607f2c9292fcff88e3c8c16ed0da1 # Parent 90481550467ca8d117678bf26cfc359a5b6e636a rhg: Don’t attempt to read persistent nodemap without .hg/requires opt-in Differential Revision: https://phab.mercurial-scm.org/D10077 diff -r 90481550467c -r 842f2372ced6 rust/hg-core/src/revlog/nodemap_docket.rs --- a/rust/hg-core/src/revlog/nodemap_docket.rs Thu Feb 04 17:34:20 2021 -0800 +++ b/rust/hg-core/src/revlog/nodemap_docket.rs Thu Feb 25 21:29:12 2021 +0100 @@ -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) } }