supgit 0.2.0

A simple Git CLI wrapper for common Git operations
use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(
    name = "supgit",
    about = "Blazing fast wrapper for Git with simplified workflows",
    version,
    propagate_version = true
)]
pub struct Cli {
    #[arg(long, global = true)]
    pub explain: bool,

    #[command(subcommand)]
    pub command: Option<SupgitCommand>,
}

#[derive(Subcommand)]
pub enum SupgitCommand {
    Init,
    Stage {
        #[arg(value_name = "PATH")]
        targets: Vec<String>,
        #[arg(long)]
        all: bool,
        #[arg(long)]
        tracked: bool,
    },
    Unstage {
        #[arg(value_name = "PATH")]
        targets: Vec<String>,
        #[arg(long)]
        all: bool,
    },
    Status {
        #[arg(long)]
        short: bool,
    },
    Commit {
        #[arg(short, long, value_name = "MSG")]
        message: Option<String>,
        #[arg(long)]
        all: bool,
        #[arg(long)]
        staged: bool,
        #[arg(long)]
        unstaged: bool,
        #[arg(long)]
        push: bool,
        #[arg(long)]
        amend: bool,
        #[arg(long)]
        no_verify: bool,
    },
    Log {
        #[arg(long)]
        short: bool,
    },
    Diff {
        path: Option<String>,
        #[arg(long)]
        staged: bool,
    },
    Reset {
        #[arg(long)]
        all: bool,
        #[arg(long)]
        staged: bool,
        #[arg(long)]
        unstaged: bool,
        #[arg(long)]
        tracked: bool,
        #[arg(long)]
        untracked: bool,
    },
    Branch {
        #[arg(short, long)]
        create: Option<String>,
        #[arg(short, long)]
        delete: Option<String>,
    },
    Push {
        remote: Option<String>,
        branch: Option<String>,
    },
    Pull {
        remote: Option<String>,
        branch: Option<String>,
    },
    Sync {
        remote: Option<String>,
        branch: Option<String>,
    },
    Clone {
        #[arg(value_name = "URL")]
        url: String,
        #[arg(value_name = "DIR")]
        directory: Option<String>,
    },
    Update {
        #[arg(long, value_name = "VERSION")]
        target_version: Option<String>,
    },
}