aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2008-12-24 19:43:07 -0500
committerJoey Hess <joey@gnu.kitenet.net>2008-12-24 19:48:42 -0500
commit04f064e78aedecc234e08bd9b49ae3674cb8f7bd (patch)
treeb092ef12861bb9362da1f01acf1b6e76f0a66281
parentc1fa208f25277132c736a8290aeb7f18d58207a0 (diff)
downloadikiwiki-04f064e78aedecc234e08bd9b49ae3674cb8f7bd.tar
ikiwiki-04f064e78aedecc234e08bd9b49ae3674cb8f7bd.tar.gz
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.
-rw-r--r--debian/NEWS5
-rw-r--r--doc/ikiwiki-transition.mdwn9
-rw-r--r--doc/plugins/write.mdwn2
-rw-r--r--doc/tips/upgrade_to_3.0.mdwn13
-rwxr-xr-xikiwiki-transition42
5 files changed, 42 insertions, 29 deletions
diff --git a/debian/NEWS b/debian/NEWS
index 1c9763d1a..f9dfc3770 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -110,10 +110,7 @@ ikiwiki (2.40) unstable; urgency=low
in their setup files.
To convert your wiki to the new syntax, ikiwiki provides a new script
- ikiwiki-transition. It will convert preprocessor directives in
- 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
+ ikiwiki-transition.
Even with prefix_directives disabled, ikiwiki now allows an optional '!'
prefix on preprocessor directives (but still requires a space). Thus, a
diff --git a/doc/ikiwiki-transition.mdwn b/doc/ikiwiki-transition.mdwn
index 3a3529454..18836d5f5 100644
--- a/doc/ikiwiki-transition.mdwn
+++ b/doc/ikiwiki-transition.mdwn
@@ -12,16 +12,15 @@ ikiwiki-transition type ...
change in ikiwiki syntax. It also handles other transitions not involving
wiki pages.
-# prefix_directives file ...
+# prefix_directives your.setup
-The `prefix_directives` mode converts the specified ikiwiki page from
-the old preprocessor directive syntax, requiring a space, to the new
-syntax, prefixed by '!'.
+The `prefix_directives` mode converts all pages from the old preprocessor
+directive syntax, requiring a space, to the new syntax, prefixed by '!'.
Preprocessor directives which already use the new syntax will remain
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
treat these as preprocessor directives and convert them.
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index cb7571289..8992fad01 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -486,7 +486,7 @@ use the following hashes, using a page name as the key:
destination file.
* `%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.
### Library functions
diff --git a/doc/tips/upgrade_to_3.0.mdwn b/doc/tips/upgrade_to_3.0.mdwn
index 50c420103..3a515a61f 100644
--- a/doc/tips/upgrade_to_3.0.mdwn
+++ b/doc/tips/upgrade_to_3.0.mdwn
@@ -23,7 +23,7 @@ your wiki is upgraded to 3.0.
You can move these preferences into the setup file by running
`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
@@ -37,15 +37,10 @@ following to your setup file:
prefix_directives => 0,
-But it's not hard to convert your wiki to the new syntax. You can use
-[[ikiwiki-transition]]. It will convert preprocessor directives in all
-files given on the command line. To convert an entire wiki:
+To convert to the new syntax, run
+`ikiwiki-transition prefix_directives your.setup`
- find wikidir/ -type f -name '*.mdwn' -print0 | xargs -0 ikiwiki-transition prefix_directives
-
-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.
+(And then commit the changes it makes to pages in your srcdir.)
## GlobLists
diff --git a/ikiwiki-transition b/ikiwiki-transition
index 9a5dd1362..b15d9f46b 100755
--- a/ikiwiki-transition
+++ b/ikiwiki-transition
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -i
+#!/usr/bin/perl
use warnings;
use strict;
use IkiWiki;
@@ -42,11 +42,33 @@ sub handle_directive {
}
sub prefix_directives {
- $/=undef; # process whole files at once
-
- while (<>) {
- s{$regex}{handle_directive($1, $2, $3, $4)}eg;
- print;
+ my $setup=shift;
+ if (! defined $setup) {
+ usage();
+ }
+
+ 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;
%config = IkiWiki::defaultconfig();
- IkiWiki::Setup::load();
+ IkiWiki::Setup::load($setup);
IkiWiki::checkconfig();
IkiWiki::Plugin::aggregate::migrate_to_internal();
@@ -196,12 +218,12 @@ sub moveprefs {
sub usage {
print STDERR "Usage: ikiwiki-transition type ...\n";
print STDERR "Currently supported transition subcommands:\n";
- print STDERR "\tprefix_directives file ...\n";
- print STDERR "\tindexdb srcdir\n";
- print STDERR "\thashpassword srcdir\n";
+ print STDERR "\tprefix_directives setupfile ...\n";
print STDERR "\taggregateinternal setupfile\n";
print STDERR "\tsetupformat setupfile\n";
print STDERR "\tmoveprefs setupfile\n";
+ print STDERR "\thashpassword srcdir\n";
+ print STDERR "\tindexdb srcdir\n";
exit 1;
}