The bzr plugin does not seem to define the rcs_diff subroutine. I got the follow error after enabling recentchangesdiff: "Undefined subroutine &IkiWiki::Plugin::bzr::rcs_diff called at /usr/share/perl5/IkiWiki.pm line 1590." Grepping to verify absence of rcs_diff: $ grep rcs_diff /usr/share/perl5/IkiWiki/Plugin/{git,bzr}.pm /usr/share/perl5/IkiWiki/Plugin/git.pm: hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); /usr/share/perl5/IkiWiki/Plugin/git.pm:sub rcs_diff ($) { /usr/share/perl5/IkiWiki/Plugin/bzr.pm: hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); > I've added the minimal stub needed to avoid the crash, but for > recentchangesdiff to work, someone needs to implement `rcs_diff` for bzr. > This should be trivial if you know and use bzr. The function > is passed as a parameter the revno of interest and just needs > to ask bzr for the diff between that and the previous version. --[[Joey]] >> I'll see if I can make a patch. The bzr command to get the revision would >> look like this: bzr diff -r revno:$PREV:/path/to/src..revno:$REVNO:/path/to/src >> (where $PREV would be $REVNO minus one). --liw >> Sorry, that was not entirely correct, for some reason. I'll add a patch below that >> seems to work. I am unfortunately not ready to set up a git repository that you >> can pull from. --liw diff --git a/IkiWiki/Plugin/.bzr.pm.swp b/IkiWiki/Plugin/.bzr.pm.swp new file mode 100644 index 0000000..712120c Binary files /dev/null and b/IkiWiki/Plugin/.bzr.pm.swp differ diff --git a/IkiWiki/Plugin/bzr.pm b/IkiWiki/Plugin/bzr.pm index 783623d..f1d5854 100644 --- a/IkiWiki/Plugin/bzr.pm +++ b/IkiWiki/Plugin/bzr.pm @@ -256,7 +256,25 @@ sub rcs_recentchanges ($) { } sub rcs_diff ($) { - # TODO + my $taintedrev=shift; + my ($rev) = $taintedrev =~ /^(\d+(\.\d+)*)$/; # untaint + print STDERR "taintedrev: $taintedrev\nrev: $rev\n"; + + my $prevspec = "before:" . $rev; + my $revspec = "revno:" . $rev; + my @cmdline = ("bzr", "diff", "--old", $config{srcdir}, + "--new", $config{srcdir}, + "-r", $prevspec . ".." . $revspec); + print STDERR "cmdline: @cmdline\n"; + open (my $out, "@cmdline |"); + + my @lines = <$out>; + if (wantarray) { + return @lines; + } + else { + return join("", @lines); + } } sub rcs_getctime ($) {