xtask: size: Store the expected output same as run

This commit is contained in:
Henrik Tjäder 2025-06-25 20:56:00 +02:00 committed by Emil Fresk
parent b4a0c9057d
commit 67730ceedb
3 changed files with 27 additions and 5 deletions

View file

@ -468,7 +468,7 @@ pub enum Commands {
/// arguments will be passed on
///
/// Example: `cargo xtask size -- -A`
Size(Arg),
Size(ArgsAndOverwrite),
/// Run examples in QEMU and compare against expected output
///
@ -562,6 +562,19 @@ pub struct QemuAndRun {
pub overwrite_expected: bool,
}
#[derive(Debug, Parser, Clone)]
pub struct ArgsAndOverwrite {
/// If expected output is missing or mismatching, recreate the file
///
/// This overwrites only missing or mismatching
#[arg(long)]
pub overwrite_expected: bool,
/// Options to pass to `cargo <subcommand>`
#[command(subcommand)]
pub arguments: Option<ExtraArguments>,
}
#[derive(Debug, Parser, Clone)]
pub struct Arg {
/// Options to pass to `cargo <subcommand>`

View file

@ -317,6 +317,7 @@ fn main() -> anyhow::Result<()> {
platform,
backend,
&examples_to_run,
args.overwrite_expected,
&args.arguments,
)
}

View file

@ -68,6 +68,9 @@ fn command_parser(
CargoCommand::Qemu {
platform, example, ..
}
| CargoCommand::ExampleSize {
platform, example, ..
}
| CargoCommand::Run {
platform, example, ..
} => {
@ -108,7 +111,12 @@ fn command_parser(
}
let platform_name = platform.name();
let run_file = format!("{example}.run");
let run_file = if let CargoCommand::ExampleSize { .. } = *command {
format!("{example}.size")
} else {
format!("{example}.run")
};
let expected_output_file = ["ci", "expected", &platform_name, &run_file]
.iter()
.collect::<PathBuf>()
@ -148,8 +156,7 @@ fn command_parser(
| CargoCommand::Clippy { .. }
| CargoCommand::Doc { .. }
| CargoCommand::Test { .. }
| CargoCommand::Book { .. }
| CargoCommand::ExampleSize { .. } => {
| CargoCommand::Book { .. } => {
let cargo_result = run_command(command, output_mode, true)?;
Ok(cargo_result)
}
@ -429,6 +436,7 @@ pub fn build_and_check_size<'c>(
platform: Platforms,
backend: Backends,
examples: &'c [String],
overwrite: bool,
arguments: &'c Option<ExtraArguments>,
) -> Vec<FinalRunResult<'c>> {
info!("Measuring for platform: {platform:?}, backend: {backend:?}");
@ -468,7 +476,7 @@ pub fn build_and_check_size<'c>(
[cmd_build, cmd_size]
})
.map(|cmd| (globals, cmd, false));
.map(|cmd| (globals, cmd, overwrite));
runner.run_and_coalesce()
}