| OLD | NEW |
| 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 glob | 7 import glob |
| 8 import os | 8 import os |
| 9 import re | 9 import re |
| 10 import shutil | 10 import shutil |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 else: | 214 else: |
| 215 # Fall back on trying a git-svn upstream branch. | 215 # Fall back on trying a git-svn upstream branch. |
| 216 if GIT.IsGitSvn(cwd): | 216 if GIT.IsGitSvn(cwd): |
| 217 upstream_branch = GIT.GetSVNBranch(cwd) | 217 upstream_branch = GIT.GetSVNBranch(cwd) |
| 218 return remote, upstream_branch | 218 return remote, upstream_branch |
| 219 | 219 |
| 220 @staticmethod | 220 @staticmethod |
| 221 def GetUpstream(cwd): | 221 def GetUpstream(cwd): |
| 222 """Gets the current branch's upstream branch.""" | 222 """Gets the current branch's upstream branch.""" |
| 223 remote, upstream_branch = GIT.FetchUpstreamTuple(cwd) | 223 remote, upstream_branch = GIT.FetchUpstreamTuple(cwd) |
| 224 if remote is not '.': | 224 if remote != '.': |
| 225 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote) | 225 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote) |
| 226 return upstream_branch | 226 return upstream_branch |
| 227 | 227 |
| 228 @staticmethod | 228 @staticmethod |
| 229 def GenerateDiff(cwd, branch=None, branch_head='HEAD', full_move=False, | 229 def GenerateDiff(cwd, branch=None, branch_head='HEAD', full_move=False, |
| 230 files=None): | 230 files=None): |
| 231 """Diffs against the upstream branch or optionally another branch. | 231 """Diffs against the upstream branch or optionally another branch. |
| 232 | 232 |
| 233 full_move means that move or copy operations should completely recreate the | 233 full_move means that move or copy operations should completely recreate the |
| 234 files, usually in the prospect to apply the patch for a try job.""" | 234 files, usually in the prospect to apply the patch for a try job.""" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 # else, which is good. Note that the patterns are only effective when | 371 # else, which is good. Note that the patterns are only effective when |
| 372 # these commands are used in their ordinary forms, the patterns are invalid | 372 # these commands are used in their ordinary forms, the patterns are invalid |
| 373 # for "svn status --show-updates", for example. | 373 # for "svn status --show-updates", for example. |
| 374 pattern = { | 374 pattern = { |
| 375 'checkout': update_pattern, | 375 'checkout': update_pattern, |
| 376 'status': status_pattern, | 376 'status': status_pattern, |
| 377 'update': update_pattern, | 377 'update': update_pattern, |
| 378 }[args[0]] | 378 }[args[0]] |
| 379 compiled_pattern = re.compile(pattern) | 379 compiled_pattern = re.compile(pattern) |
| 380 # Place an upper limit. | 380 # Place an upper limit. |
| 381 for i in range(1, 10): | 381 for _ in range(1, 10): |
| 382 previous_list_len = len(file_list) | 382 previous_list_len = len(file_list) |
| 383 failure = [] | 383 failure = [] |
| 384 | 384 |
| 385 def CaptureMatchingLines(line): | 385 def CaptureMatchingLines(line): |
| 386 match = compiled_pattern.search(line) | 386 match = compiled_pattern.search(line) |
| 387 if match: | 387 if match: |
| 388 file_list.append(match.group(1)) | 388 file_list.append(match.group(1)) |
| 389 if line.startswith('svn: '): | 389 if line.startswith('svn: '): |
| 390 failure.append(line) | 390 failure.append(line) |
| 391 | 391 |
| 392 try: | 392 try: |
| 393 SVN.RunAndFilterOutput(args, | 393 SVN.RunAndFilterOutput(args, |
| 394 in_directory, | 394 in_directory, |
| 395 options.verbose, | 395 options.verbose, |
| 396 True, | 396 True, |
| 397 CaptureMatchingLines) | 397 CaptureMatchingLines) |
| 398 except gclient_utils.Error: | 398 except gclient_utils.Error: |
| 399 # We enforce that some progress has been made or HTTP 502. | 399 # We enforce that some progress has been made or HTTP 502. |
| 400 if ([True for f in failure if '502 Bad Gateway' in f] or | 400 if (filter(lambda x: '502 Bad Gateway' in x, failure) or |
| 401 (len(failure) and len(file_list) > previous_list_len)): | 401 (len(failure) and len(file_list) > previous_list_len)): |
| 402 if args[0] == 'checkout': | 402 if args[0] == 'checkout': |
| 403 # An aborted checkout is now an update. | 403 # An aborted checkout is now an update. |
| 404 args = ['update'] + args[1:] | 404 args = ['update'] + args[1:] |
| 405 continue | 405 continue |
| 406 # No progress was made or an unknown error we aren't sure, bail out. | 406 # No progress was made or an unknown error we aren't sure, bail out. |
| 407 raise | 407 raise |
| 408 break | 408 break |
| 409 | 409 |
| 410 @staticmethod | 410 @staticmethod |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 if not cur_dir_repo_root: | 745 if not cur_dir_repo_root: |
| 746 return None | 746 return None |
| 747 | 747 |
| 748 while True: | 748 while True: |
| 749 parent = os.path.dirname(directory) | 749 parent = os.path.dirname(directory) |
| 750 if (SVN.CaptureInfo(parent, print_error=False).get( | 750 if (SVN.CaptureInfo(parent, print_error=False).get( |
| 751 "Repository Root") != cur_dir_repo_root): | 751 "Repository Root") != cur_dir_repo_root): |
| 752 break | 752 break |
| 753 directory = parent | 753 directory = parent |
| 754 return GetCasedPath(directory) | 754 return GetCasedPath(directory) |
| OLD | NEW |