X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/0196e1f9fcfebbf904e59c029e494cb2186793e6..c9bb8b03a43b735e1b9876f58a1499a1445d0663:/IkiWiki/Plugin/git.pm

diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index 3a8476e7d..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),
@@ -619,7 +620,7 @@ sub rcs_receive () { #{{{
 		
 		# Avoid chdir when running git here, because the changes
 		# are in the master git repo, not the srcdir repo.
-		# The pre-receive hook already puts us in the right place.
+		# The pre-recieve hook already puts us in the right place.
 		$no_chdir=1;
 		my @changes=git_commit_info($oldrev."..".$newrev);
 		$no_chdir=0;
@@ -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,