stax 0.96.3

Fast stacked Git branches and PRs
Documentation
use std::path::PathBuf;
use std::process::{Command, ExitCode};

fn stax_binary() -> PathBuf {
    std::env::current_exe()
        .ok()
        .and_then(|path| {
            path.parent()
                .map(|parent| parent.join(stax_executable_name()))
        })
        .filter(|path| path.is_file())
        .unwrap_or_else(|| PathBuf::from(stax_executable_name()))
}

fn stax_executable_name() -> String {
    format!("stax{}", std::env::consts::EXE_SUFFIX)
}

#[cfg(unix)]
fn main() -> ExitCode {
    use std::os::unix::process::CommandExt;

    let error = Command::new(stax_binary())
        .args(std::env::args_os().skip(1))
        .exec();
    eprintln!("Error: failed to launch stax: {error}");
    ExitCode::FAILURE
}

#[cfg(not(unix))]
fn main() -> ExitCode {
    match Command::new(stax_binary())
        .args(std::env::args_os().skip(1))
        .status()
    {
        Ok(status) => ExitCode::from(status.code().unwrap_or(1) as u8),
        Err(error) => {
            eprintln!("Error: failed to launch stax: {error}");
            ExitCode::FAILURE
        }
    }
}