Skip to content

Commit 4aef5b4

Browse files
committed
feat(api)!: add hook to FsTreeBuilder
1 parent a7165e1 commit 4aef5b4

6 files changed

Lines changed: 37 additions & 3 deletions

File tree

src/app/sub.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::{
33
data_tree::{DataTree, DataTreeReflection},
44
fs_tree_builder::FsTreeBuilder,
55
get_size::GetSize,
6+
hook,
67
json_data::{BinaryVersion, JsonData, SchemaVersion, UnitAndTree},
78
os_string_display::OsStringDisplay,
89
reporter::ParallelReporter,
@@ -78,6 +79,7 @@ where
7879
reporter: &reporter,
7980
root,
8081
size_getter,
82+
hook: hook::DoNothing, // TODO: change this
8183
max_depth,
8284
}
8385
.into()

src/fs_tree_builder.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::{
22
data_tree::DataTree,
33
get_size::GetSize,
4+
hook::{self, HookArgument},
45
os_string_display::OsStringDisplay,
56
reporter::{error_report::Operation::*, ErrorReport, Event, Reporter},
67
size,
@@ -34,34 +35,39 @@ use std::{
3435
/// let data_tree: DataTree<OsStringDisplay, Bytes> = builder.into();
3536
/// ```
3637
#[derive(Debug)]
37-
pub struct FsTreeBuilder<Size, SizeGetter, Report>
38+
pub struct FsTreeBuilder<Size, SizeGetter, Hook, Report>
3839
where
3940
Report: Reporter<Size> + Sync,
4041
Size: size::Size + Send + Sync,
4142
SizeGetter: GetSize<Size = Size> + Sync,
43+
Hook: hook::Hook<Size>,
4244
{
4345
/// Root of the directory tree.
4446
pub root: PathBuf,
4547
/// Returns size of an item.
4648
pub size_getter: SizeGetter,
49+
/// Hook to run after [`Self::size_getter`].
50+
pub hook: Hook,
4751
/// Reports progress to external system.
4852
pub reporter: Report,
4953
/// Deepest level of descendent display in the graph. The sizes beyond the max depth still count toward total.
5054
pub max_depth: u64,
5155
}
5256

53-
impl<Size, SizeGetter, Report> From<FsTreeBuilder<Size, SizeGetter, Report>>
57+
impl<Size, SizeGetter, Hook, Report> From<FsTreeBuilder<Size, SizeGetter, Hook, Report>>
5458
for DataTree<OsStringDisplay, Size>
5559
where
5660
Report: Reporter<Size> + Sync,
5761
Size: size::Size + Send + Sync,
5862
SizeGetter: GetSize<Size = Size> + Sync,
63+
Hook: hook::Hook<Size> + Sync,
5964
{
6065
/// Create a [`DataTree`] from an [`FsTreeBuilder`].
61-
fn from(builder: FsTreeBuilder<Size, SizeGetter, Report>) -> Self {
66+
fn from(builder: FsTreeBuilder<Size, SizeGetter, Hook, Report>) -> Self {
6267
let FsTreeBuilder {
6368
root,
6469
size_getter,
70+
hook,
6571
reporter,
6672
max_depth,
6773
} = builder;
@@ -89,6 +95,7 @@ where
8995
let is_dir = stats.is_dir();
9096
let size = size_getter.get_size(&stats);
9197
reporter.report(Event::ReceiveData(size));
98+
hook.run_hook(HookArgument::new(path, &stats, size));
9299
(is_dir, size)
93100
}
94101
};

tests/_utils.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use parallel_disk_usage::{
55
data_tree::{DataTree, DataTreeReflection},
66
fs_tree_builder::FsTreeBuilder,
77
get_size::{self, GetSize},
8+
hook,
89
os_string_display::OsStringDisplay,
910
reporter::ErrorOnlyReporter,
1011
size,
@@ -149,6 +150,7 @@ where
149150
let measure = |suffix: &str| {
150151
FsTreeBuilder {
151152
size_getter,
153+
hook: hook::DoNothing,
152154
reporter: ErrorOnlyReporter::new(|error| {
153155
panic!("Unexpected call to report_error: {error:?}")
154156
}),

tests/cli_errors.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use parallel_disk_usage::{
1010
data_tree::DataTree,
1111
fs_tree_builder::FsTreeBuilder,
1212
get_size::GetApparentSize,
13+
hook,
1314
os_string_display::OsStringDisplay,
1415
reporter::{ErrorOnlyReporter, ErrorReport},
1516
visualizer::{BarAlignment, ColumnWidthDistribution, Direction, Visualizer},
@@ -131,6 +132,7 @@ fn fs_errors() {
131132
let builder = FsTreeBuilder {
132133
root: workspace.to_path_buf(),
133134
size_getter: GetApparentSize,
135+
hook: hook::DoNothing,
134136
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
135137
max_depth: 10,
136138
};

tests/json.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use parallel_disk_usage::{
1010
data_tree::{DataTree, Reflection},
1111
fs_tree_builder::FsTreeBuilder,
1212
get_size::GetApparentSize,
13+
hook,
1314
json_data::{JsonData, SchemaVersion},
1415
reporter::{ErrorOnlyReporter, ErrorReport},
1516
size::Bytes,
@@ -81,6 +82,7 @@ fn json_output() {
8182
let builder = FsTreeBuilder {
8283
root: workspace.to_path_buf(),
8384
size_getter: GetApparentSize,
85+
hook: hook::DoNothing,
8486
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
8587
max_depth: 10,
8688
};

tests/usual_cli.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use parallel_disk_usage::{
99
data_tree::DataTree,
1010
fs_tree_builder::FsTreeBuilder,
1111
get_size::{GetApparentSize, GetBlockCount, GetBlockSize},
12+
hook,
1213
os_string_display::OsStringDisplay,
1314
reporter::{ErrorOnlyReporter, ErrorReport},
1415
visualizer::{BarAlignment, ColumnWidthDistribution, Direction, Visualizer},
@@ -39,6 +40,7 @@ fn total_width() {
3940
let builder = FsTreeBuilder {
4041
root: workspace.to_path_buf(),
4142
size_getter: DEFAULT_GET_SIZE,
43+
hook: hook::DoNothing,
4244
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
4345
max_depth: 10,
4446
};
@@ -77,6 +79,7 @@ fn column_width() {
7779
let builder = FsTreeBuilder {
7880
root: workspace.to_path_buf(),
7981
size_getter: DEFAULT_GET_SIZE,
82+
hook: hook::DoNothing,
8083
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
8184
max_depth: 10,
8285
};
@@ -115,6 +118,7 @@ fn min_ratio_0() {
115118
let builder = FsTreeBuilder {
116119
root: workspace.to_path_buf(),
117120
size_getter: GetApparentSize,
121+
hook: hook::DoNothing,
118122
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
119123
max_depth: 10,
120124
};
@@ -152,6 +156,7 @@ fn min_ratio() {
152156
let builder = FsTreeBuilder {
153157
root: workspace.to_path_buf(),
154158
size_getter: GetApparentSize,
159+
hook: hook::DoNothing,
155160
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
156161
max_depth: 10,
157162
};
@@ -190,6 +195,7 @@ fn max_depth_2() {
190195
let builder = FsTreeBuilder {
191196
root: workspace.to_path_buf(),
192197
size_getter: GetApparentSize,
198+
hook: hook::DoNothing,
193199
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
194200
max_depth: 2,
195201
};
@@ -228,6 +234,7 @@ fn max_depth_1() {
228234
let builder = FsTreeBuilder {
229235
root: workspace.to_path_buf(),
230236
size_getter: GetApparentSize,
237+
hook: hook::DoNothing,
231238
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
232239
max_depth: 1,
233240
};
@@ -265,6 +272,7 @@ fn top_down() {
265272
let builder = FsTreeBuilder {
266273
root: workspace.to_path_buf(),
267274
size_getter: DEFAULT_GET_SIZE,
275+
hook: hook::DoNothing,
268276
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
269277
max_depth: 10,
270278
};
@@ -302,6 +310,7 @@ fn align_right() {
302310
let builder = FsTreeBuilder {
303311
root: workspace.to_path_buf(),
304312
size_getter: DEFAULT_GET_SIZE,
313+
hook: hook::DoNothing,
305314
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
306315
max_depth: 10,
307316
};
@@ -339,6 +348,7 @@ fn quantity_apparent_size() {
339348
let builder = FsTreeBuilder {
340349
root: workspace.to_path_buf(),
341350
size_getter: GetApparentSize,
351+
hook: hook::DoNothing,
342352
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
343353
max_depth: 10,
344354
};
@@ -377,6 +387,7 @@ fn quantity_block_size() {
377387
let builder = FsTreeBuilder {
378388
root: workspace.to_path_buf(),
379389
size_getter: GetBlockSize,
390+
hook: hook::DoNothing,
380391
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
381392
max_depth: 10,
382393
};
@@ -415,6 +426,7 @@ fn quantity_block_count() {
415426
let builder = FsTreeBuilder {
416427
root: workspace.to_path_buf(),
417428
size_getter: GetBlockCount,
429+
hook: hook::DoNothing,
418430
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
419431
max_depth: 10,
420432
};
@@ -454,6 +466,7 @@ fn bytes_format_plain() {
454466
let builder = FsTreeBuilder {
455467
root: workspace.to_path_buf(),
456468
size_getter: GetBlockSize,
469+
hook: hook::DoNothing,
457470
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
458471
max_depth: 10,
459472
};
@@ -493,6 +506,7 @@ fn bytes_format_metric() {
493506
let builder = FsTreeBuilder {
494507
root: workspace.to_path_buf(),
495508
size_getter: GetBlockSize,
509+
hook: hook::DoNothing,
496510
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
497511
max_depth: 10,
498512
};
@@ -532,6 +546,7 @@ fn bytes_format_binary() {
532546
let builder = FsTreeBuilder {
533547
root: workspace.to_path_buf(),
534548
size_getter: GetBlockSize,
549+
hook: hook::DoNothing,
535550
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
536551
max_depth: 10,
537552
};
@@ -569,6 +584,7 @@ fn path_to_workspace() {
569584
let builder = FsTreeBuilder {
570585
root: workspace.to_path_buf(),
571586
size_getter: DEFAULT_GET_SIZE,
587+
hook: hook::DoNothing,
572588
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
573589
max_depth: 10,
574590
};
@@ -611,6 +627,7 @@ fn multiple_names() {
611627
let builder = FsTreeBuilder {
612628
root: workspace.to_path_buf().join(name),
613629
size_getter: GetApparentSize,
630+
hook: hook::DoNothing,
614631
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
615632
max_depth: 10,
616633
};
@@ -675,6 +692,7 @@ fn multiple_names_max_depth_2() {
675692
let builder = FsTreeBuilder {
676693
root: workspace.to_path_buf().join(name),
677694
size_getter: GetApparentSize,
695+
hook: hook::DoNothing,
678696
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
679697
max_depth: 1,
680698
};
@@ -734,6 +752,7 @@ fn multiple_names_max_depth_1() {
734752
let builder = FsTreeBuilder {
735753
root: workspace.to_path_buf().join(name),
736754
size_getter: GetApparentSize,
755+
hook: hook::DoNothing,
737756
reporter: ErrorOnlyReporter::new(ErrorReport::SILENT),
738757
max_depth: 10,
739758
};

0 commit comments

Comments
 (0)