diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2019-04-24 09:45:25 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2019-04-24 09:58:50 +0200 |
commit | 09f6efadcac7a3c6c78701518eb478c6e2bb4eab (patch) | |
tree | 5b5cd1c00320329076e3cbd621800c05b53dde9b | |
parent | 0d39219b0a32d3024702da8cba97b67b6558a6a1 (diff) |
Implement ListFrontend::compare_packages()
-rw-r--r-- | src/frontend/list.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/frontend/list.rs b/src/frontend/list.rs index 8cff146..b229ecd 100644 --- a/src/frontend/list.rs +++ b/src/frontend/list.rs @@ -4,10 +4,13 @@ use std::ops::Deref; use librepology::v1::types::Package; use librepology::v1::types::Problem; +use librepology::v1::types::Repo; use failure::Fallible as Result; use failure::Error; use crate::frontend::Frontend; +use crate::backend::Backend; +use librepology::v1::api::Api; pub struct ListFrontend(Stdout); @@ -67,5 +70,28 @@ impl Frontend for ListFrontend { }) }) } + + fn compare_packages(&self, packages: Vec<Package>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> { + let mut output = self.0.lock(); + + for package in packages { + backend + .project(package.name().deref())? + .into_iter() + .filter(|p| filter_repos.contains(p.repo())) + .map(|upstream_package| { + writeln!(output, + "{our_package_name} - {our_package_version} - {up_repo_name} - {up_package_version}", + our_package_name = package.name().deref(), + our_package_version = package.version().deref(), + up_repo_name = upstream_package.repo().deref(), + up_package_version = upstream_package.version().deref() + ).map_err(Error::from) + }) + .collect::<Result<Vec<()>>>()?; + } + + Ok(()) + } } |