use tuples for semver, not floats
This commit is contained in:
parent
d1b41f3747
commit
69ca95bf7f
@ -80,7 +80,10 @@ def get(base, url, path, checksums, verbose=False):
|
|||||||
os.unlink(temp_path)
|
os.unlink(temp_path)
|
||||||
|
|
||||||
def curl_version():
|
def curl_version():
|
||||||
return float(re.match(bytes("^curl ([0-9]+\\.[0-9]+)", "utf8"), require(["curl", "-V"]))[1])
|
m = re.match(bytes("^curl ([0-9]+)\\.([0-9]+)", "utf8"), require(["curl", "-V"]))
|
||||||
|
if m is None:
|
||||||
|
return (0, 0)
|
||||||
|
return (int(m[1]), int(m[2]))
|
||||||
|
|
||||||
def download(path, url, probably_big, verbose):
|
def download(path, url, probably_big, verbose):
|
||||||
for _ in range(4):
|
for _ in range(4):
|
||||||
@ -110,7 +113,7 @@ def _download(path, url, probably_big, verbose, exception):
|
|||||||
# but raise `CalledProcessError` or `OSError` instead
|
# but raise `CalledProcessError` or `OSError` instead
|
||||||
require(["curl", "--version"], exception=platform_is_win32())
|
require(["curl", "--version"], exception=platform_is_win32())
|
||||||
extra_flags = []
|
extra_flags = []
|
||||||
if curl_version() > 7.70:
|
if curl_version() > (7, 70):
|
||||||
extra_flags = [ "--retry-all-errors" ]
|
extra_flags = [ "--retry-all-errors" ]
|
||||||
run(["curl", option] + extra_flags + [
|
run(["curl", option] + extra_flags + [
|
||||||
"-L", # Follow redirect.
|
"-L", # Follow redirect.
|
||||||
|
@ -21,19 +21,23 @@ fn try_run(config: &Config, cmd: &mut Command) -> Result<(), ()> {
|
|||||||
config.try_run(cmd)
|
config.try_run(cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_curl_version(out: &[u8]) -> f32 {
|
fn extract_curl_version(out: &[u8]) -> (u16, u16) {
|
||||||
let out = &out[5..];
|
let out = &out[5..];
|
||||||
let Some(i) = out.iter().position(|&x| x == b' ') else { return 0.0 };
|
let Some(i) = out.iter().position(|&x| x == b' ') else { return (0, 0) };
|
||||||
let out = &out[..i];
|
let out = &out[..i];
|
||||||
let Some(k) = out.iter().rev().position(|&x| x == b'.') else { return 0.0 };
|
let Some(k) = out.iter().rev().position(|&x| x == b'.') else { return (0, 0) };
|
||||||
let out = &out[..out.len() - k - 1];
|
let out = &out[..out.len() - k - 1];
|
||||||
std::str::from_utf8(out).unwrap().parse().unwrap_or(0.0)
|
let Ok(s) = std::str::from_utf8(out) else { return (0, 0) };
|
||||||
|
let parts = s.split('.').collect::<Vec<_>>();
|
||||||
|
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 curl_version() -> f32 {
|
fn curl_version() -> (u16, u16) {
|
||||||
let mut curl = Command::new("curl");
|
let mut curl = Command::new("curl");
|
||||||
curl.arg("-V");
|
curl.arg("-V");
|
||||||
let Ok(out) = curl.output() else { return 0.0 };
|
let Ok(out) = curl.output() else { return (0, 0) };
|
||||||
let out = out.stdout;
|
let out = out.stdout;
|
||||||
extract_curl_version(&out)
|
extract_curl_version(&out)
|
||||||
}
|
}
|
||||||
@ -249,7 +253,7 @@ impl Config {
|
|||||||
curl.arg("--progress-bar");
|
curl.arg("--progress-bar");
|
||||||
}
|
}
|
||||||
// --retry-all-errors was added in 7.71.0, don't use it if curl is old.
|
// --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() > (7, 70) {
|
||||||
curl.arg("--retry-all-errors");
|
curl.arg("--retry-all-errors");
|
||||||
}
|
}
|
||||||
curl.arg(url);
|
curl.arg(url);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user