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

Side by Side Diff: scm.py

Issue 437015: Add an automatic retry on some svn commands. (Closed)
Patch Set: Now working! Created 11 years, 1 month 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 (c) 2006-2009 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """SCM-specific utility classes.""" 5 """SCM-specific utility classes."""
6 6
7 import os 7 import os
8 import re 8 import re
9 import subprocess 9 import subprocess
10 import sys 10 import sys
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 # args[0] must be a supported command. This will blow up if it's something 159 # args[0] must be a supported command. This will blow up if it's something
160 # else, which is good. Note that the patterns are only effective when 160 # else, which is good. Note that the patterns are only effective when
161 # these commands are used in their ordinary forms, the patterns are invalid 161 # these commands are used in their ordinary forms, the patterns are invalid
162 # for "svn status --show-updates", for example. 162 # for "svn status --show-updates", for example.
163 pattern = { 163 pattern = {
164 'checkout': update_pattern, 164 'checkout': update_pattern,
165 'status': status_pattern, 165 'status': status_pattern,
166 'update': update_pattern, 166 'update': update_pattern,
167 }[args[0]] 167 }[args[0]]
168
169 compiled_pattern = re.compile(pattern) 168 compiled_pattern = re.compile(pattern)
170 169 # Place an upper limit.
171 def CaptureMatchingLines(line): 170 for i in range(1, 10):
172 match = compiled_pattern.search(line) 171 previous_list_len = len(file_list)
173 if match: 172 failure = []
174 file_list.append(match.group(1)) 173 def CaptureMatchingLines(line):
175 174 match = compiled_pattern.search(line)
176 SVN.RunAndFilterOutput(args, 175 if match:
177 in_directory, 176 file_list.append(match.group(1))
178 options.verbose, 177 if line.startswith('svn: '):
179 True, 178 # We can't raise an exception. We can't alias a variable. Use a cheap
180 CaptureMatchingLines) 179 # way.
180 failure.append(True)
181 try:
182 SVN.RunAndFilterOutput(args,
183 in_directory,
184 options.verbose,
185 True,
186 CaptureMatchingLines)
187 except gclient_utils.Error:
188 # We enforce that some progress has been made.
189 if len(failure) and len(file_list) > previous_list_len:
190 if args[0] == 'checkout':
191 args = args[:]
192 # An aborted checkout is now an update.
193 args[0] = 'update'
194 continue
195 break
181 196
182 @staticmethod 197 @staticmethod
183 def RunAndFilterOutput(args, 198 def RunAndFilterOutput(args,
184 in_directory, 199 in_directory,
185 print_messages, 200 print_messages,
186 print_stdout, 201 print_stdout,
187 filter): 202 filter):
188 """Runs svn checkout, update, status, or diff, optionally outputting 203 """Runs svn checkout, update, status, or diff, optionally outputting
189 to stdout. 204 to stdout.
190 205
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 483
469 while True: 484 while True:
470 key = ReadOneItem('K') 485 key = ReadOneItem('K')
471 if not key: 486 if not key:
472 break 487 break
473 value = ReadOneItem('V') 488 value = ReadOneItem('V')
474 if not value: 489 if not value:
475 break 490 break
476 values[key] = value 491 values[key] = value
477 return values 492 return values
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