zoi-cli 1.24.4

Advanced Package Manager & Environment Orchestrator
Documentation
pub mod cli;
pub mod cmd;
pub mod pkg;
pub use zoi_project as project;
pub mod utils;

use anyhow::Result;

pub use zoi_core::cache;
pub use zoi_core::config;
pub use zoi_core::hash;
pub use zoi_core::lock;
pub use zoi_core::offline;
pub use zoi_core::pgp;
pub use zoi_core::pin;
pub use zoi_core::pkgdir;
pub use zoi_core::recorder;
pub use zoi_core::sysroot;
pub use zoi_core::types::{self, Scope};
pub use zoi_core::upgrade;
pub use zoi_hooks as hooks;
pub use zoi_lua as lua;
pub use zoi_purl as purl;
pub use zoi_resolver as resolve;
#[cfg(target_os = "linux")]
pub use zoi_sandbox as sandbox;
pub use zoi_telemetry as telemetry;

pub use pkg::local;
pub use pkg::mini_resolve;

#[derive(Debug, Clone, Default)]
pub struct SourceInstallOptions {
    pub repo: Option<String>,
    pub force: bool,
    pub all_optional: bool,
    pub yes: bool,
    pub scope_override: Option<Scope>,
    pub save: bool,
    pub build_type: Option<String>,
    pub dry_run: bool,
    pub build: bool,
    pub frozen: bool,
}

fn to_install_scope(scope: Scope) -> cli::InstallScope {
    match scope {
        Scope::User => cli::InstallScope::User,
        Scope::System => cli::InstallScope::System,
        Scope::Project => cli::InstallScope::Project,
    }
}

pub fn install_sources(sources: &[String], options: &SourceInstallOptions) -> Result<()> {
    let plugin_manager = if crate::pkg::utils::is_mini_mode() {
        None
    } else {
        let pm = pkg::plugin::PluginManager::new()?;
        let _ = pm.load_all(options.yes);
        Some(pm)
    };

    let pm_ptr = plugin_manager.as_ref();

    cmd::install::run(
        sources,
        options.repo.clone(),
        options.force,
        options.all_optional,
        options.yes,
        options.scope_override.map(to_install_scope),
        false,
        false,
        options.save,
        options.build_type.clone(),
        options.dry_run,
        pm_ptr,
        options.build,
        options.frozen,
        false,
        false,
        3,
        false,
        false,
        None,
    )
}

pub fn uninstall_package(package_name: &str, scope_override: Option<Scope>) -> Result<()> {
    zoi_uninstall::run(package_name, scope_override, false, false, false).map(|_| ())
}