X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/85f4b99710fa94b9b67cee061c37eaf49be36b25..8776c76e322b3e3d900ae9274820364cc590f4d7:/IkiWiki/Plugin/git.pm

diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index e565f6369..1a39d87e5 100644
--- a/IkiWiki/Plugin/git.pm
+++ b/IkiWiki/Plugin/git.pm
@@ -46,7 +46,7 @@ sub checkconfig () { #{{{
 		push @{$config{wrappers}}, {
 			test_receive => 1,
 			wrapper => $config{git_test_receive_wrapper},
-			wrappermode => "0755",
+			wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
 		};
 	}
 } #}}}
@@ -95,7 +95,7 @@ sub getsetup () { #{{{
 		diffurl => {
 			type => "string",
 			example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]",
-			description => "gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], and [[file]] substituted)",
+			description => "gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], [[sha1_commit]] and [[file]] substituted)",
 			safe => 1,
 			rebuild => 1,
 		},
@@ -521,6 +521,7 @@ sub rcs_recentchanges ($) { #{{{
 			$diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go;
 			$diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go;
 			$diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go;
+			$diffurl =~ s/\[\[sha1_commit\]\]/$sha1/go;
 
 			push @pages, {
 				page => pagename($file),
@@ -643,15 +644,6 @@ sub rcs_receive () { #{{{
 				elsif ($detail->{'status'} =~ /^[AM]+\d*$/) {
 					$action="add";
 					$mode=$detail->{'mode_to'};
-					if (! pagetype($file)) {
-						eval q{use File::Temp};
-						die $@ if $@;
-						my $fh;
-						($fh, $path)=File::Temp::tempfile("XXXXXXXXXX", UNLINK => 1);
-						if (system("git show ".$detail->{sha1_to}." > '$path'") != 0) {
-							error("failed writing temp file");
-						}
-					}
 				}
 				elsif ($detail->{'status'} =~ /^[DAM]+\d*/) {
 					$action="remove";
@@ -670,6 +662,18 @@ sub rcs_receive () { #{{{
 						error gettext("you are not allowed to change file modes");
 					}
 				}
+				
+				# extract attachment to temp file
+				if (($action eq 'add' || $action eq 'change') &&
+				     ! pagetype($file)) {
+					eval q{use File::Temp};
+					die $@ if $@;
+					my $fh;
+					($fh, $path)=File::Temp::tempfile("XXXXXXXXXX", UNLINK => 1);
+					if (system("git show ".$detail->{sha1_to}." > '$path'") != 0) {
+						error("failed writing temp file");
+					}
+				}
 
 				push @rets, {
 					file => $file,