rust: add methods that take checked revisions
This continues the work done in a3fa37bdb7ecbad4cf31bc6e87545fd42058a93b,
turning more methods into checked/unchecked pairs of methods.
--- a/rust/hg-core/src/revlog/changelog.rs Tue Jan 14 17:44:02 2025 -0500
+++ b/rust/hg-core/src/revlog/changelog.rs Thu Jan 16 15:36:26 2025 -0500
@@ -53,7 +53,7 @@
}
/// Same as [`Self::entry_for_unchecked_rev`] for a checked revision
- fn entry(&self, rev: Revision) -> Result<ChangelogEntry, RevlogError> {
+ pub fn entry(&self, rev: Revision) -> Result<ChangelogEntry, RevlogError> {
let revlog_entry = self.revlog.get_entry(rev)?;
Ok(ChangelogEntry { revlog_entry })
}
@@ -71,11 +71,15 @@
self.entry_for_unchecked_rev(rev)?.data()
}
+ pub fn node_from_rev(&self, rev: Revision) -> &Node {
+ self.revlog.node_from_rev(rev)
+ }
+
pub fn node_from_unchecked_rev(
&self,
rev: UncheckedRevision,
) -> Option<&Node> {
- self.revlog.node_from_rev(rev)
+ self.revlog.node_from_unchecked_rev(rev)
}
pub fn rev_from_node(
--- a/rust/hg-core/src/revlog/mod.rs Tue Jan 14 17:44:02 2025 -0500
+++ b/rust/hg-core/src/revlog/mod.rs Thu Jan 16 15:36:26 2025 -0500
@@ -343,12 +343,19 @@
/// Returns the node ID for the given revision number, if it exists in this
/// revlog
- pub fn node_from_rev(&self, rev: UncheckedRevision) -> Option<&Node> {
- if rev == NULL_REVISION.into() {
- return Some(&NULL_NODE);
+ pub fn node_from_rev(&self, rev: Revision) -> &Node {
+ match self.index().get_entry(rev) {
+ None => &NULL_NODE,
+ Some(entry) => entry.hash(),
}
- let rev = self.index().check_revision(rev)?;
- Some(self.index().get_entry(rev)?.hash())
+ }
+
+ /// Like [`Self::node_from_rev`] but checks `rev` first.
+ pub fn node_from_unchecked_rev(
+ &self,
+ rev: UncheckedRevision,
+ ) -> Option<&Node> {
+ Some(self.node_from_rev(self.index().check_revision(rev)?))
}
/// Return the revision number for the given node ID, if it exists in this