diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2019-04-30 14:39:39 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2019-04-30 16:30:49 +0200 |
commit | 030dd838277e7868a1f73b0edf518fa4b0849c2d (patch) | |
tree | 2d83b040d27187b5c80cd2e7b021508ad1c59b6e /src/main.rs | |
parent | 632b7e43de2df4f90da0fe14d85fae8aac13b151 (diff) |
Add: Feature to sort output
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs index 82236a8..a45ebb7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ extern crate xdg; extern crate flexi_logger; extern crate filters; extern crate boolinator; +extern crate itertools; #[cfg(feature = "compare_csv")] extern crate csv; @@ -34,6 +35,7 @@ use failure::Fallible as Result; use clap::ArgMatches; use filters::filter::Filter; use boolinator::Boolinator; +use itertools::Itertools; use config::Configuration; use compare::ComparePackage; @@ -160,11 +162,22 @@ fn app() -> Result<()> { mtch.value_of("project_name").unwrap() // safe by clap }; - let packages = backend - .project(&name)? - .into_iter() - .filter(|package| repository_filter.filter(package.repo())) - .collect(); + let packages = { + let iter = backend + .project(&name)? + .into_iter() + .filter(|package| repository_filter.filter(package.repo())); + + if mtch.is_present("sort-versions"){ + iter.sorted_by(|a, b| Ord::cmp(a.version(), b.version())) + .collect() + } else if mtch.is_present("sort-repo") { + iter.sorted_by(|a, b| Ord::cmp(a.repo(), b.repo())) + .collect() + } else { + iter.collect() + } + }; frontend.list_packages(packages) }, ("problems", Some(mtch)) => { @@ -173,15 +186,26 @@ fn app() -> Result<()> { let repo = mtch.value_of("repo"); let maintainer = mtch.value_of("maintainer"); - let problems = match (repo, maintainer) { - (Some(r), None) => backend.problems_for_repo(&r)?, - (None, Some(m)) => backend.problems_for_maintainer(&m)?, - (None, None) => unimplemented!(), - (Some(_), Some(_)) => unimplemented!(), - } - .into_iter() - .filter(|problem| repository_filter.filter(problem.repo())) - .collect(); + let problems = { + let iter = match (repo, maintainer) { + (Some(r), None) => backend.problems_for_repo(&r)?, + (None, Some(m)) => backend.problems_for_maintainer(&m)?, + (None, None) => unimplemented!(), + (Some(_), Some(_)) => unimplemented!(), + } + .into_iter() + .filter(|problem| repository_filter.filter(problem.repo())); + + if mtch.is_present("sort-maintainer") { + iter.sorted_by(|a, b| Ord::cmp(a.maintainer(), b.maintainer())) + .collect() + } else if mtch.is_present("sort-repo") { + iter.sorted_by(|a, b| Ord::cmp(a.repo(), b.repo())) + .collect() + } else { + iter.collect() + } + }; frontend.list_problems(problems) }, |