X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/efe91335c65b96f3eb8b32d8c58c9cce68db47b4..13722d7b7656f84a95a43db1d6e2fc0b5828c8d9:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 9e340c26e..23f6b1c72 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -214,6 +214,9 @@ sub genpage ($$$) { #{{{ $u=~s/\[\[file\]\]/$pagesources{$page}/g; $template->param(historyurl => $u); } + if ($config{hyperestraier}) { + $template->param(hyperestraierurl => cgiurl()); + } if ($config{rss} && $inlinepages{$page}) { $template->param(rssurl => rsspage(basename($page))); @@ -381,6 +384,57 @@ sub prune ($) { #{{{ } } #}}} +sub estcfg () { #{{{ + my $estdir="$config{wikistatedir}/hyperestraier"; + my $cgi=basename($config{cgiurl}); + $cgi=~s/\..*$//; + open(TEMPLATE, ">$estdir/$cgi.tmpl") || + error("write $estdir/$cgi.tmpl: $!"); + print TEMPLATE misctemplate("search", + "\n\n\n\n\n\n"); + close TEMPLATE; + open(TEMPLATE, ">$estdir/$cgi.conf") || + error("write $estdir/$cgi.conf: $!"); + my $template=HTML::Template->new( + filename => "$config{templatedir}/estseek.conf" + ); + eval q{use Cwd 'abs_path'}; + $template->param( + index => $estdir, + tmplfile => "$estdir/$cgi.tmpl", + destdir => abs_path($config{destdir}), + url => $config{url}, + ); + print TEMPLATE $template->output; + close TEMPLATE; + $cgi="$estdir/".basename($config{cgiurl}); + unlink($cgi); + symlink("/usr/lib/estraier/estseek.cgi", $cgi) || + error("symlink $cgi: $!"); +} # }}} + +sub estcmd ($;@) { #{{{ + my @params=split(' ', shift); + push @params, "-cl", "$config{wikistatedir}/hyperestraier"; + if (@_) { + push @params, "-"; + } + + my $pid=open(CHILD, "|-"); + if ($pid) { + # parent + foreach (@_) { + print CHILD "$_\n"; + } + close(CHILD) || error("estcmd @params exited nonzero: $?"); + } + else { + # child + open(STDOUT, "/dev/null"); # shut it up (closing won't work) + exec("estcmd", @params) || error("can't run estcmd"); + } +} #}}} + sub refresh () { #{{{ # find existing pages my %exists; @@ -505,6 +559,7 @@ FILE: foreach my $file (@files) { if (globlist_match($page, $inlinepages{$p})) { debug("rendering $f, which inlines $page"); render($f); + $rendered{$f}=1; last; } } @@ -539,9 +594,25 @@ FILE: foreach my $file (@files) { if (defined $linkfile) { debug("rendering $linkfile, to update its backlinks"); render($linkfile); + $rendered{$linkfile}=1; } } } + + if ($config{hyperestraier} && (%rendered || @del)) { + debug("updating hyperestraier search index"); + if (%rendered) { + estcmd("gather -cm -bc -cl -sd", + map { $config{destdir}."/".$renderedfiles{pagename($_)} } + keys %rendered); + } + if (@del) { + estcmd("purge -cl"); + } + + debug("generating hyperestraier cgi config"); + estcfg(); + } } #}}} 1