summaryrefslogtreecommitdiff
path: root/src/compare.rs
diff options
context:
space:
mode:
authorHermes Agent <hermes@localhost>2026-08-12 07:48:21 +0000
committerHermes Agent <hermes@localhost>2026-08-12 07:48:21 +0000
commitf967d698efd44473a9285e02d0109f3bb0641622 (patch)
treec94975571db9426cf71b15c9e6d16346e438c7c6 /src/compare.rs
parent5e6cae20331f8e7cfd551b4656f0de852a4ad44c (diff)
Format native builder and satisfy clippy
Diffstat (limited to 'src/compare.rs')
-rw-r--r--src/compare.rs105
1 files changed, 81 insertions, 24 deletions
diff --git a/src/compare.rs b/src/compare.rs
index 8b59c1c..3382d95 100644
--- a/src/compare.rs
+++ b/src/compare.rs
@@ -50,11 +50,21 @@ impl ComparisonReport {
let mut output = String::new();
for difference in &self.differences {
match difference {
- SemanticDifference::Package { name, change } => writeln!(output, "{} package {name}", change.verb()),
- SemanticDifference::File { path, change } => writeln!(output, "{} file {path}", change.verb()),
- SemanticDifference::Initrd { change } => writeln!(output, "{} initrd", change.verb()),
- SemanticDifference::Service { name, change } => writeln!(output, "{} service {name}", change.verb()),
- SemanticDifference::ArchiveMember { path, change } => writeln!(output, "{} archive member {path}", change.verb()),
+ SemanticDifference::Package { name, change } => {
+ writeln!(output, "{} package {name}", change.verb())
+ }
+ SemanticDifference::File { path, change } => {
+ writeln!(output, "{} file {path}", change.verb())
+ }
+ SemanticDifference::Initrd { change } => {
+ writeln!(output, "{} initrd", change.verb())
+ }
+ SemanticDifference::Service { name, change } => {
+ writeln!(output, "{} service {name}", change.verb())
+ }
+ SemanticDifference::ArchiveMember { path, change } => {
+ writeln!(output, "{} archive member {path}", change.verb())
+ }
}
.expect("writing to String cannot fail");
}
@@ -64,26 +74,60 @@ impl ComparisonReport {
pub fn compare(left: &ArtifactManifest, right: &ArtifactManifest) -> ComparisonReport {
let mut differences = Vec::new();
- compare_records(&left.packages, &right.packages, |record| &record.name, |name, change| {
- SemanticDifference::Package { name: name.to_owned(), change }
- }, &mut differences);
- compare_records(&left.files, &right.files, |record| &record.path, |path, change| {
- SemanticDifference::File { path: path.to_owned(), change }
- }, &mut differences);
+ compare_records(
+ &left.packages,
+ &right.packages,
+ |record| &record.name,
+ |name, change| SemanticDifference::Package {
+ name: name.to_owned(),
+ change,
+ },
+ &mut differences,
+ );
+ compare_records(
+ &left.files,
+ &right.files,
+ |record| &record.path,
+ |path, change| SemanticDifference::File {
+ path: path.to_owned(),
+ change,
+ },
+ &mut differences,
+ );
match (&left.initrd, &right.initrd) {
- (None, Some(_)) => differences.push(SemanticDifference::Initrd { change: Change::Added }),
- (Some(_), None) => differences.push(SemanticDifference::Initrd { change: Change::Removed }),
+ (None, Some(_)) => differences.push(SemanticDifference::Initrd {
+ change: Change::Added,
+ }),
+ (Some(_), None) => differences.push(SemanticDifference::Initrd {
+ change: Change::Removed,
+ }),
(Some(left), Some(right)) if left != right => {
- differences.push(SemanticDifference::Initrd { change: Change::Changed });
+ differences.push(SemanticDifference::Initrd {
+ change: Change::Changed,
+ });
}
_ => {}
}
- compare_records(&left.services, &right.services, |record| &record.name, |name, change| {
- SemanticDifference::Service { name: name.to_owned(), change }
- }, &mut differences);
- compare_records(&left.archive_members, &right.archive_members, |record| &record.path, |path, change| {
- SemanticDifference::ArchiveMember { path: path.to_owned(), change }
- }, &mut differences);
+ compare_records(
+ &left.services,
+ &right.services,
+ |record| &record.name,
+ |name, change| SemanticDifference::Service {
+ name: name.to_owned(),
+ change,
+ },
+ &mut differences,
+ );
+ compare_records(
+ &left.archive_members,
+ &right.archive_members,
+ |record| &record.path,
+ |path, change| SemanticDifference::ArchiveMember {
+ path: path.to_owned(),
+ change,
+ },
+ &mut differences,
+ );
differences.sort();
ComparisonReport { differences }
}
@@ -95,13 +139,26 @@ fn compare_records<T: PartialEq>(
difference: impl Fn(&str, Change) -> SemanticDifference,
output: &mut Vec<SemanticDifference>,
) {
- let left = left.iter().map(|record| (key(record), record)).collect::<BTreeMap<_, _>>();
- let right = right.iter().map(|record| (key(record), record)).collect::<BTreeMap<_, _>>();
- for name in left.keys().chain(right.keys()).copied().collect::<std::collections::BTreeSet<_>>() {
+ let left = left
+ .iter()
+ .map(|record| (key(record), record))
+ .collect::<BTreeMap<_, _>>();
+ let right = right
+ .iter()
+ .map(|record| (key(record), record))
+ .collect::<BTreeMap<_, _>>();
+ for name in left
+ .keys()
+ .chain(right.keys())
+ .copied()
+ .collect::<std::collections::BTreeSet<_>>()
+ {
match (left.get(name), right.get(name)) {
(None, Some(_)) => output.push(difference(name, Change::Added)),
(Some(_), None) => output.push(difference(name, Change::Removed)),
- (Some(left), Some(right)) if left != right => output.push(difference(name, Change::Changed)),
+ (Some(left), Some(right)) if left != right => {
+ output.push(difference(name, Change::Changed))
+ }
_ => {}
}
}