[kernel] r17214 - people/benh

Ben Hutchings benh at alioth.debian.org
Fri Apr 8 13:04:34 UTC 2011


Author: benh
Date: Fri Apr  8 13:03:50 2011
New Revision: 17214

Log:
Add script to list patches applied minus those reverted

Added:
   people/benh/debian-kernel-patches-list   (contents, props changed)

Added: people/benh/debian-kernel-patches-list
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ people/benh/debian-kernel-patches-list	Fri Apr  8 13:03:50 2011	(r17214)
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use FileHandle;
+use POSIX ();
+
+my @debian_revs;
+my $upstream_ver;
+my $dfsg_rev;
+
+my $log = new FileHandle('dpkg-parsechangelog --format rfc822 --all |');
+while (<$log>) {
+    next unless /^Version: (.*)-(.*)\n/;
+    my ($u, $d) = ($1, $2);
+    my $has_dfsg_rev = $u =~ s/\.dfsg\.(\d+)$//;
+    if (!defined($dfsg_rev)) {
+	$dfsg_rev = $has_dfsg_rev ? $1 : 0;
+    }
+    if (defined($upstream_ver)) {
+	last if $upstream_ver ne $u;
+    } else {
+	$upstream_ver = $u;
+    }
+    push @debian_revs, $d;
+}
+$log->close();
+
+my @series_list = (map({"orig-$_"} (0..$dfsg_rev)), 'base', reverse(@debian_revs));
+my %applied;
+my $pos = 1;
+
+for (@series_list) {
+    my $series_name = "debian/patches/series/$_";
+    my $series = new FileHandle($series_name, 'r');
+    if (!defined($series)) {
+	next if $! == POSIX::ENOENT;
+	die "$series_name: $!";
+    }
+    while (<$series>) {
+	next if /^\s*(#|$)/;
+	/^([-+X]) (\S+)\s*$/ or die "$series_name:$.: unrecognised line";
+	my ($op, $name) = ($1, $2);
+	if ($op eq '-') {
+	    if ($applied{$name}) {
+		delete $applied{$name};
+	    } else {
+		print STDERR "$series_name:$.: reverts $name; not currently applied\n";
+		$applied{$name} = -$pos;
+	    }
+	} elsif ($op eq '+') {
+	    if ($applied{$name}) {
+		if ($applied{$name} < 0) {
+		    delete $applied{$name};
+		} else {
+		    die "$series_name:$.: applies $name; already applied";
+		}
+	    } else {
+		$applied{$name} = $pos;
+	    }
+	} else {
+	    print STDERR "$series_name:$.: ignoring X $name\n";
+	}
+	++$pos;
+    }
+    $series->close();
+}
+
+# Print unreverted patches in order
+for (sort({$applied{$a} <=> $applied{$b}} keys %applied)) {
+    print "$_\n";
+}



More information about the Kernel-svn-changes mailing list