diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 5a3e8e64..fb37704a 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -360,12 +360,17 @@ fn main() -> ExitCode { "wasm" => wasm(), "assets" => assets(), "ci" => ci(), + "version" => { + let rest: Vec = std::env::args().skip(2).collect(); + let args: Vec<&str> = rest.iter().map(String::as_str).collect(); + version::run(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap_or(std::path::Path::new(".")), &args) + } "web" => web(&std::env::args().skip(2).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 489b6267..c1bf450b 100644 --- a/xtask/src/version.rs +++ b/xtask/src/version.rs @@ -8,10 +8,7 @@ use std::path::Path; /// The `version = "…"` value inside `[workspace.package]`. pub fn read(manifest: &str) -> Result { let (_, line) = find_line(manifest)?; - let v = line - .split_once('=') - .map(|(_, v)| v.trim().trim_matches('"').to_string()) - .unwrap_or_default(); + let v = line.split_once('=').map(|(_, v)| v.trim().trim_matches('"').to_string()).unwrap_or_default(); if v.is_empty() { return Err("empty [workspace.package] version".into()); } @@ -48,20 +45,11 @@ pub fn validate(v: &str) -> Result<(), String> { None => (v, None), }; let nums: Vec<&str> = core.split('.').collect(); - if nums.len() != 3 - || nums.iter().any(|n| { - n.is_empty() - || !n.bytes().all(|b| b.is_ascii_digit()) - || (n.len() > 1 && n.starts_with('0')) - }) - { + if nums.len() != 3 || nums.iter().any(|n| n.is_empty() || !n.bytes().all(|b| b.is_ascii_digit()) || (n.len() > 1 && n.starts_with('0'))) { return bad(); } if let Some(p) = pre - && (p.is_empty() - || p.split('.').any(|id| { - id.is_empty() || !id.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'-') - })) + && (p.is_empty() || p.split('.').any(|id| id.is_empty() || !id.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'-'))) { return bad(); } @@ -104,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::process::Command::new(env!("CARGO")); + if crate::run(cargo().args(["update", "--workspace", "--offline"])).is_err() { + crate::run(cargo().args(["update", "--workspace"]))?; } println!("version: {old} -> {new}"); Ok(())