summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/git.pm19
-rw-r--r--IkiWiki/Receive.pm7
-rw-r--r--IkiWiki/Wrapper.pm4
-rwxr-xr-xikiwiki.in4
4 files changed, 23 insertions, 11 deletions
diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index 68b114a73..ad58231e0 100644
--- a/IkiWiki/Plugin/git.pm
+++ b/IkiWiki/Plugin/git.pm
@@ -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).
diff --git a/IkiWiki/Receive.pm b/IkiWiki/Receive.pm
index 37b6f2a62..101c13ee5 100644
--- a/IkiWiki/Receive.pm
+++ b/IkiWiki/Receive.pm
@@ -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;
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index cf85738d6..ff110b5ff 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -37,10 +37,6 @@ sub gen_wrapper () {
addenv("$var", s);
EOF
}
-
- if ($config{test_receive}) {
- require IkiWiki::Receive;
- }
my @wrapper_hooks;
run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
diff --git a/ikiwiki.in b/ikiwiki.in
index 4e9b812f8..b8581d880 100755
--- a/ikiwiki.in
+++ b/ikiwiki.in
@@ -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.."));