Index: download_from_google_storage.py |
=================================================================== |
--- download_from_google_storage.py (revision 231381) |
+++ download_from_google_storage.py (working copy) |
@@ -11,6 +11,7 @@ |
import os |
import Queue |
import re |
+import stat |
import sys |
import threading |
import time |
@@ -185,6 +186,20 @@ |
out_q.put('%d> %s' % (thread_num, err)) |
ret_codes.put((code, err)) |
+ # Mark executable if necessary. We key off of the custom header |
+ # "x-goog-meta-executable". |
+ # |
+ # TODO(hinoka): It is supposedly faster to use "gsutil stat" but that |
+ # doesn't appear to be supported by the gsutil currently in our tree. When |
+ # we update, this code should use that instead of "gsutil ls -L". |
+ if not sys.platform.startswith('win'): |
+ code, out, _ = gsutil.check_call('ls', '-L', file_url) |
+ if code != 0: |
+ out_q.put('%d> %s' % (thread_num, err)) |
+ ret_codes.put((code, err)) |
+ elif re.search('x-goog-meta-executable:', out): |
+ st = os.stat(output_filename) |
+ os.chmod(output_filename, st.st_mode | stat.S_IEXEC) |
def printer_worker(output_queue): |
while True: |
@@ -282,9 +297,21 @@ |
help='Alias for "gsutil config". Run this if you want ' |
'to initialize your saved Google Storage ' |
'credentials.') |
+ parser.add_option('-p', '--platform', |
+ help='A regular expression that is compared against ' |
+ 'Python\'s sys.platform. If this option is specified, ' |
+ 'the download will happen only if there is a match.') |
(options, args) = parser.parse_args() |
- # First, make sure we can find a working instance of gsutil. |
+ |
+ # Make sure we should run at all based on platform matching. |
+ if options.platform: |
+ if not re.match(options.platform, sys.platform): |
+ print('The current platform doesn\'t match "%s", skipping.' % |
+ options.platform) |
+ return 0 |
+ |
+ # Make sure we can find a working instance of gsutil. |
if os.path.exists(GSUTIL_DEFAULT_PATH): |
gsutil = Gsutil(GSUTIL_DEFAULT_PATH, boto_path=options.boto) |
else: |