X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b645dc5a4118feabd37d95fabbc6aaa803e3c45f..6855607565dbcc898fe9da77c01fc9a33d5d485e:/IkiWiki/Wrapper.pm

diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index 62d284eb6..d72368446 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -19,6 +19,9 @@ sub gen_wrapper () { #{{{
 		error("cannot create a wrapper that uses a setup file");
 	}
 	my $wrapper=possibly_foolish_untaint($config{wrapper});
+	if (! defined $wrapper || ! length $wrapper) {
+		error("wrapper filename not specified");
+	}
 	delete $config{wrapper};
 	
 	my @envsave;
@@ -32,13 +35,23 @@ sub gen_wrapper () { #{{{
 		asprintf(&newenviron[i++], "%s=%s", "$var", s);
 EOF
 	}
+	if ($config{svn} && $config{notify}) {
+		# Support running directly as hooks/post-commit by passing
+		# $2 in REV in the environment.
+		$envsave.=<<"EOF"
+	if (argc == 3)
+		asprintf(&newenviron[i++], "REV=%s", argv[2]);
+	else if ((s=getenv("REV")))
+		asprintf(&newenviron[i++], "%s=%s", "REV", s);
+EOF
+	}
 	
-	$Data::Dumper::Indent=0;
+	$Data::Dumper::Indent=0; # no newlines
 	my $configstring=Data::Dumper->Dump([\%config], ['*config']);
 	$configstring=~s/\\/\\\\/g;
 	$configstring=~s/"/\\"/g;
 	
-	open(OUT, ">ikiwiki-wrap.c") || error("failed to write ikiwiki-wrap.c: $!");;
+	open(OUT, ">$wrapper.c") || error("failed to write $wrapper.c: $!");;
 	print OUT <<"EOF";
 /* A wrapper for ikiwiki, can be safely made suid. */
 #define _GNU_SOURCE
@@ -52,7 +65,7 @@ extern char **environ;
 int main (int argc, char **argv) {
 	/* Sanitize environment. */
 	char *s;
-	char *newenviron[$#envsave+4];
+	char *newenviron[$#envsave+5];
 	int i=0;
 $envsave
 	newenviron[i++]="HOME=$ENV{HOME}";
@@ -66,10 +79,10 @@ $envsave
 }
 EOF
 	close OUT;
-	if (system("gcc", "ikiwiki-wrap.c", "-o", $wrapper) != 0) {
-		error("failed to compile ikiwiki-wrap.c");
+	if (system("gcc", "$wrapper.c", "-o", $wrapper) != 0) {
+		error("failed to compile $wrapper.c");
 	}
-	unlink("ikiwiki-wrap.c");
+	unlink("$wrapper.c");
 	if (defined $config{wrappermode} &&
 	    ! chmod(oct($config{wrappermode}), $wrapper)) {
 		error("chmod $wrapper: $!");