[Buildbot-devel] Dynamically updating text displayed in build step status
Brian Warner
warner-buildbot at lothar.com
Wed Apr 19 04:26:55 UTC 2006
[sorry for taking so long to respond.. poor Grig had to remind me several
times about this one]
> From: Grig Gheorghiu <grig at gheorghiu.net>
>
> I've been trying to find ways to dynamically update the text that is
> displayed in the build step status in the HTML Waterfall page.
> ...
> However, I also wanted to be able to display a piece of information
> (such as a version number) that was computed by the slave running that
> build step.
> def getText(self, cmd, results):
> text = self.describe(True)
> for elem in text:
> if re.search("version", elem):
> return text
> if results == WARNINGS:
> text += ["warnings"]
> if results == FAILURE:
> text += ["failed"]
> if self.version:
> text += ["version=" + self.version]
> return text
The problem here is that self.describe() is returning a list of strings, but
it isn't expecting anyone to mutate it. When you do 'text += ["warnings"]',
you're actually changing the class-wide value, which is why you see multiple
copies of the same text showing up later. (python expands 'l1 += l2' into
'l1.extend(l2)', which modifies l1 in place).
Instead, try something like this:
def getText(self, cmd, results):
text = self.describe(True)
if results == WARNINGS:
text = text + ["warnings"]
if results == FAILURE:
text = text + ["failed"]
if self.version:
text = text + ["version=" + self.version]
return text
Each one of those 'text = text + []' statements will create a brand-new list,
so the original description is left unmodified.
> Question: am I on the right track here, or am I needlessly complicating
> my life?
This seems like a perfectly reasonable way to change the text based upon the
results of the step. You just ran into a slightly subtle python gotcha :).
cheers,
-Brian
More information about the devel
mailing list