You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
use clap::Parser;
|
|
use std::path::PathBuf;
|
|
|
|
/// A fictional versioning CLI
|
|
#[derive(Debug, Parser)]
|
|
#[clap(name = "cargo-vcs")]
|
|
#[clap(about = "Version control helper for Cargo", long_about = None)]
|
|
pub struct Cli {
|
|
#[clap(subcommand)]
|
|
pub command: Commands,
|
|
/// Path to workspace folder, defaults to CWD
|
|
#[clap(short = 'w')]
|
|
pub workspace: Option<PathBuf>,
|
|
}
|
|
|
|
#[derive(Debug, Parser)]
|
|
pub enum Commands {
|
|
/// Show workspace status
|
|
Status {
|
|
/// Show verbose status information
|
|
#[clap(short = 'v')]
|
|
verbose: bool,
|
|
},
|
|
/// Set or save profiles
|
|
#[clap(subcommand)]
|
|
Profile(ProfileCommand),
|
|
/// Checkout specific repo reference (branch, commit etc.)
|
|
Checkout {
|
|
/// Reference name
|
|
reference: String,
|
|
/// Project list to apply checkout to, defaults to all
|
|
#[clap(short = 'p')]
|
|
projects: Option<Vec<String>>,
|
|
},
|
|
}
|
|
|
|
#[derive(Debug, Parser)]
|
|
pub enum ProfileCommand {
|
|
/// Save the current workspace VCS state to Cargo_vcs.toml under given profile name
|
|
#[clap(arg_required_else_help = true)]
|
|
Save { profile: String },
|
|
/// Switch workspace to given profile
|
|
#[clap(arg_required_else_help = true)]
|
|
Set { profile: String },
|
|
/// Lists all saved profiles
|
|
List,
|
|
}
|