History

refactor

- add docs - naming

Sebastian Thiel committed 7 months ago

Commit fc09ed21 parent b37fef13 files · +27 −9Browse files

Unified · Split

3 files
  1. gix-object/src/tree/mod.rs +2 −2
  2. gix-object/src/tree/ref_iter.rs +20 −3
  3. gix/src/object/tree/mod.rs +5 −4
gix-object/src/tree/mod.rs+2−2
@@ -9,11 +9,11 @@ use crate::{ · 8 unmodified lines
99 pub mod editor;
1010
1111 mod ref_iter;
12+pub use ref_iter::next_entry;
13+
1214 ///
1315 pub mod write;
1416
15−pub use ref_iter::iter_next;
16−
1717 /// The state needed to apply edits instantly to in-memory trees.
1818 ///
1919 /// It's made so that each tree is looked at in the object database at most once, and held in memory for
gix-object/src/tree/ref_iter.rs+20−3
@@ -5,8 +5,25 @@ use winnow::{error::ParserError, prelude::*}; · 4 unmodified lines
55
66 use crate::{tree, tree::EntryRef, TreeRef, TreeRefIter};
77
8−/// Yes
9−pub fn iter_next<'a, I, P>(
8+/// Advance a path lookup by matching the next path component against `tree`.
9+///
10+/// `components` must yield the remaining path components to resolve, and `tree` must be the
11+/// current object to search in.
12+///
13+/// The return value indicates how the caller should proceed:
14+///
15+/// - [`ControlFlow::Continue`] contains the object id of the matched entry when there are more
16+/// components left to resolve. Callers should load that object and pass it back into a subsequent
17+/// invocation.
18+/// - [`ControlFlow::Break`]`(Some(entry))` contains the matched entry for the final component, and
19+/// signals that lookup completed successfully.
20+/// - [`ControlFlow::Break`]`(None)` signals that lookup cannot continue and should stop without a
21+/// match. This happens if `tree` is not a tree object, if `components` is already exhausted, or if
22+/// the next component is not present in `tree`.
23+///
24+/// Note that this behaviour is tuned to prefer to exhaust the entire chain of `components`, only the
25+/// last component can yield a [`ControlFlow::Break`].
26+pub fn next_entry<'a, I, P>(
1027 components: &mut core::iter::Peekable<I>,
1128 tree: crate::Data<'a>,
1229 ) -> core::ops::ControlFlow<Option<EntryRef<'a>>, gix_hash::ObjectId>
@@ -67,7 +84,7 @@ impl<'a> TreeRefIter<'a> { · 54 unmodified lines
6784 let mut data = crate::Data::new(crate::Kind::Tree, buffer);
6885
6986 loop {
70− data = match iter_next(&mut iter, data) {
87+ data = match next_entry(&mut iter, data) {
7188 ControlFlow::Continue(oid) => {
7289 let Some(next_tree) = odb.try_find(&oid, buffer)? else {
7390 break Ok(None);
gix/src/object/tree/mod.rs+5−4
@@ -2,7 +2,7 @@ use std::ops::ControlFlow; · 1 unmodified line
22
33 use gix_hash::ObjectId;
44 pub use gix_object::tree::{EntryKind, EntryMode};
5−use gix_object::{bstr::BStr, tree::iter_next, FindExt, TreeRefIter};
5+use gix_object::{bstr::BStr, tree::next_entry, FindExt, TreeRefIter};
66
77 use crate::{object::find, Id, ObjectDetached, Repository, Tree};
88
@@ -72,7 +72,7 @@ impl<'repo> Tree<'repo> { · 63 unmodified lines
7272 let mut data = gix_object::Data::new(gix_object::Kind::Tree, buf);
7373
7474 loop {
75− data = match iter_next(&mut iter, data) {
75+ data = match next_entry(&mut iter, data) {
7676 ControlFlow::Continue(oid) => self.repo.find(&oid, buf)?,
7777 ControlFlow::Break(entry) => {
7878 let mapped = entry.map(|e| Entry {
@@ -106,10 +106,11 @@ impl<'repo> Tree<'repo> { · 27 unmodified lines
106106 let mut data = gix_object::Data::new(gix_object::Kind::Tree, &self.data);
107107
108108 loop {
109− data = match iter_next(&mut iter, data) {
109+ data = match next_entry(&mut iter, data) {
110110 ControlFlow::Continue(oid) => {
111+ let res = self.repo.find(&oid, &mut self.data)?;
111112 self.id = oid;
112− self.repo.find(&oid, &mut self.data)?
113+ res
113114 }
114115 ControlFlow::Break(entry) => {
115116 let repo = self.repo;