Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 4 # for details. All rights reserved. Use of this source code is governed by a | 4 # for details. All rights reserved. Use of this source code is governed by a |
| 5 # BSD-style license that can be found in the LICENSE file. | 5 # BSD-style license that can be found in the LICENSE file. |
| 6 | 6 |
| 7 # Gets or updates a DumpRenderTree (a nearly headless build of chrome). This is | 7 # Gets or updates a DumpRenderTree (a nearly headless build of chrome). This is |
| 8 # used for running browser tests of client applications. | 8 # used for running browser tests of client applications. |
| 9 | 9 |
| 10 import json | 10 import json |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 dart_src = NormJoin(os.path.dirname(sys.argv[0]), os.pardir) | 26 dart_src = NormJoin(os.path.dirname(sys.argv[0]), os.pardir) |
| 27 os.chdir(dart_src) | 27 os.chdir(dart_src) |
| 28 | 28 |
| 29 GSUTIL_DIR = os.path.join('third_party', 'gsutil') | 29 GSUTIL_DIR = os.path.join('third_party', 'gsutil') |
| 30 GSUTIL = GSUTIL_DIR + '/gsutil' | 30 GSUTIL = GSUTIL_DIR + '/gsutil' |
| 31 | 31 |
| 32 DRT_DIR = os.path.join('client', 'tests', 'drt') | 32 DRT_DIR = os.path.join('client', 'tests', 'drt') |
| 33 DRT_VERSION = os.path.join(DRT_DIR, 'LAST_VERSION') | 33 DRT_VERSION = os.path.join(DRT_DIR, 'LAST_VERSION') |
| 34 DRT_LATEST_PATTERN = ( | 34 DRT_LATEST_PATTERN = ( |
| 35 'gs://dartium-archive/latest/drt-%(osname)s-inc-*.zip') | 35 'gs://dartium-archive/latest/drt-%(osname)s-inc-*.zip') |
| 36 DRT_PERMANENT_PREFIX = 'gs://dartium-archive/drt-%(osname)s-inc' | 36 DRT_PERMANENT_PATTERN = ('gs://dartium-archive/drt-%(osname)s-inc/drt-' |
| 37 '%(osname)s-inc-%(num)s.%(num)s.zip') | |
| 37 | 38 |
| 38 DARTIUM_DIR = os.path.join('client', 'tests', 'dartium') | 39 DARTIUM_DIR = os.path.join('client', 'tests', 'dartium') |
| 39 DARTIUM_VERSION = os.path.join(DARTIUM_DIR, 'LAST_VERSION') | 40 DARTIUM_VERSION = os.path.join(DARTIUM_DIR, 'LAST_VERSION') |
| 40 DARTIUM_LATEST_PATTERN = ( | 41 DARTIUM_LATEST_PATTERN = ( |
| 41 'gs://dartium-archive/latest/dartium-%(osname)s-inc-*.zip') | 42 'gs://dartium-archive/latest/dartium-%(osname)s-inc-*.zip') |
| 42 DARTIUM_PERMANENT_PREFIX = 'gs://dartium-archive/dartium-%(osname)s-inc' | 43 DARTIUM_PERMANENT_PATTERN = ('gs://dartium-archive/dartium-%(osname)s-inc/' |
| 44 'dartium-%(osname)s-inc-%(num)s.%(num)s.zip') | |
| 43 | 45 |
| 44 CHROMEDRIVER_DIR = os.path.join('tools', 'testing', 'dartium-chromedriver') | 46 CHROMEDRIVER_DIR = os.path.join('tools', 'testing', 'dartium-chromedriver') |
| 45 CHROMEDRIVER_VERSION = os.path.join(CHROMEDRIVER_DIR, 'LAST_VERSION') | 47 CHROMEDRIVER_VERSION = os.path.join(CHROMEDRIVER_DIR, 'LAST_VERSION') |
| 46 CHROMEDRIVER_LATEST_PATTERN = ( | 48 CHROMEDRIVER_LATEST_PATTERN = ( |
| 47 'gs://dartium-archive/latest/chromedriver-%(osname)s-inc-*.zip') | 49 'gs://dartium-archive/latest/chromedriver-%(osname)s-inc-*.zip') |
| 48 CHROMEDRIVER_PERMANENT_PREFIX = ( | 50 CHROMEDRIVER_PERMANENT_PATTERN = ('gs://dartium-archive/chromedriver-%(osname)s' |
| 49 'gs://dartium-archive/chromedriver-%(osname)s-inc') | 51 '-inc/chromedriver-%(osname)s-inc-%(num)s.' |
| 52 '%(num)s.zip') | |
| 50 | 53 |
| 51 SDK_DIR = os.path.join(utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'), | 54 SDK_DIR = os.path.join(utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'), |
| 52 'dart-sdk') | 55 'dart-sdk') |
| 53 SDK_VERSION = os.path.join(SDK_DIR, 'LAST_VERSION') | 56 SDK_VERSION = os.path.join(SDK_DIR, 'LAST_VERSION') |
| 54 SDK_LATEST_PATTERN = 'gs://dart-editor-archive-continuous/latest/VERSION' | 57 SDK_LATEST_PATTERN = 'gs://dart-editor-archive-continuous/latest/VERSION' |
| 55 # TODO(efortuna): Once the x64 VM also is optimized, select the version | 58 # TODO(efortuna): Once the x64 VM also is optimized, select the version |
| 56 # based on whether we are running on a 32-bit or 64-bit system. | 59 # based on whether we are running on a 32-bit or 64-bit system. |
| 57 SDK_PERMANENT = ('gs://dart-editor-archive-continuous/%(version_num)s/' + | 60 SDK_PERMANENT = ('gs://dart-editor-archive-continuous/%(version_num)s/' + |
| 58 'dartsdk-%(osname)s-32.zip') | 61 'dartsdk-%(osname)s-32.zip') |
| 59 | 62 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 111 * You need to do a one-time configuration step to access Google Storage. | 114 * You need to do a one-time configuration step to access Google Storage. |
| 112 * Please run this command and follow the instructions: | 115 * Please run this command and follow the instructions: |
| 113 * %s config | 116 * %s config |
| 114 * | 117 * |
| 115 * NOTE: When prompted you can leave "project-id" blank. Just hit enter. | 118 * NOTE: When prompted you can leave "project-id" blank. Just hit enter. |
| 116 ******************************************************************************* | 119 ******************************************************************************* |
| 117 ''' % GSUTIL | 120 ''' % GSUTIL |
| 118 sys.exit(1) | 121 sys.exit(1) |
| 119 | 122 |
| 120 | 123 |
| 121 def get_dartium_latest(name, directory, version_file, latest_pattern, | 124 def get_dartium_revision(name, directory, version_file, latest_pattern, |
| 122 permanent_prefix): | 125 permanent_prefix, revision_num=None): |
| 123 """Get the latest binary that is stored in the dartium archive. | 126 """Get the latest binary that is stored in the dartium archive. |
| 124 | 127 |
| 125 Args: | 128 Args: |
| 126 name: the name of the desired download. | 129 name: the name of the desired download. |
| 127 directory: target directory (recreated) to install binary | 130 directory: target directory (recreated) to install binary |
| 128 version_file: name of file with the current version stamp | 131 version_file: name of file with the current version stamp |
| 129 latest_pattern: the google store url pattern pointing to the latest binary | 132 latest_pattern: the google store url pattern pointing to the latest binary |
| 130 permanent_prefix: stable google store folder used to download versions | 133 permanent_prefix: stable google store folder used to download versions |
| 134 revision_num: The desired revision number to retrieve. If revision_num is | |
| 135 None, we return the latest revision. | |
| 131 """ | 136 """ |
| 132 osdict = {'Darwin':'mac', 'Linux':'lucid64', 'Windows':'win'} | 137 osdict = {'Darwin':'mac', 'Linux':'lucid64', 'Windows':'win'} |
| 133 def latest_func(out, osname): | 138 |
| 139 def latest_func(out, osname, revision_num): | |
|
vsm
2012/08/04 15:27:15
Consider renaming from "latest" now that it gets a
Emily Fortuna
2012/08/04 20:36:51
Done.
| |
| 134 output_lines = out.split() | 140 output_lines = out.split() |
| 135 latest = output_lines[-1] | 141 latest = output_lines[-1] |
| 136 latest = (permanent_prefix % { 'osname' : osname } | 142 if not revision_num: |
| 137 + latest[latest.rindex('/'):]) | 143 revision_num = latest[latest.rindex('-') + 1 : latest.index('.')] |
| 144 latest = (permanent_prefix % { 'osname' : osname, 'num' : revision_num }) | |
| 138 return latest | 145 return latest |
| 139 | 146 |
| 140 get_from_gsutil(name, directory, version_file, latest_pattern, osdict, | 147 get_from_gsutil(name, directory, version_file, latest_pattern, osdict, |
| 141 latest_func) | 148 latest_func, revision_num) |
| 142 | 149 |
| 143 def get_sdk_revision(name, directory, version_file, latest_pattern, | 150 def get_sdk_revision(name, directory, version_file, latest_pattern, |
| 144 permanent_prefix, revision_num): | 151 permanent_prefix, revision_num): |
| 145 """Get a revision of the SDK from the editor build archive. | 152 """Get a revision of the SDK from the editor build archive. |
| 146 | 153 |
| 147 Args: | 154 Args: |
| 148 name: the name of the desired download | 155 name: the name of the desired download |
| 149 directory: target directory (recreated) to install binary | 156 directory: target directory (recreated) to install binary |
| 150 version_file: name of file with the current version stamp | 157 version_file: name of file with the current version stamp |
| 151 latest_pattern: the google store url pattern pointing to the latest binary | 158 latest_pattern: the google store url pattern pointing to the latest binary |
| 152 permanent_prefix: stable google store folder used to download versions | 159 permanent_prefix: stable google store folder used to download versions |
| 153 revision_num: the desired revision number, or None for the most recent | 160 revision_num: the desired revision number, or None for the most recent |
| 154 """ | 161 """ |
| 155 osdict = {'Darwin':'macos', 'Linux':'linux', 'Windows':'win32'} | 162 osdict = {'Darwin':'macos', 'Linux':'linux', 'Windows':'win32'} |
| 156 def find_permanent_url(out, osname): | 163 def find_permanent_url(out, osname, not_used): |
| 157 rev_num = revision_num | 164 rev_num = revision_num |
| 158 if not rev_num: | 165 if not rev_num: |
| 159 temp_file = tempfile.NamedTemporaryFile() | 166 temp_file = tempfile.NamedTemporaryFile() |
| 160 temp_file_url = 'file://' + temp_file.name | 167 temp_file_url = 'file://' + temp_file.name |
| 161 gsutil('cp', latest_pattern % {'osname' : osname }, temp_file_url) | 168 gsutil('cp', latest_pattern % {'osname' : osname }, temp_file_url) |
| 162 temp_file.seek(0) | 169 temp_file.seek(0) |
| 163 version_info = temp_file.read() | 170 version_info = temp_file.read() |
| 164 temp_file.close() | 171 temp_file.close() |
| 165 if version_info != '': | 172 if version_info != '': |
| 166 rev_num = json.loads(version_info)['revision'] | 173 rev_num = json.loads(version_info)['revision'] |
| 167 else: | 174 else: |
| 168 print 'Unable to get latest version information.' | 175 print 'Unable to get latest version information.' |
| 169 return '' | 176 return '' |
| 170 latest = (permanent_prefix % { 'osname' : osname, 'version_num': rev_num}) | 177 latest = (permanent_prefix % { 'osname' : osname, 'version_num': rev_num}) |
| 171 return latest | 178 return latest |
| 172 | 179 |
| 173 get_from_gsutil(name, directory, version_file, latest_pattern, osdict, | 180 get_from_gsutil(name, directory, version_file, latest_pattern, osdict, |
| 174 find_permanent_url) | 181 find_permanent_url, revision_num) |
| 175 | 182 |
| 176 def get_from_gsutil(name, directory, version_file, latest_pattern, | 183 def get_from_gsutil(name, directory, version_file, latest_pattern, |
| 177 os_name_dict, get_permanent_url): | 184 os_name_dict, get_permanent_url, revision_num = ''): |
| 178 """Download and unzip the desired file from Google Storage. | 185 """Download and unzip the desired file from Google Storage. |
| 179 Args: | 186 Args: |
| 180 name: the name of the desired download | 187 name: the name of the desired download |
| 181 directory: target directory (recreated) to install binary | 188 directory: target directory (recreated) to install binary |
| 182 version_file: name of file with the current version stamp | 189 version_file: name of file with the current version stamp |
| 183 latest_pattern: the google store url pattern pointing to the latest binary | 190 latest_pattern: the google store url pattern pointing to the latest binary |
| 184 os_name_dict: a dictionary of operating system names and their corresponding | 191 os_name_dict: a dictionary of operating system names and their corresponding |
| 185 strings on the google storage site. | 192 strings on the google storage site. |
| 186 get_permanent_url: a function that accepts a listing of available files | 193 get_permanent_url: a function that accepts a listing of available files |
| 187 and the os name, and returns a permanent URL for downloading. | 194 and the os name, and returns a permanent URL for downloading. |
| 195 revision_num: the desired revision number to get (if not supplied, we get | |
| 196 the latest revision) | |
| 188 """ | 197 """ |
| 189 system = platform.system() | 198 system = platform.system() |
| 190 try: | 199 try: |
| 191 osname = os_name_dict[system] | 200 osname = os_name_dict[system] |
| 192 except KeyError: | 201 except KeyError: |
| 193 print >>sys.stderr, ('WARNING: platform "%s" does not support' | 202 print >>sys.stderr, ('WARNING: platform "%s" does not support' |
| 194 '%s.') % (system, name) | 203 '%s.') % (system, name) |
| 195 return 0 | 204 return 0 |
| 196 | 205 |
| 197 ensure_config() | 206 ensure_config() |
| 198 | 207 |
| 199 # Query for the lastest version | 208 # Query for the lastest version |
| 200 pattern = latest_pattern % { 'osname' : osname } | 209 pattern = latest_pattern % { 'osname' : osname } |
| 201 result, out = gsutil('ls', pattern) | 210 result, out = gsutil('ls', pattern) |
| 202 if result == 0: | 211 if result == 0: |
| 203 # use permanent link instead, just in case the latest zip entry gets deleted | 212 # use permanent link instead, just in case the latest zip entry gets deleted |
| 204 # while we are downloading it. | 213 # while we are downloading it. |
| 205 latest = get_permanent_url(out, osname) | 214 latest = get_permanent_url(out, osname, revision_num) |
| 206 else: # e.g. no access | 215 else: # e.g. no access |
| 207 print "Couldn't download %s: %s\n%s" % (name, pattern, out) | 216 print "Couldn't download %s: %s\n%s" % (name, pattern, out) |
| 208 if not os.path.exists(version_file): | 217 if not os.path.exists(version_file): |
| 209 print "Using %s will not work. Please try again later." % name | 218 print "Using %s will not work. Please try again later." % name |
| 210 return 0 | 219 return 0 |
| 211 | 220 |
| 212 # Check if we need to update the file | 221 # Check if we need to update the file |
| 213 if os.path.exists(version_file): | 222 if os.path.exists(version_file): |
| 214 v = open(version_file, 'r').read() | 223 v = open(version_file, 'r').read() |
| 215 if v == latest: | 224 if v == latest: |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 | 269 |
| 261 | 270 |
| 262 def main(): | 271 def main(): |
| 263 parser = optparse.OptionParser(usage='usage: %prog [options] download_name') | 272 parser = optparse.OptionParser(usage='usage: %prog [options] download_name') |
| 264 parser.add_option('-r', '--revision', dest='revision', | 273 parser.add_option('-r', '--revision', dest='revision', |
| 265 help='Desired revision number to retrieve for the SDK. If ' | 274 help='Desired revision number to retrieve for the SDK. If ' |
| 266 'unspecified, retrieve the latest SDK build.', | 275 'unspecified, retrieve the latest SDK build.', |
| 267 action='store', default=None) | 276 action='store', default=None) |
| 268 args, positional = parser.parse_args() | 277 args, positional = parser.parse_args() |
| 269 | 278 |
| 270 if args.revision and positional[0] != 'sdk': | |
| 271 print ('Error: You can only specify the revision number for the SDK target.' | |
| 272 ' For all other targets we return the latest build.') | |
| 273 sys.exit(1) | |
| 274 if positional[0] == 'dartium': | 279 if positional[0] == 'dartium': |
| 275 get_dartium_latest('Dartium', DARTIUM_DIR, DARTIUM_VERSION, | 280 get_dartium_revision('Dartium', DARTIUM_DIR, DARTIUM_VERSION, |
| 276 DARTIUM_LATEST_PATTERN, DARTIUM_PERMANENT_PREFIX) | 281 DARTIUM_LATEST_PATTERN, DARTIUM_PERMANENT_PATTERN, |
| 282 args.revision) | |
| 277 elif positional[0] == 'chromedriver': | 283 elif positional[0] == 'chromedriver': |
| 278 get_dartium_latest('chromedriver', CHROMEDRIVER_DIR, CHROMEDRIVER_VERSION, | 284 get_dartium_revision('chromedriver', CHROMEDRIVER_DIR, CHROMEDRIVER_VERSION, |
| 279 CHROMEDRIVER_LATEST_PATTERN, | 285 CHROMEDRIVER_LATEST_PATTERN, |
| 280 CHROMEDRIVER_PERMANENT_PREFIX) | 286 CHROMEDRIVER_PERMANENT_PATTERN, args.revision) |
| 281 elif positional[0] == 'sdk': | 287 elif positional[0] == 'sdk': |
| 282 get_sdk_revision('sdk', SDK_DIR, SDK_VERSION, SDK_LATEST_PATTERN, | 288 get_sdk_revision('sdk', SDK_DIR, SDK_VERSION, SDK_LATEST_PATTERN, |
| 283 SDK_PERMANENT, args.revision) | 289 SDK_PERMANENT, args.revision) |
| 284 elif positional[0] == 'drt': | 290 elif positional[0] == 'drt': |
| 285 get_dartium_latest('DumpRenderTree', DRT_DIR, DRT_VERSION, | 291 get_dartium_revision('DumpRenderTree', DRT_DIR, DRT_VERSION, |
| 286 DRT_LATEST_PATTERN, DRT_PERMANENT_PREFIX) | 292 DRT_LATEST_PATTERN, DRT_PERMANENT_PATTERN, |
| 293 args.revision) | |
| 287 else: | 294 else: |
| 288 print ('Please specify the target you wish to download from Google Storage ' | 295 print ('Please specify the target you wish to download from Google Storage ' |
| 289 '("drt", "dartium", "chromedriver", or "sdk")') | 296 '("drt", "dartium", "chromedriver", or "sdk")') |
| 290 | 297 |
| 291 if __name__ == '__main__': | 298 if __name__ == '__main__': |
| 292 sys.exit(main()) | 299 sys.exit(main()) |
| OLD | NEW |