Add aggregateinternal mode to ikiwiki-transition.

Usage:
1. Update all pagespecs that use aggregated pages to use internal()
2. ikiwiki-transition aggregateinternal $srcdir $htmlext
   (where $srcdir and $htmlext are the srcdir and htmlext options in
   your .setup file)
3. Add aggregateinternal to your .setup file
4. Rebuild the wiki
master
Simon McVittie 2008-07-14 23:39:22 +01:00
parent 18b3e970ff
commit 50a5ab3c4e
2 changed files with 59 additions and 0 deletions

View File

@ -113,6 +113,49 @@ sub launchaggregation () { #{{{
return 1;
} #}}}
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;

View File

@ -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();
}