--- /dev/null
+#!/usr/bin/perl -W
+#
+# This takes a mbox of email, created with 'quilt mail --mbox'
+# and formats it in the proper way to send off a -stable kernel review.
+#
+# This means:
+# - strip off some quilt headers and the threading
+# - add some text at the top of every message.
+#
+# Written in perl because the bash version is broken, it doesn't pass
+# through the patch correctly :(
+#
+
+my $line;
+
+my $root_version = shift;
+
+if ($root_version eq "") {
+ print "must provide kernel root version number\n";
+ die;
+}
+
+my $full_version = shift;
+if ($full_version eq "") {
+ print "must provide kernel full version number\n";
+ die;
+}
+my $mbox = shift;
+
+if ($mbox eq "") {
+ print "must provide the name of the mbox file\n";
+ die;
+}
+
+my $date=`date -u --iso-8601=minutes --date="2 days"`;
+chomp($date);
+
+$mboxnew = "$mbox.new";
+chomp($mboxnew);
+
+open MBOX, "$mbox" || die "Failed to open $mbox";
+open FILE, ">$mboxnew" || die "Failed to create $mboxnew";
+
+my $header = "true";
+my $eat = "false";
+my $tags_written = "false";
+my $stable_tag_written = "false";
+
+while ($line = <MBOX>) {
+ $eat = "false";
+
+ if ($header eq "false") {
+ if ($line =~ m/^From /) {
+ # start of a message, this is the header
+ $header = "true";
+ }
+ }
+
+ if ($header eq "true") {
+ if ($stable_tag_written eq "false") {
+ if ($line =~ m/^Subject:/) {
+ # always add a "X-stable: review" tag
+ print FILE "X-stable: review\n";
+ $stable_tag_written = "true";
+ # and a "X-Patchwork-Hint: ignore" tag
+ print FILE "X-Patchwork-Hint: ignore\n"
+ }
+ }
+
+ # if first Subject: line, add our tags
+ if ($tags_written eq "false") {
+ if ($line =~ m/^Subject:/) {
+ # write out our own X-KernelTest tags to make automated tools's lives easier
+ print FILE "X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-$full_version.gz\n";
+ print FILE "X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git\n";
+ print FILE "X-KernelTest-Branch: linux-$root_version.y\n";
+ print FILE "X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git\n";
+ print FILE "X-KernelTest-Version: $full_version\n";
+ print FILE "X-KernelTest-Deadline: $date\n";
+
+ $tags_written = "true";
+
+ # hack around the fact that content-type is not in the 000 message
+ # and so the 001 message will not get the X- flags we want to set above
+ $stable_tag_written = "false";
+ }
+ }
+
+ # strip out References line
+ if ($line =~ m/^References:/) {
+ # eat the line
+ $eat = "true";
+ }
+ # strip out the Content-Disposition line
+ if ($line =~ m/Content-Disposition:/) {
+ # eat the line
+ $eat = "true";
+
+ # we are now out of the header
+ $header = "false";
+ $stable_tag_written = "false";
+
+ # write out our custom header too
+ print FILE "\n";
+ print FILE "$root_version-stable review patch. If anyone has any objections, please let me know.\n";
+ print FILE "\n";
+ print FILE "------------------\n";
+ }
+ }
+
+ if ($eat eq "false") {
+ print FILE $line;
+ }
+}
+close MBOX;
+close FILE;
+
+#print "# New mailbox is in $mboxnew\n";
+#print "# To send the patches out, do:\n";
+#print "cat $mboxnew | formail -A \"In-Reply-To: <FOO>\" -s msmtp-enqueue.sh\n";
+#print "# or\n";
+#print "< $mboxnew formail -ds sh -c 'cat > msg.\$FILENO'\n";