[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