From 1903f628662586c1b871eb5de052d7df0bc8a3df Mon Sep 17 00:00:00 2001 From: binarycat Date: Sat, 24 Aug 2024 12:41:40 -0400 Subject: [PATCH] rewrite extract_curl_version again --- src/bootstrap/src/core/download.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/bootstrap/src/core/download.rs b/src/bootstrap/src/core/download.rs index fd6f17130ee91..5caaeda200640 100644 --- a/src/bootstrap/src/core/download.rs +++ b/src/bootstrap/src/core/download.rs @@ -21,20 +21,15 @@ fn try_run(config: &Config, cmd: &mut Command) -> Result<(), ()> { config.try_run(cmd) } -fn extract_curl_version(out: &[u8]) -> (u16, u16) { - let out = &out[5..]; - let Some(i) = out.iter().position(|&x| x == b' ') else { return (0, 0) }; - let out = &out[..i]; - let Some(k) = out.iter().rev().position(|&x| x == b'.') else { return (0, 0) }; - let out = &out[..out.len() - k - 1]; - let Ok(s) = std::str::from_utf8(out) else { return (0, 0) }; - let parts = s.split('.').collect::>(); - let [s_major, s_minor] = &parts[..] else { return (0, 0) }; - let (Ok(major), Ok(minor)) = (s_major.parse(), s_minor.parse()) else { return (0, 0) }; - (major, minor) +fn extract_curl_version(out: &[u8]) -> semver::Version { + let out = String::from_utf8_lossy(out); + // The output should look like this: "curl .. ..." + out.lines().next().and_then(|line| line.split(" ").skip(1).next()) + .and_then(|version| semver::Version::parse(version).ok()) + .unwrap_or(Version::new(1, 0, 0)) } -fn curl_version() -> (u16, u16) { +fn curl_version() -> semver::Version { let mut curl = Command::new("curl"); curl.arg("-V"); let Ok(out) = curl.output() else { return (0, 0) }; @@ -253,7 +248,7 @@ impl Config { curl.arg("--progress-bar"); } // --retry-all-errors was added in 7.71.0, don't use it if curl is old. - if curl_version() > (7, 70) { + if curl_version() >= semver::Version(7, 71, 0) { curl.arg("--retry-all-errors"); } curl.arg(url);