mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 19:47:45 +00:00
Merge pull request #1834 from jhscheer/patch-3
rm: add an additional flag -R for --recursive
This commit is contained in:
commit
6a109a5069
2 changed files with 11 additions and 5 deletions
|
@ -48,6 +48,7 @@ static OPT_PRESERVE_ROOT: &str = "preserve-root";
|
||||||
static OPT_PROMPT: &str = "prompt";
|
static OPT_PROMPT: &str = "prompt";
|
||||||
static OPT_PROMPT_MORE: &str = "prompt-more";
|
static OPT_PROMPT_MORE: &str = "prompt-more";
|
||||||
static OPT_RECURSIVE: &str = "recursive";
|
static OPT_RECURSIVE: &str = "recursive";
|
||||||
|
static OPT_RECURSIVE_R: &str = "recursive_R";
|
||||||
static OPT_VERBOSE: &str = "verbose";
|
static OPT_VERBOSE: &str = "verbose";
|
||||||
|
|
||||||
static ARG_FILES: &str = "files";
|
static ARG_FILES: &str = "files";
|
||||||
|
@ -58,7 +59,7 @@ fn get_usage() -> String {
|
||||||
|
|
||||||
fn get_long_usage() -> String {
|
fn get_long_usage() -> String {
|
||||||
String::from(
|
String::from(
|
||||||
"By default, rm does not remove directories. Use the --recursive (-r)
|
"By default, rm does not remove directories. Use the --recursive (-r or -R)
|
||||||
option to remove each listed directory, too, along with all of its contents
|
option to remove each listed directory, too, along with all of its contents
|
||||||
|
|
||||||
To remove a file whose name starts with a '-', for example '-foo',
|
To remove a file whose name starts with a '-', for example '-foo',
|
||||||
|
@ -82,7 +83,6 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
|
||||||
.about(ABOUT)
|
.about(ABOUT)
|
||||||
.usage(&usage[..])
|
.usage(&usage[..])
|
||||||
.after_help(&long_usage[..])
|
.after_help(&long_usage[..])
|
||||||
// TODO: make getopts support -R in addition to -r
|
|
||||||
|
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name(OPT_FORCE)
|
Arg::with_name(OPT_FORCE)
|
||||||
|
@ -128,6 +128,12 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
|
||||||
.long(OPT_RECURSIVE)
|
.long(OPT_RECURSIVE)
|
||||||
.help("remove directories and their contents recursively")
|
.help("remove directories and their contents recursively")
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
// To mimic GNU's behavior we also want the '-R' flag. However, using clap's
|
||||||
|
// alias method 'visible_alias("R")' would result in a long '--R' flag.
|
||||||
|
Arg::with_name(OPT_RECURSIVE_R).short("R")
|
||||||
|
.help("Equivalent to -r")
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name(OPT_DIR)
|
Arg::with_name(OPT_DIR)
|
||||||
.short("d")
|
.short("d")
|
||||||
|
@ -182,7 +188,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
|
||||||
},
|
},
|
||||||
one_fs: matches.is_present(OPT_ONE_FILE_SYSTEM),
|
one_fs: matches.is_present(OPT_ONE_FILE_SYSTEM),
|
||||||
preserve_root: !matches.is_present(OPT_NO_PRESERVE_ROOT),
|
preserve_root: !matches.is_present(OPT_NO_PRESERVE_ROOT),
|
||||||
recursive: matches.is_present(OPT_RECURSIVE),
|
recursive: matches.is_present(OPT_RECURSIVE) || matches.is_present(OPT_RECURSIVE_R),
|
||||||
dir: matches.is_present(OPT_DIR),
|
dir: matches.is_present(OPT_DIR),
|
||||||
verbose: matches.is_present(OPT_VERBOSE),
|
verbose: matches.is_present(OPT_VERBOSE),
|
||||||
};
|
};
|
||||||
|
@ -283,7 +289,7 @@ fn handle_dir(path: &Path, options: &Options) -> bool {
|
||||||
had_err = true;
|
had_err = true;
|
||||||
} else {
|
} else {
|
||||||
show_error!(
|
show_error!(
|
||||||
"could not remove directory '{}' (did you mean to pass '-r'?)",
|
"could not remove directory '{}' (did you mean to pass '-r' or '-R'?)",
|
||||||
path.display()
|
path.display()
|
||||||
);
|
);
|
||||||
had_err = true;
|
had_err = true;
|
||||||
|
|
|
@ -148,7 +148,7 @@ fn test_rm_errors() {
|
||||||
// rm: error: could not remove directory 'test_rm_errors_directory' (did you mean to pass '-r'?)
|
// rm: error: could not remove directory 'test_rm_errors_directory' (did you mean to pass '-r'?)
|
||||||
ucmd.arg(dir).fails().stderr_is(
|
ucmd.arg(dir).fails().stderr_is(
|
||||||
"rm: error: could not remove directory 'test_rm_errors_directory' (did you mean \
|
"rm: error: could not remove directory 'test_rm_errors_directory' (did you mean \
|
||||||
to pass '-r'?)\n",
|
to pass '-r' or '-R'?)\n",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue