git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@281 830e0280-6d2a-0410-9c65-932aecc39d9d
Michal Ludvig authored on 2008/12/01 22:57:41... | ... |
@@ -105,7 +105,7 @@ class S3(object): |
105 | 105 |
response["list"] = getListFromXml(response["data"], "Bucket") |
106 | 106 |
return response |
107 | 107 |
|
108 |
- def bucket_list(self, bucket, prefix = None): |
|
108 |
+ def bucket_list(self, bucket, prefix = None, recursive = None): |
|
109 | 109 |
def _list_truncated(data): |
110 | 110 |
## <IsTruncated> can either be "true" or "false" or be missing completely |
111 | 111 |
is_truncated = getTextFromXml(data, ".//IsTruncated") or "false" |
... | ... |
@@ -120,7 +120,7 @@ class S3(object): |
120 | 120 |
uri_params = {} |
121 | 121 |
if prefix: |
122 | 122 |
uri_params['prefix'] = self.urlencode_string(prefix) |
123 |
- if not self.config.recursive: |
|
123 |
+ if not self.config.recursive and not recursive: |
|
124 | 124 |
uri_params['delimiter'] = "/" |
125 | 125 |
request = self.create_request("BUCKET_LIST", bucket = bucket, **uri_params) |
126 | 126 |
response = self.send_request(request) |
... | ... |
@@ -129,7 +129,7 @@ class S3(object): |
129 | 129 |
prefixes = _get_common_prefixes(response["data"]) |
130 | 130 |
while _list_truncated(response["data"]): |
131 | 131 |
uri_params['marker'] = self.urlencode_string(list[-1]["Key"]) |
132 |
- debug("Listing continues after '%s'" % marker) |
|
132 |
+ debug("Listing continues after '%s'" % uri_params['marker']) |
|
133 | 133 |
request = self.create_request("BUCKET_LIST", bucket = bucket, **uri_params) |
134 | 134 |
response = self.send_request(request) |
135 | 135 |
list += _get_contents(response["data"]) |
... | ... |
@@ -100,10 +100,14 @@ test_s3cmd("Buckets list", ["ls"], |
100 | 100 |
|
101 | 101 |
test_s3cmd("Sync to S3", ['sync', 'testsuite', 's3://s3cmd-autotest-1/xyz/', '--exclude', '.svn/*', '--exclude', '*.png', '--no-encrypt']) |
102 | 102 |
|
103 |
-test_s3cmd("Check bucket content", ['ls', 's3://s3cmd-autotest-1'], |
|
103 |
+test_s3cmd("Check bucket content (-r)", ['ls', '--recursive', 's3://s3cmd-autotest-1'], |
|
104 | 104 |
must_find = [ u"s3://s3cmd-autotest-1/xyz/unicode/ŪņЇЌœđЗ/☺ unicode € rocks ™" ], |
105 | 105 |
must_not_find = [ "logo.png" ]) |
106 | 106 |
|
107 |
+test_s3cmd("Check bucket content", ['ls', 's3://s3cmd-autotest-1/xyz/'], |
|
108 |
+ must_find_re = [ u"D s3://s3cmd-autotest-1/xyz/unicode/$" ], |
|
109 |
+ must_not_find = [ u"ŪņЇЌœđЗ/☺ unicode € rocks ™" ]) |
|
110 |
+ |
|
107 | 111 |
# test_s3cmd("Recursive put", ['put', '--recursive', 'testsuite/etc', 's3://s3cmd-autotest-1/xyz/']) |
108 | 112 |
|
109 | 113 |
test_s3cmd("Put public, guess MIME", ['put', '--guess-mime-type', '--acl-public', 'testsuite/etc/logo.png', 's3://s3cmd-autotest-1/xyz/etc/logo.png'], |
... | ... |
@@ -68,7 +68,7 @@ def subcmd_bucket_usage(s3, uri): |
68 | 68 |
if object.endswith('*'): |
69 | 69 |
object = object[:-1] |
70 | 70 |
try: |
71 |
- response = s3.bucket_list(bucket, prefix = object) |
|
71 |
+ response = s3.bucket_list(bucket, prefix = object, recursive = True) |
|
72 | 72 |
except S3Error, e: |
73 | 73 |
if S3.codes.has_key(e.Code): |
74 | 74 |
error(S3.codes[e.Code] % bucket) |
... | ... |
@@ -420,7 +420,7 @@ def _get_filelist_remote(remote_uri): |
420 | 420 |
info("Retrieving list of remote files...") |
421 | 421 |
|
422 | 422 |
s3 = S3(Config()) |
423 |
- response = s3.bucket_list(remote_uri.bucket(), prefix = remote_uri.object()) |
|
423 |
+ response = s3.bucket_list(remote_uri.bucket(), prefix = remote_uri.object(), recursive = True) |
|
424 | 424 |
|
425 | 425 |
rem_base = remote_uri.object() |
426 | 426 |
rem_base_len = len(rem_base) |