diff --git a/examples/repository/mlc.toml b/examples/repository/mlc.toml index 3e995b2..2a921f3 100644 --- a/examples/repository/mlc.toml +++ b/examples/repository/mlc.toml @@ -14,11 +14,11 @@ on_gen = true [mode.workspace] [repositories] -name = [ - "1::crystal-keyring", - "2::pfetch!", +repos = [ + "crs:malachite/development", + "pkg:pfetch!", ] -urls = [ - "https://github.com/crystal-linux/%repo%", - "https://github.com/crystal-linux/pkgbuild.%repo%", -] \ No newline at end of file + +[repositories.urls] +crs = "https://github.com/crystal-linux/%repo%" +pkg = "https://github.com/crystal-linux/pkgbuild.%repo%" diff --git a/src/internal/structs.rs b/src/internal/structs.rs index ce9f916..1dad2b4 100755 --- a/src/internal/structs.rs +++ b/src/internal/structs.rs @@ -1,4 +1,5 @@ use serde_derive::Deserialize; +use std::collections::HashMap; //// Config structs #[derive(Debug, Deserialize)] @@ -47,7 +48,7 @@ pub struct ConfigModeWorkspace {} #[derive(Debug, Deserialize)] pub struct ConfigRepositories { pub name: Vec, - pub urls: Vec, + pub urls: HashMap, } #[derive(Debug, Deserialize)] @@ -66,7 +67,7 @@ pub struct Repo { #[derive(Debug)] pub struct SplitRepo { - pub indx: usize, + pub id: String, pub name: String, } diff --git a/src/workspace/read.rs b/src/workspace/read.rs index aac2a2c..4ffaed5 100755 --- a/src/workspace/read.rs +++ b/src/workspace/read.rs @@ -42,21 +42,21 @@ pub fn read_cfg(verbose: bool) -> Config { for x in config.repositories.name { log!(verbose, "Parsing repo: {:?}", x); // Splits the repo name and index inta a SplitRepo struct - let split: Vec<&str> = x.split("::").collect(); + let split: Vec<&str> = x.split(':').collect(); let split_struct = SplitRepo { - indx: split[0].parse().unwrap(), + id: split[0].parse().unwrap(), name: split[1].parse().unwrap(), }; log!(verbose, "Split repo: {:?}", split_struct); // Parses all necessary values for expanding the repo to a Repo struct - let index = split_struct.indx; + let id = split_struct.id; // If a branch is defined, parse it - let branch = if split_struct.name.contains('@') { + let branch = if split_struct.name.contains('/') { log!(verbose, "Branch defined: {}", split_struct.name); Some( - split_struct.name.split('@').collect::>()[1] + split_struct.name.split('/').collect::>()[1] .to_string() .replace('!', ""), ) @@ -66,14 +66,22 @@ pub fn read_cfg(verbose: bool) -> Config { }; // Strip branch and priority info from the name, if present - let name = if split_struct.name.contains('@') { - split_struct.name.split('@').collect::>()[0].to_string() + let name = if split_struct.name.contains('/') { + split_struct.name.split('/').collect::>()[0].to_string() } else { split_struct.name.to_string().replace('!', "") }; // Substitutes the name into the url - let url = config.repositories.urls[index - 1].replace("%repo%", &name); + let urls = &config.repositories.urls; + let mut urls_vec = vec![]; + for (i, url) in urls { + if i == &id { + log!(verbose, "Substituting url: {:?}", url); + urls_vec.push(url); + } + } + let url = urls_vec[0].replace("%repo%", &name); // Counts instances of ! in the name, and totals a priority accordingly let priority = &split_struct.name.matches('!').count();