link fixup on rename working

master
Joey Hess 2008-07-23 19:12:05 -04:00
parent 4918c164e8
commit 7befc6deb3
3 changed files with 96 additions and 32 deletions

View File

@ -144,11 +144,11 @@ sub postrename ($;$$) {
# fixups to the edit form state.
# Tweak the edit form to be editing the new page.
$postrename->param("page", $dest);
# Get a new edit token; old one might not be valid for the
# renamed file.
$postrename->param("rcsinfo", IkiWiki::rcs_prepedit($pagesources{$dest}));
}
# Get a new edit token; old likely not valid.
$postrename->param("rcsinfo", IkiWiki::rcs_prepedit($pagesources{$dest}));
IkiWiki::cgi_editpage($postrename, $session);
}
@ -227,26 +227,56 @@ sub sessioncgi ($$) { #{{{
# Ensures that the dest directory exists and is ok.
IkiWiki::prep_writefile($destfile, $config{srcdir});
# Do rename, and update the wiki.
# Do rename, update other pages, and refresh site.
IkiWiki::disable_commit_hook() if $config{rcs};
require IkiWiki::Render;
if ($config{rcs}) {
IkiWiki::disable_commit_hook();
IkiWiki::rcs_rename($srcfile, $destfile);
IkiWiki::rcs_commit_staged(
sprintf(gettext("rename %s to %s"), $src, $dest),
$session->param("name"), $ENV{REMOTE_ADDR});
IkiWiki::enable_commit_hook();
IkiWiki::rcs_update();
}
else {
if (! rename("$config{srcdir}/$srcfile", "$config{srcdir}/$destfile")) {
error("rename: $!");
}
}
my @fixedlinks;
foreach my $page (keys %links) {
my $needfix=0;
foreach my $link (@{$links{$page}}) {
my $bestlink=bestlink($page, $link);
if ($bestlink eq $src) {
$needfix=1;
}
}
if ($needfix) {
my $file=$pagesources{$page};
my $oldcontent=readfile($config{srcdir}."/".$file);
my $content=renamepage_hook($page, $src, $dest, $oldcontent);
if ($oldcontent ne $content) {
my $token=IkiWiki::rcs_prepedit($file);
eval { writefile($file, $config{srcdir}, $content) };
next if $@;
my $conflict=IkiWiki::rcs_commit(
$file,
sprintf(gettext("update for rename of %s to %s"), $src, $dest),
$token,
$session->param("name"),
$ENV{REMOTE_ADDR}
);
push @fixedlinks, $page if ! defined $conflict;
}
}
}
if ($config{rcs}) {
IkiWiki::enable_commit_hook();
IkiWiki::rcs_update();
}
IkiWiki::refresh();
IkiWiki::saveindex();
# scan for broken links to $src
# Scan for any remaining broken links to $src.
my @brokenlinks;
foreach my $page (keys %links) {
foreach my $link (@{$links{$page}}) {
@ -262,7 +292,7 @@ sub sessioncgi ($$) { #{{{
my $template=template("renamesummary.tmpl");
$template->param(src => $src);
$template->param(dest => $dest);
$template->param(linklist => [
$template->param(brokenlinks => [
map {
{
page => htmllink($dest, $dest, $_,
@ -270,6 +300,14 @@ sub sessioncgi ($$) { #{{{
}
} @brokenlinks
]);
$template->param(fixedlinks => [
map {
{
page => htmllink($dest, $dest, $_,
noimageinline => 1)
}
} @fixedlinks
]);
$renamesummary=$template->output;
postrename($session, $dest, $q->param("attachment"));
@ -280,6 +318,21 @@ sub sessioncgi ($$) { #{{{
exit 0;
}
}
} #}}}
sub renamepage_hook ($$$$) { #{{{
my ($page, $src, $dest, $content)=@_;
IkiWiki::run_hooks(renamepage => sub {
$content=shift->(
page => $page,
oldpage => $src,
newpage => $dest,
content => $content,
);
});
return $content;
}# }}}
1

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-07-22 19:44-0400\n"
"POT-Creation-Date: 2008-07-23 18:43-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -24,7 +24,7 @@ msgstr ""
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
#: ../IkiWiki/CGI.pm:190 ../IkiWiki/CGI.pm:527
#: ../IkiWiki/CGI.pm:190 ../IkiWiki/CGI.pm:526
msgid "Your login session has expired."
msgstr ""
@ -49,29 +49,29 @@ msgstr ""
msgid "%s is not an editable page"
msgstr ""
#: ../IkiWiki/CGI.pm:438 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/CGI.pm:437 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:261 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:78
#: ../IkiWiki/Render.pm:148
msgid "discussion"
msgstr ""
#: ../IkiWiki/CGI.pm:494
#: ../IkiWiki/CGI.pm:493
#, perl-format
msgid "creating %s"
msgstr ""
#: ../IkiWiki/CGI.pm:512 ../IkiWiki/CGI.pm:540 ../IkiWiki/CGI.pm:550
#: ../IkiWiki/CGI.pm:586 ../IkiWiki/CGI.pm:631
#: ../IkiWiki/CGI.pm:511 ../IkiWiki/CGI.pm:539 ../IkiWiki/CGI.pm:549
#: ../IkiWiki/CGI.pm:584 ../IkiWiki/CGI.pm:629
#, perl-format
msgid "editing %s"
msgstr ""
#: ../IkiWiki/CGI.pm:731
#: ../IkiWiki/CGI.pm:729
msgid "You are banned."
msgstr ""
#: ../IkiWiki/CGI.pm:760 ../IkiWiki/CGI.pm:761 ../IkiWiki.pm:783
#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:783
msgid "Error"
msgstr ""
@ -553,24 +553,29 @@ msgstr ""
msgid "%s already exists on disk"
msgstr ""
#: ../IkiWiki/Plugin/rename.pm:98
#: ../IkiWiki/Plugin/rename.pm:86
#, perl-format
msgid "rename %s"
msgstr ""
#: ../IkiWiki/Plugin/rename.pm:181
#: ../IkiWiki/Plugin/rename.pm:169
msgid "Only one attachment can be renamed at a time."
msgstr ""
#: ../IkiWiki/Plugin/rename.pm:184
#: ../IkiWiki/Plugin/rename.pm:172
msgid "Please select the attachment to rename."
msgstr ""
#: ../IkiWiki/Plugin/rename.pm:229
#: ../IkiWiki/Plugin/rename.pm:236
#, perl-format
msgid "rename %s to %s"
msgstr ""
#: ../IkiWiki/Plugin/rename.pm:263
#, perl-format
msgid "update for rename of %s to %s"
msgstr ""
#: ../IkiWiki/Plugin/search.pm:20
#, perl-format
msgid "Must specify %s when using the search plugin"
@ -692,42 +697,42 @@ msgstr ""
msgid "skipping bad filename %s"
msgstr ""
#: ../IkiWiki/Render.pm:351
#: ../IkiWiki/Render.pm:355
#, perl-format
msgid "removing old page %s"
msgstr ""
#: ../IkiWiki/Render.pm:391
#: ../IkiWiki/Render.pm:395
#, perl-format
msgid "scanning %s"
msgstr ""
#: ../IkiWiki/Render.pm:396
#: ../IkiWiki/Render.pm:400
#, perl-format
msgid "rendering %s"
msgstr ""
#: ../IkiWiki/Render.pm:417
#: ../IkiWiki/Render.pm:421
#, perl-format
msgid "rendering %s, which links to %s"
msgstr ""
#: ../IkiWiki/Render.pm:438
#: ../IkiWiki/Render.pm:442
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr ""
#: ../IkiWiki/Render.pm:477
#: ../IkiWiki/Render.pm:481
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr ""
#: ../IkiWiki/Render.pm:489
#: ../IkiWiki/Render.pm:493
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr ""
#: ../IkiWiki/Render.pm:513
#: ../IkiWiki/Render.pm:517
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr ""

View File

@ -2,10 +2,16 @@
<b>Successfully renamed <TMPL_VAR SRC> to <TMPL_VAR DEST>.</b>
</p>
<p>
<TMPL_IF LINKLIST>
<TMPL_IF FIXEDLINKS>
The following pages have been automatically modified to update their links to <TMPL_VAR DEST>:
<ul>
<TMPL_LOOP NAME=FIXEDLINKS><li><TMPL_VAR PAGE></li></TMPL_LOOP>
</ul>
</TMPL_IF>
<TMPL_IF BROKENLINKS>
The following pages still link to <TMPL_VAR SRC>:
<ul>
<TMPL_LOOP NAME=LINKLIST><li><TMPL_VAR PAGE></li></TMPL_LOOP>
<TMPL_LOOP NAME=BROKENLINKS><li><TMPL_VAR PAGE></li></TMPL_LOOP>
</ul>
<TMPL_ELSE>
No pages have broken links to <TMPL_VAR SRC>.