| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 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 import argparse | 6 import argparse |
| 7 import logging | 7 import logging |
| 8 import os | 8 import os |
| 9 import subprocess | 9 import subprocess |
| 10 import sys | 10 import sys |
| 11 | 11 |
| 12 from telemetry.core import command_line | 12 from telemetry.core import command_line |
| 13 from telemetry.util import cloud_storage | 13 from telemetry.util import cloud_storage |
| 14 | 14 |
| 15 | 15 |
| 16 BUCKET_ALIASES = { | |
| 17 'public': cloud_storage.PUBLIC_BUCKET, | |
| 18 'partner': cloud_storage.PARTNER_BUCKET, | |
| 19 'google-only': cloud_storage.INTERNAL_BUCKET, | |
| 20 } | |
| 21 BUCKETS = {bucket: easy_bucket_name for easy_bucket_name, bucket | 16 BUCKETS = {bucket: easy_bucket_name for easy_bucket_name, bucket |
| 22 in BUCKET_ALIASES.iteritems()} | 17 in cloud_storage.BUCKET_ALIASES.iteritems()} |
| 23 | 18 |
| 24 | 19 |
| 25 def _GetPaths(path): | 20 def _GetPaths(path): |
| 26 root, ext = os.path.splitext(path) | 21 root, ext = os.path.splitext(path) |
| 27 if ext == '.sha1': | 22 if ext == '.sha1': |
| 28 file_path = root | 23 file_path = root |
| 29 hash_path = path | 24 hash_path = path |
| 30 else: | 25 else: |
| 31 file_path = path | 26 file_path = path |
| 32 hash_path = path + '.sha1' | 27 hash_path = path + '.sha1' |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 else: | 104 else: |
| 110 print '%-11s %s' % ('not found', file_path) | 105 print '%-11s %s' % ('not found', file_path) |
| 111 | 106 |
| 112 | 107 |
| 113 class Mv(command_line.Command): | 108 class Mv(command_line.Command): |
| 114 """Move files to the given bucket.""" | 109 """Move files to the given bucket.""" |
| 115 | 110 |
| 116 @classmethod | 111 @classmethod |
| 117 def AddCommandLineArgs(cls, parser): | 112 def AddCommandLineArgs(cls, parser): |
| 118 parser.add_argument('files', nargs='+') | 113 parser.add_argument('files', nargs='+') |
| 119 parser.add_argument('bucket', choices=BUCKET_ALIASES) | 114 parser.add_argument('bucket', choices=cloud_storage.BUCKET_ALIASES) |
| 120 | 115 |
| 121 @classmethod | 116 @classmethod |
| 122 def ProcessCommandLineArgs(cls, parser, args): | 117 def ProcessCommandLineArgs(cls, parser, args): |
| 123 args.bucket = BUCKET_ALIASES[args.bucket] | 118 args.bucket = cloud_storage.BUCKET_ALIASES[args.bucket] |
| 124 | 119 |
| 125 def Run(self, args): | 120 def Run(self, args): |
| 126 files = _FindFilesInCloudStorage(args.files) | 121 files = _FindFilesInCloudStorage(args.files) |
| 127 | 122 |
| 128 for file_path, buckets in sorted(files.iteritems()): | 123 for file_path, buckets in sorted(files.iteritems()): |
| 129 if not buckets: | 124 if not buckets: |
| 130 raise IOError('%s not found in Cloud Storage.' % file_path) | 125 raise IOError('%s not found in Cloud Storage.' % file_path) |
| 131 | 126 |
| 132 for file_path, buckets in sorted(files.iteritems()): | 127 for file_path, buckets in sorted(files.iteritems()): |
| 133 if args.bucket in buckets: | 128 if args.bucket in buckets: |
| (...skipping 25 matching lines...) Expand all Loading... |
| 159 for bucket in buckets: | 154 for bucket in buckets: |
| 160 cloud_storage.Delete(bucket, file_hash) | 155 cloud_storage.Delete(bucket, file_hash) |
| 161 | 156 |
| 162 | 157 |
| 163 class Upload(command_line.Command): | 158 class Upload(command_line.Command): |
| 164 """Upload files to Cloud Storage.""" | 159 """Upload files to Cloud Storage.""" |
| 165 | 160 |
| 166 @classmethod | 161 @classmethod |
| 167 def AddCommandLineArgs(cls, parser): | 162 def AddCommandLineArgs(cls, parser): |
| 168 parser.add_argument('files', nargs='+') | 163 parser.add_argument('files', nargs='+') |
| 169 parser.add_argument('bucket', choices=BUCKET_ALIASES) | 164 parser.add_argument('bucket', choices=cloud_storage.BUCKET_ALIASES) |
| 170 | 165 |
| 171 @classmethod | 166 @classmethod |
| 172 def ProcessCommandLineArgs(cls, parser, args): | 167 def ProcessCommandLineArgs(cls, parser, args): |
| 173 args.bucket = BUCKET_ALIASES[args.bucket] | 168 args.bucket = cloud_storage.BUCKET_ALIASES[args.bucket] |
| 174 | 169 |
| 175 for path in args.files: | 170 for path in args.files: |
| 176 if not os.path.exists(path): | 171 if not os.path.exists(path): |
| 177 parser.error('File not found: %s' % path) | 172 parser.error('File not found: %s' % path) |
| 178 | 173 |
| 179 def Run(self, args): | 174 def Run(self, args): |
| 180 for file_path in args.files: | 175 for file_path in args.files: |
| 181 file_hash = cloud_storage.CalculateHash(file_path) | 176 file_hash = cloud_storage.CalculateHash(file_path) |
| 182 | 177 |
| 183 # Create or update the hash file. | 178 # Create or update the hash file. |
| 184 hash_path = file_path + '.sha1' | 179 hash_path = file_path + '.sha1' |
| 185 with open(hash_path, 'wb') as f: | 180 with open(hash_path, 'wb') as f: |
| 186 f.write(file_hash) | 181 f.write(file_hash) |
| 187 f.flush() | 182 f.flush() |
| 188 | 183 |
| 189 # Add the data to Cloud Storage. | 184 # Add the data to Cloud Storage. |
| 190 cloud_storage.Insert(args.bucket, file_hash, file_path) | 185 cloud_storage.Insert(args.bucket, file_hash, file_path) |
| 191 | 186 |
| 192 # Add the hash file to the branch, for convenience. :) | 187 # Add the hash file to the branch, for convenience. :) |
| 193 subprocess.call(['git', 'add', hash_path]) | 188 subprocess.call(['git', 'add', hash_path]) |
| 194 | 189 |
| 195 | 190 |
| 196 class CloudStorageCommand(command_line.SubcommandCommand): | 191 class CloudStorageCommand(command_line.SubcommandCommand): |
| 197 commands = (Ls, Mv, Rm, Upload) | 192 commands = (Ls, Mv, Rm, Upload) |
| 198 | 193 |
| 199 | 194 |
| 200 if __name__ == '__main__': | 195 if __name__ == '__main__': |
| 201 logging.getLogger().setLevel(logging.INFO) | 196 logging.getLogger().setLevel(logging.INFO) |
| 202 sys.exit(CloudStorageCommand.main()) | 197 sys.exit(CloudStorageCommand.main()) |
| OLD | NEW |