diff --git a/Cargo.lock b/Cargo.lock index 28fbb4a..ada392e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -643,7 +643,7 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gitclaw" -version = "0.1.0" +version = "0.3.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index bdc7e8d..420e0e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gitclaw" -version = "0.1.0" +version = "0.3.0" edition = "2021" [dependencies] diff --git a/src/cli.rs b/src/cli.rs index 30b3584..ea0e18c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -2,52 +2,84 @@ use clap::{Parser, Subcommand}; use clap_complete::Shell; #[derive(Parser)] -#[command(name = "gitclaw", about = "Install software from GitHub releases")] +#[command( + name = "gitclaw", + about = "Install software from GitHub releases", + version +)] pub struct Cli { #[command(subcommand)] pub command: Commands, - #[arg(short, long, global = true, env = "GITHUB_TOKEN")] + #[arg( + short, + long, + global = true, + env = "GITHUB_TOKEN", + help = "GitHub token for authentication (optional)" + )] pub token: Option, } #[derive(Subcommand)] pub enum Commands { + /// Install packages from GitHub releases + #[command(about = "Install packages from GitHub releases")] Install { - #[arg(num_args = 1..)] + #[arg(num_args = 1.., help = "Package(s) to install (format: owner/repo or owner/repo@version)")] packages: Vec, - #[arg(short, long)] + #[arg(short, long, help = "Force reinstall even if already installed")] force: bool, - #[arg(long)] + #[arg(long, help = "Show what would be installed without downloading")] dry_run: bool, - #[arg(long)] + #[arg(long, help = "Verify checksums after download")] verify: bool, }, + /// List installed packages + #[command(about = "List installed packages")] List { - #[arg(short, long)] + #[arg(short, long, help = "Show detailed information")] verbose: bool, }, + /// Update installed packages + #[command(about = "Update installed packages")] Update { + #[arg(help = "Package to update (omit to update all)")] package: Option, }, + /// Uninstall a package + #[command(about = "Uninstall a package")] Uninstall { + #[arg(help = "Package to uninstall (format: owner/repo)")] package: String, }, + /// Search for releases on GitHub + #[command(about = "Search for releases on GitHub")] Search { + #[arg(help = "Repository to search (format: owner/repo)")] package: String, - #[arg(short, long, default_value = "10")] + #[arg( + short, + long, + default_value = "10", + help = "Maximum number of releases to show" + )] limit: usize, }, + /// Generate shell completions + #[command(about = "Generate shell completions")] Completions { - #[arg(value_enum)] + #[arg(value_enum, help = "Shell to generate completions for")] shell: Shell, }, /// Show platform information + #[command(about = "Show platform information")] Platform {}, /// Update gitclaw itself + #[command(about = "Update gitclaw to the latest version")] SelfUpdate { /// Only check for updates, don't install - #[arg(long)] + #[arg(long, help = "Only check for updates, don't install")] check: bool, }, }