diff options
author | Steven Knight <knight@baldmt.com> | 2002-01-15 13:55:17 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-01-15 13:55:17 (GMT) |
commit | 4f1715fd6ff09cd910099cf250cbb5e23ee5ca85 (patch) | |
tree | 579aedbb29f18aac291e26d2f521aafd55d043ea /src | |
parent | f1743c83435f365ca75f7887267cd5773475e6cc (diff) | |
download | SCons-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')
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/engine/SCons/Errors.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/ErrorsTests.py | 4 | ||||
-rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 33 | ||||
-rw-r--r-- | src/engine/SCons/Node/__init__.py | 11 | ||||
-rw-r--r-- | src/engine/SCons/Script/__init__.py | 2 |
6 files changed, 48 insertions, 9 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 2fa528e..70e30be 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -20,6 +20,9 @@ RELEASE 0.04 - variables and other functions, defined begin and end macros for the example sections, regularized white space separation. + - Function action fixes: None is now a successful return value. + Exceptions are now reported. Document function actions. + RELEASE 0.03 - Fri, 11 Jan 2002 01:09:30 -0600 diff --git a/src/engine/SCons/Errors.py b/src/engine/SCons/Errors.py index 2e8a455..ae2bbb9 100644 --- a/src/engine/SCons/Errors.py +++ b/src/engine/SCons/Errors.py @@ -33,9 +33,9 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" class BuildError(Exception): - def __init__(self, node=None, stat=0, *args): + def __init__(self, node=None, errstr="Unknown error", *args): self.node = node - self.stat = stat + self.errstr = errstr self.args = args class InternalError(Exception): diff --git a/src/engine/SCons/ErrorsTests.py b/src/engine/SCons/ErrorsTests.py index 2612c95..31ad119 100644 --- a/src/engine/SCons/ErrorsTests.py +++ b/src/engine/SCons/ErrorsTests.py @@ -32,10 +32,10 @@ class ErrorsTestCase(unittest.TestCase): def test_BuildError(self): """Test the BuildError exception.""" try: - raise SCons.Errors.BuildError(node = "n", stat = 7) + raise SCons.Errors.BuildError(node = "n", errstr = "foo") except SCons.Errors.BuildError, e: assert e.node == "n" - assert e.stat == 7 + assert e.errstr == "foo" def test_InternalError(self): """Test the InternalError exception.""" 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. diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index 101e5d6..1711f7a 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -75,7 +75,7 @@ class BuildTask(SCons.Taskmaster.Task): try: self.target.build() except BuildError, e: - sys.stderr.write("scons: *** [%s] Error %s\n" % (e.node, str(e.stat))) + sys.stderr.write("scons: *** [%s] %s\n" % (e.node, e.errstr)) raise def executed(self): |