Skip to content

Commit

Permalink
Allow ShellCommand to unset environment variables (fix buildbot#668)
Browse files Browse the repository at this point in the history
  • Loading branch information
Benoit Allard committed Mar 16, 2010
1 parent 2d96d75 commit b68b85d
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
10 changes: 8 additions & 2 deletions buildbot/slave/commands/base.py
Expand Up @@ -307,10 +307,16 @@ def __init__(self, builder, command,
p = re.compile('\${([0-9a-zA-Z_]*)}')
def subst(match):
return self.environ.get(match.group(1), "")
newenv = {}
for key in self.environ.keys():
# setting a key to None will delete it from the slave environment
if key not in environ or environ[key] is not None:
newenv[key] = self.environ[key]
for key in environ.keys():
environ[key] = p.sub(subst, environ[key])
if environ[key] is not None:
newenv[key] = p.sub(subst, environ[key])

self.environ.update(environ)
self.environ = newenv
self.initialStdin = initialStdin
self.keepStdinOpen = keepStdinOpen
self.logEnviron = logEnviron
Expand Down
12 changes: 12 additions & 0 deletions buildbot/test/unit/test_slave_commands_base.py
Expand Up @@ -206,6 +206,18 @@ def check(ign):
d.addCallback(check)
return d

def testUnsetEnvironVar(self):
basedir = "test_slave_commands_base.shellcommand.start"
b = FakeSlaveBuilder(False, basedir)
s = ShellCommand(b, stdoutCommand('hello'), basedir, environ={"PATH":None})

d = s.start()
def check(ign):
headers = "".join([update.values()[0] for update in b.updates if update.keys() == ["header"] ])
self.failUnless("PATH=" not in headers)
d.addCallback(check)
return d

class TestLogging(unittest.TestCase):
def testSendStatus(self):
basedir = "test_slave_commands_base.logging.sendStatus"
Expand Down

0 comments on commit b68b85d

Please sign in to comment.