]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Rcs/monotone.pm
Merge branch 'master' of ssh://git.kitenet.net/srv/git/ikiwiki.info
[ikiwiki.git] / IkiWiki / Rcs / monotone.pm
index e0f2e046a3c9ffd4c76da717a9a82429a0391094..06615da111a6ce4f2aa6b24ff71df24b9f73830b 100644 (file)
@@ -136,6 +136,11 @@ sub check_mergerc () { #{{{
                debug("$mergerc doesn't exist. Creating file with default mergers.");
                open (my $out, ">", $mergerc) or error("can't open $mergerc: $!");
                print $out <DATA>;
+               print $out <<"EOF";
+       function note_netsync_revision_received(new_id, revision, certs, session_id)
+               execute("$config{mtnrootdir}/_MTN/ikiwiki-netsync-hook", new_id)
+       end
+EOF
                close $out;
        }
 } #}}}
@@ -342,10 +347,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 +421,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 +436,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,52 +475,8 @@ 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_diff ($) { #{{{
+       # TODO
 } #}}}
 
 sub rcs_getctime ($) { #{{{
@@ -604,4 +583,3 @@ __DATA__
                   return true
              end
        }
-EOF