mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-05 02:55:31 +00:00
refactor: improve execute_decompression legibility
This commit is contained in:
parent
f65444d2fb
commit
3258cbef5b
@ -298,31 +298,30 @@ fn execute_decompression(
|
|||||||
is_output_dir_explicit: bool,
|
is_output_dir_explicit: bool,
|
||||||
) -> crate::Result<ControlFlow<(), usize>> {
|
) -> crate::Result<ControlFlow<(), usize>> {
|
||||||
if is_output_dir_explicit {
|
if is_output_dir_explicit {
|
||||||
return unpack(unpack_fn, output_dir, question_policy);
|
unpack(unpack_fn, output_dir, question_policy)
|
||||||
} else {
|
} else {
|
||||||
return smart_unpack(
|
smart_unpack(unpack_fn, output_dir, output_file_path, question_policy)
|
||||||
unpack_fn,
|
|
||||||
output_dir,
|
|
||||||
output_file_path,
|
|
||||||
question_policy,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Unpacks an archive creating the output directory, this function will create the output_dir
|
||||||
|
/// directory or replace it if it already exists. The `output_dir` needs to be empty
|
||||||
|
/// - If `output_dir` does not exist OR is a empty directory, it will unpack there
|
||||||
|
/// - If `output_dir` exist OR is a directory not empty, the user will be asked what to do
|
||||||
fn unpack(
|
fn unpack(
|
||||||
unpack_fn: impl FnOnce(&Path) -> crate::Result<usize>,
|
unpack_fn: impl FnOnce(&Path) -> crate::Result<usize>,
|
||||||
output_dir: &Path,
|
output_dir: &Path,
|
||||||
question_policy: QuestionPolicy,
|
question_policy: QuestionPolicy,
|
||||||
) -> crate::Result<ControlFlow<(), usize>> {
|
) -> crate::Result<ControlFlow<(), usize>> {
|
||||||
let has_files = output_dir.exists() && output_dir.read_dir().map(|dir| dir.count() > 0).unwrap_or(false);
|
let is_valid_output_dir = !output_dir.exists() || (output_dir.is_dir() && output_dir.read_dir()?.count() > 0);
|
||||||
|
|
||||||
let output_dir_cleaned = if has_files {
|
let output_dir_cleaned = if is_valid_output_dir {
|
||||||
|
output_dir.to_owned()
|
||||||
|
} else {
|
||||||
match utils::resolve_path_conflict(&output_dir, question_policy)? {
|
match utils::resolve_path_conflict(&output_dir, question_policy)? {
|
||||||
Some(path) => path,
|
Some(path) => path,
|
||||||
None => return Ok(ControlFlow::Break(())),
|
None => return Ok(ControlFlow::Break(())),
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
output_dir.to_owned()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if !output_dir_cleaned.exists() {
|
if !output_dir_cleaned.exists() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user