use native external subcommand support instead of hand-rolled one
[?]
Nov 30, 2020, 9:46 AM
SNZ3OAMCPUGFYON5SZHQQQK46ZZMVMJECJYEUCMG657UVLY2PNBQCDependencies
- [2]
BQDE4VH6Fixing the "empty subcommand" case - [3]
NV6OSWDHFixing external subcommands - [4]
WXAFKN6JDo not call an external subcommand when the parsing of an existing subcommand fails - [5]
SFY4U6XEremove redundant conditional compilation - [6]
GURIBVW6Fixing the pager - [7]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting). - [8]
RJMQSZERExternal commands - [*]
L4JXJHWXpijul/*: reorganize imports and remove extern crate
Change contents
- edit in pijul/src/main.rs at line 6[10.577][4.84279]
use std::ffi::OsString; - edit in pijul/src/main.rs at line 107
#[clap(external_subcommand)]ExternalSubcommand(Vec<OsString>), - replacement in pijul/src/main.rs at line 183[4.88177]→[4.0:519](∅→∅),[4.519]→[4.190:200](∅→∅),[4.190]→[4.190:200](∅→∅),[4.419]→[4.88349:88355](∅→∅),[4.88349]→[4.88349:88355](∅→∅),[4.88355]→[4.0:27](∅→∅),[4.27]→[4.420:422](∅→∅)
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(());}}std::process::exit(0);}let opts = Opts::parse(); - replacement in pijul/src/main.rs at line 186[4.423]→[4.520:586](∅→∅),[4.586]→[4.487:551](∅→∅),[4.487]→[4.487:551](∅→∅),[4.551]→[4.587:642](∅→∅),[4.642]→[4.551:621](∅→∅),[4.551]→[4.551:621](∅→∅),[4.621]→[3.0:231](∅→∅),[3.231]→[4.792:854](∅→∅),[4.792]→[4.792:854](∅→∅),[4.854]→[4.621:748](∅→∅),[4.621]→[4.621:748](∅→∅),[4.748]→[2.0:56](∅→∅),[2.56]→[4.748:826](∅→∅),[4.748]→[4.748:826](∅→∅)
fn external_command() -> Result<bool, (String, std::io::Error)> {let mut cmd = String::new();let mut args = Vec::new();use clap::IntoApp;let app = Opts::into_app();for arg in std::env::args().skip(1) {if cmd.is_empty() {if arg == "help"|| arg.starts_with("--")|| app.get_subcommands().any(|sub| sub.get_name() == arg || sub.get_all_aliases().any(|al| al == arg)){return Ok(false);}cmd.push_str("pijul-");cmd.push_str(&arg)} else {args.push(arg)}}if cmd.is_empty() {return Ok(false);}if let Err(e) = run_external_command(&cmd, &args) {Err((cmd, e))if let Err(e) = run(opts).await {writeln!(std::io::stderr(), "Error: {}", e).unwrap_or(());std::process::exit(1); - replacement in pijul/src/main.rs at line 190
Ok(true)std::process::exit(0); - replacement in pijul/src/main.rs at line 195
fn run_external_command(cmd: &str, args: &[String]) -> Result<(), std::io::Error> {fn run_external_command(mut command: Vec<OsString>) -> Result<(), std::io::Error> {let args = command.split_off(1);let cmd = &command[0]; - replacement in pijul/src/main.rs at line 204
fn run_external_command(cmd: &str, args: &[String]) -> Result<(), std::io::Error> {fn run_external_command(mut command: Vec<OsString>) -> Result<(), std::io::Error> {let args = command.split_off(1);let cmd = &command[0]; - edit in pijul/src/main.rs at line 241
SubCommand::ExternalSubcommand(command) => Ok(run_external_command(command)?),