D7789: rust-revlog: a trait for the revlog index
Closed by commit rHG3fb39dc2e356: rust-revlog: a trait for the revlog index (authored by gracinet). This revision was automatically updated to reflect the committed changes. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7789?vs=19629=19642 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7789/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7789 AFFECTED FILES rust/hg-core/src/revlog.rs CHANGE DETAILS diff --git a/rust/hg-core/src/revlog.rs b/rust/hg-core/src/revlog.rs --- a/rust/hg-core/src/revlog.rs +++ b/rust/hg-core/src/revlog.rs @@ -40,3 +40,17 @@ ParentOutOfRange(Revision), WorkingDirectoryUnsupported, } + +/// The Mercurial Revlog Index +/// +/// This is currently limited to the minimal interface that is needed for +/// the [`nodemap`](nodemap/index.html) module +pub trait RevlogIndex { +/// Total number of Revisions referenced in this index +fn len() -> usize; + +/// Return a reference to the Node or `None` if rev is out of bounds +/// +/// `NULL_REVISION` is not considered to be out of bounds. +fn node(, rev: Revision) -> Option<>; +} To: gracinet, #hg-reviewers, martinvonz Cc: martinvonz, durin42, kevincox, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D7789: rust-revlog: a trait for the revlog index
gracinet updated this revision to Diff 19629. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7789?vs=19038=19629 BRANCH default CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7789/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7789 AFFECTED FILES rust/hg-core/src/revlog.rs CHANGE DETAILS diff --git a/rust/hg-core/src/revlog.rs b/rust/hg-core/src/revlog.rs --- a/rust/hg-core/src/revlog.rs +++ b/rust/hg-core/src/revlog.rs @@ -40,3 +40,17 @@ ParentOutOfRange(Revision), WorkingDirectoryUnsupported, } + +/// The Mercurial Revlog Index +/// +/// This is currently limited to the minimal interface that is needed for +/// the [`nodemap`](nodemap/index.html) module +pub trait RevlogIndex { +/// Total number of Revisions referenced in this index +fn len() -> usize; + +/// Return a reference to the Node or `None` if rev is out of bounds +/// +/// `NULL_REVISION` is not considered to be out of bounds. +fn node(, rev: Revision) -> Option<>; +} To: gracinet, #hg-reviewers, martinvonz Cc: martinvonz, durin42, kevincox, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D7789: rust-revlog: a trait for the revlog index
gracinet added a comment. @martinvonz yeah, probably wrote the doc-comment too fast Of course it's meant to match what revlog.c does, since the first implementation willl actually be re-exposure of the C version REPOSITORY rHG Mercurial CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7789/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7789 To: gracinet, #hg-reviewers, martinvonz Cc: martinvonz, durin42, kevincox, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D7789: rust-revlog: a trait for the revlog index
martinvonz added a comment. > The None return cases in node() match what the index_node() > C function does. You mean the code on https://www.mercurial-scm.org/repo/hg/file/fdaa4233dc18/mercurial/cext/revlog.c#l388? Line 394 there returns nullid, so does that really match? Why not return the nullid when given nullrev as input? REPOSITORY rHG Mercurial CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7789/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7789 To: gracinet, #hg-reviewers Cc: martinvonz, durin42, kevincox, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D7789: rust-revlog: a trait for the revlog index
gracinet created this revision. Herald added subscribers: mercurial-devel, kevincox, durin42. Herald added a reviewer: hg-reviewers. REVISION SUMMARY As explained in the doc comment, this is the minimum needed for our immediate concern, which is to implement a nodemap in Rust. The trait will be later implemented in `hg-cpython` by the index Python object implemented in C, thanks to exposition of the corresponding functions as a capsule. The `None` return cases in `node()` match what the `index_node()` C function does. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D7789 AFFECTED FILES rust/hg-core/src/revlog.rs CHANGE DETAILS diff --git a/rust/hg-core/src/revlog.rs b/rust/hg-core/src/revlog.rs --- a/rust/hg-core/src/revlog.rs +++ b/rust/hg-core/src/revlog.rs @@ -40,3 +40,15 @@ ParentOutOfRange(Revision), WorkingDirectoryUnsupported, } + +/// The Mercurial Revlog Index +/// +/// This is currently limited to the minimal interface that is needed for +/// the [`nodemap`](nodemap/index.html) module +pub trait RevlogIndex { +/// Total number of Revisions referenced in this index +fn len() -> usize; + +/// Return the Node or `None` if rev is out of bounds or `NULL_REVISON` +fn node(, rev: Revision) -> Option<>; +} To: gracinet, #hg-reviewers Cc: durin42, kevincox, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel