Skip to content

Commit 3b53982

Browse files
committed
feat: add tree::Editor|editor::Cursor::get() to see if an entry is loaded at path.
This can be useful to get a feeling for how far the tree was already made available, even though it won't reveal if an entry was edited.
1 parent 3bbd1f7 commit 3b53982

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

gix/src/object/tree/editor.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,21 @@ impl<'repo> Cursor<'_, 'repo> {
177177
pub fn write(&mut self) -> Result<Id<'repo>, write::Error> {
178178
write_cursor(self)
179179
}
180+
181+
/// Obtain the entry at `rela_path` or return `None` if none was found, or the tree wasn't yet written
182+
/// to that point.
183+
/// The root tree is always available.
184+
/// Note that after [writing](Self::write) only the root path remains, all other intermediate trees are removed.
185+
/// The entry can be anything that can be stored in a tree, but may have a null-id if it's a newly
186+
/// inserted tree. Also, ids of trees might not be accurate as they may have been changed in memory.
187+
pub fn get(&self, rela_path: impl ToComponents) -> Option<crate::object::tree::EntryRef<'repo, '_>> {
188+
self.inner
189+
.get(rela_path.to_components())
190+
.map(|entry| crate::object::tree::EntryRef {
191+
inner: entry.into(),
192+
repo: self.repo,
193+
})
194+
}
180195
}
181196

182197
/// Operations
@@ -242,6 +257,21 @@ impl<'repo> super::Editor<'repo> {
242257
pub fn write(&mut self) -> Result<Id<'repo>, write::Error> {
243258
write_cursor(&mut self.to_cursor())
244259
}
260+
261+
/// Obtain the entry at `rela_path` or return `None` if none was found, or the tree wasn't yet written
262+
/// to that point.
263+
/// The root tree is always available.
264+
/// Note that after [writing](Self::write) only the root path remains, all other intermediate trees are removed.
265+
/// The entry can be anything that can be stored in a tree, but may have a null-id if it's a newly
266+
/// inserted tree. Also, ids of trees might not be accurate as they may have been changed in memory.
267+
pub fn get(&self, rela_path: impl ToComponents) -> Option<crate::object::tree::EntryRef<'repo, '_>> {
268+
self.inner
269+
.get(rela_path.to_components())
270+
.map(|entry| crate::object::tree::EntryRef {
271+
inner: entry.into(),
272+
repo: self.repo,
273+
})
274+
}
245275
}
246276

247277
fn write_cursor<'repo>(cursor: &mut Cursor<'_, 'repo>) -> Result<Id<'repo>, write::Error> {

0 commit comments

Comments
 (0)