summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node/__init__.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-10-07 15:55:52 (GMT)
committerSteven Knight <knight@baldmt.com>2004-10-07 15:55:52 (GMT)
commit18ae8ff3cf9a3d65e68bde99a50c32c7b810aed7 (patch)
tree2f0e3e8fd652c7e27517daeb8c70f46b475b2276 /src/engine/SCons/Node/__init__.py
parenta43d1523b0d0ad6b2f8fb3752d5817d7defbc615 (diff)
downloadSCons-18ae8ff3cf9a3d65e68bde99a50c32c7b810aed7.zip
SCons-18ae8ff3cf9a3d65e68bde99a50c32c7b810aed7.tar.gz
SCons-18ae8ff3cf9a3d65e68bde99a50c32c7b810aed7.tar.bz2
Clear out dependent-child caches when a node is rebuilt. (Kevin Quick)
Diffstat (limited to 'src/engine/SCons/Node/__init__.py')
-rw-r--r--src/engine/SCons/Node/__init__.py41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index a4e1266..f994c67 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -202,27 +202,38 @@ class Node:
def built(self):
"""Called just after this node is sucessfully built."""
- try:
- new_binfo = self.binfo
- except AttributeError:
- pass
- else:
- self.store_info(new_binfo)
-
- # Clear our scanned included files.
- self.found_includes = {}
- self.includes = None
# Clear the implicit dependency caches of any Nodes
# waiting for this Node to be built.
for parent in self.waiting_parents:
parent.implicit = None
parent.del_binfo()
- self.waiting_parents = []
-
- # The content just changed, delete any cached info
- # so it will get recalculated.
- self.del_cinfo()
+
+ try:
+ new_binfo = self.binfo
+ except AttributeError:
+ # Node arrived here without build info; apparently it
+ # doesn't need it, so don't bother calculating or storing
+ # it.
+ new_binfo = None
+
+ # Reset this Node's cached state since it was just built and
+ # various state has changed.
+ save_state = self.get_state()
+ self.clear()
+ self.set_state(save_state)
+
+ # Had build info, so it should be stored in the signature
+ # cache. However, if the build info included a content
+ # signature then it should be recalculated before being
+ # stored.
+
+ if new_binfo:
+ if hasattr(new_binfo, 'csig'):
+ new_binfo = self.gen_binfo() # sets self.binfo
+ else:
+ self.binfo = new_binfo
+ self.store_info(new_binfo)
def add_to_waiting_parents(self, node):
self.waiting_parents.append(node)