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

Side by Side Diff: trychange.py

Issue 481006: Allow git-try to try rietveld changes directly. (Closed) Base URL: http://src.chromium.org/svn/trunk/tools/depot_tools/
Patch Set: Fix comments Created 10 years, 11 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 | Annotate | Revision Log
« git-try ('K') | « tests/trychange_unittest.py ('k') | 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 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 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 """Client-side script to send a try job to the try server. It communicates to 5 """Client-side script to send a try job to the try server. It communicates to
6 the try server by either writting to a svn repository or by directly connecting 6 the try server by either writting to a svn repository or by directly connecting
7 to the server by HTTP. 7 to the server by HTTP.
8 """ 8 """
9 9
10 import datetime 10 import datetime
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 except gclient_utils.CheckCallError, e: 386 except gclient_utils.CheckCallError, e:
387 if e.retcode != errno.ENOENT and e.retcode != 128: 387 if e.retcode != errno.ENOENT and e.retcode != 128:
388 # ENOENT == 2 = they don't have git installed. 388 # ENOENT == 2 = they don't have git installed.
389 # 128 = git error code when not in a repo. 389 # 128 = git error code when not in a repo.
390 logging.warn(e.retcode) 390 logging.warn(e.retcode)
391 raise 391 raise
392 raise NoTryServerAccess("Could not guess version control system. " 392 raise NoTryServerAccess("Could not guess version control system. "
393 "Are you in a working copy directory?") 393 "Are you in a working copy directory?")
394 394
395 395
396 def GetMungedDiff(path_diff, diff):
397 # Munge paths to match svn.
398 for i in range(len(diff)):
399 if diff[i].startswith('--- ') or diff[i].startswith('+++ '):
400 new_file = posixpath.join(path_diff, diff[i][4:]).replace('\\', '/')
401 diff[i] = diff[i][0:4] + new_file
402 return diff
403
404
396 def TryChange(argv, 405 def TryChange(argv,
397 file_list, 406 file_list,
398 swallow_exception, 407 swallow_exception,
399 prog=None): 408 prog=None):
400 """ 409 """
401 Args: 410 Args:
402 argv: Arguments and options. 411 argv: Arguments and options.
403 file_list: Default value to pass to --file. 412 file_list: Default value to pass to --file.
404 swallow_exception: Whether we raise or swallow exceptions. 413 swallow_exception: Whether we raise or swallow exceptions.
405 """ 414 """
(...skipping 14 matching lines...) Expand all
420 "variable or EMAIL_ADDRESS to set the email address " 429 "variable or EMAIL_ADDRESS to set the email address "
421 "the try bots report results to [default: %default]") 430 "the try bots report results to [default: %default]")
422 group.add_option("-n", "--name", 431 group.add_option("-n", "--name",
423 help="Descriptive name of the try job") 432 help="Descriptive name of the try job")
424 group.add_option("--issue", type='int', 433 group.add_option("--issue", type='int',
425 help="Update rietveld issue try job status") 434 help="Update rietveld issue try job status")
426 group.add_option("--patchset", type='int', 435 group.add_option("--patchset", type='int',
427 help="Update rietveld issue try job status") 436 help="Update rietveld issue try job status")
428 group.add_option("--dry_run", action='store_true', 437 group.add_option("--dry_run", action='store_true',
429 help="Just prints the diff and quits") 438 help="Just prints the diff and quits")
439 group.add_option("--rietveld_url",
440 help="The code review url.")
430 parser.add_option_group(group) 441 parser.add_option_group(group)
431 442
432 group = optparse.OptionGroup(parser, "Try job options") 443 group = optparse.OptionGroup(parser, "Try job options")
433 group.add_option("-b", "--bot", action="append", 444 group.add_option("-b", "--bot", action="append",
434 help="Only use specifics build slaves, ex: '--bot win' to " 445 help="Only use specifics build slaves, ex: '--bot win' to "
435 "run the try job only on the 'win' slave; see the try " 446 "run the try job only on the 'win' slave; see the try "
436 "server waterfall for the slave's name") 447 "server waterfall for the slave's name")
437 group.add_option("-r", "--revision", 448 group.add_option("-r", "--revision",
438 help="Revision to use for the try job; default: the " 449 help="Revision to use for the try job; default: the "
439 "revision will be determined by the try server; see " 450 "revision will be determined by the try server; see "
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 562
552 # Convert options.diff into the content of the diff. 563 # Convert options.diff into the content of the diff.
553 if options.url: 564 if options.url:
554 if options.files: 565 if options.files:
555 parser.error('You cannot specify files and --url at the same time.') 566 parser.error('You cannot specify files and --url at the same time.')
556 options.diff = urllib.urlopen(options.url).read() 567 options.diff = urllib.urlopen(options.url).read()
557 elif options.diff: 568 elif options.diff:
558 if options.files: 569 if options.files:
559 parser.error('You cannot specify files and --diff at the same time.') 570 parser.error('You cannot specify files and --diff at the same time.')
560 options.diff = gclient_utils.FileRead(options.diff, 'rb') 571 options.diff = gclient_utils.FileRead(options.diff, 'rb')
572 elif options.issue:
573 # Retrieve the patch from rietveld when the diff is not specified.
574 try:
575 import simplejson
576 except ImportError:
577 parser.error('simplejson library is missing, please install.')
578 api_url = 'http://%s/api/%d' % (options.rietveld_url, options.issue)
579 contents = simplejson.loads(urllib.urlopen(api_url).read())
580 diff_url = ('http://%s/download/issue%d_%d.diff' %
Nico 2010/01/10 04:55:49 …then this branch is taken and api_url is http://N
581 (options.rietveld_url, options.issue, contents['patchsets'][-1]))
582 diff = GetMungedDiff('', urllib.urlopen(diff_url).readlines())
Nico 2010/01/10 05:02:44 wait, do i read this right? does this mean that th
583 options.diff = ''.join(diff)
561 else: 584 else:
562 # Use this as the base. 585 # Use this as the base.
563 root = checkouts[0].checkout_root 586 root = checkouts[0].checkout_root
564 diffs = [] 587 diffs = []
565 for checkout in checkouts: 588 for checkout in checkouts:
566 diff = checkout.GenerateDiff().splitlines(True) 589 diff = checkout.GenerateDiff().splitlines(True)
590 path_diff = gclient_utils.PathDifference(root, checkout.checkout_root)
567 # Munge it. 591 # Munge it.
568 path_diff = gclient_utils.PathDifference(root, checkout.checkout_root) 592 diffs.extend(GetMungedDiff(path_diff, diff))
569 for i in range(len(diff)):
570 if diff[i].startswith('--- ') or diff[i].startswith('+++ '):
571 new_file = posixpath.join(path_diff, diff[i][4:]).replace('\\', '/')
572 diff[i] = diff[i][0:4] + new_file
573 diffs.extend(diff)
574 options.diff = ''.join(diffs) 593 options.diff = ''.join(diffs)
575 594
576 if not options.bot: 595 if not options.bot:
577 # Get try slaves from PRESUBMIT.py files if not specified. 596 # Get try slaves from PRESUBMIT.py files if not specified.
578 # Even if the diff comes from options.url, use the local checkout for bot 597 # Even if the diff comes from options.url, use the local checkout for bot
579 # selection. 598 # selection.
580 try: 599 try:
581 import presubmit_support 600 import presubmit_support
582 root_presubmit = checkouts[0].ReadRootFile('PRESUBMIT.py') 601 root_presubmit = checkouts[0].ReadRootFile('PRESUBMIT.py')
583 options.bot = presubmit_support.DoGetTrySlaves( 602 options.bot = presubmit_support.DoGetTrySlaves(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 except (InvalidScript, NoTryServerAccess), e: 642 except (InvalidScript, NoTryServerAccess), e:
624 if swallow_exception: 643 if swallow_exception:
625 return 1 644 return 1
626 print e 645 print e
627 return 1 646 return 1
628 return 0 647 return 0
629 648
630 649
631 if __name__ == "__main__": 650 if __name__ == "__main__":
632 sys.exit(TryChange(None, [], False)) 651 sys.exit(TryChange(None, [], False))
OLDNEW
« git-try ('K') | « tests/trychange_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698