Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info
authorJoey Hess <joey@gnu.kitenet.net>
Sat, 1 Aug 2009 01:06:15 +0000 (21:06 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Sat, 1 Aug 2009 01:06:15 +0000 (21:06 -0400)
Conflicts:
doc/post-commit/discussion.mdwn

1  2 
doc/post-commit/discussion.mdwn

index 85853c94564d0b6c7c9d118a406e9ce27ee65a84,52642c36bb580a1b255a0e496d41ffb4c4fc970c..6ae0d9bcb3889d0bf4b7d97f2369f3701be5022c
@@@ -73,27 -59,8 +73,46 @@@ proper order. (cvs add isn't recursive
  
  Can you offer an educated guess what's going wrong here? --[[Schmonz]]
  
- > Got `rcs_recentchanges` working, believe it or not, thanks to
- > [cvsps](http://www.cobite.com/cvsps/). If I can figure out this
- > interaction between the post-commit hook and `cvs add` on directories,
- > the CVS plugin is mostly done. Could it be a locking issue? Where should
- > I be looking? Any suggestions appreciated. --[[Schmonz]]
+ > Got `rcs_recentchanges` working, believe it or not, thanks to [cvsps](http://www.cobite.com/cvsps/). If I can figure out this interaction between the post-commit hook and `cvs add` on directories, the CVS plugin is mostly done. Could it be a locking issue? Where should I be looking? Any suggestions appreciated. --[[Schmonz]]
 ->> Okay, it is definitely a locking issue. First, on the conjecture that `cvs add <directory>` was triggering the post-commit hook and confusing ikiwiki, I wrapped the ikiwiki post-commit binary with a shell script that exited 0 if the triggering file was a directory. The first half of the conjecture was correct -- my wrapper got triggered -- but the web add of `one/two/three.mdwn` (where `one` and `two` weren't existing CVS-controlled dirs) remained hung as before. There were two ikiwiki processes running. On a whim, I killed the one with the higher PID; `cvs add one` immediately completed successfully, then back to a hang and two ikiwiki processes. I killed the newer one again and then `cvs add one/two` and `cvs add one/two/three.mdwn` completed and the web add was successful. --[[Schmonz]]
++>> Okay, it is definitely a locking issue. First, on the conjecture that
++>> `cvs add <directory>` was triggering the post-commit hook and confusing
++>> ikiwiki, I wrapped the ikiwiki post-commit binary with a shell script
++>> that exited 0 if the triggering file was a directory. The first half of
++>> the conjecture was correct -- my wrapper got triggered -- but the web
++>> add of `one/two/three.mdwn` (where `one` and `two` weren't existing
++>> CVS-controlled dirs) remained hung as before. There were two ikiwiki
++>> processes running. On a whim, I killed the one with the higher PID; `cvs
++>> add one` immediately completed successfully, then back to a hang and two
++>> ikiwiki processes. I killed the newer one again and then `cvs add
++>> one/two` and `cvs add one/two/three.mdwn` completed and the web add was
++>> successful. --[[Schmonz]]
++
++>>> Aaaaaand I was wrong about the second half of the conjecture being
++>>> wrong. The wrapper script wasn't correctly identifying directories;
++>>> with that fixed, everything works. I've created a
++>>> [[plugins/contrib/cvs]] plugin page. Thanks for listening. :-)
++>>> --[[Schmonz]]
++
++>> Here is a comment I committed to my laptop from Madrid Airport before
++>> your most recent updates, in case it's still useful:
++>>
 +>> Locking certianly seems likely to be a problem. ikiwiki calls `rcs_add`
 +>> *before* disabling the post-commit plugin, since all over VCS allow
 +>> adding something in a staged manner. You can see this in, for example,
 +>> `editpage.pm` lines 391+.
 +>> 
 +>> So I guess what happens is that ikiwiki has taken the wiki lock, calls
 +>> `rcs_add`, which does a `cvs add`, which runs the post commit hook,
 +>> since it is not disabled -- which blocks waiting for the wiki lock.
 +>>
 +>> I guess you can fix this in either of three ways: Modify lots of places
 +>> in ikiwiki to disable the post commit hook before calling `rcs_add`,
 +>> or make cvs's `rcs_add` temporarily disable the commit hook and
 +>> re-enable it (but only if it was not already disabled, somehow),
 +>> or make cvs's `rcs_add` only make note that it needs to call `cvs add`
 +>> later, and do so at `rcs_commit`. The last of these seems easist,
 +>> especially since ikiwiki always commits after an add, in the same
 +>> process, so you could just use a temporary list of things to add.
 +>> --[[Joey]] 
 ->>> Aaaaaand I was wrong about the second half of the conjecture being wrong. The wrapper script wasn't correctly identifying directories; with that fixed, everything works. I've created a [[plugins/contrib/cvs]] plugin page. Thanks for listening. :-) --[[Schmonz]]