> I don't think this stuff is hard, or unlikely to work, familiarity with
> the rcs's particular details is the main thing. --[[Joey]]
-Diff follows, for anyone to annotate. Code is also available at [my hg-repo](http://510x.se/hg/program/ikiwiki/file/e741fcfd800f/Plugin/mercurial.pm).
+Diff follows, for anyone to annotate. First code version is also available at [my hg-repo](http://510x.se/hg/program/ikiwiki/file/e741fcfd800f/Plugin/mercurial.pm). Latest version should be [here](http://46.239.104.5:81/hg/program/ikiwiki/file/tip/Plugin/mercurial.pm). I'll notify on this page when I've actually commited changes. --[[Daniel Andersson]]
diff -r 20c61288d7bd Plugin/mercurial.pm
--- a/Plugin/mercurial.pm Fri Jul 15 02:55:12 2011 +0200
> Maybe.. I'd rather avoid unused cruft though. --[[Joey]]
+>> OK, will be removed. --[[Daniel Andersson]]
+
@@ -69,6 +71,62 @@
},
}
> it's quite likely this is the place the patch fails in some
> unusual circumstance.. but I think it could easily use `-R` here.
+>> It works since `if (! defined $hg_dir)` always hits, and `chdir $config{srcdir}` is well defined. The whole logic is just used in `git.pm` for merge functionality that is not present in `mercurial.pm`, so by the cruft argument, this should be replaced with just chdir `$config{srcdir}` (which is equivalent to `hg -R` or `hg --cwd` from what I know). Will be removed. --[[Daniel Andersson]]
+
+ exec @cmdline or error("Cannot exec '@cmdline': $!");
+ }
+ # In parent.
> Is this actually true for hg?
+>> I don't know. ["hg stores everything internally as UTF-8, except for pathnames"](https://jira.atlassian.com/browse/FE-3198), but output is dependent on the system's locale. The environment variable `HGENCODING=utf-8` can be set to ensure that Mercurial's own output is always UTF-8, but when viewing a diff containing non-UTF-8 changes, the affected lines are nevertheless output in their original encoding. I personally think that this is the correct way to output it, though, unless there is a possibility that someone is running ikiwiki wih a non-UTF-8 locale.
+
+>> As is demonstrated later for the `rename` plugin, there are some character encoding issues, though. --[[Daniel Andersson]]
+
+ my @lines;
+ while (<$OUT>) {
+ $_=decode_utf8($_, 0);
> This `%env` stash is unused; `%ENV` is never modified.
+>> Yes, the code is missing setting the username at all. The local `hgrc` file is always used. I'll add setting of `$ENV{HGUSER}`. --[[Daniel Andersson]]
+
+
my $user="Anonymous";
if (defined $params{session}) {
> Exactly how to encode the nickname from openid in the commit metadata,
> and get it back out in `rcs_recentchanges`, would probably vary from git.
+>> I'll test and see. --[[Daniel Andersson]]
+
@@ -143,43 +206,45 @@
$params{message} = "no message given";
}
> Remainder seems ok to me. Should probably test that the remove plugin
> works, since this implements `rcs_remove` too and you didn't mention
> any tests that would run that code path. --[[Joey]]
+
+>> I tested `rename`. It fails if the page title includes e.g. åäö. Trying to rename a page from "title without special chars" to "title with åäö" renders in `/var/log/apache2/error.log`:
+
+ [Fri Jul 15 14:58:17 2011] [error] [client 46.239.104.5] transaction abort!, referer: http://46.239.104.5:81/blog/ikiwiki.cgi
+ [Fri Jul 15 14:58:17 2011] [error] [client 46.239.104.5] rollback completed, referer: http://46.239.104.5:81/blog/ikiwiki.cgi
+ [Fri Jul 15 14:58:17 2011] [error] [client 46.239.104.5] abort: decoding near 'itle_with_\xc3\xa5\xc3\xa4\xc3\xb6.mdw': 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)!, referer: http://46.239.104.5:81/blog/ikiwiki.cgi
+ [Fri Jul 15 14:58:17 2011] [error] [client 46.239.104.5] 'hg commit -m rename posts/title_without_special_chars.mdwn to posts/title_with_\xc3\xa5\xc3\xa4\xc3\xb6.mdwn -q' failed: at /usr/share/perl5/IkiWiki/Plugin/mercurial.pm line 123., referer: http://46.239.104.5:81/blog/ikiwiki.cgi
+
+>> When this has happened, directly following by `rename` and `remove` doesn't work as it should, since the file is not commited. `hg remove -f` doesn't physically remove files that aren't tracked (no `hg` command does). Perhaps a regular `unlink $file` should be called to not clutter the source dir if `hg remove` failed because the file wasn't tracked. --[[Daniel Andersson]]
+
+>> I've also noted that when a post is added or removed, the commit message lacks the page title. It contains the title when the page is renamed though, so it should be an easy fix. I'll look into it. --[[Daniel Andersson]]