Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # coding: utf-8 | 2 # coding: utf-8 |
| 3 # | 3 # |
| 4 # Copyright 2007 Google Inc. | 4 # Copyright 2007 Google Inc. |
| 5 # | 5 # |
| 6 # Licensed under the Apache License, Version 2.0 (the "License"); | 6 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 7 # you may not use this file except in compliance with the License. | 7 # you may not use this file except in compliance with the License. |
| 8 # You may obtain a copy of the License at | 8 # You may obtain a copy of the License at |
| 9 # | 9 # |
| 10 # http://www.apache.org/licenses/LICENSE-2.0 | 10 # http://www.apache.org/licenses/LICENSE-2.0 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 856 Returns: | 856 Returns: |
| 857 Tuple (stdout, stderr, return code) | 857 Tuple (stdout, stderr, return code) |
| 858 """ | 858 """ |
| 859 LOGGER.info("Running %s", command) | 859 LOGGER.info("Running %s", command) |
| 860 env = env.copy() | 860 env = env.copy() |
| 861 env['LC_MESSAGES'] = 'C' | 861 env['LC_MESSAGES'] = 'C' |
| 862 p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, | 862 p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
| 863 shell=use_shell, universal_newlines=universal_newlines, | 863 shell=use_shell, universal_newlines=universal_newlines, |
| 864 env=env) | 864 env=env) |
| 865 if print_output: | 865 if print_output: |
| 866 # It's very hard to stream both stdout and stderr at the same time | |
| 867 # without the potential for deadlocks. We will hope for the best | |
|
tandrii(chromium)
2015/12/22 14:49:37
indeed, hard. we have a subprocess2 module for thi
| |
| 868 # since this code path is rarely used. | |
| 866 output_array = [] | 869 output_array = [] |
| 867 while True: | 870 while True: |
| 868 line = p.stdout.readline() | 871 line = p.stdout.readline() |
| 869 if not line: | 872 if not line: |
| 870 break | 873 break |
| 871 print line.strip("\n") | 874 print line.strip("\n") |
| 872 output_array.append(line) | 875 output_array.append(line) |
| 873 output = "".join(output_array) | 876 output = "".join(output_array) |
| 877 p.wait() | |
| 878 errout = p.stderr.read() | |
| 879 if errout: | |
| 880 print >> sys.stderr, errout | |
| 874 else: | 881 else: |
| 875 output = p.stdout.read() | 882 output, errout = p.communicate() |
| 876 p.wait() | |
| 877 errout = p.stderr.read() | |
| 878 if print_output and errout: | |
| 879 print >> sys.stderr, errout | |
| 880 p.stdout.close() | 883 p.stdout.close() |
| 881 p.stderr.close() | 884 p.stderr.close() |
| 882 return output, errout, p.returncode | 885 return output, errout, p.returncode |
| 883 | 886 |
| 884 def RunShellWithReturnCode(command, print_output=False, | 887 def RunShellWithReturnCode(command, print_output=False, |
| 885 universal_newlines=True, | 888 universal_newlines=True, |
| 886 env=os.environ): | 889 env=os.environ): |
| 887 """Run a command and return output from stdout and the return code.""" | 890 """Run a command and return output from stdout and the return code.""" |
| 888 out, err, retcode = RunShellWithReturnCodeAndStderr(command, print_output, | 891 out, err, retcode = RunShellWithReturnCodeAndStderr(command, print_output, |
| 889 universal_newlines, env) | 892 universal_newlines, env) |
| (...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1441 extra_args = self.options.revision.split(":", 1) + extra_args | 1444 extra_args = self.options.revision.split(":", 1) + extra_args |
| 1442 else: | 1445 else: |
| 1443 extra_args = [self.options.revision] + extra_args | 1446 extra_args = [self.options.revision] + extra_args |
| 1444 | 1447 |
| 1445 # --no-ext-diff is broken in some versions of Git, so try to work around | 1448 # --no-ext-diff is broken in some versions of Git, so try to work around |
| 1446 # this by overriding the environment (but there is still a problem if the | 1449 # this by overriding the environment (but there is still a problem if the |
| 1447 # git config key "diff.external" is used). | 1450 # git config key "diff.external" is used). |
| 1448 env = os.environ.copy() | 1451 env = os.environ.copy() |
| 1449 if "GIT_EXTERNAL_DIFF" in env: | 1452 if "GIT_EXTERNAL_DIFF" in env: |
| 1450 del env["GIT_EXTERNAL_DIFF"] | 1453 del env["GIT_EXTERNAL_DIFF"] |
| 1454 # 'cat' is a magical git string that disables pagers on all platforms. | |
| 1455 env["GIT_PAGER"] = "cat" | |
| 1456 | |
| 1451 # -M/-C will not print the diff for the deleted file when a file is renamed. | 1457 # -M/-C will not print the diff for the deleted file when a file is renamed. |
| 1452 # This is confusing because the original file will not be shown on the | 1458 # This is confusing because the original file will not be shown on the |
| 1453 # review when a file is renamed. So, get a diff with ONLY deletes, then | 1459 # review when a file is renamed. So, get a diff with ONLY deletes, then |
| 1454 # append a diff (with rename detection), without deletes. | 1460 # append a diff (with rename detection), without deletes. |
| 1455 cmd = [ | 1461 cmd = [ |
| 1456 "git", "diff", "--no-color", "--no-ext-diff", "--full-index", | 1462 "git", "diff", "--no-color", "--no-ext-diff", "--full-index", |
| 1457 "--ignore-submodules", "--src-prefix=a/", "--dst-prefix=b/", | 1463 "--ignore-submodules", "--src-prefix=a/", "--dst-prefix=b/", |
| 1458 ] | 1464 ] |
| 1459 diff = RunShell( | 1465 diff = RunShell( |
| 1460 cmd + ["--no-renames", "--diff-filter=D"] + extra_args, | 1466 cmd + ["--no-renames", "--diff-filter=D"] + extra_args, |
| (...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2549 print | 2555 print |
| 2550 StatusUpdate("Interrupted.") | 2556 StatusUpdate("Interrupted.") |
| 2551 sys.exit(1) | 2557 sys.exit(1) |
| 2552 except auth.AuthenticationError as e: | 2558 except auth.AuthenticationError as e: |
| 2553 print >> sys.stderr, e | 2559 print >> sys.stderr, e |
| 2554 sys.exit(1) | 2560 sys.exit(1) |
| 2555 | 2561 |
| 2556 | 2562 |
| 2557 if __name__ == "__main__": | 2563 if __name__ == "__main__": |
| 2558 main() | 2564 main() |
| OLD | NEW |