mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 09:15:42 +02:00
du: add -l/--long
flag, remove -a/--all
flag (#14407)
# Description Closes: #14387 ~To make it happen, just need to added `-l` flag to `du`, and pass it to `DirBuilder`, `DirInfo`, `FileInfo` Then tweak `impl From<DirInfo> for Value` and `impl From<FileInfo> for Value` impl.~ --- Edit: this PR is going to: 1. Exclude directories and files columns by default 2. Added `-l/--long` flag to output directories and files columns 3. When running `du`, it will output the files as well. Previously it doesn't output the size of file. To make it happen, just need to added `-r` flag to `du`, and pass it to `DirBuilder`, `DirInfo`, `FileInfo` Then tweak `impl From<DirInfo> for Value` and `impl From<FileInfo> for Value` impl. And rename some variables. # User-Facing Changes `du` is no longer output `directories` and `file` columns by default, added `-r` flag will show `directories` column, `-f` flag will show `files` column. ```nushell > du nushell ╭───┬────────────────────────────────────┬──────────┬──────────╮ │ # │ path │ apparent │ physical │ ├───┼────────────────────────────────────┼──────────┼──────────┤ │ 0 │ /home/windsoilder/projects/nushell │ 34.6 GiB │ 34.7 GiB │ ├───┼────────────────────────────────────┼──────────┼──────────┤ │ # │ path │ apparent │ physical │ ╰───┴────────────────────────────────────┴──────────┴──────────╯ > du nushell --recursive --files # It outputs two more columns, `directories` and `files`, but the output is too long to paste here. ``` # Tests + Formatting Added 1 test # After Submitting NaN
This commit is contained in:
@ -12,8 +12,8 @@ pub struct Du;
|
||||
#[derive(Deserialize, Clone, Debug)]
|
||||
pub struct DuArgs {
|
||||
path: Option<Spanned<NuGlob>>,
|
||||
all: bool,
|
||||
deref: bool,
|
||||
long: bool,
|
||||
exclude: Option<Spanned<NuGlob>>,
|
||||
#[serde(rename = "max-depth")]
|
||||
max_depth: Option<Spanned<i64>>,
|
||||
@ -49,6 +49,11 @@ impl Command for Du {
|
||||
"Dereference symlinks to their targets for size",
|
||||
Some('r'),
|
||||
)
|
||||
.switch(
|
||||
"long",
|
||||
"Get underlying directories and files for each entry",
|
||||
Some('l'),
|
||||
)
|
||||
.named(
|
||||
"exclude",
|
||||
SyntaxShape::GlobPattern,
|
||||
@ -94,8 +99,8 @@ impl Command for Du {
|
||||
});
|
||||
}
|
||||
}
|
||||
let all = call.has_flag(engine_state, stack, "all")?;
|
||||
let deref = call.has_flag(engine_state, stack, "deref")?;
|
||||
let long = call.has_flag(engine_state, stack, "long")?;
|
||||
let exclude = call.get_flag(engine_state, stack, "exclude")?;
|
||||
#[allow(deprecated)]
|
||||
let current_dir = current_dir(engine_state, stack)?;
|
||||
@ -111,8 +116,8 @@ impl Command for Du {
|
||||
None => {
|
||||
let args = DuArgs {
|
||||
path: None,
|
||||
all,
|
||||
deref,
|
||||
long,
|
||||
exclude,
|
||||
max_depth,
|
||||
min_size,
|
||||
@ -127,8 +132,8 @@ impl Command for Du {
|
||||
for p in paths {
|
||||
let args = DuArgs {
|
||||
path: Some(p),
|
||||
all,
|
||||
deref,
|
||||
long,
|
||||
exclude: exclude.clone(),
|
||||
max_depth,
|
||||
min_size,
|
||||
@ -174,7 +179,6 @@ fn du_for_one_pattern(
|
||||
})
|
||||
})?;
|
||||
|
||||
let include_files = args.all;
|
||||
let mut paths = match args.path {
|
||||
Some(p) => nu_engine::glob_from(&p, current_dir, span, None),
|
||||
// The * pattern should never fail.
|
||||
@ -188,17 +192,10 @@ fn du_for_one_pattern(
|
||||
None,
|
||||
),
|
||||
}
|
||||
.map(|f| f.1)?
|
||||
.filter(move |p| {
|
||||
if include_files {
|
||||
true
|
||||
} else {
|
||||
matches!(p, Ok(f) if f.is_dir())
|
||||
}
|
||||
});
|
||||
.map(|f| f.1)?;
|
||||
|
||||
let all = args.all;
|
||||
let deref = args.deref;
|
||||
let long = args.long;
|
||||
let max_depth = args.max_depth.map(|f| f.item as u64);
|
||||
let min_size = args.min_size.map(|f| f.item as u64);
|
||||
|
||||
@ -207,7 +204,7 @@ fn du_for_one_pattern(
|
||||
min: min_size,
|
||||
deref,
|
||||
exclude,
|
||||
all,
|
||||
long,
|
||||
};
|
||||
|
||||
let mut output: Vec<Value> = vec![];
|
||||
@ -216,7 +213,7 @@ fn du_for_one_pattern(
|
||||
Ok(a) => {
|
||||
if a.is_dir() {
|
||||
output.push(DirInfo::new(a, ¶ms, max_depth, span, signals)?.into());
|
||||
} else if let Ok(v) = FileInfo::new(a, deref, span) {
|
||||
} else if let Ok(v) = FileInfo::new(a, deref, span, params.long) {
|
||||
output.push(v.into());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user