Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a0d6288

Browse files
committed
Only display progress on if stderr is a tty
1 parent e68481f commit a0d6288

2 files changed

Lines changed: 29 additions & 22 deletions

File tree

src/aggregate.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use std::{
1919
/// If `sort_by_size_in_bytes` is set, we will sort all sizes (ascending) before outputting them.
2020
pub fn aggregate(
2121
mut out: impl io::Write,
22-
mut err: impl io::Write + Send + 'static,
22+
err: Option<impl io::Write + Send + 'static>,
2323
walk_options: WalkOptions,
2424
compute_total: bool,
2525
sort_by_size_in_bytes: bool,
@@ -36,19 +36,23 @@ pub fn aggregate(
3636
let mut inodes = InodeFilter::default();
3737
let paths: Vec<_> = paths.into_iter().collect();
3838
let shared_count = Arc::new(AtomicU64::new(0));
39-
thread::spawn({
40-
let shared_count = Arc::clone(&shared_count);
41-
thread::sleep(Duration::from_secs(1));
42-
move || loop {
43-
thread::sleep(Duration::from_millis(100));
44-
write!(
45-
err,
46-
"Enumerating {} entries\r",
47-
shared_count.load(Ordering::Relaxed)
48-
)
49-
.ok();
50-
}
51-
});
39+
40+
if let Some(mut err) = err {
41+
thread::spawn({
42+
let shared_count = Arc::clone(&shared_count);
43+
thread::sleep(Duration::from_secs(1));
44+
move || loop {
45+
thread::sleep(Duration::from_millis(100));
46+
write!(
47+
err,
48+
"Enumerating {} entries\r",
49+
shared_count.load(Ordering::Relaxed)
50+
)
51+
.ok();
52+
}
53+
});
54+
}
55+
5256
for path in paths.into_iter() {
5357
num_roots += 1;
5458
let mut num_bytes = 0u128;

src/main.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,21 @@
22
use anyhow::Result;
33
use clap::Clap;
44
use dua::{ByteFormat, TraversalSorting};
5-
use std::{
6-
fs, io,
7-
io::{stderr, Write},
8-
path::PathBuf,
9-
process,
10-
};
5+
use std::{fs, io, io::Write, path::PathBuf, process};
116

127
mod crossdev;
138
#[cfg(any(feature = "tui-unix", feature = "tui-crossplatform"))]
149
mod interactive;
1510
mod options;
1611

12+
fn stderr_if_tty() -> Option<io::Stderr> {
13+
if atty::is(atty::Stream::Stderr) {
14+
Some(io::stderr())
15+
} else {
16+
None
17+
}
18+
}
19+
1720
fn main() -> Result<()> {
1821
use options::Command::*;
1922

@@ -72,7 +75,7 @@ fn main() -> Result<()> {
7275
let stdout_locked = stdout.lock();
7376
let (res, stats) = dua::aggregate(
7477
stdout_locked,
75-
stderr(),
78+
stderr_if_tty(),
7679
walk_options,
7780
!no_total,
7881
!no_sort,
@@ -88,7 +91,7 @@ fn main() -> Result<()> {
8891
let stdout_locked = stdout.lock();
8992
dua::aggregate(
9093
stdout_locked,
91-
stderr(),
94+
stderr_if_tty(),
9295
walk_options,
9396
true,
9497
true,

0 commit comments

Comments
 (0)