use eyre::Result;
use super::driver::{self, Action, DriverOpts};
use crate::config::{Config, Settings};
use crate::system;
#[derive(Debug, clap::Args)]
#[clap(visible_alias = "up", verbatim_doc_comment, after_long_help = AFTER_LONG_HELP)]
pub struct SystemUpgrade {
#[clap(value_name = "PACKAGE")]
packages: Vec<String>,
#[clap(long, short, value_parser = ["apt", "brew", "dnf", "pacman"])]
manager: Option<String>,
#[clap(long, short = 'n')]
dry_run: bool,
#[clap(long, short)]
yes: bool,
}
impl SystemUpgrade {
pub async fn run(self) -> Result<()> {
Settings::get().ensure_experimental("mise system")?;
let mgrs = if self.packages.is_empty() {
let config = Config::get().await?;
system::packages_from_config(&config)
} else {
system::packages_from_specs(&self.packages)?
};
let opts = DriverOpts {
manager: self.manager,
explicit: !self.packages.is_empty(),
dry_run: self.dry_run,
update: false,
yes: self.yes,
};
driver::run(mgrs, Action::Upgrade, &opts).await
}
}
static AFTER_LONG_HELP: &str = color_print::cstr!(
r#"<bold><underline>Examples:</underline></bold>
$ <bold>mise system upgrade</bold>
$ <bold>mise system upgrade brew:postgresql@17</bold>
$ <bold>mise system upgrade --manager apt --yes</bold>
$ <bold>mise system upgrade --dry-run</bold>
"#
);