X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b11ddb88e608a6dd5e95f95bff2c506674c4fad8..376944cb026945ab597db01eb1e3aea4fa320007:/IkiWiki/Rcs/monotone.pm

diff --git a/IkiWiki/Rcs/monotone.pm b/IkiWiki/Rcs/monotone.pm
index e0f2e046a..c4a6d9864 100644
--- a/IkiWiki/Rcs/monotone.pm
+++ b/IkiWiki/Rcs/monotone.pm
@@ -342,10 +342,10 @@ sub rcs_commit ($$$;$$) { #{{{
 		return $conflict;
 	}
 	if (defined($config{mtnsync}) && $config{mtnsync}) {
-		if (system("mtn", "--root=$config{mtnrootdir}", "sync",
+		if (system("mtn", "--root=$config{mtnrootdir}", "push",
 		           "--quiet", "--ticker=none", "--key",
 		           $config{mtnkey}) != 0) {
-			debug("monotone sync failed");
+			debug("monotone push failed");
 		}
 	}
 
@@ -416,7 +416,7 @@ sub rcs_recentchanges ($) { #{{{
 						$committype = "monotone";
 					}
 				} elsif ($cert->{name} eq "date") {
-					$when = time - str2time($cert->{value}, 'UTC');
+					$when = str2time($cert->{value}, 'UTC');
 				} elsif ($cert->{name} eq "changelog") {
 					my $messageText = $cert->{value};
 					# split the changelog into multiple
@@ -431,14 +431,32 @@ sub rcs_recentchanges ($) { #{{{
 		my @changed_files = get_changed_files($automator, $rev);
 		my $file;
 		
+		my ($out, $err) = $automator->call("parents", $rev);
+		my @parents = ($out =~ m/^($sha1_pattern)$/);
+		my $parent = $parents[0];
+
 		foreach $file (@changed_files) {
-			push @pages, {
-				page => pagename($file),
-			} if length $file;
+			next unless length $file;
+			
+			if (defined $config{diffurl} and (@parents == 1)) {
+				my $diffurl=$config{diffurl};
+				$diffurl=~s/\[\[r1\]\]/$parent/g;
+				$diffurl=~s/\[\[r2\]\]/$rev/g;
+				$diffurl=~s/\[\[file\]\]/$file/g;
+				push @pages, {
+					page => pagename($file),
+					diffurl => $diffurl,
+				};
+			}
+			else {
+				push @pages, {
+					page => pagename($file),
+				}
+			}
 		}
 		
 		push @ret, {
-			id => $rev,
+			rev => $rev,
 			user => $user,
 			committype => $committype,
 			when => $when,
@@ -452,54 +470,6 @@ sub rcs_recentchanges ($) { #{{{
 	return @ret;
 } #}}}
 
-sub rcs_notify () { #{{{
-	debug("The monotone rcs_notify function is currently untested. Use at own risk!");
-	
-	if (! exists $ENV{REV}) {
-		error(gettext("REV is not set, not running from mtn post-commit hook, cannot send notifications"));
-	}
-	if ($ENV{REV} !~ m/($sha1_pattern)/) { # sha1 is untainted now
-		error(gettext("REV is not a valid revision identifier, cannot send notifications"));
-	}
-	my $rev = $1;
-	
-	check_config();
-
-	my $automator = Monotone->new();
-	$automator->open(undef, $config{mtnrootdir});
-
-	my $certs = [read_certs($automator, $rev)];
-	my $user;
-	my $message;
-	my $when;
-
-	foreach my $cert (@$certs) {
-		if ($cert->{signature} eq "ok" && $cert->{trust} eq "trusted") {
-			if ($cert->{name} eq "author") {
-				$user = $cert->{value};
-			} elsif ($cert->{name} eq "date") {
-				$when = $cert->{value};
-			} elsif ($cert->{name} eq "changelog") {
-				$message = $cert->{value};
-			}
-		}
-	}
-		
-	my @changed_pages = get_changed_files($automator, $rev);
-	
-	$automator->close();
-	
-	require IkiWiki::UserInfo;
-	send_commit_mails(
-		sub {
-			return $message;
-		},
-		sub {
-			`mtn --root=$config{mtnrootdir} au content_diff -r $rev`;
-		},
-		$user, @changed_pages);
-} #}}}
-
 sub rcs_getctime ($) { #{{{
 	my $file=shift;
 
@@ -604,4 +574,3 @@ __DATA__
 	           return true
 	      end
 	}
-EOF