Release 3.40: Skipped
Release 3.39: Skipped
Release 3.38 (release-date: 2013-11-25)
gsutil cp -r gs://bucket1 gs://bucket2 would create objects in bucket2 with names corresponding to version-specific URIs in bucket1 (e.g., gs://bucket2/obj#1361417568482000, where the “#1361417568482000” part was part of the object name, not the object's generation).
This problem similarly caused gsutil cp -r gs://bucket1 ./dir to create files names corresponding to version-specific URIs in bucket1.
gsutil rm -a gs://bucket/obj would attempt to delete the same object twice, getting a NoSuchKey error on the second attempt.
Fixed bug where gsutil setwebcfg signature didn't match with HMAC authentication.
Fixed ASCII codec decode error when constructing tracker filename from non-7bit ASCII input filename.
Changed boto auth plugin framework to allow multiple plugins supporting requested capability, which fixes gsutil exception that used to happen where a GCE user had a service account configured and then ran gsutil config.
Changed Command.Apply method to be resilient to name expansion exceptions. Before this change, if an exception was raised during iteration of NameExpansionResult, the parent process would immediately stop execution, causing the _EOF_NAME_EXPANSION_RESULT to never be sent to child processes. This resulted in the process hanging forever.
Fixed various bugs for gsutil running on Windows:
Fixed gsutil rm bug that caused exit status 1 when encountered non-existent URI.
Fixed support for gsutil cp file -.
Added preconditions and retry logic to setmeta command, to enforce concurrency control.
Fixed bug in copying subdirs to subdirs.
Fixed cases where boto debug_level caused too much or too little logging:
Removed XML parsing from setacl. The previous implementation relied on loose XML handling, which could truncate what it sends to the service, allowing invalid XML to be specified by the user. Instead now the ACL XML is passed verbatim and we rely on server-side schema enforcement.
Added user-agent header to resumable uploads.
Fixed reporting bits/s when it was really bytes/s.
Changed so we now pass headers with API version & project ID to create_bucket().
Made “gsutil rm -r gs://bucket/folder” remove xyz_$folder$ object (which is created by various GUI tools).
Fixed bug where gsutil binary was shipped with protection 750 instead of 755.
Reworked versioned object handling:
Rewrote/deepened/improved various parts of built-in help:
Numerous improvements to testing infrastructure:
Changed gsutil mv to allow moving local files/dirs to the cloud. Previously this was disallowed in the belief we should be conservative about deleting data from local disk but there are legitimate use cases for moving data from a local dir to the cloud, it's clear to the user this would remove data from the local disk, and allowing it makes the tool behavior more consistent with what users would expect.
Changed gsutil update command to insist on is_secure and https_validate_certificates.
Fixed release no longer to include extraneous boto dirs in top-level of gsutil distribution (like bin/ and docs/).
Changed resumable upload threshold from 1 MB to 2 MB.
Removed leftover cloudauth and cloudreader dirs. Sample code now lives at https://github.com/GoogleCloudPlatform.
Updated copyright notice on code files.
Backwards-incompatible wildcard change: The ‘*’ wildcard now only matches objects within a bucket directory. If you have scripts that depend on being able to match spanning multiple directories you need to use ‘**’ instead. For example, the command:
gsutil cp gs://bucket/*.txt
will now only match .txt files in the top-level directory.
gsutil cp gs://bucket/**.txt
will match across all directories.
gsutil ls now lists one directory at a time. If you want to list all objects in a bucket, you can use:
gsutil ls gs://bucket/**
or:
gsutil ls -R gs://bucket
Built-in help for all commands and many additional topics. Try “gsutil help” for a list of available commands and topics.
A new hierarchical file tree abstraction layer, which makes the flat bucket name space look like a hierarchical file tree. This makes several things possible:
Support for per-directory (*) and recursive (**) wildcards. Essentially, ** works the way * did in previous gsutil releases, and * now behaves consistently with how it works in command interpreters (like bash). The ability to specify directory-only wildcards also enables a number of use cases, such as distributing large uploads/downloads by wildcarded name. See “gsutil help wildcards” for details.
Support for Cross-Origin Resource Sharing (CORS) configuration. See “gsutil help cors” for details.
Support for multi-threading and recursive operation for setacl command (see “gsutil help setacl”).
Ability to use the UNIX ‘file’ command to do content type recognition as an alternative to filename extensions.
Introduction of new end-to-end test suite.
The gsutil version command now computes a checksum of the code, to detect corruption and local modification when assisting with technical support.
The gsutil update command is no longer beta/experimental, and now also supports updating from named URIs (for early/test releases).
Changed gsutil ls -L to also print Content-Disposition header.
Support for for two new installation modes: enterprise and RPM. Customers can now install gsutil one of three ways:
Note: v2.0 is the first numbered gsutil release. Previous releases were given timestamps for versions. Numbered releases enable downstream package builds (like RPMs) to define dependencies more easily. This is also the first version where we began including release notes.