@@ -14,8 +14,19 @@ fn changes_against_tree_modified() -> crate::Result {
14
14
let from = tree_named ( & repo, "@^{/c3-modification}~1" ) ;
15
15
let to = tree_named ( & repo, ":/c3-modification" ) ;
16
16
let mut cache = repo. diff_resource_cache ( gix_diff:: blob:: pipeline:: Mode :: ToGit , Default :: default ( ) ) ?;
17
+
18
+ let expected_modifications = [
19
+ ( EntryKind :: Blob , "a\n " , EntryKind :: Blob , "a\n a1\n " ) ,
20
+ ( EntryKind :: Tree , "" , EntryKind :: Tree , "" ) ,
21
+ ( EntryKind :: Blob , "dir/c\n " , EntryKind :: Blob , "dir/c\n dir/c1\n " ) ,
22
+ ] ;
23
+ let mut i = 0 ;
24
+
17
25
from. changes ( ) ?
18
26
. for_each_to_obtain_tree ( & to, |change| -> Result < _ , Infallible > {
27
+ let ( expected_previous_entry_mode, expected_previous_data, expected_entry_mode, expected_data) =
28
+ expected_modifications[ i] ;
29
+
19
30
assert_eq ! ( change. location, "" , "without configuration the location field is empty" ) ;
20
31
match change. event {
21
32
Event :: Modification {
@@ -24,10 +35,16 @@ fn changes_against_tree_modified() -> crate::Result {
24
35
entry_mode,
25
36
id,
26
37
} => {
27
- assert_eq ! ( previous_entry_mode. kind( ) , EntryKind :: Blob ) ;
28
- assert_eq ! ( entry_mode. kind( ) , EntryKind :: Blob ) ;
29
- assert_eq ! ( previous_id. object( ) . unwrap( ) . data. as_bstr( ) , "a\n " ) ;
30
- assert_eq ! ( id. object( ) . unwrap( ) . data. as_bstr( ) , "a\n a1\n " ) ;
38
+ assert_eq ! ( previous_entry_mode. kind( ) , expected_previous_entry_mode) ;
39
+ assert_eq ! ( entry_mode. kind( ) , expected_entry_mode) ;
40
+
41
+ if matches ! ( entry_mode. kind( ) , EntryKind :: Tree ) {
42
+ i += 1 ;
43
+ return Ok ( Default :: default ( ) ) ;
44
+ }
45
+
46
+ assert_eq ! ( previous_id. object( ) . unwrap( ) . data. as_bstr( ) , expected_previous_data) ;
47
+ assert_eq ! ( id. object( ) . unwrap( ) . data. as_bstr( ) , expected_data) ;
31
48
}
32
49
Event :: Rewrite { .. } | Event :: Deletion { .. } | Event :: Addition { .. } => {
33
50
unreachable ! ( "only modification is expected" )
@@ -41,14 +58,20 @@ fn changes_against_tree_modified() -> crate::Result {
41
58
diff. lines ( |hunk| {
42
59
match hunk {
43
60
Change :: Deletion { .. } => unreachable ! ( "there was no deletion" ) ,
44
- Change :: Addition { lines } => assert_eq ! ( lines, vec![ "a1\n " . as_bytes( ) . as_bstr( ) ] ) ,
61
+ Change :: Addition { lines } => assert_eq ! (
62
+ lines,
63
+ vec![ expected_data[ expected_previous_data. len( ) ..] . as_bytes( ) . as_bstr( ) ]
64
+ ) ,
45
65
Change :: Modification { .. } => unreachable ! ( "there was no modification" ) ,
46
66
} ;
47
67
Ok :: < _ , Infallible > ( ( ) )
48
68
} )
49
69
. expect ( "infallible" ) ;
70
+
71
+ i += 1 ;
50
72
Ok ( Default :: default ( ) )
51
73
} ) ?;
74
+ assert_eq ! ( i, 3 ) ;
52
75
Ok ( ( ) )
53
76
}
54
77
@@ -91,6 +114,45 @@ fn changes_against_tree_with_filename_tracking() -> crate::Result {
91
114
Ok ( ( ) )
92
115
}
93
116
117
+ #[ test]
118
+ fn changes_against_modified_tree_with_filename_tracking ( ) -> crate :: Result {
119
+ let repo = named_repo ( "make_diff_repo.sh" ) ?;
120
+ let from = tree_named ( & repo, "@^{/c3-modification}~1" ) ;
121
+ let to = tree_named ( & repo, ":/c3-modification" ) ;
122
+
123
+ let mut expected = vec ! [ "a" , "dir" , "c" ] ;
124
+ from. changes ( ) ?
125
+ . track_filename ( )
126
+ . for_each_to_obtain_tree ( & to, |change| -> Result < _ , Infallible > {
127
+ expected. retain ( |name| name != change. location ) ;
128
+ Ok ( Default :: default ( ) )
129
+ } ) ?;
130
+ assert_eq ! ( expected, Vec :: <& str >:: new( ) , "all paths should have been seen" ) ;
131
+
132
+ let mut expected = vec ! [ "a" , "dir" , "dir/c" ] ;
133
+ from. changes ( ) ?
134
+ . track_path ( )
135
+ . for_each_to_obtain_tree ( & to, |change| -> Result < _ , Infallible > {
136
+ expected. retain ( |name| name != change. location ) ;
137
+ Ok ( Default :: default ( ) )
138
+ } ) ?;
139
+ assert_eq ! ( expected, Vec :: <& str >:: new( ) , "all paths should have been seen" ) ;
140
+
141
+ let err = from
142
+ . changes ( ) ?
143
+ . track_path ( )
144
+ . for_each_to_obtain_tree ( & to, |_change| {
145
+ Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "custom error" ) )
146
+ } )
147
+ . unwrap_err ( ) ;
148
+ assert_eq ! (
149
+ err. to_string( ) ,
150
+ "The user-provided callback failed" ,
151
+ "custom errors made visible and not squelched"
152
+ ) ;
153
+ Ok ( ( ) )
154
+ }
155
+
94
156
fn tree_named ( repo : & gix:: Repository , rev_spec : impl AsRef < str > ) -> gix:: Tree {
95
157
repo. rev_parse_single ( rev_spec. as_ref ( ) )
96
158
. unwrap ( )
@@ -246,7 +308,7 @@ mod track_rewrites {
246
308
. track_path ( )
247
309
. track_rewrites (
248
310
Rewrites {
249
- percentage : Some ( 0.75 ) ,
311
+ percentage : Some ( 0.6 ) ,
250
312
limit : 1 , // has no effect as it's just one item here.
251
313
..Default :: default ( )
252
314
}
@@ -700,7 +762,7 @@ mod track_rewrites {
700
762
#[ cfg( not( windows) ) ]
701
763
{
702
764
let actual = std:: fs:: read_to_string ( repo. work_dir ( ) . expect ( "non-bare" ) . join ( "baseline.with-renames" ) ) ?;
703
- let expected = r#"commit 6974f2b5181772977a9d7d34a566414508552650
765
+ let expected = r#"commit 0231f5093bd3d760e7ee82984e0453da80e05c87
704
766
Author: author <[email protected] >
705
767
Date: Sat Jan 1 00:00:00 2000 +0000
706
768
@@ -759,7 +821,7 @@ index e69de29..8ba3a16 100644
759
821
#[ cfg( not( windows) ) ]
760
822
{
761
823
let actual = std:: fs:: read_to_string ( repo. work_dir ( ) . expect ( "non-bare" ) . join ( "baseline.no-renames" ) ) ?;
762
- let expected = r#"commit 6974f2b5181772977a9d7d34a566414508552650
824
+ let expected = r#"commit 0231f5093bd3d760e7ee82984e0453da80e05c87
763
825
Author: author <[email protected] >
764
826
Date: Sat Jan 1 00:00:00 2000 +0000
765
827
@@ -809,7 +871,7 @@ index e69de29..8ba3a16 100644
809
871
810
872
#[ cfg( not( windows) ) ]
811
873
{
812
- let expected = r#"commit 72de3500e1bff816e56432bee8de02946d3e784b
874
+ let expected = r#"commit d78c63c5ea3149040767e4387e7fc743cda118fd
813
875
Author: author <[email protected] >
814
876
Date: Sat Jan 1 00:00:00 2000 +0000
815
877
@@ -917,7 +979,7 @@ index 0000000..e69de29
917
979
918
980
#[ cfg( not( windows) ) ]
919
981
{
920
- let expected = r#"commit dee00f5a20957db20d8d2e0050210716d6b44879
982
+ let expected = r#"commit 0cf7a4fe3ad6c49ae7beb394a1c1df7cc5173ce4
921
983
Author: author <[email protected] >
922
984
Date: Sat Jan 1 00:00:00 2000 +0000
923
985
@@ -991,7 +1053,7 @@ index e69de29..0000000
991
1053
992
1054
#[ cfg( not( windows) ) ]
993
1055
{
994
- let expected = r#"commit dee00f5a20957db20d8d2e0050210716d6b44879
1056
+ let expected = r#"commit 0cf7a4fe3ad6c49ae7beb394a1c1df7cc5173ce4
995
1057
Author: author <[email protected] >
996
1058
Date: Sat Jan 1 00:00:00 2000 +0000
997
1059
@@ -1060,7 +1122,7 @@ rename to src/gix.rs
1060
1122
1061
1123
#[ cfg( not( windows) ) ]
1062
1124
{
1063
- let expected = r#"commit 72de3500e1bff816e56432bee8de02946d3e784b
1125
+ let expected = r#"commit d78c63c5ea3149040767e4387e7fc743cda118fd
1064
1126
Author: author <[email protected] >
1065
1127
Date: Sat Jan 1 00:00:00 2000 +0000
1066
1128
0 commit comments