Do not call an external subcommand when the parsing of an existing subcommand fails

[?]
Nov 29, 2020, 12:13 PM
WXAFKN6JL3LRIRTTW2Q7UQIZBZSAHYIUVTPWKMK2GK2W3GZ44XHAC

Dependencies

  • [2] RJMQSZER External commands
  • [3] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [4] AN7IDX26 pijul: added ChangesNotFound error variant
  • [5] GURIBVW6 Fixing the pager
  • [6] YAJAXIV5 Unrecording changes atomically
  • [7] I52XSRUH Massive cleanup, and simplification

Change contents

  • replacement in pijul/src/main.rs at line 177
    [3.88177][2.0:190]()
    if let Ok(opts) = Opts::try_parse() {
    if let Err(e) = run(opts).await {
    writeln!(std::io::stderr(), "Error: {}", e).unwrap_or(());
    std::process::exit(1);
    [3.88177]
    [2.190]
    match external_command() {
    Ok(false) => {
    let opts = Opts::parse();
    if let Err(e) = run(opts).await {
    writeln!(std::io::stderr(), "Error: {}", e).unwrap_or(());
    std::process::exit(1);
    }
    }
    Ok(true) => (),
    Err((cmd, e)) => {
    writeln!(
    std::io::stderr(),
    "Error while trying to run {:?}: {}",
    cmd,
    e
    )
    .unwrap_or(());
  • edit in pijul/src/main.rs at line 195
    [2.200][2.200:419]()
    } else if let Err((cmd, e)) = external_command() {
    writeln!(
    std::io::stderr(),
    "Error while trying to run {:?}: {}",
    cmd,
    e
    )
    .unwrap_or(());
  • replacement in pijul/src/main.rs at line 199
    [2.423][2.423:487]()
    fn external_command() -> Result<(), (String, std::io::Error)> {
    [2.423]
    [2.487]
    fn external_command() -> Result<bool, (String, std::io::Error)> {
  • edit in pijul/src/main.rs at line 202
    [2.551]
    [2.551]
    use clap::IntoApp;
    let app = Opts::into_app();
  • edit in pijul/src/main.rs at line 206
    [2.621]
    [2.621]
    if app
    .get_subcommands()
    .any(|sub| sub.get_name() == arg || sub.get_all_aliases().any(|al| al == arg))
    {
    return Ok(false);
    }
  • replacement in pijul/src/main.rs at line 221
    [2.839][2.839:854]()
    Ok(())
    [2.839]
    [2.854]
    Ok(true)