summaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-10-08 14:36:33 (GMT)
committerSteven Knight <knight@baldmt.com>2005-10-08 14:36:33 (GMT)
commitee11284e78bb1405e112a594ba36ef4a2c14c481 (patch)
treefb86a117fb409101f5a2ddfef7b81b51bad1dc1c /src/engine
parent2d0d82237c691d0783329ae70ba7b49bbd3649a6 (diff)
downloadSCons-ee11284e78bb1405e112a594ba36ef4a2c14c481.zip
SCons-ee11284e78bb1405e112a594ba36ef4a2c14c481.tar.gz
SCons-ee11284e78bb1405e112a594ba36ef4a2c14c481.tar.bz2
When deleting a variable from an OverrideEnvironment, do not throw an exception if the underlying Environment does not have a variable we deleted.
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/SCons/Environment.py12
-rw-r--r--src/engine/SCons/EnvironmentTests.py19
2 files changed, 29 insertions, 2 deletions
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 0833f5f..08e085d 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -1509,8 +1509,16 @@ class OverrideEnvironment(Base):
try:
del self.__dict__['overrides'][key]
except KeyError:
- pass
- return self.__dict__['__subject'].__delitem__(key)
+ deleted = 0
+ else:
+ deleted = 1
+ try:
+ result = self.__dict__['__subject'].__delitem__(key)
+ except KeyError:
+ if not deleted:
+ raise
+ result = None
+ return result
def get(self, key, default=None):
"""Emulates the get() method of dictionaries."""
try:
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index 55dfb3a..4b222b8 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -2847,6 +2847,25 @@ class OverrideEnvironmentTestCase(unittest.TestCase):
assert env2['YYY'] == 'y', env2['YYY']
assert env3['YYY'] == 'y3', env3['YYY']
+ def test___delitem__(self):
+ """Test deleting variables from an OverrideEnvironment"""
+ env, env2, env3 = self.envs
+
+ del env3['XXX']
+ assert not env.has_key('XXX'), "env has XXX?"
+ assert not env2.has_key('XXX'), "env2 has XXX?"
+ assert not env3.has_key('XXX'), "env3 has XXX?"
+
+ del env3['YYY']
+ assert not env.has_key('YYY'), "env has YYY?"
+ assert not env2.has_key('YYY'), "env2 has YYY?"
+ assert not env3.has_key('YYY'), "env3 has YYY?"
+
+ del env3['ZZZ']
+ assert not env.has_key('ZZZ'), "env has ZZZ?"
+ assert not env2.has_key('ZZZ'), "env2 has ZZZ?"
+ assert not env3.has_key('ZZZ'), "env3 has ZZZ?"
+
def test_get(self):
"""Test the OverrideEnvironment get() method"""
env, env2, env3 = self.envs