Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: download_from_google_storage.py

Issue 240203005: Implement git-drover. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | git-drover » ('j') | git_cache.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Download files from Google Storage based on SHA1 sums.""" 6 """Download files from Google Storage based on SHA1 sums."""
7 7
8 8
9 import hashlib 9 import hashlib
10 import optparse 10 import optparse
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 if not os.path.exists(path): 59 if not os.path.exists(path):
60 raise FileNotFoundError('GSUtil not found in %s' % path) 60 raise FileNotFoundError('GSUtil not found in %s' % path)
61 self.path = path 61 self.path = path
62 self.timeout = timeout 62 self.timeout = timeout
63 self.boto_path = boto_path 63 self.boto_path = boto_path
64 self.bypass_prodaccess = bypass_prodaccess 64 self.bypass_prodaccess = bypass_prodaccess
65 65
66 def get_sub_env(self): 66 def get_sub_env(self):
67 env = os.environ.copy() 67 env = os.environ.copy()
68 if self.boto_path == os.devnull: 68 if self.boto_path == os.devnull:
69 env['AWS_CREDENTIAL_FILE'] = '' 69 env.pop('AWS_CREDENTIAL_FILE', None)
Ryan Tseng 2014/04/18 00:28:53 ???
iannucci 2014/04/28 21:05:28 Otherwise gsutil freaks out because the env var is
70 env['BOTO_CONFIG'] = '' 70 env['BOTO_CONFIG'] = ''
71 elif self.boto_path: 71 elif self.boto_path:
72 env['AWS_CREDENTIAL_FILE'] = self.boto_path 72 env['AWS_CREDENTIAL_FILE'] = self.boto_path
73 env['BOTO_CONFIG'] = self.boto_path 73 env['BOTO_CONFIG'] = self.boto_path
74 else: 74 else:
75 custompath = env.get('AWS_CREDENTIAL_FILE', '~/.boto') + '.depot_tools' 75 custompath = env.get('AWS_CREDENTIAL_FILE', '~/.boto') + '.depot_tools'
76 custompath = os.path.expanduser(custompath) 76 custompath = os.path.expanduser(custompath)
77 if os.path.exists(custompath): 77 if os.path.exists(custompath):
78 env['AWS_CREDENTIAL_FILE'] = custompath 78 env['AWS_CREDENTIAL_FILE'] = custompath
79 79
80 return env 80 return env
81 81
82 def call(self, *args): 82 def call(self, *args):
83 cmd = [sys.executable, self.path] 83 cmd = [sys.executable, self.path]
84 if self.bypass_prodaccess: 84 if self.bypass_prodaccess:
85 cmd.append('--bypass_prodaccess') 85 cmd.append('--bypass_prodaccess')
86 cmd.extend(args) 86 cmd.extend(args)
87 return subprocess2.call(cmd, env=self.get_sub_env(), timeout=self.timeout) 87 return subprocess2.call(cmd, env=self.get_sub_env(), timeout=self.timeout)
88 88
89 def check_call(self, *args): 89 def check_call(self, *args, **kwargs):
90 def tee(stream, buf):
91 def _inner(line):
Ryan Tseng 2014/04/18 00:28:53 "data" or "char" is probably more appropriate vs "
iannucci 2014/04/28 21:05:28 What? That's not true... /me reads subprocess2 im
92 stream.write(line)
93 buf.append(line)
94 return _inner
95
90 cmd = [sys.executable, self.path] 96 cmd = [sys.executable, self.path]
91 if self.bypass_prodaccess: 97 if self.bypass_prodaccess:
92 cmd.append('--bypass_prodaccess') 98 cmd.append('--bypass_prodaccess')
93 cmd.extend(args) 99 cmd.extend(args)
94 ((out, err), code) = subprocess2.communicate( 100
95 cmd, 101 out = []
96 stdout=subprocess2.PIPE, 102 err = []
Ryan Tseng 2014/04/18 00:28:53 why not a string or cStringIO? I'd probably prefe
Ryan Tseng 2014/04/18 00:37:36 Disregard that, I ran a test and your list impleme
iannucci 2014/04/28 21:05:28 string allocation n' stuff
97 stderr=subprocess2.PIPE, 103
98 env=self.get_sub_env(), 104 proc = subprocess2.Popen(cmd, env=self.get_sub_env(),
99 timeout=self.timeout) 105 stdout=subprocess2.PIPE,
106 stderr=subprocess2.PIPE)
107 if kwargs.get('verbose'):
108 proc.stdout_cb = tee(sys.stdout, out)
109 proc.stderr_cb = tee(sys.stderr, err)
110 else:
111 proc.stdout_cb = out.append
112 proc.stderr_cb = err.append
113 proc.communicate(timeout=self.timeout)
114 code = proc.returncode
115
116 out = ''.join(out)
117 err = ''.join(err)
100 118
101 # Parse output. 119 # Parse output.
102 status_code_match = re.search('status=([0-9]+)', err) 120 status_code_match = re.search('status=([0-9]+)', err)
103 if status_code_match: 121 if status_code_match:
104 return (int(status_code_match.group(1)), out, err) 122 return (int(status_code_match.group(1)), out, err)
105 if ('You are attempting to access protected data with ' 123 if ('You are attempting to access protected data with '
106 'no configured credentials.' in err): 124 'no configured credentials.' in err):
107 return (403, out, err) 125 return (403, out, err)
108 if 'No such object' in err: 126 if 'No such object' in err:
109 return (404, out, err) 127 return (404, out, err)
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 return code 476 return code
459 477
460 return download_from_google_storage( 478 return download_from_google_storage(
461 input_filename, base_url, gsutil, options.num_threads, options.directory, 479 input_filename, base_url, gsutil, options.num_threads, options.directory,
462 options.recursive, options.force, options.output, options.ignore_errors, 480 options.recursive, options.force, options.output, options.ignore_errors,
463 options.sha1_file, options.verbose, options.auto_platform) 481 options.sha1_file, options.verbose, options.auto_platform)
464 482
465 483
466 if __name__ == '__main__': 484 if __name__ == '__main__':
467 sys.exit(main(sys.argv)) 485 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « no previous file | git-drover » ('j') | git_cache.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698