ikiwiki-transition: Allow setup files to be passed to all subcommands that need a...
authorJoey Hess <joey@gnu.kitenet.net>
Wed, 20 May 2009 17:26:20 +0000 (13:26 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Wed, 20 May 2009 17:26:20 +0000 (13:26 -0400)
debian/changelog
doc/ikiwiki-transition.mdwn
ikiwiki-transition

index 7efa31cf1e19644a15fcc68d09c346a48b241b92..c0a4afbc83b8f3fbda2927a7aa91b708c3c0f208 100644 (file)
@@ -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 <joeyh@debian.org>  Wed, 06 May 2009 20:45:44 -0400
 
index e0b853ecfb50b5ce40b11881e5ded73c5417d3c2..6177f5a467b9f9f499b3332b8a77f7db70d13013 100644 (file)
@@ -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,
index ce180730962bada4fa7d8dc08507e54e9550dcc0..7e99c878e64b753a9484dc072d426a0f64940334 100755 (executable)
@@ -42,16 +42,8 @@ sub handle_directive {
 }
 
 sub prefix_directives {
-       my $setup=shift;
-       if (! defined $setup) {
-               usage();
-       }
-
-       require IkiWiki::Setup;
-       require IkiWiki::Plugin::aggregate;
+       loadsetup(shift);
 
-       %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;
 }