1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 19:47:45 +00:00

install: verbose - list all created directories

$ install -Dv source_file1 sub3/a/b/c/file
install: creating directory 'sub3'
install: creating directory 'sub3/a'
install: creating directory 'sub3/a/b'
install: creating directory 'sub3/a/b/c'
'source_file1' -> 'sub3/a/b/c/file'
This commit is contained in:
Sylvestre Ledru 2022-04-18 00:30:21 +02:00
parent ee50f408bd
commit 7910eca71b
2 changed files with 40 additions and 1 deletions

View file

@ -464,6 +464,19 @@ fn standard(mut paths: Vec<String>, b: &Behavior) -> UResult<()> {
} else { } else {
if let Some(parent) = target.parent() { if let Some(parent) = target.parent() {
if !parent.exists() && b.create_leading { if !parent.exists() && b.create_leading {
if b.verbose {
let mut result = PathBuf::new();
// When creating directories with -Dv, show directory creations step
// by step
for part in parent.components() {
result.push(part.as_os_str());
if !Path::new(part.as_os_str()).is_dir() {
// Don't display when the directory already exists
println!("install: creating directory {}", result.quote());
}
}
}
if let Err(e) = fs::create_dir_all(parent) { if let Err(e) = fs::create_dir_all(parent) {
return Err(InstallError::CreateDirFailed(parent.to_path_buf(), e).into()); return Err(InstallError::CreateDirFailed(parent.to_path_buf(), e).into());
} }

View file

@ -1,4 +1,4 @@
// spell-checker:ignore (words) helloworld objdump // spell-checker:ignore (words) helloworld objdump n'source
use crate::common::util::*; use crate::common::util::*;
use filetime::FileTime; use filetime::FileTime;
@ -1174,3 +1174,29 @@ fn test_install_dir_dot() {
assert!(at.dir_exists("dir4/cal")); assert!(at.dir_exists("dir4/cal"));
assert!(at.dir_exists("dir5/cali")); assert!(at.dir_exists("dir5/cali"));
} }
#[test]
fn test_install_dir_req_verbose() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let file_1 = "source_file1";
let dest_dir = "sub4";
at.touch(file_1);
scene
.ucmd()
.arg("-Dv")
.arg(file_1)
.arg("sub3/a/b/c/file")
.succeeds()
.stdout_contains("install: creating directory 'sub3'\ninstall: creating directory 'sub3/a'\ninstall: creating directory 'sub3/a/b'\ninstall: creating directory 'sub3/a/b/c'\n'source_file1' -> 'sub3/a/b/c/file'");
at.mkdir(dest_dir);
scene
.ucmd()
.arg("-Dv")
.arg(file_1)
.arg("sub4/a/b/c/file")
.succeeds()
.stdout_contains("install: creating directory 'sub4/a'\ninstall: creating directory 'sub4/a/b'\ninstall: creating directory 'sub4/a/b/c'\n'source_file1' -> 'sub4/a/b/c/file'");
}