diff --git a/Cargo.lock b/Cargo.lock index 44027cb..77f50a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -101,7 +101,7 @@ dependencies = [ [[package]] name = "eh" -version = "0.1.6" +version = "0.1.5" dependencies = [ "clap", "dialoguer", @@ -116,7 +116,7 @@ dependencies = [ [[package]] name = "eh-log" -version = "0.1.6" +version = "0.1.5" dependencies = [ "yansi", ] @@ -421,7 +421,7 @@ checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "xtask" -version = "0.1.6" +version = "0.1.5" dependencies = [ "clap", "clap_complete", diff --git a/Cargo.toml b/Cargo.toml index 788596a..f627886 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ edition = "2024" license = "MPL-2.0" readme = true rust-version = "1.91.0" -version = "0.1.6" +version = "0.1.5" [workspace.dependencies] clap = { default-features = false, features = [ "std", "help", "derive" ], version = "4.5.56" } diff --git a/eh/src/main.rs b/eh/src/main.rs index 074952f..890e474 100644 --- a/eh/src/main.rs +++ b/eh/src/main.rs @@ -1,6 +1,7 @@ use std::{env, path::Path}; use eh::{Cli, Command, CommandFactory, Parser}; +use error::Result; use yansi::Paint; mod commands; @@ -25,30 +26,11 @@ fn main() { } } -fn handle_command(command: &str, args: &[String]) -> error::Result { - let hash_extractor = util::RegexHashExtractor; - let fixer = util::DefaultNixFileFixer; - let classifier = util::DefaultNixErrorClassifier; - - match command { - "update" => commands::update::handle_update(args), - "run" | "shell" | "build" => { - commands::handle_nix_command( - command, - args, - &hash_extractor, - &fixer, - &classifier, - ) - }, - _ => unreachable!(), - } -} - +// Design partially taken from Stash fn dispatch_multicall( app_name: &str, args: std::env::Args, -) -> Option> { +) -> Option> { let rest: Vec = args.collect(); let subcommand = match app_name { @@ -79,10 +61,31 @@ fn dispatch_multicall( return Some(Ok(0)); } - Some(handle_command(subcommand, &rest)) + if subcommand == "update" { + return Some(commands::update::handle_update(&rest)); + } + + let hash_extractor = util::RegexHashExtractor; + let fixer = util::DefaultNixFileFixer; + let classifier = util::DefaultNixErrorClassifier; + + Some(match subcommand { + "run" | "shell" | "build" => { + commands::handle_nix_command( + subcommand, + &rest, + &hash_extractor, + &fixer, + &classifier, + ) + }, + // subcommand is assigned from the match on app_name above; + // only "run"/"shell"/"build" are possible values. + _ => unreachable!(), + }) } -fn run_app() -> error::Result { +fn run_app() -> Result { let mut args = env::args(); let bin = args.next().unwrap_or_else(|| "eh".to_string()); let app_name = Path::new(&bin) @@ -97,14 +100,42 @@ fn run_app() -> error::Result { let cli = Cli::parse(); + let hash_extractor = util::RegexHashExtractor; + let fixer = util::DefaultNixFileFixer; + let classifier = util::DefaultNixErrorClassifier; + match cli.command { - Some(Command::Run { args }) => handle_command("run", &args), + Some(Command::Run { args }) => { + commands::handle_nix_command( + "run", + &args, + &hash_extractor, + &fixer, + &classifier, + ) + }, - Some(Command::Shell { args }) => handle_command("shell", &args), + Some(Command::Shell { args }) => { + commands::handle_nix_command( + "shell", + &args, + &hash_extractor, + &fixer, + &classifier, + ) + }, - Some(Command::Build { args }) => handle_command("build", &args), + Some(Command::Build { args }) => { + commands::handle_nix_command( + "build", + &args, + &hash_extractor, + &fixer, + &classifier, + ) + }, - Some(Command::Update { args }) => handle_command("update", &args), + Some(Command::Update { args }) => commands::update::handle_update(&args), None => { Cli::command().print_help()?;