OLD | NEW |
1 # Copyright 2009 Google Inc. All Rights Reserved. | 1 # Copyright 2009 Google Inc. All Rights Reserved. |
2 # | 2 # |
3 # Licensed under the Apache License, Version 2.0 (the "License"); | 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
4 # you may not use this file except in compliance with the License. | 4 # you may not use this file except in compliance with the License. |
5 # You may obtain a copy of the License at | 5 # You may obtain a copy of the License at |
6 # | 6 # |
7 # http://www.apache.org/licenses/LICENSE-2.0 | 7 # http://www.apache.org/licenses/LICENSE-2.0 |
8 # | 8 # |
9 # Unless required by applicable law or agreed to in writing, software | 9 # Unless required by applicable law or agreed to in writing, software |
10 # distributed under the License is distributed on an "AS IS" BASIS, | 10 # distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 description. | 221 description. |
222 """ | 222 """ |
223 # Call subprocess and capture nothing: | 223 # Call subprocess and capture nothing: |
224 SubprocessCallAndFilter(command, in_directory, True, True, fail_status) | 224 SubprocessCallAndFilter(command, in_directory, True, True, fail_status) |
225 | 225 |
226 | 226 |
227 def SubprocessCallAndFilter(command, | 227 def SubprocessCallAndFilter(command, |
228 in_directory, | 228 in_directory, |
229 print_messages, | 229 print_messages, |
230 print_stdout, | 230 print_stdout, |
231 fail_status=None, filter=None): | 231 fail_status=None, filter_fn=None): |
232 """Runs command, a list, in directory in_directory. | 232 """Runs command, a list, in directory in_directory. |
233 | 233 |
234 If print_messages is true, a message indicating what is being done | 234 If print_messages is true, a message indicating what is being done |
235 is printed to stdout. If print_messages is false, the message is printed | 235 is printed to stdout. If print_messages is false, the message is printed |
236 only if we actually need to print something else as well, so you can | 236 only if we actually need to print something else as well, so you can |
237 get the context of the output. If print_messages is false and print_stdout | 237 get the context of the output. If print_messages is false and print_stdout |
238 is false, no output at all is generated. | 238 is false, no output at all is generated. |
239 | 239 |
240 Also, if print_stdout is true, the command's stdout is also forwarded | 240 Also, if print_stdout is true, the command's stdout is also forwarded |
241 to stdout. | 241 to stdout. |
242 | 242 |
243 If a filter function is specified, it is expected to take a single | 243 If a filter_fn function is specified, it is expected to take a single |
244 string argument, and it will be called with each line of the | 244 string argument, and it will be called with each line of the |
245 subprocess's output. Each line has had the trailing newline character | 245 subprocess's output. Each line has had the trailing newline character |
246 trimmed. | 246 trimmed. |
247 | 247 |
248 If the command fails, as indicated by a nonzero exit status, gclient will | 248 If the command fails, as indicated by a nonzero exit status, gclient will |
249 exit with an exit status of fail_status. If fail_status is None (the | 249 exit with an exit status of fail_status. If fail_status is None (the |
250 default), gclient will raise an Error exception. | 250 default), gclient will raise an Error exception. |
251 """ | 251 """ |
252 logging.debug(command) | 252 logging.debug(command) |
253 if print_messages: | 253 if print_messages: |
(...skipping 16 matching lines...) Expand all Loading... |
270 while in_byte: | 270 while in_byte: |
271 if in_byte != "\r": | 271 if in_byte != "\r": |
272 if print_stdout: | 272 if print_stdout: |
273 if not print_messages: | 273 if not print_messages: |
274 print("\n________ running \'%s\' in \'%s\'" | 274 print("\n________ running \'%s\' in \'%s\'" |
275 % (' '.join(command), in_directory)) | 275 % (' '.join(command), in_directory)) |
276 print_messages = True | 276 print_messages = True |
277 sys.stdout.write(in_byte) | 277 sys.stdout.write(in_byte) |
278 if in_byte != "\n": | 278 if in_byte != "\n": |
279 in_line += in_byte | 279 in_line += in_byte |
280 if in_byte == "\n" and filter: | 280 if in_byte == "\n" and filter_fn: |
281 filter(in_line) | 281 filter_fn(in_line) |
282 in_line = "" | 282 in_line = "" |
283 in_byte = kid.stdout.read(1) | 283 in_byte = kid.stdout.read(1) |
284 rv = kid.wait() | 284 rv = kid.wait() |
285 | 285 |
286 if rv: | 286 if rv: |
287 msg = "failed to run command: %s" % " ".join(command) | 287 msg = "failed to run command: %s" % " ".join(command) |
288 | 288 |
289 if fail_status != None: | 289 if fail_status != None: |
290 print >>sys.stderr, msg | 290 print >>sys.stderr, msg |
291 sys.exit(fail_status) | 291 sys.exit(fail_status) |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 config_path = FindFileUpwards(config_file, path) | 346 config_path = FindFileUpwards(config_file, path) |
347 | 347 |
348 if not config_path: | 348 if not config_path: |
349 print "Can't find", config_file | 349 print "Can't find", config_file |
350 return None | 350 return None |
351 | 351 |
352 env = {} | 352 env = {} |
353 execfile(config_path, env) | 353 execfile(config_path, env) |
354 config_dir = os.path.dirname(config_path) | 354 config_dir = os.path.dirname(config_path) |
355 return config_dir, env['entries'] | 355 return config_dir, env['entries'] |
OLD | NEW |