diff options
author | Lars Wirzenius <liw@sequoia-pgp.org> | 2022-07-30 21:40:20 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@sequoia-pgp.org> | 2022-07-30 21:40:20 +0300 |
commit | 0488ee4432cdc43556fa4bc7de235fd1913f5ff4 (patch) | |
tree | 04e81929d656bc9364e795b48af26657044e000b | |
parent | 7ed3ac7daf2b2ecad58ff6a859bba4e2a97b1938 (diff) | |
download | missing-dependencies-0488ee4432cdc43556fa4bc7de235fd1913f5ff4.tar.gz |
feat: sort output, drop duplicates
Sponsored-by: author
-rw-r--r-- | src/main.rs | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 68b5722..88e7f45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,7 +21,7 @@ fn fallible_main() -> anyhow::Result<()> { let packages = Crates::from_file(&args.packaged)?; debug!("loading dependencies"); let dependencies = get_dependencies()?; - let mut problems = vec![]; + let mut problems = Problems::default(); debug!("finding problems"); for c in dependencies.iter() { @@ -37,10 +37,15 @@ fn fallible_main() -> anyhow::Result<()> { } } + let mut problems = problems.to_vec(); if problems.is_empty() { debug!("all good"); Ok(()) } else { + problems.sort_by_key(|p| match p { + Problem::Crate(c) => (c.name.clone(), c.version.clone()), + Problem::Version(c) => (c.name.clone(), c.version.clone()), + }); for p in problems.iter() { println!("{}", p); } @@ -130,7 +135,7 @@ impl Crates { } } -#[derive(Clone)] +#[derive(Debug, Clone, Eq, PartialEq)] struct Crate { name: String, version: Version, @@ -145,6 +150,7 @@ impl Crate { } } +#[derive(Debug, Clone, Eq, PartialEq)] enum Problem { Crate(Crate), Version(Crate), @@ -158,3 +164,20 @@ impl fmt::Display for Problem { } } } + +#[derive(Default, Debug)] +struct Problems { + problems: Vec<Problem>, +} + +impl Problems { + fn push(&mut self, new: Problem) { + if !self.problems.iter().any(|p| *p == new) { + self.problems.push(new); + } + } + + fn to_vec(&self) -> Vec<Problem> { + self.problems.clone() + } +} |