X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/52b16186c407188f27d01e86cd5c985168d976b6..b698bf24082b2de96dc7bba92ecfbc20e650c0ea:/IkiWiki/Rcs/git.pm diff --git a/IkiWiki/Rcs/git.pm b/IkiWiki/Rcs/git.pm index b538c524f..1882b43ef 100644 --- a/IkiWiki/Rcs/git.pm +++ b/IkiWiki/Rcs/git.pm @@ -247,8 +247,6 @@ sub _parse_diff_tree ($@) { #{{{ last; } - debug("No detail in diff-tree output") if !defined $ci{'details'}; - return \%ci; } #}}} @@ -321,13 +319,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); @@ -342,7 +333,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}); } @@ -374,7 +364,7 @@ sub rcs_recentchanges ($) { #{{{ my ($sha1, $when) = ( $ci->{'sha1'}, - time - $ci->{'author_epoch'} + $ci->{'author_epoch'} ); my (@pages, @messages); @@ -421,49 +411,21 @@ sub rcs_recentchanges ($) { #{{{ return @rets; } #}}} -sub rcs_notify () { #{{{ - # Send notification mail to subscribed users. - # - # This is typically run as the post-update hook, though some setups - # may run it from the post-commit hook too. - # - # In usual Git usage, hooks/update script is presumed to send - # notification mails (see git-receive-pack(1)). But we prefer - # hooks/post-update to support IkiWiki commits coming from a - # cloned repository (through command line) because post-update - # is called _after_ each ref in repository is updated (update - # hook is called _before_ the repository is updated). - # - # Here, we rely on a simple fact: we can extract all parts of the - # notification content by parsing the "HEAD" commit (which also - # triggers a refresh of IkiWiki pages). - - my $ci = git_commit_info('HEAD'); - return if !defined $ci; - - my @changed_pages = map { $_->{'file'} } @{ $ci->{'details'} }; - - my ($user, $message); - if (@{ $ci->{'comment'} }[0] =~ m/$config{web_commit_regexp}/) { - $user = defined $2 ? "$2" : "$3"; - $message = $4; +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 { - $user = $ci->{'author_username'}; - $message = join "\n", @{ $ci->{'comment'} }; + return join("", @lines); } - - my $sha1 = $ci->{'sha1'}; - - require IkiWiki::UserInfo; - send_commit_mails( - sub { - $message; - }, - sub { - join "\n", run_or_die('git', 'diff', "${sha1}^", $sha1); - }, $user, @changed_pages - ); } #}}} sub rcs_getctime ($) { #{{{