#!/usr/bin/perl

use strict;

my $rev = undef;
if ($#ARGV >= 0) {
	$rev = shift @ARGV;
} else {
	open(REV, "git svn log REVISION|") || die;
	while (<REV>) {
		next unless (m/^(r[0-9]+)/);
		#top revision is WD, skip it
		if (not defined $rev) {
			$rev = $1;
			next;
		} else {
			$rev = $1;
			last;
		}
	}
}

die unless $rev =~ m/^r([0-9]+)$/;
$rev = $1;

sub escapelatex {
	my $s = shift;
	$s =~ s/[\\]/\\textbackslash /go;
	$s =~ s/([&#%{}\$])/\\$1/go;
	$s =~ s/[~]/\\~{}/go;
	$s =~ s/(https?:\S*)/\\url{$1}/go;
#1st line always on a separate paragraph
	$s =~ s/\n/\n\n/o;
#Guess where new paragraph starts
	$s =~ s/\\.\n/.\n\n/go;
	$s =~ s/\n-/\n\n-/go;
	return $s;
}

#map editors to authors
my %editors = {};
$editors{'rusty'} = 'Rusty Russell <rusty@au1.ibm.com>';
$editors{'hornet'} = 'Pawel Moll <pawel.moll@arm.com>';
$editors{'cornelia.huck'} = 'Cornelia Huck <cornelia.huck@de.ibm.com>';
$editors{'mstsirkin'} = 'Michael S. Tsirkin <mst@redhat.com>';

my $cl = "";
my $signoff = undef;
my $editor = undef;
my $date = undef;
my $r = undef;
open(LOG, "git svn log *tex|") || die;
my $line = undef;
while (<LOG>) {
	if (m/^------------------------------------------------------------------------$/) {
		next if ($cl eq "");
		# act on it
		my $author;
		if (defined $signoff) {
			$author = $signoff;
		} else {
			$author = $editors{$editor};
		}
		#strip mail info
		$author =~ s/\s*<.*//;
		$cl = escapelatex($cl);
		print "$r & $date & $author & { $cl } \\\\\n";
		print "\\hline\n";

		$cl = "";
		$signoff = undef;
		$editor = undef;
		$date = undef;
		$r = undef;

		$line = 0;
		next;
	}
	$line++;
#r164 | mstsirkin | 2013-12-08 14:30:55 +0200 (Sun, 08 Dec 2013)| 6 lines

	if ($line eq 1) {
		die unless (m/^r[0-9]/);
		my @rinfo = split(/\s*\Q|\E\s*/, $_);
		$r = $rinfo[0];

		die unless $r =~ m/^r([0-9]+)$/;
		$r = $1;
		last if ($r <= $rev);

		$editor = $rinfo[1];
		$date = $rinfo[2];
		die unless ($date =~ m/^[^(]*\([^,]*,\s*([^)]+)\)\s*$/);
		$date = $1;
		next;
	}
	next if (m/^$/);

	# First signature is the author: needed?
	# ignore for now
	#if (not defined $signoff and m/^Signed-off-by:\s*(.*)/) {
	#	$signoff = $1;
	#}
	# skip signatures
	next if (m/^\s*[A-Z][A-Za-z-]*-by:/);


	# fix bug: wrong date in some commit logs
	if (/Change accepted on VIRTIO TC Meeting, 3 December 2013/) {
		$_ = "Change accepted on Virtio TC Meeting Minutes: Feb 25, 2014\n";
	}

	$cl .= $_;
}
