OLD | NEW |
1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 # for details. All rights reserved. Use of this source code is governed by a | 2 # for details. All rights reserved. Use of this source code is governed by a |
3 # BSD-style license that can be found in the LICENSE file. | 3 # BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 # This file contains a set of utilities functions used by other Python-based | 5 # This file contains a set of utilities functions used by other Python-based |
6 # scripts. | 6 # scripts. |
7 | 7 |
8 import commands | 8 import commands |
9 import os | 9 import os |
10 import platform | 10 import platform |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 'macos': os.path.join('xcodebuild'), | 198 'macos': os.path.join('xcodebuild'), |
199 } | 199 } |
200 | 200 |
201 def GetBuildbotGSUtilPath(): | 201 def GetBuildbotGSUtilPath(): |
202 gsutil = '/b/build/scripts/slave/gsutil' | 202 gsutil = '/b/build/scripts/slave/gsutil' |
203 if platform.system() == 'Windows': | 203 if platform.system() == 'Windows': |
204 gsutil = 'e:\\\\b\\build\\scripts\\slave\\gsutil' | 204 gsutil = 'e:\\\\b\\build\\scripts\\slave\\gsutil' |
205 return gsutil | 205 return gsutil |
206 | 206 |
207 def GetBuildMode(mode): | 207 def GetBuildMode(mode): |
208 global BUILD_MODES | |
209 return BUILD_MODES[mode] | 208 return BUILD_MODES[mode] |
210 | 209 |
211 | 210 |
212 def GetBuildConf(mode, arch): | 211 def GetBuildConf(mode, arch): |
213 return '%s%s' % (GetBuildMode(mode), arch.upper()) | 212 return '%s%s' % (GetBuildMode(mode), arch.upper()) |
214 | 213 |
215 ARCH_GUESS = GuessArchitecture() | 214 ARCH_GUESS = GuessArchitecture() |
216 BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..')) | 215 BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..')) |
| 216 DART_DIR = os.path.abspath(os.path.join(__file__, '..', '..')) |
217 | 217 |
218 | 218 |
219 def GetBuildDir(host_os, target_os): | 219 def GetBuildDir(host_os, target_os): |
220 global BUILD_ROOT | |
221 build_dir = BUILD_ROOT[host_os] | 220 build_dir = BUILD_ROOT[host_os] |
222 if target_os and target_os != host_os: | 221 if target_os and target_os != host_os: |
223 build_dir = os.path.join(build_dir, target_os) | 222 build_dir = os.path.join(build_dir, target_os) |
224 return build_dir | 223 return build_dir |
225 | 224 |
226 def GetBuildRoot(host_os, mode=None, arch=None, target_os=None): | 225 def GetBuildRoot(host_os, mode=None, arch=None, target_os=None): |
227 build_root = GetBuildDir(host_os, target_os) | 226 build_root = GetBuildDir(host_os, target_os) |
228 if mode: | 227 if mode: |
229 build_root = os.path.join(build_root, GetBuildConf(mode, arch)) | 228 build_root = os.path.join(build_root, GetBuildConf(mode, arch)) |
230 return build_root | 229 return build_root |
231 | 230 |
232 def GetBaseDir(): | 231 def GetBaseDir(): |
233 return BASE_DIR | 232 return BASE_DIR |
234 | 233 |
235 def GetVersion(): | 234 def GetVersion(): |
236 dartbin = DartBinary() | 235 version_tuple = ReadVersionFile() |
237 version_script = VersionScript() | 236 if not version_tuple: |
238 p = subprocess.Popen([dartbin, version_script], stdout = subprocess.PIPE, | 237 return None |
239 stderr = subprocess.STDOUT, shell=IsWindows()) | 238 |
240 output, not_used = p.communicate() | 239 (major, minor, build, patch) = version_tuple |
241 return output.strip() | 240 revision = GetSVNRevision() |
| 241 user = GetUserName() |
| 242 # We don't add username to release builds (or any builds on the bots) |
| 243 if user == 'chrome-bot': |
| 244 user = '' |
| 245 |
| 246 user_string = '' |
| 247 revision_string = '' |
| 248 if user: |
| 249 user_string = '_%s' % user |
| 250 if revision: |
| 251 revision_string = '_r%s' % revision |
| 252 |
| 253 return ("%s.%s.%s.%s%s%s" % |
| 254 (major, minor, build, patch, revision_string, user_string)) |
| 255 |
| 256 def GetUserName(): |
| 257 key = 'USER' |
| 258 if sys.platform == 'win32': |
| 259 key = 'USERNAME' |
| 260 return os.environ.get(key, '') |
| 261 |
| 262 def ReadVersionFile(): |
| 263 version_file = os.path.join(DART_DIR, 'tools', 'VERSION') |
| 264 try: |
| 265 fd = open(version_file) |
| 266 content = fd.read() |
| 267 fd.close() |
| 268 except: |
| 269 print "Warning: Couldn't read VERSION file (%s)" % version_file |
| 270 return None |
| 271 major_match = re.search('MAJOR (\d+)', content) |
| 272 minor_match = re.search('MINOR (\d+)', content) |
| 273 build_match = re.search('BUILD (\d+)', content) |
| 274 patch_match = re.search('PATCH (\d+)', content) |
| 275 if major_match and minor_match and build_match and patch_match: |
| 276 return (major_match.group(1), minor_match.group(1), build_match.group(1), |
| 277 patch_match.group(1)) |
| 278 else: |
| 279 print "Warning: VERSION file (%s) has wrong format" % version_file |
| 280 return None |
242 | 281 |
243 def GetSVNRevision(): | 282 def GetSVNRevision(): |
| 283 # FIXME(kustermann): Make this work for newer SVN versions as well (where |
| 284 # we've got only one '.svn' directory) |
244 custom_env = dict(os.environ) | 285 custom_env = dict(os.environ) |
245 custom_env['LC_MESSAGES'] = 'en_GB' | 286 custom_env['LC_MESSAGES'] = 'en_GB' |
246 p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE, | 287 p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE, |
247 stderr = subprocess.STDOUT, shell=IsWindows(), | 288 stderr = subprocess.STDOUT, shell=IsWindows(), |
248 env = custom_env) | 289 env = custom_env, |
249 output, not_used = p.communicate() | 290 cwd = DART_DIR) |
| 291 output, _ = p.communicate() |
250 revision = ParseSvnInfoOutput(output) | 292 revision = ParseSvnInfoOutput(output) |
251 if revision: | 293 if revision: |
252 return revision | 294 return revision |
253 | 295 |
254 # maybe the builder is using git-svn, try that | 296 # maybe the builder is using git-svn, try that |
255 p = subprocess.Popen(['git', 'svn', 'info'], stdout = subprocess.PIPE, | 297 p = subprocess.Popen(['git', 'svn', 'info'], stdout = subprocess.PIPE, |
256 stderr = subprocess.STDOUT, shell=IsWindows()) | 298 stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR) |
257 output, not_used = p.communicate() | 299 output, _ = p.communicate() |
258 revision = ParseSvnInfoOutput(output) | 300 revision = ParseSvnInfoOutput(output) |
259 if revision: | 301 if revision: |
260 return revision | 302 return revision |
261 | 303 |
262 return None | 304 return None |
263 | 305 |
264 def ParseSvnInfoOutput(output): | 306 def ParseSvnInfoOutput(output): |
265 for line in output.split('\n'): | 307 revision_match = re.search('Last Changed Rev: (\d+)', output) |
266 if 'Revision' in line: | 308 if revision_match: |
267 return (line.strip().split())[1] | 309 return revision_match.group(1) |
268 return None | 310 return None |
269 | 311 |
270 def RewritePathSeparator(path, workspace): | 312 def RewritePathSeparator(path, workspace): |
271 # Paths in test files are always specified using '/' | 313 # Paths in test files are always specified using '/' |
272 # as the path separator. Replace with the actual | 314 # as the path separator. Replace with the actual |
273 # path separator before use. | 315 # path separator before use. |
274 if ('/' in path): | 316 if ('/' in path): |
275 split_path = path.split('/') | 317 split_path = path.split('/') |
276 path = os.sep.join(split_path) | 318 path = os.sep.join(split_path) |
277 path = os.path.join(workspace, path) | 319 path = os.path.join(workspace, path) |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 if IsCrashExitCode(exit_code): | 424 if IsCrashExitCode(exit_code): |
383 sys.stderr.write('Command: %s\nCRASHED with exit code %d (0x%x)\n' % ( | 425 sys.stderr.write('Command: %s\nCRASHED with exit code %d (0x%x)\n' % ( |
384 ' '.join(command), exit_code, exit_code & 0xffffffff)) | 426 ' '.join(command), exit_code, exit_code & 0xffffffff)) |
385 | 427 |
386 | 428 |
387 def Touch(name): | 429 def Touch(name): |
388 with file(name, 'a'): | 430 with file(name, 'a'): |
389 os.utime(name, None) | 431 os.utime(name, None) |
390 | 432 |
391 | 433 |
392 def VersionScript(): | |
393 tools_dir = os.path.dirname(os.path.realpath(__file__)) | |
394 return os.path.join(tools_dir, 'version.dart') | |
395 | |
396 | |
397 def DartBinary(): | 434 def DartBinary(): |
398 tools_dir = os.path.dirname(os.path.realpath(__file__)) | 435 tools_dir = os.path.dirname(os.path.realpath(__file__)) |
399 dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin') | 436 dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin') |
400 if IsWindows(): | 437 if IsWindows(): |
401 return os.path.join(dart_binary_prefix, 'windows', 'dart.exe') | 438 return os.path.join(dart_binary_prefix, 'windows', 'dart.exe') |
402 else: | 439 else: |
403 return os.path.join(dart_binary_prefix, GuessOS(), 'dart') | 440 return os.path.join(dart_binary_prefix, GuessOS(), 'dart') |
404 | 441 |
405 | 442 |
406 def DartSdkBinary(): | 443 def DartSdkBinary(): |
(...skipping 10 matching lines...) Expand all Loading... |
417 self._temp_dir = tempfile.mkdtemp(self._prefix) | 454 self._temp_dir = tempfile.mkdtemp(self._prefix) |
418 return self._temp_dir | 455 return self._temp_dir |
419 | 456 |
420 def __exit__(self, *_): | 457 def __exit__(self, *_): |
421 shutil.rmtree(self._temp_dir, ignore_errors=True) | 458 shutil.rmtree(self._temp_dir, ignore_errors=True) |
422 | 459 |
423 | 460 |
424 if __name__ == "__main__": | 461 if __name__ == "__main__": |
425 import sys | 462 import sys |
426 Main(sys.argv) | 463 Main(sys.argv) |
OLD | NEW |