rust/hg-core/src/repo.rs
changeset 47964 796206e74b10
parent 47963 001d747c2baf
child 47969 87e3f878e65f
--- a/rust/hg-core/src/repo.rs	Mon Sep 13 18:02:45 2021 +0200
+++ b/rust/hg-core/src/repo.rs	Mon Sep 13 18:09:10 2021 +0200
@@ -5,15 +5,15 @@
 use crate::dirstate_tree::owning::OwningDirstateMap;
 use crate::errors::HgError;
 use crate::errors::HgResultExt;
+use crate::exit_codes;
 use crate::manifest::{Manifest, Manifestlog};
-use crate::requirements;
 use crate::revlog::filelog::Filelog;
 use crate::revlog::revlog::RevlogError;
 use crate::utils::files::get_path_from_bytes;
 use crate::utils::hg_path::HgPath;
 use crate::utils::SliceExt;
 use crate::vfs::{is_dir, is_file, Vfs};
-use crate::{exit_codes, Node};
+use crate::{requirements, NodePrefix};
 use crate::{DirstateError, Revision};
 use std::cell::{Cell, Ref, RefCell, RefMut};
 use std::collections::HashSet;
@@ -336,17 +336,27 @@
         self.manifestlog.get_mut_or_init(self)
     }
 
+    /// Returns the manifest of the given node ID
+    pub fn manifest_for_node(
+        &self,
+        node: impl Into<NodePrefix>,
+    ) -> Result<Manifest, RevlogError> {
+        self.manifestlog()?.get_node(
+            self.changelog()?
+                .get_node(node.into())?
+                .manifest_node()?
+                .into(),
+        )
+    }
+
     /// Returns the manifest of the given revision
-    pub fn manifest(
+    pub fn manifest_for_rev(
         &self,
         revision: Revision,
     ) -> Result<Manifest, RevlogError> {
-        let changelog = self.changelog()?;
-        let manifest = self.manifestlog()?;
-        let changelog_entry = changelog.get_rev(revision)?;
-        let manifest_node =
-            Node::from_hex_for_repo(&changelog_entry.manifest_node()?)?;
-        manifest.get_node(manifest_node.into())
+        self.manifestlog()?.get_node(
+            self.changelog()?.get_rev(revision)?.manifest_node()?.into(),
+        )
     }
 
     pub fn filelog(&self, path: &HgPath) -> Result<Filelog, HgError> {