make ikiwiki-transition prefix_directives take a setup file

This is easier to remeber, and less error-prone than passing it all the
pages in the wiki.
master
Joey Hess 2008-12-24 19:43:07 -05:00
parent c1fa208f25
commit 04f064e78a
5 changed files with 42 additions and 29 deletions

5
debian/NEWS vendored
View File

@ -110,10 +110,7 @@ ikiwiki (2.40) unstable; urgency=low
in their setup files. in their setup files.
To convert your wiki to the new syntax, ikiwiki provides a new script To convert your wiki to the new syntax, ikiwiki provides a new script
ikiwiki-transition. It will convert preprocessor directives in ikiwiki-transition.
all files given on the command line. To convert an entire wiki:
find wikidir/ -type f -name '*.mdwn' -print0 | xargs -0 ikiwiki-transition prefix_directives
Even with prefix_directives disabled, ikiwiki now allows an optional '!' Even with prefix_directives disabled, ikiwiki now allows an optional '!'
prefix on preprocessor directives (but still requires a space). Thus, a prefix on preprocessor directives (but still requires a space). Thus, a

View File

@ -12,16 +12,15 @@ ikiwiki-transition type ...
change in ikiwiki syntax. It also handles other transitions not involving change in ikiwiki syntax. It also handles other transitions not involving
wiki pages. wiki pages.
# prefix_directives file ... # prefix_directives your.setup
The `prefix_directives` mode converts the specified ikiwiki page from The `prefix_directives` mode converts all pages from the old preprocessor
the old preprocessor directive syntax, requiring a space, to the new directive syntax, requiring a space, to the new syntax, prefixed by '!'.
syntax, prefixed by '!'.
Preprocessor directives which already use the new syntax will remain Preprocessor directives which already use the new syntax will remain
unchanged. unchanged.
Note that if the page contains wiki links with spaces, which some Note that if a page contains wiki links with spaces, which some
older versions of ikiwiki accepted, the prefix_directives transition will older versions of ikiwiki accepted, the prefix_directives transition will
treat these as preprocessor directives and convert them. treat these as preprocessor directives and convert them.

View File

@ -486,7 +486,7 @@ use the following hashes, using a page name as the key:
destination file. destination file.
* `%pagesources` contains the name of the source file for each page. * `%pagesources` contains the name of the source file for each page.
Also, the %IkiWiki::version variable contains the version number for the Also, the `%IkiWiki::version` variable contains the version number for the
ikiwiki program. ikiwiki program.
### Library functions ### Library functions

View File

@ -23,7 +23,7 @@ your wiki is upgraded to 3.0.
You can move these preferences into the setup file by running You can move these preferences into the setup file by running
`ikiwiki-transition moveprefs your.setup` `ikiwiki-transition moveprefs your.setup`
(Make sure you have converted the setuop file to the new format first.) (Make sure you have converted the setup file to the new format first.)
## prefix directives ## prefix directives
@ -37,15 +37,10 @@ following to your setup file:
prefix_directives => 0, prefix_directives => 0,
But it's not hard to convert your wiki to the new syntax. You can use To convert to the new syntax, run
[[ikiwiki-transition]]. It will convert preprocessor directives in all `ikiwiki-transition prefix_directives your.setup`
files given on the command line. To convert an entire wiki:
find wikidir/ -type f -name '*.mdwn' -print0 | xargs -0 ikiwiki-transition prefix_directives (And then commit the changes it makes to pages in your srcdir.)
Be sure to modify the find to list all pages in the wiki if you're using
other markup than markdown. You will probably want to commit the changes
when you're done too.
## GlobLists ## GlobLists

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl -i #!/usr/bin/perl
use warnings; use warnings;
use strict; use strict;
use IkiWiki; use IkiWiki;
@ -42,11 +42,33 @@ sub handle_directive {
} }
sub prefix_directives { sub prefix_directives {
$/=undef; # process whole files at once my $setup=shift;
if (! defined $setup) {
while (<>) { usage();
s{$regex}{handle_directive($1, $2, $3, $4)}eg; }
print;
require IkiWiki::Setup;
require IkiWiki::Plugin::aggregate;
%config = IkiWiki::defaultconfig();
IkiWiki::Setup::load($setup);
IkiWiki::loadplugins();
IkiWiki::checkconfig();
IkiWiki::loadindex();
if (! %pagesources) {
error "ikiwiki has not built this wiki yet, cannot transition";
}
foreach my $page (values %pagesources) {
next unless defined pagetype($page) &&
-f $config{srcdir}."/".$page;
my $content=readfile($config{srcdir}."/".$page);
my $oldcontent=$content;
$content=~s{$regex}{handle_directive($1, $2, $3, $4)}eg;
if ($oldcontent ne $content) {
writefile($page, $config{srcdir}, $content);
}
} }
} }
@ -109,7 +131,7 @@ sub aggregateinternal {
require IkiWiki::Plugin::aggregate; require IkiWiki::Plugin::aggregate;
%config = IkiWiki::defaultconfig(); %config = IkiWiki::defaultconfig();
IkiWiki::Setup::load(); IkiWiki::Setup::load($setup);
IkiWiki::checkconfig(); IkiWiki::checkconfig();
IkiWiki::Plugin::aggregate::migrate_to_internal(); IkiWiki::Plugin::aggregate::migrate_to_internal();
@ -196,12 +218,12 @@ sub moveprefs {
sub usage { sub usage {
print STDERR "Usage: ikiwiki-transition type ...\n"; print STDERR "Usage: ikiwiki-transition type ...\n";
print STDERR "Currently supported transition subcommands:\n"; print STDERR "Currently supported transition subcommands:\n";
print STDERR "\tprefix_directives file ...\n"; print STDERR "\tprefix_directives setupfile ...\n";
print STDERR "\tindexdb srcdir\n";
print STDERR "\thashpassword srcdir\n";
print STDERR "\taggregateinternal setupfile\n"; print STDERR "\taggregateinternal setupfile\n";
print STDERR "\tsetupformat setupfile\n"; print STDERR "\tsetupformat setupfile\n";
print STDERR "\tmoveprefs setupfile\n"; print STDERR "\tmoveprefs setupfile\n";
print STDERR "\thashpassword srcdir\n";
print STDERR "\tindexdb srcdir\n";
exit 1; exit 1;
} }