From c46bcb425af0948ac59581d6ba7b477826d83ae3 Mon Sep 17 00:00:00 2001
From: Joey Hess <joey@kitenet.net>
Date: Wed, 23 Jun 2010 15:32:27 -0400
Subject: [PATCH] Add new optional field usershort to rcs_recentchanges.

Now the git plugin supports commits with author fields that look like:
Author: http://my.openid/ <me@web>

Then in recentchanges, the short username will be displayed, linking
to the openid.

Particularly useful for the horrible google openids, of course.
---
 IkiWiki/Plugin/git.pm           | 15 +++++++++++----
 IkiWiki/Plugin/recentchanges.pm |  3 +--
 debian/changelog                |  6 ++++++
 doc/plugins/write.mdwn          |  4 +++-
 4 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index 222692eda..a43b85920 100644
--- a/IkiWiki/Plugin/git.pm
+++ b/IkiWiki/Plugin/git.pm
@@ -342,8 +342,9 @@ sub parse_diff_tree ($) {
 			$ci{ "${who}_epoch" } = $epoch;
 			$ci{ "${who}_tz"    } = $tz;
 
-			if ($name =~ m/^[^<]+\s+<([^@>]+)/) {
-				$ci{"${who}_username"} = $1;
+			if ($name =~ m/^([^<]+)\s+<([^@>]+)/) {
+				$ci{"${who}_name"} = $1;
+				$ci{"${who}_username"} = $2;
 			}
 			elsif ($name =~ m/^([^<]+)\s+<>$/) {
 				$ci{"${who}_username"} = $1;
@@ -588,9 +589,14 @@ sub rcs_recentchanges ($) {
 			push @messages, { line => $line };
 		}
 
-		my $user=$ci->{'author_username'};
+		my $user=$ci->{'author_name'};
+		my $usershort=$ci->{'author_username'};
 		my $web_commit = ($ci->{'author'} =~ /\@web>/);
-		
+
+		if ($usershort =~ /:\/\//) {
+			$usershort=undef; # url; not really short
+		}
+
 		# compatability code for old web commit messages
 		if (! $web_commit &&
 		      defined $messages[0] &&
@@ -603,6 +609,7 @@ sub rcs_recentchanges ($) {
 		push @rets, {
 			rev        => $sha1,
 			user       => $user,
+			usershort  => $usershort,
 			committype => $web_commit ? "web" : "git",
 			when       => $when,
 			message    => [@messages],
diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm
index e546e4702..9f188cbff 100644
--- a/IkiWiki/Plugin/recentchanges.pm
+++ b/IkiWiki/Plugin/recentchanges.pm
@@ -114,12 +114,11 @@ sub store ($$$) {
 	];
 	push @{$change->{pages}}, { link => '...' } if $is_excess;
 
-	# See if the committer is an openid.
 	$change->{author}=$change->{user};
 	my $oiduser=eval { IkiWiki::openiduser($change->{user}) };
 	if (defined $oiduser) {
 		$change->{authorurl}=$change->{user};
-		$change->{user}=$oiduser;
+		$change->{user}=defined $change->{usershort} ? $change->{usershort} : $oiduser;
 	}
 	elsif (length $config{cgiurl}) {
 		$change->{authorurl} = IkiWiki::cgiurl(
diff --git a/debian/changelog b/debian/changelog
index 032041346..01d0abb47 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ikiwiki (3.20100624) UNRELEASED; urgency=low
+
+  * Add new optional field usershort to rcs_recentchanges.
+
+ -- Joey Hess <joeyh@debian.org>  Wed, 23 Jun 2010 15:30:04 -0400
+
 ikiwiki (3.20100623) unstable; urgency=low
 
   * openid: Add openid_realm and openid_cgiurl configuration options,
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 193005565..5f0e95a9f 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -1103,7 +1103,9 @@ The data structure returned for each change is:
 
 	{
 		rev => # the RCSs id for this commit
-		user => # name of user who made the change,
+		user => # user who made the change (may be an openid),
+		usershort => # short name of user (optional; not an openid),
+		
 		committype => # either "web" or the name of the rcs,
 		when => # time when the change was made,
 		message => [
-- 
2.39.5