X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/825e2b1378b1def4980e36642ed84999599eb017..72ac9821e566373de49a77ffee642b14ecf643e1:/IkiWiki/Plugin/rename.pm diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index d3ca8bd3a..c3e03496f 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -10,7 +10,7 @@ sub import { hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup); hook(type => "formbuilder", id => "rename", call => \&formbuilder); hook(type => "sessioncgi", id => "rename", call => \&sessioncgi); - hook(type => "rename", id => "rename", call => \&rename); + hook(type => "rename", id => "rename", call => \&rename_subpages); } sub getsetup () { @@ -137,14 +137,16 @@ sub rename_form ($$$) { # insert the standard extensions my @page_types; if (exists $IkiWiki::hooks{htmlize}) { - @page_types=grep { !/^_/ } - keys %{$IkiWiki::hooks{htmlize}}; + foreach my $key (grep { !/^_/ } keys %{$IkiWiki::hooks{htmlize}}) { + push @page_types, [$key, $IkiWiki::hooks{htmlize}{$key}{longname} || $key]; + } } + @page_types=sort @page_types; # make sure the current extension is in the list my ($ext) = $pagesources{$page}=~/\.([^.]+)$/; if (! $IkiWiki::hooks{htmlize}{$ext}) { - unshift(@page_types, $ext); + unshift(@page_types, [$ext, $ext]); } $f->field(name => "type", type => 'select', @@ -319,14 +321,6 @@ sub sessioncgi ($$) { session => $session, ); - # remove duplicates from @torename - my %seen=(); - my @uniq_torename; - foreach my $item (@torename) { - push(@uniq_torename, $item) unless $seen{$item->{src}}++; - } - @torename=@uniq_torename; - require IkiWiki::Render; IkiWiki::disable_commit_hook() if $config{rcs}; my %origpagesources=%pagesources; @@ -422,7 +416,7 @@ sub sessioncgi ($$) { } # Add subpages to the list of pages to be renamed, if needed. -sub rename(@) { +sub rename_subpages (@) { my %params = @_; my %torename = %{$params{torename}}; @@ -486,7 +480,7 @@ sub renamepage_hook ($$$$) { return $content; } -sub rename_hook (@) { +sub rename_hook { my %params = @_; my @torename=@{$params{torename}}; @@ -494,33 +488,34 @@ sub rename_hook (@) { my $q=$params{cgi}; my $session=$params{session}; + return () unless @torename; + my @nextset; - if (@torename) { - foreach my $torename (@torename) { - unless (exists $done{$torename->{src}} && $done{$torename->{src}}) { - IkiWiki::run_hooks(rename => sub { - push @nextset, shift->( - torename => $torename, - cgi => $q, - session => $session, - ); - }); - $done{$torename->{src}}=1; - } + foreach my $torename (@torename) { + unless (exists $done{$torename->{src}} && $done{$torename->{src}}) { + IkiWiki::run_hooks(rename => sub { + push @nextset, shift->( + torename => $torename, + cgi => $q, + session => $session, + ); + }); + $done{$torename->{src}}=1; } - push @torename, rename_hook( - torename => \@nextset, - done => \%done, - cgi => $q, - session => $session, - ); - return @torename; - } - else { - return (); } + + push @torename, rename_hook( + torename => \@nextset, + done => \%done, + cgi => $q, + session => $session, + ); + + # dedup + my %seen; + return grep { ! $seen{$_->{src}}++ } @torename; } - + sub do_rename ($$$) { my $rename=shift; my $q=shift; @@ -540,7 +535,7 @@ sub do_rename ($$$) { IkiWiki::rcs_rename($rename->{srcfile}, $rename->{destfile}); } else { - if (! CORE::rename($config{srcdir}."/".$rename->{srcfile}, + if (! rename($config{srcdir}."/".$rename->{srcfile}, $config{srcdir}."/".$rename->{destfile})) { error("rename: $!"); }