Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.s3.downloadSubBucket
on downloadSubBucket (bucketname, subpath, bucketfolder, flSkipIfCurrent=true, flLog=false) { <<Changes <<5/6/07; 9:22:37 AM by DW <<Add boolean, flSkipIfCurrent, if true, we check if the file already exists locally and has a current mod date -- if so, we don't download. <<Add boolean, flLog, if true, we log file downloads and errors. <<5/6/07; 8:46:42 AM by DW <<Don't put the bucketname at the beginning of the file path, because it's already included in the path that Amazon reports, resulting in the bucketname being repeated. <<5/5/07; 8:10:23 PM by DW <<Comment out debugging code. Set modification and creation date on files. <<5/5/07; 10:59:23 AM by DW <<WIthin the indicated bucket, download all the elements whose name begins with subpath. <<file.openfolder (bucketfolder) local (structuretable, adr, objectpath, f, bits, relpath); if not (subpath beginswith "/") { subpath = "/" + subpath}; s3.getBucket (bucketname + subpath, @structuretable); <<scratchpad.structuretable = structuretable for adr in @structuretable { local (fldownload = true, name = nameof (adr^), startticks = clock.ticks ()); local (relpath = xml.entitydecode (name, true), objectpath = bucketname + "/" + relpath); local (f = bucketfolder + string.replaceall (relpath, "/", file.getpathchar ())); if flSkipIfCurrent { if file.exists (f) { if file.modified (f) == adr^.modified { fldownload = false}}}; <<log.addtooutline ("Skip: " + objectpath) if fldownload { file.surefilepath (f); try { bits = s3.getobject (objectpath, flmessages:true); file.writewholefile (f, bits); file.setmodified (f, adr^.modified); file.setcreated (f, adr^.modified); local (sizestring = string.megabytestring (file.size (f))); if fllog { log.addtooutline ("Download: " + objectpath + " (" + sizestring + ")", startticks:startticks)}} else { if fllog { log.addtooutline ("Download error: " + objectpath + " (" + tryerror + ")", startticks:startticks)}}}}}; bundle { //test code downloadSubBucket ("scripting", "/backups/", "Macintosh HD:S3 Structure:scripting:")}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.