Index: third_party/gsutil/gslib/addlhelp/crc32c.py |
diff --git a/third_party/gsutil/gslib/addlhelp/crc32c.py b/third_party/gsutil/gslib/addlhelp/crc32c.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d2befe2e39f7fec48c109ede4074929ab198d42e |
--- /dev/null |
+++ b/third_party/gsutil/gslib/addlhelp/crc32c.py |
@@ -0,0 +1,128 @@ |
+# -*- coding: utf-8 -*- |
+# Copyright 2013 Google Inc. All Rights Reserved. |
+# |
+# Licensed under the Apache License, Version 2.0 (the "License"); |
+# you may not use this file except in compliance with the License. |
+# You may obtain a copy of the License at |
+# |
+# http://www.apache.org/licenses/LICENSE-2.0 |
+# |
+# Unless required by applicable law or agreed to in writing, software |
+# distributed under the License is distributed on an "AS IS" BASIS, |
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+# See the License for the specific language governing permissions and |
+# limitations under the License. |
+"""Additional help about CRC32C and installing crcmod.""" |
+ |
+from __future__ import absolute_import |
+ |
+from gslib.help_provider import HelpProvider |
+ |
+_DETAILED_HELP_TEXT = (""" |
+<B>OVERVIEW</B> |
+ Google Cloud Storage provides a cyclic redundancy check (CRC) header that |
+ allows clients to verify the integrity of object contents. For non-composite |
+ objects GCS also provides an MD5 header to allow clients to verify object |
+ integrity, but for composite objects only the CRC is available. gsutil |
+ automatically performs integrity checks on all uploads and downloads. |
+ Additionally, you can use the "gsutil hash" command to calculate a CRC for |
+ any local file. |
+ |
+ The CRC variant used by Google Cloud Storage is called CRC32C (Castagnoli), |
+ which is not available in the standard Python distribution. The implementation |
+ of CRC32C used by gsutil is provided by a third-party Python module called |
+ `crcmod <https://pypi.python.org/pypi/crcmod>`_. |
+ |
+ The crcmod module contains a pure-Python implementation of CRC32C, but using |
+ it results in very poor performance. A Python C extension is also provided by |
+ crcmod, which requires compiling into a binary module for use. gsutil ships |
+ with a precompiled crcmod C extension for Mac OS X; for other platforms, see |
+ the installation instructions below. |
+ |
+ At the end of each copy operation, the gsutil cp and rsync commands validate |
+ that the checksum of the source file/object matches the checksum of the |
+ destination file/object. If the checksums do not match, gsutil will delete |
+ the invalid copy and print a warning message. This very rarely happens, but |
+ if it does, please contact gs-team@google.com. |
+ |
+ |
+<B>CONFIGURATION</B> |
+ To determine if the compiled version of crcmod is available in your Python |
+ environment, you can inspect the output of the gsutil version command for the |
+ "compiled crcmod" entry:: |
+ |
+ $ gsutil version -l |
+ ... |
+ compiled crcmod: True |
+ ... |
+ |
+ If your crcmod library is compiled to a native binary, this value will be |
+ True. If using the pure-Python version, the value will be False. |
+ |
+ To control gsutil's behavior in response to crcmod's status, you can set the |
+ "check_hashes" configuration variable. For details on this variable, see the |
+ surrounding comments in your gsutil configuration file. If check_hashes is not |
+ present in your configuration file, rerun gsutil config to regenerate the |
+ file. |
+ |
+ |
+<B>INSTALLATION</B> |
+ CentOS, RHEL, and Fedora |
+ ------------------------ |
+ |
+ To compile and install crcmod: |
+ |
+ sudo yum install gcc python-devel python-setuptools |
+ sudo easy_install -U pip |
+ sudo pip uninstall crcmod |
+ sudo pip install -U crcmod |
+ |
+ Debian and Ubuntu |
+ ----------------- |
+ |
+ To compile and install crcmod: |
+ |
+ sudo apt-get install gcc python-dev python-setuptools |
+ sudo easy_install -U pip |
+ sudo pip uninstall crcmod |
+ sudo pip install -U crcmod |
+ |
+ Mac OS X |
+ -------- |
+ |
+ gsutil distributes a pre-compiled version of crcmod for OS X, so you shouldn't |
+ need to compile and install it yourself. If for some reason the pre-compiled |
+ version is not being detected, please let the Google Cloud Storage team know |
+ (see "gsutil help support"). |
+ |
+ To compile manually on OS X, you will first need to install |
+ `XCode <https://developer.apple.com/xcode/>`_ and then run: |
+ |
+ sudo easy_install -U pip |
+ sudo pip install -U crcmod |
+ |
+ Windows |
+ ------- |
+ |
+ An installer is available for the compiled version of crcmod from the Python |
+ Package Index (PyPi) at the following URL: |
+ |
+ https://pypi.python.org/pypi/crcmod/1.7 |
+ |
+ MSI installers are available for the 32-bit versions of Python 2.6 and 2.7. |
+ |
+""") |
+ |
+ |
+class CommandOptions(HelpProvider): |
+ """Additional help about CRC32C and installing crcmod.""" |
+ |
+ # Help specification. See help_provider.py for documentation. |
+ help_spec = HelpProvider.HelpSpec( |
+ help_name='crc32c', |
+ help_name_aliases=['crc32', 'crc', 'crcmod'], |
+ help_type='additional_help', |
+ help_one_line_summary='CRC32C and Installing crcmod', |
+ help_text=_DETAILED_HELP_TEXT, |
+ subcommand_help_text={}, |
+ ) |