@@ -21,23 +21,20 @@ fn try_run(config: &Config, cmd: &mut Command) -> Result<(), ()> {
2121 config. try_run ( cmd)
2222}
2323
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 ( )
28+ . next ( )
29+ . and_then ( |line| line. split ( " " ) . nth ( 1 ) )
30+ . and_then ( |version| semver:: Version :: parse ( version) . ok ( ) )
31+ . unwrap_or ( semver:: Version :: new ( 1 , 0 , 0 ) )
3532}
3633
37- fn curl_version ( ) -> ( u16 , u16 ) {
34+ fn curl_version ( ) -> semver :: Version {
3835 let mut curl = Command :: new ( "curl" ) ;
3936 curl. arg ( "-V" ) ;
40- let Ok ( out) = curl. output ( ) else { return ( 0 , 0 ) } ;
37+ let Ok ( out) = curl. output ( ) else { return semver :: Version :: new ( 1 , 0 , 0 ) } ;
4138 let out = out. stdout ;
4239 extract_curl_version ( & out)
4340}
@@ -253,7 +250,7 @@ impl Config {
253250 curl. arg ( "--progress-bar" ) ;
254251 }
255252 // --retry-all-errors was added in 7.71.0, don't use it if curl is old.
256- if curl_version ( ) > ( 7 , 70 ) {
253+ if curl_version ( ) >= semver :: Version :: new ( 7 , 71 , 0 ) {
257254 curl. arg ( "--retry-all-errors" ) ;
258255 }
259256 curl. arg ( url) ;
0 commit comments