| OLD | NEW |
| 1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 # Copyright (c) 2014, 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 |
| 11 import re | 11 import re |
| 12 import shutil | 12 import shutil |
| 13 import subprocess | 13 import subprocess |
| 14 import tempfile |
| 14 import sys | 15 import sys |
| 15 import tempfile | |
| 16 | 16 |
| 17 class Version(object): | 17 class Version(object): |
| 18 def __init__(self, channel, major, minor, patch, prerelease, | 18 def __init__(self, channel, major, minor, patch, prerelease, |
| 19 prerelease_patch): | 19 prerelease_patch): |
| 20 self.channel = channel | 20 self.channel = channel |
| 21 self.major = major | 21 self.major = major |
| 22 self.minor = minor | 22 self.minor = minor |
| 23 self.patch = patch | 23 self.patch = patch |
| 24 self.prerelease = prerelease | 24 self.prerelease = prerelease |
| 25 self.prerelease_patch = prerelease_patch | 25 self.prerelease_patch = prerelease_patch |
| 26 | 26 |
| 27 # Try to guess the host operating system. | 27 # Try to guess the host operating system. |
| 28 def GuessOS(): | 28 def GuessOS(): |
| 29 id = platform.system() | 29 os_id = platform.system() |
| 30 if id == "Linux": | 30 if os_id == "Linux": |
| 31 return "linux" | 31 return "linux" |
| 32 elif id == "Darwin": | 32 elif os_id == "Darwin": |
| 33 return "macos" | 33 return "macos" |
| 34 elif id == "Windows" or id == "Microsoft": | 34 elif os_id == "Windows" or os_id == "Microsoft": |
| 35 # On Windows Vista platform.system() can return "Microsoft" with some | 35 # On Windows Vista platform.system() can return "Microsoft" with some |
| 36 # versions of Python, see http://bugs.python.org/issue1082 for details. | 36 # versions of Python, see http://bugs.python.org/issue1082 for details. |
| 37 return "win32" | 37 return "win32" |
| 38 elif id == 'FreeBSD': | 38 elif os_id == 'FreeBSD': |
| 39 return 'freebsd' | 39 return 'freebsd' |
| 40 elif id == 'OpenBSD': | 40 elif os_id == 'OpenBSD': |
| 41 return 'openbsd' | 41 return 'openbsd' |
| 42 elif id == 'SunOS': | 42 elif os_id == 'SunOS': |
| 43 return 'solaris' | 43 return 'solaris' |
| 44 else: | 44 else: |
| 45 return None | 45 return None |
| 46 | 46 |
| 47 | 47 |
| 48 # Try to guess the host architecture. | 48 # Try to guess the host architecture. |
| 49 def GuessArchitecture(): | 49 def GuessArchitecture(): |
| 50 id = platform.machine() | 50 os_id = platform.machine() |
| 51 if id.startswith('arm'): | 51 if os_id.startswith('arm'): |
| 52 return 'arm' | 52 return 'arm' |
| 53 elif id.startswith('aarch64'): | 53 elif os_id.startswith('aarch64'): |
| 54 return 'arm64' | 54 return 'arm64' |
| 55 elif id.startswith('mips'): | 55 elif os_id.startswith('mips'): |
| 56 return 'mips' | 56 return 'mips' |
| 57 elif (not id) or (not re.match('(x|i[3-6])86', id) is None): | 57 elif (not os_id) or (not re.match('(x|i[3-6])86', os_id) is None): |
| 58 return 'ia32' | 58 return 'ia32' |
| 59 elif id == 'i86pc': | 59 elif os_id == 'i86pc': |
| 60 return 'ia32' | 60 return 'ia32' |
| 61 elif '64' in id: | 61 elif '64' in os_id: |
| 62 return 'x64' | 62 return 'x64' |
| 63 else: | 63 else: |
| 64 guess_os = GuessOS() | 64 guess_os = GuessOS() |
| 65 print "Warning: Guessing architecture %s based on os %s\n" % (id, guess_os) | 65 print "Warning: Guessing architecture %s based on os %s\n"\ |
| 66 % (os_id, guess_os) |
| 66 if guess_os == 'win32': | 67 if guess_os == 'win32': |
| 67 return 'ia32' | 68 return 'ia32' |
| 68 return None | 69 return None |
| 69 | 70 |
| 70 | 71 |
| 71 # Try to guess the number of cpus on this machine. | 72 # Try to guess the number of cpus on this machine. |
| 72 def GuessCpus(): | 73 def GuessCpus(): |
| 73 if os.path.exists("/proc/cpuinfo"): | 74 if os.path.exists("/proc/cpuinfo"): |
| 74 return int(commands.getoutput("grep -E '^processor' /proc/cpuinfo | wc -l")) | 75 return int(commands.getoutput("grep -E '^processor' /proc/cpuinfo | wc -l")) |
| 75 if os.path.exists("/usr/bin/hostinfo"): | 76 if os.path.exists("/usr/bin/hostinfo"): |
| (...skipping 14 matching lines...) Expand all Loading... |
| 90 wow6432Node = '' | 91 wow6432Node = '' |
| 91 return r'SOFTWARE\%s%s' % (wow6432Node, name) | 92 return r'SOFTWARE\%s%s' % (wow6432Node, name) |
| 92 | 93 |
| 93 # Try to guess Visual Studio location when buiding on Windows. | 94 # Try to guess Visual Studio location when buiding on Windows. |
| 94 def GuessVisualStudioPath(): | 95 def GuessVisualStudioPath(): |
| 95 defaultPath = r"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7" \ | 96 defaultPath = r"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7" \ |
| 96 r"\IDE" | 97 r"\IDE" |
| 97 defaultExecutable = "devenv.com" | 98 defaultExecutable = "devenv.com" |
| 98 | 99 |
| 99 if not IsWindows(): | 100 if not IsWindows(): |
| 100 return (defaultPath, defaultExecutable) | 101 return defaultPath, defaultExecutable |
| 101 | 102 |
| 102 keyNamesAndExecutables = [ | 103 keyNamesAndExecutables = [ |
| 103 # Pair for non-Express editions. | 104 # Pair for non-Express editions. |
| 104 (GetWindowsRegistryKeyName(r'Microsoft\VisualStudio'), 'devenv.com'), | 105 (GetWindowsRegistryKeyName(r'Microsoft\VisualStudio'), 'devenv.com'), |
| 105 # Pair for 2012 Express edition. | 106 # Pair for 2012 Express edition. |
| 106 (GetWindowsRegistryKeyName(r'Microsoft\VSWinExpress'), 'VSWinExpress.exe'), | 107 (GetWindowsRegistryKeyName(r'Microsoft\VSWinExpress'), 'VSWinExpress.exe'), |
| 107 # Pair for pre-2012 Express editions. | 108 # Pair for pre-2012 Express editions. |
| 108 (GetWindowsRegistryKeyName(r'Microsoft\VCExpress'), 'VCExpress.exe')] | 109 (GetWindowsRegistryKeyName(r'Microsoft\VCExpress'), 'VCExpress.exe')] |
| 109 | 110 |
| 110 bestGuess = (0.0, (defaultPath, defaultExecutable)) | 111 bestGuess = (0.0, (defaultPath, defaultExecutable)) |
| 111 | 112 |
| 112 import _winreg | 113 import _winreg |
| 113 for (keyName, executable) in keyNamesAndExecutables: | 114 for (keyName, executable) in keyNamesAndExecutables: |
| 114 try: | 115 try: |
| 115 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keyName) | 116 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keyName) |
| 116 except WindowsError: | 117 except WindowsError: |
| 117 # Can't find this key - moving on the next one. | 118 # Can't find this key - moving on the next one. |
| 118 continue | 119 continue |
| 119 | 120 |
| 120 try: | 121 try: |
| 121 subkeyCounter = 0 | 122 subkeyCounter = 0 |
| 122 while True: | 123 while True: |
| 123 try: | 124 try: |
| 124 subkeyName = _winreg.EnumKey(key, subkeyCounter) | 125 subkeyName = _winreg.EnumKey(key, subkeyCounter) |
| 125 subkeyCounter = subkeyCounter + 1 | 126 subkeyCounter += 1 |
| 126 except WindowsError: | 127 except WindowsError: |
| 127 # Reached end of enumeration. Moving on the next key. | 128 # Reached end of enumeration. Moving on the next key. |
| 128 break | 129 break |
| 129 | 130 |
| 130 match = re.match(r'^\d+\.\d+$', subkeyName) | 131 match = re.match(r'^\d+\.\d+$', subkeyName) |
| 131 if match: | 132 if match: |
| 132 with _winreg.OpenKey(key, subkeyName) as subkey: | 133 with _winreg.OpenKey(key, subkeyName) as subkey: |
| 133 try: | 134 try: |
| 134 (installDir, registrytype) = _winreg.QueryValueEx(subkey, | 135 (installDir, registrytype) = _winreg.QueryValueEx(subkey, |
| 135 'InstallDir') | 136 'InstallDir') |
| 136 except WindowsError: | 137 except WindowsError: |
| 137 # Can't find value under the key - continue to the next key. | 138 # Can't find value under the key - continue to the next key. |
| 138 continue | 139 continue |
| 139 isExpress = executable != 'devenv.com' | 140 isExpress = executable != 'devenv.com' |
| 140 if not isExpress and subkeyName == '10.0': | 141 if not isExpress and subkeyName == '10.0': |
| 141 # Stop search since if we found non-Express VS2010 version | 142 # Stop search since if we found non-Express VS2010 version |
| 142 # installed, which is preferred version. | 143 # installed, which is preferred version. |
| 143 return (installDir, executable) | 144 return installDir, executable |
| 144 else: | 145 else: |
| 145 version = float(subkeyName) | 146 version = float(subkeyName) |
| 146 # We prefer higher version of Visual Studio and given equal | 147 # We prefer higher version of Visual Studio and given equal |
| 147 # version numbers we prefer non-Express edition. | 148 # version numbers we prefer non-Express edition. |
| 148 if version > bestGuess[0]: | 149 if version > bestGuess[0]: |
| 149 bestGuess = (version, (installDir, executable)) | 150 bestGuess = (version, (installDir, executable)) |
| 150 finally: | 151 finally: |
| 151 _winreg.CloseKey(key) | 152 _winreg.CloseKey(key) |
| 152 return bestGuess[1] | 153 return bestGuess[1] |
| 153 | 154 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 165 if '#' in line: | 166 if '#' in line: |
| 166 line = line[:line.find('#')] | 167 line = line[:line.find('#')] |
| 167 line = line.strip() | 168 line = line.strip() |
| 168 if len(line) == 0: | 169 if len(line) == 0: |
| 169 continue | 170 continue |
| 170 result.append(line) | 171 result.append(line) |
| 171 return result | 172 return result |
| 172 | 173 |
| 173 # Filters out all arguments until the next '--' argument | 174 # Filters out all arguments until the next '--' argument |
| 174 # occurs. | 175 # occurs. |
| 175 def ListArgCallback(option, opt_str, value, parser): | 176 def ListArgCallback(option, value, parser): |
| 176 if value is None: | 177 if value is None: |
| 177 value = [] | 178 value = [] |
| 178 | 179 |
| 179 for arg in parser.rargs: | 180 for arg in parser.rargs: |
| 180 if arg[:2].startswith('--'): | 181 if arg[:2].startswith('--'): |
| 181 break | 182 break |
| 182 value.append(arg) | 183 value.append(arg) |
| 183 | 184 |
| 184 del parser.rargs[:len(value)] | 185 del parser.rargs[:len(value)] |
| 185 setattr(parser.values, option.dest, value) | 186 setattr(parser.values, option.dest, value) |
| 186 | 187 |
| 187 | 188 |
| 188 # Filters out all argument until the first non '-' or the | 189 # Filters out all argument until the first non '-' or the |
| 189 # '--' argument occurs. | 190 # '--' argument occurs. |
| 190 def ListDartArgCallback(option, opt_str, value, parser): | 191 def ListDartArgCallback(option, value, parser): |
| 191 if value is None: | 192 if value is None: |
| 192 value = [] | 193 value = [] |
| 193 | 194 |
| 194 for arg in parser.rargs: | 195 for arg in parser.rargs: |
| 195 if arg[:2].startswith('--') or arg[0] != '-': | 196 if arg[:2].startswith('--') or arg[0] != '-': |
| 196 break | 197 break |
| 197 value.append(arg) | 198 value.append(arg) |
| 198 | 199 |
| 199 del parser.rargs[:len(value)] | 200 del parser.rargs[:len(value)] |
| 200 setattr(parser.values, option.dest, value) | 201 setattr(parser.values, option.dest, value) |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 return '%s%s%s' % (GetBuildMode(mode), conf_os.title(), arch.upper()) | 248 return '%s%s%s' % (GetBuildMode(mode), conf_os.title(), arch.upper()) |
| 248 else: | 249 else: |
| 249 # Ask for a cross build if the host and target architectures don't match. | 250 # Ask for a cross build if the host and target architectures don't match. |
| 250 host_arch = ARCH_GUESS | 251 host_arch = ARCH_GUESS |
| 251 cross_build = '' | 252 cross_build = '' |
| 252 if GetArchFamily(host_arch) != GetArchFamily(arch): | 253 if GetArchFamily(host_arch) != GetArchFamily(arch): |
| 253 print "GetBuildConf: Cross-build of %s on %s\n" % (arch, host_arch) | 254 print "GetBuildConf: Cross-build of %s on %s\n" % (arch, host_arch) |
| 254 cross_build = 'X' | 255 cross_build = 'X' |
| 255 return '%s%s%s' % (GetBuildMode(mode), cross_build, arch.upper()) | 256 return '%s%s%s' % (GetBuildMode(mode), cross_build, arch.upper()) |
| 256 | 257 |
| 257 def GetBuildDir(host_os, target_os): | 258 def GetBuildDir(host_os): |
| 258 return BUILD_ROOT[host_os] | 259 return BUILD_ROOT[host_os] |
| 259 | 260 |
| 260 def GetBuildRoot(host_os, mode=None, arch=None, target_os=None): | 261 def GetBuildRoot(host_os, mode=None, arch=None): |
| 261 build_root = GetBuildDir(host_os, target_os) | 262 build_root = GetBuildDir(host_os) |
| 262 if mode: | 263 if mode: |
| 263 build_root = os.path.join(build_root, GetBuildConf(mode, arch)) | 264 build_root = os.path.join(build_root, GetBuildConf(mode, arch)) |
| 264 return build_root | 265 return build_root |
| 265 | 266 |
| 266 def GetBaseDir(): | 267 def GetBaseDir(): |
| 267 return BASE_DIR | 268 return BASE_DIR |
| 268 | 269 |
| 269 def GetShortVersion(): | 270 def GetShortVersion(): |
| 270 version = ReadVersionFile() | 271 version = ReadVersionFile() |
| 271 return ('%s.%s.%s.%s.%s' % ( | 272 return ('%s.%s.%s.%s.%s' % ( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 version = ReadVersionFile() | 309 version = ReadVersionFile() |
| 309 return version.channel | 310 return version.channel |
| 310 | 311 |
| 311 def GetUserName(): | 312 def GetUserName(): |
| 312 key = 'USER' | 313 key = 'USER' |
| 313 if sys.platform == 'win32': | 314 if sys.platform == 'win32': |
| 314 key = 'USERNAME' | 315 key = 'USERNAME' |
| 315 return os.environ.get(key, '') | 316 return os.environ.get(key, '') |
| 316 | 317 |
| 317 def ReadVersionFile(): | 318 def ReadVersionFile(): |
| 318 def match_against(pattern, content): | 319 def match_against(pattern, file_content): |
| 319 match = re.search(pattern, content, flags=re.MULTILINE) | 320 match = re.search(pattern, file_content, flags=re.MULTILINE) |
| 320 if match: | 321 if match: |
| 321 return match.group(1) | 322 return match.group(1) |
| 322 return None | 323 return None |
| 323 | 324 |
| 324 version_file = os.path.join(DART_DIR, 'tools', 'VERSION') | 325 version_file = os.path.join(DART_DIR, 'tools', 'VERSION') |
| 325 try: | 326 try: |
| 326 fd = open(version_file) | 327 fd = open(version_file) |
| 327 content = fd.read() | 328 content = fd.read() |
| 328 fd.close() | 329 fd.close() |
| 329 except: | 330 except: |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 def ParseSvnInfoOutput(output): | 404 def ParseSvnInfoOutput(output): |
| 404 revision_match = re.search('Last Changed Rev: (\d+)', output) | 405 revision_match = re.search('Last Changed Rev: (\d+)', output) |
| 405 if revision_match: | 406 if revision_match: |
| 406 return revision_match.group(1) | 407 return revision_match.group(1) |
| 407 return None | 408 return None |
| 408 | 409 |
| 409 def RewritePathSeparator(path, workspace): | 410 def RewritePathSeparator(path, workspace): |
| 410 # Paths in test files are always specified using '/' | 411 # Paths in test files are always specified using '/' |
| 411 # as the path separator. Replace with the actual | 412 # as the path separator. Replace with the actual |
| 412 # path separator before use. | 413 # path separator before use. |
| 413 if ('/' in path): | 414 if '/' in path: |
| 414 split_path = path.split('/') | 415 split_path = path.split('/') |
| 415 path = os.sep.join(split_path) | 416 path = os.sep.join(split_path) |
| 416 path = os.path.join(workspace, path) | 417 path = os.path.join(workspace, path) |
| 417 if not os.path.exists(path): | 418 if not os.path.exists(path): |
| 418 raise Exception(path) | 419 raise Exception(path) |
| 419 return path | 420 return path |
| 420 | 421 |
| 421 | 422 |
| 422 def ParseTestOptions(pattern, source, workspace): | 423 def ParseTestOptions(pattern, source, workspace): |
| 423 match = pattern.search(source) | 424 match = pattern.search(source) |
| 424 if match: | 425 if match: |
| 425 return [RewritePathSeparator(o, workspace) for o in match.group(1).split(' '
)] | 426 return [RewritePathSeparator(o, workspace) for o in match.group(1).split(' '
)] |
| 426 else: | 427 else: |
| 427 return None | 428 return None |
| 428 | 429 |
| 429 | 430 |
| 430 def ParseTestOptionsMultiple(pattern, source, workspace): | 431 def ParseTestOptionsMultiple(pattern, source, workspace): |
| 431 matches = pattern.findall(source) | 432 matches = pattern.findall(source) |
| 432 if matches: | 433 if matches: |
| 433 result = [] | 434 result = [] |
| 434 for match in matches: | 435 for match in matches: |
| 435 if len(match) > 0: | 436 if len(match) > 0: |
| 436 result.append( | 437 result.append( |
| 437 [RewritePathSeparator(o, workspace) for o in match.split(' ')]); | 438 [RewritePathSeparator(o, workspace) for o in match.split(' ')]) |
| 438 else: | 439 else: |
| 439 result.append([]) | 440 result.append([]) |
| 440 return result | 441 return result |
| 441 else: | 442 else: |
| 442 return None | 443 return None |
| 443 | 444 |
| 444 | 445 |
| 445 def ConfigureJava(): | 446 def ConfigureJava(): |
| 446 java_home = '/usr/libexec/java_home' | 447 java_home = '/usr/libexec/java_home' |
| 447 if os.path.exists(java_home): | 448 if os.path.exists(java_home): |
| 448 proc = subprocess.Popen([java_home, '-v', '1.6+'], | 449 proc = subprocess.Popen([java_home, '-v', '1.6+'], |
| 449 stdout=subprocess.PIPE, | 450 stdout=subprocess.PIPE, |
| 450 stderr=subprocess.PIPE) | 451 stderr=subprocess.PIPE) |
| 451 (stdout, stderr) = proc.communicate() | 452 (stdout, stderr) = proc.communicate() |
| 452 if proc.wait() != 0: | 453 if proc.wait() != 0: |
| 453 return None | 454 return None |
| 454 new = stdout.strip() | 455 new = stdout.strip() |
| 455 current = os.getenv('JAVA_HOME', default=new) | 456 current = os.getenv('JAVA_HOME', new) |
| 456 if current != new: | 457 if current != new: |
| 457 sys.stderr.write('Please set JAVA_HOME to %s\n' % new) | 458 sys.stderr.write('Please set JAVA_HOME to %s\n' % new) |
| 458 os.putenv('JAVA_HOME', new) | 459 os.putenv('JAVA_HOME', new) |
| 459 | 460 |
| 460 | 461 |
| 461 def Daemonize(): | 462 def Daemonize(): |
| 462 """ | 463 """ |
| 463 Create a detached background process (daemon). Returns True for | 464 Create a detached background process (daemon). Returns True for |
| 464 the daemon, False for the parent process. | 465 the daemon, False for the parent process. |
| 465 See: http://www.faqs.org/faqs/unix-faq/programmer/faq/ | 466 See: http://www.faqs.org/faqs/unix-faq/programmer/faq/ |
| 466 "1.7 How do I get my program to act like a daemon?" | 467 "1.7 How do I get my program to act like a daemon?" |
| 467 """ | 468 """ |
| 468 if os.fork() > 0: | 469 if os.fork() > 0: |
| 469 return False | 470 return False |
| 470 os.setsid() | 471 os.setsid() |
| 471 if os.fork() > 0: | 472 if os.fork() > 0: |
| 472 os._exit(0) | 473 exit(0) |
| 473 raise | 474 raise |
| 474 return True | 475 return True |
| 475 | 476 |
| 476 | 477 |
| 477 def PrintError(str): | 478 def PrintError(string): |
| 478 """Writes and flushes a string to stderr.""" | 479 """Writes and flushes a string to stderr.""" |
| 479 sys.stderr.write(str) | 480 sys.stderr.write(string) |
| 480 sys.stderr.write('\n') | 481 sys.stderr.write('\n') |
| 481 | 482 |
| 482 | 483 |
| 483 def CheckedUnlink(name): | 484 def CheckedUnlink(name): |
| 484 """Unlink a file without throwing an exception.""" | 485 """Unlink a file without throwing an exception.""" |
| 485 try: | 486 try: |
| 486 os.unlink(name) | 487 os.unlink(name) |
| 487 except OSError, e: | 488 except OSError, e: |
| 488 PrintError("os.unlink() " + str(e)) | 489 PrintError("os.unlink() " + str(e)) |
| 489 | 490 |
| 490 | 491 |
| 491 def Main(argv): | 492 def Main(): |
| 492 print "GuessOS() -> ", GuessOS() | 493 print "GuessOS() -> ", GuessOS() |
| 493 print "GuessArchitecture() -> ", GuessArchitecture() | 494 print "GuessArchitecture() -> ", GuessArchitecture() |
| 494 print "GuessCpus() -> ", GuessCpus() | 495 print "GuessCpus() -> ", GuessCpus() |
| 495 print "IsWindows() -> ", IsWindows() | 496 print "IsWindows() -> ", IsWindows() |
| 496 print "GuessVisualStudioPath() -> ", GuessVisualStudioPath() | 497 print "GuessVisualStudioPath() -> ", GuessVisualStudioPath() |
| 497 | 498 |
| 498 | 499 |
| 499 class Error(Exception): | 500 class Error(Exception): |
| 500 pass | 501 pass |
| 501 | 502 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 529 | 530 |
| 530 | 531 |
| 531 def ExecuteCommand(cmd): | 532 def ExecuteCommand(cmd): |
| 532 """Execute a command in a subprocess.""" | 533 """Execute a command in a subprocess.""" |
| 533 print 'Executing: ' + ' '.join(cmd) | 534 print 'Executing: ' + ' '.join(cmd) |
| 534 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, | 535 pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
| 535 shell=IsWindows()) | 536 shell=IsWindows()) |
| 536 output = pipe.communicate() | 537 output = pipe.communicate() |
| 537 if pipe.returncode != 0: | 538 if pipe.returncode != 0: |
| 538 raise Exception('Execution failed: ' + str(output)) | 539 raise Exception('Execution failed: ' + str(output)) |
| 539 return (pipe.returncode, output) | 540 return pipe.returncode, output |
| 540 | 541 |
| 541 | 542 |
| 542 def DartBinary(): | 543 def DartBinary(): |
| 543 tools_dir = os.path.dirname(os.path.realpath(__file__)) | 544 tools_dir = os.path.dirname(os.path.realpath(__file__)) |
| 544 dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin') | 545 dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin') |
| 545 if IsWindows(): | 546 if IsWindows(): |
| 546 return os.path.join(dart_binary_prefix, 'windows', 'dart.exe') | 547 return os.path.join(dart_binary_prefix, 'windows', 'dart.exe') |
| 547 else: | 548 else: |
| 548 arch = GuessArchitecture() | 549 arch = GuessArchitecture() |
| 549 system = GuessOS() | 550 system = GuessOS() |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 print "Enter directory = ", self._working_directory | 584 print "Enter directory = ", self._working_directory |
| 584 os.chdir(self._working_directory) | 585 os.chdir(self._working_directory) |
| 585 | 586 |
| 586 def __exit__(self, *_): | 587 def __exit__(self, *_): |
| 587 print "Enter directory = ", self._old_cwd | 588 print "Enter directory = ", self._old_cwd |
| 588 os.chdir(self._old_cwd) | 589 os.chdir(self._old_cwd) |
| 589 | 590 |
| 590 | 591 |
| 591 if __name__ == "__main__": | 592 if __name__ == "__main__": |
| 592 import sys | 593 import sys |
| 593 Main(sys.argv) | 594 Main() |
| OLD | NEW |