use std::path::PathBuf;
use crate::core::usage;
use crate::{cli::CliResult, core::context::Context};
use clap::{ArgAction, Args as ClapArgs};
use std::collections::HashSet;
#[derive(Debug, Clone, ClapArgs)]
#[command(about = "Stage changes in the current Git repository for commit preparation")]
pub struct Args {
#[arg(value_name = "PATH", num_args = 0.., trailing_var_arg = true)]
pub paths: Vec<PathBuf>,
#[arg(long = "path", value_name = "PATH", num_args = 1.., action = ArgAction::Append)]
pub more_paths: Option<Vec<PathBuf>>,
#[arg(long, short = 'A')]
pub all: bool,
#[arg(long)]
pub exclude_staged: bool,
#[arg(long)]
pub unstage: bool,
}
pub async fn run(ctx: &Context, args: Args) -> CliResult<()> {
let mut paths = args.paths;
if let Some(mut more) = args.more_paths {
paths.append(&mut more);
}
let mut seen = HashSet::new();
paths.retain(|p| seen.insert(p.clone()));
usage::stage::run(ctx, paths, args.all, args.exclude_staged, args.unstage)
}