OLD | NEW |
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 | 10 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 %prog --url http://url/to/patch.diff --patchlevel 1 --root src | 45 %prog --url http://url/to/patch.diff --patchlevel 1 --root src |
46 | 46 |
47 Use svn to store the try job, specify an alternate email address and use a | 47 Use svn to store the try job, specify an alternate email address and use a |
48 premade diff file on the local drive: | 48 premade diff file on the local drive: |
49 %prog --email user@example.com | 49 %prog --email user@example.com |
50 --svn_repo svn://svn.chromium.org/chrome-try/try --diff foo.diff | 50 --svn_repo svn://svn.chromium.org/chrome-try/try --diff foo.diff |
51 | 51 |
52 Running only on a 'mac' slave with revision 123 and clobber first; specify | 52 Running only on a 'mac' slave with revision 123 and clobber first; specify |
53 manually the 3 source files to use for the try job: | 53 manually the 3 source files to use for the try job: |
54 %prog --bot mac --revision 123 --clobber -f src/a.cc -f src/a.h | 54 %prog --bot mac --revision 123 --clobber -f src/a.cc -f src/a.h |
55 -f include/b.h | 55 -f include/b.h""" |
56 | |
57 """ | |
58 | 56 |
59 class InvalidScript(Exception): | 57 class InvalidScript(Exception): |
60 def __str__(self): | 58 def __str__(self): |
61 return self.args[0] + '\n' + HELP_STRING | 59 return self.args[0] + '\n' + HELP_STRING |
62 | 60 |
63 | 61 |
64 class NoTryServerAccess(Exception): | 62 class NoTryServerAccess(Exception): |
65 def __str__(self): | 63 def __str__(self): |
66 return self.args[0] + '\n' + HELP_STRING | 64 return self.args[0] + '\n' + HELP_STRING |
67 | 65 |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 parser.add_option_group(group) | 498 parser.add_option_group(group) |
501 | 499 |
502 options, args = parser.parse_args(argv) | 500 options, args = parser.parse_args(argv) |
503 | 501 |
504 # Switch the default accordingly if there was no default send_patch. | 502 # Switch the default accordingly if there was no default send_patch. |
505 if not options.send_patch: | 503 if not options.send_patch: |
506 if options.port and options.host: | 504 if options.port and options.host: |
507 options.send_patch = _SendChangeHTTP | 505 options.send_patch = _SendChangeHTTP |
508 elif options.svn_repo: | 506 elif options.svn_repo: |
509 options.send_patch = _SendChangeSVN | 507 options.send_patch = _SendChangeSVN |
| 508 else: |
| 509 parser.error('Please specify an access method.') |
510 | 510 |
511 if len(args) == 1 and args[0] == 'help': | 511 if len(args) == 1 and args[0] == 'help': |
512 parser.print_help() | 512 parser.print_help() |
513 if (not options.files and (not options.issue and options.patchset) and | 513 if (not options.files and (not options.issue and options.patchset) and |
514 not options.diff and not options.url): | 514 not options.diff and not options.url): |
515 # TODO(maruel): It should just try the modified files showing up in a | 515 # TODO(maruel): It should just try the modified files showing up in a |
516 # svn status. | 516 # svn status. |
517 print "Nothing to try, changelist is empty." | 517 parser.error('Nothing to try, changelist is empty.') |
518 return 1 | |
519 | 518 |
520 try: | 519 try: |
521 # Convert options.diff into the content of the diff. | 520 # Convert options.diff into the content of the diff. |
522 if options.url: | 521 if options.url: |
523 options.diff = urllib.urlopen(options.url).read() | 522 options.diff = urllib.urlopen(options.url).read() |
524 elif options.diff: | 523 elif options.diff: |
525 options.diff = gcl.ReadFile(options.diff) | 524 options.diff = gcl.ReadFile(options.diff) |
526 # Process the VCS in any case at least to retrieve the email address. | 525 # Process the VCS in any case at least to retrieve the email address. |
527 try: | 526 try: |
528 options.scm = GuessVCS(options) | 527 options.scm = GuessVCS(options) |
529 options.scm.ProcessOptions() | 528 options.scm.ProcessOptions() |
530 except NoTryServerAccess, e: | 529 except NoTryServerAccess, e: |
531 # If we got the diff, we don't care. | 530 # If we got the diff, we don't care. |
532 if not options.diff: | 531 if not options.diff: |
533 # TODO(maruel): Raise what? | 532 # TODO(maruel): Raise what? |
534 raise | 533 raise |
535 | 534 |
536 # Get try slaves from PRESUBMIT.py files if not specified. | 535 # Get try slaves from PRESUBMIT.py files if not specified. |
537 if not options.bot: | 536 if not options.bot: |
538 if options.url: | 537 if options.url: |
539 print('You need to specify which bots to use.') | 538 parser.error('You need to specify which bots to use.') |
540 return 1 | |
541 root_presubmit = gcl.GetCachedFile('PRESUBMIT.py', use_root=True) | 539 root_presubmit = gcl.GetCachedFile('PRESUBMIT.py', use_root=True) |
542 options.bot = presubmit_support.DoGetTrySlaves(options.scm.GetFileNames(), | 540 options.bot = presubmit_support.DoGetTrySlaves(options.scm.GetFileNames(), |
543 options.scm.GetLocalRoot(), | 541 options.scm.GetLocalRoot(), |
544 root_presubmit, | 542 root_presubmit, |
545 False, | 543 False, |
546 sys.stdout) | 544 sys.stdout) |
547 | 545 |
548 if options.name is None: | 546 if options.name is None: |
549 if options.issue: | 547 if options.issue: |
550 options.name = 'Issue %s' % options.issue | 548 options.name = 'Issue %s' % options.issue |
(...skipping 13 matching lines...) Expand all Loading... |
564 except (InvalidScript, NoTryServerAccess), e: | 562 except (InvalidScript, NoTryServerAccess), e: |
565 if swallow_exception: | 563 if swallow_exception: |
566 return 1 | 564 return 1 |
567 print e | 565 print e |
568 return 1 | 566 return 1 |
569 return 0 | 567 return 0 |
570 | 568 |
571 | 569 |
572 if __name__ == "__main__": | 570 if __name__ == "__main__": |
573 sys.exit(TryChange(None, None, False)) | 571 sys.exit(TryChange(None, None, False)) |
OLD | NEW |