diff options
| author | Stefan Zimmermann <zimmermann.code@gmail.com> | 2014-03-31 16:24:42 (GMT) |
|---|---|---|
| committer | Stefan Zimmermann <zimmermann.code@gmail.com> | 2014-03-31 16:24:42 (GMT) |
| commit | cffcd3c38568d3f82ff83916bbbd1b129373558c (patch) | |
| tree | ff268c97886e3cc905115185a35405b3fd83348a /src/engine/SCons/Node | |
| parent | ea1890249923aab9cda388b2d22b566dbb7b8949 (diff) | |
| parent | d4f8c6e320484c106446918c37affdddacd5c7a3 (diff) | |
| download | SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.zip SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.tar.gz SCons-cffcd3c38568d3f82ff83916bbbd1b129373558c.tar.bz2 | |
Merged with [default]
Diffstat (limited to 'src/engine/SCons/Node')
| -rw-r--r-- | src/engine/SCons/Node/AliasTests.py | 5 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FS.py | 12 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FSTests.py | 7 | ||||
| -rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 5 | ||||
| -rw-r--r-- | src/engine/SCons/Node/PythonTests.py | 5 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 11 |
6 files changed, 31 insertions, 14 deletions
diff --git a/src/engine/SCons/Node/AliasTests.py b/src/engine/SCons/Node/AliasTests.py index b0efea7..2d11bdf 100644 --- a/src/engine/SCons/Node/AliasTests.py +++ b/src/engine/SCons/Node/AliasTests.py @@ -26,6 +26,8 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import sys import unittest +import TestUnit + import SCons.Errors import SCons.Node.Alias @@ -120,8 +122,7 @@ if __name__ == "__main__": for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) - if not unittest.TextTestRunner().run(suite).wasSuccessful(): - sys.exit(1) + TestUnit.run(suite) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index 2d155ad..a537ca8 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -2780,7 +2780,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... @@ -3024,7 +3024,8 @@ class File(Base): SCons.Node.Node.built(self) - if not hasattr(self.attributes, 'keep_targetinfo'): + if (not SCons.Node.interactive and + not hasattr(self.attributes, 'keep_targetinfo')): # Ensure that the build infos get computed and cached... self.store_info() # ... then release some more variables. @@ -3035,7 +3036,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 +3044,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 +3054,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/FSTests.py b/src/engine/SCons/Node/FSTests.py index 66803f9..9a8763a 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -31,10 +31,12 @@ import os.path import sys import time import unittest -from TestCmd import TestCmd import shutil import stat +from TestCmd import TestCmd +import TestUnit + import SCons.Errors import SCons.Node.FS import SCons.Util @@ -3755,8 +3757,7 @@ if __name__ == "__main__": for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) - if not unittest.TextTestRunner().run(suite).wasSuccessful(): - sys.exit(1) + TestUnit.run(suite) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index 076ca65..da502b0 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -30,6 +30,8 @@ import re import sys import unittest +import TestUnit + import SCons.Errors import SCons.Node import SCons.Util @@ -1311,8 +1313,7 @@ if __name__ == "__main__": for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) - if not unittest.TextTestRunner().run(suite).wasSuccessful(): - sys.exit(1) + TestUnit.run(suite) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Node/PythonTests.py b/src/engine/SCons/Node/PythonTests.py index 8b08c52..fcdfe77 100644 --- a/src/engine/SCons/Node/PythonTests.py +++ b/src/engine/SCons/Node/PythonTests.py @@ -26,6 +26,8 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import sys import unittest +import TestUnit + import SCons.Errors import SCons.Node.Python @@ -120,8 +122,7 @@ if __name__ == "__main__": for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) - if not unittest.TextTestRunner().run(suite).wasSuccessful(): - sys.exit(1) + TestUnit.run(suite) # Local Variables: # tab-width:4 diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 9b6ab81..f13fd03 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)) |
