X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/041923a89ece8b1ed195cb7b528843c15770ea6f..1ad7ede08821b45bfed8e9ffd46515ab0c17f994:/IkiWiki/Plugin/amazon_s3.pm diff --git a/IkiWiki/Plugin/amazon_s3.pm b/IkiWiki/Plugin/amazon_s3.pm index e181a84da..a9da6bf12 100644 --- a/IkiWiki/Plugin/amazon_s3.pm +++ b/IkiWiki/Plugin/amazon_s3.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::amazon_s3; use warnings; no warnings 'redefine'; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IkiWiki::Render; use Net::Amazon::S3; @@ -16,13 +16,13 @@ BEGIN { } }; -sub import { #{{{ +sub import { hook(type => "getopt", id => "amazon_s3", call => \&getopt); hook(type => "getsetup", id => "amazon_s3", call => \&getsetup); hook(type => "checkconfig", id => "amazon_s3", call => \&checkconfig); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); @@ -38,11 +38,15 @@ sub getopt () { #{{{ debug(gettext("done")); exit(0); }); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return - amazon_s3_key_id => { + plugin => { + safe => 0, + rebuild => 0, + }, + amazon_s3_key_id => { type => "string", example => "XXXXXXXXXXXXXXXXXXXX", description => "public access key id", @@ -84,9 +88,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub checkconfig { #{{{ +sub checkconfig { foreach my $field (qw{amazon_s3_key_id amazon_s3_key_file amazon_s3_bucket}) { if (! exists $config{$field} || ! defined $config{$field}) { @@ -97,11 +101,11 @@ sub checkconfig { #{{{ ! defined $config{amazon_s3_prefix}) { $config{amazon_s3_prefix}="wiki/"; } -} #}}} +} { my $bucket; -sub getbucket { #{{{ +sub getbucket { return $bucket if defined $bucket; open(IN, "<", $config{amazon_s3_key_file}) || error($config{amazon_s3_key_file}.": ".$!); @@ -129,16 +133,20 @@ sub getbucket { #{{{ } if (! $bucket) { - error(gettext("Failed to create bucket in S3: "). + # Try to use existing bucket. + $bucket=$s3->bucket($config{amazon_s3_bucket}); + } + if (! $bucket) { + error(gettext("Failed to create S3 bucket: "). $s3->err.": ".$s3->errstr."\n"); } return $bucket; -} #}}} +} } # Given a file, return any S3 keys associated with it. -sub file2keys ($) { #{{{ +sub file2keys ($) { my $file=shift; my @keys; @@ -158,14 +166,14 @@ sub file2keys ($) { #{{{ } } return @keys; -} #}}} +} package IkiWiki; use File::MimeInfo; use Encode; # This is a wrapper around the real writefile. -sub writefile ($$$;$$) { #{{{ +sub writefile ($$$;$$) { my $file=shift; my $destdir=shift; my $content=shift; @@ -174,7 +182,7 @@ sub writefile ($$$;$$) { #{{{ # First, write the file to disk. my $ret=$IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::writefile'}->($file, $destdir, $content, $binary, $writer); - + my @keys=IkiWiki::Plugin::amazon_s3::file2keys("$destdir/$file"); # Store the data in S3. @@ -221,11 +229,12 @@ sub writefile ($$$;$$) { #{{{ } return $ret; -} #}}} +} # This is a wrapper around the real prune. -sub prune ($) { #{{{ +sub prune ($;$) { my $file=shift; + my $up_to=shift; my @keys=IkiWiki::Plugin::amazon_s3::file2keys($file); @@ -242,7 +251,7 @@ sub prune ($) { #{{{ } } - return $IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::prune'}->($file); -} #}}} + return $IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::prune'}->($file, $up_to); +} 1