diff options
author | Gary Oberbrunner <garyo@oberbrunner.com> | 2014-03-01 22:13:14 (GMT) |
---|---|---|
committer | Gary Oberbrunner <garyo@oberbrunner.com> | 2014-03-01 22:13:14 (GMT) |
commit | 0eec585b4ffaad0c11a8d1cff541e9f4a50115ac (patch) | |
tree | 944545bdef1a19b0d6df8c5b080680bf661a0612 /src/engine/SCons | |
parent | 4a44ea1245db25257716fe66ca36c1b719e8b1e4 (diff) | |
parent | 4fea122590f994aa579167058f000c2dd6465b85 (diff) | |
download | SCons-0eec585b4ffaad0c11a8d1cff541e9f4a50115ac.zip SCons-0eec585b4ffaad0c11a8d1cff541e9f4a50115ac.tar.gz SCons-0eec585b4ffaad0c11a8d1cff541e9f4a50115ac.tar.bz2 |
Merge c3cba85 from Dirk Baechle, fix for spurious rebuilds. See b4bc497.
Diffstat (limited to 'src/engine/SCons')
-rw-r--r-- | src/engine/SCons/Node/FS.py | 9 | ||||
-rw-r--r-- | src/engine/SCons/Node/__init__.py | 11 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index ace24aa..219718c 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -2779,7 +2779,7 @@ class File(Base): if not hasattr(self.attributes, 'keep_targetinfo'): # Cache some required values, before releasing # stuff like env, executor and builder... - self.changed() + self.changed(allowcache=True) self.get_contents_sig() self.get_build_env() # Now purge unneeded stuff to free memory... @@ -3035,7 +3035,7 @@ class File(Base): self.scanner_paths = None - def changed(self, node=None): + def changed(self, node=None, allowcache=False): """ Returns if the node is up-to-date with respect to the BuildInfo stored last time it was built. @@ -3043,6 +3043,8 @@ class File(Base): For File nodes this is basically a wrapper around Node.changed(), but we allow the return value to get cached after the reference to the Executor got released in release_target_info(). + + @see: Node.changed() """ if node is None: try: @@ -3051,7 +3053,8 @@ class File(Base): pass has_changed = SCons.Node.Node.changed(self, node) - self._memo['changed'] = has_changed + if allowcache: + self._memo['changed'] = has_changed return has_changed def changed_content(self, target, prev_ni): diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index d6dbf2e..1f62971 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -1049,7 +1049,7 @@ class Node(object): def Decider(self, function): SCons.Util.AddMethod(self, function, 'changed_since_last_build') - def changed(self, node=None): + def changed(self, node=None, allowcache=False): """ Returns if the node is up-to-date with respect to the BuildInfo stored last time it was built. The default behavior is to compare @@ -1062,6 +1062,15 @@ class Node(object): any difference, but we now rely on checking every dependency to make sure that any necessary Node information (for example, the content signature of an #included .h file) is updated. + + The allowcache option was added for supporting the early + release of the executor/builder structures, right after + a File target was built. When set to true, the return + value of this changed method gets cached for File nodes. + Like this, the executor isn't needed any longer for subsequent + calls to changed(). + + @see: FS.File.changed(), FS.File.release_target_info() """ t = 0 if t: Trace('changed(%s [%s], %s)' % (self, classname(self), node)) |