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

Side by Side Diff: gclient_utils.py

Issue 3300008: Remove kwargs copy, it is not necessary. Remove ordered argument support from popen to simplify it. (Closed)
Patch Set: Created 10 years, 3 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
« no previous file with comments | « no previous file | 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 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 20 matching lines...) Expand all
31 """CheckCall() returned non-0.""" 31 """CheckCall() returned non-0."""
32 def __init__(self, command, cwd, retcode, stdout, stderr=None): 32 def __init__(self, command, cwd, retcode, stdout, stderr=None):
33 OSError.__init__(self, command, cwd, retcode, stdout, stderr) 33 OSError.__init__(self, command, cwd, retcode, stdout, stderr)
34 self.command = command 34 self.command = command
35 self.cwd = cwd 35 self.cwd = cwd
36 self.retcode = retcode 36 self.retcode = retcode
37 self.stdout = stdout 37 self.stdout = stdout
38 self.stderr = stderr 38 self.stderr = stderr
39 39
40 40
41 def Popen(*args, **kwargs): 41 def Popen(args, **kwargs):
42 """Calls subprocess.Popen() with hacks to work around certain behaviors. 42 """Calls subprocess.Popen() with hacks to work around certain behaviors.
43 43
44 Ensure English outpout for svn and make it work reliably on Windows. 44 Ensure English outpout for svn and make it work reliably on Windows.
45 """ 45 """
46 copied = False 46 logging.debug(u'%s, cwd=%s' % (u' '.join(args), kwargs.get('cwd', '')))
47 if not 'env' in kwargs: 47 if not 'env' in kwargs:
48 copied = True
49 kwargs = kwargs.copy()
50 # It's easier to parse the stdout if it is always in English. 48 # It's easier to parse the stdout if it is always in English.
51 kwargs['env'] = os.environ.copy() 49 kwargs['env'] = os.environ.copy()
52 kwargs['env']['LANGUAGE'] = 'en' 50 kwargs['env']['LANGUAGE'] = 'en'
53 if not 'shell' in kwargs: 51 if not 'shell' in kwargs:
54 if not copied:
55 kwargs = kwargs.copy()
56 # *Sigh*: Windows needs shell=True, or else it won't search %PATH% for the 52 # *Sigh*: Windows needs shell=True, or else it won't search %PATH% for the
57 # executable, but shell=True makes subprocess on Linux fail when it's called 53 # executable, but shell=True makes subprocess on Linux fail when it's called
58 # with a list because it only tries to execute the first item in the list. 54 # with a list because it only tries to execute the first item in the list.
59 kwargs['shell'] = (sys.platform=='win32') 55 kwargs['shell'] = (sys.platform=='win32')
60 return subprocess.Popen(*args, **kwargs) 56 return subprocess.Popen(args, **kwargs)
61 57
62 58
63 def CheckCall(command, cwd=None, print_error=True): 59 def CheckCall(command, cwd=None, print_error=True):
64 """Similar subprocess.check_call() but redirects stdout and 60 """Similar subprocess.check_call() but redirects stdout and
65 returns (stdout, stderr). 61 returns (stdout, stderr).
66 62
67 Works on python 2.4 63 Works on python 2.4
68 """ 64 """
69 logging.debug('%s, cwd=%s' % (str(command), str(cwd)))
70 try: 65 try:
71 stderr = None 66 stderr = None
72 if not print_error: 67 if not print_error:
73 stderr = subprocess.PIPE 68 stderr = subprocess.PIPE
74 process = Popen(command, cwd=cwd, stdout=subprocess.PIPE, stderr=stderr) 69 process = Popen(command, cwd=cwd, stdout=subprocess.PIPE, stderr=stderr)
75 std_out, std_err = process.communicate() 70 std_out, std_err = process.communicate()
76 except OSError, e: 71 except OSError, e:
77 raise CheckCallError(command, cwd, e.errno, None) 72 raise CheckCallError(command, cwd, e.errno, None)
78 if process.returncode: 73 if process.returncode:
79 raise CheckCallError(command, cwd, process.returncode, std_out, std_err) 74 raise CheckCallError(command, cwd, process.returncode, std_out, std_err)
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 of the subprocess's output. Each line has the trailing newline 284 of the subprocess's output. Each line has the trailing newline
290 character trimmed. 285 character trimmed.
291 stdout: Can be any bufferable output. 286 stdout: Can be any bufferable output.
292 287
293 stderr is always redirected to stdout. 288 stderr is always redirected to stdout.
294 """ 289 """
295 assert print_stdout or filter_fn 290 assert print_stdout or filter_fn
296 stdout = stdout or sys.stdout 291 stdout = stdout or sys.stdout
297 filter_fn = filter_fn or (lambda x: None) 292 filter_fn = filter_fn or (lambda x: None)
298 assert not 'stderr' in kwargs 293 assert not 'stderr' in kwargs
299 logging.debug(args)
300 kid = Popen(args, bufsize=0, 294 kid = Popen(args, bufsize=0,
301 stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 295 stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
302 **kwargs) 296 **kwargs)
303 297
304 # Do a flush of stdout before we begin reading from the subprocess's stdout 298 # Do a flush of stdout before we begin reading from the subprocess's stdout
305 last_flushed_at = time.time() 299 last_flushed_at = time.time()
306 stdout.flush() 300 stdout.flush()
307 301
308 # Also, we need to forward stdout to prevent weird re-ordering of output. 302 # Also, we need to forward stdout to prevent weird re-ordering of output.
309 # This has to be done on a per byte basis to make sure it is not buffered: 303 # This has to be done on a per byte basis to make sure it is not buffered:
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 if exception: 525 if exception:
532 self.parent.exceptions.append(exception) 526 self.parent.exceptions.append(exception)
533 if self.parent.progress: 527 if self.parent.progress:
534 self.parent.progress.update(1) 528 self.parent.progress.update(1)
535 assert not self.item.name in self.parent.ran 529 assert not self.item.name in self.parent.ran
536 if not self.item.name in self.parent.ran: 530 if not self.item.name in self.parent.ran:
537 self.parent.ran.append(self.item.name) 531 self.parent.ran.append(self.item.name)
538 finally: 532 finally:
539 self.parent.ready_cond.notifyAll() 533 self.parent.ready_cond.notifyAll()
540 self.parent.ready_cond.release() 534 self.parent.ready_cond.release()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698