[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