#!/usr/bin/perl -w # -*- perl -*- # # $Id: $ # Author: Slaven Rezic # # Copyright (C) 2007 Slaven Rezic. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # Mail: slaven@rezic.de # WWW: http://www.rezic.de/eserte/ # # This needs to be rewritten to be dependent only on a checked out svn # or svk repository. use strict; #use CPAN; use CPAN::Version; use ExtUtils::MakeMaker; use File::Find; use Digest::MD5 qw(); # REPO BEGIN # REPO NAME save_pwd /home/e/eserte/work/srezic-repository # REPO MD5 0f7791cf8e3b62744d7d5cfbd9ddcb07 =head2 save_pwd(sub { ... }) =for category File Save the current directory and assure that outside the block the old directory will still be valid. =cut sub save_pwd (&) { my $code = shift; require Cwd; my $pwd = Cwd::cwd(); eval { $code->(); }; my $err = $@; chdir $pwd or die "Can't chdir back to $pwd: $!"; die $err if $err; } # REPO END my $oldtkdir = "/usr/local/src/Tk-804.027-XFT/blib/lib/"; # XXX my $newtkdir = "$ENV{HOME}/work/svk-checkouts/Tk/blib/lib"; # XXX my %old_modules; my %new_modules; # my $tk_mod = CPAN::Shell->expand("Module", "Tk"); # my $tk_dist = $tk_mod->distribution; # for my $mod_id ($tk_dist->containsmods()) { # my $mod = CPAN::Shell->expand("Module", $mod_id); # # { # # no warnings 'uninitialized'; # # if ($mod->cpan_version != $mod->available_version) { # # warn "cpan/available version diffs for $mod_id: " . $mod->cpan_version . " != " . $mod->available_version . "\n"; # # } # # } # my $mod_ver = $mod->cpan_version; # $old_modules{$mod_id} = $mod_ver; # } for my $def ([$oldtkdir, \%old_modules], [$newtkdir, \%new_modules], ) { my($dir, $hashref) = @$def; save_pwd { chdir $dir or die "Can't chdir to $dir: $!"; find(sub { if (-f && /\.pm$/) { (my $mod_name = $File::Find::name) =~ s{^\./}{}; $mod_name =~ s{\.pm$}{}; $mod_name =~ s{/}{::}g; my $file = $_; my $ver = MM->parse_version($file); my $md5 = do { my $ctx = Digest::MD5->new; open my $fh, $file or die $!; $ctx->addfile($fh); $ctx->hexdigest; }; $hashref->{$mod_name} = { ver => $ver, md5 => $md5, }; } }, "."); } } while(my($k,$v) = each %old_modules) { if (!exists $new_modules{$k}) { print "Module $k vanished.\n"; } else { my $old = $old_modules{$k}; my $new = $new_modules{$k}; if (CPAN::Version->vlt($new->{ver}, $old->{ver})) { print "*** WARNING: version of $k became lower! ($old->{ver} -> $new->{ver})\n"; } if ($old->{ver} ne $new->{ver} && $old->{md5} eq $new->{md5}) { print "Unnecessary version change in $k ($old->{ver} -> $new->{ver}).\n"; } elsif ($old->{ver} eq $new->{ver} && $old->{md5} ne $new->{md5}) { print "*** $k needs version increment.\n"; } } } while(my($k,$v) = each %new_modules) { if (!exists $old_modules{$k}) { print "Module $k newly added.\n"; } } __END__