diff options
author | Joachim Breitner <mail@joachim-breitner.de> | 2015-08-12 13:37:40 +0200 |
---|---|---|
committer | Joachim Breitner <mail@joachim-breitner.de> | 2015-08-12 14:17:59 +0200 |
commit | bd884124b283492815c807dfe3f27c534507dbcd (patch) | |
tree | 90b2ef8036d2537f05050dfa285641037afb67df | |
parent | 60d5a8a2548cf5304937ba48ac34a554983145fc (diff) | |
download | DHG_packages-bd884124b283492815c807dfe3f27c534507dbcd.tar.gz |
New script: what to upgrade
compares the packages with the package plan and tells you what needs
upgrading.
-rwxr-xr-x | what-to-upgrade.pl | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/what-to-upgrade.pl b/what-to-upgrade.pl new file mode 100755 index 000000000..5bff304d1 --- /dev/null +++ b/what-to-upgrade.pl @@ -0,0 +1,64 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use File::Slurp; + +my @dirs = @ARGV; + +unless (@dirs) { + @dirs = glob 'p/*/'; +} + +my %plan; +open PLAN, '<', '../package-plan/packages.txt' or die @!; +while (<PLAN>) { + chomp; + next if /^#/; + next if /^\s*$/; + unless (m/^(.*?) (.*?)(?: ([^#]*))?(?:#.*)?$/) { + print "Ignoring unparseable line $.: $_\n"; + } + my ($pkg,$version,$attribs) = ($1,$2,$3); + $plan{$pkg} = $version; +} +close PLAN or die @!; + +for my $dir (@dirs) { + my $changelog = "$dir/debian/changelog"; + my $watchfile = "$dir/debian/watch"; + next unless -r $changelog; + next unless -r $watchfile; + + open CHANGELOG, '<', $changelog or die @!; + my $firstline = <CHANGELOG>; + if ($firstline =~ m/([\w-]+) \(([\w:~.+-]+)\) (\w+);/) { + my ($source, $version, $suite) = ($1, $2, $3); + my ($cabal_version) = ($version =~ m/(?:.*:)?(.*)-.*?/); + + my $watch = read_file($watchfile) or die @!; + unless ($watch =~ m!http://hackage.haskell.org/package/(.*)/distro-monitor!) { + #printf STDERR "Cannot parse watchfile %s\n", $watchfile; + # ignore packages with non-standard watch files + next + } + my $cabal_package = $1; + + unless (exists $plan{$cabal_package}) { + printf STDERR "W: package %s not in the package plan\n", + $dir, $cabal_package; + next + } + + if ($cabal_version ne $plan{$cabal_package}) { + printf "%s\n", $dir; + } + } else { + printf STDERR "Cannot parse %s:\n%s", $changelog, $firstline; + next + } +} + + + |