From 77d999d33ae230d42365d643b808f94291823b0b Mon Sep 17 00:00:00 2001 From: Talison Fabio <54823205+talis-fb@users.noreply.github.com> Date: Sat, 22 Mar 2025 20:22:01 -0300 Subject: [PATCH] feat: use resolve_path instead clear_path in smart_unpack --- src/commands/decompress.rs | 16 ++++++---------- src/utils/fs.rs | 2 +- src/utils/mod.rs | 4 ++-- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/commands/decompress.rs b/src/commands/decompress.rs index 6d2efee..3b9f248 100644 --- a/src/commands/decompress.rs +++ b/src/commands/decompress.rs @@ -14,11 +14,7 @@ use crate::{ Extension, }, utils::{ - self, - io::lock_and_flush_output_stdio, - is_path_stdin, - logger::{info, info_accessible}, - nice_directory_display, user_wants_to_continue, + self, io::lock_and_flush_output_stdio, is_path_stdin, logger::{info, info_accessible}, nice_directory_display, user_wants_to_continue }, QuestionAction, QuestionPolicy, BUFFER_CAPACITY, }; @@ -309,7 +305,7 @@ fn smart_unpack( let root_contains_only_one_element = fs::read_dir(temp_dir_path)?.count() == 1; - let (previous_path, new_path) = if root_contains_only_one_element { + let (previous_path, mut new_path) = if root_contains_only_one_element { // Only one file in the root directory, so we can just move it to the output directory let file = fs::read_dir(temp_dir_path)?.next().expect("item exists")?; let file_path = file.path(); @@ -323,10 +319,10 @@ fn smart_unpack( (temp_dir_path.to_owned(), output_file_path.to_owned()) }; - // Before moving, need to check if a file with the same name already exists - if !utils::clear_path(&new_path, question_policy)? { - return Ok(ControlFlow::Break(())); - } + new_path = match utils::resolve_path(&new_path, question_policy)? { + Some(path) => path, + None => return Ok(ControlFlow::Break(())), + }; // Rename the temporary directory to the archive name, which is output_file_path fs::rename(&previous_path, &new_path)?; diff --git a/src/utils/fs.rs b/src/utils/fs.rs index d7309fa..f1be647 100644 --- a/src/utils/fs.rs +++ b/src/utils/fs.rs @@ -8,7 +8,7 @@ use std::{ use fs_err as fs; -use super::user_wants_to_overwrite; +use super::{question::FileConflitOperation, user_wants_to_overwrite}; use crate::{ extension::Extension, utils::{logger::info_accessible, EscapedPathDisplay}, diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 5f97746..a334bac 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -18,10 +18,10 @@ pub use self::{ EscapedPathDisplay, }, fs::{ - cd_into_same_dir_as, clear_path, create_dir_if_non_existent, is_path_stdin, remove_file_or_dir, + cd_into_same_dir_as, resolve_path, create_dir_if_non_existent, is_path_stdin, remove_file_or_dir, try_infer_extension, rename_for_available_filename }, - question::{ask_to_create_file, user_wants_to_continue, user_wants_to_overwrite, QuestionAction, QuestionPolicy}, + question::{ask_to_create_file, user_wants_to_continue, user_wants_to_overwrite, FileConflitOperation, QuestionAction, QuestionPolicy}, utf8::{get_invalid_utf8_paths, is_invalid_utf8}, };