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

86 lines
2.0 KiB
Rust

3 years ago
use crate::repository::generate;
use crate::{crash, info, repository, workspace};
3 years ago
use clap::ArgMatches;
pub fn build(matches: &ArgMatches) {
let config = workspace::read_cfg();
let mut packages: Vec<String> = matches
.subcommand_matches("build")
.unwrap()
.values_of_lossy("package(s)")
.unwrap_or_default();
let exclude: Vec<String> = matches
.subcommand_matches("build")
.unwrap()
.values_of_lossy("exclude")
.unwrap_or_default();
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 matches
.subcommand_matches("build")
.unwrap()
.is_present("exclude")
{
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 matches
.subcommand_matches("build")
.unwrap()
.is_present("all")
{
for pkg in repos {
let code = repository::build(&pkg);
if code != 0 {
errored.push(pkg);
}
}
3 years ago
generate();
}
if matches
.subcommand_matches("build")
.unwrap()
.is_present("regen")
{
repository::generate();
}
if !errored.is_empty() {
3 years ago
info(format!(
"The following packages build jobs returned a non-zero exit code: {}",
errored.join(" ")
))
}
3 years ago
}