1. diff -r b08179653c00 IkiWiki.pm
  2. --- a/IkiWiki.pm    Wed Jul 20 16:56:09 2011 +0200
  3. +++ b/IkiWiki.pm    Wed Jul 20 19:28:21 2011 +0200
  4. @@ -2059,6 +2059,10 @@
  5.     $hooks{rcs}{rcs_getmtime}{call}->(@_);
  6.  }
  7.  
  8. +sub rcs_wrapper_postcall (@) {
  9. +   $hooks{rcs}{rcs_wrapper_postcall}{call}->(@_);
  10. +}
  11. +
  12.  sub rcs_receive () {
  13.     $hooks{rcs}{rcs_receive}{call}->();
  14.  }
  15. diff -r b08179653c00 IkiWiki/Plugin/mercurial.pm
  16. --- a/IkiWiki/Plugin/mercurial.pm   Wed Jul 20 16:56:09 2011 +0200
  17. +++ b/IkiWiki/Plugin/mercurial.pm   Wed Jul 20 19:28:21 2011 +0200
  18. @@ -21,6 +21,7 @@
  19.     hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
  20.     hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
  21.     hook(type => "rcs", id => "rcs_getmtime", call => \&rcs_getmtime);
  22. +   hook(type => "rcs", id => "rcs_wrapper_postcall", call => \&rcs_wrapper_postcall);
  23.  }
  24.  
  25.  sub checkconfig () {
  26. @@ -28,6 +29,7 @@
  27.         push @{$config{wrappers}}, {
  28.             wrapper => $config{mercurial_wrapper},
  29.             wrappermode => (defined $config{mercurial_wrappermode} ? $config{mercurial_wrappermode} : "06755"),
  30. +           wrapper_postcall => (defined $config{mercurial_wrapper_hgrc_update} ? $config{mercurial_wrapper_hgrc_update} : "1"),
  31.         };
  32.     }
  33.  }
  34. @@ -53,6 +55,13 @@
  35.             safe => 0,
  36.             rebuild => 0,
  37.         },
  38. +       mercurial_wrapper_hgrc_update => {
  39. +           type => "string",
  40. +           example => "1",
  41. +           description => "updates existing hgrc to reflect path changes for mercurial_wrapper",
  42. +           safe => 0,
  43. +           rebuild => 0,
  44. +       },
  45.         historyurl => {
  46.             type => "string",
  47.             example => "http://example.com:8000/log/tip/[[file]]",
  48. @@ -402,4 +411,23 @@
  49.     return findtimes($file, 0);
  50.  }
  51.  
  52. +sub rcs_wrapper_postcall($) {
  53. +   # Update hgrc if it exists. Change post-commit/incoming hooks with the
  54. +   # .ikiwiki suffix to point to the wrapper path given in the setup file.
  55. +   # Work with a tempfile to not delete hgrc if the loop is interrupted
  56. +   # midway.
  57. +   my $hgrc=$config{srcdir}.'/.hg/hgrc';
  58. +   my $backup_suffix='.ikiwiki.bak';
  59. +   if (-e $hgrc) {
  60. +       use File::Spec;
  61. +       my $mercurial_wrapper_abspath=File::Spec->rel2abs($config{mercurial_wrapper}, $config{srcdir});
  62. +       local ($^I, @ARGV)=($backup_suffix, $hgrc);
  63. +       while (<>) {
  64. +           s/^(post-commit|incoming)(\.ikiwiki[ \t]*=[ \t]*).*$/$1$2$mercurial_wrapper_abspath/;
  65. +           print;
  66. +       }
  67. +       unlink($hgrc.$backup_suffix);
  68. +   }
  69. +}
  70. +
  71.  1
  72. diff -r b08179653c00 IkiWiki/Setup/Automator.pm
  73. --- a/IkiWiki/Setup/Automator.pm    Wed Jul 20 16:56:09 2011 +0200
  74. +++ b/IkiWiki/Setup/Automator.pm    Wed Jul 20 19:28:21 2011 +0200
  75. @@ -75,8 +75,7 @@
  76.             print STDERR "warning: do not know how to set up the bzr_wrapper hook!\n";
  77.         }
  78.         elsif ($config{rcs} eq 'mercurial') {
  79. -           # TODO
  80. -           print STDERR "warning: do not know how to set up the mercurial_wrapper hook!\n";
  81. +           $config{mercurial_wrapper}=$config{srcdir}."/.hg/ikiwiki-wrapper";
  82.         }
  83.         elsif ($config{rcs} eq 'tla') {
  84.             # TODO
  85. @@ -182,6 +181,19 @@
  86.         }
  87.     }
  88.    
  89. +   # Setup initial config file for Mercurial to hook up the wrapper. The
  90. +   # path to the wrapper will be automatically added when it is generated.
  91. +   if ($config{rcs} eq 'mercurial' && exists $config{mercurial_wrapper}
  92. +       && length $config{mercurial_wrapper}) {
  93. +       open (HGRC, '>', $config{srcdir}.'/.hg/hgrc');
  94. +       print HGRC <<EOF;
  95. +[hooks]
  96. +post-commit.ikiwiki =
  97. +incoming.ikiwiki =
  98. +EOF
  99. +       close (HGRC);
  100. +   }
  101. +
  102.     # Add wrappers, make live.
  103.     if (system("ikiwiki", "--wrappers", "--setup", $config{dumpsetup}) != 0) {
  104.         die "ikiwiki --wrappers --setup $config{dumpsetup} failed";
  105. diff -r b08179653c00 IkiWiki/Wrapper.pm
  106. --- a/IkiWiki/Wrapper.pm    Wed Jul 20 16:56:09 2011 +0200
  107. +++ b/IkiWiki/Wrapper.pm    Wed Jul 20 19:28:21 2011 +0200
  108. @@ -238,6 +238,10 @@
  109.     }
  110.     #translators: The parameter is a filename.
  111.     debug(sprintf(gettext("successfully generated %s"), $wrapper));
  112. +
  113. +   if (defined $config{wrapper_postcall} && $config{wrapper_postcall} ) {
  114. +       IkiWiki::rcs_wrapper_postcall();
  115. +   }
  116.  }
  117.  
  118.  1