From: Joey Hess Date: Sat, 1 Aug 2009 01:06:15 +0000 (-0400) Subject: Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info X-Git-Tag: 3.15~65 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f3288100175bfae15a954e39916ef227e5cc9d0a;p=ikiwiki.git Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info Conflicts: doc/post-commit/discussion.mdwn --- f3288100175bfae15a954e39916ef227e5cc9d0a diff --cc doc/post-commit/discussion.mdwn index 85853c945,52642c36b..6ae0d9bcb --- a/doc/post-commit/discussion.mdwn +++ b/doc/post-commit/discussion.mdwn @@@ -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 ` 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 ` 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]]