<commit_before>Release 4.17 (release date: 2016-02-18)
=======================================
Bug Fixes
---------
- Fixed an oauth2client dependency break that caused
  the PyPi distribution of gsutil to allow oauth2client 2.0.0,
  causing all commands to fail with an ImportError.
- Fixed a bug where gsutil could leak multiprocessing.Manager
  processes when terminating signals (such as CTRL-C) were sent.
- Fixed a bug where the -q option did not suppress output
  from the stat command.
- Fixed a bug where deleting an empty bucket with rm -r
  would return a non-zero exit code even when successful.
- Fixed UnicodeEncodeErrors that could occur when using the du
  command with a pipe on objects containing non-ASCII characters.

Other Changes
-------------
- Many documentation improvements and clarifications.

Release 4.16 (release date: 2015-11-25)
=======================================
New features
------------
- The ls command now supports a -d option (similar to Unix ls -d)
  for suppressing recursion into subdirectories.
- The signurl command now accepts JSON-format private key files
  generated by the Google Developers Console.
- The signurl command now supports generating resumable upload
  start URLs.
- The cp command now supports a -Z option which will gzip-compress all
  files (regardless of their extensions) as they are uploaded.

Bug Fixes
---------<commit_msg>4.18 release notes<commit_after>Release 4.18 (release date: 2016-03-22)
=======================================
New Features
------------
- gsutil now supports the beta Customer-Supplied Encryption Keys
  features for Google Cloud Storage objects, via the JSON API.
  This feature allows you to encrypt your data with keys that
  are not permanently stored on Google's servers. You can provide
  encryption and decryption keys in your .boto configuration file.
  As long as an encryption key is specified in the configuration file,
  all gs:// objects that gsutil creates will be stored encrypted
  with that key, and all encrypted objects will be decrypted when
  downloaded. See "gsutil help csek" for more information.
- Added the rewrite command, which can be used to perform
  key rotation for objects encrypted with customer-supplied
  encryption keys.

Bug Fixes
---------
- Fixed an AttributeError that could occur when running in debug mode
  for operations involving wildcards, recursion, or listing.
- Fixed an ArgumentException that could occur when using perfdiag
  write throughput tests with parallelism.
- Restored debug mode output for resumable uploads using the JSON API.
- Fixed a bug where rm -r on a bucket subdirectory would exit with
  code 1 even though it succeeded.
- Fixed a bug where cp -R of a single file with a destination other
  than the bucket root would copy to the bucket root.
- Fixed a bug when using a single process with multiple threads
  where CTRL-C would not stop the process until one thread completed
  a task.

Other Changes
-------------
- Improved exception logging in debug mode.
- Added "cache-control: no-transform" to all uploads
  using compression ("gsutil cp -z" or "gsutil cp -Z") to ensure that
  doubly-compressed objects can be downloaded with data integrity
  checking.
- Reduced the default number of threads per-process on Linux systems
  from 10 to 5.
- Documented additional OS X Unicode limitations.
- The config command now includes the custom client ID and secret in the
  configuration file output if the command is run with those values
  configured.

Release 4.17 (release date: 2016-02-18)
=======================================
Bug Fixes
---------
- Fixed an oauth2client dependency break that caused
  the PyPi distribution of gsutil to allow oauth2client 2.0.0,
  causing all commands to fail with an ImportError.
- Fixed a bug where gsutil could leak multiprocessing.Manager
  processes when terminating signals (such as CTRL-C) were sent.
- Fixed a bug where the -q option did not suppress output
  from the stat command.
- Fixed a bug where deleting an empty bucket with rm -r
  would return a non-zero exit code even when successful.
- Fixed UnicodeEncodeErrors that could occur when using the du
  command with a pipe on objects containing non-ASCII characters.

Other Changes
-------------
- Many documentation improvements and clarifications.

Release 4.16 (release date: 2015-11-25)
=======================================
New Features
------------
- The ls command now supports a -d option (similar to Unix ls -d)
  for suppressing recursion into subdirectories.
- The signurl command now accepts JSON-format private key files
  generated by the Google Developers Console.
- The signurl command now supports generating resumable upload
  start URLs.
- The cp command now supports a -Z option which will gzip-compress all
  files (regardless of their extensions) as they are uploaded.

Bug Fixes
---------
{'fraction_non_alphanumeric': 0.10135135135135136, 'fraction_numerical': 0.014742014742014743, 'mean_word_length': 3.6172022684310017, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7403957', 'n_tokens_mistral': 1287, 'n_tokens_neox': 1176, 'n_words': 671}