diff --git a/buildbot/slave/commands/base.py b/buildbot/slave/commands/base.py index a509406fa12..445ef37019f 100644 --- a/buildbot/slave/commands/base.py +++ b/buildbot/slave/commands/base.py @@ -1,6 +1,6 @@ # -*- test-case-name: buildbot.test.test_slavecommand -*- -import os, signal, types, time, re +import os, signal, types, time, re, traceback from stat import ST_CTIME, ST_MTIME, ST_SIZE from collections import deque @@ -390,6 +390,9 @@ def start(self): except: log.msg("error in ShellCommand._startCommand") log.err() + self._addToBuffers('stderr', "error in ShellCommand._startCommand\n") + self._addToBuffers('stderr', traceback.format_exc()) + self._sendBuffers() # pretend it was a shell error self.deferred.errback(AbandonChain(-1)) return self.deferred diff --git a/buildbot/test/unit/test_slave_commands_base.py b/buildbot/test/unit/test_slave_commands_base.py index 29a720f0237..4f7f631ae10 100644 --- a/buildbot/test/unit/test_slave_commands_base.py +++ b/buildbot/test/unit/test_slave_commands_base.py @@ -162,6 +162,14 @@ def testBadCommand(self): def check(err): self.flushLoggedErrors() err.trap(AbandonChain) + stderr = [] + # Here we're checking that the exception starting up the command + # actually gets propogated back to the master. + for u in b.updates: + if 'stderr' in u: + stderr.append(u['stderr']) + stderr = "".join(stderr) + self.failUnless("TypeError" in stderr, stderr) d.addBoth(check) return d