12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # Copyright (C) 2014 Alex-Daniel Jakimenko <alex.jakimenko@gmail.com>
- # Copyright (C) 2011 Alex Schroeder <alex@gnu.org>
- # This program is free software: you can redistribute it and/or modify it under
- # the terms of the GNU General Public License as published by the Free Software
- # Foundation, either version 3 of the License, or (at your option) any later
- # version.
- #
- # This program is distributed in the hope that it will be useful, but WITHOUT
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License along with
- # this program. If not, see <http://www.gnu.org/licenses/>.
- use strict;
- use v5.10;
- AddModuleDescription('git-another.pl', 'Another Git Extension');
- use Cwd;
- use Capture::Tiny ':all';
- our (%Page, $DataDir, $FootnoteNumber);
- our ($GitBinary, $GitMail);
- $GitBinary = 'git';
- $GitMail = 'unknown@oddmuse.org';
- sub GitCommit {
- my ($message, $author) = @_;
- my $oldDir = cwd;
- ChangeDir("$DataDir/page");
- capture {
- system($GitBinary, qw(add -A));
- system($GitBinary, qw(commit -q -m), $message, "--author=$author <$GitMail>");
- };
- ChangeDir($oldDir);
- }
- sub GitInitRepository {
- return if IsDir("$DataDir/page/.git");
- capture {
- system($GitBinary, qw(init -q --), encode_utf8("$DataDir/page"));
- };
- GitCommit('Initial import', 'Oddmuse');
- }
- sub RenderHtmlCacheWithoutPrinting { # requires an open page
- $FootnoteNumber = 0;
- my ($blocks, $flags);
- capture {
- ($blocks, $flags) = ApplyRules(QuoteHtml($Page{text}), 1, 1, $Page{revision}, 'p');
- };
- if ($Page{blocks} ne $blocks and $Page{flags} ne $flags) {
- $Page{blocks} = $blocks;
- $Page{flags} = $flags;
- SavePage();
- }
- }
- *GitOldSave = \&Save;
- *Save = \&GitNewSave;
- sub GitNewSave {
- GitInitRepository();
- GitCommit('No description available', 'Oddmuse'); # commit any changes before this edit
- GitOldSave(@_);
- RenderHtmlCacheWithoutPrinting();
- my $message = $Page{summary};
- $message =~ s/^\s+$//;
- $message ||= T('No summary provided');
- my $author = $Page{username} || T('Anonymous');
- GitCommit($message, $author); # commit this edit
- }
|