@@ -36,6 +36,7 @@ pub struct TreeIter<'tree> {
36
36
37
37
/// A binary indicator of whether a tree walk should be performed in pre-order
38
38
/// or post-order.
39
+ #[ derive( Clone , Copy ) ]
39
40
pub enum TreeWalkMode {
40
41
/// Runs the traversal in pre-order.
41
42
PreOrder = 0 ,
@@ -60,17 +61,6 @@ impl Into<i32> for TreeWalkResult {
60
61
}
61
62
}
62
63
63
- impl Into < raw:: git_treewalk_mode > for TreeWalkMode {
64
- #[ cfg( target_env = "msvc" ) ]
65
- fn into ( self ) -> raw:: git_treewalk_mode {
66
- self as i32
67
- }
68
- #[ cfg( not( target_env = "msvc" ) ) ]
69
- fn into ( self ) -> raw:: git_treewalk_mode {
70
- self as u32
71
- }
72
- }
73
-
74
64
impl < ' repo > Tree < ' repo > {
75
65
/// Get the id (SHA1) of a repository object
76
66
pub fn id ( & self ) -> Oid {
@@ -126,12 +116,12 @@ impl<'repo> Tree<'repo> {
126
116
let mut data = TreeWalkCbData {
127
117
callback : & mut callback,
128
118
} ;
129
- raw:: git_tree_walk (
119
+ try_call ! ( raw:: git_tree_walk(
130
120
self . raw( ) ,
131
- mode. into ( ) ,
132
- Some ( treewalk_cb :: < T > ) ,
133
- & mut data as * mut _ as * mut c_void ,
134
- ) ;
121
+ mode,
122
+ treewalk_cb:: <T > as raw :: git_treewalk_cb ,
123
+ & mut data as * mut _ as * mut c_void
124
+ ) ) ;
135
125
Ok ( ( ) )
136
126
}
137
127
}
@@ -599,4 +589,18 @@ mod tests {
599
589
. unwrap ( ) ;
600
590
assert_eq ! ( ct, 8 ) ;
601
591
}
592
+
593
+ #[ test]
594
+ fn tree_walk_error ( ) {
595
+ let ( td, repo) = crate :: test:: repo_init ( ) ;
596
+
597
+ setup_repo ( & td, & repo) ;
598
+
599
+ let head = repo. head ( ) . unwrap ( ) ;
600
+ let target = head. target ( ) . unwrap ( ) ;
601
+ let commit = repo. find_commit ( target) . unwrap ( ) ;
602
+ let tree = repo. find_tree ( commit. tree_id ( ) ) . unwrap ( ) ;
603
+
604
+ assert ! ( tree. walk( TreeWalkMode :: PreOrder , |_, _| { -1 } ) . is_err( ) ) ;
605
+ }
602
606
}
0 commit comments