From: Joey Hess <joey@kodama.kitenet.net>
Date: Mon, 21 Jul 2008 20:18:28 +0000 (-0400)
Subject: a few bugfixes
X-Git-Tag: 2.55~94
X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=2461ce0de6231bfeea4d98c86806cdbb85683297;p=ikiwiki.git

a few bugfixes

Including a check the the file is in the srcdir, as opposed to some other
directory.
---

diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm
index a37240680..badcfe667 100644
--- a/IkiWiki/Plugin/remove.pm
+++ b/IkiWiki/Plugin/remove.pm
@@ -120,12 +120,22 @@ sub sessioncgi ($$) { #{{{
 	
 			# Validate removal by checking that the page exists,
 			# and that the user is allowed to edit(/remove) it.
+			my @files;
 			foreach my $page (@pages) {
 				if (! exists $pagesources{$page}) {
 					error(sprintf(gettext("%s does not exist"),
 					htmllink("", "", $page, noimageinline => 1)));
 				}
 				IkiWiki::check_canedit($page, $q, $session);
+
+				my $file=$pagesources{$_};
+				if (! -e "$config{srcdir}/$file") {
+					error(sprintf(gettext("%s is not in the srcdir, so it cannot be deleted"), $file));
+				}
+				elsif (! -f "$config{srcdir}/$file") {
+					error(sprintf(gettext("%s is not a file"), $file));
+				}
+				push @files, $file;
 			}
 
 			# Do removal, and update the wiki.
@@ -133,23 +143,30 @@ sub sessioncgi ($$) { #{{{
 			if ($config{rcs}) {
 				IkiWiki::disable_commit_hook();
 				foreach my $file (@files) {
+					my $token=IkiWiki::rcs_prepedit($file);
 					IkiWiki::rcs_remove($file);
 					IkiWiki::rcs_commit($file, gettext("removed"),
-						IkiWiki::rcs_prepedit($file),
-						$session->param("name"), $ENV{REMOTE_ADDR});
+						$token, $session->param("name"), $ENV{REMOTE_ADDR});
 				}
 				IkiWiki::enable_commit_hook();
 				IkiWiki::rcs_update();
 			}
+			else {
+				foreach my $file (@files) {
+					IkiWiki::prune("$config{srcdir}/$file");
+				}
+			}
 			foreach my $file (@files) {
-				IkiWiki::prune("$config{srcdir}/$file");
+				delete $IkiWiki::pagecase{$file};
+				print STDERR "delete $file\n";
+				delete $IkiWiki::links{$file};
 			}
 			IkiWiki::refresh();
 			IkiWiki::saveindex();
 
 			if ($q->param("attachment")) {
 				# Attachments were deleted, so redirect
-				# to the edit form.
+				# back to the edit form.
 				postremove($session);
 			}
 			else {