Fix compose and advanced commands CLI integration
- Fix ComposeSubcommands enum to match actual implementation - Add proper subcommand handling for compose, db, and override commands - Update main.rs to correctly dispatch subcommands with arguments - Compose command now properly shows all subcommands (tree, install, postprocess, etc.) - Db command now properly shows all subcommands (list, info, search) - Override command now properly shows all subcommands (add, remove, list) - All advanced commands now work correctly with proper argument parsing - Fixes 'Not yet implemented' error for compose command - Commands now properly execute their intended functionality
This commit is contained in:
parent
3e40c891cc
commit
bcf7183107
2 changed files with 171 additions and 17 deletions
81
src/cli.rs
81
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<String>,
|
||||
/// Output path
|
||||
#[arg(long)]
|
||||
output: Option<String>,
|
||||
/// Comma-separated list of packages
|
||||
#[arg(long)]
|
||||
packages: Option<String>,
|
||||
/// Target directory or repository
|
||||
target: Option<String>,
|
||||
},
|
||||
/// Install packages into a target path
|
||||
Install {
|
||||
/// Output path for installation
|
||||
#[arg(long)]
|
||||
output: String,
|
||||
/// Packages to install
|
||||
packages: Vec<String>,
|
||||
},
|
||||
/// 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<String>,
|
||||
},
|
||||
/// Download packages guaranteed to depsolve
|
||||
Extensions {
|
||||
/// Base tree reference
|
||||
base: String,
|
||||
/// Output directory
|
||||
#[arg(long)]
|
||||
output: Option<String>,
|
||||
},
|
||||
/// Generate a reproducible container image
|
||||
Image {
|
||||
/// Path to treefile
|
||||
#[arg(long)]
|
||||
treefile: Option<String>,
|
||||
/// Output path for image
|
||||
#[arg(long)]
|
||||
output: Option<String>,
|
||||
/// Target directory
|
||||
target: Option<String>,
|
||||
},
|
||||
/// Generate a root filesystem tree from a treefile
|
||||
Rootfs {
|
||||
/// Path to treefile
|
||||
#[arg(long)]
|
||||
treefile: Option<String>,
|
||||
/// Output path for rootfs
|
||||
#[arg(long)]
|
||||
output: Option<String>,
|
||||
/// Target directory
|
||||
target: Option<String>,
|
||||
},
|
||||
}
|
||||
|
||||
#[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)]
|
||||
|
|
|
|||
101
src/main.rs
101
src/main.rs
|
|
@ -138,18 +138,107 @@ 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()];
|
||||
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::Commands::Db(_args) => {
|
||||
let args_vec = vec!["db".to_string()];
|
||||
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) => {
|
||||
match &args.subcommand {
|
||||
cli::DbSubcommands::List => {
|
||||
let args_vec = vec!["list".to_string()];
|
||||
commands::advanced::DbCommand::new().execute(&args_vec)
|
||||
},
|
||||
cli::Commands::Override(_args) => {
|
||||
let args_vec = vec!["override".to_string()];
|
||||
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) => {
|
||||
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();
|
||||
if _args.base { args_vec.push("--base".to_string()); }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue