chroot: refactor undocumented features
@@ -28,6 +28,7 @@ mod options {
pub const GROUP: &str = "group";
pub const GROUPS: &str = "groups";
pub const USERSPEC: &str = "userspec";
+ pub const COMMAND: &str = "command";
}
pub fn uumain(args: impl uucore::Args) -> i32 {
@@ -39,7 +40,12 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
.version(crate_version!())
.about(ABOUT)
.usage(SYNTAX)
- .arg(Arg::with_name(options::NEWROOT).hidden(true).required(true))
+ .arg(
+ Arg::with_name(options::NEWROOT)
+ .hidden(true)
+ .required(true)
+ .index(1),
+ )
.arg(
Arg::with_name(options::USER)
.short("u")
@@ -71,6 +77,12 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
)
.value_name("USER:GROUP"),
)
+ .arg(
+ Arg::with_name(options::COMMAND)
+ .hidden(true)
+ .multiple(true)
+ .index(2),
+ )
.get_matches_from(args);
let default_shell: &'static str = "/bin/sh";
@@ -94,7 +106,14 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
);
}
- let command: Vec<&str> = match matches.args.len() {
+ let commands = match matches.values_of(options::COMMAND) {
+ Some(v) => v.collect(),
+ None => vec![],
+ };
+
+ // TODO: refactor the args and command matching
+ // See: https://github.com/uutils/coreutils/pull/2365#discussion_r647849967
+ let command: Vec<&str> = match commands.len() {
1 => {
let shell: &str = match user_shell {
Err(_) => default_shell,
@@ -102,14 +121,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
};
vec![shell, default_option]
}
- _ => {
- let mut vector: Vec<&str> = Vec::new();
- for (&k, v) in matches.args.iter() {
- vector.push(k);
- vector.push(v.vals[0].to_str().unwrap());
- }
- vector
- }
+ _ => commands,
};
set_context(newroot, &matches);
