From: Joey Hess <joey@kodama.kitenet.net>
Date: Thu, 8 May 2008 17:00:05 +0000 (-0400)
Subject: simplify key determination code
X-Git-Tag: 2.46~18
X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=8861af53dbf5fc8483780d3e70aa94b1b7631d9a;p=ikiwiki.git

simplify key determination code
---

diff --git a/IkiWiki/Plugin/amazon_s3.pm b/IkiWiki/Plugin/amazon_s3.pm
index f062a4295..cc15fbdb1 100644
--- a/IkiWiki/Plugin/amazon_s3.pm
+++ b/IkiWiki/Plugin/amazon_s3.pm
@@ -125,18 +125,20 @@ sub writefile ($$$;$$) { #{{{
 			# read back in the file that the writer emitted
 			$res=$bucket->add_key_filename($key, "$destdir/$file", \%opts);
 		}
-		if ($res && $key=~/(^|\/)index.$config{htmlext}$/) {
+		if ($res && $key=~/(^|.*\/)index.$config{htmlext}$/) {
 			# index.html files are a special case. Since S3 is
 			# not a normal web server, it won't serve up
 			# foo/index.html when foo/ is requested. So the
 			# file has to be stored twice. (This is bad news
 			# when usedirs is enabled!)
-			$key=~s/index.$config{htmlext}$//;
+			# TODO: invesitgate using the new copy operation.
+			#       (It may not be robust enough.)
+			my $base=$1;
 			if (! $writer) {
-				$res=$bucket->add_key($key, $content, \%opts);
+				$res=$bucket->add_key($base, $content, \%opts);
 			}
 			else {
-				$res=$bucket->add_key_filename($key, "$destdir/$file", \%opts);
+				$res=$bucket->add_key_filename($base, "$destdir/$file", \%opts);
 			}
 		}
 		if (! $res) {
@@ -158,10 +160,9 @@ sub prune ($) { #{{{
 		my $key=$config{amazon_s3_prefix}.$1;
 		my $bucket=IkiWiki::Plugin::amazon_s3::getbucket();
 		my $res=$bucket->delete_key($key);
-		if ($res && $key=~/(^|\/)index.$config{htmlext}$/) {
+		if ($res && $key=~/(^|.*\/)index.$config{htmlext}$/) {
 			# index.html special case: Delete other file too
-			$key=~s/index.$config{htmlext}$//;
-			$res=$bucket->delete_key($key);
+			$res=$bucket->delete_key($1);
 		}
 		if (! $res) {
 			error(gettext("Failed to delete file from S3: ").