Index: third_party/gsutil/setup.py |
diff --git a/third_party/gsutil/setup.py b/third_party/gsutil/setup.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..af63de6e579531f579661dee40b0bf1ef0a1b491 |
--- /dev/null |
+++ b/third_party/gsutil/setup.py |
@@ -0,0 +1,141 @@ |
+#!/usr/bin/env python |
+# coding=utf8 |
+# Copyright 2011 Google Inc. |
+# |
+# 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. |
+ |
+'''Distutils setup.py script for Google Cloud Storage command line tool.''' |
+ |
+import glob |
+import sys |
+import os |
+import platform |
+from distutils.core import setup |
+from pkg_util import parse_manifest |
+ |
+print ''' |
+NOTE: Enterprise mode (installing gsutil via setup.py) is no longer officially |
+supported - unpacking the zip file into a directory is the preferred method |
+for installing gsutil for both shared and private configurations. See README |
+and README.pkg for further details. |
+''' |
+ |
+# Command name and target directory. |
+NAME = 'gsutil' |
+TARGET = '/usr/share/gsutil' |
+BINDIR = '/usr/bin' |
+ |
+# Enterprise mode (shared/central) installation is not supported |
+# on Windows. |
+system = platform.system() |
+if system.lower().startswith('windows'): |
+ error = 'ERROR: enterprise (shared/central) installation is not ' \ |
+ 'supported on Windows.' |
+ exit(error) |
+ |
+def walk(dir, paths): |
+ '''Do a recursive file tree walk, adding files found to passed dict.''' |
+ for file in os.listdir(dir): |
+ # Skip "dot files". |
+ if file[0] == '.': |
+ continue |
+ path = dir + '/' + file |
+ if os.path.isdir(path): |
+ walk(path, paths) |
+ else: |
+ if dir not in paths: |
+ paths[dir] = [] |
+ paths[dir].append(path) |
+ |
+def first_token(filename): |
+ '''Open file, read first line, parse & return first token to caller.''' |
+ token = None |
+ f = open(filename, 'r') |
+ line = f.readline().strip() |
+ tokens = line.split() |
+ token = tokens[0] |
+ f.close() |
+ return token |
+ |
+# Validate python version. |
+if sys.version_info <= (2, 6): |
+ error = 'ERROR: gsutil requires Python Version 2.6 or above...exiting.' |
+ exit(error) |
+ |
+# Rather than hard-coding package contents here, we read the manifest |
+# file to obtain the list of files and directories to include. |
+files = [] |
+dirs = [] |
+parse_manifest(files, dirs) |
+ |
+# Build list of data files dynamically. |
+data_files = [(TARGET, files)] |
+paths = {} |
+for dir in dirs: |
+ walk(dir, paths) |
+for path in paths: |
+ data_files += (os.path.join(TARGET, path), paths[path]), |
+ |
+long_desc = ''' |
+GSUtil is a Python application that lets you access Google Cloud Storage |
+from the command line. You can use GSUtil to do a wide range of bucket and |
+object management tasks, including: |
+- Creating and deleting buckets. |
+- Uploading, downloading, and deleting objects. |
+- Listing buckets and objects. |
+- Moving, copying, and renaming objects. |
+- Setting object and bucket ACLs. |
+''' |
+ |
+VERSION = first_token('VERSION') |
+if not VERSION: |
+ error = 'ERROR: can\'t find gsutil version...exiting.' |
+ exit(error) |
+ |
+# This is the main function call that installs the gsutil package. See |
+# distutil documentation for details on this function and its arguments. |
+setup(name = NAME, |
+ version = VERSION, |
+ license = 'Apache 2.0', |
+ author = 'Google', |
+ author_email = 'gs-team@google.com', |
+ url = 'http://code.google.com/apis/storage/docs/gsutil.html', |
+ description = 'gsutil - command line utility for Google Cloud Storage', |
+ long_description = long_desc, |
+ data_files = data_files, |
+ # Dependency on boto commented out for now because initially we plan to |
+ # bundle boto with this package, however, when we're ready to depend on |
+ # a separate boto rpm package, this line should be uncommented. |
+ #requires = ['boto (>=2.0)'], |
+ ) |
+ |
+# Create symlink from /usr/bin/gsutil to /usr/share/gsutil/gsutil but |
+# only run directly in enterprise mode (see README.pkg). When run by |
+# rpmbuild we don't want to create this link because it's done by the |
+# rpm spec file slightly differently (using a relative link). Same story |
+# for permission setting, which is only needed if not run by rpmbuild. |
+if not os.environ.get('RPM_BUILD_ROOT'): |
+ link = os.path.join(BINDIR, NAME) |
+ dest = os.path.join(TARGET, NAME) |
+ if not os.path.exists(link): |
+ os.symlink(dest, link) |
+ # Make all files and dirs in install area readable by other |
+ # and make all directories executable by other. These steps |
+ # are performed in support of the enterprise (shared/central) |
+ # installation mode, in which users with different user/group |
+ # than the installation user/group must be able to run gsutil. |
+ os.system('chmod -R o+r ' + TARGET) |
+ os.system('find ' + TARGET + ' -type d | xargs chmod o+x') |
+ # Make main gsutil script readable and executable by other. |
+ os.system('chmod o+rx ' + os.path.join(TARGET, NAME)) |
+ |