diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 376684dc3..8f33d54f5 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -430,6 +430,11 @@ fn bench_playback() -> Result<(), String> { run(Command::new(env!("CARGO")).args(["run", "--release", "-p", "filmcraft-ui-egui", "--example", "bench_playback", "--"]).args(&extra)) } +/// The workspace root (the parent of `xtask/`). +fn root() -> std::path::PathBuf { + std::path::Path::new(env!("CARGO_MANIFEST_DIR")).parent().expect("xtask lives in the workspace").to_path_buf() +} + fn main() -> ExitCode { let task = std::env::args().nth(1).unwrap_or_default(); let r = match task.as_str() { @@ -440,11 +445,18 @@ fn main() -> ExitCode { "ci" => ci(), "bench-playback" => bench_playback(), "web" => web(&std::env::args().skip(2).collect::>()), + "version" => { + let rest: Vec = std::env::args().skip(2).collect(); + version::run(&root(), &rest.iter().map(String::as_str).collect::>()) + } "ico" => { let rest: Vec = std::env::args().skip(2).collect(); ico::run(&rest.iter().map(String::as_str).collect::>()) } - _ => Err("usage: cargo xtask ".into()), + _ => { + Err("usage: cargo xtask " + .into()) + } }; match r { Ok(()) => ExitCode::SUCCESS, diff --git a/xtask/src/version.rs b/xtask/src/version.rs index 8c4c1fc34..979c3a4ae 100644 --- a/xtask/src/version.rs +++ b/xtask/src/version.rs @@ -92,12 +92,9 @@ pub fn run(root: &Path, args: &[&str]) -> Result<(), String> { std::fs::write(&tmp, updated).map_err(|e| format!("write {}: {e}", tmp.display()))?; std::fs::rename(&tmp, &path).map_err(|e| format!("replace {}: {e}", path.display()))?; // Refresh the workspace members' entries in Cargo.lock (no dependency upgrades). - let mut c = crate::cargo(); - c.args(["update", "--workspace", "--offline"]); - if crate::run(c, "cargo update --workspace --offline").is_err() { - let mut c = crate::cargo(); - c.args(["update", "--workspace"]); - crate::run(c, "cargo update --workspace")?; + let cargo = std::env::var("CARGO").unwrap_or_else(|_| "cargo".into()); + if crate::run(std::process::Command::new(&cargo).args(["update", "--workspace", "--offline"])).is_err() { + crate::run(std::process::Command::new(&cargo).args(["update", "--workspace"]))?; } println!("version: {old} -> {new}"); Ok(())