From a347e4726d7ed00ea081c0243524b262dea57e0a Mon Sep 17 00:00:00 2001 From: notplants Date: Wed, 20 Apr 2022 12:07:32 -0400 Subject: [PATCH 1/5] Fix manifest --- Cargo.lock | 2 +- peach-config/Cargo.toml | 2 +- peach-config/src/generate_manifest.rs | 47 ++++++++++++--------------- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a28c5aa..821964a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2381,7 +2381,7 @@ dependencies = [ [[package]] name = "peach-config" -version = "0.1.21" +version = "0.1.22" dependencies = [ "clap", "env_logger 0.6.2", diff --git a/peach-config/Cargo.toml b/peach-config/Cargo.toml index f3168de..093e431 100644 --- a/peach-config/Cargo.toml +++ b/peach-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "peach-config" -version = "0.1.21" +version = "0.1.22" authors = ["Andrew Reid ", "Max Fowler "] edition = "2018" description = "Command line tool for installing, updating and configuring PeachCloud" diff --git a/peach-config/src/generate_manifest.rs b/peach-config/src/generate_manifest.rs index 78f0d87..d755ee2 100644 --- a/peach-config/src/generate_manifest.rs +++ b/peach-config/src/generate_manifest.rs @@ -1,43 +1,38 @@ -use regex::Regex; use serde::{Deserialize, Serialize}; use snafu::ResultExt; use std::collections::HashMap; use std::fs; +use log::debug; -use crate::constants::HARDWARE_CONFIG_FILE; +use crate::constants::{HARDWARE_CONFIG_FILE, SERVICES}; use crate::error::{FileReadError, FileWriteError, PeachConfigError}; use crate::utils::get_output; use crate::RtcOption; + +pub fn get_package_version_number(package: &str) -> Result { + let version = get_output(&["dpkg-query", "--showformat='${Version}'", "--show", package])?; + debug!("version: {:?}", version); + Ok(version) +} + /// Returns a HashMap of all the peach-packages which are currently installed /// mapped to their version number e.g. { "peach-probe": "1.2.0", "peach-network": "1.4.0" } pub fn get_currently_installed_microservices() -> Result, PeachConfigError> { - // gets a list of all packages currently installed with dpkg - let packages = get_output(&["dpkg", "-l"])?; - - // this regex matches packages which contain the word peach in them - // and has two match groups - // 1. the first match group gets the package name - // 2. the second match group gets the version number of the package - let re: Regex = Regex::new(r"\S+\s+(\S*peach\S+)\s+(\S+).*\n").unwrap(); - - // the following iterator, iterates through the captures matched via the regex - // and for each capture, creates a value in the hash map, - // which maps the name of the package, to its version number - // e.g. { "peach-probe": "1.2.0", "peach-network": "1.4.0" } - let peach_packages: HashMap = re - .captures_iter(&packages) - .filter_map(|cap| { - let groups = (cap.get(1), cap.get(2)); - match groups { - (Some(package), Some(version)) => { - Some((package.as_str().to_string(), version.as_str().to_string())) - } - _ => None, + // gets a list of all packages currently installed with dpkg-query + let peach_packages_option_vec: Vec> = SERVICES.iter().map(|service| { + let version = get_package_version_number(service); + match version { + Ok(v) => { + Some((service.to_string(), v.to_string())) } - }) - .collect(); + Err(_) => { + None + } + } + }).collect(); + let peach_packages: HashMap = peach_packages_option_vec.into_iter().flat_map(|e| e).collect(); // finally the hashmap of packages and version numbers is returned Ok(peach_packages) From f764acc2df2273337938b8ad5647b4b6d8e37446 Mon Sep 17 00:00:00 2001 From: notplants Date: Wed, 20 Apr 2022 12:15:38 -0400 Subject: [PATCH 2/5] More concise transforms --- peach-config/src/generate_manifest.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/peach-config/src/generate_manifest.rs b/peach-config/src/generate_manifest.rs index d755ee2..135dc25 100644 --- a/peach-config/src/generate_manifest.rs +++ b/peach-config/src/generate_manifest.rs @@ -1,15 +1,14 @@ +use log::debug; use serde::{Deserialize, Serialize}; use snafu::ResultExt; use std::collections::HashMap; use std::fs; -use log::debug; use crate::constants::{HARDWARE_CONFIG_FILE, SERVICES}; use crate::error::{FileReadError, FileWriteError, PeachConfigError}; use crate::utils::get_output; use crate::RtcOption; - pub fn get_package_version_number(package: &str) -> Result { let version = get_output(&["dpkg-query", "--showformat='${Version}'", "--show", package])?; debug!("version: {:?}", version); @@ -21,18 +20,16 @@ pub fn get_package_version_number(package: &str) -> Result Result, PeachConfigError> { // gets a list of all packages currently installed with dpkg-query - let peach_packages_option_vec: Vec> = SERVICES.iter().map(|service| { - let version = get_package_version_number(service); - match version { - Ok(v) => { - Some((service.to_string(), v.to_string())) + let peach_packages: HashMap = SERVICES + .iter() + .filter_map(|service| { + let version = get_package_version_number(service); + match version { + Ok(v) => Some((service.to_string(), v)), + Err(_) => None, } - Err(_) => { - None - } - } - }).collect(); - let peach_packages: HashMap = peach_packages_option_vec.into_iter().flat_map(|e| e).collect(); + }) + .collect(); // finally the hashmap of packages and version numbers is returned Ok(peach_packages) From cf9c0c7ecaf3c5e1df58ab2be804e0526153c243 Mon Sep 17 00:00:00 2001 From: notplants Date: Wed, 20 Apr 2022 12:18:31 -0400 Subject: [PATCH 3/5] Add doc comment --- peach-config/src/generate_manifest.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/peach-config/src/generate_manifest.rs b/peach-config/src/generate_manifest.rs index 135dc25..1e325be 100644 --- a/peach-config/src/generate_manifest.rs +++ b/peach-config/src/generate_manifest.rs @@ -9,9 +9,10 @@ use crate::error::{FileReadError, FileWriteError, PeachConfigError}; use crate::utils::get_output; use crate::RtcOption; +/// Helper function which returns the version of a package currently installed, +/// as an Ok(String) if found, and as an Err if not found pub fn get_package_version_number(package: &str) -> Result { let version = get_output(&["dpkg-query", "--showformat='${Version}'", "--show", package])?; - debug!("version: {:?}", version); Ok(version) } From 03720a7338f49da87ed118082f2a9203d9a43530 Mon Sep 17 00:00:00 2001 From: notplants Date: Wed, 20 Apr 2022 12:19:15 -0400 Subject: [PATCH 4/5] Remove unused import --- peach-config/src/generate_manifest.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/peach-config/src/generate_manifest.rs b/peach-config/src/generate_manifest.rs index 1e325be..20eee83 100644 --- a/peach-config/src/generate_manifest.rs +++ b/peach-config/src/generate_manifest.rs @@ -1,4 +1,3 @@ -use log::debug; use serde::{Deserialize, Serialize}; use snafu::ResultExt; use std::collections::HashMap; From d03de8cf5d31eade020a670a8a11a2ce8a8044e7 Mon Sep 17 00:00:00 2001 From: notplants Date: Wed, 20 Apr 2022 13:55:26 -0400 Subject: [PATCH 5/5] Remove extraneous quote --- Cargo.lock | 2 +- peach-config/Cargo.toml | 2 +- peach-config/src/generate_manifest.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 821964a..b56d9dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2381,7 +2381,7 @@ dependencies = [ [[package]] name = "peach-config" -version = "0.1.22" +version = "0.1.23" dependencies = [ "clap", "env_logger 0.6.2", diff --git a/peach-config/Cargo.toml b/peach-config/Cargo.toml index 093e431..679d4d9 100644 --- a/peach-config/Cargo.toml +++ b/peach-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "peach-config" -version = "0.1.22" +version = "0.1.23" authors = ["Andrew Reid ", "Max Fowler "] edition = "2018" description = "Command line tool for installing, updating and configuring PeachCloud" diff --git a/peach-config/src/generate_manifest.rs b/peach-config/src/generate_manifest.rs index 20eee83..d69b12e 100644 --- a/peach-config/src/generate_manifest.rs +++ b/peach-config/src/generate_manifest.rs @@ -11,7 +11,7 @@ use crate::RtcOption; /// Helper function which returns the version of a package currently installed, /// as an Ok(String) if found, and as an Err if not found pub fn get_package_version_number(package: &str) -> Result { - let version = get_output(&["dpkg-query", "--showformat='${Version}'", "--show", package])?; + let version = get_output(&["dpkg-query", "--showformat=${Version}", "--show", package])?; Ok(version) }