Check if `current` version is less than `required` version. Performs a simple major.minor.patch numeric comparison. Missing parts default to 0 (e.g. `"1.2"` is treated as `"1.2.0"`). Returns `true` if `current < required` (upgrade needed). Returns `false` if `current >= required` or if either version string cannot be parsed — this avoids spurious warnings on dev or pre-release version strings.
(current: &str, required: &str)
| 16 | /// cannot be parsed — this avoids spurious warnings on dev or pre-release |
| 17 | /// version strings. |
| 18 | pub fn needs_upgrade(current: &str, required: &str) -> bool { |
| 19 | fn parse_version(v: &str) -> Option<(u32, u32, u32)> { |
| 20 | let mut parts = v.trim().splitn(4, '.'); |
| 21 | let major = parts.next()?.parse::<u32>().ok()?; |
| 22 | let minor = parts.next().unwrap_or("0").parse::<u32>().ok()?; |
| 23 | let patch = parts.next().unwrap_or("0").parse::<u32>().ok()?; |
| 24 | Some((major, minor, patch)) |
| 25 | } |
| 26 | |
| 27 | match (parse_version(current), parse_version(required)) { |
| 28 | (Some(cur), Some(req)) => cur < req, |
| 29 | _ => false, |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | /// Check the `X-Atomic-Min-Version` response header and warn if the |
| 34 | /// current CLI version is older than the server's minimum requirement. |
no test coverage detected