[Pkg-multidistrotools-commits] r17 - multidistrotools/trunk/scripts
raphink-guest at alioth.debian.org
raphink-guest at alioth.debian.org
Tue Dec 18 13:31:14 UTC 2007
Author: raphink-guest
Date: 2007-12-18 13:31:14 +0000 (Tue, 18 Dec 2007)
New Revision: 17
Added:
multidistrotools/trunk/scripts/compare-bin-versions.pl
multidistrotools/trunk/scripts/compare-versions.pl
Log:
Add compare-versions.pl and compare-bin-versions.pl
Added: multidistrotools/trunk/scripts/compare-bin-versions.pl
===================================================================
--- multidistrotools/trunk/scripts/compare-bin-versions.pl (rev 0)
+++ multidistrotools/trunk/scripts/compare-bin-versions.pl 2007-12-18 13:31:14 UTC (rev 17)
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+#
+# compare-bin-versions.pl - Raphael Pinson <raphink at gmail.com>
+#
+
+use strict;
+use warnings;
+use File::HomeDir;
+use List::MoreUtils qw(uniq);
+
+my $home = File::HomeDir->my_home;
+my $mdtdir = "$home/.multidistrotools";
+
+my ($dist1,$dist2) = @ARGV;
+
+
+if ( ! $dist1 || ! $dist2 ) {
+ die "Usage: mdt compare-bin-versions sarge etch";
+}
+
+
+my %listdir;
+
+$listdir{$dist1} = "$mdtdir/$dist1/var/lib/apt/lists";
+$listdir{$dist2} = "$mdtdir/$dist2/var/lib/apt/lists";
+
+my %packages;
+
+my %all_files;
+my %dist_files;
+
+foreach my $dist ($dist1, $dist2) {
+ opendir(LISTDIR, $listdir{$dist}) || die "Could not open dir $listdir{$dist} : $!\n";
+ @{$all_files{$dist}} = readdir(LISTDIR);
+ closedir(LISTDIR);
+
+ @{$dist_files{$dist}} = grep { /.*_Packages$/ } @{$all_files{$dist}};
+}
+
+
+######################################
+### Functions
+######################################
+
+
+sub parseFile {
+ my ($file) = @_;
+
+ # Parse a source file and returns results as a hash
+
+ open(FILE, "$file") || die("Could not open $file : $!\n");
+
+ # Use %tmp hash to store tmp data
+ my %tmp;
+ my %result;
+
+ while (my $line = <FILE>) {
+ if ( $line =~ m|^$| ) {
+ # Commit data if empty line
+ if ( $tmp{'Package'} ) {
+ #print "Committing data for $tmp{'Package'}\n";
+ while ( my ($field, $data) = each(%tmp) ) {
+ if ( $field ne "Package" ) {
+ $result{$tmp{'Package'}}{$field} = $data;
+ }
+ }
+ # Reset %tmp
+ %tmp = ();
+ } else {
+ warn "No Package field found. Not committing data.\n";
+ }
+ } elsif ( $line =~ m|^[a-zA-Z]| ) {
+ # Gather data
+ my ($field, $data) = $line =~ m|([a-zA-z-]+): (.*)$|;
+ if ($data) {
+ $tmp{$field} = $data;
+ }
+ }
+ }
+ close(FILE);
+
+ return \%result;
+}
+
+
+
+foreach my $dist ($dist1, $dist2) {
+ foreach my $file ( @{$dist_files{$dist}} ) {
+ my $parsed_file = parseFile("$listdir{$dist}/$file");
+ foreach my $package ( keys(%{$parsed_file}) ) {
+ if ( $packages{$dist}{$package} ) {
+ warn "Package $package is alread listed for $dist. Not overriding.\n";
+ } else {
+ $packages{$dist}{$package} = $parsed_file->{$package};
+ }
+ }
+ }
+}
+
+
+
+# Get entire list of packages
+my @all_packages = uniq sort ( keys(%{$packages{$dist1}}), keys(%{$packages{$dist2}}) );
+
+foreach my $package (@all_packages) {
+ my $line = "$package ";
+
+ foreach my $dist ($dist1, $dist2) {
+ if ( $packages{$dist}{$package} ) {
+ $line .= "$packages{$dist}{$package}{'Version'} ";
+ } else {
+ $line .= "NOTFOUND ";
+ }
+ }
+ print "$line\n";
+}
+
Property changes on: multidistrotools/trunk/scripts/compare-bin-versions.pl
___________________________________________________________________
Name: svn:executable
+ *
Added: multidistrotools/trunk/scripts/compare-versions.pl
===================================================================
--- multidistrotools/trunk/scripts/compare-versions.pl (rev 0)
+++ multidistrotools/trunk/scripts/compare-versions.pl 2007-12-18 13:31:14 UTC (rev 17)
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+#
+# compare-versions.pl - Raphael Pinson <raphink at gmail.com>
+#
+
+use strict;
+use warnings;
+use File::HomeDir;
+use List::MoreUtils qw(uniq);
+
+my $home = File::HomeDir->my_home;
+my $mdtdir = "$home/.multidistrotools";
+
+my ($dist1,$dist2) = @ARGV;
+
+
+if ( ! $dist1 || ! $dist2 ) {
+ die "Usage: mdt compare-versions sarge etch";
+}
+
+
+my %listdir;
+
+$listdir{$dist1} = "$mdtdir/$dist1/var/lib/apt/lists";
+$listdir{$dist2} = "$mdtdir/$dist2/var/lib/apt/lists";
+
+my %packages;
+
+my %all_files;
+my %dist_files;
+
+foreach my $dist ($dist1, $dist2) {
+ opendir(LISTDIR, $listdir{$dist}) || die "Could not open dir $listdir{$dist} : $!\n";
+ @{$all_files{$dist}} = readdir(LISTDIR);
+ closedir(LISTDIR);
+
+ @{$dist_files{$dist}} = grep { /.*_Sources$/ } @{$all_files{$dist}};
+}
+
+
+######################################
+### Functions
+######################################
+
+
+sub parseFile {
+ my ($file) = @_;
+
+ # Parse a source file and returns results as a hash
+
+ open(FILE, "$file") || die("Could not open $file : $!\n");
+
+ # Use %tmp hash to store tmp data
+ my %tmp;
+ my %result;
+
+ while (my $line = <FILE>) {
+ if ( $line =~ m|^$| ) {
+ # Commit data if empty line
+ if ( $tmp{'Package'} ) {
+ #print "Committing data for $tmp{'Package'}\n";
+ while ( my ($field, $data) = each(%tmp) ) {
+ if ( $field ne "Package" ) {
+ $result{$tmp{'Package'}}{$field} = $data;
+ }
+ }
+ # Reset %tmp
+ %tmp = ();
+ } else {
+ warn "No Package field found. Not committing data.\n";
+ }
+ } elsif ( $line =~ m|^[a-zA-Z]| ) {
+ # Gather data
+ my ($field, $data) = $line =~ m|([a-zA-z-]+): (.*)$|;
+ if ($data) {
+ $tmp{$field} = $data;
+ }
+ }
+ }
+ close(FILE);
+
+ return \%result;
+}
+
+
+
+foreach my $dist ($dist1, $dist2) {
+ foreach my $file ( @{$dist_files{$dist}} ) {
+ my $parsed_file = parseFile("$listdir{$dist}/$file");
+ foreach my $package ( keys(%{$parsed_file}) ) {
+ if ( $packages{$dist}{$package} ) {
+ warn "Package $package is alread listed for $dist. Not overriding.\n";
+ } else {
+ $packages{$dist}{$package} = $parsed_file->{$package};
+ }
+ }
+ }
+}
+
+
+
+# Get entire list of packages
+my @all_packages = uniq sort ( keys(%{$packages{$dist1}}), keys(%{$packages{$dist2}}) );
+
+foreach my $package (@all_packages) {
+ my $line = "$package ";
+
+ foreach my $dist ($dist1, $dist2) {
+ if ( $packages{$dist}{$package} ) {
+ $line .= "$packages{$dist}{$package}{'Version'} ";
+ } else {
+ $line .= "NOTFOUND ";
+ }
+ }
+ print "$line\n";
+}
+
Property changes on: multidistrotools/trunk/scripts/compare-versions.pl
___________________________________________________________________
Name: svn:executable
+ *
More information about the Pkg-multidistrotools-commits
mailing list