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

Side by Side Diff: gclient_utils.py

Issue 3420014: Remove cruft from having to do bookeeping of options.stdout. (Closed)
Patch Set: Created 10 years, 3 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 | « gclient_scm.py ('k') | tests/gclient_scm_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 # Copyright 2009 Google Inc. All Rights Reserved. 1 # Copyright 2009 Google Inc. All Rights Reserved.
2 # 2 #
3 # Licensed under the Apache License, Version 2.0 (the "License"); 3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License. 4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at 5 # You may obtain a copy of the License at
6 # 6 #
7 # http://www.apache.org/licenses/LICENSE-2.0 7 # http://www.apache.org/licenses/LICENSE-2.0
8 # 8 #
9 # Unless required by applicable law or agreed to in writing, software 9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS, 10 # distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 return config_dir, env['entries'] 542 return config_dir, env['entries']
543 543
544 544
545 class WorkItem(object): 545 class WorkItem(object):
546 """One work item.""" 546 """One work item."""
547 # A list of string, each being a WorkItem name. 547 # A list of string, each being a WorkItem name.
548 requirements = [] 548 requirements = []
549 # A unique string representing this work item. 549 # A unique string representing this work item.
550 name = None 550 name = None
551 551
552 def run(self, work_queue, options): 552 def run(self, work_queue):
553 """work_queue and options are passed as keyword arguments so they should be 553 """work_queue is passed as keyword argument so it should be
554 the last parameters of the function when you override it.""" 554 the last parameters of the function when you override it."""
555 pass 555 pass
556 556
557 557
558 class ExecutionQueue(object): 558 class ExecutionQueue(object):
559 """Runs a set of WorkItem that have interdependencies and were WorkItem are 559 """Runs a set of WorkItem that have interdependencies and were WorkItem are
560 added as they are processed. 560 added as they are processed.
561 561
562 In gclient's case, Dependencies sometime needs to be run out of order due to 562 In gclient's case, Dependencies sometime needs to be run out of order due to
563 From() keyword. This class manages that all the required dependencies are run 563 From() keyword. This class manages that all the required dependencies are run
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 654
655 def _flush_terminated_threads(self): 655 def _flush_terminated_threads(self):
656 """Flush threads that have terminated.""" 656 """Flush threads that have terminated."""
657 running = self.running 657 running = self.running
658 self.running = [] 658 self.running = []
659 for t in running: 659 for t in running:
660 if t.isAlive(): 660 if t.isAlive():
661 self.running.append(t) 661 self.running.append(t)
662 else: 662 else:
663 t.join() 663 t.join()
664 t.kwargs['options'].stdout.full_flush() 664 sys.stdout.full_flush()
665 if self.progress: 665 if self.progress:
666 self.progress.update(1) 666 self.progress.update(1)
667 assert not t.item.name in self.ran 667 assert not t.item.name in self.ran
668 if not t.item.name in self.ran: 668 if not t.item.name in self.ran:
669 self.ran.append(t.item.name) 669 self.ran.append(t.item.name)
670 670
671 def _run_one_task(self, task_item, args, kwargs): 671 def _run_one_task(self, task_item, args, kwargs):
672 if self.jobs > 1: 672 if self.jobs > 1:
673 # Start the thread. 673 # Start the thread.
674 index = len(self.ran) + len(self.running) + 1 674 index = len(self.ran) + len(self.running) + 1
675 # Copy 'options'. 675 new_thread = self._Worker(task_item, index, args, kwargs)
676 task_kwargs = kwargs.copy()
677 task_kwargs['options'] = copy.copy(task_kwargs['options'])
678 new_thread = self._Worker(task_item, index, args, task_kwargs)
679 self.running.append(new_thread) 676 self.running.append(new_thread)
680 new_thread.start() 677 new_thread.start()
681 else: 678 else:
682 # Run the 'thread' inside the main thread. Don't try to catch any 679 # Run the 'thread' inside the main thread. Don't try to catch any
683 # exception. 680 # exception.
684 task_item.run(*args, **kwargs) 681 task_item.run(*args, **kwargs)
685 self.ran.append(task_item.name) 682 self.ran.append(task_item.name)
686 if self.progress: 683 if self.progress:
687 self.progress.update(1) 684 self.progress.update(1)
688 685
(...skipping 18 matching lines...) Expand all
707 logging.info('Caught exception in thread %s' % self.item.name) 704 logging.info('Caught exception in thread %s' % self.item.name)
708 logging.info(str(sys.exc_info())) 705 logging.info(str(sys.exc_info()))
709 work_queue.exceptions.put(sys.exc_info()) 706 work_queue.exceptions.put(sys.exc_info())
710 logging.info('Task %s done' % self.item.name) 707 logging.info('Task %s done' % self.item.name)
711 708
712 work_queue.ready_cond.acquire() 709 work_queue.ready_cond.acquire()
713 try: 710 try:
714 work_queue.ready_cond.notifyAll() 711 work_queue.ready_cond.notifyAll()
715 finally: 712 finally:
716 work_queue.ready_cond.release() 713 work_queue.ready_cond.release()
OLDNEW
« no previous file with comments | « gclient_scm.py ('k') | tests/gclient_scm_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698