diff --git a/src/cli.rs b/src/cli.rs index 35c65bf2..13c8833c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -363,12 +363,71 @@ pub struct ComposeArgs { #[derive(Subcommand)] pub enum ComposeSubcommands { - /// Compose a new tree - Tree { target: String }, - /// Compose a container - Container { target: String }, - /// Compose a bootable image - Bootable { target: String }, + /// Process a treefile and commit to OSTree repository + Tree { + /// Path to treefile + #[arg(long)] + treefile: Option, + /// Output path + #[arg(long)] + output: Option, + /// Comma-separated list of packages + #[arg(long)] + packages: Option, + /// Target directory or repository + target: Option, + }, + /// Install packages into a target path + Install { + /// Output path for installation + #[arg(long)] + output: String, + /// Packages to install + packages: Vec, + }, + /// Perform final postprocessing on an installation root + Postprocess { + /// Target path to postprocess + target: String, + }, + /// Commit a target path to an OSTree repository + Commit { + /// Target path to commit + target: String, + /// Repository path + #[arg(long)] + repo: Option, + }, + /// Download packages guaranteed to depsolve + Extensions { + /// Base tree reference + base: String, + /// Output directory + #[arg(long)] + output: Option, + }, + /// Generate a reproducible container image + Image { + /// Path to treefile + #[arg(long)] + treefile: Option, + /// Output path for image + #[arg(long)] + output: Option, + /// Target directory + target: Option, + }, + /// Generate a root filesystem tree from a treefile + Rootfs { + /// Path to treefile + #[arg(long)] + treefile: Option, + /// Output path for rootfs + #[arg(long)] + output: Option, + /// Target directory + target: Option, + }, } #[derive(Args)] @@ -382,9 +441,15 @@ pub enum DbSubcommands { /// List packages List, /// Show package info - Info { package: String }, + Info { + /// Package name to get info for + package: String + }, /// Search packages - Search { query: String }, + Search { + /// Search query + query: String + }, } #[derive(Args)] diff --git a/src/main.rs b/src/main.rs index 20ad3b30..596c4fb0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -138,17 +138,106 @@ async fn main() { let args_vec = vec!["transaction".to_string()]; commands::transactions::TransactionCommand::new().execute(&args_vec) }, - cli::Commands::Compose(_args) => { - let args_vec = vec!["compose".to_string()]; - commands::advanced::ComposeCommand::new().execute(&args_vec) + cli::Commands::Compose(args) => { + match &args.subcommand { + cli::ComposeSubcommands::Tree { treefile, output, packages, target } => { + let mut args_vec = vec!["tree".to_string()]; + if let Some(ref tf) = treefile { + args_vec.extend_from_slice(&["--treefile".to_string(), tf.clone()]); + } + if let Some(ref out) = output { + args_vec.extend_from_slice(&["--output".to_string(), out.clone()]); + } + if let Some(ref pkgs) = packages { + args_vec.extend_from_slice(&["--packages".to_string(), pkgs.clone()]); + } + if let Some(ref tgt) = target { + args_vec.push(tgt.clone()); + } + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Install { output, packages } => { + let mut args_vec = vec!["install".to_string(), "--output".to_string(), output.clone()]; + args_vec.extend(packages.clone()); + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Postprocess { target } => { + let args_vec = vec!["postprocess".to_string(), target.clone()]; + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Commit { target, repo } => { + let mut args_vec = vec!["commit".to_string(), target.clone()]; + if let Some(ref r) = repo { + args_vec.extend_from_slice(&["--repo".to_string(), r.clone()]); + } + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Extensions { base, output } => { + let mut args_vec = vec!["extensions".to_string(), base.clone()]; + if let Some(ref out) = output { + args_vec.extend_from_slice(&["--output".to_string(), out.clone()]); + } + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Image { treefile, output, target } => { + let mut args_vec = vec!["image".to_string()]; + if let Some(ref tf) = treefile { + args_vec.extend_from_slice(&["--treefile".to_string(), tf.clone()]); + } + if let Some(ref out) = output { + args_vec.extend_from_slice(&["--output".to_string(), out.clone()]); + } + if let Some(ref tgt) = target { + args_vec.push(tgt.clone()); + } + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + cli::ComposeSubcommands::Rootfs { treefile, output, target } => { + let mut args_vec = vec!["rootfs".to_string()]; + if let Some(ref tf) = treefile { + args_vec.extend_from_slice(&["--treefile".to_string(), tf.clone()]); + } + if let Some(ref out) = output { + args_vec.extend_from_slice(&["--output".to_string(), out.clone()]); + } + if let Some(ref tgt) = target { + args_vec.push(tgt.clone()); + } + commands::advanced::ComposeCommand::new().execute(&args_vec) + }, + } }, - cli::Commands::Db(_args) => { - let args_vec = vec!["db".to_string()]; - commands::advanced::DbCommand::new().execute(&args_vec) + cli::Commands::Db(args) => { + match &args.subcommand { + cli::DbSubcommands::List => { + let args_vec = vec!["list".to_string()]; + commands::advanced::DbCommand::new().execute(&args_vec) + }, + cli::DbSubcommands::Info { package } => { + let args_vec = vec!["info".to_string(), package.clone()]; + commands::advanced::DbCommand::new().execute(&args_vec) + }, + cli::DbSubcommands::Search { query } => { + let args_vec = vec!["search".to_string(), query.clone()]; + commands::advanced::DbCommand::new().execute(&args_vec) + }, + } }, - cli::Commands::Override(_args) => { - let args_vec = vec!["override".to_string()]; - commands::advanced::OverrideCommand::new().execute(&args_vec) + cli::Commands::Override(args) => { + match &args.subcommand { + cli::OverrideSubcommands::Add { package } => { + let args_vec = vec!["add".to_string(), package.clone()]; + commands::advanced::OverrideCommand::new().execute(&args_vec) + }, + cli::OverrideSubcommands::Remove { package } => { + let args_vec = vec!["remove".to_string(), package.clone()]; + commands::advanced::OverrideCommand::new().execute(&args_vec) + }, + cli::OverrideSubcommands::List => { + let args_vec = vec!["list".to_string()]; + commands::advanced::OverrideCommand::new().execute(&args_vec) + }, + } }, cli::Commands::Reset(_args) => { let mut args_vec = Vec::new();