Browse code

* S3/S3.py: Fix bucket listing for buckets with over 1000 prefixes. (contributed by Timothee Linden)

git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@413 830e0280-6d2a-0410-9c65-932aecc39d9d

Michal Ludvig authored on 2010/05/26 20:39:02
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+2010-05-27  Michal Ludvig  <mludvig@logix.net.nz>
2
+
3
+	* S3/S3.py: Fix bucket listing for buckets with
4
+	  over 1000 prefixes. (contributed by Timothee Linden)
5
+
1 6
 2010-05-21  Michal Ludvig  <mludvig@logix.net.nz>
2 7
 
3 8
 	* s3cmd, S3/S3.py: Added support for bucket locations
... ...
@@ -178,15 +178,25 @@ class S3(object):
178 178
 			return getListFromXml(data, "CommonPrefixes")
179 179
 
180 180
 		uri_params = {}
181
-		response = self.bucket_list_noparse(bucket, prefix, recursive, uri_params)
182
-		list = _get_contents(response["data"])
183
-		prefixes = _get_common_prefixes(response["data"])
184
-		while _list_truncated(response["data"]):
185
-			uri_params['marker'] = self.urlencode_string(list[-1]["Key"])
186
-			debug("Listing continues after '%s'" % uri_params['marker'])
181
+		truncated = True
182
+		list = []
183
+		prefixes = []
184
+
185
+		while truncated:
187 186
 			response = self.bucket_list_noparse(bucket, prefix, recursive, uri_params)
188
-			list += _get_contents(response["data"])
189
-			prefixes += _get_common_prefixes(response["data"])
187
+			curList = _get_contents(response["data"])
188
+			curPrefixes = _get_common_prefixes(response["data"])
189
+			truncated = _list_truncated(response["data"])
190
+			if truncated:
191
+				if curList:
192
+					uri_params['marker'] = self.urlencode_string( curList[-1]["Key"] )
193
+				else:
194
+					uri_params['marker'] = self.urlencode_string( curPrefixes[-1]["Prefix"] )
195
+				debug("Listing continues after '%s'" % uri_params['marker'])
196
+
197
+			list += curList
198
+			prefixes += curPrefixes
199
+
190 200
 		response['list'] = list
191 201
 		response['common_prefixes'] = prefixes
192 202
 		return response