summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-01-15 13:55:17 (GMT)
committerSteven Knight <knight@baldmt.com>2002-01-15 13:55:17 (GMT)
commit4f1715fd6ff09cd910099cf250cbb5e23ee5ca85 (patch)
tree579aedbb29f18aac291e26d2f521aafd55d043ea /src/engine/SCons/Node
parentf1743c83435f365ca75f7887267cd5773475e6cc (diff)
downloadSCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.zip
SCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.tar.gz
SCons-4f1715fd6ff09cd910099cf250cbb5e23ee5ca85.tar.bz2
Document function Actions and fix their return values (None == success, don't ignore failures).
Diffstat (limited to 'src/engine/SCons/Node')
-rw-r--r--src/engine/SCons/Node/NodeTests.py33
-rw-r--r--src/engine/SCons/Node/__init__.py11
2 files changed, 40 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index f55659e..37b9f37 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.py
@@ -47,10 +47,19 @@ class Builder:
def get_contents(self, env, dir):
return 7
+class NoneBuilder(Builder):
+ def execute(self, **kw):
+ apply(Builder.execute, (self,), kw)
+ return None
+
class FailBuilder:
def execute(self, **kw):
return 1
+class ExceptBuilder:
+ def execute(self, **kw):
+ raise SCons.Errors.BuildError
+
class Environment:
def Dictionary(self, *args):
pass
@@ -72,9 +81,21 @@ class NodeTestCase(unittest.TestCase):
else:
raise TestFailed, "did not catch expected BuildError"
+ node = SCons.Node.Node()
+ node.builder_set(ExceptBuilder())
+ node.env_set(Environment())
+ try:
+ node.build()
+ except SCons.Errors.BuildError:
+ pass
+ else:
+ raise TestFailed, "did not catch expected BuildError"
+
def test_build(self):
"""Test building a node
"""
+ global built_it
+
class MyNode(SCons.Node.Node):
def __str__(self):
return self.path
@@ -94,6 +115,18 @@ class NodeTestCase(unittest.TestCase):
assert str(built_target) == "xxx", str(built_target)
assert built_source == ["yyy", "zzz"], built_source
+ built_it = None
+ node = MyNode()
+ node.builder_set(NoneBuilder())
+ node.env_set(Environment())
+ node.path = "qqq"
+ node.sources = ["rrr", "sss"]
+ node.build()
+ assert built_it
+ assert type(built_target) == type(MyNode()), type(built_target)
+ assert str(built_target) == "qqq", str(built_target)
+ assert built_source == ["rrr", "sss"], built_source
+
def test_builder_set(self):
"""Test setting a Node's Builder
"""
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index b81f911..102b532 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -72,10 +72,13 @@ class Node:
"""Actually build the node. Return the status from the build."""
if not self.builder:
return None
- stat = self.builder.execute(env = self.env.Dictionary(),
- target = self, source = self.sources)
- if stat != 0:
- raise BuildError(node = self, stat = stat)
+ try:
+ stat = self.builder.execute(env = self.env.Dictionary(),
+ target = self, source = self.sources)
+ except:
+ raise BuildError(node = self, errstr = "Exception")
+ if stat:
+ raise BuildError(node = self, errstr = "Error %d" % stat)
# If we succesfully build a node, then we need to rescan for
# implicit dependencies, since it might have changed on us.