Chromium Code Reviews| Index: gcl.py |
| diff --git a/gcl.py b/gcl.py |
| index 72677596a318ad7010f6bc871de1090b99f6c0c0..abedcbbed44d83124302606e3deceef616256c98 100755 |
| --- a/gcl.py |
| +++ b/gcl.py |
| @@ -133,16 +133,31 @@ def GetCachedFile(filename, max_age=60*60*24*3, use_root=False): |
| url_path = repo_root |
| else: |
| url_path = dir_info["URL"] |
| - content = "" |
| while True: |
| # Look in the repository at the current level for the file. |
| - svn_path = url_path + "/" + filename |
| - content, rc = RunShellWithReturnCode(["svn", "cat", svn_path]) |
| - if not rc: |
| - # Exit the loop if the file was found. Override content. |
| + for _ in range(5): |
| + content = "" |
| + try: |
| + # Take advantage of the fact that svn won't output to stderr in case |
| + # of success but will do in case of failure so don't mind putting |
| + # stderr into content_array. |
| + content_array = [] |
| + svn_path = url_path + "/" + filename |
| + SVN.RunAndFilterOutput(['cat', svn_path, '--non-interactive'], '.', |
| + False, False, content_array.append) |
| + # Exit the loop if the file was found. Override content. |
| + content = '\n'.join(content_array) |
| + break |
| + except gclient_utils.Error, e: |
| + if content_array[0].startswith( |
| + 'svn: Can\'t get username or password'): |
| + ErrorExit('Your svn credentials expired. Please run svn log to ' |
|
nsylvain
2010/08/19 15:47:07
what about svn ls ? Svn log is evil
|
| + 'fix the cached credentials') |
| + if not content_array[0].startswith('svn: File not found:'): |
| + # Try again. |
| + continue |
| + if content: |
| break |
| - # Make sure to mark settings as empty if not found. |
| - content = "" |
| if url_path == repo_root: |
| # Reached the root. Abandoning search. |
| break |
| @@ -192,8 +207,10 @@ def RunShellWithReturnCode(command, print_output=False): |
| # Use a shell for subcommands on Windows to get a PATH search, and because svn |
| # may be a batch file. |
| use_shell = sys.platform.startswith("win") |
| + env = os.environ.copy() |
| + env['LANGUAGE'] = 'en' |
| p = subprocess.Popen(command, stdout=subprocess.PIPE, |
| - stderr=subprocess.STDOUT, shell=use_shell, |
| + stderr=subprocess.STDOUT, shell=use_shell, env=env, |
| universal_newlines=True) |
| if print_output: |
| output_array = [] |