X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/99fce0af0d4e99bc81ef7847bfbe77662763e805..0983f4c81e8ac1e8ed6fc9a6e7d1165fd5387f70:/ikiwiki-transition?ds=inline diff --git a/ikiwiki-transition b/ikiwiki-transition index 0177f98a9..e42a5137c 100755 --- a/ikiwiki-transition +++ b/ikiwiki-transition @@ -51,12 +51,14 @@ sub prefix_directives { } sub indexdb { - $config{wikistatedir}=shift()."/.ikiwiki"; - - if (! defined $config{wikistatedir}) { + my $dir=shift; + if (! defined $dir) { usage(); } + $config{wikistatedir}=$dir."/.ikiwiki"; + # Note: No lockwiki here because ikiwiki already locks it + # before calling this. if (! IkiWiki::oldloadindex()) { die "failed to load index\n"; } @@ -71,11 +73,102 @@ sub indexdb { } } +sub hashpassword { + my $dir=shift; + if (! defined $dir) { + usage(); + } + $config{wikistatedir}=$dir."/.ikiwiki"; + + eval q{use IkiWiki::UserInfo}; + eval q{use Authen::Passphrase::BlowfishCrypt}; + if ($@) { + error("ikiwiki-transition hashpassword: failed to load Authen::Passphrase, passwords not hashed"); + } + + IkiWiki::lockwiki(); + IkiWiki::loadplugin("passwordauth"); + my $userinfo = IkiWiki::userinfo_retrieve(); + foreach my $user (keys %{$userinfo}) { + if (ref $userinfo->{$user} && + exists $userinfo->{$user}->{password} && + length $userinfo->{$user}->{password} && + ! exists $userinfo->{$user}->{cryptpassword}) { + IkiWiki::Plugin::passwordauth::setpassword($user, $userinfo->{$user}->{password}); + } + } +} + +sub aggregateinternal { + my $setup=shift; + if (! defined $setup) { + usage(); + } + + require IkiWiki::Setup; + require IkiWiki::Plugin::aggregate; + + %config = IkiWiki::defaultconfig(); + IkiWiki::Setup::load(); + IkiWiki::checkconfig(); + + IkiWiki::Plugin::aggregate::migrate_to_internal(); + + print "... now add aggregateinternal => 1 to your .setup file\n"; +} + +sub setupformat { + my $setup=shift; + if (! defined $setup) { + usage(); + } + + require IkiWiki::Setup; + + %config = IkiWiki::defaultconfig(); + IkiWiki::Setup::load($setup); + IkiWiki::checkconfig(); + + # unpack old-format wrappers setting into new fields + my $cgi_seen=0; + my $rcs_seen=0; + foreach my $wrapper (@{$config{wrappers}}) { + if ($wrapper->{cgi}) { + if ($cgi_seen) { + die "don't know what to do with second cgi wrapper ".$wrapper->{wrapper}."\n"; + } + $cgi_seen++; + print "setting cgi_wrapper to ".$wrapper->{wrapper}."\n"; + $config{cgi_wrapper}=$wrapper->{wrapper}; + $config{cgi_wrappermode}=$wrapper->{wrappermode} + if exists $wrapper->{wrappermode}; + } + elsif ($config{rcs}) { + if ($rcs_seen) { + die "don't know what to do with second rcs wrapper ".$wrapper->{wrapper}."\n"; + } + $rcs_seen++; + print "setting $config{rcs}_wrapper to ".$wrapper->{wrapper}."\n"; + $config{$config{rcs}."_wrapper"}=$wrapper->{wrapper}; + $config{$config{rcs}."_wrappermode"}=$wrapper->{wrappermode} + if exists $wrapper->{wrappermode}; + } + else { + die "don't know what to do with wrapper ".$wrapper->{wrapper}."\n"; + } + } + + IkiWiki::Setup::dump($setup); +} + 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 "\tprefix_directives file\n"; + print STDERR "\tindexdb srcdir\n"; + print STDERR "\thashpassword srcdir\n"; + print STDERR "\taggregateinternal setupfile\n"; + print STDERR "\tsetupformat setupfile\n"; exit 1; } @@ -85,9 +178,18 @@ my $mode=shift; if ($mode eq 'prefix_directives') { prefix_directives(@ARGV); } +elsif ($mode eq 'hashpassword') { + hashpassword(@ARGV); +} elsif ($mode eq 'indexdb') { indexdb(@ARGV); } +elsif ($mode eq 'aggregateinternal') { + aggregateinternal(@ARGV); +} +elsif ($mode eq 'setupformat') { + setupformat(@ARGV); +} else { usage(); }