diff options
| author | Steven Knight <knight@baldmt.com> | 2003-07-24 08:11:18 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2003-07-24 08:11:18 (GMT) |
| commit | 7a3d5b8e06e44fee43fc78d7eb72b8d271022c18 (patch) | |
| tree | 9644777ce4b886806bd13ce207e047da336a7b12 /src/engine/SCons/Node | |
| parent | 5d238601a22fa009de4df38e0257c405f9b243db (diff) | |
| download | SCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.zip SCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.tar.gz SCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.tar.bz2 | |
Add a QT tool. (Christoph Wiedemann)
Diffstat (limited to 'src/engine/SCons/Node')
| -rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 38 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 13 |
2 files changed, 47 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index 2d6e0bc..f4d4845 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -630,6 +630,44 @@ class NodeTestCase(unittest.TestCase): assert s.called assert node.implicit == [d], node.implicit + # Check that scanning a node with some stored implicit + # dependencies resets internal attributes appropriately + # if the stored dependencies need recalculation. + class StoredNode(MyNode): + def get_stored_implicit(self): + return ['implicit1', 'implicit2'] + + class NotCurrent: + def current(self, node, sig): + return None + def bsig(self, node): + return 0 + + import SCons.Sig + + save_default_calc = SCons.Sig.default_calc + save_implicit_cache = SCons.Node.implicit_cache + save_implicit_deps_changed = SCons.Node.implicit_deps_changed + save_implicit_deps_unchanged = SCons.Node.implicit_deps_unchanged + SCons.Sig.default_calc = NotCurrent() + SCons.Node.implicit_cache = 1 + SCons.Node.implicit_deps_changed = None + SCons.Node.implicit_deps_unchanged = None + try: + sn = StoredNode("eee") + sn._children = ['fake'] + sn.target_scanner = s + + sn.scan() + + assert sn.implicit == [], sn.implicit + assert not hasattr(sn, '_children'), "unexpected _children attribute" + finally: + SCons.Sig.default_calc = save_default_calc + SCons.Node.implicit_cache = save_implicit_cache + SCons.Node.implicit_deps_changed = save_implicit_deps_changed + SCons.Node.implicit_deps_unchanged = save_implicit_deps_unchanged + def test_scanner_key(self): """Test that a scanner_key() method exists""" assert SCons.Node.Node().scanner_key() == None diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 1a80d5a..66ffe64 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -360,6 +360,7 @@ class Node: return self.implicit = [] self.implicit_dict = {} + self._children_reset() if not self.has_builder(): return @@ -377,6 +378,7 @@ class Node: # and the bsig: self.implicit = [] self.implicit_dict = {} + self._children_reset() self.del_bsig() build_env = self.get_build_env() @@ -594,16 +596,19 @@ class Node: added = 1 c.parents[self] = 1 if added: - try: - delattr(self, '_children') - except AttributeError: - pass + self._children_reset() def add_wkid(self, wkid): """Add a node to the list of kids waiting to be evaluated""" if self.wkids != None: self.wkids.append(wkid) + def _children_reset(self): + try: + delattr(self, '_children') + except AttributeError: + pass + def children(self, scan=1): """Return a list of the node's direct children, minus those that are ignored by this node.""" |
