summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Breitner <mail@joachim-breitner.de>2015-08-12 13:37:40 +0200
committerJoachim Breitner <mail@joachim-breitner.de>2015-08-12 14:17:59 +0200
commitbd884124b283492815c807dfe3f27c534507dbcd (patch)
tree90b2ef8036d2537f05050dfa285641037afb67df
parent60d5a8a2548cf5304937ba48ac34a554983145fc (diff)
downloadDHG_packages-bd884124b283492815c807dfe3f27c534507dbcd.tar.gz
New script: what to upgrade
compares the packages with the package plan and tells you what needs upgrading.
-rwxr-xr-xwhat-to-upgrade.pl64
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
+ }
+}
+
+
+