X-Git-Url: http://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=scripts%2Frepodiff.pl;fp=scripts%2Frepodiff.pl;h=0752cfa341a2ef83323ceecfe781f8f3aaa08c07;hp=0000000000000000000000000000000000000000;hb=87c37be5a0cd8450d3e724f673e59c3bd13d5e58;hpb=57cab25cd02e71827ce49e043cf5128aadc0f65a diff --git a/scripts/repodiff.pl b/scripts/repodiff.pl new file mode 100755 index 0000000..0752cfa --- /dev/null +++ b/scripts/repodiff.pl @@ -0,0 +1,83 @@ +#!/usr/bin/perl +# Filename: repodiff.pl +# Purpose: compare the available packages from two different repositories +# Authors: grml-team (grml.org), (c) Alexander Wirt +# Bug-Reports: see http://grml.org/bugs/ +# License: This file is licensed under the GPL v2 or any later version. +# Latest change: Sun Oct 28 18:00:49 CET 2007 [mika] +################################################################################ +# Notice: adjust $c_file[12] according to your needs, by default the script +# compares the i386 pool with the amd64 pool of grml. +################################################################################ + +use strict; +use LWP::Simple; +use Compress::Zlib ; + +use AptPkg::Config '$_config'; +use AptPkg::System '$_system'; +use AptPkg::Version; + +(my $self = $0) =~ s#.*/##; + +# initialise the global config object with the default values +$_config->init; + +# determine the appropriate system type +$_system = $_config->system; + +# fetch a versioning system +my $vs = $_system->versioning; + +sub describe +{ + return 'earlier than' if $_[0] < 0; + return 'later than' if $_[0] > 0; + 'the same as'; +} + +my $c_file1 = get('http://deb.grml.org/dists/grml-testing/main/binary-i386/Packages.gz'); +my $c_file2 = get('http://deb.grml.org/dists/grml-testing/main/binary-amd64/Packages.gz'); + +my $file1 = Compress::Zlib::memGunzip($c_file1); +my $file2 = Compress::Zlib::memGunzip($c_file2); + +my $file1_tree; +my $file2_tree; + +my ($package, $version) = ""; + +foreach my $line (split('\n', $file1)) { + if ($line =~ m/^Package: (.*)/) { + $package = $1; + } elsif ($line =~ m/^Version: (.*)/) { + $file1_tree->{$package} = "$1"; + } +} + +foreach my $line (split('\n', $file2)) { + if ($line =~ m/^Package: (.*)/) { + $package = $1; + } elsif ($line =~ m/^Version: (.*)/) { + $file2_tree->{$package} = "$1"; + } +} + + +foreach my $key (keys %{$file1_tree}) { + if (defined $file2_tree->{$key}) { + print "package $key version " . $file1_tree->{$key} . " on repo1 is ", + (describe $vs->compare($file1_tree->{$key}, $file2_tree->{$key})), + " " . $file2_tree->{$key} . " on repo2\n"; + } else { + print "$key does not exist on repo2\n"; + } +} + +foreach my $key (keys %{$file2_tree}) { + if (not defined $file1_tree->{$key}) { + print "$key does not exist on repo1\n"; + } +} + +# EOF