analysis
[ikiwiki] / doc / post-commit / discussion.mdwn
1 Hi Joey and many thanks for your work on ikiwiki, as usual you give us a very good soft...
2
3 I want to be able to edit my website from a navigator (with the CGI) and
4 from my favorite editor on my laptop. I have managed to use the subversion wrapper
5 so I have write a post-commit hook with : 
6
7     cd /~/wikisrc/ 
8     svn up
9     /usr/bin/ikiwiki --setup ../ikiwiki.setup
10
11 at the end.
12
13 This configuration works for me, the svn wrapper doesn't seems to
14 do the svn up stuff so I wonder if I've missed something...
15
16 Regards.
17
18 > Well, you've created a post-commit script that runs ikiwiki in setup mode.
19 > That's not how it's generally done, instead you generally configure
20 > ikiwiki to generate a post-commit _binary_ that runs ikiwiki in update
21 > mode. That binary can be installed directly as the post-commit hook, or
22 > called from an existing post-commit hook script, and it will handle the
23 > necessary svn up, and will update the wiki much quicker than your --setup
24 > command above (which rebuilds the entire wiki and all wrappers each
25 > commit)!
26 >
27 > In this wiki's setup file, I configure ikiwiki to generate a post-commit
28 > wrapper binary like so:
29
30 >       wrappers => [
31 >       {
32 >               wrapper => "/srv/svn/ikiwiki/hooks/post-commit",
33 >               wrappermode => "04755",
34 >               notify => 1,
35 >       }
36 >       ],
37
38
39 Hello, I've setup ikiwiki with subversion. I can edit pages from web browser using CGI and, when I go to recentchanges, it shows that modification with "web" word. But, if I modify any .mdwn file, it gets updated in website but it doesn't show in recentchanges entry with "svn" word. If I run "svn ci -m changes", it shows in recentchanges correctly.
40
41 So, I think I miss something, because I don't think I must run "svn add" or "svn commit" anytime I modify or create a wiki file.
42
43 Thanks
44
45 > Yes, ikiwiki does expect you to use your revision control system to check
46 > in changes. Otherwise, recentchanges cannot work right, since it uses the
47 > commit history from your revision control system. --[[Joey]]
48
49 -----
50
51 I'm working on an [[rcs]] plugin for CVS, adapted from `svn.pm`, in order
52 to integrate ikiwiki at sites where that's all they've got. What's working
53 so far: web commit (post-commit hook and all), diff, add (under certain
54 conditions), and remove. What's not working: with rcs_add(), iff any of the
55 new page's parent dirs aren't already under CVS control and the post-commit
56 hook is enabled, the browser and ikiwiki stall for several seconds trying
57 to add it, then time out. (If I kill ikiwiki when this is happening, it cvs
58 adds the topmost parent that needed adding; if I wait for timeout, it
59 doesn't. I think.) If I disable the post-commit hook and do the same kind
60 of thing, the page is created and saved.
61
62 In case you're lucky enough not to know, cvs adds on directories are weird
63 -- they operate immediately against the repository, unlike file adds:
64
65     $ cvs add randomdir
66     Directory /Users/schmonz/Documents/cvswiki/repository/ikiwiki/randomdir added to the repository
67
68 I was able to work out that when I'm seeing this page save misbehavior, my
69 plugin is somewhere inside `system("cvs", "-Q", "add", "$file")`, which was
70 never returning. If I changed it to anything other than cvs it iterated
71 correctly over all the parent dirs which needed to be added to CVS, in the
72 proper order. (cvs add isn't recursive, sadly.)
73
74 Can you offer an educated guess what's going wrong here? --[[Schmonz]]
75
76 > Got `rcs_recentchanges` working, believe it or not, thanks to
77 > [cvsps](http://www.cobite.com/cvsps/). If I can figure out this
78 > interaction between the post-commit hook and `cvs add` on directories,
79 > the CVS plugin is mostly done. Could it be a locking issue? Where should
80 > I be looking? Any suggestions appreciated. --[[Schmonz]]
81
82 >> Locking certianly seems likely to be a problem. ikiwiki calls `rcs_add`
83 >> *before* disabling the post-commit plugin, since all over VCS allow
84 >> adding something in a staged manner. You can see this in, for example,
85 >> `editpage.pm` lines 391+.
86 >> 
87 >> So I guess what happens is that ikiwiki has taken the wiki lock, calls
88 >> `rcs_add`, which does a `cvs add`, which runs the post commit hook,
89 >> since it is not disabled -- which blocks waiting for the wiki lock.
90 >>
91 >> I guess you can fix this in either of three ways: Modify lots of places
92 >> in ikiwiki to disable the post commit hook before calling `rcs_add`,
93 >> or make cvs's `rcs_add` temporarily disable the commit hook and
94 >> re-enable it (but only if it was not already disabled, somehow),
95 >> or make cvs's `rcs_add` only make note that it needs to call `cvs add`
96 >> later, and do so at `rcs_commit`. The last of these seems easist,
97 >> especially since ikiwiki always commits after an add, in the same
98 >> process, so you could just use a temporary list of things to add.
99 >> --[[Joey]]