aboutsummaryrefslogtreecommitdiff
path: root/xtask
diff options
context:
space:
mode:
authordatdenkikniet <jcdra1@gmail.com>2023-04-15 23:22:00 +0200
committerdatdenkikniet <jcdra1@gmail.com>2023-04-16 13:08:46 +0200
commit9dc9f492639daace5222562c124846fb0d3cb154 (patch)
treefd8d6ed4720d4d790d865c838f045d6e696ae415 /xtask
parentdeeb3877f061fb71389ec7730c6c21e81e9e3050 (diff)
Use chdir() instead of unstable option, also confirm whenver a command succeeds because
why not
Diffstat (limited to 'xtask')
-rw-r--r--xtask/src/argument_parsing.rs2
-rw-r--r--xtask/src/cargo_commands.rs7
-rw-r--r--xtask/src/command.rs89
3 files changed, 63 insertions, 35 deletions
diff --git a/xtask/src/argument_parsing.rs b/xtask/src/argument_parsing.rs
index 6cae186..69275eb 100644
--- a/xtask/src/argument_parsing.rs
+++ b/xtask/src/argument_parsing.rs
@@ -326,7 +326,7 @@ impl UsageExamplesOpt {
let usage_examples: Vec<_> = std::fs::read_dir("./examples")?
.filter_map(Result::ok)
.filter(|p| p.metadata().ok().map(|p| p.is_dir()).unwrap_or(false))
- .filter_map(|p| p.file_name().as_os_str().to_str().map(ToString::to_string))
+ .filter_map(|p| p.file_name().to_str().map(ToString::to_string))
.collect();
let selected_examples: Option<Vec<String>> = self
diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs
index 2e30997..ec91eae 100644
--- a/xtask/src/cargo_commands.rs
+++ b/xtask/src/cargo_commands.rs
@@ -1,3 +1,5 @@
+use std::path::PathBuf;
+
use crate::{
argument_parsing::{Backends, BuildOrCheck, ExtraArguments, Globals, PackageOpt, TestMetadata},
command::{BuildMode, CargoCommand},
@@ -186,6 +188,7 @@ pub fn cargo_example<'c>(
target: backend.to_target(),
features,
mode: BuildMode::Release,
+ dir: Some(PathBuf::from("./rtic")),
},
};
(globals, command, false)
@@ -320,6 +323,7 @@ pub fn qemu_run_examples<'c>(
target,
features: features.clone(),
mode: BuildMode::Release,
+ dir: Some(PathBuf::from("./rtic")),
};
let cmd_qemu = CargoCommand::Qemu {
@@ -328,6 +332,7 @@ pub fn qemu_run_examples<'c>(
target,
features: features.clone(),
mode: BuildMode::Release,
+ dir: Some(PathBuf::from("./rtic")),
};
#[cfg(not(feature = "rayon"))]
@@ -363,6 +368,7 @@ pub fn build_and_check_size<'c>(
target,
features: features.clone(),
mode: BuildMode::Release,
+ dir: Some(PathBuf::from("./rtic")),
};
if let Err(err) = command_parser(globals, &cmd, false) {
error!("{err}");
@@ -375,6 +381,7 @@ pub fn build_and_check_size<'c>(
features: features.clone(),
mode: BuildMode::Release,
arguments: arguments.clone(),
+ dir: Some(PathBuf::from("./rtic")),
};
(globals, cmd, false)
});
diff --git a/xtask/src/command.rs b/xtask/src/command.rs
index 3596897..e06c89e 100644
--- a/xtask/src/command.rs
+++ b/xtask/src/command.rs
@@ -51,6 +51,7 @@ pub enum CargoCommand<'a> {
target: Target<'a>,
features: Option<String>,
mode: BuildMode,
+ dir: Option<PathBuf>,
},
ExampleBuild {
cargoarg: &'a Option<&'a str>,
@@ -58,6 +59,7 @@ pub enum CargoCommand<'a> {
target: Target<'a>,
features: Option<String>,
mode: BuildMode,
+ dir: Option<PathBuf>,
},
ExampleCheck {
cargoarg: &'a Option<&'a str>,
@@ -111,6 +113,7 @@ pub enum CargoCommand<'a> {
features: Option<String>,
mode: BuildMode,
arguments: Option<ExtraArguments>,
+ dir: Option<PathBuf>,
},
CheckInDir {
mode: BuildMode,
@@ -179,22 +182,32 @@ impl core::fmt::Display for CargoCommand<'_> {
target,
features,
mode,
- } => write!(
- f,
- "Run example {example} in QEMU {}",
- details(target, mode, features, cargoarg)
- ),
+ dir,
+ } => {
+ let details = details(target, mode, features, cargoarg);
+ if let Some(dir) = dir {
+ let dir = dir.to_str().unwrap_or("Not displayable");
+ write!(f, "Run example {example} in QEMU from {dir} {details}",)
+ } else {
+ write!(f, "Run example {example} in QEMU {details}",)
+ }
+ }
CargoCommand::ExampleBuild {
cargoarg,
example,
target,
features,
mode,
- } => write!(
- f,
- "Build example {example} {}",
- details(target, mode, features, cargoarg)
- ),
+ dir,
+ } => {
+ let details = details(target, mode, features, cargoarg);
+ if let Some(dir) = dir {
+ let dir = dir.to_str().unwrap_or("Not displayable");
+ write!(f, "Build example {example} in {dir} {details}")
+ } else {
+ write!(f, "Build example {example} {details}",)
+ }
+ }
CargoCommand::ExampleCheck {
cargoarg,
example,
@@ -221,7 +234,7 @@ impl core::fmt::Display for CargoCommand<'_> {
)
}
CargoCommand::BuildInDir { mode, dir } => {
- let dir = dir.as_os_str().to_str().unwrap_or("Not displayable");
+ let dir = dir.to_str().unwrap_or("Not displayable");
write!(f, "Build {dir} ({mode})")
}
CargoCommand::Check {
@@ -239,7 +252,7 @@ impl core::fmt::Display for CargoCommand<'_> {
)
}
CargoCommand::CheckInDir { mode, dir } => {
- let dir = dir.as_os_str().to_str().unwrap_or("Not displayable");
+ let dir = dir.to_str().unwrap_or("Not displayable");
write!(f, "Check {dir} ({mode})")
}
CargoCommand::Clippy {
@@ -315,12 +328,15 @@ impl core::fmt::Display for CargoCommand<'_> {
features,
mode,
arguments: _,
+ dir,
} => {
- write!(
- f,
- "Compute size of example {example} {}",
- details(target, mode, features, cargoarg)
- )
+ let details = details(target, mode, features, cargoarg);
+ if let Some(dir) = dir {
+ let dir = dir.to_str().unwrap_or("Not displayable");
+ write!(f, "Compute size of example {example} from {dir} {details}",)
+ } else {
+ write!(f, "Compute size of example {example} {details}")
+ }
}
}
}
@@ -328,9 +344,15 @@ impl core::fmt::Display for CargoCommand<'_> {
impl<'a> CargoCommand<'a> {
pub fn as_cmd_string(&self) -> String {
+ let cd = if let Some(Some(chdir)) = self.chdir().map(|p| p.to_str()) {
+ format!("cd {chdir} && ")
+ } else {
+ format!("")
+ };
+
let executable = self.executable();
let args = self.args().join(" ");
- format!("{executable} {args}")
+ format!("{cd}{executable} {args}")
}
fn command(&self) -> &'static str {
@@ -406,6 +428,8 @@ impl<'a> CargoCommand<'a> {
target,
features,
mode,
+ // Dir is exposed through chdir instead
+ dir: _,
} => {
let mut args = vec!["+nightly"];
@@ -413,10 +437,6 @@ impl<'a> CargoCommand<'a> {
args.extend_from_slice(&[cargoarg]);
}
- // We need to be in the `rtic` directory to pick up
- // the correct .cargo/config.toml file
- args.extend_from_slice(&["-Z", "unstable-options", "-C", "rtic"]);
-
args.extend_from_slice(&[
self.command(),
"--example",
@@ -588,16 +608,14 @@ impl<'a> CargoCommand<'a> {
target,
features,
mode,
+ // Dir is exposed through chdir instead
+ dir: _,
} => {
let mut args = vec!["+nightly"];
if let Some(cargoarg) = cargoarg {
args.extend_from_slice(&[cargoarg]);
}
- // We need to be in the `rtic` directory to pick up
- // the correct .cargo/config.toml file
- args.extend_from_slice(&["-Z", "unstable-options", "-C", "rtic"]);
-
args.extend_from_slice(&[
self.command(),
"--example",
@@ -648,16 +666,14 @@ impl<'a> CargoCommand<'a> {
features,
mode,
arguments,
+ // Dir is exposed through chdir instead
+ dir: _,
} => {
let mut args = vec!["+nightly"];
if let Some(cargoarg) = cargoarg {
args.extend_from_slice(&[cargoarg]);
}
- // We need to be in the `rtic` directory to pick up
- // the correct .cargo/config.toml file
- args.extend_from_slice(&["-Z", "unstable-options", "-C", "rtic"]);
-
args.extend_from_slice(&[
self.command(),
"--example",
@@ -708,6 +724,9 @@ impl<'a> CargoCommand<'a> {
CargoCommand::CheckInDir { dir, .. } | CargoCommand::BuildInDir { dir, .. } => {
Some(dir)
}
+ CargoCommand::Qemu { dir, .. }
+ | CargoCommand::ExampleBuild { dir, .. }
+ | CargoCommand::ExampleSize { dir, .. } => dir.as_ref(),
_ => None,
}
}
@@ -752,7 +771,7 @@ pub fn run_command(command: &CargoCommand, stderr_mode: OutputMode) -> anyhow::R
.stderr(stderr_mode);
if let Some(dir) = command.chdir() {
- process.current_dir(dir);
+ process.current_dir(dir.canonicalize()?);
}
let result = process.output()?;
@@ -765,7 +784,9 @@ pub fn run_command(command: &CargoCommand, stderr_mode: OutputMode) -> anyhow::R
log::info!("\n{}", stdout);
}
- if !exit_status.success() {
+ if exit_status.success() {
+ log::info!("✅ Success.")
+ } else {
log::error!("❌ Command failed. Run to completion for the summary.");
}
@@ -843,7 +864,7 @@ pub fn handle_results(globals: &Globals, results: Vec<FinalRunResult>) -> Result
successes.for_each(|(cmd, stdout, stderr)| {
let path = if let Some(dir) = cmd.chdir() {
- let path = dir.as_os_str().to_str().unwrap_or("Not displayable");
+ let path = dir.to_str().unwrap_or("Not displayable");
format!(" (in {path}")
} else {
format!("")
@@ -860,7 +881,7 @@ pub fn handle_results(globals: &Globals, results: Vec<FinalRunResult>) -> Result
errors.clone().for_each(|(cmd, stdout, stderr)| {
if let Some(dir) = cmd.chdir() {
- let path = dir.as_os_str().to_str().unwrap_or("Not displayable");
+ let path = dir.to_str().unwrap_or("Not displayable");
error!("❌ Failed: {cmd} (in {path}) \n {}", cmd.as_cmd_string());
} else {
error!("❌ Failed: {cmd}\n {}", cmd.as_cmd_string());