From: Ian Jackson Date: Mon, 7 Jun 2021 00:13:35 +0000 (+0100) Subject: prefs bugfix: Only expect non-option argummnts for main arg parsing X-Git-Tag: otter-0.7.0~56 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ecf7dc9452f696729d641663f84a1da24c558110;p=otter.git prefs bugfix: Only expect non-option argummnts for main arg parsing Signed-off-by: Ian Jackson --- diff --git a/cli/otter.rs b/cli/otter.rs index 846a2d6e..19692860 100644 --- a/cli/otter.rs +++ b/cli/otter.rs @@ -108,16 +108,19 @@ fn main() { ssh_proxy_command: Option, } - let apmaker: ApMaker = &|rma|{ + fn apmaker_gen<'a>(rma: &'a mut RawMainArgs, want_args: bool) + -> ArgumentParser<'a> { use argparse::*; let mut ap = ArgumentParser::new(); ap.stop_on_first_argument(true); ap.silence_double_dash(true); - ap.refer(&mut rma.subcommand).required() - .add_argument("SUBCOMMAND", Store, "subcommand"); - ap.refer(&mut rma.subargs) - .add_argument("...", Collect, "subcommand options/arguments"); + if want_args { + ap.refer(&mut rma.subcommand).required() + .add_argument("SUBCOMMAND", Store, "subcommand"); + ap.refer(&mut rma.subargs) + .add_argument("...", Collect, "subcommand options/arguments"); + } let mut account = ap.refer(&mut rma.account); account.metavar("ACCOUNT") @@ -224,7 +227,9 @@ fn main() { "directory for table and game specs"); ap - }; + } + + let apmaker: ApMaker = &|a| apmaker_gen(a, true); let ap_completer = |RawMainArgs { account, nick, timezone, @@ -375,7 +380,7 @@ fn main() { let mut redo: RawMainArgs = default(); let mut rapc = RawArgParserContext::new(&args); - let mut ap = apmaker(&mut redo); + let mut ap = apmaker_gen(&mut redo, false); for (k, v) in &data.options { let context = || format!( @@ -402,8 +407,12 @@ fn main() { })); } + drop(ap); + let mut ap = apmaker_gen(&mut redo, true); + rapc.run(&mut ap, args.clone(), Some(extra_help), None); drop(ap); + parsed = redo; Ok(()) })()