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

Side by Side Diff: recipe_modules/bot_update/resources/bot_update.py

Issue 2382653005: Remove git lockfile flakiness on win (bot_update) (Closed)
Patch Set: Remove git lockfile flakiness on win (bot_update) Created 4 years, 2 months 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 | tests/bot_update_coverage_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 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 # TODO(hinoka): Use logging. 6 # TODO(hinoka): Use logging.
7 7
8 import cStringIO 8 import cStringIO
9 import codecs 9 import codecs
10 import copy 10 import copy
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 print 'done' 315 print 'done'
316 316
317 317
318 def gclient_configure(solutions, target_os, target_os_only, git_cache_dir): 318 def gclient_configure(solutions, target_os, target_os_only, git_cache_dir):
319 """Should do the same thing as gclient --spec='...'.""" 319 """Should do the same thing as gclient --spec='...'."""
320 with codecs.open('.gclient', mode='w', encoding='utf-8') as f: 320 with codecs.open('.gclient', mode='w', encoding='utf-8') as f:
321 f.write(get_gclient_spec( 321 f.write(get_gclient_spec(
322 solutions, target_os, target_os_only, git_cache_dir)) 322 solutions, target_os, target_os_only, git_cache_dir))
323 323
324 324
325 def gclient_sync(with_branch_heads, shallow): 325 def gclient_sync(with_branch_heads, shallow, break_repo_locks):
326 # We just need to allocate a filename. 326 # We just need to allocate a filename.
327 fd, gclient_output_file = tempfile.mkstemp(suffix='.json') 327 fd, gclient_output_file = tempfile.mkstemp(suffix='.json')
328 os.close(fd) 328 os.close(fd)
329 gclient_bin = 'gclient.bat' if sys.platform.startswith('win') else 'gclient' 329 gclient_bin = 'gclient.bat' if sys.platform.startswith('win') else 'gclient'
330 cmd = [gclient_bin, 'sync', '--verbose', '--reset', '--force', 330 cmd = [gclient_bin, 'sync', '--verbose', '--reset', '--force',
331 '--ignore_locks', '--output-json', gclient_output_file, 331 '--ignore_locks', '--output-json', gclient_output_file,
332 '--nohooks', '--noprehooks', '--delete_unversioned_trees'] 332 '--nohooks', '--noprehooks', '--delete_unversioned_trees']
333 if with_branch_heads: 333 if with_branch_heads:
334 cmd += ['--with_branch_heads'] 334 cmd += ['--with_branch_heads']
335 if shallow: 335 if shallow:
336 cmd += ['--shallow'] 336 cmd += ['--shallow']
337 if break_repo_locks:
338 cmd += ['--break_repo_locks']
337 339
338 try: 340 try:
339 call(*cmd, tries=1) 341 call(*cmd, tries=1)
340 except SubprocessFailed as e: 342 except SubprocessFailed as e:
341 # Throw a GclientSyncFailed exception so we can catch this independently. 343 # Throw a GclientSyncFailed exception so we can catch this independently.
342 raise GclientSyncFailed(e.message, e.code, e.output) 344 raise GclientSyncFailed(e.message, e.code, e.output)
343 else: 345 else:
344 with open(gclient_output_file) as f: 346 with open(gclient_output_file) as f:
345 return json.load(f) 347 return json.load(f)
346 finally: 348 finally:
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 patch_root, issue, patchset, rietveld_server, gerrit_repo, 720 patch_root, issue, patchset, rietveld_server, gerrit_repo,
719 gerrit_ref, gerrit_rebase_patch_ref, revision_mapping, 721 gerrit_ref, gerrit_rebase_patch_ref, revision_mapping,
720 apply_issue_email_file, apply_issue_key_file, 722 apply_issue_email_file, apply_issue_key_file,
721 apply_issue_oauth2_file, shallow, refs, git_cache_dir, 723 apply_issue_oauth2_file, shallow, refs, git_cache_dir,
722 gerrit_reset): 724 gerrit_reset):
723 # Get a checkout of each solution, without DEPS or hooks. 725 # Get a checkout of each solution, without DEPS or hooks.
724 # Calling git directly because there is no way to run Gclient without 726 # Calling git directly because there is no way to run Gclient without
725 # invoking DEPS. 727 # invoking DEPS.
726 print 'Fetching Git checkout' 728 print 'Fetching Git checkout'
727 729
728 git_ref = git_checkout(solutions, revisions, shallow, refs, git_cache_dir) 730 git_ref = git_checkout(solutions, revisions, shallow, refs, git_cache_dir)
ddoman1 2016/10/25 19:08:55 @katthomas, The following log shows that git chec
729 731
730 print '===Processing patch solutions===' 732 print '===Processing patch solutions==='
731 already_patched = [] 733 already_patched = []
732 patch_root = patch_root or '' 734 patch_root = patch_root or ''
733 applied_gerrit_patch = False 735 applied_gerrit_patch = False
734 print 'Patch root is %r' % patch_root 736 print 'Patch root is %r' % patch_root
735 for solution in solutions: 737 for solution in solutions:
736 print 'Processing solution %r' % solution['name'] 738 print 'Processing solution %r' % solution['name']
737 if (patch_root == solution['name'] or 739 if (patch_root == solution['name'] or
738 solution['name'].startswith(patch_root + '/')): 740 solution['name'].startswith(patch_root + '/')):
739 relative_root = solution['name'][len(patch_root) + 1:] 741 relative_root = solution['name'][len(patch_root) + 1:]
740 target = '/'.join([relative_root, 'DEPS']).lstrip('/') 742 target = '/'.join([relative_root, 'DEPS']).lstrip('/')
741 print ' relative root is %r, target is %r' % (relative_root, target) 743 print ' relative root is %r, target is %r' % (relative_root, target)
742 if issue: 744 if issue:
743 apply_rietveld_issue(issue, patchset, patch_root, rietveld_server, 745 apply_rietveld_issue(issue, patchset, patch_root, rietveld_server,
744 revision_mapping, git_ref, apply_issue_email_file, 746 revision_mapping, git_ref, apply_issue_email_file,
745 apply_issue_key_file, apply_issue_oauth2_file, 747 apply_issue_key_file, apply_issue_oauth2_file,
746 whitelist=[target]) 748 whitelist=[target])
747 already_patched.append(target) 749 already_patched.append(target)
748 elif gerrit_ref: 750 elif gerrit_ref:
749 apply_gerrit_ref(gerrit_repo, gerrit_ref, patch_root, gerrit_reset, 751 apply_gerrit_ref(gerrit_repo, gerrit_ref, patch_root, gerrit_reset,
750 gerrit_rebase_patch_ref) 752 gerrit_rebase_patch_ref)
751 applied_gerrit_patch = True 753 applied_gerrit_patch = True
752 754
753 # Ensure our build/ directory is set up with the correct .gclient file. 755 # Ensure our build/ directory is set up with the correct .gclient file.
754 gclient_configure(solutions, target_os, target_os_only, git_cache_dir) 756 gclient_configure(solutions, target_os, target_os_only, git_cache_dir)
755 757
758 # Windows sometimes has trouble deleting files. This can make git commands
759 # that rely on locks fail.
760 break_repo_locks = True if sys.platform.startswith('win') else False
756 # Let gclient do the DEPS syncing. 761 # Let gclient do the DEPS syncing.
757 # The branch-head refspec is a special case because its possible Chrome 762 # The branch-head refspec is a special case because its possible Chrome
758 # src, which contains the branch-head refspecs, is DEPSed in. 763 # src, which contains the branch-head refspecs, is DEPSed in.
759 gclient_output = gclient_sync(BRANCH_HEADS_REFSPEC in refs, shallow) 764 gclient_output = gclient_sync(BRANCH_HEADS_REFSPEC in refs, shallow,
765 break_repo_locks)
760 766
761 # Now that gclient_sync has finished, we should revert any .DEPS.git so that 767 # Now that gclient_sync has finished, we should revert any .DEPS.git so that
762 # presubmit doesn't complain about it being modified. 768 # presubmit doesn't complain about it being modified.
763 if git('ls-files', '.DEPS.git', cwd=first_sln).strip(): 769 if git('ls-files', '.DEPS.git', cwd=first_sln).strip():
764 git('checkout', 'HEAD', '--', '.DEPS.git', cwd=first_sln) 770 git('checkout', 'HEAD', '--', '.DEPS.git', cwd=first_sln)
765 771
766 # Finally, ensure that all DEPS are pinned to the correct revision. 772 # Finally, ensure that all DEPS are pinned to the correct revision.
767 dir_names = [sln['name'] for sln in solutions] 773 dir_names = [sln['name'] for sln in solutions]
768 ensure_deps_revisions(gclient_output.get('solutions', {}), 774 ensure_deps_revisions(gclient_output.get('solutions', {}),
769 dir_names, revisions) 775 dir_names, revisions)
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 # download patch failure is still an infra problem. 1096 # download patch failure is still an infra problem.
1091 if e.code == 3: 1097 if e.code == 3:
1092 # Patch download problem. 1098 # Patch download problem.
1093 return 87 1099 return 87
1094 # Genuine patch problem. 1100 # Genuine patch problem.
1095 return 88 1101 return 88
1096 1102
1097 1103
1098 if __name__ == '__main__': 1104 if __name__ == '__main__':
1099 sys.exit(main()) 1105 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | tests/bot_update_coverage_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698