OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """\ | 6 """\ |
7 Wrapper script around Rietveld's upload.py that simplifies working with groups | 7 Wrapper script around Rietveld's upload.py that simplifies working with groups |
8 of files. | 8 of files. |
9 """ | 9 """ |
10 | 10 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 except gclient_utils.Error: | 126 except gclient_utils.Error: |
127 return None | 127 return None |
128 if (not os.path.exists(cached_file) or | 128 if (not os.path.exists(cached_file) or |
129 (time.time() - os.stat(cached_file).st_mtime) > max_age): | 129 (time.time() - os.stat(cached_file).st_mtime) > max_age): |
130 dir_info = SVN.CaptureInfo(".") | 130 dir_info = SVN.CaptureInfo(".") |
131 repo_root = dir_info["Repository Root"] | 131 repo_root = dir_info["Repository Root"] |
132 if use_root: | 132 if use_root: |
133 url_path = repo_root | 133 url_path = repo_root |
134 else: | 134 else: |
135 url_path = dir_info["URL"] | 135 url_path = dir_info["URL"] |
136 content = "" | |
137 while True: | 136 while True: |
138 # Look in the repository at the current level for the file. | 137 # Look in the repository at the current level for the file. |
139 svn_path = url_path + "/" + filename | 138 for _ in range(5): |
140 content, rc = RunShellWithReturnCode(["svn", "cat", svn_path]) | 139 content = "" |
141 if not rc: | 140 try: |
142 # Exit the loop if the file was found. Override content. | 141 # Take advantage of the fact that svn won't output to stderr in case |
142 # of success but will do in case of failure so don't mind putting | |
143 # stderr into content_array. | |
144 content_array = [] | |
145 svn_path = url_path + "/" + filename | |
146 SVN.RunAndFilterOutput(['cat', svn_path, '--non-interactive'], '.', | |
147 False, False, content_array.append) | |
148 # Exit the loop if the file was found. Override content. | |
149 content = '\n'.join(content_array) | |
150 break | |
151 except gclient_utils.Error, e: | |
152 if content_array[0].startswith( | |
153 'svn: Can\'t get username or password'): | |
154 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
| |
155 'fix the cached credentials') | |
156 if not content_array[0].startswith('svn: File not found:'): | |
157 # Try again. | |
158 continue | |
159 if content: | |
143 break | 160 break |
144 # Make sure to mark settings as empty if not found. | |
145 content = "" | |
146 if url_path == repo_root: | 161 if url_path == repo_root: |
147 # Reached the root. Abandoning search. | 162 # Reached the root. Abandoning search. |
148 break | 163 break |
149 # Go up one level to try again. | 164 # Go up one level to try again. |
150 url_path = os.path.dirname(url_path) | 165 url_path = os.path.dirname(url_path) |
151 # Write a cached version even if there isn't a file, so we don't try to | 166 # Write a cached version even if there isn't a file, so we don't try to |
152 # fetch it each time. | 167 # fetch it each time. |
153 gclient_utils.FileWrite(cached_file, content) | 168 gclient_utils.FileWrite(cached_file, content) |
154 else: | 169 else: |
155 content = gclient_utils.FileRead(cached_file, 'r') | 170 content = gclient_utils.FileRead(cached_file, 'r') |
(...skipping 29 matching lines...) Expand all Loading... | |
185 def ErrorExit(msg): | 200 def ErrorExit(msg): |
186 print >> sys.stderr, msg | 201 print >> sys.stderr, msg |
187 sys.exit(1) | 202 sys.exit(1) |
188 | 203 |
189 | 204 |
190 def RunShellWithReturnCode(command, print_output=False): | 205 def RunShellWithReturnCode(command, print_output=False): |
191 """Executes a command and returns the output and the return code.""" | 206 """Executes a command and returns the output and the return code.""" |
192 # Use a shell for subcommands on Windows to get a PATH search, and because svn | 207 # Use a shell for subcommands on Windows to get a PATH search, and because svn |
193 # may be a batch file. | 208 # may be a batch file. |
194 use_shell = sys.platform.startswith("win") | 209 use_shell = sys.platform.startswith("win") |
210 env = os.environ.copy() | |
211 env['LANGUAGE'] = 'en' | |
195 p = subprocess.Popen(command, stdout=subprocess.PIPE, | 212 p = subprocess.Popen(command, stdout=subprocess.PIPE, |
196 stderr=subprocess.STDOUT, shell=use_shell, | 213 stderr=subprocess.STDOUT, shell=use_shell, env=env, |
197 universal_newlines=True) | 214 universal_newlines=True) |
198 if print_output: | 215 if print_output: |
199 output_array = [] | 216 output_array = [] |
200 while True: | 217 while True: |
201 line = p.stdout.readline() | 218 line = p.stdout.readline() |
202 if not line: | 219 if not line: |
203 break | 220 break |
204 if print_output: | 221 if print_output: |
205 print line.strip('\n') | 222 print line.strip('\n') |
206 output_array.append(line) | 223 output_array.append(line) |
(...skipping 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1299 if command: | 1316 if command: |
1300 return command(argv[1:]) | 1317 return command(argv[1:]) |
1301 # Unknown command, try to pass that to svn | 1318 # Unknown command, try to pass that to svn |
1302 return CMDpassthru(argv) | 1319 return CMDpassthru(argv) |
1303 except gclient_utils.Error, e: | 1320 except gclient_utils.Error, e: |
1304 print('Got an exception') | 1321 print('Got an exception') |
1305 print(str(e)) | 1322 print(str(e)) |
1306 | 1323 |
1307 if __name__ == "__main__": | 1324 if __name__ == "__main__": |
1308 sys.exit(main(sys.argv[1:])) | 1325 sys.exit(main(sys.argv[1:])) |
OLD | NEW |