Browse code

Fixes for non-recursive 'ls' support from previous commit.

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
Showing 3 changed files
... ...
@@ -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)