X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/cddc335b2bd98a302b261200c12d61b05476d727..43c647edd31c224e0ca07785ef1ac7e856639c09:/IkiWiki/Rcs/git.pm diff --git a/IkiWiki/Rcs/git.pm b/IkiWiki/Rcs/git.pm index 26a6f4266..036900887 100644 --- a/IkiWiki/Rcs/git.pm +++ b/IkiWiki/Rcs/git.pm @@ -279,7 +279,8 @@ sub git_sha1 (;$) { #{{{ my $file = shift || q{--}; # Ignore error since a non-existing file might be given. - my ($sha1) = run_or_non('git', 'rev-list', '--max-count=1', 'HEAD', $file); + my ($sha1) = run_or_non('git', 'rev-list', '--max-count=1', 'HEAD', + '--', $file); if ($sha1) { ($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1 is untainted now } else { debug("Empty sha1sum for '$file'.") } @@ -319,13 +320,6 @@ sub rcs_commit ($$$;$$) { #{{{ (length $message ? ": $message" : ""); } - # XXX: Wiki directory is in the unlocked state when starting this - # action. But it takes time for a Git process to finish its job - # (especially if a merge required), so we must re-lock to prevent - # race conditions. Only when the time of the real commit action - # (i.e. git push) comes, we'll unlock the directory. - lockwiki(); - # Check to see if the page has been changed by someone else since # rcs_prepedit was called. my $cur = git_sha1($file); @@ -340,7 +334,6 @@ sub rcs_commit ($$$;$$) { #{{{ # so we should ignore its exit status (hence run_or_non). $message = possibly_foolish_untaint($message); if (run_or_non('git', 'commit', '-q', '-m', $message, '-i', $file)) { - unlockwiki(); if (length $config{gitorigin_branch}) { run_or_cry('git', 'push', $config{gitorigin_branch}); } @@ -390,7 +383,10 @@ sub rcs_recentchanges ($) { #{{{ diffurl => $diffurl, }; } - push @messages, { line => $_ } foreach @{$ci->{'comment'}}; + + push @messages, { line => $_ } foreach grep { + ! m/^ *(signed[ \-]off[ \-]by[ :]|acked[ \-]by[ :]|cc[ :])/i + } @{$ci->{'comment'}}; my ($user, $type) = (q{}, "web"); @@ -419,6 +415,23 @@ sub rcs_recentchanges ($) { #{{{ return @rets; } #}}} +sub rcs_diff ($) { #{{{ + my $rev=shift; + my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint + my @lines; + foreach my $line (run_or_non("git", "show", $sha1)) { + if (@lines || $line=~/^diff --git/) { + push @lines, $line."\n"; + } + } + if (wantarray) { + return @lines; + } + else { + return join("", @lines); + } +} #}}} + sub rcs_getctime ($) { #{{{ my $file=shift; # Remove srcdir prefix