@@ -21,23 +21,18 @@ fn try_run(config: &Config, cmd: &mut Command) -> Result<(), ()> {
21
21
config. try_run ( cmd)
22
22
}
23
23
24
- fn extract_curl_version ( out : & [ u8 ] ) -> ( u16 , u16 ) {
25
- let out = & out[ 5 ..] ;
26
- let Some ( i) = out. iter ( ) . position ( |& x| x == b' ' ) else { return ( 0 , 0 ) } ;
27
- let out = & out[ ..i] ;
28
- let Some ( k) = out. iter ( ) . rev ( ) . position ( |& x| x == b'.' ) else { return ( 0 , 0 ) } ;
29
- let out = & out[ ..out. len ( ) - k - 1 ] ;
30
- let Ok ( s) = std:: str:: from_utf8 ( out) else { return ( 0 , 0 ) } ;
31
- let parts = s. split ( '.' ) . collect :: < Vec < _ > > ( ) ;
32
- let [ s_major, s_minor] = & parts[ ..] else { return ( 0 , 0 ) } ;
33
- let ( Ok ( major) , Ok ( minor) ) = ( s_major. parse ( ) , s_minor. parse ( ) ) else { return ( 0 , 0 ) } ;
34
- ( major, minor)
24
+ fn extract_curl_version ( out : & [ u8 ] ) -> semver:: Version {
25
+ let out = String :: from_utf8_lossy ( out) ;
26
+ // The output should look like this: "curl <major>.<minor>.<patch> ..."
27
+ out. lines ( ) . next ( ) . and_then ( |line| line. split ( " " ) . skip ( 1 ) . next ( ) )
28
+ . and_then ( |version| semver:: Version :: parse ( version) . ok ( ) )
29
+ . unwrap_or ( semver:: Version :: new ( 1 , 0 , 0 ) )
35
30
}
36
31
37
- fn curl_version ( ) -> ( u16 , u16 ) {
32
+ fn curl_version ( ) -> semver :: Version {
38
33
let mut curl = Command :: new ( "curl" ) ;
39
34
curl. arg ( "-V" ) ;
40
- let Ok ( out) = curl. output ( ) else { return ( 0 , 0 ) } ;
35
+ let Ok ( out) = curl. output ( ) else { return semver :: Version :: new ( 1 , 0 , 0 ) } ;
41
36
let out = out. stdout ;
42
37
extract_curl_version ( & out)
43
38
}
@@ -253,7 +248,7 @@ impl Config {
253
248
curl. arg ( "--progress-bar" ) ;
254
249
}
255
250
// --retry-all-errors was added in 7.71.0, don't use it if curl is old.
256
- if curl_version ( ) > ( 7 , 70 ) {
251
+ if curl_version ( ) >= semver :: Version :: new ( 7 , 71 , 0 ) {
257
252
curl. arg ( "--retry-all-errors" ) ;
258
253
}
259
254
curl. arg ( url) ;
0 commit comments