#!/usr/bin/perl # Diff two Sources files, comparing version numbers for each package found in the second file. # Usage example: ./diff-dists use strict; use warnings; my $fulldiff = 0; if (@ARGV and $ARGV[0] eq '-f') { shift; $fulldiff = 1; } die "Syntax: $0 [-f] " unless (@ARGV == 2); my ($source1, $source2) = @ARGV; my %pkgs; $/ = ''; # slurp paragraphs open S2, $source2 or die "$source2: $!"; while () { my ($pkg) = /^Package: (.+)/m or die "$source2: paragraph without Package: $_"; my ($ver) = /^Version: (.+)/m or die "$source2: paragraph without Version: $_"; $pkgs{$pkg} = $ver; } close S2; open S1, $source1 or die "$source1: $!"; while () { my ($pkg) = /^Package: (.+)/m or die "$source1: paragraph without Package: $_"; my ($ver) = /^Version: (.+)/m or die "$source1: paragraph without Version: $_"; if (not exists $pkgs{$pkg}) { print "$pkg $ver \n" if ($fulldiff); next; } my $ver2 = $pkgs{$pkg}; if ($ver eq $ver2 or $ver2 =~ /^\Q$ver\E[.~]pgdg\+\d$/) { #print "OK: $pkg $ver $ver2\n"; delete $pkgs{$pkg}; next; } print "$pkg $ver $pkgs{$pkg}\n"; delete $pkgs{$pkg}; } close S1; foreach my $pkg (sort keys %pkgs) { print "$pkg $pkgs{$pkg}\n"; }