rename: moved subpages addition to a rename hook

Signed-off-by: intrigeri <intrigeri@boum.org>
master
intrigeri 2009-03-08 12:52:49 +01:00
parent 8cfe428a28
commit 1bf21d2a37
1 changed files with 38 additions and 25 deletions

View File

@ -10,7 +10,7 @@ sub import {
hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup); hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup);
hook(type => "formbuilder", id => "rename", call => \&formbuilder); hook(type => "formbuilder", id => "rename", call => \&formbuilder);
hook(type => "sessioncgi", id => "rename", call => \&sessioncgi); hook(type => "sessioncgi", id => "rename", call => \&sessioncgi);
hook(type => "rename", id => "rename", call => \&rename);
} }
sub getsetup () { sub getsetup () {
@ -312,33 +312,14 @@ sub sessioncgi ($$) {
required => 1, 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=rename_hook(
torename => \@torename, torename => \@torename,
done => {}, done => {},
cgi => $q, cgi => $q,
session => $session, session => $session,
); );
# FIXME: remove duplicates (based on src or srcfile key)
# from @torename
require IkiWiki::Render; require IkiWiki::Render;
IkiWiki::disable_commit_hook() if $config{rcs}; IkiWiki::disable_commit_hook() if $config{rcs};
@ -434,6 +415,39 @@ sub sessioncgi ($$) {
} }
} }
# 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 { sub linklist {
# generates a list of links in a form suitable for FormBuilder # generates a list of links in a form suitable for FormBuilder
my $dest=shift; my $dest=shift;
@ -474,7 +488,6 @@ sub rename_hook (@) {
my $q=$params{cgi}; my $q=$params{cgi};
my $session=$params{session}; my $session=$params{session};
debug("rename_hook called with ".scalar(@torename)." args.");
my @nextset; my @nextset;
if (@torename) { if (@torename) {
foreach my $torename (@torename) { foreach my $torename (@torename) {
@ -521,7 +534,7 @@ sub do_rename ($$$) {
IkiWiki::rcs_rename($rename->{srcfile}, $rename->{destfile}); IkiWiki::rcs_rename($rename->{srcfile}, $rename->{destfile});
} }
else { else {
if (! rename($config{srcdir}."/".$rename->{srcfile}, if (! CORE::rename($config{srcdir}."/".$rename->{srcfile},
$config{srcdir}."/".$rename->{destfile})) { $config{srcdir}."/".$rename->{destfile})) {
error("rename: $!"); error("rename: $!");
} }