use crate::deps;
use crate::error::*;
use crate::receipt;
use std::path::Path;
pub fn run(home: &Path, name: &str) -> Result<()> {
let mut r = receipt::require(home, name)?;
if r.active {
eprintln!("{} is already active", name);
return Ok(());
}
let def_path = crate::paths::definition_path(home, name, &r.current);
if let Ok(def) = crate::package_definition::parse_file(&def_path) {
let unsatisfied = deps::check_package_deps(home, &def)?;
if let Some(u) = unsatisfied.first() {
let status = if u.installed { "not active" } else { "not installed" };
bail!("cannot enable '{}': dependency '{}' is {}", name, u.name, status);
}
}
r.active = true;
receipt::write(home, name, &r)?;
eprintln!("enabled {}", name);
Ok(())
}