mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 19:47:45 +00:00
install: support when a hyphen is passed (#5697)
* install: support when a hyphen is passed Should fix: tests/install/strip-program.sh Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
This commit is contained in:
parent
6b1f51385f
commit
2832694056
2 changed files with 43 additions and 1 deletions
|
@ -749,7 +749,21 @@ fn copy_file(from: &Path, to: &Path) -> UResult<()> {
|
||||||
/// Returns an empty Result or an error in case of failure.
|
/// Returns an empty Result or an error in case of failure.
|
||||||
///
|
///
|
||||||
fn strip_file(to: &Path, b: &Behavior) -> UResult<()> {
|
fn strip_file(to: &Path, b: &Behavior) -> UResult<()> {
|
||||||
match process::Command::new(&b.strip_program).arg(to).output() {
|
// Check if the filename starts with a hyphen and adjust the path
|
||||||
|
let to = if to
|
||||||
|
.file_name()
|
||||||
|
.unwrap_or_default()
|
||||||
|
.to_str()
|
||||||
|
.unwrap_or_default()
|
||||||
|
.starts_with('-')
|
||||||
|
{
|
||||||
|
let mut new_path = PathBuf::from(".");
|
||||||
|
new_path.push(to);
|
||||||
|
new_path
|
||||||
|
} else {
|
||||||
|
to.to_path_buf()
|
||||||
|
};
|
||||||
|
match process::Command::new(&b.strip_program).arg(&to).output() {
|
||||||
Ok(o) => {
|
Ok(o) => {
|
||||||
if !o.status.success() {
|
if !o.status.success() {
|
||||||
// Follow GNU's behavior: if strip fails, removes the target
|
// Follow GNU's behavior: if strip fails, removes the target
|
||||||
|
|
|
@ -674,6 +674,34 @@ fn test_install_and_strip_with_program() {
|
||||||
assert!(!stdout.contains(STRIP_SOURCE_FILE_SYMBOL));
|
assert!(!stdout.contains(STRIP_SOURCE_FILE_SYMBOL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(all(unix, feature = "chmod"))]
|
||||||
|
#[test]
|
||||||
|
// FixME: Freebsd fails on 'No such file or directory'
|
||||||
|
#[cfg(not(target_os = "freebsd"))]
|
||||||
|
fn test_install_and_strip_with_program_hyphen() {
|
||||||
|
let scene = TestScenario::new(util_name!());
|
||||||
|
|
||||||
|
let at = &scene.fixtures;
|
||||||
|
let content = r#"#!/bin/sh
|
||||||
|
echo $1 &> /tmp/a.log
|
||||||
|
printf -- '%s\n' "$1" | grep '^[^-]'
|
||||||
|
"#;
|
||||||
|
at.write("no-hyphen", content);
|
||||||
|
scene.ccmd("chmod").arg("+x").arg("no-hyphen").succeeds();
|
||||||
|
|
||||||
|
at.touch("src");
|
||||||
|
scene
|
||||||
|
.ucmd()
|
||||||
|
.arg("-s")
|
||||||
|
.arg("--strip-program")
|
||||||
|
.arg("./no-hyphen")
|
||||||
|
.arg("--")
|
||||||
|
.arg("src")
|
||||||
|
.arg("-dest")
|
||||||
|
.succeeds()
|
||||||
|
.no_stderr();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
fn test_install_and_strip_with_invalid_program() {
|
fn test_install_and_strip_with_invalid_program() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue