diff options
author | Steven Knight <knight@baldmt.com> | 2001-10-26 17:12:27 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2001-10-26 17:12:27 (GMT) |
commit | 72bf1332c237068b5a3fac1bb5342530237f36f0 (patch) | |
tree | 7784d77922fec9c64fdaccb0039099af25b6d3c9 /src/engine/SCons/Taskmaster.py | |
parent | 123be6df3fe113bad181c0c93aab4ee58b26e91f (diff) | |
download | SCons-72bf1332c237068b5a3fac1bb5342530237f36f0.zip SCons-72bf1332c237068b5a3fac1bb5342530237f36f0.tar.gz SCons-72bf1332c237068b5a3fac1bb5342530237f36f0.tar.bz2 |
Make up-to-date messages get printed out in the correct order Mark II
Diffstat (limited to 'src/engine/SCons/Taskmaster.py')
-rw-r--r-- | src/engine/SCons/Taskmaster.py | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index 9e8e105..0b96999 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -45,7 +45,8 @@ class Task: self.top = top def execute(self): - self.target.build() + if not self.target.get_state() == SCons.Node.up_to_date: + self.target.build() def get_target(self): return self.target @@ -56,13 +57,11 @@ class Task: def set_state(self, state): self.target.set_state(state) - def up_to_date(self): - self.set_state(SCons.Node.up_to_date) - def executed(self): - self.set_state(SCons.Node.executed) - self.tm.add_pending(self.target) - self.target.set_signature(self.sig) + if self.target.get_state() == SCons.Node.executing: + self.set_state(SCons.Node.executed) + self.tm.add_pending(self.target) + self.target.set_signature(self.sig) def failed(self): self.fail_stop() @@ -114,16 +113,15 @@ class Taskmaster: self.walkers = map(SCons.Node.Walker, targets) self.tasker = tasker self.calc = calc - self.targets = targets self.ready = [] self.pending = 0 - + self._find_next_ready_node() def next_task(self): if self.ready: task = self.ready.pop() - task.set_state(SCons.Node.executing) + if not self.ready: self._find_next_ready_node() return task @@ -146,6 +144,10 @@ class Taskmaster: # but mark it as "up to date" so targets won't # wait for it. n.set_state(SCons.Node.up_to_date) + # set the signature for non-derived files + # here so they don't get recalculated over + # and over again: + n.set_signature(self.calc.get_signature(n)) continue task = self.tasker(self, n, self.walkers[0].is_done()) if not n.children_are_executed(): @@ -156,11 +158,13 @@ class Taskmaster: sig = self.calc.get_signature(n) task.set_sig(sig) if self.calc.current(n, sig): - task.up_to_date() + task.set_state(SCons.Node.up_to_date) else: - self.ready.append(task) - return None - + task.set_state(SCons.Node.executing) + + self.ready.append(task) + return + def is_blocked(self): return not self.ready and self.pending @@ -181,9 +185,10 @@ class Taskmaster: sig = self.calc.get_signature(n) task.set_sig(sig) if self.calc.current(n, sig): - task.up_to_date() + task.set_state(SCons.Node.up_to_date) else: - self.ready.append(task) + task.set_state(SCons.Node.executing) + self.ready.append(task) self.pending = self.pending - len(ready) def remove_pending(self, node): |