summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/rename.pm63
1 files changed, 38 insertions, 25 deletions
diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index ccbf09c3f..38cebdba5 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);
}
sub getsetup () {
@@ -312,33 +312,14 @@ sub sessioncgi ($$) {
required => 1,
};
- # See if any subpages need to be renamed.
- if ($q->param("subpages") && $src ne $dest) {
- foreach my $p (keys %pagesources) {
- next unless $pagesources{$p}=~m/^\Q$src\E\//;
- # If indexpages is enabled, the
- # srcfile should not be confused
- # with a subpage.
- next if $pagesources{$p} eq $srcfile;
-
- my $d=$pagesources{$p};
- $d=~s/^\Q$src\E\//$dest\//;
- push @torename, {
- src => $p,
- srcfile => $pagesources{$p},
- dest => pagename($d),
- destfile => $d,
- required => 0,
- };
- }
- }
-
@torename=rename_hook(
torename => \@torename,
done => {},
cgi => $q,
session => $session,
);
+ # FIXME: remove duplicates (based on src or srcfile key)
+ # from @torename
require IkiWiki::Render;
IkiWiki::disable_commit_hook() if $config{rcs};
@@ -433,7 +414,40 @@ sub sessioncgi ($$) {
exit 0;
}
}
-
+
+# Add subpages to the list of pages to be renamed, if needed.
+sub rename(@) {
+ my %params = @_;
+
+ my %torename = %{$params{torename}};
+ my $q = $params{cgi};
+ my $src = $torename{src};
+ my $srcfile = $torename{src};
+ my $dest = $torename{dest};
+ my $destfile = $torename{dest};
+
+ return () unless ($q->param("subpages") && $src ne $dest);
+
+ my @ret;
+ foreach my $p (keys %pagesources) {
+ next unless $pagesources{$p}=~m/^\Q$src\E\//;
+ # If indexpages is enabled, the srcfile should not be confused
+ # with a subpage.
+ next if $pagesources{$p} eq $srcfile;
+
+ my $d=$pagesources{$p};
+ $d=~s/^\Q$src\E\//$dest\//;
+ push @ret, {
+ src => $p,
+ srcfile => $pagesources{$p},
+ dest => pagename($d),
+ destfile => $d,
+ required => 0,
+ };
+ }
+ return @ret;
+}
+
sub linklist {
# generates a list of links in a form suitable for FormBuilder
my $dest=shift;
@@ -474,7 +488,6 @@ sub rename_hook (@) {
my $q=$params{cgi};
my $session=$params{session};
- debug("rename_hook called with ".scalar(@torename)." args.");
my @nextset;
if (@torename) {
foreach my $torename (@torename) {
@@ -521,7 +534,7 @@ sub do_rename ($$$) {
IkiWiki::rcs_rename($rename->{srcfile}, $rename->{destfile});
}
else {
- if (! rename($config{srcdir}."/".$rename->{srcfile},
+ if (! CORE::rename($config{srcdir}."/".$rename->{srcfile},
$config{srcdir}."/".$rename->{destfile})) {
error("rename: $!");
}