memflowup 0.1.0-beta7

setup tool for the memflow physical memory introspection framework
use crate::database::Branch;
use crate::package::*;
use crate::Result;

pub fn install(
    to_install: &[String],
    system_wide: bool,
    dev: bool,
    reinstall: bool,
    from_source: bool,
    load_opts: PackageLoadOpts,
) -> Result<()> {
    update_index(system_wide)?;
    let packages = load_packages(system_wide, load_opts)?;

    let branch: Branch = dev.into();

    println!("using {} channel", branch.filename());

    let opts = PackageOpts {
        reinstall,
        system_wide,
        from_source,
        ..Default::default()
    };

    for install_name in to_install.iter() {
        let target = packages
            .iter()
            .filter(|p| p.supports_install_mode(branch, from_source))
            .filter(|&p| Package::supported_by_platform(p))
            .find(|p| p.name == install_name.as_ref());

        let mut failure = false;
        match target {
            Some(target) => {
                println!("Installing {}:", target.name);
                target.install(branch, &opts)?;
                println!();
            }
            None => {
                println!(
                    "Package '{}' was not found in '{}' channel.",
                    install_name,
                    branch.filename()
                );
                failure = true;
            }
        }

        if failure {
            println!("Some packages failed to install, try 'memflowup list' to see all available packages.");
        }
    }

    Ok(())
}