mirror of
https://github.com/nushell/nushell.git
synced 2025-01-06 22:40:01 +01:00
make du streaming (#14665)
# Description Following up for issue comment: https://github.com/nushell/nushell/pull/14407#issuecomment-2532343036 > it looks like it just hangs when it's actually counting things I noticed that `du` command collects output internally, so it doesn't streaming. This pr is trying to make it streaming # User-Facing Changes NaN # Tests + Formatting NaN
This commit is contained in:
parent
1b01598840
commit
38ffcaad7b
@ -165,6 +165,7 @@ fn du_for_one_pattern(
|
|||||||
span: Span,
|
span: Span,
|
||||||
signals: &Signals,
|
signals: &Signals,
|
||||||
) -> Result<impl Iterator<Item = Value> + Send, ShellError> {
|
) -> Result<impl Iterator<Item = Value> + Send, ShellError> {
|
||||||
|
let signals_clone = signals.clone();
|
||||||
let exclude = args.exclude.map_or(Ok(None), move |x| {
|
let exclude = args.exclude.map_or(Ok(None), move |x| {
|
||||||
Pattern::new(x.item.as_ref())
|
Pattern::new(x.item.as_ref())
|
||||||
.map(Some)
|
.map(Some)
|
||||||
@ -174,7 +175,7 @@ fn du_for_one_pattern(
|
|||||||
})
|
})
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let mut paths = match args.path {
|
let paths = match args.path {
|
||||||
Some(p) => nu_engine::glob_from(&p, current_dir, span, None),
|
Some(p) => nu_engine::glob_from(&p, current_dir, span, None),
|
||||||
// The * pattern should never fail.
|
// The * pattern should never fail.
|
||||||
None => nu_engine::glob_from(
|
None => nu_engine::glob_from(
|
||||||
@ -202,22 +203,22 @@ fn du_for_one_pattern(
|
|||||||
long,
|
long,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut output: Vec<Value> = vec![];
|
Ok(paths.filter_map(move |p| match p {
|
||||||
for p in paths.by_ref() {
|
Ok(a) => {
|
||||||
match p {
|
if a.is_dir() {
|
||||||
Ok(a) => {
|
match DirInfo::new(a, ¶ms, max_depth, span, &signals_clone) {
|
||||||
if a.is_dir() {
|
Ok(v) => Some(Value::from(v)),
|
||||||
output.push(DirInfo::new(a, ¶ms, max_depth, span, signals)?.into());
|
Err(_) => None,
|
||||||
} else if let Ok(v) = FileInfo::new(a, deref, span, params.long) {
|
}
|
||||||
output.push(v.into());
|
} else {
|
||||||
|
match FileInfo::new(a, deref, span, params.long) {
|
||||||
|
Ok(v) => Some(Value::from(v)),
|
||||||
|
Err(_) => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
|
||||||
output.push(Value::error(e, span));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
Err(e) => Some(Value::error(e, span)),
|
||||||
Ok(output.into_iter())
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user