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

Side by Side Diff: tools/cr/cr/base/host.py

Issue 131543004: Make cr build run goma_ctl.py ensure_start before building. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: s/Execute/ExecuteSilently/ Created 6 years, 11 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 | « tools/cr/cr/actions/ninja.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Module for build host support.""" 5 """Module for build host support."""
6 6
7 import os 7 import os
8 import pipes 8 import pipes
9 import subprocess 9 import subprocess
10 10
(...skipping 23 matching lines...) Expand all
34 """ 34 """
35 return False 35 return False
36 36
37 @classmethod 37 @classmethod
38 def Select(cls, context): 38 def Select(cls, context):
39 for host in cls.Plugins(): 39 for host in cls.Plugins():
40 if host.Matches(): 40 if host.Matches():
41 return host 41 return host
42 42
43 def _Execute(self, context, command, 43 def _Execute(self, context, command,
44 shell=False, capture=False, ignore_dry_run=False, 44 shell=False, capture=False, silent=False,
45 return_status=False): 45 ignore_dry_run=False, return_status=False):
46 """This is the only method that launches external programs. 46 """This is the only method that launches external programs.
47 47
48 It is a thin wrapper around subprocess.Popen that handles cr specific 48 It is a thin wrapper around subprocess.Popen that handles cr specific
49 issues. The command is expanded in the context, so that context variables 49 issues. The command is expanded in the context, so that context variables
50 are substituted. 50 are substituted.
51 Args: 51 Args:
52 context: the cr context to run under. 52 context: the cr context to run under.
53 command: the command to run. 53 command: the command to run.
54 shell: whether to run the command using the shell. 54 shell: whether to run the command using the shell.
55 capture: controls wether the output of the command is captured. 55 capture: controls wether the output of the command is captured.
(...skipping 15 matching lines...) Expand all
71 if context.verbose: 71 if context.verbose:
72 print ' '.join(command) 72 print ' '.join(command)
73 if context.verbose >= _TRAIL_VERBOSITY: 73 if context.verbose >= _TRAIL_VERBOSITY:
74 print 'Command expanded the following variables:' 74 print 'Command expanded the following variables:'
75 for key, value in trail: 75 for key, value in trail:
76 print ' ', key, '=', value 76 print ' ', key, '=', value
77 if ignore_dry_run or not context.dry_run: 77 if ignore_dry_run or not context.dry_run:
78 out = None 78 out = None
79 if capture: 79 if capture:
80 out = subprocess.PIPE 80 out = subprocess.PIPE
81 elif silent:
82 out = open(os.devnull, "w")
81 try: 83 try:
82 p = subprocess.Popen( 84 p = subprocess.Popen(
83 command, shell=shell, 85 command, shell=shell,
84 env={k: str(v) for k, v in context.exported.items()}, 86 env={k: str(v) for k, v in context.exported.items()},
85 stdout=out) 87 stdout=out)
86 except OSError: 88 except OSError:
87 print 'Failed to exec', command 89 print 'Failed to exec', command
88 # Don't log the trail if we already have 90 # Don't log the trail if we already have
89 if context.verbose < _TRAIL_VERBOSITY: 91 if context.verbose < _TRAIL_VERBOSITY:
90 print 'Variables used to build the command were:' 92 print 'Variables used to build the command were:'
91 for key, value in trail: 93 for key, value in trail:
92 print ' ', key, '=', value 94 print ' ', key, '=', value
93 exit(1) 95 exit(1)
94 try: 96 try:
95 output, _ = p.communicate() 97 output, _ = p.communicate()
96 except KeyboardInterrupt: 98 except KeyboardInterrupt:
97 p.terminate() 99 p.terminate()
98 p.wait() 100 p.wait()
99 exit(1) 101 exit(1)
102 finally:
103 if silent:
104 out.close()
100 if return_status: 105 if return_status:
101 return p.returncode 106 return p.returncode
102 if p.returncode != 0: 107 if p.returncode != 0:
103 print 'Error {0} executing command {1}'.format(p.returncode, command) 108 print 'Error {0} executing command {1}'.format(p.returncode, command)
104 exit(p.returncode) 109 exit(p.returncode)
105 return output or '' 110 return output or ''
106 return '' 111 return ''
107 112
108 @cr.Plugin.activemethod 113 @cr.Plugin.activemethod
109 def Shell(self, context, *command): 114 def Shell(self, context, *command):
110 command = ' '.join([pipes.quote(arg) for arg in command]) 115 command = ' '.join([pipes.quote(arg) for arg in command])
111 return self._Execute(context, [command], shell=True) 116 return self._Execute(context, [command], shell=True)
112 117
113 @cr.Plugin.activemethod 118 @cr.Plugin.activemethod
114 def Execute(self, context, *command): 119 def Execute(self, context, *command):
115 return self._Execute(context, command, shell=False) 120 return self._Execute(context, command, shell=False)
116 121
117 @cr.Plugin.activemethod 122 @cr.Plugin.activemethod
123 def ExecuteSilently(self, context, *command):
124 return self._Execute(context, command, shell=False, silent=True)
125
126 @cr.Plugin.activemethod
118 def CaptureShell(self, context, *command): 127 def CaptureShell(self, context, *command):
119 return self._Execute(context, command, 128 return self._Execute(context, command,
120 shell=True, capture=True, ignore_dry_run=True) 129 shell=True, capture=True, ignore_dry_run=True)
121 130
122 @cr.Plugin.activemethod 131 @cr.Plugin.activemethod
123 def Capture(self, context, *command): 132 def Capture(self, context, *command):
124 return self._Execute(context, command, capture=True, ignore_dry_run=True) 133 return self._Execute(context, command, capture=True, ignore_dry_run=True)
125 134
126 @cr.Plugin.activemethod 135 @cr.Plugin.activemethod
127 def ExecuteStatus(self, context, *command): 136 def ExecuteStatus(self, context, *command):
(...skipping 12 matching lines...) Expand all
140 result = [] 149 result = []
141 extensions = [''] 150 extensions = ['']
142 extensions.extend(os.environ.get('PATHEXT', '').split(os.pathsep)) 151 extensions.extend(os.environ.get('PATHEXT', '').split(os.pathsep))
143 for path in os.environ.get('PATH', '').split(os.pathsep): 152 for path in os.environ.get('PATH', '').split(os.pathsep):
144 partial = os.path.join(path, name) 153 partial = os.path.join(path, name)
145 for extension in extensions: 154 for extension in extensions:
146 filename = partial + extension 155 filename = partial + extension
147 if os.path.exists(filename) and filename not in result: 156 if os.path.exists(filename) and filename not in result:
148 result.append(filename) 157 result.append(filename)
149 return result 158 return result
OLDNEW
« no previous file with comments | « tools/cr/cr/actions/ninja.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698