summaryrefslogtreecommitdiffstats
path: root/src/aggregate.rs
diff options
context:
space:
mode:
authorSebastian Thiel <sebastian.thiel@icloud.com>2021-08-05 17:45:50 +0800
committerSebastian Thiel <sebastian.thiel@icloud.com>2021-08-05 17:45:50 +0800
commit7429cb3d1139605abdf3efcb8a4d5cceb300be1b (patch)
treed56116a5b176400ccfd97776771e93b8bcb1afec /src/aggregate.rs
parent3987e7c51b4b27fd4c95def42ce3e585dc46c7c6 (diff)
Add aggregate-scan-progress feature to help with #99
Diffstat (limited to 'src/aggregate.rs')
-rw-r--r--src/aggregate.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/aggregate.rs b/src/aggregate.rs
index d42eafe..b4b1033 100644
--- a/src/aggregate.rs
+++ b/src/aggregate.rs
@@ -2,10 +2,9 @@ use crate::{crossdev, InodeFilter, WalkOptions, WalkResult};
use anyhow::Result;
use colored::{Color, Colorize};
use filesize::PathExt;
+use std::{borrow::Cow, io, path::Path};
+#[cfg(feature = "aggregate-scan-progress")]
use std::{
- borrow::Cow,
- io,
- path::Path,
sync::{
atomic::{AtomicU64, Ordering},
Arc,
@@ -19,7 +18,9 @@ use std::{
/// If `sort_by_size_in_bytes` is set, we will sort all sizes (ascending) before outputting them.
pub fn aggregate(
mut out: impl io::Write,
- err: Option<impl io::Write + Send + 'static>,
+ #[cfg_attr(not(feature = "aggregate-scan-progress"), allow(unused_variables))] err: Option<
+ impl io::Write + Send + 'static,
+ >,
walk_options: WalkOptions,
compute_total: bool,
sort_by_size_in_bytes: bool,
@@ -35,9 +36,11 @@ pub fn aggregate(
let mut aggregates = Vec::new();
let mut inodes = InodeFilter::default();
let paths: Vec<_> = paths.into_iter().collect();
+ #[cfg(feature = "aggregate-scan-progress")]
let shared_count = Arc::new(AtomicU64::new(0));
- if let Some(mut err) = err {
+ #[cfg(feature = "aggregate-scan-progress")]
+ if let Some(mut out) = err {
thread::spawn({
let shared_count = Arc::clone(&shared_count);
move || {
@@ -45,7 +48,7 @@ pub fn aggregate(
loop {
thread::sleep(Duration::from_millis(100));
write!(
- err,
+ out,
"Enumerating {} entries\r",
shared_count.load(Ordering::Acquire)
)
@@ -62,6 +65,7 @@ pub fn aggregate(
let device_id = crossdev::init(path.as_ref())?;
for entry in walk_options.iter_from_path(path.as_ref()) {
stats.entries_traversed += 1;
+ #[cfg(feature = "aggregate-scan-progress")]
shared_count.fetch_add(1, Ordering::Relaxed);
match entry {
Ok(entry) => {