[Updated] D12546: rust-revlog: move check for nodemap requirement to caller
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Apr 14 16:13:52 UTC 2022
martinvonz updated this revision to Diff 33176.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D12546?vs=33154&id=33176
BRANCH
default
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D12546/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D12546
AFFECTED FILES
rust/hg-core/src/operations/debugdata.rs
rust/hg-core/src/revlog/changelog.rs
rust/hg-core/src/revlog/filelog.rs
rust/hg-core/src/revlog/manifest.rs
rust/hg-core/src/revlog/revlog.rs
CHANGE DETAILS
diff --git a/rust/hg-core/src/revlog/revlog.rs b/rust/hg-core/src/revlog/revlog.rs
--- a/rust/hg-core/src/revlog/revlog.rs
+++ b/rust/hg-core/src/revlog/revlog.rs
@@ -18,7 +18,7 @@
use crate::errors::HgError;
use crate::repo::Repo;
use crate::revlog::Revision;
-use crate::{requirements, Node, NULL_REVISION};
+use crate::{Node, NULL_REVISION};
const REVISION_FLAG_CENSORED: u16 = 1 << 15;
const REVISION_FLAG_ELLIPSIS: u16 = 1 << 14;
@@ -84,6 +84,7 @@
repo: &Repo,
index_path: impl AsRef<Path>,
data_path: Option<&Path>,
+ use_nodemap: bool,
) -> Result<Self, HgError> {
let index_path = index_path.as_ref();
let index = {
@@ -111,11 +112,7 @@
let nodemap = if index.is_inline() {
None
- } else if !repo
- .requirements()
- .contains(requirements::NODEMAP_REQUIREMENT)
- {
- // If .hg/requires does not opt it, don’t try to open a nodemap
+ } else if !use_nodemap {
None
} else {
NodeMapDocket::read_from_file(&repo.store_vfs(), index_path)?.map(
diff --git a/rust/hg-core/src/revlog/manifest.rs b/rust/hg-core/src/revlog/manifest.rs
--- a/rust/hg-core/src/revlog/manifest.rs
+++ b/rust/hg-core/src/revlog/manifest.rs
@@ -1,5 +1,6 @@
use crate::errors::HgError;
use crate::repo::Repo;
+use crate::requirements;
use crate::revlog::revlog::{Revlog, RevlogError};
use crate::revlog::Revision;
use crate::revlog::{Node, NodePrefix};
@@ -15,7 +16,10 @@
impl Manifestlog {
/// Open the `manifest` of a repository given by its root.
pub fn open(repo: &Repo) -> Result<Self, HgError> {
- let revlog = Revlog::open(repo, "00manifest.i", None)?;
+ let use_nodemap = repo
+ .requirements()
+ .contains(requirements::NODEMAP_REQUIREMENT);
+ let revlog = Revlog::open(repo, "00manifest.i", None, use_nodemap)?;
Ok(Self { revlog })
}
diff --git a/rust/hg-core/src/revlog/filelog.rs b/rust/hg-core/src/revlog/filelog.rs
--- a/rust/hg-core/src/revlog/filelog.rs
+++ b/rust/hg-core/src/revlog/filelog.rs
@@ -1,5 +1,6 @@
use crate::errors::HgError;
use crate::repo::Repo;
+use crate::requirements;
use crate::revlog::path_encode::path_encode;
use crate::revlog::revlog::RevlogEntry;
use crate::revlog::revlog::{Revlog, RevlogError};
@@ -20,7 +21,11 @@
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))?;
+ let use_nodemap = repo
+ .requirements()
+ .contains(requirements::NODEMAP_REQUIREMENT);
+ let revlog =
+ Revlog::open(repo, index_path, Some(&data_path), use_nodemap)?;
Ok(Self { revlog })
}
diff --git a/rust/hg-core/src/revlog/changelog.rs b/rust/hg-core/src/revlog/changelog.rs
--- a/rust/hg-core/src/revlog/changelog.rs
+++ b/rust/hg-core/src/revlog/changelog.rs
@@ -1,5 +1,6 @@
use crate::errors::HgError;
use crate::repo::Repo;
+use crate::requirements;
use crate::revlog::revlog::{Revlog, RevlogEntry, RevlogError};
use crate::revlog::Revision;
use crate::revlog::{Node, NodePrefix};
@@ -17,7 +18,10 @@
impl Changelog {
/// Open the `changelog` of a repository given by its root.
pub fn open(repo: &Repo) -> Result<Self, HgError> {
- let revlog = Revlog::open(repo, "00changelog.i", None)?;
+ let use_nodemap = repo
+ .requirements()
+ .contains(requirements::NODEMAP_REQUIREMENT);
+ let revlog = Revlog::open(repo, "00changelog.i", None, use_nodemap)?;
Ok(Self { revlog })
}
@@ -213,7 +217,6 @@
#[cfg(test)]
mod tests {
use super::*;
- use itertools::Itertools;
use pretty_assertions::assert_eq;
#[test]
diff --git a/rust/hg-core/src/operations/debugdata.rs b/rust/hg-core/src/operations/debugdata.rs
--- a/rust/hg-core/src/operations/debugdata.rs
+++ b/rust/hg-core/src/operations/debugdata.rs
@@ -6,6 +6,7 @@
// GNU General Public License version 2 or any later version.
use crate::repo::Repo;
+use crate::requirements;
use crate::revlog::revlog::{Revlog, RevlogError};
/// Kind of data to debug
@@ -25,7 +26,10 @@
DebugDataKind::Changelog => "00changelog.i",
DebugDataKind::Manifest => "00manifest.i",
};
- let revlog = Revlog::open(repo, index_file, None)?;
+ let use_nodemap = repo
+ .requirements()
+ .contains(requirements::NODEMAP_REQUIREMENT);
+ let revlog = Revlog::open(repo, index_file, None, use_nodemap)?;
let rev =
crate::revset::resolve_rev_number_or_hex_prefix(revset, &revlog)?;
let data = revlog.get_rev_data(rev)?;
To: martinvonz, #hg-reviewers, Alphare
Cc: Alphare, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20220414/ce939804/attachment-0002.html>
More information about the Mercurial-patches
mailing list