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.
parent
824ad84e2b
commit
0eabe6f794
|
@ -441,6 +441,13 @@ sub getsetup () {
|
|||
safe => 0,
|
||||
rebuild => 0,
|
||||
},
|
||||
wrapper_background_command => {
|
||||
type => "internal",
|
||||
default => '',
|
||||
description => "background shell command to run",
|
||||
safe => 0,
|
||||
rebuild => 0,
|
||||
},
|
||||
gettime => {
|
||||
type => "internal",
|
||||
description => "running in gettime mode",
|
||||
|
|
|
@ -41,6 +41,7 @@ sub checkconfig () {
|
|||
push @{$config{wrappers}}, {
|
||||
wrapper => $config{git_wrapper},
|
||||
wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
|
||||
wrapper_background_command => $config{git_wrapper_background_command},
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -78,6 +79,13 @@ sub getsetup () {
|
|||
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',
|
||||
|
|
|
@ -73,17 +73,23 @@ EOF
|
|||
# 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;
|
||||
|
@ -114,6 +120,7 @@ void addenv(char *var, char *val) {
|
|||
}
|
||||
|
||||
int main (int argc, char **argv) {
|
||||
int lockfd=-1;
|
||||
char *s;
|
||||
|
||||
$check_commit_hook
|
||||
|
@ -147,9 +154,40 @@ $envsave
|
|||
}
|
||||
|
||||
$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
|
||||
|
||||
|
|
|
@ -17,6 +17,9 @@ ikiwiki (3.20100624) UNRELEASED; urgency=low
|
|||
* 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
|
||||
|
||||
|
|
Loading…
Reference in New Issue