summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorStefan Zimmermann <zimmermann.code@gmail.com>2014-03-31 16:24:42 (GMT)
committerStefan Zimmermann <zimmermann.code@gmail.com>2014-03-31 16:24:42 (GMT)
commitcffcd3c38568d3f82ff83916bbbd1b129373558c (patch)
treeff268c97886e3cc905115185a35405b3fd83348a /src/engine/SCons/Node
parentea1890249923aab9cda388b2d22b566dbb7b8949 (diff)
parentd4f8c6e320484c106446918c37affdddacd5c7a3 (diff)
downloadSCons-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.py5
-rw-r--r--src/engine/SCons/Node/FS.py12
-rw-r--r--src/engine/SCons/Node/FSTests.py7
-rw-r--r--src/engine/SCons/Node/NodeTests.py5
-rw-r--r--src/engine/SCons/Node/PythonTests.py5
-rw-r--r--src/engine/SCons/Node/__init__.py11
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))