# Something has been committed, has this file changed?
my ($out, $err);
- #$automator->setOpts("-r", $oldrev, "-r", $rev);
- #my ($out, $err) = $automator->call("content_diff", $file);
- #debug("Problem committing $file") if ($err ne "");
- # FIXME: use of $file in these backticks is not wise from a
- # security POV. Probably safe, but should be avoided
- # anyway.
- # At the moment the backticks are used because the above call using the automate
- # interface was failing. When that bug in monotone is fixed, we should switch
- # back.
- my $diff = `mtn --root=$config{mtnrootdir} au content_diff -r $oldrev -r $rev $file`; # was just $out;
-
+ $automator->setOpts("r", $oldrev, "r", $rev);
+ ($out, $err) = $automator->call("content_diff", $file);
+ debug("Problem committing $file") if ($err ne "");
+ my $diff = $out;
+
if ($diff) {
# Commit a revision with just this file changed off
# the old revision.
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");
}
}
$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
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, {
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;
return true
end
}
-EOF