Skip to content

Commit 3b8dc04

Browse files
authored
Merge pull request #1098 from edrevo/edrevo/fix-tree-walk
Propagate errors on Tree::walk
2 parents ba07a6f + e0d7dae commit 3b8dc04

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

libgit2-sys/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ git_enum! {
751751
}
752752

753753
pub type git_treewalk_cb =
754-
Option<extern "C" fn(*const c_char, *const git_tree_entry, *mut c_void) -> c_int>;
754+
extern "C" fn(*const c_char, *const git_tree_entry, *mut c_void) -> c_int;
755755
pub type git_treebuilder_filter_cb =
756756
Option<extern "C" fn(*const git_tree_entry, *mut c_void) -> c_int>;
757757

src/tree.rs

+20-5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub struct TreeIter<'tree> {
3636

3737
/// A binary indicator of whether a tree walk should be performed in pre-order
3838
/// or post-order.
39+
#[derive(Clone, Copy)]
3940
pub enum TreeWalkMode {
4041
/// Runs the traversal in pre-order.
4142
PreOrder = 0,
@@ -126,12 +127,12 @@ impl<'repo> Tree<'repo> {
126127
let mut data = TreeWalkCbData {
127128
callback: &mut callback,
128129
};
129-
raw::git_tree_walk(
130+
try_call!(raw::git_tree_walk(
130131
self.raw(),
131-
mode.into(),
132-
Some(treewalk_cb::<T>),
133-
&mut data as *mut _ as *mut c_void,
134-
);
132+
mode as raw::git_treewalk_mode,
133+
treewalk_cb::<T>,
134+
&mut data as *mut _ as *mut c_void
135+
));
135136
Ok(())
136137
}
137138
}
@@ -599,4 +600,18 @@ mod tests {
599600
.unwrap();
600601
assert_eq!(ct, 8);
601602
}
603+
604+
#[test]
605+
fn tree_walk_error() {
606+
let (td, repo) = crate::test::repo_init();
607+
608+
setup_repo(&td, &repo);
609+
610+
let head = repo.head().unwrap();
611+
let target = head.target().unwrap();
612+
let commit = repo.find_commit(target).unwrap();
613+
let tree = repo.find_tree(commit.tree_id()).unwrap();
614+
let e = tree.walk(TreeWalkMode::PreOrder, |_, _| -1).unwrap_err();
615+
assert_eq!(e.class(), crate::ErrorClass::Callback);
616+
}
602617
}

0 commit comments

Comments
 (0)