use anyhow::Result;
use clap::{Parser, ValueHint};
use crate::cmds::exec;
use crate::model;
#[derive(Parser, Clone, Debug)]
#[command(author, about, long_about)]
pub struct GitOptions {
#[arg(long, short, default_value = "*")]
trees: String,
#[arg(long, short = 'N', short_alias = 'n')]
dry_run: bool,
#[arg(long = "jobs", short = 'j', value_name = "JOBS")]
num_jobs: Option<usize>,
#[arg(short, long)]
quiet: bool,
#[arg(short, long, action = clap::ArgAction::Count)]
verbose: u8,
#[arg(default_value = "@*", value_hint=ValueHint::Other)]
query: String,
#[arg(
default_value = "status",
allow_hyphen_values = true,
trailing_var_arg = true
)]
command: Vec<String>,
}
impl From<GitOptions> for exec::ExecOptions {
fn from(git_options: GitOptions) -> Self {
exec::ExecOptions {
dry_run: git_options.dry_run,
num_jobs: git_options.num_jobs,
quiet: git_options.quiet,
verbose: git_options.verbose,
query: git_options.query,
command: {
let mut cmd = vec!["git".to_string()];
cmd.extend(git_options.command);
cmd
},
trees: git_options.trees,
}
}
}
pub fn main(app_context: &model::ApplicationContext, git_options: &mut GitOptions) -> Result<()> {
let mut exec_options: exec::ExecOptions = git_options.clone().into();
exec::main(app_context, &mut exec_options)
}