# Copyright (C) 2014 Alex-Daniel Jakimenko # Copyright (C) 2011 Alex Schroeder # 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 . 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 }