Compare commits

...

2 commits

Author SHA1 Message Date
327d03b066
chore: tag 0.1.6
Some checks failed
Rust / build (push) Has been cancelled
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a97ffc982bfd9915e92103f895b42466a6a6964
2026-03-03 23:49:39 +03:00
44be9e1c1f
eh: streamline multicall command handler
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I5da79ddb79286dbc06f2ae0101b6ad086a6a6964
2026-03-03 23:49:35 +03:00
3 changed files with 31 additions and 62 deletions

6
Cargo.lock generated
View file

@ -101,7 +101,7 @@ dependencies = [
[[package]]
name = "eh"
version = "0.1.5"
version = "0.1.6"
dependencies = [
"clap",
"dialoguer",
@ -116,7 +116,7 @@ dependencies = [
[[package]]
name = "eh-log"
version = "0.1.5"
version = "0.1.6"
dependencies = [
"yansi",
]
@ -421,7 +421,7 @@ checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
[[package]]
name = "xtask"
version = "0.1.5"
version = "0.1.6"
dependencies = [
"clap",
"clap_complete",

View file

@ -10,7 +10,7 @@ edition = "2024"
license = "MPL-2.0"
readme = true
rust-version = "1.91.0"
version = "0.1.5"
version = "0.1.6"
[workspace.dependencies]
clap = { default-features = false, features = [ "std", "help", "derive" ], version = "4.5.56" }

View file

@ -1,7 +1,6 @@
use std::{env, path::Path};
use eh::{Cli, Command, CommandFactory, Parser};
use error::Result;
use yansi::Paint;
mod commands;
@ -26,11 +25,30 @@ fn main() {
}
}
// Design partially taken from Stash
fn handle_command(command: &str, args: &[String]) -> error::Result<i32> {
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!(),
}
}
fn dispatch_multicall(
app_name: &str,
args: std::env::Args,
) -> Option<Result<i32>> {
) -> Option<error::Result<i32>> {
let rest: Vec<String> = args.collect();
let subcommand = match app_name {
@ -61,31 +79,10 @@ fn dispatch_multicall(
return Some(Ok(0));
}
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!(),
})
Some(handle_command(subcommand, &rest))
}
fn run_app() -> Result<i32> {
fn run_app() -> error::Result<i32> {
let mut args = env::args();
let bin = args.next().unwrap_or_else(|| "eh".to_string());
let app_name = Path::new(&bin)
@ -100,42 +97,14 @@ fn run_app() -> Result<i32> {
let cli = Cli::parse();
let hash_extractor = util::RegexHashExtractor;
let fixer = util::DefaultNixFileFixer;
let classifier = util::DefaultNixErrorClassifier;
match cli.command {
Some(Command::Run { args }) => {
commands::handle_nix_command(
"run",
&args,
&hash_extractor,
&fixer,
&classifier,
)
},
Some(Command::Run { args }) => handle_command("run", &args),
Some(Command::Shell { args }) => {
commands::handle_nix_command(
"shell",
&args,
&hash_extractor,
&fixer,
&classifier,
)
},
Some(Command::Shell { args }) => handle_command("shell", &args),
Some(Command::Build { args }) => {
commands::handle_nix_command(
"build",
&args,
&hash_extractor,
&fixer,
&classifier,
)
},
Some(Command::Build { args }) => handle_command("build", &args),
Some(Command::Update { args }) => commands::update::handle_update(&args),
Some(Command::Update { args }) => handle_command("update", &args),
None => {
Cli::command().print_help()?;