refactor: add fn escape_arg
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use std::fs;
|
||||
use std::process::Command;
|
||||
use rust_util::XResult;
|
||||
use rust_util::util_cmd;
|
||||
@@ -5,6 +6,8 @@ use crate::build_util;
|
||||
use crate::build_util::Builder;
|
||||
|
||||
const DOCKER_CMD: &str = "docker";
|
||||
const DCOLER_TEMP_CMD: &str = "temp_sub_cmd";
|
||||
const DOCKER_WORK_DIR: &str = "/usr/src/app";
|
||||
|
||||
// $ docker run --rm --user "$(id -u)":"$(id -g)" \
|
||||
// -v "$PWD":/usr/src/app -w /usr/src/app rust:1.47 \
|
||||
@@ -62,13 +65,12 @@ impl DockerCmd {
|
||||
self.docker_run_gid.unwrap_or_else(|| users::get_current_gid() as u32),
|
||||
));
|
||||
cmd.arg("-v");
|
||||
cmd.arg(&format!("{}:/usr/src/app", build_util::get_work_dir(&self.docker_current_dir)?));
|
||||
cmd.arg(&format!("{}:{}", build_util::get_work_dir(&self.docker_current_dir)?, DOCKER_WORK_DIR));
|
||||
for (outer_vol, docker_vol) in self.volumns {
|
||||
cmd.arg("-v");
|
||||
cmd.arg(&format!("{}:{}", outer_vol, docker_vol));
|
||||
}
|
||||
cmd.arg("-w");
|
||||
cmd.arg("/usr/src/app");
|
||||
cmd.args(vec!["-w", DOCKER_WORK_DIR]);
|
||||
cmd.arg(&self.docker_name);
|
||||
|
||||
let builder = Builder::from(&self.docker_current_dir)?;
|
||||
@@ -101,29 +103,33 @@ impl DockerCmd {
|
||||
|
||||
sub_cmd.push_str(&builder_cmd);
|
||||
sub_cmd.push(' ');
|
||||
sub_cmd.push_str(&sub_build_cmd.iter().map(|cmd| {
|
||||
let mut r = String::new();
|
||||
r.push('\'');
|
||||
for c in cmd.chars() {
|
||||
if c == '\'' {
|
||||
r.push('\\');
|
||||
}
|
||||
r.push(c);
|
||||
}
|
||||
r.push('\'');
|
||||
r
|
||||
}).collect::<Vec<_>>().join(" "));
|
||||
sub_cmd.push_str(&sub_build_cmd.iter().map(|arg| escape_arg(arg)).collect::<Vec<_>>().join(" "));
|
||||
|
||||
std::fs::write("temp_sub_cmd", &sub_cmd).ok();
|
||||
fs::write(DCOLER_TEMP_CMD, &sub_cmd).ok();
|
||||
|
||||
cmd.args(vec!["bash", "temp_sub_cmd"]);
|
||||
cmd.args(vec!["bash", DCOLER_TEMP_CMD]);
|
||||
|
||||
information!("Docker cmd exec: {:?}", cmd);
|
||||
information!("Docker temp sub cmd: {}", sub_cmd);
|
||||
util_cmd::run_command_and_wait(&mut cmd).map_err(|e| e.into())
|
||||
success!("Docker cmd exec: {:?}", cmd);
|
||||
success!("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
|
||||
}
|
||||
}
|
||||
|
||||
fn escape_arg(arg: &str) -> String {
|
||||
let mut r = String::new();
|
||||
r.push('\'');
|
||||
for c in arg.chars() {
|
||||
if c == '\'' {
|
||||
r.push('\\');
|
||||
}
|
||||
r.push(c);
|
||||
}
|
||||
r.push('\'');
|
||||
r
|
||||
}
|
||||
|
||||
fn make_cmd(mirror: &str) -> String {
|
||||
let mut s = String::new();
|
||||
s.push_str(&format!(r#"echo '[source.crates-io]
|
||||
|
||||
Reference in New Issue
Block a user