c0af10719ddbe738c812b0cf6c783be95aef843a
[ikiwiki.git] / doc / todo / mercurial.mdwn
1 * Is the code sufficiently robust? It just warns when mercurial fails.
2 * When rcs_commit is called with a $user that is an openid, it will be
3   passed through to mercurial -u. Will mercurial choke on this?
4  * Nope. Mercurial doesn't expect any particular format for the username, 
5    though "Name <address@domain>" is standard. --[[bma]]
6 * The way `-u $user` is passed to `hg commit`, there's no way to tell
7   if a given commit came in over the web or was done directly. So
8   rcs_recentchanges hardcodes 'committype => "mercurial"'. See the monotone
9   backend for an example of one that does this right.
10 * The rcs_commit implementation seems not to notice if the file has been
11   changed since a web edit started. Unlike all the other frontends, which
12   use the rcstoken to detect if the web commit started editing an earlier
13   version of the file, and if so, merge the two sets of changes together.
14   It seems that with the current mercurial commit code, it will always
15   blindly overwrite the current file with the web edited version, losing
16   any other changes.
17
18 Posthook: in `$srcdir/.hg/hgrc`, I have the following
19
20     [hooks]
21     incoming.update = hg up
22     update.ikiwiki = ikiwiki --setup /path/to/ikiwiki.setup --refresh
23
24 This should update the working directory and run ikiwiki every time a change is recorded (someone who knows mercurial better than I do may be able to suggest a better way, but this works for me.)
25
26 > Try running it with --post-commit instead of --refresh. That should
27 > work better, handling both the case where the edit was made via the web
28 > and then committed, and the case where a commit was made directly.
29 > It can deadlock if the post-commit hook runs with --refresh in the
30 > former case. --[[Joey]]
31
32 The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST.
33
34 I add the following to .hg/hgrc:
35
36   [hooks]
37   changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh
38   post-commit = ikiwiki --setup path.to.setup.file --refresh
39
40 I tried the follwing commands in $SRC:
41
42   touch deadlocktest.mdwn
43   hg add
44   hg ci
45
46 No deadlock happens.  (Also I push to the $SRC from another machine, again, no deadlock.)  
47
48 Of course these tests are too simple.  The problem is I have no idea when the deadlock will happen. If someone is kind enough to point out, I will run more test.
49
50
51 ***
52
53 I have a few notes on mercurial usage after trying it out for a while:
54
55 1. I have been using ikiwiki's `--post-commit` option without apparent problems. I'm the only current user of my wiki, though.
56
57 1. The `ikiwiki.setup` file included in ikiwiki works with mercurial's `hgserve`, which is not the preferred solution. Mercurial's `hgwebdir.cgi` is more flexible and doesn't require running a server. I have this in my .setup file:
58
59         # Mercurial stuff.
60         rcs => "mercurial",
61         historyurl => "http://localhost/cgi-bin/hgwebdir.cgi/ikiwiki/log/tip/\[[file]]",
62         diffurl => "http://localhost/cgi-bin/hgwebdir.cgi/ikiwiki/diff/tip/\[[file]]",
63
64 1. I have noticed that running `ikiwiki` after a change to the wiki adds files to a directory called `recentchanges` under `$srcdir`. I don't understand why such files are needed; worse, they are not added to mercurial's list of tracked files, so they polute the output of `hg log`. Is this a bug? Should mercurial's commit hook be modified to add these files before the commit?
65
66 --buo
67
68 > No, those files should not be added to revision control. --[[Joey]]
69
70 >> OK. I see two problems:
71
72 >> 1. If I clone my wiki, I won't get an exact copy of it: I will lose the recentchanges history. This could be an acceptable limitation but IMO this should be documented.
73
74 >>> The history is stored in mercurial. How will it be lost?
75
76 >> 2. The output of `hg status` is polluted. This could be solved trivially by adding a line containing `recentchanges` to `.hgignore`. Another alternative would be to store the `recentchanges` directory inside `$srdcir/.ikiwiki`.
77
78 >> I think the ideal solution would be to build `$destdir/recentchanges/*` directly from the output of `hg log`. --[[buo]]
79
80 >>>> That would be 100 times as slow, so I chose not to do that. --[[Joey]]