@@ -10,6 +10,7 @@ use gix_dir::entry;
10
10
use gix_dir:: entry:: Kind :: * ;
11
11
use gix_dir:: entry:: PathspecMatch :: * ;
12
12
use gix_dir:: entry:: Status :: * ;
13
+ use gix_dir:: walk:: CollapsedEntriesEmissionMode :: { All , OnStatusMismatch } ;
13
14
use gix_dir:: walk:: EmissionMode :: * ;
14
15
use gix_dir:: walk:: ForDeletionMode ;
15
16
use gix_ignore:: Kind :: * ;
@@ -1060,6 +1061,7 @@ fn untracked_and_ignored() -> crate::Result {
1060
1061
walk:: Options {
1061
1062
emit_ignored : Some ( CollapseDirectory ) ,
1062
1063
emit_untracked : CollapseDirectory ,
1064
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1063
1065
..options ( )
1064
1066
} ,
1065
1067
keep,
@@ -1147,6 +1149,7 @@ fn untracked_and_ignored_collapse_handling_mixed() -> crate::Result {
1147
1149
emit_ignored : Some ( CollapseDirectory ) ,
1148
1150
emit_untracked : CollapseDirectory ,
1149
1151
for_deletion : None ,
1152
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1150
1153
..options ( )
1151
1154
} ,
1152
1155
keep,
@@ -1242,6 +1245,7 @@ fn untracked_and_ignored_collapse_handling_for_deletion_with_wildcards() -> crat
1242
1245
emit_ignored : Some ( CollapseDirectory ) ,
1243
1246
emit_untracked : CollapseDirectory ,
1244
1247
for_deletion : Some ( Default :: default ( ) ) ,
1248
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1245
1249
..options ( )
1246
1250
} ,
1247
1251
keep,
@@ -1363,6 +1367,7 @@ fn untracked_and_ignored_collapse_handling_for_deletion_mixed() -> crate::Result
1363
1367
emit_ignored : Some ( CollapseDirectory ) ,
1364
1368
emit_untracked : CollapseDirectory ,
1365
1369
for_deletion : Some ( Default :: default ( ) ) ,
1370
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1366
1371
..options ( )
1367
1372
} ,
1368
1373
keep,
@@ -1408,6 +1413,7 @@ fn untracked_and_ignored_collapse_handling_for_deletion_mixed() -> crate::Result
1408
1413
emit_ignored : Some ( CollapseDirectory ) ,
1409
1414
emit_untracked : CollapseDirectory ,
1410
1415
for_deletion : Some ( Default :: default ( ) ) ,
1416
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1411
1417
..options ( )
1412
1418
} ,
1413
1419
keep,
@@ -1489,6 +1495,7 @@ fn untracked_and_ignored_collapse_handling_for_deletion_mixed() -> crate::Result
1489
1495
emit_ignored : Some ( CollapseDirectory ) ,
1490
1496
emit_untracked : CollapseDirectory ,
1491
1497
for_deletion : Some ( Default :: default ( ) ) ,
1498
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1492
1499
..options ( )
1493
1500
} ,
1494
1501
keep,
@@ -1590,6 +1597,7 @@ fn precious_are_not_expendable() {
1590
1597
walk:: Options {
1591
1598
emit_ignored : Some ( CollapseDirectory ) ,
1592
1599
emit_untracked : CollapseDirectory ,
1600
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1593
1601
..options ( )
1594
1602
} ,
1595
1603
keep,
@@ -1629,6 +1637,7 @@ fn precious_are_not_expendable() {
1629
1637
walk:: Options {
1630
1638
emit_ignored : Some ( CollapseDirectory ) ,
1631
1639
emit_untracked : CollapseDirectory ,
1640
+ emit_collapsed : Some ( OnStatusMismatch ) ,
1632
1641
..options ( )
1633
1642
} ,
1634
1643
keep,
@@ -2763,6 +2772,7 @@ fn untracked_and_ignored_collapse_mix() {
2763
2772
walk:: Options {
2764
2773
emit_ignored : Some ( Matching ) ,
2765
2774
emit_untracked : CollapseDirectory ,
2775
+ emit_collapsed : Some ( OnStatusMismatch ) ,
2766
2776
..options_emit_all ( )
2767
2777
} ,
2768
2778
keep,
@@ -2788,6 +2798,43 @@ fn untracked_and_ignored_collapse_mix() {
2788
2798
] ,
2789
2799
"untracked collapses separately from ignored, but note that matching directories are still emitted, i.e. ignored/"
2790
2800
) ;
2801
+
2802
+ let ( out, entries) = collect ( & root, |keep, ctx| {
2803
+ walk (
2804
+ & root,
2805
+ & root,
2806
+ ctx,
2807
+ walk:: Options {
2808
+ emit_ignored : Some ( Matching ) ,
2809
+ emit_untracked : CollapseDirectory ,
2810
+ emit_collapsed : Some ( All ) ,
2811
+ ..options_emit_all ( )
2812
+ } ,
2813
+ keep,
2814
+ )
2815
+ } ) ;
2816
+ assert_eq ! (
2817
+ out,
2818
+ walk:: Outcome {
2819
+ read_dir_calls: 4 ,
2820
+ returned_entries: entries. len( ) ,
2821
+ seen_entries: 8 ,
2822
+ }
2823
+ ) ;
2824
+ assert_eq ! (
2825
+ entries,
2826
+ [
2827
+ entry( ".gitignore" , Untracked , File ) ,
2828
+ entry( "ignored" , Ignored ( Expendable ) , Directory ) ,
2829
+ entry( "ignored-inside/d.o" , Ignored ( Expendable ) , File ) ,
2830
+ entry( "mixed" , Untracked , Directory ) ,
2831
+ entry_dirstat( "mixed/c" , Untracked , File , Untracked ) ,
2832
+ entry_dirstat( "mixed/c.o" , Ignored ( Expendable ) , File , Untracked ) ,
2833
+ entry( "untracked" , Untracked , Directory ) ,
2834
+ entry_dirstat( "untracked/a" , Untracked , File , Untracked ) ,
2835
+ ] ,
2836
+ "we can also emit all collapsed entries"
2837
+ ) ;
2791
2838
}
2792
2839
2793
2840
#[ test]
0 commit comments