(Note: this patch is built on top of Attempt to extend Mercurial backend support and rcs_get{c,m}time implementation for Mercurial backend, based on Git backend. The former is needed for the safe_hg() definition. The latter only shows up in the very last line matching of this patch.)

CC of rcs_diff implementation in git.pm with few changes. Mercurial provides the hg diff -g switch, which outputs the diff in Git-format, making the implementation easy. I think it's a good idea to base mercurial.pm as much as possible om git.pm to simplify and be able to benefit from the maintenance of git.pm, which probably is more used.

Patch at my hg repo (raw format).

--Daniel Andersson

Guess that makes sense, done --Joey


diff -r 1b6c46b62a28 -r cc73d670bf99 Plugin/mercurial.pm
--- a/Plugin/mercurial.pm   Tue Jul 19 13:35:17 2011 +0200
+++ b/Plugin/mercurial.pm   Tue Jul 19 13:35:37 2011 +0200
@@ -307,7 +307,23 @@
 }

 sub rcs_diff ($;$) {
-   # TODO
+   my $rev=shift;
+   my $maxlines=shift;
+   my @lines;
+   my $addlines=sub {
+       my $line=shift;
+       return if defined $maxlines && @lines == $maxlines;
+       push @lines, $line."\n"
+           if (@lines || $line=~/^diff --git/);
+       return 1;
+   };
+   safe_hg(undef, $addlines, "hg", "diff", "-c", $rev, "-g");
+   if (wantarray) {
+       return @lines;
+   }
+   else {
+       return join("", @lines);
+   }
 }

 {