You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
malachite/src/operations/build.rs

66 lines
1.5 KiB
Rust

use crate::repository::generate;
use crate::{crash, info, repository, workspace};
pub fn build(mut packages: Vec<String>, all: bool, exclude: Vec<String>, no_regen: bool) {
let all = if packages.is_empty() {
true
};
let config = workspace::read_cfg();
for pkg in &exclude {
packages.retain(|x| x != pkg);
}
if config.mode != "repository" {
crash("Cannot build packages in workspace mode".to_string(), 2);
}
let mut repos: Vec<String> = vec![];
for r in config.repo {
let split = r.split('/').collect::<Vec<&str>>();
let a = split.last().unwrap();
repos.push(a.parse().unwrap());
}
if exclude.is_empty() {
for ex in exclude {
repos.retain(|x| *x != ex);
}
}
let mut errored: Vec<String> = vec![];
for pkg in packages {
if !repos.contains(&pkg) {
crash(format!("Package {} not found in repos in mlc.toml", pkg), 3);
} else {
let code = repository::build(&pkg);
if code != 0 {
errored.push(pkg);
}
}
}
if all {
for pkg in repos {
let code = repository::build(&pkg);
if code != 0 {
errored.push(pkg);
}
}
generate();
}
if !no_regen {
repository::generate();
}
if !errored.is_empty() {
info(format!(
"The following packages build jobs returned a non-zero exit code: {}",
errored.join(" ")
))
}
}