External commands

[?]
Nov 28, 2020, 4:55 PM
RJMQSZER3DDPF7ANVKDPMR3KZZ7DKM5ASAOVPBQBAPDLJNL6BJ5AC

Dependencies

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

Change contents

  • replacement in pijul/src/main.rs at line 177
    [3.88177][3.88177:88349]()
    let opts: Opts = Opts::parse();
    if let Err(e) = run(opts).await {
    writeln!(std::io::stderr(), "Error: {}", e).unwrap_or(());
    std::process::exit(1);
    [3.88177]
    [3.88349]
    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);
    }
    } else if let Err((cmd, e)) = external_command() {
    writeln!(
    std::io::stderr(),
    "Error while trying to run {:?}: {}",
    cmd,
    e
    )
    .unwrap_or(());
  • edit in pijul/src/main.rs at line 192
    [2.27]
    [3.88355]
    }
    fn external_command() -> Result<(), (String, std::io::Error)> {
    let mut cmd = String::new();
    let mut args = Vec::new();
    for arg in std::env::args().skip(1) {
    if cmd.is_empty() {
    cmd.push_str("pijul-");
    cmd.push_str(&arg)
    } else {
    args.push(arg)
    }
    }
    if let Err(e) = run_external_command(&cmd, &args) {
    Err((cmd, e))
    } else {
    Ok(())
    }
    }
    #[cfg(unix)]
    fn run_external_command(cmd: &str, args: &[String]) -> Result<(), std::io::Error> {
    use std::os::unix::process::CommandExt;
    Err(std::process::Command::new(cmd).args(args).exec())
    }
    #[cfg(windows)]
    fn run_external_command(cmd: &str, args: &[String]) -> Result<(), std::io::Error> {
    let mut spawned = std::process::Command::new(cmd).args(args).spawn()?;
    let status = spawned.wait()?;
    std::process::exit(status.code().unwrap_or(1))