Also check status of cargo commands
Compilation errors show up in the exit status of cargo,
not as an Err.
Change-Id: I318c9a623eb57827beabe55c5c0492bd5fed9ba5
diff --git a/src/main.rs b/src/main.rs
index abd2bdf..1f0a521 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -102,7 +102,7 @@
}
-fn build_tests(verbose: bool, release: bool, test_target: &String) -> Result<()> {
+fn build_tests(verbose: bool, release: bool, test_target: &String) -> Result<bool> {
if verbose {
println!("# build tests phase 1");
}
@@ -118,14 +118,14 @@
args.push(test_target.as_str());
}
- Command::new("cargo").env("RUSTC", rust_c_path()?.to_str().unwrap())
+ let status = Command::new("cargo").env("RUSTC", rust_c_path()?.to_str().unwrap())
.env("CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_LINKER",
rust_linker_path()?.to_str().unwrap())
.args(args)
.status()
.chain_err(|| "Unable to run cargo test")?;
- Ok(())
+ Ok(status.success())
}
fn run_tests(verbose: bool,
@@ -133,7 +133,10 @@
test_target: &String,
params: &Vec<String>)
-> Result<()> {
- build_tests(verbose, release, test_target)?;
+
+ if !build_tests(verbose, release, test_target)? {
+ return Ok(());
+ }
if verbose {
println!("# build tests phase 2");
@@ -167,7 +170,7 @@
run_programs_on_target(&programs, verbose, false, ¶ms)
}
-fn build_binary(verbose: bool, release: bool) -> Result<()> {
+fn build_binary(verbose: bool, release: bool) -> Result<(bool)> {
if verbose {
println!("# build binary phase 1");
}
@@ -177,18 +180,21 @@
args.push("--release");
}
- Command::new("cargo").env("RUSTC", rust_c_path()?.to_str().unwrap())
+ let status = Command::new("cargo").env("RUSTC", rust_c_path()?.to_str().unwrap())
.env("CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_LINKER",
rust_linker_path()?.to_str().unwrap())
.args(args)
.status()
.chain_err(|| "Unable to run cargo build")?;
- Ok(())
+ Ok(status.success())
}
fn run_binary(verbose: bool, release: bool, launch: bool) -> Result<()> {
- build_binary(verbose, release)?;
+
+ if !build_binary(verbose, release)? {
+ return Ok(());
+ }
let mut args = vec!["build", "--target", "x86_64-unknown-fuchsia"];
if release {
@@ -284,8 +290,9 @@
}
if let Some(build_matches) = matches.subcommand_matches("build") {
- return build_binary(verbose, build_matches.is_present("release"))
- .chain_err(|| "building binary failed");
+ build_binary(verbose, build_matches.is_present("release"))
+ .chain_err(|| "building binary failed")?;
+ return Ok(());
}
if let Some(run_matches) = matches.subcommand_matches("run") {
@@ -297,10 +304,10 @@
if let Some(build_test_matches) = matches.subcommand_matches("build-tests") {
let test_target = build_test_matches.value_of("test").unwrap_or("").to_string();
- return build_tests(verbose,
- build_test_matches.is_present("release"),
- &test_target)
- .chain_err(|| "building tests failed");
+ build_tests(verbose,
+ build_test_matches.is_present("release"),
+ &test_target).chain_err(|| "building tests failed")?;
+ return Ok(());
}
if let Some(start_matches) = matches.subcommand_matches("start") {