view admin/compare_md5sum @ 12669:1c92b4b26ced octave-forge

releasePKG.m: exclude .hg* files of export as of bug #45669
author jpicarbajal
date Fri, 31 Jul 2015 19:49:28 +0000
parents d6facc472a26
children
line wrap: on
line source

#!/usr/bin/env perl
#
# David Bateman Feb 27 2007
# 
# Compares the MD5 sum files of the octave-forge packages for files to update

#use strict;
use Cwd;
use File::Find;
use File::Basename;
use Text::Wrap;
use FileHandle;

my $oldmd5 = shift @ARGV;
my $newmd5 = shift @ARGV;
my %oldpkglist = parsemd5file($oldmd5);
my %newpkglist = parsemd5file($newmd5);

my %conflicts = findconflicts();
if (scalar(%conflicts)) {
    print "#### There are ", scalar(keys %conflicts), " conflicting packages ####\n";
    foreach my $name (pkgname_list(%conflicts)) {
	my $ver = $conflicts{$name}[0];
	my $md5 = $conflicts{$name}[1];
	foreach my $oldname (pkgname_list(%oldpkglist)) {
	    next unless $name =~ $oldname;
	    my $oldver = $oldpkglist{$name}[0];
	    if ($ver =~ $oldver) {
		print "$name:   has same version number but different MD5 sum\n";
	    } else {
		print "$name:   has same MD5 sum but different version number\n";
	    }
	}
    }
    die "\nPlease repair these and rebuild the  packages before continuing\n";
}

my %newpkgs = findnewpkgs();
if (scalar(%newpkgs)) {
    print "#### There are ", scalar(keys %newpkgs), " new packages ####\n";
    foreach my $name (pkgname_list(%newpkgs)) {
	my $ver = $newpkgs{$name}[0];
	my $md5 = $newpkgs{$name}[1];
	print "$name    $ver   $md5\n"
	}
    print "\n";
}

my %updatedpkgs = findupdatedpkgs();
if (scalar(%updatedpkgs)) {
    print "#### There are ", scalar(keys %updatedpkgs), " updated packages ####\n";
    foreach my $name (pkgname_list(%updatedpkgs)) {
	my $ver = $updatedpkgs{$name}[0];
	my $md5 = $updatedpkgs{$name}[1];
	print "$name    $ver   $md5\n"
    }
    print "\n";
}

if (scalar(%newpkgs) || scalar(%updatedpkgs)) {
    print "Please upload these new packages and update the website\n";
} else {
    print "Packages are all up to date\n";
}

sub findconflicts {
    my %pkglist = ();
    foreach my $name (pkgname_list(%newpkglist)) {
	if (defined $oldpkglist{$name}) {
	    my $oldmd5 = $oldpkglist{$name}[1];
	    my $newmd5 = $newpkglist{$name}[1];
	    my $oldver = $oldpkglist{$name}[0];
	    my $newver = $newpkglist{$name}[0];
	    if ($oldmd5 =~ $newmd5) {
		if (!($oldver =~ $newver)) {
		    @pkglist{$name} = [$newver, $newmd5];
		}
	    } else {
		if ($oldver =~ $newver) {
		    @pkglist{$name} = [$newver, $newmd5];
		}
	    }
	}
    }
    return %pkglist;
}

sub findupdatedpkgs {
    my %pkglist = ();
    foreach my $name (pkgname_list(%newpkglist)) {
	if (defined $oldpkglist{$name}) {
	    my $oldmd5 = $oldpkglist{$name}[1];
	    my $newmd5 = $newpkglist{$name}[1];
	    next if  $oldmd5 =~ $newmd5;
	    my $oldver = $oldpkglist{$name}[0];
	    my $newver = $newpkglist{$name}[0];
	    @pkglist{$name} = [$newver, $newmd5];
	}
    }
    return %pkglist;
}

sub findnewpkgs {
    my %pkglist = ();
    foreach my $name (pkgname_list(%newpkglist)) {
	if (!defined $oldpkglist{$name}) {
	    @pkglist{$name} = [$newpkglist{$name}[0], $newpkglist{$name}[1]];
	}
    }
    return %pkglist;
}

sub pkgname_list { # 1{{{
    my ( %pkglist ) = @_;
    return sort { uc($a) cmp uc($b) } keys %pkglist;
} # 1}}}

sub parsemd5file {
    my ($file,		# The file containing the md5 sums
	)	= @_;
    my %pkglist = ();
    open (FID, $file) or die  "Could not open file $oldmd5";
    while (<FID>) {
	s/^\s*//;
	s/\s*$//;
	next if /^$/;
	my ($name,$ver,$md5) = /([^ ]*) ([^ ]*) ([^ ]*)/;   
	@pkglist{$name} = [$ver, $md5]; 
    }
    close (FID);
    return %pkglist;
}