Skip to content

Commit a10928d

Browse files
committed
refactor(rm): extract recursive removal logic with pre-fetched metadata
Refactored `remove_dir_recursive_impl` to separate metadata retrieval from the core recursive removal logic by introducing `remove_dir_recursive_with_metadata`. This improves code readability and avoids redundant metadata calls during recursion.
1 parent b22a782 commit a10928d

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/uu/rm/src/rm.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -706,11 +706,27 @@ fn remove_dir_recursive_impl(
706706
progress_bar: Option<&ProgressBar>,
707707
parent_dev_id: Option<u64>,
708708
) -> bool {
709-
let metadata = match path.symlink_metadata() {
710-
Ok(metadata) => metadata,
711-
Err(e) => return show_removal_error(e, path),
712-
};
709+
path.symlink_metadata().map_or_else(
710+
|e| show_removal_error(e, path),
711+
|metadata| {
712+
remove_dir_recursive_with_metadata(
713+
path,
714+
options,
715+
progress_bar,
716+
parent_dev_id,
717+
&metadata,
718+
)
719+
},
720+
)
721+
}
713722

723+
fn remove_dir_recursive_with_metadata(
724+
path: &Path,
725+
options: &Options,
726+
progress_bar: Option<&ProgressBar>,
727+
parent_dev_id: Option<u64>,
728+
metadata: &Metadata,
729+
) -> bool {
714730
// Base case 1: this is a file or a symbolic link.
715731
//
716732
// The symbolic link case is important because it could be a link to
@@ -731,11 +747,11 @@ fn remove_dir_recursive_impl(
731747
}
732748

733749
// Base case 3: this is a directory on a different device
734-
if should_skip_different_device(parent_dev_id, &metadata, options, path) {
750+
if should_skip_different_device(parent_dev_id, metadata, options, path) {
735751
return true;
736752
}
737753

738-
let next_parent_dev_id = compute_next_parent_dev_id(options, &metadata);
754+
let next_parent_dev_id = compute_next_parent_dev_id(options, metadata);
739755

740756
// Use secure traversal on Linux for all recursive directory removals
741757
#[cfg(target_os = "linux")]

0 commit comments

Comments
 (0)