mirror of
https://github.com/uutils/coreutils.git
synced 2025-12-23 08:47:37 +00:00
du: ignore env zero blocksize
This commit is contained in:
parent
8e7c6b01a4
commit
1c0214b29d
2 changed files with 115 additions and 13 deletions
|
|
@ -31,7 +31,7 @@ use uucore::safe_traversal::DirFd;
|
|||
use uucore::translate;
|
||||
|
||||
use uucore::parser::parse_glob;
|
||||
use uucore::parser::parse_size::{ParseSizeError, parse_size_u64};
|
||||
use uucore::parser::parse_size::{ParseSizeError, parse_size_non_zero_u64, parse_size_u64};
|
||||
use uucore::parser::shortcut_value_parser::ShortcutValueParser;
|
||||
use uucore::time::{FormatSystemTimeFallback, format, format_system_time};
|
||||
use uucore::{format_usage, show, show_error, show_warning};
|
||||
|
|
@ -271,23 +271,26 @@ fn get_file_info(path: &Path, _metadata: &Metadata) -> Option<FileInfo> {
|
|||
result
|
||||
}
|
||||
|
||||
fn block_size_from_env() -> Option<u64> {
|
||||
for env_var in ["DU_BLOCK_SIZE", "BLOCK_SIZE", "BLOCKSIZE"] {
|
||||
if let Ok(env_size) = env::var(env_var) {
|
||||
return parse_size_non_zero_u64(&env_size).ok();
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
fn read_block_size(s: Option<&str>) -> UResult<u64> {
|
||||
if let Some(s) = s {
|
||||
parse_size_u64(s)
|
||||
.map_err(|e| USimpleError::new(1, format_error_message(&e, s, options::BLOCK_SIZE)))
|
||||
} else if let Some(bytes) = block_size_from_env() {
|
||||
Ok(bytes)
|
||||
} else if env::var("POSIXLY_CORRECT").is_ok() {
|
||||
Ok(512)
|
||||
} else {
|
||||
for env_var in ["DU_BLOCK_SIZE", "BLOCK_SIZE", "BLOCKSIZE"] {
|
||||
if let Ok(env_size) = env::var(env_var) {
|
||||
if let Ok(v) = parse_size_u64(&env_size) {
|
||||
return Ok(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
if env::var("POSIXLY_CORRECT").is_ok() {
|
||||
Ok(512)
|
||||
} else {
|
||||
Ok(1024)
|
||||
}
|
||||
Ok(1024)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -179,6 +179,105 @@ fn test_du_with_posixly_correct() {
|
|||
assert_eq!(expected, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_du_zero_env_block_size() {
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let at = &ts.fixtures;
|
||||
let dir = "a";
|
||||
|
||||
at.mkdir(dir);
|
||||
at.write(&format!("{dir}/file"), "some content");
|
||||
|
||||
let expected = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.arg("--block-size=1024")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
let result = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.env("DU_BLOCK_SIZE", "0")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
assert_eq!(expected, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_du_zero_env_block_size_hierarchy() {
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let at = &ts.fixtures;
|
||||
let dir = "a";
|
||||
|
||||
at.mkdir(dir);
|
||||
at.write(&format!("{dir}/file"), "some content");
|
||||
|
||||
let expected = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.arg("--block-size=1024")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
let result1 = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.env("BLOCK_SIZE", "1")
|
||||
.env("DU_BLOCK_SIZE", "0")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
let result2 = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.env("BLOCK_SIZE", "1")
|
||||
.env("BLOCKSIZE", "1")
|
||||
.env("DU_BLOCK_SIZE", "0")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
assert_eq!(expected, result1);
|
||||
assert_eq!(expected, result2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_du_env_block_size_hierarchy() {
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let at = &ts.fixtures;
|
||||
let dir = "a";
|
||||
|
||||
at.mkdir(dir);
|
||||
at.write(&format!("{dir}/file"), "some content");
|
||||
|
||||
let expected = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.arg("--block-size=1")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
let result1 = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.env("BLOCK_SIZE", "0")
|
||||
.env("DU_BLOCK_SIZE", "1")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
let result2 = ts
|
||||
.ucmd()
|
||||
.arg(dir)
|
||||
.env("BLOCK_SIZE", "1")
|
||||
.env("BLOCKSIZE", "0")
|
||||
.succeeds()
|
||||
.stdout_move_str();
|
||||
|
||||
assert_eq!(expected, result1);
|
||||
assert_eq!(expected, result2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_du_non_existing_files() {
|
||||
new_ucmd!()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue