| 641 | } |
| 642 | |
| 643 | pub fn parse_version(version_text: String, log: &Logger) -> Result<String, Error> { |
| 644 | if version_text.to_ascii_lowercase().contains("error") { |
| 645 | log.debug(format!("Error parsing version: {}", version_text)); |
| 646 | return Err(anyhow!(PARSE_ERROR)); |
| 647 | } |
| 648 | let mut parsed_version = "".to_string(); |
| 649 | let re_numbers_dots = Regex::new(r"[^\d^.]")?; |
| 650 | let re_versions = Regex::new(r"(?:(\d+)\.)?(?:(\d+)\.)?(?:(\d+)\.\d+)")?; |
| 651 | for token in version_text.split(' ') { |
| 652 | parsed_version = re_numbers_dots.replace_all(token, "").to_string(); |
| 653 | if re_versions.is_match(parsed_version.as_str()) { |
| 654 | break; |
| 655 | } |
| 656 | } |
| 657 | if parsed_version.ends_with('.') { |
| 658 | parsed_version = parsed_version[0..parsed_version.len() - 1].to_string(); |
| 659 | } |
| 660 | Ok(parsed_version) |
| 661 | } |
| 662 | |
| 663 | pub fn path_to_string(path: &Path) -> String { |
| 664 | path.to_path_buf() |