use super::{BWParams, ModConfig};
use crate::GlobalsFinal;
use anyhow::Result as AResult;
use clap::Args;
use std::path::PathBuf;
#[derive(Args)]
pub struct SubCmdArgs {
#[arg(value_name = "CHROOT")]
path: PathBuf,
#[arg(trailing_var_arg = true, num_args(0..))]
command: Vec<String>,
}
impl SubCmdArgs {
pub fn handle(&self, globals: GlobalsFinal) -> AResult<()> {
let sboxcfg = ModConfig::new(&globals)?;
let chroot = match globals.chroot(&self.path).verify(true) {
Ok(x) => x,
Err(msg) => anyhow::bail!(msg),
};
let command = if self.command.is_empty() {
sboxcfg.command.clone()
} else {
self.command.join(" ")
};
let tmpfs_size = sboxcfg.tmpfs_size;
let mounts = sboxcfg
.mountpaths()?
.map(|(x, y)| (x.clone(), y.clone()))
.collect();
let bwparams = BWParams {
chroot,
tmpfs_size,
command,
mounts,
};
bwparams.dispatch(&globals)?;
Ok(())
}
}