1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 03:27:44 +00:00

install: various improvements in output & tests

This commit is contained in:
Sylvestre Ledru 2020-11-19 22:28:13 +01:00
parent 3024ade071
commit dca1f28085
7 changed files with 41 additions and 34 deletions

2
Cargo.lock generated
View file

@ -1,5 +1,3 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "advapi32-sys"
version = "0.2.0"

View file

@ -26,9 +26,6 @@ use std::os::unix::fs::MetadataExt;
use std::convert::AsRef;
use std::path::Path;
use std::ffi::CString;
use std::os::unix::ffi::OsStrExt;
static ABOUT: &str = "change file owner and group";
static VERSION: &str = env!("CARGO_PKG_VERSION");
@ -390,7 +387,6 @@ impl Chowner {
0
}
Err(e) => {
if self.verbosity != Verbosity::Silent {
show_info!("{}", e);
}

View file

@ -338,14 +338,8 @@ fn behavior(matches: &ArgMatches) -> Result<Behavior, i32> {
main_function,
specified_mode,
suffix: backup_suffix.to_string(),
owner: matches
.value_of(OPT_OWNER)
.unwrap_or_else(|| "")
.to_string(),
group: matches
.value_of(OPT_GROUP)
.unwrap_or_else(|| "")
.to_string(),
owner: matches.value_of(OPT_OWNER).unwrap_or("").to_string(),
group: matches.value_of(OPT_GROUP).unwrap_or("").to_string(),
verbose: matches.is_present(OPT_VERBOSE),
})
}

View file

@ -6,9 +6,6 @@
pub use crate::features::entries;
use libc::{self, gid_t, lchown, uid_t};
#[macro_use]
pub use crate::*;
use std::io::Error as IOError;
use std::io::Result as IOResult;
@ -19,8 +16,6 @@ use std::os::unix::fs::MetadataExt;
use std::os::unix::ffi::OsStrExt;
use std::path::Path;
//type PermResult<T> = Result<T, IOError>;
#[derive(PartialEq, Clone, Debug)]
pub enum Verbosity {
Silent,
@ -64,7 +59,7 @@ pub fn wrap_chgrp<P: AsRef<Path>>(
out = format!("changing group of '{}': {}", path.display(), e);
if verbosity == Verbose {
out = format!(
"{}\nfailed to change group of {} from {} to {}",
"{}\nfailed to change group of '{}' from {} to {}",
out,
path.display(),
entries::gid2grp(meta.gid()).unwrap(),
@ -80,7 +75,7 @@ pub fn wrap_chgrp<P: AsRef<Path>>(
match verbosity {
Changes | Verbose => {
out = format!(
"changed group of {} from {} to {}",
"changed group of '{}' from {} to {}",
path.display(),
entries::gid2grp(meta.gid()).unwrap(),
entries::gid2grp(dest_gid).unwrap()
@ -90,7 +85,7 @@ pub fn wrap_chgrp<P: AsRef<Path>>(
};
} else if verbosity == Verbose {
out = format!(
"group of {} retained as {}",
"group of '{}' retained as {}",
path.display(),
entries::gid2grp(dest_gid).unwrap()
);
@ -137,7 +132,7 @@ pub fn wrap_chown<P: AsRef<Path>>(
out = format!("changing ownership of '{}': {}", path.display(), e);
if verbosity == Verbose {
out = format!(
"{}\nfailed to change ownership of {} from {}:{} to {}:{}",
"{}\nfailed to change ownership of '{}' from {}:{} to {}:{}",
out,
path.display(),
entries::uid2usr(meta.uid()).unwrap(),
@ -155,7 +150,7 @@ pub fn wrap_chown<P: AsRef<Path>>(
match verbosity {
Changes | Verbose => {
out = format!(
"changed ownership of {} from {}:{} to {}:{}",
"changed ownership of '{}' from {}:{} to {}:{}",
path.display(),
entries::uid2usr(meta.uid()).unwrap(),
entries::gid2grp(meta.gid()).unwrap(),
@ -167,7 +162,7 @@ pub fn wrap_chown<P: AsRef<Path>>(
};
} else if verbosity == Verbose {
out = format!(
"ownership of {} retained as {}:{}",
"ownership of '{}' retained as {}:{}",
path.display(),
entries::uid2usr(dest_uid).unwrap(),
entries::gid2grp(dest_gid).unwrap()

View file

@ -110,7 +110,7 @@ fn test_reference() {
.arg("--reference=/etc/passwd")
.arg("/etc")
.fails()
.stderr_is("chgrp: changing group of '/etc': Operation not permitted (os error 1)\nfailed to change group of /etc from root to root");
.stderr_is("chgrp: changing group of '/etc': Operation not permitted (os error 1)\nfailed to change group of '/etc' from root to root");
}
}

View file

@ -1,5 +1,6 @@
use crate::common::util::*;
use rust_users::*;
#[cfg(target_os = "linux")]
use rust_users::get_effective_uid;
extern crate chown;
@ -345,7 +346,9 @@ fn test_chown_recursive() {
// As seems to be a configuration issue, ignoring it
return;
}
assert!(result.stdout.contains("ownership of a/a retained as"));
assert!(result.stderr.contains("ownership of 'a/a' retained as"));
assert!(result.stderr.contains("ownership of 'z/y' retained as"));
assert!(result.success);
}
@ -378,6 +381,7 @@ fn test_root_preserve() {
assert!(result
.stderr
.contains("chown: it is dangerous to operate recursively"));
}
#[cfg(target_os = "linux")]
fn test_big_p() {

View file

@ -216,13 +216,23 @@ fn test_install_target_new_file_with_group() {
at.touch(file);
at.mkdir(dir);
ucmd.arg(file)
let result = ucmd
.arg(file)
.arg("--group")
.arg(gid.to_string())
.arg(format!("{}/{}", dir, file))
.succeeds()
.no_stderr();
.run();
println!("stderr = {:?}", result.stderr);
println!("stdout = {:?}", result.stdout);
if is_ci() && result.stderr.contains("error: no such group:") {
// In the CI, some server are failing to return the group.
// As seems to be a configuration issue, ignoring it
return;
}
assert!(result.success);
assert!(at.file_exists(file));
assert!(at.file_exists(&format!("{}/{}", dir, file)));
}
@ -236,13 +246,23 @@ fn test_install_target_new_file_with_owner() {
at.touch(file);
at.mkdir(dir);
ucmd.arg(file)
let result = ucmd
.arg(file)
.arg("--owner")
.arg(uid.to_string())
.arg(format!("{}/{}", dir, file))
.succeeds()
.no_stderr();
.run();
println!("stderr = {:?}", result.stderr);
println!("stdout = {:?}", result.stdout);
if is_ci() && result.stderr.contains("error: no such user:") {
// In the CI, some server are failing to return the user id.
// As seems to be a configuration issue, ignoring it
return;
}
assert!(result.success);
assert!(at.file_exists(file));
assert!(at.file_exists(&format!("{}/{}", dir, file)));
}