Skip to content

Commit

Permalink
Merge pull request #5686 from sylvestre/install-basic
Browse files Browse the repository at this point in the history
install: with -t, check if we aren't passed a file
  • Loading branch information
cakebaker committed Dec 23, 2023
2 parents 2832694 + 9ca7c3e commit be82200
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/uu/install/src/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ enum InstallError {
InvalidUser(String),
InvalidGroup(String),
OmittingDirectory(PathBuf),
NotADirectory(PathBuf),
}

impl UError for InstallError {
Expand Down Expand Up @@ -120,6 +121,9 @@ impl Display for InstallError {
Self::InvalidUser(user) => write!(f, "invalid user: {}", user.quote()),
Self::InvalidGroup(group) => write!(f, "invalid group: {}", group.quote()),
Self::OmittingDirectory(dir) => write!(f, "omitting directory {}", dir.quote()),
Self::NotADirectory(dir) => {
write!(f, "failed to access {}: Not a directory", dir.quote())
}
}
}
}
Expand Down Expand Up @@ -583,6 +587,13 @@ fn standard(mut paths: Vec<String>, b: &Behavior) -> UResult<()> {
}
}
}
if b.target_dir.is_some() {
let p = to_create.unwrap();

if !p.exists() || !p.is_dir() {
return Err(InstallError::NotADirectory(p.to_path_buf()).into());
}
}
}

if sources.len() > 1 || is_potential_directory_path(&target) {
Expand Down
24 changes: 24 additions & 0 deletions tests/by-util/test_install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1566,3 +1566,27 @@ fn test_install_compare_option() {
.code_is(1)
.stderr_contains("Options --compare and --strip are mutually exclusive");
}

#[test]
// Matches part of tests/install/basic-1
fn test_t_exist_dir() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;

let source1 = "file";
let target_dir = "sub4/";
let target_file = "sub4/file_exists";

at.touch(source1);
at.mkdir(target_dir);
at.touch(target_file);

scene
.ucmd()
.arg("-t")
.arg(target_file)
.arg("-Dv")
.arg(source1)
.fails()
.stderr_contains("failed to access 'sub4/file_exists': Not a directory");
}

0 comments on commit be82200

Please sign in to comment.