From f7ded1174dd8f4aec3371214bbadc1c1f7fc2e22 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 20 May 2009 13:26:20 -0400 Subject: [PATCH] ikiwiki-transition: Allow setup files to be passed to all subcommands that need a srcdir. --- debian/changelog | 2 ++ doc/ikiwiki-transition.mdwn | 6 ++-- ikiwiki-transition | 71 +++++++++++++++---------------------- 3 files changed, 34 insertions(+), 45 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7efa31cf1..c0a4afbc8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ ikiwiki (3.13) UNRELEASED; urgency=low * Allow curly braces to be used in pagespecs, and avoid a whole class of potential security problems, by avoiding performing any string interpolation on user-supplied data when translating pagespecs. + * ikiwiki-transition: Allow setup files to be passed to all subcommands + that need a srcdir. -- Joey Hess Wed, 06 May 2009 20:45:44 -0400 diff --git a/doc/ikiwiki-transition.mdwn b/doc/ikiwiki-transition.mdwn index e0b853ecf..6177f5a46 100644 --- a/doc/ikiwiki-transition.mdwn +++ b/doc/ikiwiki-transition.mdwn @@ -44,14 +44,14 @@ Moves values that used to be admin preferences into the setup file. Note that all comments and any unusual stuff like perl code in the setup file will be lost, as it is entirely rewritten by the move. -# indexdb srcdir +# indexdb your.setup|srcdir The `indexdb` mode handles converting a plain text `.ikiwiki/index` file to a binary `.ikiwiki/indexdb`. You do not normally need to run `ikiwiki-transition indexdb`; ikiwiki will automatically run it as necessary. -# hashpassword srcdir +# hashpassword your.setup|srcdir The `hashpassword` mode forces any plaintext passwords stored in the `.ikiwiki/userdb` file to be replaced with password hashes. (The @@ -61,7 +61,7 @@ If this is not done explicitly, a user's plaintext password will be automatically converted to a hash when a user logs in for the first time after upgrade to ikiwiki 2.48. -# deduplinks srcdir +# deduplinks your.setup|srcdir In the past, bugs in ikiwiki have allowed duplicate link information to be stored in its indexdb. This mode removes such duplicate information, diff --git a/ikiwiki-transition b/ikiwiki-transition index ce1807309..7e99c878e 100755 --- a/ikiwiki-transition +++ b/ikiwiki-transition @@ -42,16 +42,8 @@ sub handle_directive { } sub prefix_directives { - my $setup=shift; - if (! defined $setup) { - usage(); - } + loadsetup(shift); - require IkiWiki::Setup; - require IkiWiki::Plugin::aggregate; - - %config = IkiWiki::defaultconfig(); - IkiWiki::Setup::load($setup); IkiWiki::loadplugins(); IkiWiki::checkconfig(); IkiWiki::loadindex(); @@ -114,31 +106,16 @@ sub hashpassword { } sub aggregateinternal { - my $setup=shift; - if (! defined $setup) { - usage(); - } - - require IkiWiki::Setup; + loadsetup(shift); require IkiWiki::Plugin::aggregate; - - %config = IkiWiki::defaultconfig(); - IkiWiki::Setup::load($setup); IkiWiki::checkconfig(); - IkiWiki::Plugin::aggregate::migrate_to_internal(); } sub setupformat { my $setup=shift; - if (! defined $setup) { - usage(); - } - require IkiWiki::Setup; - - %config = IkiWiki::defaultconfig(); - IkiWiki::Setup::load($setup); + loadsetup($setup); IkiWiki::checkconfig(); # unpack old-format wrappers setting into new fields @@ -175,14 +152,8 @@ sub setupformat { sub moveprefs { my $setup=shift; - if (! defined $setup) { - usage(); - } - require IkiWiki::Setup; - - %config = IkiWiki::defaultconfig(); - IkiWiki::Setup::load($setup); + loadsetup($setup); IkiWiki::checkconfig(); eval q{use IkiWiki::UserInfo}; @@ -224,22 +195,38 @@ sub deduplinks { } sub setstatedir { - my $dir=shift; + my $dirorsetup=shift; - if (! defined $dir) { + if (! defined $dirorsetup) { usage(); } - if (! -d $dir) { - error("ikiwiki-transition: $dir does not exist"); + if (-d $dirorsetup) { + $config{wikistatedir}=$dirorsetup."/.ikiwiki"; + } + elsif (-f $dirorsetup) { + loadsetup($dirorsetup); + } + else { + error("ikiwiki-transition: $dirorsetup does not exist"); } - - $config{wikistatedir}=$dir."/.ikiwiki"; if (! -d $config{wikistatedir}) { error("ikiwiki-transition: $config{wikistatedir} does not exist"); } } + +sub loadsetup { + my $setup=shift; + if (! defined $setup) { + usage(); + } + + require IkiWiki::Setup; + + %config = IkiWiki::defaultconfig(); + IkiWiki::Setup::load($setup); +} sub usage { print STDERR "Usage: ikiwiki-transition type ...\n"; @@ -248,9 +235,9 @@ sub usage { 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"; - print STDERR "\tdeduplinks srcdir\n"; + print STDERR "\thashpassword setupfile|srcdir\n"; + print STDERR "\tindexdb setupfile|srcdir\n"; + print STDERR "\tdeduplinks setupfile|srcdir\n"; exit 1; }