From 85f4b99710fa94b9b67cee061c37eaf49be36b25 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2008 18:05:57 -0400 Subject: [PATCH] untrusted committers code seems to be fully working Still need to investigate possible races, and test some more. --- IkiWiki.pm | 4 ++-- IkiWiki/Plugin/git.pm | 10 ++++++---- debian/changelog | 2 ++ ikiwiki.in | 3 ++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index 698244187..1a55945a8 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1582,8 +1582,8 @@ sub rcs_getctime ($) { #{{{ $hooks{rcs}{rcs_getctime}{call}->(@_); } #}}} -sub rcs_receive ($) { #{{{ - $hooks{rcs}{rcs_receive}{call}->(@_); +sub rcs_receive () { #{{{ + $hooks{rcs}{rcs_receive}{call}->(); } #}}} sub globlist_to_pagespec ($) { #{{{ diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index bdac6f7a1..e565f6369 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -365,8 +365,10 @@ sub git_commit_info ($;$) { #{{{ # starting from the given sha1sum. my ($sha1, $num) = @_; - my @raw_lines = run_or_die('git', 'log', - (defined $num ? "--max-count=$num" : ""), + my @opts; + push @opts, "--max-count=$num" if defined $num; + + my @raw_lines = run_or_die('git', 'log', @opts, '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c', '-r', $sha1, '--', '.'); my ($prefix) = run_or_die('git', 'rev-parse', '--show-prefix'); @@ -645,7 +647,7 @@ sub rcs_receive () { #{{{ eval q{use File::Temp}; die $@ if $@; my $fh; - ($fh, $path)=tempfile("XXXXXXXXXX", UNLINK => 1); + ($fh, $path)=File::Temp::tempfile("XXXXXXXXXX", UNLINK => 1); if (system("git show ".$detail->{sha1_to}." > '$path'") != 0) { error("failed writing temp file"); } @@ -678,7 +680,7 @@ sub rcs_receive () { #{{{ } } - return @rets; + return reverse @rets; } #}}} 1 diff --git a/debian/changelog b/debian/changelog index 49bd85447..d8e26e4c9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -33,6 +33,8 @@ ikiwiki (2.68) UNRELEASED; urgency=low * Updated Danish translation from Jonas Smedegaard. Closes: #503117 * Optimise the no-op post-commit hook in the web edit case by skipping loading plugins. (Particularly a win when using external plugins.) + * Add support for checking pushes from untrusted git committers. This can be + used to set up anonymous git pushes, and other similar things. -- Joey Hess Fri, 17 Oct 2008 20:11:02 -0400 diff --git a/ikiwiki.in b/ikiwiki.in index 60663bc89..d601d2739 100755 --- a/ikiwiki.in +++ b/ikiwiki.in @@ -156,7 +156,8 @@ sub main () { #{{{ if exists $config{setupsyslog}; delete @config{qw(setupsyslog setupverbose wrappers genwrappers rebuild)}; checkconfig(); - if (! $config{cgi} && ! $config{post_commit}) { + if (! $config{cgi} && ! $config{post_commit} && + ! $config{test_receive}) { $config{post_commit}=1; } gen_wrapper();