push @{$config{wrappers}}, {
wrapper => $config{git_wrapper},
wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
+ wrapper_background_command => $config{git_wrapper_background_command},
};
}
safe => 0, # file
rebuild => 0,
},
+ git_wrapper_background_command => {
+ type => "string",
+ example => "git push github",
+ description => "shell command for git_wrapper to run, in the background",
+ safe => 0, # command
+ rebuild => 0,
+ },
git_wrappermode => {
type => "string",
example => '06755',
# otherwise. The fd of the lock is stored in
# IKIWIKI_CGILOCK_FD so unlockwiki can close it.
$pre_exec=<<"EOF";
- {
- int fd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
- if (fd != -1 && flock(fd, LOCK_EX) == 0) {
- char *fd_s=malloc(8);
- sprintf(fd_s, "%i", fd);
- setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
- }
+ lockfd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
+ if (lockfd != -1 && flock(lockfd, LOCK_EX) == 0) {
+ char *fd_s=malloc(8);
+ sprintf(fd_s, "%i", lockfd);
+ setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
}
EOF
}
+ my $set_background_command='';
+ if (defined $config{wrapper_background_command} &&
+ length $config{wrapper_background_command}) {
+ my $background_command=delete $config{wrapper_background_command};
+ $set_background_command=~s/"/\\"/g;
+ $set_background_command='#define BACKGROUND_COMMAND "'.$background_command.'"';
+ }
+
$Data::Dumper::Indent=0; # no newlines
my $configstring=Data::Dumper->Dump([\%config], ['*config']);
$configstring=~s/\\/\\\\/g;
}
int main (int argc, char **argv) {
+ int lockfd=-1;
char *s;
$check_commit_hook
}
$pre_exec
+
+$set_background_command
+#ifdef BACKGROUND_COMMAND
+ if (lockfd != -1) {
+ close(lockfd);
+ }
+
+ pid_t pid=fork();
+ if (pid == -1) {
+ perror("fork");
+ exit(1);
+ }
+ else if (pid == 0) {
+ execl("$this", "$this", NULL);
+ perror("exec $this");
+ exit(1);
+ }
+ else {
+ waitpid(pid, NULL, 0);
+
+ if (daemon(1, 0) == 0) {
+ system(BACKGROUND_COMMAND);
+ exit(0);
+ }
+ else {
+ perror("daemon");
+ exit(1);
+ }
+ }
+#else
execl("$this", "$this", NULL);
perror("exec $this");
exit(1);
+#endif
}
EOF
* Use comment template on comments page of example blog.
* comment.tmpl: Fix up display when inline uses it to display a non-comment
page. (Such as a discussion page.)
+ * git: Added git_wrapper_background_command option. Can be used to eg,
+ make the git wrapper push to github in the background after ikiwiki
+ runs.
-- Joey Hess <joeyh@debian.org> Wed, 23 Jun 2010 15:30:04 -0400