Compare commits

..

No commits in common. "327d03b066736e006c19a6926060c1c3e4a3d111" and "4a57561d7b7b9efd85ebadeb31da00e6c40b97e6" have entirely different histories.

3 changed files with 62 additions and 31 deletions

6
Cargo.lock generated
View file

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

View file

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

View file

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