Fix rescanning of files with no implicit deps (Anthony Roach)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 4 Apr 2002 23:40:27 +0000 (23:40 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 4 Apr 2002 23:40:27 +0000 (23:40 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@318 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/engine/SCons/Node/FSTests.py
src/engine/SCons/Node/NodeTests.py
src/engine/SCons/Node/__init__.py

index fe9ea616f92f367d134e09d292b96b502b6842df..0e19cecdc86bb05356bcf84d2b0260678f929d1f 100644 (file)
@@ -388,6 +388,9 @@ class FSTestCase(unittest.TestCase):
         assert f1.implicit[0].path_ == os.path.join("d1", "f1")
         f1.implicit = []
         f1.scan()
+        assert f1.implicit == []
+        f1.implicit = None
+        f1.scan()
         assert f1.implicit[0].path_ == os.path.join("d1", "f1")
 
         # Test building a file whose directory is not there yet...
index ef98a4129d0fd2d8c4df2d57474a77a0ee316ab5..4caebb5d000dabbda848ff5c70cd474ac6189caa 100644 (file)
@@ -386,7 +386,9 @@ class NodeTestCase(unittest.TestCase):
         node = SCons.Node.Node()
         assert node.target_scanner == None, node.target_scanner
         node.target_scanner = ds
+        assert node.implicit is None
         node.scan()
+        assert node.implicit == []
 
     def test_scanner_key(self):
         """Test that a scanner_key() method exists"""
@@ -411,6 +413,7 @@ class NodeTestCase(unittest.TestCase):
 
         node.add_source([n1, n2, n3])
         node.add_dependency([n4, n5, n6])
+        node.implicit = []
         node._add_child(node.implicit, [n7, n8, n9])
         node._add_child(node.implicit, [n10, n11, n12])
         node.add_ignore([n2, n5, n8, n11])
@@ -440,13 +443,14 @@ class NodeTestCase(unittest.TestCase):
 
         node.add_source([n1, n2, n3])
         node.add_dependency([n4, n5, n6])
+        node.implicit = []
         node._add_child(node.implicit, [n7, n8, n9])
         node._add_child(node.implicit, [n10, n11, n12])
         node.add_ignore([n2, n5, n8, n11])
 
         kids = node.all_children()
         for kid in [n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12]:
-            assert kid in kids
+            assert kid in kids, kid
 
     def test_state(self):
         """Test setting and getting the state of a node
index db11e553c1ee27575f7e8837706612105d4145fe..67ad743160bb60477f449a7cf7a62b4c7bedb08d 100644 (file)
@@ -61,7 +61,7 @@ class Node:
     def __init__(self):
         self.sources = []       # source files used to build node
         self.depends = []       # explicit dependencies (from Depends)
-        self.implicit = []      # implicit (scanned) dependencies
+        self.implicit = None    # implicit (scanned) dependencies (None means not scanned yet)
         self.ignore = []        # dependencies to ignore
         self.parents = {}
         self.wkids = None       # Kids yet to walk, when it's an array
@@ -119,7 +119,7 @@ class Node:
             
             def get_parents(node, parent): return node.get_parents()
             def clear_cache(node, parent): 
-                node.implicit = []
+                node.implicit = None
             w = Walker(self, get_parents, ignore_cycle, clear_cache)
             while w.next(): pass
 
@@ -163,15 +163,19 @@ class Node:
     def scan(self):
         """Scan this node's dependents for implicit dependencies."""
         # Don't bother scanning non-derived files, because we don't
-       # care what their dependencies are.
+        # care what their dependencies are.
         # Don't scan again, if we already have scanned.
-        if self.builder and not self.implicit: 
-            for child in self.children(scan=0):
-                self._add_child(self.implicit, child.get_implicit_deps(self.env, child.source_scanner, self))
+        if self.implicit is None:
+            if self.builder:
+                self.implicit = []
+                for child in self.children(scan=0):
+                    self._add_child(self.implicit, child.get_implicit_deps(self.env, child.source_scanner, self))
             
-            # scan this node itself for implicit dependencies
-            self._add_child(self.implicit, self.get_implicit_deps(self.env, self.target_scanner, self))
-
+                # scan this node itself for implicit dependencies
+                self._add_child(self.implicit, self.get_implicit_deps(self.env, self.target_scanner, self))
+            else:
+                self.implicit = []
+    
     def scanner_key(self):
         return None
 
@@ -248,10 +252,13 @@ class Node:
     def all_children(self, scan=1):
         """Return a list of all the node's direct children."""
         #XXX Need to remove duplicates from this
-        if scan and not self.implicit:
+        if scan:
             self.scan()
-        return self.sources + self.depends + self.implicit
-
+        if self.implicit is None:
+            return self.sources + self.depends
+        else:
+            return self.sources + self.depends + self.implicit
+    
     def get_parents(self):
         return self.parents.keys()