Merge branch 'master' into cvs
commit
93cd30bc0a
|
@ -14,6 +14,7 @@ my $no_chdir=0;
|
|||
sub import {
|
||||
hook(type => "checkconfig", id => "git", call => \&checkconfig);
|
||||
hook(type => "getsetup", id => "git", call => \&getsetup);
|
||||
hook(type => "genwrapper", id => "git", call => \&genwrapper);
|
||||
hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
|
||||
hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
|
||||
hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
|
||||
|
@ -41,6 +42,7 @@ sub checkconfig () {
|
|||
wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
|
||||
};
|
||||
}
|
||||
|
||||
if (defined $config{git_test_receive_wrapper} &&
|
||||
length $config{git_test_receive_wrapper}) {
|
||||
push @{$config{wrappers}}, {
|
||||
|
@ -49,6 +51,13 @@ sub checkconfig () {
|
|||
wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
|
||||
};
|
||||
}
|
||||
|
||||
# Run receive test only if being called by the wrapper, and not
|
||||
# when generating same.
|
||||
if ($config{test_receive} && ! exists $config{wrapper}) {
|
||||
require IkiWiki::Receive;
|
||||
IkiWiki::Receive::test();
|
||||
}
|
||||
}
|
||||
|
||||
sub getsetup () {
|
||||
|
@ -115,6 +124,16 @@ sub getsetup () {
|
|||
},
|
||||
}
|
||||
|
||||
sub genwrapper {
|
||||
if ($config{test_receive}) {
|
||||
require IkiWiki::Receive;
|
||||
return IkiWiki::Receive::genwrapper();
|
||||
}
|
||||
else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
sub safe_git (&@) {
|
||||
# Start a child process safely without resorting /bin/sh.
|
||||
# Return command output or success state (in scalar context).
|
||||
|
|
|
@ -39,6 +39,7 @@ sub import {
|
|||
hook(type => "renamepage", id => "skeleton", call => \&renamepage);
|
||||
hook(type => "rename", id => "skeleton", call => \&rename);
|
||||
hook(type => "savestate", id => "skeleton", call => \&savestate);
|
||||
hook(type => "genwrapper", id => "skeleton", call => \&genwrapper);
|
||||
}
|
||||
|
||||
sub getopt () {
|
||||
|
@ -239,4 +240,8 @@ sub savestate () {
|
|||
debug("skeleton plugin running in savestate");
|
||||
}
|
||||
|
||||
sub genwrapper () {
|
||||
debug("skeleton plugin running in genwrapper");
|
||||
}
|
||||
|
||||
1
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
package IkiWiki::Receive;
|
||||
|
||||
use warnings;
|
||||
|
@ -20,9 +19,9 @@ sub trusted () {
|
|||
! grep { $_ eq $user } @{$config{untrusted_committers}};
|
||||
}
|
||||
|
||||
sub gen_wrapper () {
|
||||
sub genwrapper () {
|
||||
# Test for commits from untrusted committers in the wrapper, to
|
||||
# avoid loading ikiwiki at all for trusted commits.
|
||||
# avoid starting ikiwiki proper at all for trusted commits.
|
||||
|
||||
my $ret=<<"EOF";
|
||||
{
|
||||
|
@ -37,6 +36,8 @@ EOF
|
|||
"u != $uid";
|
||||
} @{$config{untrusted_committers}}).
|
||||
") exit(0);\n";
|
||||
|
||||
|
||||
$ret.=<<"EOF";
|
||||
asprintf(&s, "CALLER_UID=%i", u);
|
||||
newenviron[i++]=s;
|
||||
|
|
|
@ -37,12 +37,9 @@ sub gen_wrapper () {
|
|||
addenv("$var", s);
|
||||
EOF
|
||||
}
|
||||
|
||||
my $test_receive="";
|
||||
if ($config{test_receive}) {
|
||||
require IkiWiki::Receive;
|
||||
$test_receive=IkiWiki::Receive::gen_wrapper();
|
||||
}
|
||||
|
||||
my @wrapper_hooks;
|
||||
run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
|
||||
|
||||
my $check_args=" return 0;";
|
||||
run_hooks(wrapperargcheck => sub { $check_args = shift->(); });
|
||||
|
@ -130,7 +127,7 @@ int main (int argc, char **argv) {
|
|||
exit(0);
|
||||
|
||||
$check_commit_hook
|
||||
$test_receive
|
||||
@wrapper_hooks
|
||||
$envsave
|
||||
newenviron[i++]="HOME=$ENV{HOME}";
|
||||
newenviron[i++]="WRAPPED_OPTIONS=$configstring";
|
||||
|
@ -154,7 +151,6 @@ $pre_exec
|
|||
exit(1);
|
||||
}
|
||||
EOF
|
||||
close OUT;
|
||||
|
||||
my $cc=exists $ENV{CC} ? possibly_foolish_untaint($ENV{CC}) : 'cc';
|
||||
if (system($cc, "$wrapper.c", "-o", "$wrapper.new") != 0) {
|
||||
|
|
|
@ -7,6 +7,7 @@ ikiwiki (3.14159265) UNRELEASED; urgency=low
|
|||
* underlay: Also allow configuring additional directories to search
|
||||
for template files in.
|
||||
* Fix parsing web commits from ipv6 addresses.
|
||||
* Add genwrapper hook, that can be used to add code into the C wrapper.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Wed, 02 Sep 2009 15:01:27 -0400
|
||||
|
||||
|
|
|
@ -22,9 +22,6 @@ Consider creating `$HOME/.cvsrc` if you don't have one already; the plugin doesn
|
|||
* `cvs.pm` started life as a copy of [[3.14159|news/version_3.14159]]'s `svn.pm`.
|
||||
* `IkiWiki.pm:wiki_file_prune_regexps` avoids copying CVS metadata
|
||||
into `$DESTDIR`.
|
||||
* `IkiWiki/Wrapper.pm` provides a new "wrapperargcheck" hook, which
|
||||
the plugin implements to avoid calling ikiwiki from post-commit
|
||||
(and locking against itself) if it's a directory being `cvs add`ed.
|
||||
* [[ikiwiki-makerepo]]:
|
||||
* creates a repository,
|
||||
* imports `$SRCDIR` into top-level module `ikiwiki` (vendor tag IKIWIKI, release tag PRE_CVS),
|
||||
|
|
|
@ -141,3 +141,9 @@ general-purpose way to do so. If and when some other problem thinks
|
|||
it wants to be solved by a new wrapper hook, it's easy enough to add
|
||||
one. Until then, I'd say it's more important to keep the wrapper as
|
||||
short and clear as possible. --[[schmonz]]
|
||||
|
||||
> I've committed a slightly different hook, which should be general enough
|
||||
> that `IkiWiki::Receive` can also use it, so please adapt your code to
|
||||
> that. --[[Joey]]
|
||||
|
||||
>> Done. --[[schmonz]].
|
||||
|
|
|
@ -496,6 +496,13 @@ describes the plugin as a whole. For example:
|
|||
and undef if a rebuild could be needed in some circumstances, but is not
|
||||
strictly required.
|
||||
|
||||
### genwrapper
|
||||
|
||||
hook(type => "genwrapper", id => "foo", call => \&genwrapper);
|
||||
|
||||
This hook is used to inject C code (which it returns) into the `main`
|
||||
function of the ikiwiki wrapper when it is being generated.
|
||||
|
||||
## Plugin interface
|
||||
|
||||
To import the ikiwiki plugin interface:
|
||||
|
|
|
@ -4,6 +4,8 @@ Here's a paragraph.
|
|||
|
||||
Here's another one with *emphasised* text.
|
||||
|
||||
test 2
|
||||
|
||||
# Header
|
||||
|
||||
## Subheader
|
||||
|
|
|
@ -190,10 +190,6 @@ sub main () {
|
|||
elsif ($config{post_commit} && ! commit_hook_enabled()) {
|
||||
# do nothing
|
||||
}
|
||||
elsif ($config{test_receive}) {
|
||||
require IkiWiki::Receive;
|
||||
IkiWiki::Receive::test();
|
||||
}
|
||||
else {
|
||||
if ($config{rebuild}) {
|
||||
debug(gettext("rebuilding wiki.."));
|
||||
|
|
Loading…
Reference in New Issue