#!/usr/bin/perl -W
# SPDX-License-Identifier: GPL-2.0
#
# 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 $major_version = substr($root_version, 0, 1);

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/v$major_version.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-Type line
		if ($line =~ m/Content-Type:/) {
			# 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";
