Skip to content
This repository has been archived by the owner on Nov 4, 2018. It is now read-only.

Commit

Permalink
* s3cmd, S3/S3.py, NEWS: Support for (non-)recursive 'ls'
Browse files Browse the repository at this point in the history
git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@280 830e0280-6d2a-0410-9c65-932aecc39d9d
  • Loading branch information
mludvig committed Dec 1, 2008
1 parent c29ee86 commit 36cfce6
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 10 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
@@ -1,3 +1,7 @@
2008-12-02 Michal Ludvig <michal@logix.cz>

* s3cmd, S3/S3.py, NEWS: Support for (non-)recursive 'ls'

2008-12-01 Michal Ludvig <michal@logix.cz>

* Released version 0.9.9-pre3
Expand Down
10 changes: 10 additions & 0 deletions NEWS
@@ -1,3 +1,13 @@
s3cmd 0.9.9-pre4
================
* Support for non-recursive 'ls'

s3cmd 0.9.9-pre3
================
* Bugfixes only
- Fixed sync from S3 to local
- Fixed progress meter with Unicode chars

s3cmd 0.9.9-pre2
================
* Implemented progress meter (--progress / --no-progress)
Expand Down
20 changes: 14 additions & 6 deletions S3/S3.py
Expand Up @@ -114,20 +114,28 @@ def _list_truncated(data):
def _get_contents(data):
return getListFromXml(data, "Contents")

prefix = self.urlencode_string(prefix)
request = self.create_request("BUCKET_LIST", bucket = bucket, prefix = prefix)
def _get_common_prefixes(data):
return getListFromXml(data, "CommonPrefixes")

uri_params = {}
if prefix:
uri_params['prefix'] = self.urlencode_string(prefix)
if not self.config.recursive:
uri_params['delimiter'] = "/"
request = self.create_request("BUCKET_LIST", bucket = bucket, **uri_params)
response = self.send_request(request)
#debug(response)
list = _get_contents(response["data"])
prefixes = _get_common_prefixes(response["data"])
while _list_truncated(response["data"]):
marker = list[-1]["Key"]
uri_params['marker'] = self.urlencode_string(list[-1]["Key"])
debug("Listing continues after '%s'" % marker)
request = self.create_request("BUCKET_LIST", bucket = bucket,
prefix = prefix,
marker = self.urlencode_string(marker))
request = self.create_request("BUCKET_LIST", bucket = bucket, **uri_params)
response = self.send_request(request)
list += _get_contents(response["data"])
prefixes += _get_common_prefixes(response["data"])
response['list'] = list
response['common_prefixes'] = prefixes
return response

def bucket_create(self, bucket, bucket_location = None):
Expand Down
14 changes: 10 additions & 4 deletions s3cmd
Expand Up @@ -113,19 +113,25 @@ def subcmd_buckets_list_all(s3):

def subcmd_bucket_list(s3, uri):
bucket = uri.bucket()
object = uri.object()
prefix = uri.object()

debug("Bucket 's3://%s':" % bucket)
if object.endswith('*'):
object = object[:-1]
if prefix.endswith('*'):
prefix = prefix[:-1]
try:
response = s3.bucket_list(bucket, prefix = object)
response = s3.bucket_list(bucket, prefix = prefix)
except S3Error, e:
if S3.codes.has_key(e.info["Code"]):
error(S3.codes[e.info["Code"]] % bucket)
return
else:
raise

for prefix in response['common_prefixes']:
output("%s %s" % (
"D".rjust(28),
uri.compose_uri(bucket, prefix["Prefix"])))

for object in response["list"]:
size, size_coeff = formatSize(object["Size"], Config().human_readable_sizes)
output("%s %s%s %s" % (
Expand Down

0 comments on commit 36cfce6

Please sign in to comment.