summaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2001-12-11 04:52:18 (GMT)
committerSteven Knight <knight@baldmt.com>2001-12-11 04:52:18 (GMT)
commitae0bbc2d9e90c35913e217e1c0ceb3fb86b2b1ee (patch)
tree9d2ba271abf1f8872a14916f5c69d31062f0b1a5 /src/engine
parent8daebfdc7cdbded48bfd8621ef22fbfc379aaac8 (diff)
downloadSCons-ae0bbc2d9e90c35913e217e1c0ceb3fb86b2b1ee.zip
SCons-ae0bbc2d9e90c35913e217e1c0ceb3fb86b2b1ee.tar.gz
SCons-ae0bbc2d9e90c35913e217e1c0ceb3fb86b2b1ee.tar.bz2
Delay scanning a node from when we ask for its children to just before we're going to descend to its dependencies.
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/SCons/Node/__init__.py2
-rw-r--r--src/engine/SCons/Taskmaster.py2
-rw-r--r--src/engine/SCons/TaskmasterTests.py27
3 files changed, 27 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index 8b1ef55..d444c3d 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -151,8 +151,6 @@ class Node:
if parent not in self.parents: self.parents.append(parent)
def children(self):
- if not self.scanned:
- self.scan()
return self.sources + self.depends
def get_parents(self):
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py
index 1fb200c..828fecd 100644
--- a/src/engine/SCons/Taskmaster.py
+++ b/src/engine/SCons/Taskmaster.py
@@ -143,6 +143,8 @@ class Taskmaster:
def __init__(self, targets=[], tasker=Task, calc=Calc()):
def out_of_date(node):
+ # Scan the file before fetching its children().
+ node.scan()
return filter(lambda x: x.get_state() != SCons.Node.up_to_date,
node.children())
diff --git a/src/engine/SCons/TaskmasterTests.py b/src/engine/SCons/TaskmasterTests.py
index ca3037d..5e661ee 100644
--- a/src/engine/SCons/TaskmasterTests.py
+++ b/src/engine/SCons/TaskmasterTests.py
@@ -34,9 +34,10 @@ built = None
executed = None
class Node:
- def __init__(self, name, kids = []):
+ def __init__(self, name, kids = [], scans = []):
self.name = name
self.kids = kids
+ self.scans = scans
self.builder = Node.build
self.bsig = None
self.csig = None
@@ -52,6 +53,12 @@ class Node:
def children(self):
return self.kids
+
+ def scan(self):
+ self.kids = self.kids + self.scans
+ for scan in self.scans:
+ scan.parents.append(self)
+ self.scans = []
def get_parents(self):
return self.parents
@@ -210,7 +217,23 @@ class TaskmasterTestCase(unittest.TestCase):
t.executed()
assert not tm.is_blocked()
t = tm.next_task()
- assert tm. next_task() == None
+ assert tm.next_task() == None
+
+
+ n1 = Node("n1")
+ n2 = Node("n2")
+ n3 = Node("n3", [n1], [n2])
+ tm = SCons.Taskmaster.Taskmaster([n3])
+ t = tm.next_task()
+ assert t.get_target() == n1
+ t.executed()
+ t = tm.next_task()
+ assert t.get_target() == n2
+ t.executed()
+ t = tm.next_task()
+ assert t.get_target() == n3
+ t.executed()
+ assert tm.next_task() == None
def test_cycle_detection(self):
n1 = Node("n1")