diff options
author | Steven Knight <knight@baldmt.com> | 2004-10-07 15:55:52 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2004-10-07 15:55:52 (GMT) |
commit | 18ae8ff3cf9a3d65e68bde99a50c32c7b810aed7 (patch) | |
tree | 2f0e3e8fd652c7e27517daeb8c70f46b475b2276 /src/engine/SCons/Node/__init__.py | |
parent | a43d1523b0d0ad6b2f8fb3752d5817d7defbc615 (diff) | |
download | SCons-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__.py | 41 |
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) |