提交 105255a2 authored 作者: Serhij S's avatar Serhij S

cargo args

上级 30b62297
...@@ -1038,6 +1038,7 @@ dependencies = [ ...@@ -1038,6 +1038,7 @@ dependencies = [
"roboplc", "roboplc",
"serde", "serde",
"serde_json", "serde_json",
"shlex",
"toml", "toml",
"ureq", "ureq",
"ureq_multipart", "ureq_multipart",
...@@ -1270,6 +1271,12 @@ dependencies = [ ...@@ -1270,6 +1271,12 @@ dependencies = [
"lazy_static", "lazy_static",
] ]
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "signal-hook" name = "signal-hook"
version = "0.3.17" version = "0.3.17"
......
...@@ -20,6 +20,7 @@ prettytable-rs = "0.10.0" ...@@ -20,6 +20,7 @@ prettytable-rs = "0.10.0"
roboplc = "0.1.27" roboplc = "0.1.27"
serde = { version = "1.0.197", features = ["derive"] } serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.115" serde_json = "1.0.115"
shlex = "1.3.0"
toml = "0.8.12" toml = "0.8.12"
ureq = { version = "2.9.6", features = ["json", "native-certs", "native-tls"] } ureq = { version = "2.9.6", features = ["json", "native-certs", "native-tls"] }
ureq_multipart = "1.1.1" ureq_multipart = "1.1.1"
......
...@@ -89,6 +89,8 @@ struct FlashCommand { ...@@ -89,6 +89,8 @@ struct FlashCommand {
cargo: Option<PathBuf>, cargo: Option<PathBuf>,
#[clap(long, help = "Override remote cargo target")] #[clap(long, help = "Override remote cargo target")]
cargo_target: Option<String>, cargo_target: Option<String>,
#[clap(long, help = "Extra cargo arguments")]
cargo_args: Option<String>,
#[clap(long, help = "Do not compile a Rust project, use a file instead")] #[clap(long, help = "Do not compile a Rust project, use a file instead")]
file: Option<PathBuf>, file: Option<PathBuf>,
#[clap(long, help = "Force flash (automatically put remote in CONFIG mode)")] #[clap(long, help = "Force flash (automatically put remote in CONFIG mode)")]
...@@ -266,21 +268,38 @@ fn flash( ...@@ -266,21 +268,38 @@ fn flash(
let Some(name) = find_name_and_chdir() else { let Some(name) = find_name_and_chdir() else {
return Err("Could not find Cargo.toml/binary name".into()); return Err("Could not find Cargo.toml/binary name".into());
}; };
let mut cargo_args = None;
if let Some(args) = opts.cargo_args {
cargo_args.replace(args);
} else if let Some(ref value) = robo_toml {
cargo_args = value
.get("build")
.and_then(|v| v.get("cargo-args"))
.map(|v| v.as_str().unwrap().to_owned());
}
let binary_name = Path::new("target") let binary_name = Path::new("target")
.join(&cargo_target) .join(&cargo_target)
.join("release") .join("release")
.join(name); .join(name);
let mut args: Vec<String> = vec![
"build".into(),
"--release".into(),
"--target".into(),
cargo_target.clone(),
];
if let Some(extra) = cargo_args {
args.extend(shlex::split(&extra).expect("Invalid cargo args"));
}
println!("Remote: {}", url.yellow()); println!("Remote: {}", url.yellow());
println!("Cargo: {}", cargo.display().to_string().yellow()); println!(
"Cargo command line: {} {}",
cargo.display().to_string().yellow(),
args.join(" ").yellow()
);
println!("Cargo target: {}", cargo_target.yellow()); println!("Cargo target: {}", cargo_target.yellow());
println!("Binary: {}", binary_name.display().to_string().yellow()); println!("Binary: {}", binary_name.display().to_string().yellow());
println!("Compiling..."); println!("Compiling...");
let result = std::process::Command::new(cargo) let result = std::process::Command::new(cargo).args(args).status()?;
.arg("build")
.arg("--release")
.arg("--target")
.arg(cargo_target)
.status()?;
if !result.success() { if !result.success() {
return Err("Compilation failed".into()); return Err("Compilation failed".into());
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论