starting to compartmentalise
parent
744125fd95
commit
90011992c1
@ -0,0 +1,69 @@
|
|||||||
|
use clap::ArgMatches;
|
||||||
|
use crate::{crash, repository, workspace};
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for pkg in packages {
|
||||||
|
if !repos.contains(&pkg) {
|
||||||
|
crash(format!("Package {} not found in repos in mlc.toml", pkg), 3);
|
||||||
|
} else {
|
||||||
|
repository::build(pkg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if matches
|
||||||
|
.subcommand_matches("build")
|
||||||
|
.unwrap()
|
||||||
|
.is_present("all")
|
||||||
|
{
|
||||||
|
for pkg in repos {
|
||||||
|
repository::build(pkg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if matches
|
||||||
|
.subcommand_matches("build")
|
||||||
|
.unwrap()
|
||||||
|
.is_present("regen")
|
||||||
|
{
|
||||||
|
repository::generate();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
pub fn config() {
|
||||||
|
if !Path::exists("mlc.toml".as_ref()) {
|
||||||
|
create_config();
|
||||||
|
}
|
||||||
|
let editor = env::var("EDITOR").unwrap_or_else(|_| "nano".to_string());
|
||||||
|
Command::new(editor)
|
||||||
|
.arg("mlc.toml")
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
use std::process::Command;
|
||||||
|
use crate::{crash, info, workspace};
|
||||||
|
|
||||||
|
pub fn reinit() {
|
||||||
|
let config = workspace::read_cfg();
|
||||||
|
let out = Command::new("bash")
|
||||||
|
.args(&["-c", "ls -A"])
|
||||||
|
.output()
|
||||||
|
.unwrap()
|
||||||
|
.stdout;
|
||||||
|
let dirs_to_s = String::from_utf8_lossy(&*out);
|
||||||
|
let mut dirs = dirs_to_s.lines().collect::<Vec<&str>>();
|
||||||
|
|
||||||
|
let name = config.name.unwrap();
|
||||||
|
|
||||||
|
dirs.retain(|x| *x != "mlc.toml");
|
||||||
|
dirs.retain(|x| *x != ".git");
|
||||||
|
if config.mode == "repository" {
|
||||||
|
dirs.retain(|x| *x != "out");
|
||||||
|
dirs.retain(|x| *x != name);
|
||||||
|
}
|
||||||
|
|
||||||
|
info("Removing all repo directories to reinitialise".to_string());
|
||||||
|
|
||||||
|
Command::new("rm")
|
||||||
|
.args(&["-rf", &dirs.join(" ")])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
if config.mode == "workspace" {
|
||||||
|
for r in config.repo {
|
||||||
|
info(format!("Cloning (workspace mode): {}", r));
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["clone", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
} else if config.mode == "repository" {
|
||||||
|
for r in config.repo {
|
||||||
|
info(format!("Cloning (repository mode): {}", r));
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["clone", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
crash("Invalid mode in mlc.toml".to_string(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() {
|
||||||
|
let config = workspace::read_cfg();
|
||||||
|
if config.mode == "workspace" {
|
||||||
|
for r in config.repo {
|
||||||
|
info(format!("Cloning (workspace mode): {}", r));
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["clone", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
} else if config.mode == "repository" {
|
||||||
|
for r in config.repo {
|
||||||
|
info(format!("Cloning (repository mode): {}", r));
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["clone", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
crash("Invalid mode in mlc.toml".to_string(), 1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
use clap::ArgMatches;
|
||||||
|
|
||||||
|
mod init;
|
||||||
|
mod build;
|
||||||
|
mod pull;
|
||||||
|
mod config;
|
||||||
|
|
||||||
|
pub fn reinit() {
|
||||||
|
init::reinit();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn init() {
|
||||||
|
init::init();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build(matches: &ArgMatches) {
|
||||||
|
build::build(matches);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pull(matches: &ArgMatches) {
|
||||||
|
pull::pull(matches);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn config() {
|
||||||
|
config::config();
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::process::Command;
|
||||||
|
use clap::ArgMatches;
|
||||||
|
use crate::{info, workspace};
|
||||||
|
|
||||||
|
pub fn pull(matches: &ArgMatches) {
|
||||||
|
let packages: Vec<String> = matches
|
||||||
|
.subcommand_matches("pull")
|
||||||
|
.unwrap()
|
||||||
|
.values_of_lossy("package(s)")
|
||||||
|
.unwrap_or_default();
|
||||||
|
let config = workspace::read_cfg();
|
||||||
|
let cdir = env::current_dir().unwrap();
|
||||||
|
if packages.is_empty() {
|
||||||
|
for r in config.repo {
|
||||||
|
info(format!("Entering working directory: {}", r));
|
||||||
|
let dir = format!(
|
||||||
|
"{}/{}",
|
||||||
|
env::current_dir().unwrap().display(),
|
||||||
|
r.split('/').collect::<Vec<&str>>().last().unwrap()
|
||||||
|
);
|
||||||
|
env::set_current_dir(dir).unwrap();
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["pull", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
env::set_current_dir(&cdir).unwrap();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for r in packages {
|
||||||
|
info(format!("Entering working directory: {}", r));
|
||||||
|
let dir = format!(
|
||||||
|
"{}/{}",
|
||||||
|
env::current_dir().unwrap().display(),
|
||||||
|
r.split('/').collect::<Vec<&str>>().last().unwrap()
|
||||||
|
);
|
||||||
|
env::set_current_dir(dir).unwrap();
|
||||||
|
Command::new("git")
|
||||||
|
.args(&["pull", &r])
|
||||||
|
.spawn()
|
||||||
|
.unwrap()
|
||||||
|
.wait()
|
||||||
|
.unwrap();
|
||||||
|
env::set_current_dir(&cdir).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue