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

Side by Side Diff: trychange.py

Issue 515037: Add back automatic fallback to svn access when http access fails. (Closed)
Patch Set: Created 10 years, 12 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 | « 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 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 254
255 url = 'http://%s:%s/send_try_patch' % (options.host, options.port) 255 url = 'http://%s:%s/send_try_patch' % (options.host, options.port)
256 proxies = None 256 proxies = None
257 if options.proxy: 257 if options.proxy:
258 if options.proxy.lower() == 'none': 258 if options.proxy.lower() == 'none':
259 # Effectively disable HTTP_PROXY or Internet settings proxy setup. 259 # Effectively disable HTTP_PROXY or Internet settings proxy setup.
260 proxies = {} 260 proxies = {}
261 else: 261 else:
262 proxies = {'http': options.proxy, 'https': options.proxy} 262 proxies = {'http': options.proxy, 'https': options.proxy}
263 263
264 logging.warning('Sending by HTTP')
264 logging.info(description) 265 logging.info(description)
265 logging.info(url) 266 logging.info(url)
266 logging.info(options.diff) 267 logging.info(options.diff)
267 if options.dry_run: 268 if options.dry_run:
268 return 269 return
269 270
270 try: 271 try:
271 connection = urllib.urlopen(url, urllib.urlencode(values), proxies=proxies) 272 connection = urllib.urlopen(url, urllib.urlencode(values), proxies=proxies)
272 except IOError, e: 273 except IOError, e:
273 logging.warning(str(e)) 274 logging.warning(str(e))
(...skipping 12 matching lines...) Expand all
286 287
287 def _SendChangeSVN(options): 288 def _SendChangeSVN(options):
288 """Send a change to the try server by committing a diff file on a subversion 289 """Send a change to the try server by committing a diff file on a subversion
289 server.""" 290 server."""
290 if not options.svn_repo: 291 if not options.svn_repo:
291 raise NoTryServerAccess('Please use the --svn_repo option to specify the' 292 raise NoTryServerAccess('Please use the --svn_repo option to specify the'
292 ' try server svn repository to connect to.') 293 ' try server svn repository to connect to.')
293 294
294 values = _ParseSendChangeOptions(options) 295 values = _ParseSendChangeOptions(options)
295 description = ''.join("%s=%s\n" % (k,v) for (k,v) in values.iteritems()) 296 description = ''.join("%s=%s\n" % (k,v) for (k,v) in values.iteritems())
297 logging.warning('Sending by SVN')
296 logging.info(description) 298 logging.info(description)
297 logging.info(options.svn_repo) 299 logging.info(options.svn_repo)
298 logging.info(options.diff) 300 logging.info(options.diff)
299 if options.dry_run: 301 if options.dry_run:
300 return 302 return
301 303
302 # Do an empty checkout. 304 # Do an empty checkout.
303 temp_dir = tempfile.mkdtemp() 305 temp_dir = tempfile.mkdtemp()
304 temp_file = tempfile.NamedTemporaryFile() 306 temp_file = tempfile.NamedTemporaryFile()
305 try: 307 try:
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 gclient_utils.CheckCall(["svn", "commit", full_path, '--file', 340 gclient_utils.CheckCall(["svn", "commit", full_path, '--file',
339 temp_file.name], print_error=False) 341 temp_file.name], print_error=False)
340 except gclient_utils.CheckCallError, e: 342 except gclient_utils.CheckCallError, e:
341 raise NoTryServerAccess(' '.join(e.command) + '\nOuput:\n' + 343 raise NoTryServerAccess(' '.join(e.command) + '\nOuput:\n' +
342 e.stdout) 344 e.stdout)
343 finally: 345 finally:
344 temp_file.close() 346 temp_file.close()
345 shutil.rmtree(temp_dir, True) 347 shutil.rmtree(temp_dir, True)
346 348
347 349
350 def PrintSuccess(options):
351 if not options.dry_run:
352 text = 'Patch \'%s\' sent to try server' % options.name
353 if options.bot:
354 text += ': %s' % ', '.join(options.bot)
355 print(text)
356
357
348 def GuessVCS(options, cwd): 358 def GuessVCS(options, cwd):
349 """Helper to guess the version control system. 359 """Helper to guess the version control system.
350 360
351 NOTE: Very similar to upload.GuessVCS. Doesn't look for hg since we don't 361 NOTE: Very similar to upload.GuessVCS. Doesn't look for hg since we don't
352 support it yet. 362 support it yet.
353 363
354 This examines the current directory, guesses which SCM we're using, and 364 This examines the current directory, guesses which SCM we're using, and
355 returns an instance of the appropriate class. Exit with an error if we can't 365 returns an instance of the appropriate class. Exit with an error if we can't
356 figure it out. 366 figure it out.
357 367
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 checkouts = [] 514 checkouts = []
505 checkouts.append(GuessVCS(options, os.getcwd())) 515 checkouts.append(GuessVCS(options, os.getcwd()))
506 checkouts[0].AutomagicalSettings() 516 checkouts[0].AutomagicalSettings()
507 for item in options.sub_rep: 517 for item in options.sub_rep:
508 checkout = GuessVCS(options, item) 518 checkout = GuessVCS(options, item)
509 if checkout.GetLocalRoot() in [c.GetLocalRoot() for c in checkouts]: 519 if checkout.GetLocalRoot() in [c.GetLocalRoot() for c in checkouts]:
510 parser.error('Specified the root %s two times.' % 520 parser.error('Specified the root %s two times.' %
511 checkout.GetLocalRoot()) 521 checkout.GetLocalRoot())
512 checkouts.append(checkout) 522 checkouts.append(checkout)
513 523
524 can_http = options.port and options.host
525 can_svn = options.svn_repo
514 # If there was no transport selected yet, now we must have enough data to 526 # If there was no transport selected yet, now we must have enough data to
515 # select one. 527 # select one.
516 if not options.send_patch: 528 if not options.send_patch and not (can_http or can_svn):
517 if options.port and options.host: 529 parser.error('Please specify an access method.')
518 options.send_patch = _SendChangeHTTP
519 elif options.svn_repo:
520 options.send_patch = _SendChangeSVN
521 else:
522 parser.error('Please specify an access method.')
523 530
524 # Convert options.diff into the content of the diff. 531 # Convert options.diff into the content of the diff.
525 if options.url: 532 if options.url:
526 if options.files: 533 if options.files:
527 parser.error('You cannot specify files and --url at the same time.') 534 parser.error('You cannot specify files and --url at the same time.')
528 options.diff = urllib.urlopen(options.url).read() 535 options.diff = urllib.urlopen(options.url).read()
529 elif options.diff: 536 elif options.diff:
530 if options.files: 537 if options.files:
531 parser.error('You cannot specify files and --diff at the same time.') 538 parser.error('You cannot specify files and --diff at the same time.')
532 options.diff = gclient_utils.FileRead(options.diff, 'rb') 539 options.diff = gclient_utils.FileRead(options.diff, 'rb')
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 else: 575 else:
569 options.name = 'Unnamed' 576 options.name = 'Unnamed'
570 print('Note: use --name NAME to change the try job name.') 577 print('Note: use --name NAME to change the try job name.')
571 if not options.email: 578 if not options.email:
572 parser.error('Using an anonymous checkout. Please use --email or set ' 579 parser.error('Using an anonymous checkout. Please use --email or set '
573 'the TRYBOT_RESULTS_EMAIL_ADDRESS environment variable.') 580 'the TRYBOT_RESULTS_EMAIL_ADDRESS environment variable.')
574 else: 581 else:
575 print('Results will be emailed to: ' + options.email) 582 print('Results will be emailed to: ' + options.email)
576 583
577 # Send the patch. 584 # Send the patch.
578 options.send_patch(options) 585 if options.send_patch:
579 if not options.dry_run: 586 # If forced.
580 text = 'Patch \'%s\' sent to try server' % options.name 587 options.send_patch(options)
581 if options.bot: 588 PrintSuccess(options)
582 text += ': %s' % ', '.join(options.bot) 589 return 0
583 print(text) 590 try:
591 if can_http:
592 _SendChangeHTTP(options)
593 PrintSuccess(options)
594 return 0
595 except NoTryServerAccess:
596 if not can_svn:
597 raise
598 _SendChangeSVN(options)
599 PrintSuccess(options)
600 return 0
584 except (InvalidScript, NoTryServerAccess), e: 601 except (InvalidScript, NoTryServerAccess), e:
585 if swallow_exception: 602 if swallow_exception:
586 return 1 603 return 1
587 print e 604 print e
588 return 1 605 return 1
589 return 0 606 return 0
590 607
591 608
592 if __name__ == "__main__": 609 if __name__ == "__main__":
593 sys.exit(TryChange(None, [], False)) 610 sys.exit(TryChange(None, [], False))
OLDNEW
« no previous file with comments | « tests/trychange_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698