]> sipb.mit.edu Git - ikiwiki.git/blobdiff - ikiwiki-transition
remove top-level directive page from basewiki
[ikiwiki.git] / ikiwiki-transition
index 802cd643d0ff07647a582cafc5a61921f2c26284..9a5dd1362b6ec936758bf8e1f904d5d90787d5cf 100755 (executable)
@@ -159,14 +159,49 @@ sub setupformat {
        IkiWiki::Setup::dump($setup);
 }
 
+sub moveprefs {
+       my $setup=shift;
+       if (! defined $setup) {
+               usage();
+       }
+
+       require IkiWiki::Setup;
+
+       %config = IkiWiki::defaultconfig();
+       IkiWiki::Setup::load($setup);
+       IkiWiki::checkconfig();
+
+       eval q{use IkiWiki::UserInfo};
+       error $@ if $@;
+
+       foreach my $field (qw{allowed_attachments locked_pages}) {
+               my $orig=$config{$field};
+               foreach my $admin (@{$config{adminuser}}) {
+                       my $a=IkiWiki::userinfo_get($admin, $field);
+                       if (defined $a && length $a &&
+                           $a ne $orig && # might already have been moved
+                           defined $config{$field} &&
+                           length $config{$field}) {
+                                $config{$field}=IkiWiki::pagespec_merge($config{$field}, $a);
+                       }
+               }
+       }
+
+       my %banned=map { $_ => 1 } @{$config{banned_users}}, IkiWiki::get_banned_users();
+       $config{banned_users}=[sort keys %banned];
+
+       IkiWiki::Setup::dump($setup);
+}
+
 sub usage {
        print STDERR "Usage: ikiwiki-transition type ...\n";
        print STDERR "Currently supported transition subcommands:\n";
-       print STDERR "\tprefix_directives file\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";
+       print STDERR "\tmoveprefs setupfile\n";
        exit 1;
 }
 
@@ -188,6 +223,9 @@ elsif ($mode eq 'aggregateinternal') {
 elsif ($mode eq 'setupformat') {
        setupformat(@ARGV);
 }
+elsif ($mode eq 'moveprefs') {
+       moveprefs(@ARGV);
+}
 else {
        usage();
 }
@@ -245,3 +283,15 @@ sub oldloadindex {
        
        return close($in);
 }
+
+# Used to be in IkiWiki/UserInfo, but only used here now.
+sub get_banned_users () {
+       my @ret;
+       my $userinfo=userinfo_retrieve();
+       foreach my $user (keys %{$userinfo}) {
+               push @ret, $user if $userinfo->{$user}->{banned};
+       }
+       return @ret;
+}
+
+1