summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/aggregate.pm57
-rwxr-xr-xikiwiki-transition16
2 files changed, 71 insertions, 2 deletions
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index f61804237..e93492863 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -21,6 +21,7 @@ sub import { #{{{
hook(type => "preprocess", id => "aggregate", call => \&preprocess);
hook(type => "delete", id => "aggregate", call => \&delete);
hook(type => "savestate", id => "aggregate", call => \&savestate);
+ hook(type => "htmlize", id => "_aggregated", call => \&htmlize);
if (exists $config{aggregate_webtrigger} && $config{aggregate_webtrigger}) {
hook(type => "cgi", id => "aggregate", call => \&cgi);
}
@@ -30,7 +31,10 @@ sub getopt () { #{{{
eval q{use Getopt::Long};
error($@) if $@;
Getopt::Long::Configure('pass_through');
- GetOptions("aggregate" => \$config{aggregate});
+ GetOptions(
+ "aggregate" => \$config{aggregate},
+ "aggregateinternal!" => \$config{aggregateinternal},
+ );
} #}}}
sub checkconfig () { #{{{
@@ -110,6 +114,55 @@ sub launchaggregation () { #{{{
return 1;
} #}}}
+# Pages with extension _aggregated have plain html markup, pass through.
+sub htmlize (@) { #{{{
+ my %params=@_;
+ return $params{content};
+} #}}}
+
+sub migrate_to_internal { #{{{
+
+ if (! lockaggregate()) {
+ error("an aggregation process is already running");
+ return;
+ }
+
+ IkiWiki::lockwiki();
+ loadstate();
+
+ foreach my $data (values %guids) {
+ next unless $data->{page};
+
+ $config{aggregateinternal} = 0;
+ my $oldname = pagefile($data->{page});
+
+ $config{aggregateinternal} = 1;
+ my $newname = pagefile($data->{page});
+
+ print "I: $oldname -> $newname\n";
+ if (-e $newname) {
+ if (-e $oldname) {
+ error("$newname already exists");
+ }
+ else {
+ print STDERR
+ "W: already renamed to $newname?\n";
+ }
+ }
+ elsif (-e $oldname) {
+ rename($oldname, $newname) || error("$!");
+ }
+ else {
+ print "W: $oldname not found\n";
+ }
+ }
+
+ savestate();
+ IkiWiki::unlockwiki;
+
+ unlockaggregate();
+} #}}}
+
sub needsbuild (@) { #{{{
my $needsbuild=shift;
@@ -595,7 +648,7 @@ sub pagefile ($) { #{{{
} #}}}
sub htmlfn ($) { #{{{
- return shift().".".$config{htmlext};
+ return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext});
} #}}}
my $aggregatelock;
diff --git a/ikiwiki-transition b/ikiwiki-transition
index ce081fe63..6524297ee 100755
--- a/ikiwiki-transition
+++ b/ikiwiki-transition
@@ -99,12 +99,25 @@ sub hashpassword {
}
}
+sub aggregateinternal {
+ $config{srcdir} = shift;
+ $config{wikistatedir} = $config{srcdir}."/.ikiwiki";
+ $config{htmlext} = (shift or "html");
+
+ require IkiWiki::Plugin::aggregate;
+
+ IkiWiki::Plugin::aggregate::migrate_to_internal();
+
+ print "... now add aggregateinternal => 1 to your .setup file\n";
+}
+
sub usage {
print STDERR "Usage: ikiwiki-transition type ...\n";
print STDERR "Currently supported transition subcommands:\n";
print STDERR " prefix_directives file\n";
print STDERR " indexdb srcdir\n";
print STDERR " hashpassword srcdir\n";
+ print STDERR " aggregateinternal srcdir [htmlext]\n";
exit 1;
}
@@ -120,6 +133,9 @@ elsif ($mode eq 'hashpassword') {
elsif ($mode eq 'indexdb') {
indexdb(@ARGV);
}
+elsif ($mode eq 'aggregateinternal') {
+ aggregateinternal(@ARGV);
+}
else {
usage();
}