diff --git a/src/config.rs b/src/config.rs index 84309af..7c04ee7 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,5 +2,5 @@ use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize)] pub struct DockerBuildConfig { - + image: Option, } \ No newline at end of file diff --git a/src/docker_util.rs b/src/docker_util.rs index a8bd684..92a3b79 100644 --- a/src/docker_util.rs +++ b/src/docker_util.rs @@ -82,9 +82,10 @@ impl DockerCmd { }; let mut sub_cmd = String::with_capacity(1024); - if let Some(mirror) = self.mirror { - sub_cmd.push_str(&make_cmd(&mirror)); + if let Some(mirror) = &self.mirror { + sub_cmd.push_str(&make_cmd(mirror)); sub_cmd.push_str("\n"); + success!("Build crates mirror: {}", mirror); } let mut builder_cmd = builder_name; @@ -101,16 +102,22 @@ impl DockerCmd { } cmds_iter.for_each(|c| { sub_build_cmd.push(c.clone()); }); - sub_cmd.push_str(&builder_cmd); - sub_cmd.push(' '); - sub_cmd.push_str(&sub_build_cmd.iter().map(|arg| escape_arg(arg)).collect::>().join(" ")); + let mut final_sub_cmd = String::with_capacity(512); + final_sub_cmd.push_str(&builder_cmd); + final_sub_cmd.push(' '); + final_sub_cmd.push_str(&sub_build_cmd.iter().map(|arg| escape_arg(arg)).collect::>().join(" ")); + sub_cmd.push_str(&final_sub_cmd); fs::write(DCOLER_TEMP_CMD, &sub_cmd).ok(); cmd.args(vec!["bash", DCOLER_TEMP_CMD]); success!("Docker cmd exec: {:?}", cmd); - success!("Docker temp sub cmd: {}", sub_cmd); + if let Some(mirror) = &self.mirror { + success!("Build crates mirror: {}", mirror); + } + success!("Build command: {}", final_sub_cmd); + debugging!("Docker temp sub cmd: {}", sub_cmd); let r = util_cmd::run_command_and_wait(&mut cmd).map_err(|e| e.into()); fs::remove_file(DCOLER_TEMP_CMD).ok(); r diff --git a/src/main.rs b/src/main.rs index 8a0ff5d..75cc24d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,17 +7,18 @@ mod docker_util; use std::fs; use std::env; -use std::path::Path; +use std::path::{Path, PathBuf}; use rust_util::util_file; pub use docker_util::DockerCmd; -const DOCKER_REGISTRY: &str = "~/.dockerbuild/register/rust_1_47"; const MIRROR_USTC: &str = "git://mirrors.ustc.edu.cn/crates.io-index"; fn main() { information!("dockerbuild v0.1"); - let docker_registry_path_buf = util_file::get_absolute_path(DOCKER_REGISTRY).expect("Cannot find $HOME !"); + let docker_image = "rust:1.47"; + + let docker_registry_path_buf =get_resolved_docker_registry(docker_image).expect("Cannot find $HOME !"); let docker_registry = docker_registry_path_buf.to_str().expect("Cannot find $HOME !!"); let p = Path::new(&docker_registry); @@ -30,9 +31,28 @@ fn main() { let args_iter = env::args().skip(1); let args = args_iter.map(|a| a.to_owned()).collect::>(); - let mut docker_cmd = DockerCmd::new("rust:1.47"); + let mut docker_cmd = DockerCmd::new(docker_image); docker_cmd.add_volumn(docker_registry, "/usr/local/cargo/registry") .mirror(MIRROR_USTC); docker_cmd.exec(&args).unwrap(); } +fn get_resolved_docker_registry(image: &str) -> Option { + util_file::get_absolute_path(&get_docker_registry(image)) +} + +fn get_docker_registry(image: &str) -> String { + let mut registry = "~/.dockerbuild/register/".to_owned(); + for c in image.chars() { + match c { + 'a'..='z' | 'A'..='Z' | '0'..='9' => registry.push(c), + _ => registry.push('_'), + } + } + registry +} + +#[test] +fn test_get_docker_registry() { + assert_eq!("~/.dockerbuild/register/rust_1_47", get_docker_registry("rust:1.47")); +}