1 2008-04-29 Brian Warner <warner@lothar.com>
3 * buildbot/slave/commands.py (SourceBase.doCopy): use 'cp -RPp'
4 instead of 'cp -rp': this fixes freebsd-vs-svn-vs-symlinks, and
5 should work with both POSIX and GNU cp. Thanks to Pete Curry for
7 * buildbot/steps/source.py (Source.__init__): update docstring
9 * buildbot/scripts/sample.cfg: fix comment, thanks to 'ludovic'
10 for the catch. Closes #193.
12 * buildbot/changes/bonsaipoller.py: apply fixes from Ben Hearsum,
14 * buildbot/test/test_bonsaipoller.py: same
16 * buildbot/status/mail.py (MailNotifier): add mode="passing",
17 thanks to 'matisse' for the patch, closes #169.
19 * buildbot/status/tinderbox.py (TinderboxMailNotifier): add
20 useChangeTime= argument, from Ben Hearsum, closes #213.
22 * buildbot/changes/svnpoller.py (SVNPoller.checksvn): fix missing
23 argument, thanks to 'thatch' for the catch.
25 * buildbot/status/tinderbox.py (TinderboxMailNotifier): fix scope
26 of logEncoding, patch by Ben Hearsum. Closes #214.
28 * docs/buildbot.texinfo (IRC Bot): fix typo, patch by Christian
31 2008-04-24 Brian Warner <warner@lothar.com>
33 * setup.py (setup_args): apply patches from zooko: prepare
34 setup.py for optional setuptoolsification
35 (entry_points): zooko's other patches: if setuptools is available,
36 create an executable via 'entry_points', and declare a dependency
39 * bin/buildbot: apply patch from zooko: use /usr/bin/env in shbang
41 * README (REQUIREMENTS): we handle twisted-8.0.1 just fine.
43 2008-04-15 Brian Warner <warner@lothar.com>
45 * buildbot/__init__.py (version): bump to 0.7.7+ while between
47 * docs/buildbot.texinfo: same
49 2008-03-29 Brian Warner <warner@lothar.com>
51 * buildbot/__init__.py (version): Releasing buildbot-0.7.7
52 * docs/buildbot.texinfo: same
54 2008-03-29 Brian Warner <warner@lothar.com>
56 * NEWS: update with all changes since the last release. I left the
57 bugs-fixed section somewhat terse, but there's a link to the Trac
58 page with more details.
61 * buildbot/status/web/waterfall.py (WaterfallStatusResource):
62 accept category= arguments in the query-arg portion of the URL.
63 These behave like the builder= queryargs: if any category=
64 queryargs are present, we'll only show Builders that fit into one
65 of the specified categories. Using multiple category= arguments
66 will show more Builders. Thanks to Jerome Davann (hollowman) for
67 the idea and the patch. Closes #117.
68 * docs/buildbot.texinfo (Buildbot Web Resources): document it
70 * buildbot/changes/svnpoller.py (SVNPoller.create_changes): pass
71 revision as a string, not an int. This fixes a problem in
72 MailNotifier, which expects a string. Thanks to Dan Locks for the
73 patch, and Dustin Mitchell for the test fixups. Closes #208.
74 * buildbot/steps/source.py (Source.commandComplete): treat
75 got_revision as a string too.
76 * buildbot/test/test_svnpoller.py: update test to match
77 * buildbot/test/test_vc.py: same
79 2008-03-27 Brian Warner <warner@lothar.com>
81 * buildbot/scripts/runner.py (doCheckConfig): patch from Ben
82 Hearsum to implement 'buildbot checkconfig': validate that your
83 master.cfg is good without actually touching the buildmaster.
85 * buildbot/scripts/checkconfig.py: same
86 * docs/buildbot.texinfo (Testing the Config File): document it
88 2008-03-22 Brian Warner <warner@lothar.com>
90 * buildbot/test/test_vc.py (Mercurial.serveHTTP): another attempt
91 to make Mercurial.testCheckoutHTTP not fail on heavily loaded
92 machines: avoid overlapping poll() calls.
94 * NEWS: preliminary list of changes for the upcoming release.
95 Needs editing and explanations.
97 * buildbot/status/web/base.py (make_stop_form): add a label=
98 argument so that the button says "Stop Builds" or "Stop Build" as
99 appropriate. It used to say "Stop Builder", which was wrong.
100 * buildbot/status/web/baseweb.py (OneLinePerBuild.body): same
101 (OneBoxPerBuilder.body): same
103 * buildbot/process/builder.py (Builder): use self.old_building to
104 track Builds from a previous version of this Builder and are still
105 running. This makes it possible for IBuilderControl to get at
106 them, allowing the "Stop Build" button to work after a
107 Builder-replacing reconfig. Closes #22.
108 (Builder.consumeTheSoulOfYourPredecessor): grab weakrefs from the
109 old Builder's self.building attribute, instead of strongrefs,
110 since there's no good place to explicitly forget about them.
111 (Builder.getBuild): factor this out of BuilderControl
113 * buildbot/process/buildstep.py (LogLineObserver.setMaxLineLength):
114 new method to override the default 16KiB line length. Lines that
115 are longer than this will cause the rest of the log file to be
116 ignored. Thanks to Greg Ward for the patch. Closes #201.
117 * buildbot/test/test_buildstep.py: new tests for log observers
118 * docs/buildbot.texinfo (Adding LogObservers): document it
120 * buildbot/slave/commands.py (ShellCommand): record more
121 information in the 'header' section: how much we write into stdin,
122 do we close stdin, are we using a PTY. There are lingering
123 problems with PTYs and with closing stdin (see #198 and #158).
124 This doesn't fix those problems, but it should provide more
125 information to developers.
127 * buildbot/status/client.py: hush pyflakes, log.msg vs log
128 * buildbot/status/mail.py: same
130 * buildbot/locks.py (debuglog): hush pyflakes
132 * buildbot/steps/source.py (SVN.__init__): fix pyflakes: it
133 doesn't like a variable named 'warnings' that shadows the import
135 * buildbot/test/test_web.py: fix some pyflakes warnings, caused by
136 having a variable name shadow a top-level import
138 * buildbot/test/test_run.py (Disconnect.testBuild2): fix old
139 cut-and-paste typo that was causing us to run the wrong callback
141 * Makefile (pyflakes): sort+uniqify, since newer pyflakes isn't
142 smart enough to do this on its own
143 * buildbot/test/runutils.py (myGetProcessOutputAndValue): move this
144 method out from test_vc.py, hush pyflakes complaints
146 * buildbot/test/test_vc.py (Mercurial.serveHTTP): wait for the 'hg
147 serve' command to be ready, by polling with twisted.web's
148 client.getPage . Unfortunately mercurial doesn't flush its stdout
149 at startup, so we can't just wait for the 'listening at..' line to
150 be printed. This should fix the sporadic "connection refused" test
151 failures I've seen on the metabuildbot when the buildslave is
152 overloaded and 'hg serve' takes a while to start up.
154 * buildbot/steps/python_twisted.py (TrialTestCaseCounter): modify
155 regexp to count "Doctest:" lines as well as normal tests. Thanks to
156 Martin Geisler for the patch. Closes #196.
158 2008-03-20 Brian Warner <warner@lothar.com>
160 * buildbot/status/web/waterfall.py (CurrentBox.formatETA): apply
161 patch from TedMielczarek to display hours/minutes/seconds in the
162 ETA display. Thanks Ted! Also make 'next build starts in' box use
163 the same format. Closes #95.
165 * buildbot/process/buildstep.py (render_properties): more cleanup:
166 rename 'render' to 'render_properties'.
167 * buildbot/steps/shell.py: same
168 (ShellCommand._interpolateProperties): tolerate None in the value,
169 clean up the isinstance checks, stop using the 'types' module
171 * buildbot/steps/transfer.py (FileUpload.start): same, other cleanups
173 * buildbot/steps/shell.py (render): oops, remove redundant
174 definition that probably crept in during a merge conflict
176 * buildbot/scheduler.py (Triggerable): cleanup: wrap docstring
177 * buildbot/steps/trigger.py (Trigger): cleanup: rename schedulers=
178 to schedulerNames=, make updateSourceStamp=True by default, tolerate
179 missing got_revision property (i.e. if updateSourceStamp=True but
180 there was no checkout/update step run), add TODO notes for further
182 * buildbot/test/test_run.py (Triggers): update to match
183 * docs/buildbot.texinfo (Build Dependencies): same
185 * buildbot/slave/commands.py (SVN.doVCFull): merge Dustin's patch:
186 add --no-auth-cache option to svn invocations to avoid caching
187 buildbot's credentials. This also helps when users run a
188 buildslave from their personal account, to keep the buildslave
189 from clobbering their manually-provided svn password. Closes #188.
190 (SVN.doVCUpdate): do it for 'svn update' too.
192 * buildbot/steps/shell.py: merge Greg Ward's patch (via Dustin):
193 refactor WithProperties handling, allow WithProperties in more
195 * buildbot/process/buildstep.py: same
196 * buildbot/steps/transfer.py: same, allow WithProperties in filenames
198 * buildbot/steps/trigger.py: remove unused imports to hush pyflakes
200 * docs/buildbot.texinfo (Build Properties): fix up nodes+menus
202 2008-03-19 Brian Warner <warner@lothar.com>
204 * buildbot/status/web/xmlrpc.py (XMLRPCServer.xmlrpc_getAllBuilders):
205 merge Etienne Pierre's patch (via Dustin): add new XMLRPC methods.
206 (XMLRPCServer.xmlrpc_getStatus): same
207 (XMLRPCServer.xmlrpc_getLastBuilds): same, returns the last N
208 completed builds for a given Builder
210 * buildbot/test/test_config.py (ConfigTest.setUp): merge Dustin's
211 patch: suppress DeprecationWarnings in our tests of deprecated
212 features that aren't scheduled for removal quite yet. In the long
213 run, we'll remove the old features and the tests.
215 * NEWS: add a deprecation schedule
216 * buildbot/changes/freshcvsmail.py: remove this file, it was
217 replaced by mail.FCMaildirSource in the previous release.
219 * buildbot/test/runutils.py: set usePTY=False everywhere we aren't
220 explicitly testing =True, to avoid SIGHUP-based failures that I
221 now see about 10% of the time.
223 * buildbot/scheduler.py (Triggerable): merge Dustin's patch: add
224 "Triggerable" Schedulers, to start builds at specific phases of
225 other builds rather than in response to source code changes or
226 periodic timers. These phases are marked by "Trigger" steps, which
227 are configured with a list of Triggerable schedulers that they
228 should fire. Closes #56.
229 * buildbot/steps/trigger.py (Trigger): buildstep to match
230 * buildbot/test/test_run.py (Triggers): test for it
231 * docs/buildbot.texinfo (Build Dependencies): document it
232 (Triggering Schedulers): same
234 2008-03-18 Brian Warner <warner@lothar.com>
236 * buildbot/interfaces.py (ISourceStamp.getAbsoluteSourceStamp):
237 merge patch from Dustin to add "absolute source stamps": just like
238 normal SourceStamp instances except that they have a .revision
239 attribute copied out of the got_revision property of a build. If
240 the input SourceStamp says .revision=None (i.e. HEAD), and the
241 build is done when the tree is at r1234, then the "absolute"
242 SourceStamp should have .revision=1234 .
243 * buildbot/sourcestamp.py (SourceStamp.getAbsoluteSourceStamp): same
244 * buildbot/status/builder.py (BuildStatus.getSourceStamp): add
247 * buildbot/test/runutils.py (SetTestFlagStep): test utility class,
248 adding 'flags' that can be set by specific buildsteps. This makes
249 it easier to write tests that detect whether certain buildsteps
250 have been reached or not. Patch by Dustin Mitchell.
251 * buildbot/test/test_run.py (TestFlag.testTestFlag): test for it.
253 * buildbot/buildslave.py (BuildSlave.__repr__): protect against
254 .botmaster being empty, to allow pretty-printing of configuration
255 files before the twisted reactor starts. Patch from Dustin
258 * docs/buildbot.texinfo (Shutdown): make it clear that 'buildbot
259 reconfig' (which uses SIGHUP) doesn't work on windows. Acknowledge
260 the occasional failures in reconfig (and suggest 'buildbot
261 restart' as a fallback). Closes #105.
263 * buildbot/steps/shell.py (ShellCommand._interpolateProperties):
264 apply patch from Albert Hofkamp to allow WithProperties in
265 environment variables and the workdir= argument. Closes #52.
266 * buildbot/test/test_properties.py (Interpolate.testCustomBuildStep):
267 remove this test, it was pretty weird and didn't work with the
268 new _interpolateProperties approach.
270 * buildbot/test/test_vc.py (VCBase.connectSlave): turn off usePTY
271 for all slave commands: I'm seeing 'cp' and 'rm' fail with SIGHUP,
272 probably when we close stdin. This happens on my debian/sid
273 system, but not on older unixes, so I suspect some change in
274 behavior in the kernel or glibc or something similar.
276 2008-02-05 Brian Warner <warner@lothar.com>
278 * buildbot/buildslave.py (BuildSlave._missing_timer_fired): add a
279 To: header to the email message we're composing. Oops. Thanks
280 to Zandr Milewski for the catch.
281 * buildbot/test/test_slaves.py (BuildSlave.test_mail_on_missing):
284 2007-12-31 Brian Warner <warner@lothar.com>
286 * buildbot/test/test_transfer.py (Upload.testLotsOfBlocks): remove
287 the short timeouts, these can cause false test failures on slow
288 systems, and were only needed while developing the recent patch
289 (Download.testLotsOfBlocks): same
291 * buildbot/scripts/reconfig.py (Reconfigurator.run): if we're on
292 windows, make 'buildbot reconfig' emit a warning message (since
293 there's no SIGHUP to be had) rather than just hanging. Addresses
294 #105, but we still need to document this somewhere. Thanks to
295 Ben Hearsum for the patch.
297 * buildbot/slave/commands.py (SlaveFileUploadCommand.start):
298 rewrite the main loop to avoid tail recursion, since Deferreds
299 don't optimize those out. Without this, at the end of the transfer
300 we'd hit a stack depth of about two or three frames per block
301 transferred, and for large transfers this would run into a "stack
302 depth exceeded" error. Closes #106.
303 (SlaveFileDownloadCommand.start): same, for downloads.
304 * buildbot/test/test_transfer.py (Upload.testLotsOfBlocks): test it
305 (Download.testLotsOfBlocks): same
307 2007-12-22 Brian Warner <warner@lothar.com>
309 * buildbot/steps/shell.py (TreeSize): This never worked properly.
310 Fix it. Also, stash the tree size in a build property named
311 'tree-size-kb'. Note that this records size in KiB (1024 bytes),
312 not KB (1000 bytes), because that's what du will give us. This
314 * docs/buildbot.texinfo (TreeSize): document it
315 * buildbot/test/test_steps.py (TreeSize.testTreeSize): test it
317 * buildbot/steps/shell.py (WarningCountingShellCommand): utility
318 subclass which uses a regular expression to count warning messages
319 in the output. This also puts warning messages in a new 'warnings'
320 logfile, sets the 'warnings-count' build property with the total
321 count, and marks the step results as WARNINGS if there are any
322 warnings. Thanks to Roch Gadsdon (rochg) for the patch. Closes
324 (Compile): derive from WarningCountingShellCommand
326 * docs/buildbot.texinfo (Compile): document it
327 * buildbot/test/test_steps.py (Warnings): test it
329 * buildbot/slave/commands.py (ShellCommand._chunkForSend): don't
330 send more than 128kB of stdout/stderr/logfile text in a single PB
331 string, since PB has a hardwired limit of 640kB. This should fix
332 crashes that occur when the test process generates output very
333 very quickly. Patch by chops@demiurgestudios.com, thanks! I
334 haven't been able to reproduce this locally, but the potential bug
335 is clear. This should close #129.
337 2007-12-21 Brian Warner <warner@lothar.com>
339 * buildbot/scripts/startup.py (start): check to see if there's a
340 buildbot.tac before doing anything else. This improves the error
341 message when you do 'buildbot start' in the wrong directory.
343 * buildbot/scripts/logwatcher.py (LogWatcher.start): rewrite to
344 spawn /usr/bin/tail to follow the target's twistd.log . It turns
345 out that OS-X file EOF semantics are different, and the naive
346 read-then-read-again approach I was using doesn't work (the first
347 EOF we hit is sticky). tail gets it right, so rely upon it instead
348 of reimplementing the wheel. This should make 'buildbot start'
349 correctly follow the logfile on OS-X, thus closing #141.
351 2007-12-14 Brian Warner <warner@lothar.com>
353 * buildbot/steps/shell.py (ShellCommand.__init__): stash the
354 RemoteShellCommands args too, so things like 'workdir' and 'env'
355 and 'timeout' are preserved. This ought to fix #150.
356 * buildbot/test/test_steps.py (Steps.testClone): test it
358 2007-12-11 Brian Warner <warner@lothar.com>
360 * buildbot/scripts/startup.py (launch): use twisted.__version__,
361 rather than twisted.version, since the latter didn't appear until
362 Twisted-2.4.0 . This unbreaks 'buildbot start' on older Twisteds.
364 2007-12-08 Brian Warner <warner@lothar.com>
366 * docs/buildbot.texinfo (Git): document the fact that we require
367 Git 1.2.0 or later, and that the one shipped in dapper is too old.
369 * buildbot/scripts/startup.py (launch): twisted-2.5.0 and later
370 doesn't need twisted.scripts._twistw.run; instead, it uses
371 twisted.scripts.twistd.run on all platforms. Closes #53.
373 2007-11-30 Brian Warner <warner@lothar.com>
375 * buildbot/status/builder.py (BuilderStatus): small docs patches
376 from Greg Ward.. thanks!
377 * buildbot/process/base.py (Build): same
379 2007-11-29 Brian Warner <warner@lothar.com>
381 * buildbot/slave/commands.py (Mercurial._maybeFallback): add an
382 _abandonOnFailure call to the fallback, to skip the 'update' step
383 if the checkout fails.
384 (Mercurial._maybeFallback): More fixes: look for error messages
385 generated by every version of hg from 0.7 to the current 0.9.5,
386 including development versions as of rev 92991422a847. Also make
387 sure to return the exit code of non-fallbackable errors so that
388 other steps can attempt a workaround.
390 2007-11-28 Brian Warner <warner@lothar.com>
392 * buildbot/slave/commands.py (Mercurial._maybeFallback): improve
393 hg fallback so that it works when the client hg is new and the
394 server hg is old (the error message is different in this case).
396 2007-11-27 Brian Warner <warner@lothar.com>
398 * buildbot/test/test_p4poller.py: hush pyflakes warning
400 * buildbot/slave/commands.py (Mercurial._maybeFallback): when hg
401 is doing a 'clone' operation, to a remote repository (e.g. over
402 HTTP), and either the server or the client is hg-0.9.1 or older,
403 'hg clone' cannot accept a --rev argument: instead, you have to
404 clone the tip and then update back to the desired revision. Added
405 code to detect this failure mode and fall back to the clone+update
406 scheme. Closes #122 and #103.
407 (ShellCommand.__init__): add a keepStderr= flag to support this
409 * buildbot/test/test_vc.py (VCBase._do_vctest_clobber_2): add a
410 test that does a checkout to a specific version, to exercise the
411 mercurial limitation workaround.
412 (Mercurial.serveHTTP): add code to test hg checkout over HTTP,
413 using mercurial's built-in 'hg serve' command. Because of
414 limitations in hg, this code uses a randomly-selected TCP
415 port (rather than claiming a free one), so every once in a while
416 this test is going to fail because of a port-number collision.
418 * buildbot/test/test_vc.py (GitHelper.capable): skip Git tests if
419 the version of Git installed is older than 1.2.x . Git 1.1.3
420 doesn't accept 'git init' (it wants 'git init-db' instead) and the
421 branch tests fail. I know that Git 1.5.3.6 works. I don't know
422 what the dividing line is.. if someone can figure it out, please
423 update this check. Also, if someone can make buildbot's git
424 support handle older versions, please do that too! Addresses #130.
426 2007-11-21 Brian Warner <warner@lothar.com>
428 * lots: improve Git support, AMAZING patch from Haavard
429 Skinnemoen, complete with unit tests and docs, thanks! Closes #130.
430 * buildbot/scripts/tryclient.py (GitExtractor): add 'try' support
431 * buildbot/slave/commands.py (Git): accept branch and revisions,
432 and use 'git' instead of the 'cogito' wrapper
433 * buildbot/steps/source.py (Git.__init__): same
434 * buildbot/test/test_vc.py (BaseHelper.runCommand): offer control
436 (BaseHelper.do): same
437 (BaseHelper.dovc): same
438 (Git): unit tests for Git support. Wow!
439 * docs/buildbot.texinfo (Git): docs for Git support. Double Wow!
440 * contrib/git_buildbot.py: commit-hook script for git
443 * buildbot/changes/p4poller.py (P4Source._finished): don't let a
444 failure cause us to stop polling. Thanks to John Backstrand for
445 the patch. Closes #135.
446 * buildbot/test/test_p4poller.py (TestP4Poller.testFailedChanges):
448 (TestP4Poller.testFailedDescribe): same
450 * buildbot/status/web/waterfall.py (WaterfallStatusResource.body):
451 fix timezone calculation, we were always emitting DST, even in
452 winter. Thanks to Charles Lepple and John Saxton for the patch.
454 * buildbot/test/test_web.py (Waterfall.test_waterfall._check1): same
457 * lots: a whole batch of patches from Benoit Sigoure, referenced
458 in ticket #138. Thanks!
460 * buildbot/master.py (BuildMaster.loadConfig): builder names that
461 begin with an underscore are now reserved, so prohibit them from
462 appearing in the config file.
463 * NEWS: announce this change.
465 * buildbot/status/web/base.py: add buttons (to one_line_per_build
466 and one_box_per_builder) to force/stop builds on all Builders at
468 * buildbot/status/web/baseweb.py: same
469 (OneBoxPerBuilder.body): add links to the per-Builder page
471 * buildbot/status/web/builder.py: same
473 * buildbot/status/web/builder.py (StatusResourceBuilder.body):
474 factor out force/stop form generation
475 * buildbot/status/web/base.py: same
476 * buildbot/status/web/build.py: same
478 * buildbot/status/web/builder.py (StatusResourceBuilder.force):
479 simplify some 'if' statements
480 (StatusResourceBuilder.build_line): add a 'Stop Build' button next
481 to the 'Force Build' button, so you can start and stop a build
483 (StatusResourceBuilder.force): redirect back to the waterfall,
484 rather than the index page
485 (StatusResourceBuilder.ping): same
486 * buildbot/status/web/build.py (StatusResourceBuild.stop): same
488 * buildbot/slave/bot.py (Bot.remote_setBuilderList): don't
489 consider the 'info' directory as a leftover directory. Patch from
490 Benoit Sigoure, ticket #138.
491 (others): remove trailing whitespace
493 2007-11-01 Brian Warner <warner@lothar.com>
495 * buildbot/status/web/builder.py (StatusResourceBuilder.build_line):
496 if there's no current step, don't try to display its description.
497 Same crash as in #96, this time in the web page. Closes #111.
499 * buildbot/status/web/base.py (OneLineMixin.make_line): tolerate
500 results == None (i.e. when the build hasn't finished yet);
501 previously this code exploded when trying to find a CSS class for
502 that results value. Patch from Greg Ward. Closes #118.
504 * buildbot/status/client.py (RemoteBuildStep.remote_getLogs):
505 IBuildStepStatus.getLogs() returns a list, not a dict. Patch from
506 Fabrice Crestois. Closes #121.
508 2007-10-31 Brian Warner <warner@lothar.com>
510 * buildbot/status/words.py (Contact.emit_status): if there's no
511 current step, don't try to display its description. This should
512 fix the crash when asking the irc bot about builds which are
513 waiting for a build-wide Lock. Closes #96.
515 * buildbot/status/tinderbox.py (TinderboxMailNotifier): add
516 'columnName' argument, from a patch by Ben Hearsum. Closes #120.
518 2007-10-16 Brian Warner <warner@lothar.com>
520 * buildbot/status/web/slaves.py (BuildSlavesResource.body): fix
521 timestamp, I was using %M (minutes) where I meant to be using
522 %b (abbreviated month name). Closes #109.
524 2007-10-13 Brian Warner <warner@lothar.com>
526 * README (COPYING): make it clear that buildbot is distributed under
528 * COPYING: add a copy of the GPLv2 to the source tree
529 * MANIFEST.in: .. and to the source distribution too
531 2007-10-10 Brian Warner <warner@lothar.com>
533 * buildbot/status/builder.py (Status.getURLForThing): update this
534 to match new URL layout, I completely forgot about it. Closes #112.
535 * buildbot/test/test_web.py (GetURL): add unit tests
537 * buildbot/status/web/build.py (BuildsResource.getChild): fix
538 silly typo which prevented the Build page from ever offering
539 control options like 'Stop Build'. Thanks to Aaron Hsieh for the
541 * buildbot/test/test_webparts.py (Webparts._do_page_tests): it'd
544 * buildbot/__init__.py (version): bump to 0.7.6+ while between
546 * docs/buildbot.texinfo: same
548 2007-09-30 Brian Warner <warner@lothar.com>
550 * buildbot/__init__.py (version): Releasing buildbot-0.7.6
551 * docs/buildbot.texinfo: same
553 2007-09-30 Brian Warner <warner@lothar.com>
555 * NEWS: small updates, remove duplicate items from the 0.7.5 notes
556 * setup.py: install all test files from buildbot/test/mail/* . Also
557 update URL to point at buildbot.net
558 * MANIFEST.in: update with new files
560 * buildbot/status/web/baseweb.py (WebStatus.setupSite): ugh, yes
561 auto-create an empty public_html directory, otherwise we get
562 internal server errors instead of 404s.
564 * README: reference buildbot.net, remove CVSToys section (does
565 anyone still use it?)
567 * buildbot/status/web/baseweb.py (WebStatus): emit a useful log
568 message when public_html/ is missing (indicating that you should
569 probably run 'upgrade-master'), and don't auto-create an empty
570 directory in that case.
572 * contrib/darcs_buildbot.py: refactor internals a bit, make it
573 possible to use as an importable module (to make it easier to
574 write some unit tests for it)
576 * buildbot/status/web/baseweb.py (Waterfall.__init__): add a
577 DeprecationWarning for Waterfall, advising users to switch over to
580 * NEWS: update with user-visible changes since the last release
582 * buildbot/status/web/waterfall.py
583 (WaterfallStatusResource.get_reload_time): if the suggest a
584 reload time of less than 15 seconds, give them 15 seconds instead
585 of ignoring their request entirely, because that'd be confusing.
587 * buildbot/steps/source.py (Mercurial.computeSourceRevision): log a
588 warning if we must invoke the last-change-is-most-recent guess
590 * buildbot/status/web/baseweb.py (Waterfall.__init__): if an old
591 Waterfall is running in an upgraded master (which is the usual
592 case for folks who have followed the instructions to run
593 'upgrade-master' but who have not yet resolved all the
594 DeprecationWarnings), prefer the buildbot.css from public_html/
595 rather than the one passed in on the buildbot= argument.
596 Otherwise, the resulting pages don't quite use CSS right..
597 sometimes it works, sometimes it doesn't, and I don't know why.
598 Sites that are using custom CSS will see the default CSS until
599 they modify public_html/buildbot.css to include their
602 * docs/buildbot.texinfo (WebStatus): explain robots.txt a bit more
603 * buildbot/status/web/robots.txt (Disallow): update to cover all
604 dynamically-generated pages
606 * buildbot/status/web/base.py (map_branches): when we see 'trunk',
607 include both 'trunk' and None in the output list, since some VC
608 systems (SVN, frequently) refer to trunk as 'trunk'.
610 * buildbot/status/web/waterfall.py (WaterfallStatusResource):
611 point the 'welcome' link explicitly at index.html, rather than
612 '.', so that old Waterfall users can reach it and discover all the
615 * buildbot/status/web/base.py (OneLineMixin.make_line): add the
616 build's text to the end of the line, without a CSS class so it
619 * buildbot/interfaces.py (IStatus.generateFinishedBuilds): add a
620 'max_search=' argument, to limit the number of builds that are
621 examined while trying to find ones that match the other criteria.
622 This helps to limit the work we do, since otherwise we might have
623 to trawl through all history.
624 (IBuilderStatus.generateFinishedBuilds): same
625 * buildbot/status/builder.py (Status.generateFinishedBuilds): same
626 (BuilderStatus.generateFinishedBuilds): same
628 * buildbot/status/web/base.py (OneLineMixin.make_line): stringify
629 our got_revision before checking its length: SVN (at least) still
630 reports numeric values for this.
631 * buildbot/status/web/build.py (StatusResourceBuild.body): same
632 * buildbot/status/web/xmlrpc.py
633 (XMLRPCServer.xmlrpc_getAllBuildsInInterval): same, also stop
634 serving a completely fake revision
636 * buildbot/scripts/runner.py (Maker.check_master_cfg): prepend
637 basedir to sys.path, to mimic what a real buildmaster would have
638 access to, since it is common for master.cfg to import helper
639 classes from .py files in the buildmaster directory, and we want
640 config-file checking to accomodate this.
642 * buildbot/status/web/base.py (map_branches): when referring to
643 branches through WebStatus (i.e. by appending ?branch=FOO query
644 arguments to the URL), make "trunk" mean trunk, by mapping it to
645 None before passing it to generateFinishedBuilds() and the like.
646 * buildbot/status/web/baseweb.py (OneLinePerBuild.body): same
647 (OneBoxPerBuilder.body): same, also improve display of branches in
649 * buildbot/status/web/waterfall.py (BuildTopBox.getBox): same
650 (WaterfallStatusResource.buildGrid): same. Note that this filters
651 Changes as well as Builds.
652 * docs/buildbot.texinfo (Buildbot Web Resources): remove the
653 caveat about trunk branches, now that it's fixed
655 * buildbot/status/web/base.py (OneLineMixin): refactor, move this
656 from builder.py, use it on the Builder page too
658 * buildbot/status/web/builder.py (StatusResourceBuilder): same
659 * buildbot/status/web/baseweb.py (OneLinePerBuild): display branch
660 names, add some CSS classes
661 * buildbot/status/web/classic.css (td.box): new class, for
664 * docs/buildbot.texinfo (WebStatus): update docs
666 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): remove
667 the trailing "M" indicator that tells us this is a modified file.
668 This should help with mode="update" builds that modify files
669 in-place. Thanks to "Oz" (chris at santacruzgames.com) for the
672 * buildbot/scripts/runner.py (upgradeMaster): improvements: write
673 new copies of files (to .new) when those files already exist,
674 check the master.cfg file for errors (and give DeprecationWarnings
675 a chance to be displayed).
676 * buildbot/test/test_runner.py: add more tests
677 * docs/buildbot.texinfo (Upgrading an Existing Buildmaster): docs
679 2007-09-29 Brian Warner <warner@lothar.com>
681 * buildbot/steps/source.py (Mercurial.computeSourceRevision): take
682 the revision id from the last change in our list, since that's the
683 best we can do without knowing the full ancestry graph. Closes #103.
685 * buildbot/scripts/sample.cfg: use buildstep instances in
686 f.addStep, to demonstrate the (correct) modern usage.
687 * docs/examples/hello.cfg: bring this up to date. Closes #79.
688 * docs/examples/twisted_master.cfg: add a big warning about how
690 * docs/examples/glib_master.cfg: delete this one entirely, it is
691 ancient and not a very useful example anyways
693 * buildbot/status/web/base.py (HtmlResource.render): keep track of
694 HTTPChannels, so we can shut them down at reconfig time (when the
695 WebStatus goes away). Closes #102.
696 * buildbot/status/web/baseweb.py (WebStatus.__init__): same
697 (WebStatus.registerChannel): same
698 (WebStatus.stopService): do .loseConnection() here
700 * buildbot/test/test_webparts.py (Webparts.testPages): reload the
701 WebStatus, make sure all pages are still retrievable. I thought
702 this would exercise a bug, but it turns out that it was firefox
703 caching connections (and continuing to talk to the old WebStatus
704 even though I'd loaded a new one).
705 * buildbot/status/web/baseweb.py (WebStatus): add some comments
706 (WebStatus.__repr__): include id() in the repr
708 * buildbot/status/tinderbox.py (TinderboxMailNotifier): allow
709 this to specify an errorparser. From Ted Mielczarek and the
710 mozilla crew. Closes #94.
712 * buildbot/changes/bonsaipoller.py (BonsaiParser): "Make
713 bonsaipoller ignore funkyness in xml output for empy log
714 messages", from Axel Hecht. Closes #90.
715 * buildbot/test/test_bonsaipoller.py
716 (TestBonsaiPoller.testMergeEmptyLogMsg): same
718 * buildbot/status/tinderbox.py (TinderboxMailNotifier.buildStarted):
719 respect 'builders' arg, from Ben Hearsum. Closes #89.
721 * buildbot/scripts/runner.py (stop): increase the timeout from 5
722 seconds to 10, to give heavily loaded machines a better chance to
723 finish shutting down. Addresses (partially) #68.
724 * buildbot/scripts/logwatcher.py (LogWatcher.TIMEOUT_DELAY): same,
726 * buildbot/scripts/reconfig.py (Reconfigurator.run): same
727 * buildbot/scripts/startup.py (Follower._failure): update message
729 * buildbot/changes/bonsaipoller.py: apply changes from the Mozilla
730 team, to fix some bugs and avoid the use of blocking urlopen().
732 * buildbot/test/test_bonsaipoller.py: same
734 2007-09-28 Brian Warner <warner@lothar.com>
736 * buildbot/buildslave.py (BuildSlave): add notify_on_missing=
737 argument, to send email about buildslaves which are disconnected
738 for more than an hour. Closes #64.
739 * buildbot/test/test_slaves.py (BuildSlave.test_mail_on_missing):
741 * docs/buildbot.texinfo (When Buildslaves Go Missing): document it
742 (MailNotifier): add docs for this too
745 * buildbot/status/web/baseweb.py (OneBoxPerBuilder): make this page
746 respect branch= queryargs, by restricting the builds displayed to
747 those matching the given branch names
748 * buildbot/status/web/waterfall.py (BuildTopBox): same
750 * buildbot/test/test_web.py (WaterfallSteps.test_urls.FakeRequest):
751 fix a test failure by adding .prepath to this fake object
753 * buildbot/status/web/*: big set of changes to WebStatus, cleaning
754 up generation of relative URLs. With luck, this should play with
755 reverse proxies much better now.
756 * buildbot/test/test_webparts.py: new test for most of the subpages
757 * buildbot/test/test_web.py (base_config): add enough of a config
758 to exercise more Waterfall code
760 2007-09-27 Brian Warner <warner@lothar.com>
762 * buildbot/status/web/build.py (StatusResourceBuild.body): use a
763 relative URL to the buildbot welcome page, rather than
765 * buildbot/status/web/builder.py (StatusResourceBuilder.body): same
767 * buildbot/status/web/base.py (HtmlResource.title): change the
768 default title of all Buildbot-generated page to "Buildbot"
769 * buildbot/status/web/builder.py (StatusResourceBuilder.getTitle):
770 change the title to include the Builder name
771 * buildbot/status/web/build.py (StatusResourceBuild.getTitle):
772 same, and also show the build number
773 (StatusResourceBuild.rebuild): after using the 'Rebuild' button,
774 redirect the browser to the Builder page
776 2007-09-26 Brian Warner <warner@lothar.com>
778 * buildbot/status/web/baseweb.py (OneBoxPerBuilder.body): fix URL
779 problem with the build links
781 2007-09-25 Brian Warner <warner@lothar.com>
783 * buildbot/status/web/base.py (HtmlResource.render): fix addSlash
784 to emit relative URLs instead of using URLPath,
786 * docs/buildbot.texinfo (WebStatus): provide an example
788 * buildbot/status/web/baseweb.py (OneBoxPerBuilder): new status
789 page, shows a simple table with one row per Builder. Still pretty
790 ugly, but functional.
791 * buildbot/status/web/index.html: reference it
793 * buildbot/status/web/waterfall.py (Spacer): make this *not*
794 inherit from builder.Event, so that show_events=false doesn't hide
795 spacers, since that would make the waterfall weirdly compressed.
797 * buildbot/status/web/waterfall.py (HELP): put the View button in
798 its own section, so it doesn't get visually confused with the
800 (WaterfallStatusResource.body): make the '[help]' links more
801 visually distinct from each other, and add a link to the Welcome
803 * buildbot/status/web/slaves.py (BuildSlavesResource): handle
804 unused buildslaves without exploding
806 * buildbot/status/web/waterfall.py
807 (WaterfallStatusResource.body.with_args): don't use req.URLPath,
808 it gives us absolute paths that break proxies
809 * buildbot/status/web/base.py (HtmlResource.path_to_root): fix
810 this, it was giving bad results when the Waterfall is behind a
813 * buildbot/scripts/runner.py (upgradeMaster): first phase of the
814 new 'upgrade-master' command, which will bring an old buildmaster
815 directory up-to-date. Right now the only thing it does is populate
816 public_html/ if it wasn't already there. Still to do: check the
817 other files, add documentation.
818 * buildbot/test/test_runner.py (Create.testUpgradeMaster): test it
819 (Create.failUnlessSameFiles): use sets.Set() for 2.3 compatibility
821 2007-08-13 Brian Warner <warner@lothar.com>
823 * buildbot/changes/changes.py (Change.get_HTML_box): add a tooltip
824 that contains the checkin comments when you hover over the entry
825 in the 'changes' column of the waterfall. Thanks to Frederic Leroy
828 * buildbot/status/web/waterfall.py (WaterfallStatusResource): improve
831 * buildbot/status/web/about.py (AboutBuildbot): add an 'about'
832 page with versions of python, buildbot, and twisted
833 * buildbot/status/web/baseweb.py (WebStatus.setupUsualPages): same
834 * buildbot/status/web/index.html: add links to most pages
835 * docs/buildbot.texinfo (Buildbot Web Resources): update docs
837 * buildbot/status/web/robots.txt: put a robots.txt in new installs
838 which discourages robot access to all large dynamically-generated
839 pages. The intention is that the index page and the 'about' page
840 are the only ones which should be crawlable.
841 * buildbot/scripts/runner.py (Maker.public_html): same
843 * setup.py: ship index.html and robots.txt in source distributions
845 * buildbot/status/web/waterfall.py: add 'refresh' query arg, to
846 activate automatic reloading of the page (using a meta Refresh:
848 (WaterfallHelp): new page to explain all the nifty query arguments
849 you can use on the Waterfall, along with forms to set them for
850 you. From this page, you can add filters for builder=, branch=,
851 show_events=, as well as turning on reload=.
852 (WaterfallStatusResource.buildGrid): new query args: last_time=,
853 first_time=, show_time=, num_events= . The old show= is still
854 accepted, but the new builder= is preferred. We ignore empty
855 branch= arguments, to make the WaterfallHelp form easier to
857 (WaterfallStatusResource.head): new method to add text to the
859 * buildbot/status/web/base.py (HtmlResource.content): use head()
860 * buildbot/status/web/baseweb.py (OneLinePerBuild.body): ignore
861 empty branch= arguments
862 (OneLinePerBuildOneBuilder.body): same
864 2007-08-12 Brian Warner <warner@lothar.com>
866 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
867 new query args: 'last_time' is a timestamp of the top-most event
868 on the display, 'first_time' is a timestamp for the bottom-most
869 event. 'show_time' is the difference between them, and overrides
870 'first_time'. 'num_events' puts an upper limit on the number of
871 timestamps that will be displayed on the left hand edge.
872 (WaterfallStatusResource.body): add a 'next page' link to the
873 bottom, which shows the events that come just after those shown on
874 the current page. This is a first step towards #67, but we need
875 some more controls before we can close that one.
877 * buildbot/buildslave.py (BuildSlave): these are now MultiService
878 instances too, and live as children of the BotMaster. The main
879 advantage of this approach is that BuildSlaves can know when they
880 are being removed (so they can shut off the upcoming
881 when-do-we-email-an-admin-because-we-lost-our-slave timer).
882 * buildbot/interfaces.py (IBuildSlave): marker interface so we can
883 identify which service children are BuildSlaves
884 * buildbot/master.py (BuildMaster.loadConfig_Slaves): handle the
885 Checker updates here, but delegate the rest to..
886 (BotMaster.loadConfig_Slaves): .. here, which looks at the
887 BotMaster's service children to identify the old slaves. I think
888 the previous approach of using master.slaves was broken in the
889 face of config updates that modified BuildSlave instances but did
890 not completely replace them.
891 * docs/buildbot.texinfo (Developer's Appendix): note the change to
892 the Service hierarchy
894 * buildbot/status/web/slaves.py (BuildSlavesResource): new status
895 page (at URL /buildslaves/) to view status of all buildslaves at
896 once, including how long it's been since we last heard from them,
897 and which Builders use them.
899 * buildbot/status/web/baseweb.py: fix title of one-line-per-build
902 * buildbot/interfaces.py (IStatus.getSlaveNames): new method to
905 * buildbot/buildslave.py (BuildSlave.messageReceivedFromSlave):
906 use the BuildSlave to keep track of the last time we've heard from
907 the buildslave. This is updated upon receipt of any message from
908 any SlaveBuilder (which generally means when RemoteCommands are
909 giving us status updates, as BuildSteps run). In the future this
910 will include slave pings too.
911 * buildbot/process/base.py
912 (Build.setupBuild): give each BuildStep a reference to the BuildSlave
913 * buildbot/process/buildstep.py:
914 (BuildStep.setBuildSlave): accept that reference
915 (BuildStep.runCommand): pass the reference on to the RemoteCommand
916 (RemoteCommand.remote_update): update the timestamp
917 (RemoteCommand.remote_complete): same
918 * buildbot/test/runutils.py (StepTester.makeStep): match the change
919 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
920 * buildbot/interfaces.py (ISlaveStatus.lastMessageReceived): new
921 interface to retrieve this timestamp
922 * buildbot/status/builder.py (SlaveStatus): track a copy of the
926 * buildbot/status/web/baseweb.py (OneLineMixin.make_line): tighten
928 (OneLinePerBuild.body): use a <ul> instead of <div>s
929 (OneLinePerBuildOneBuilder.body): same
931 * contrib/darcs_buildbot.py (makeChange): handle moved files too,
932 by adding the file's new name to the list of changed files. This
933 ought to be sufficient for things like isFileImportant and trial
934 tests that only exercise tests for files that have been modified.
937 * buildbot/status/web/xmlrpc.py (XMLRPCServer): add preliminary
938 XMLRPC server to the WebStatus page. This only has two methods
939 right now (getAllBuildsInInterval and getBuild), but we'll be
940 adding more in the future. This server is extracted from the
943 * buildbot/status/web/baseweb.py (OneLinePerBuild): refactor using
944 generateFinishedBuilds, and improve the data displayed.
945 * buildbot/status/web/build.py (StatusResourceBuild): rearrange
946 the per-Build page, add some information like ETA and got_revision
947 * buildbot/status/web/builder.py (StatusResourceBuilder): same,
948 adding a list of recently completed builds
949 * buildbot/status/web/base.py (css_classes): factor this out
951 * buildbot/interfaces.py (IStatus.generateFinishedBuilds): define
952 new method, to make status display classes easier to write,
953 especially the WebStatus 'one_line_per_build' page.
954 (IBuilderStatus.generateFinishedBuilds): same
955 * buildbot/status/builder.py (BuilderStatus.generateFinishedBuilds):
956 (Status.generateFinishedBuilds): implement it
958 * buildbot/process/factory.py (GNUAutoconf.__init__): allow
959 'source' to be a BuildStep instance, since BuildFactory accepts
961 (CPAN.__init__): same
962 (Distutils.__init__): same
963 (Trial.__init__): same
965 * buildbot/interfaces.py (IBuildStatus.getProperty): note that
966 this might raise KeyError
968 2007-08-07 Brian Warner <warner@lothar.com>
970 * buildbot/slave/commands.py (P4): use 'p4user' to construct the
971 'Owner:' field of the view, rather than 'p4logname', since
972 p4logname comes from the buildslave's environment and seems
973 unlikely to ever do the right thing. Thanks to Wade Brainerd for
974 the patch. Closes #40.
976 * buildbot/buildslave.py (BuildSlave.__init__): add max_builds=,
977 which imposes a per-slave limit on how many builds are allowed to
978 run simultaneously. This has a the same scope than the SlaveLock,
979 but is different because max_builds= gives the buildmaster the
980 freedom to assign the build to a different slave, whereas the
981 SlaveLock doesn't get tested until after the build is irrevocably
982 assigned to a slave. Therefore using max_builds= will improve
983 utilization in the presence of multiple buildslaves that are
984 attached to the same Builder. This completes the incorporation of
985 Dustin Mitchell's patches, and closes ticket #48. Thanks Dustin!
986 * buildbot/process/builder.py (SlaveBuilder.buildFinished): when
987 any Builder finishes, potentially trigger *all* Builders, since
988 max_builds= may have stalled someone else while waiting for the
990 * buildbot/scripts/sample.cfg: mention max_builds=
991 * buildbot/test/test_run.py (ConcurrencyLimit): test it
992 * docs/buildbot.texinfo (Buildslave Specifiers): document it
994 * buildbot/test/test_run.py (CanStartBuild._do_test2): tests which
995 inherit from RunMixin do not need to call master.stopService()
996 themselves, since RunMixin.tearDown does that. The double call
997 fails on Twisted-2.0.x, which didn't happen to protect against it.
998 * buildbot/test/test_slaves.py (BuildSlave.test_track_builders): same
1000 * buildbot/buildslave.py (BuildSlave.addSlaveBuilder): third patch
1001 from #48, this one to have the BuildSlave objects track
1002 SlaveBuilders, so they'll be able to use that knowledge to
1003 influence their canStartBuild() response.
1004 * buildbot/process/builder.py (SlaveBuilder.attached): call it
1005 (SlaveBuilder.detached): same
1006 * buildbot/test/test_slaves.py (BuildSlave): test it
1008 * buildbot/buildslave.py (BuildSlave.canStartBuild): incorporate
1009 the second of Dustin's #48 patches, this one adding a method to
1010 the BuildSlave that allows it to decide whether it is willing to
1011 participate in a build or not.
1012 (SlaveBuilder.isAvailable): use canStartBuild() to decide
1014 * buildbot/test/test_run.py (CanStartBuild): test for it
1016 * all: incorporate the first of four patches by Dustin Mitchell
1017 from ticket #48, working towards improving control over slave
1018 concurrency. The first patch is to use a long-lived BuildSlave
1019 object per slave, on which other behavior can be added later. I've
1020 modified his patch considerably.
1021 * buildbot/buildslave.py (BuildSlave): move class out of
1022 slave/__init__.py (where it would get loaded by the slave as well
1023 as the master, making dependencies trickier), and merge it with
1024 BotPerspective. Now these BuildSlave instances are created once in
1025 the master.cfg file, and not destroyed until they are either
1026 removed from the config file or changed so
1027 much (name/password/class changes) that we cannot continue to use
1028 the old one. This affects config files: they must use
1029 'from buildbot.buildslave import BuildSlave' instead of using
1030 'from buildbot.slave import BuildSlave'.
1031 * buildbot/master.py: move BotPerspective out
1032 (BuildMaster.loadConfig_Slaves): examine old and new slaves,
1033 add or remove as necessary, update the rest using data from
1034 the new config file.
1035 * buildbot/slave/__init__.py: move BuildSlave out
1036 * buildbot/test/test*.py: import BuildSlave from the new place
1037 * buildbot/scripts/sample.cfg: update to match
1038 * docs/buildbot.texinfo: update to match
1039 * buildbot/process/builder.py: update comments to match
1041 2007-08-02 Brian Warner <warner@lothar.com>
1043 * buildbot/status/web/baseweb.py (OneLinePerBuild): improve
1044 one-line-per-build pages a bit, add a header, refactor slightly
1046 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): cleanup
1047 the TimeOutError timer, patch by Dustin Mitchell.
1049 2007-08-01 Brian Warner <warner@lothar.com>
1051 * buildbot/status/web/baseweb.py (OneLinePerBuild): make this
1052 mostly work (branch= is still ignored, we need a useful header)
1053 (OneLinePerBuildOneBuilder.body): this too
1055 * buildbot/status/web/builder.py (StatusResourceBuilder.force):
1056 bring this up-to-date w.r.t. recent refactorings, and fix
1057 redirections to bounce the browser to the top page after hitting
1058 the 'force' button. This needs to be improved, but at least it now
1059 redirects to a valid page.
1060 (StatusResourceBuilder.ping): same
1061 (StatusResourceBuilder.getChild): same, although I think this code
1062 might be dead anyways
1064 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
1065 a branch= query argument, to filter the display down to builds and
1066 changes that involve the given branch. You can add multiple
1067 branch= arguments to see multiple branches (using a logical OR).
1068 Note that there is no way to include the default branch (i.e.
1069 None, i.e. trunk) yet, there is still work to be done to allow for
1070 simple+uniform names of branches (i.e. removing the VC-specific
1071 details of how branches are implemented, so calling the branch
1072 'beta4' even though the SVN checkout step requires
1074 * buildbot/status/builder.py (BuilderStatus.eventGenerator): same
1075 * buildbot/changes/changes.py (ChangeMaster.eventGenerator): same
1076 * buildbot/interfaces.py (IEventSource.eventGenerator): same
1077 * docs/buildbot.texinfo (Buildbot Web Resources): document it
1079 * all: bring import statements up-to-date: don't import
1080 __future__, assume cPickle and cStringIO are always available.
1081 Also remove #!/usr/bin/python lines from non-scripts, my editor
1082 has been a bit over-enthusiastic about stuffing them into new .py
1085 * buildbot/status/web/index.html: put a link to the waterfall page
1086 on the index, otherwise first-time users of WebStatus aren't going
1087 to see anything very interesting.
1089 * buildbot/interfaces.py (IEventSource): document this interface.
1090 Thanks to Dustin Mitchell for the patch. Closes #60.
1091 * buildbot/status/builder.py (BuilderStatus): same
1092 * buildbot/changes/changes.py (ChangeMaster): same
1094 * buildbot/status/web/waterfall.py (WaterfallStatusResource.buildGrid):
1095 add a query arg of 'show_events=true' to display non-build events,
1096 like slaves attaching/detaching and reconfig events, or
1097 'show_events=false' to hide them. The default is 'true'.
1098 * docs/buildbot.texinfo (Buildbot Web Resources): document it
1100 * web-parts: merge in web-parts branch. Lots of changes. The new
1101 functionality is to add buildbot.status.html.WebStatus, which is a
1102 superset of the Waterfall that adds new status pages and serves
1103 regular files from BASEDIR/public_html/ , which is now the preferred
1104 place to put robots.txt, buildbot.css, and index.html .
1105 * buildbot/scripts/runner.py: the 'create-master' command now
1106 creates public_html/ too, and populates it with a couple of
1108 * buildbot/status/web: split waterfall code into smaller pieces
1110 2007-07-31 Brian Warner <warner@lothar.com>
1112 * buildbot/scripts/startup.py (launch): import twistd.run in a
1113 different way to hush pyflakes
1114 * buildbot/process/builder.py: remove unused import
1116 2007-07-30 Brian Warner <warner@lothar.com>
1118 * buildbot/interfaces.py (ISourceStamp): cleanup patch by Dustin
1119 Mitchell: pass SourceStamps around rather than branch/version/etc
1120 tuples. Thanks Dustin! Closes #70.
1121 * buildbot/sourcestamp.py (SourceStamp): insist that .changes is a
1122 tuple rather than a list, to avoid surprising mutations
1123 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1124 * buildbot/status/mail.py (MailNotifier.buildMessage): same
1125 * buildbot/status/builder.py (BuildStatus.getSourceStamp): same
1126 * buildbot/test/test_status.py (Subscription): same
1127 * buildbot/test/test_control.py (Force): same
1128 * buildbot/test/test_buildreq.py (Request.testMerge): same
1130 2007-07-29 Brian Warner <warner@lothar.com>
1132 * buildbot/scripts/sample.cfg: remove the spurious 'builders'
1133 variable, since it wasn't used and is confusing in the presence of
1134 c['builders'] (which *is* used). Thanks to Thomas Vander Stichele
1137 * buildbot/status/web/waterfall.py (WaterfallStatusResource): update
1138 the Buildbot home-page link to point at buildbot.net instead of
1139 sourceforge, and add a current-version query parameter so we can
1140 get some statistics on which versions are in use out there.
1142 2007-07-28 Brian Warner <warner@lothar.com>
1144 * buildbot/master.py (BuildMaster.loadConfig): replace c['sources']
1145 with c['change_source'], leaving c['sources'] for backwards
1146 compatibility (but deprecated), scheduled for removal in 0.8.0
1147 * docs/buildbot.texinfo: same
1148 * buildbot/test/test_config.py: verify that c['sources'] still works
1149 * buildbot/test/test_*.py: replace c['sources'] with c['change_source']
1150 * buildbot/scripts/sample.cfg: update to match
1152 * buildbot/changes/mail.py (MaildirSource): parse with python's
1153 stdlib 'email' module, which has been available since python2.2,
1154 and drop use of the 'rfc822' module, which has been depreceated
1156 * buildbot/test/test_maildir.py: same: use parse_file() not parse
1158 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): oops,
1159 this needs to match the renaming in test/mail/msg*
1161 * README (SETTING UP A BUILD MASTER): fix capitalization-typo.
1164 * buildbot/test/test_mailparse.py: rename sample emails a bit
1165 * buildbot/test/mail/msg*: same
1167 * buildbot/changes/mail.py (SVNCommitEmailMaildirSource): add a
1168 parser for the "commit-email.pl" script that is shipped with SVN,
1169 written by Justin Mason. Thanks! Closes SF#1072845.
1170 * buildbot/test/mail/svn-commit.*: sample messages
1171 * buildbot/test/test_mailparse.py (TestSVNCommitEmail): test it
1172 * docs/buildbot.texinfo (SVNCommitEmailMaildirSource): docs
1174 2007-07-27 Brian Warner <warner@lothar.com>
1176 * buildbot/changes/mail.py: refactor: move parsing into a method
1177 named 'parse', each parser type gets a separate subclass. Remove
1178 the old 'sep' argument (hardcode it to '/'), fix usage of prefix=
1179 to be a simple leading-substring match. Add a warning to the logs
1180 if prefix= does not end in a slash, since that's probably a
1181 mistake. Fix both places where a prefix= mismatch would skip all
1182 subsequent files in the same email, instead of just skipping the
1183 one that didn't match.
1184 * buildbot/test/test_mailparse.py: match changes
1186 * docs/buildbot.texinfo (Getting Source Code Changes): refactor
1187 docs on email-based ChangeSources
1189 * docs/buildbot.texinfo (Getting Source Code Changes): move all
1190 the changesource types up a level, removing the one-entry menu in
1193 * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename
1194 c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave
1195 instances instead of tuples. Closes #63.
1196 * buildbot/slave/__init__.py (BuildSlave): define marker class
1197 * buildbot/scripts/sample.cfg: use c['slaves'] in sample config
1198 * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves']
1199 * buildbot/test/test_*.py: update tests to match
1200 * buildbot/test/test_config.py (ConfigTest.testBots): verify that
1201 the c['bots'] backwards-compatibility handler works
1203 2007-07-26 Brian Warner <warner@lothar.com>
1205 * buildbot/changes/hgbuildbot.py (hook): add an in-process
1206 Mercurial change-sending hook, contributed by Frederic Leroy.
1207 Thanks! Addresses #50.
1208 * docs/buildbot.texinfo (MercurialHook): document it
1210 * buildbot/changes/hgbuildbot.py: change the way imports are done,
1211 to make it compatible with at least hg-0.9.1 and the current 0.9.4
1213 2007-07-17 Brian Warner <warner@lothar.com>
1215 * buildbot/process/buildstep.py (BuildStep.getLog): add a
1216 convenience method to retrieve a log added with
1217 addLog()/addCompleteLog()/etc or logfiles= . I should have added
1218 this two years ago..
1220 2007-07-03 Brian Warner <warner@lothar.com>
1222 * buildbot/slave/commands.py (ShellCommand._startCommand): when
1223 logging the environment variables, put one variable on each line,
1224 rather than having one really long line with all of them. This
1225 should make them a bit more readable and not trigger the
1226 horizontal scrollbar (when viewing it in a web browser) quite so
1227 much. Thanks to Albert Hofkamp for the patch.
1229 * buildbot/steps/shell.py (ShellCommand): allow workdir= to be a
1230 WithProperties instance. Thanks to Axel Hecht for the patch.
1232 * buildbot/test/test_properties.py (Interpolate.testWorkdir): test it
1233 * docs/buildbot.texinfo (Build Properties): document it
1234 * buildbot/slave/commands.py (ShellCommand._startCommand): create the
1235 workdir if it didn't already exist.
1237 * docs/buildbot.texinfo (Scheduler Types): correct the description
1238 of Dependent schedulers. Thanks to Greg Ward for the patch.
1240 * buildbot/steps/source.py (SVN.startVC): when applying a patch,
1241 add "[patch]" to the step's display. Thanks to Dustin Mitchell for
1242 the patch. Closes #49.
1244 * buildbot/slave/commands.py (rmdirRecursive): chmod everything to
1245 0700 before removing it, to deal with situations where a build will
1246 leave files around without write permissions and the 'copy' or
1247 'clobber' VC checkout modes need to blow away the tree first.
1248 Thanks to Steve Milner for the suggestion and the patch (which I
1249 mangled horribly). Closes #29.
1250 * buildbot/test/test_slavecommand.py (Utilities.test_rmdirRecursive):
1253 * buildbot/test/runutils.py (RunMixin.disappearSlave): oops, add
1254 an allowReconnect= argument to let callers control whether they
1255 want this don't-let-it-reconnect behavior, since some tests care.
1256 Factor out the .continueTrying=False lines from those callers.
1257 * buildbot/test/test_slaves.py: same
1258 * buildbot/test/test_run.py: same
1260 2007-07-02 Brian Warner <warner@lothar.com>
1262 * buildbot/test/runutils.py (RunMixin.disappearSlave): once a
1263 slave has been disappeared, don't let it reconnect. This was
1264 causing an intermittent failure in test_slaves.py, when the slave
1265 that was supposed to be gone managed to come back by the end of
1266 the test and affect the count.
1267 * buildbot/test/test_slaves.py (Slave.testFallback2): minor
1269 * buildbot/process/builder.py (SlaveBuilder.__repr__): added some
1270 diagnostic messages to track down this problem
1271 (Builder.startBuild): same
1273 * buildbot/process/builder.py (Builder.maybeStartBuild): choose
1274 the slave randomly rather than always taking the first one. Thanks
1275 to Pike for the patch. Closes #36.
1276 * buildbot/test/test_slaves.py: match the change. to avoid huge
1277 changes to the tests, I added a CHOOSE_SLAVES_RANDOMLY flag which
1278 enables/disables the round-robin-ness (enabled by default), and
1279 some unit tests disable it.
1280 * docs/buildbot.texinfo (Buildmaster Architecture): document it
1282 * buildbot/slave/bot.py (BuildSlave.__init__): rename the 'host'
1283 argument to 'buildmaster_host', to make it more obvious that this
1284 points to the buildmaster. Thanks to Bob Proulx for the
1286 * buildbot/scripts/runner.py (slaveTAC): same
1287 * buildbot/test/test_runner.py (Create.testSlave): match the change
1289 * contrib/hg_buildbot.py: patch from Frederic Leroy to make this
1292 2007-06-17 Brian Warner <warner@lothar.com>
1294 * buildbot/test/test_config.py (Factories.testAllSteps): make sure
1295 we can round-trip all of our current step classes by calling
1296 getStepFactory() and using the results to make a clone of the
1299 * buildbot/steps/maxq.py: fix import errors. Guess this hasn't been
1302 * buildbot/process/factory.py (BuildFactory.addStep): To simplify
1303 the config file, we're moving to using actual instances instead of
1304 the (class, kwargs) 'step specification' tuples. BuildFactory
1305 still keeps a list of tuples internally, but when real instances
1306 are passed in to addStep(), they are asked for their class and
1307 kwargs using the new BuildStep.getStepFactory method. BuildFactory
1308 accepts both instances and the tuple form, and converts instances
1309 to the tuple form, but the instance form is preferred because it
1310 gives the Steps a chance to do argument validation. Closes: #11.
1312 * buildbot/process/buildstep.py (BuildStep.__init__): record the
1313 factory information necessary to implement getStepFactory. The
1314 addFactoryArguments() method can be used to include arguments that
1315 aren't passed to the BuildStep base class constructor.
1316 (BuildStep.setBuild):
1317 (BuildStep.setDefaultWorkdir): new methods to take parameters that
1318 are needed for live BuildSteps but not to construct the specification
1319 tuples that are stashed in the factory.
1321 * buildbot/process/base.py (Build.setupBuild): pass 'build' and
1322 'workdir' into new BuildSteps by using methods instead of
1323 arguments. This makes the constructor for BuildSteps a lot
1326 * buildbot/steps/*.py: update to match this change. Basically this
1327 means adding calls to addFactoryArguments() in the __init__
1328 methods to capture the arguments that aren't passed through to the
1330 * buildbot/steps/shell.py (ShellCommand.setDefaultWorkdir): copy
1331 the new workdir (if any) into the RemoteShellCommands arguments.
1332 * buildbot/steps/source.py: allow workdir= to be optional,
1333 implement setDefaultWorkdir() since we don't inherit from
1334 (CVS): finally remove old clobber=/export=/copydir= arguments,
1335 in favor of the mode= argument that's been around forever now.
1336 * buildbot/steps/transfer.py: remove build= argument
1338 * buildbot/test/*.py: update to match, generally by turning all
1339 build= arguments into subsequent calls to s.setBuild()
1340 * buildbot/test/test_config.py (Factories): verify that we can
1341 use either BuildStep instances or class/kwarg tuples in both
1342 BuildFactory.addStep and BuildFactory.__init__
1344 * docs/buildbot.texinfo (Build Steps): document the new approach,
1345 mention compatibility with the old approach, update all examples
1346 to use the new style.
1348 2007-06-16 Brian Warner <warner@lothar.com>
1350 * buildbot/changes/svnpoller.py: when the poll fails, don't kill
1351 the LoopingCall, just eat the failure so that we'll poll again
1352 next time. This should allow us to tolerate (e.g.) sf.net SVN
1353 failures more gracefully. Many thanks to Dustin Mitchell for the
1356 2007-05-17 Brian Warner <warner@lothar.com>
1358 * buildbot/status/words.py: refactor the IRC status bot into
1359 separate 'Contact' and 'Channel' classes. The base Contact class
1360 contains the interaction code: commands and responses. The
1361 IRCContact subclass (and IrcStatusBot 'Channel') handle the
1362 IRC-specific aspects. The plan is to write other subclasses for
1363 other IM protocols like AIM and Jabber.
1365 2007-04-16 Brian Warner <warner@lothar.com>
1367 * CREDITS: update list of contributors. Thank you all!
1369 2007-04-13 Brian Warner <warner@lothar.com>
1371 * buildbot/status/mail.py (MailNotifier): add the project name to
1372 the subject line and message body, to make it easier to
1373 distinguish email coming from different buildmasters. Thanks to
1374 Benoit Sigoure for the patch.
1375 * buildbot/test/test_status.py (Mail): update to match
1377 2007-03-24 Brian Warner <warner@lothar.com>
1379 * buildbot/steps/transfer.py: open all files in 'b' binary mode to
1380 avoid text-conversion problems between DOS/windows and unix.
1381 Thanks to Phil Thompson for the patch. Fixes SF#1674927.
1383 2007-03-03 Brian Warner <warner@lothar.com>
1385 * buildbot/status/html.py (_hush_pyflakes): hush a pyflakes
1386 warning about the use of Waterfall here
1388 2007-03-01 Brian Warner <warner@lothar.com>
1390 * buildbot/interfaces.py (IStatus.getBuilder): mention exceptions
1392 2007-02-28 Brian Warner <warner@lothar.com>
1394 * buildbot/changes/p4poller.py (P4Source): apply change from Scott
1395 Lamb to use a more optimal form of 'p4 changes', to reduce server
1396 load. He reports that this optimization was added to p4d release
1397 2005.2, but it should work in all versions. Closes #27.
1398 * buildbot/test/test_p4poller.py: match it
1400 2007-02-27 Brian Warner <warner@lothar.com>
1402 * buildbot/status/web/*.py: move all web status stuff into a
1403 separate directory, in anticipation of splitting it into smaller
1404 pieces and adding more files. html.py was getting way too big.
1405 * buildbot/status/classic.css: move it too
1406 * setup.py: add the new sub-package
1407 * buildbot/test/test_web.py: match the changes
1408 * MANIFEST.in: handle the move of classic.css
1410 2007-02-07 Brian Warner <warner@lothar.com>
1412 * contrib/OS-X/*: add some launchd .plist files for automatically
1413 starting a buildmaster or buildslave under OS-X (10.4 or later).
1414 Thanks to Mark Pauley for these.
1416 2007-02-06 Brian Warner <warner@lothar.com>
1418 * docs/buildbot.texinfo (Requirements): update requirements to
1419 stop claiming compatibility with python-2.2 or twisted-1.3.x .
1421 * README: mention python-2.5 and twisted-2.5 compatibility
1423 * buildbot/clients/debug.py: hush pyflakes warnings by removing a
1425 * buildbot/scripts/startup.py: same, by removing twisted-1.3.0
1427 * buildbot/status/builder.py: same, by requiring cStringIO
1428 * buildbot/status/words.py: same, remove twisted-1.3.0 compat
1429 * buildbot/test/test_vc.py: same
1430 * buildbot/test/test_web.py:
1431 * buildbot/test/test_steps.py: same, remove unused import
1433 * buildbot/status/html.py (StatusResourceBuild.body): oops, close
1436 * buildbot/master.py (BuildMaster.loadConfig): warn the user if we
1437 see any Builders that don't have Schedulers to drive them
1439 * buildbot/master.py (BotPerspective.__repr__): fit bitrot, the
1440 attributes this uses went away
1442 * contrib/bb_applet.py (MyApplet.filled): add a small prefs
1443 dialog, to allow you to reset the buildmaster and force
1444 connect/disconnect. Correctly handle losing the buildmaster
1445 connection (by switching the display to the hexnut, at which point
1446 you can use the 'Connect' menu item to reconnect).
1448 * buildbot/steps/source.py (Source.start): if we're using a patch,
1449 add it as a LogFile to the checkout/update step. This will turn
1450 into a link on the waterfall page.
1452 * buildbot/scripts/tryclient.py (Try.createJob): implement --diff
1453 option, to take the patch from a pre-made file rather than
1454 generating it from the local tree. Thanks to Robert Helmer for the
1455 idea. Closes #15 (the Trac ticket on the new http://buildbot.net/).
1456 * buildbot/scripts/runner.py (TryOptions): add --diff,
1457 --patchlevel, and --baserev options
1458 * buildbot/scheduler.py (Try_Jobdir.parseJob): treat a baserev of ""
1459 as None, meaning HEAD.
1460 * buildbot/sourcestamp.py (SourceStamp): update docstring to
1461 indicate that baserev=None means HEAD
1462 * docs/buildbot.texinfo (try --diff): document it
1464 * buildbot/test/test_steps.py (BuildStep): remove use of
1465 reactor.iterate(), although the technique I replaced it with is a
1466 gross polling hack that must be cleaned up properly some day. This
1467 was the last use of reactor.iterate in the entire tree, yay.
1469 2007-02-05 Brian Warner <warner@lothar.com>
1471 * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
1472 is one of the three known values, otherwise we emit some confusing
1473 messages later on. Thanks to Grig Gheorghiu for the catch.
1475 2007-01-30 Brian Warner <warner@lothar.com>
1477 * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
1478 Hearsum contributed a patch to let BonsaiPoller work with results
1479 that contain non-ascii characters. Closes SF#1632641.
1481 2007-01-27 Brian Warner <warner@lothar.com>
1483 * Makefile (release): produce both .tar.gz and .zip source bundles.
1486 2007-01-23 Brian Warner <warner@lothar.com>
1488 * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
1489 * buildbot/changes/monotone.py: same
1491 * buildbot/changes/maildir.py: combine several files into one,
1492 clean up maildir.py to use Services properly.
1493 * buildbot/changes/maildirtwisted.py: remove
1494 * buildbot/changes/maildirgtk.py: remove, it wasn't used by
1496 * buildbot/changes/mail.py: match the change
1497 * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
1498 * buildbot/test/test_maildir.py: remove use of reactor.iterate()
1500 * buildbot/slave/commands.py (command_version): bump to "2.3" to
1501 indicate that the buildslave knows about the 'bzr' command
1503 2007-01-22 Brian Warner <warner@lothar.com>
1505 * buildbot/process/builder.py (Builder.fireTestEvent): don't use
1506 'with', it will become a reserved work in python2.6 .
1508 * contrib/bb_applet.py: add a simple gnome-panel applet, to
1509 display a terse summary of buildbot status.
1510 * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
1511 some icons, small versions of the Blender object that lives in
1512 docs/images/icon.blend
1514 * buildbot/steps/source.py (Bzr): add Bazaar-ng support
1515 * buildbot/slave/commands.py (Bzr): same
1516 * buildbot/scripts/tryclient.py (BzrExtractor): same
1517 (SourceStampExtractor.dovc): modify this to allow non-zero exit
1518 status, since 'bzr diff' does that
1519 * buildbot/test/test_vc.py (Bzr): same
1520 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1524 2007-01-20 Brian Warner <warner@lothar.com>
1526 * contrib/darcs_buildbot.py: tidy up the progress messages
1528 2007-01-17 Brian Warner <warner@lothar.com>
1530 * contrib/darcs_buildbot.py: enhance to handle multiple patches
1531 being pushed at a time. This keeps state in the repository in a
1532 small file named .darcs_buildbot-lastchange, but that shouldn't
1533 interfere with normal repository operations. Fixes SF#1534049.
1534 * buildbot/clients/sendchange.py (Sender): make a single Sender
1535 capable of sending Changes with different usernames.
1537 2006-12-11 Brian Warner <warner@lothar.com>
1539 * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
1540 scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
1541 buildbot.changes.mail a long time ago, but I forgot to add the
1542 DeprecationWarning until now.
1544 * buildbot/process/maxq.py: remove this, the functionality now
1545 lives in buildbot.steps.maxq
1547 * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
1548 * buildbot/clients/gtkPanes.py: remove unused import
1550 * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
1551 that was meant to provide a special Reporter to run inside trial
1552 and give the buildslave lots of machine-readable status. We never
1553 finished this project.
1555 * buildbot/changes/bonsaipoller.py: remove unused imports
1556 * buildbot/changes/svnpoller.py: same
1557 * buildbot/process/builder.py: same
1558 * buildbot/process/buildstep.py: same
1559 * buildbot/slave/bot.py: hush pyflakes warning
1560 * buildbot/status/tests.py: remove unused imports
1561 * buildbot/status/tinderbox.py: same
1562 * buildbot/steps/python_twisted.py: same
1564 * buildbot/process/step.py: remove this file, these names were
1565 deprecated in 0.7.5 and are now being removed.
1566 * buildbot/process/step_twisted.py: same
1567 * buildbot/test/test_steps.py (ReorgCompatibility): remove test
1569 * buildbot/twcompat.py: remove the empty file, yay it is gone
1571 * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
1572 tw-2.0.0 and newer have the method we need.
1573 (getProcessOutputAndValue): same
1574 (which): remove this method, tw-2.0.0 t.p.procutils has it
1576 * buildbot/twcompat.py (implements): remove this method
1577 * buildbot/*: import implements() from zope.interface directly
1579 * buildbot/status/mail.py: stop falling back to importing
1580 twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
1583 * buildbot/twcompat.py (Interface): remove this import
1584 * buildbot/*: import Interface from zope.interface directly
1586 * buildbot/twcompat.py (providedBy): remove this method
1587 * buildbot/*: turn all uses of providedBy(obj, iface) into
1588 iface.providedBy(obj)
1590 * buildbot/twcompat.py (maybeWait): remove this method, now that
1591 we no longer maintain compatibility with Twisted<=1.3.0 .
1592 Twisted-2.0.0 and later allow trial methods to return Deferreds
1594 * buildbot/test/*: remove all uses of maybeWait
1596 * buildbot/__init__.py (version): bump to 0.7.5+ while between
1598 * docs/buildbot.texinfo: same
1600 2006-12-10 Brian Warner <warner@lothar.com>
1602 * buildbot/__init__.py (version): Releasing buildbot-0.7.5
1603 * docs/buildbot.texinfo: set version to match
1605 2006-12-10 Brian Warner <warner@lothar.com>
1607 * README (REQUIREMENTS): update for release
1608 * NEWS: update for release
1609 * buildbot/slave/commands.py (command_version): mention that this
1610 version (2.2) was released with buildbot-0.7.5
1612 * buildbot/test/test_config.py (StartService.testStartService):
1613 inhibit the usual read-config-on-startup behavior, since otherwise
1614 the log.err that gets recorded causes the test to fail
1616 * buildbot/status/builder.py (LogFile.finish): forget about all
1617 subscribers once the log has finished, since after that point
1618 we're never going to use them again. This might help free up some
1621 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
1622 than the old/deprecated gtk.mainquit()
1624 2006-12-09 Brian Warner <warner@lothar.com>
1626 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
1627 better when we can't open the masterdst file
1629 * buildbot/scripts/startup.py (Follower._failure): add missing
1630 import statement for BuildSlaveDetectedError
1632 * buildbot/steps/transfer.py (FileUpload): cleanup
1633 (FileDownload): same. Add tests for slave version, add mode=.
1634 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
1635 (SlaveFileDownloadCommand): same
1636 * buildbot/test/test_transfer.py: enhance tests
1637 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
1640 2006-12-08 Brian Warner <warner@lothar.com>
1642 * buildbot/scripts/runner.py (sendchange): halt the reactor on
1643 both success *and* failure. Without this, the 'buildbot
1644 sendchange' command would hang if it could not contact the
1645 buildmaster or deliver the Change, which would generally cause the
1646 user's commit/record/checkin command to hang too. Thanks to
1647 Christian Unger for the catch.
1649 2006-12-06 Brian Warner <warner@lothar.com>
1651 * NEWS: update with items for the next release
1653 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
1654 whimsical example pulled from a punch-drunk email I sent out late
1656 (Transferring Files): document some of the other parameters
1657 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
1658 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
1659 * buildbot/test/test_svnpoller.py: same
1660 * buildbot/changes/svnpoller.py (SVNPoller): same
1662 2006-11-26 Brian Warner <warner@lothar.com>
1664 * docs/buildbot.texinfo (Build Properties): remind users that
1665 WithProperties must appear in a command= list, not as a top-level
1667 * buildbot/steps/shell.py (ShellCommand.start): and assert that
1668 we're sending a list or a single string to the RemoteShellCommand
1670 * buildbot/scheduler.py (Nightly): Improve docs slightly.
1672 * buildbot/scripts/startup.py (start): skip the whole
1673 watch-the-logfile thing under windows, since it needs os.fork()
1675 * buildbot/scripts/runner.py (restart): remove the old message
1676 that got printed after the buildbot was restarted.. it most cases
1677 it didn't get printed at the right time anyways
1679 2006-11-25 Brian Warner <warner@lothar.com>
1681 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
1682 follow twistd.log and print lines until the process has started
1683 started properly. For the buildmaster, this means until the config
1684 file has been parsed and accepted. For the buildslave, this means
1685 until we've connected to the master. We give up after 5 seconds in
1686 any case. Helpful error messages and troubleshooting suggestions
1687 are printed when we don't see a successful startup. This closes the
1688 remainder of SF#1517975.
1689 * buildbot/scripts/startup.py: moved app startup code to here
1690 * buildbot/scripts/logwatcher.py: utility class to follow log
1691 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
1692 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
1693 so the LogWatcher can tell the difference between a buildmaster
1696 2006-11-24 Brian Warner <warner@lothar.com>
1698 * docs/examples/twisted_master.cfg: update to match the version
1699 in use on twistedmatrix.com
1700 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
1701 was using before stopped working, but 'irc.freenode.net' works
1704 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
1707 * buildbot/clients/base.py (TextClient.not_connected): upon
1708 UnauthorizedLogin failures, remind the user to connect to the
1709 PBListener port instead of the slaveport.
1710 (TextClient.disconnected): shut down more quietly
1711 * docs/buildbot.texinfo (statuslog): add another reminder
1713 * buildbot/scripts/runner.py (Options.subCommands): rename
1714 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
1715 'sighup' as an alias.
1716 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
1717 reconfig command to follow twistd.log and print all of the lines
1718 from the start of the config-file reload to its completion. This
1719 should make it a lot easier to discover bugs in the config file.
1720 Use --quiet to disable this behavior. This addresses half of
1721 SF#1517975, the other half will be to add this same utility to
1722 'buildbot start' and 'buildbot restart'.
1723 * docs/buildbot.texinfo (Loading the Config File): same
1726 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
1727 method, it has been deprecated for a long time. Use
1728 IBuilderControl.requestBuild instead.
1729 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
1730 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
1731 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
1732 * buildbot/test/test_control.py (Force.testForce): same
1733 * buildbot/test/test_run.py: use requestBuild instead
1735 * buildbot/clients/debug.py: replace 'Force Build' button with
1736 'Request Build' (which just adds one to the queue), add Ping
1737 Builder, add branch/revision fields to Request Build.
1738 * buildbot/clients/debug.glade: same
1739 * buildbot/master.py: update interface to match. This creates an
1740 incompatibility between new debugclients and old buildmasters.
1742 * buildbot/process/builder.py (Builder._attached): delay the call
1743 to maybeStartBuild for a reactor turn, to avoid starting a build
1744 in the middle of a reconfig (say, if the new Builder uses a new
1745 slave which is already connected).
1747 2006-11-23 Brian Warner <warner@lothar.com>
1749 * buildbot/test/test_transfer.py: appease pyflakes
1750 * buildbot/test/test_steps.py: same
1752 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
1753 keeps pyflakes from finding undefined names
1755 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
1756 Builder no longer induces a disconnect/reconnect cycle. This means
1757 that any builds currently in progress will not be interrupted, and
1758 any builds which are queued in the Builder will not be lost. This
1759 is implemented by having the new Builder extract the state (i.e.
1760 all pending Builds and any desired SlaveBuilders) from the old
1762 (BotPerspective): refactor. The BotPerspective no longer keeps
1763 track of all the Builders that want to use this slave; instead, it
1764 asks the BotMaster each time it needs this list. This removes
1765 addBuilder and removeBuilder. Clean up attached() to acquire all
1766 the slave's information in a more atomic fashion. updateSlave() is
1767 now the way to make sure the slave is using the right set of
1768 Builders: just call it after everything else has been
1770 (BotMaster): refactor, removing addBuilder/removeBuilder and
1771 replacing them with an all-at-once setBuilders() call.
1773 * buildbot/test/test_slaves.py (Reconfig): new test case to
1774 exercise this functionality
1775 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
1776 * buildbot/slave/commands.py (WaitCommand): same
1778 * docs/buildbot.texinfo (Loading the Config File): document the
1781 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
1782 SlaveBuilder to have its parent Builder changed.
1783 (SlaveBuilder.isAvailable): new method to give access to state,
1784 which is now a private attribute
1785 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
1786 the SlaveBuilder about how it is being used. These methods update
1787 its internal state. buildFinished() is now the place that invokes
1788 maybeStartBuild() on its parent Builder.
1789 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
1790 new Builder to take over for an old one, transferring state from
1792 (Buider): refactor the way that SlaveBuilders are used to match,
1793 giving them a bit more autonomy.
1794 (Builder.buildFinished): this no longer calls maybeStartBuild():
1795 instead the SlaveBuilder calls it on whoever its parent Builder is
1796 at the time. This way, when an old Builder is replaced by a new
1797 one, and there was a build in progress during the transition, when
1798 that build finishes, it will be the new Builder that is told about
1799 the newly available slave so it can start a new build.
1801 * buildbot/process/base.py (Build.startBuild._release_slave): when
1802 the Build finishes, tell the SlaveBuilder that they've been
1805 * buildbot/status/builder.py (SlaveStatus): add some new setter
1806 methods for use by BotPerspective, to keep some attributes more
1809 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
1810 called by the buildmaster.
1811 (Bot.setBuilderList): instead, we locally announce any leftover
1812 directories based upon which Builders we were told about. The
1813 master doesn't really care; it's the local admin who may or may not
1814 wish to delete them.
1817 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
1818 to allow use of python2.4 or whatever. This tool still requires
1821 2006-11-19 Brian Warner <warner@lothar.com>
1823 * NEWS (IStatusLog.readlines): more news items
1825 2006-11-18 Brian Warner <warner@lothar.com>
1827 * NEWS: start collecting items for the next release.
1829 2006-11-04 Brian Warner <warner@lothar.com>
1831 * buildbot/changes/bonsaipoller.py: apply updates from Ben
1832 Hearsum. Closes SF#1590310.
1833 * buildbot/test/test_bonsaipoller.py: and tests
1835 * buildbot/status/tinderbox.py
1836 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
1837 status when the build results in WARNINGS. Patch from Dave
1838 Liebreich. Closes SF#1587352.
1840 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
1841 linux-vs-osx behavior difference w.r.t. reading from files that
1842 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
1843 to Mark Rowe for the patch.
1845 2006-10-15 Brian Warner <warner@lothar.com>
1847 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
1848 method name was misspelled in the interface definition. Thanks to
1849 Roy Rapoport for the catch.
1851 2006-10-13 Brian Warner <warner@lothar.com>
1853 * docs/buildbot.texinfo (Adding LogObservers): update sample code
1854 to match the great Steps renaming
1856 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
1857 Maybe I should run my own unit tests before recording a big
1858 change. Good thing I've got a buildbot to remind me.
1860 2006-10-12 Brian Warner <warner@lothar.com>
1862 * buildbot/steps/transfer.py: rework __init__ and args setup
1863 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
1865 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
1866 when opening the target file, only catch IOError (to report via
1867 stderr/rc!=0), let the others be reported as normal exceptions
1869 2006-10-08 Brian Warner <warner@lothar.com>
1871 * contrib/svn_watcher.py: fix security holes by using proper argv
1872 arrays and subprocess.Popen() rather than commands.getoutput().
1873 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
1874 is deprecated in favor of buildbot/changes/svnpoller.py, and will
1875 probably be removed by the next release.
1878 2006-10-04 Brian Warner <warner@lothar.com>
1880 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
1881 initial lines that weren't emitted by pyflakes. When the pyflakes
1882 command is run under a Makefile, 'make' will echo the command it
1883 runs to stdio, and that was getting logged as a "misc" warning.
1884 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
1885 * buildbot/test/test_steps.py (testPyFlakes3): another test
1887 2006-10-01 Brian Warner <warner@lothar.com>
1889 * buildbot/status/html.py (HtmlResource.render): if we get a
1890 unicode object from our content() method, encode it into utf-8
1891 like we've been claiming to all along. This allows the comments
1892 and author names from svnpoller.py to be delivered properly.
1894 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
1895 de-unicodify filenames before creating the Change, because the
1896 rest of buildbot is unlikely to handle them well. Leave the 'who'
1897 field as a unicode object.. I don't think there's anything that
1898 will break very soon, and it will probably nudge us towards
1899 accepting unicode everywhere sooner or later. Stop using the
1900 "date" field that comes out of SVN, since it is using the
1901 repository's clock (and timezone) and what we care about is the
1902 buildmaster's (otherwise Changes from the future show up later
1903 than the builds they triggered).
1904 * buildbot/test/test_svnpoller.py (Everything.test1): match the
1907 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
1908 Suvbersion repository polling ChangeSource. I've hacked it up
1909 considerably: any bugs are entirely my own fault. Thank you
1911 * buildbot/test/test_svnpoller.py: tests for it
1912 * docs/buildbot.texinfo (SvnSource): document it
1914 2006-09-30 Brian Warner <warner@lothar.com>
1916 * buildbot/scheduler.py (Periodic): submit a reason= to the
1917 BuildSet to indicate which Scheduler triggered the build. Thanks
1918 to Mateusz Loskot for the suggestion.
1920 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
1922 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
1923 changes: set self.loop in __init__, remove unused volatile=
1925 * docs/buildbot.texinfo (.buildbot config directory): add more
1926 docs on the .buildbot/options keys used by "buildbot try"
1927 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
1928 (Try.deliverJob): same
1930 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
1932 (BonsaiPoller): same
1934 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
1935 close the filehandle when we stop watching the file. Before, the
1936 filehandle was only closed when the LogFileWatcher was
1937 garbage-collected, which could be quite a while in the future. If
1938 it was still open by the time the next build started, windows will
1939 refuse to let the new build delete the old build/ directory. Fixes
1940 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
1941 #twisted for the catch.
1943 2006-09-29 Brian Warner <warner@lothar.com>
1945 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
1948 2006-09-25 Brian Warner <warner@lothar.com>
1950 * setup.py: the new buildbot.steps module wasn't being installed.
1951 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
1952 (testmsgs): add the extra stuff from buildbot/test/* so you can
1953 run unit tests on an installed copy of buildbot, not just from
1956 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
1957 columns of 'svnlook changed' output contain status information, so
1958 strip [:4] instead of [:6]. Depending upon what the status flags
1959 were, this would sometimes lead to mangled filenames. Thanks to
1960 Riccardo Magliocchetti for the patch. Closes SF#1545146.
1962 * buildbot/steps/source.py (Monotone): initial Monotone support,
1963 contributed by Nathaniel Smith. Still needs docs and tests, but
1964 this code has been in use on the Monotone buildbot for a long
1966 * buildbot/slave/commands.py (Monotone): slave-side support
1967 * buildbot/changes/monotone.py (MonotoneSource): polling change
1970 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
1971 contributed a Change Source that polls a Bonsai server (a
1972 kind of web-based viewcvs CGI script).
1974 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
1975 Hearsum contributed a status plugin which sends email in the same
1976 format that Tinderbox does: this allows a number of tinderbox
1977 tools to be driven by Buildbot instead. Thanks Ben!
1979 2006-09-24 Brian Warner <warner@lothar.com>
1981 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
1982 Thanks to Robert Helmer for the patch.
1984 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
1985 BuildStatus about the buildslave name at the *beginning* of the
1986 build, rather than at the end. Thanks to Alexander Lorenz for the
1988 * buildbot/status/html.py (StatusResourceBuild.body): always
1989 include the slavename in the build page, not just when the build
1991 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
1992 slavename in the email message
1994 2006-09-21 Brian Warner <warner@lothar.com>
1996 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
1998 * docs/examples/glib_master.cfg: same
1999 * docs/examples/hello.cfg: same
2000 * docs/examples/twisted_master.cfg: same, update to current usage
2002 2006-09-19 Brian Warner <warner@lothar.com>
2004 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
2005 (PyFlakes.createSummary): make it compatible with python-2.2
2007 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
2008 for at least the output-parsing parts of PyFlakes
2010 2006-09-18 Brian Warner <warner@lothar.com>
2012 * buildbot/steps/python.py: oops, fix import of StringIO
2014 2006-09-17 Brian Warner <warner@lothar.com>
2016 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
2017 turns out that SVN-1.4.0 doesn't fail to update once you've
2018 replaced a file with a directory, unlike older versions of SVN and
2019 pretty much every other VC tool we support. Since what we really
2020 care about is that the update succeeds anyway, stop checking that
2021 the tree got clobbered and just assert that the build succeeded.
2022 (VCBase.printLogs): add a utility function for debugging
2024 * buildbot/process/step.py: oops, added extra imports by mistake
2026 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
2027 rstrip() on the first line coming out of the 'p4 describe'
2028 process, to remove the stray ^M that Wade Brainerd reports seeing
2029 in the 'when' field. Fixes SF#1555985.
2031 * buildbot/master.py (BuildMaster.loadConfig): improve the error
2032 message logged when c['schedulers'] is not right
2033 * buildbot/scheduler.py (Scheduler.__init__): improve error
2034 message when a Scheduler() is created with the wrong arguments
2035 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
2036 verify that these error messages are emitted
2038 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
2039 The idea is that all the base classes (like BuildStep and
2040 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
2041 will be a leftover backwards-compatibility file that only contains
2042 aliases for the steps that were moved out to buildbot.steps.*
2043 * lots: change imports to match
2044 * buildbot/process/step.py: add a DeprecationWarning if it ever
2047 2006-09-12 Brian Warner <warner@lothar.com>
2049 * buildbot/scheduler.py (Scheduler.__init__): make sure that
2050 builderNames= is actually a sequence, since if you happen to give
2051 it a single builder-specification dictionary instead, it won't get
2052 caught by the existing assert. Thanks to Brett Neely for the
2055 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
2057 * docs/buildbot.texinfo (Python BuildSteps): document them
2058 (sendchange): include a link to PBChangeSource, since you need one
2060 * buildbot/steps/shell.py: clean up test-case-name line, remove some
2062 * buildbot/steps/dummy.py: same
2064 2006-09-08 Brian Warner <warner@lothar.com>
2066 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
2067 BuildStep which lets you transfer files from the master to the
2068 slave or vice versa. Thanks to Albert Hofkamp for the original
2069 patch. Fixes SF#1504631.
2070 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
2072 (SlaveFileDownloadCommand): same
2073 * docs/buildbot.texinfo (Transferring Files): document it
2074 * buildbot/test/test_transfer.py: test it
2075 * buildbot/test/runutils.py (StepTester): new utility class for
2076 testing BuildSteps and RemoteCommands without Builds or Bots or PB
2077 * buildbot/test/test_steps.py (CheckStepTester): validate that the
2080 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
2081 walk through StatusLogs one line at a time, mostly for the benefit
2082 of ShellCommand.createSummary methods. You can either walk through
2083 STDOUT or STDERR, but the default is STDOUT.
2085 * buildbot/status/builder.py (LogFile.readlines): implement it.
2086 Note that this is not yet memory-efficient, it just pulls the
2087 whole file into RAM and then splits it up with a StringIO.
2088 Eventually this should be a generator that only pulls chunks from
2090 * buildbot/test/test_status.py (Log.testReadlines): test it
2092 * docs/buildbot.texinfo: update to match changes
2093 * buildbot/process/factory.py: stop using old definitions
2094 * buildbot/process/process_twisted.py: same
2095 * buildbot/test/test_*.py: same
2097 * buildbot/process/step_twisted.py: move definition to..
2098 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
2099 relative-import mechanisms prevent this from being named 'twisted'
2100 or 'python/twisted' as I would have preferred.
2102 * buildbot/process/maxq.py: move definition to..
2103 * buildbot/steps/maxq.py: .. here, leave a compatibility import
2105 * buildbot/process/step.py: split the user-visible BuildSteps into
2106 separate files, all under buildbot/steps/
2107 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
2108 * buildbot/steps/shell.py: this holds ShellCommand and friends
2109 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
2111 2006-09-05 Brian Warner <warner@lothar.com>
2113 * lots: run pyflakes, removed a lot of unused imports, changed the
2114 form of some conditional imports to remove false pyflakes
2115 warnings. There are still a number of warnings left, mostly from
2116 imports that are done for their side-effects.
2117 * buildbot/test/test_vc.py: import twisted.python.failure, since it
2120 2006-08-26 Brian Warner <warner@lothar.com>
2122 * buildbot/test/test_locks.py (Unit.testLater): make the tests
2123 compatible with twisted-1.3.0, for some reason I just can't seem
2124 to let go of the past.
2126 2006-08-25 Brian Warner <warner@lothar.com>
2128 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
2130 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
2131 all logfiles= in startCommand(), rather than in start() . This
2132 makes it easier to have the 'stdio' log come before any secondary
2133 logfiles, which I feel makes the waterfall display more
2135 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
2136 from ShellCommand up into LoggingBuildStep
2137 (LoggingBuildStep.__init__): move the handling of logfiles= from
2138 ShellCommand up to LoggingBuildStep, because startCommand is
2139 provided by LoggingBuildStep, whereas start() was specific to
2140 subclasses like ShellCommand and Source. This removes code
2141 duplication in those subclasses.
2142 (ShellCommand.__init__): same
2143 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
2144 for a slave that's too old to understand logfiles= into a separate
2145 method, so it can live in ShellCommand. The rest of
2146 setupLogfiles() can live in LoggingBuildStep.
2148 2006-08-24 Brian Warner <warner@lothar.com>
2150 * buildbot/locks.py (BaseLock): you can now configure Locks to
2151 allow multiple simultaneous owners. They still default to
2152 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
2154 * docs/buildbot.texinfo (Interlocks): document the new options
2155 * buildbot/test/test_locks.py: add a bunch of new unit tests
2156 * buildbot/process/base.py (Build.acquireLocks): locks now offer
2157 waitUntilMaybeAvailable, not waitUntilAvailable
2158 * buildbot/process/step.py (BuildStep.acquireLocks): same
2159 * buildbot/master.py (BotMaster.getLockByID): real locks now use
2160 the whole lockid in their constructor, not just the name. Also,
2161 keep track of which real locks we've handed out by the full
2162 lockid, not just class+name, otherwise changing just the maxCount=
2163 in the master.cfg file would not actually cause a behavioral
2166 2006-08-23 Brian Warner <warner@lothar.com>
2168 * buildbot/__init__.py (version): bump to 0.7.4+ while between
2170 * docs/buildbot.texinfo: same
2172 2006-08-23 Brian Warner <warner@lothar.com>
2174 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
2175 * docs/buildbot.texinfo: set version to match
2176 * NEWS: update for 0.7.4
2177 * buildbot/slave/commands.py (command_version): mention that this
2178 version (2.1) was released with buildbot-0.7.4
2180 2006-08-22 Brian Warner <warner@lothar.com>
2184 * CREDITS: new file, list of people who have helped. Thanks!
2185 * MANIFEST.in: ship it
2187 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
2188 new diagrams, the user's manual is more informative than it was.
2189 Start shipping the .html user's manual (and generated .png
2191 * Makefile: update 'release' target to match
2193 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
2194 test.. I think the web-parts effort will render it pointless well
2195 before it ever actually starts to work.
2197 2006-08-20 Brian Warner <warner@lothar.com>
2199 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
2200 meaning of the prefix= argument. It is now just a string which is
2201 stripped from the beginning of the filename. If prefix= is set but
2202 not found on any given filename, that filename is ignored. If all
2203 filenames in a Change are ignored, the Change is dropped. This is
2204 much simpler than the previous sep= nonsense, and I should have
2205 implemented it this way from the beginning. Effectively resolves
2206 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
2207 Gedminas for the catch and suggested fixes.
2208 (ChangePerspective.perspective_addChange): implement the actual
2210 * buildbot/test/test_changes.py (TestChangePerspective): test it
2211 * docs/buildbot.texinfo (PBChangeSource): document it, explain
2212 how to properly use prefix=
2213 * docs/examples/twisted_master.cfg (source): update prefix= by
2214 adding the trailing slash
2217 * docs/examples/twisted_master.cfg: update to actual practice
2219 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
2220 update test case to match new link text.. the HREF has both a
2221 class= setting and an enclosing [] pair that I didn't match in the
2224 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
2225 list of strings is preferred over a single string with embedded
2227 (ShellCommand.description=): explain that either single strings or
2228 a list of strings is acceptable, and why you might prefer one over
2229 the other. Add an example. Fixes SF#1524659, thanks to Paul
2230 Winkler for the catch.
2231 (Build Steps): update to use f.addStep() rather than using s()
2232 and the constructor list
2234 * buildbot/process/step.py (ShellCommand): accept either a single
2235 string or a list of strings in both description= and
2237 * buildbot/test/test_steps.py (Steps.test_description): test it
2238 * buildbot/test/runutils.py (makeBuildStep): support for that test
2240 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
2241 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
2242 collecting the files and creating the patch.
2244 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
2245 per-step URLs that will be displayed on the waterfall display,
2246 for things like the HTML output of code-coverage tools, when
2247 the results are hosted elsewhere.
2248 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
2249 way to retrieve these URLs
2250 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
2251 the method to retrieve these URLs. Also provide backwards
2252 compatibility for saved BuildStepStatus instances that didn't have
2254 * buildbot/process/step.py (BuildStep.addURL): method to set these
2255 URLs from within a BuildStep
2256 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
2257 (StepBox.getBox): give these external links a distinct CSS class
2258 named "BuildStep external" so a .css file can display them
2261 * buildbot/test/test_web.py (WaterfallSteps): test that we really
2263 * buildbot/test/test_steps.py (Steps): test that we can all the
2264 URLs. Also add a bunch of other tests on methods that can be
2265 called from within BuildSteps
2266 * buildbot/test/runutils.py (makeBuildStep): add utility function
2268 2006-08-13 Brian Warner <warner@lothar.com>
2270 * docs/buildbot.texinfo (BuildStep LogFiles): document them
2272 2006-08-10 Brian Warner <warner@lothar.com>
2274 * docs/buildbot.texinfo (Index of master.cfg keys): add another
2275 index, this one of things like c['sources'] and c['schedulers']
2276 (indices): it looks like my clever idea of putting the @fooindex
2277 commands in between the @node and the @subsection (to make the
2278 HREF anchor jump to slightly above the section title, which works
2279 much better in html) confused texinfo horribly, so I'm moving the
2280 index tags back to be just after the @subsection marker. I also
2281 added extra lines between the @node/@section paragraph and the
2282 index tags, since I think maybe texinfo wants to see these be
2283 separate paragraphs.
2285 * docs/Makefile (images): make sure images get built when
2286 rendering the manual
2287 * docs/images/Makefile: same
2289 * buildbot/scripts/runner.py: rename 'buildbot master' to
2290 'buildbot create-master', and 'buildbot slave' to 'buildbot
2292 * docs/buildbot.texinfo: same
2295 * docs/buildbot.texinfo: reimplement the "useful classes" index
2296 with actual texinfo indices. The .info rendering is a bit
2297 weird-looking but it works well, and the HTML rendering is quite
2298 nice. This also puts the index targets in the regular flow of the
2299 text, which is easier to maintain.
2301 2006-08-06 Brian Warner <warner@lothar.com>
2303 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
2304 Kevin Turner to prefer the environ= argument be a list rather than
2305 a string. If it is a list, it will be joined with a platform-local
2306 os.pathsep delimiter, and then prepended to any existing
2307 $PYTHONPATH value. This works better in cross-platform (i.e.
2308 windows buildslaves) environments when you need to push multiple
2309 directories onto the front of the path.
2310 (SlaveShellCommand): documented the new magic
2311 * docs/buildbot.texinfo (ShellCommand): documented the new magic
2312 in a user-visible form
2314 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
2315 Turner to prefer lists over strings when creating/running VC
2316 commands during unit tests. This is clearly necessary to survive
2317 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
2318 renamed the wq() function to qw() though, since that's how it's
2319 spelled in perl. Eventually I'd prefer all commands to be
2320 specified with lists.
2322 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
2323 which are deleted (or not yet created) correctly. Also add
2324 failsafe code to not explode if the file-watching poller doesn't
2325 get started. Thanks to JP Calderone for the catch and the poller
2327 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
2329 * buildbot/test/emitlogs.py: same
2331 * NEWS: summarize recent changes
2333 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
2334 clause to avoid the "host key mismatch" warning
2336 * buildbot/process/step_twisted.py (Trial.start): if the
2337 buildslave is too old to understand logfiles=, fall back to
2338 running 'cat _trial_temp/test.log' like before.
2339 (Trial.commandComplete): same. this takes advantage of the
2340 LoggingBuildStep refactoring to stall commandComplete long enough
2341 to run a second RemoteShellCommand.
2343 * buildbot/process/step.py (LoggingBuildStep.startCommand):
2344 refactor command-completion handling, to allow methods like
2345 commandComplete/createSummary/evaluateCommand to return Deferreds.
2346 (LoggingBuildStep._commandComplete): delete the refactored method
2347 (ShellCommand.setupLogfiles): if the buildslave is too old to
2348 understand logfiles=, put a warning message both into twistd.log
2349 and into the otherwise empty user-visible LogFiles.
2351 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
2352 callers to provide the slave-side logfile name, rather than
2353 forcing it to come from the local name of the LogFile.
2354 (BuildStep.getSlaveName): new method
2356 * buildbot/process/base.py (Build.getSlaveName): new method, so
2357 steps can find out which buildslave they're running on
2359 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
2360 to match the s/cvs_ver/command_version/ change
2362 2006-08-05 Brian Warner <warner@lothar.com>
2364 * buildbot/slave/commands.py (command_version): replace the CVS
2365 auto-updated cvs_ver keyword with a manually-updated variable,
2366 since CVS is no longer the master repository. Add a description of
2367 the remote API change starting in this version (2.1), specifically
2368 the fact that SlaveShellCommand now accepts 'initial_stdin',
2369 'keep_stdin_open', and 'logfiles'.
2371 2006-07-31 Brian Warner <warner@lothar.com>
2373 * docs/buildbot.texinfo (System Architecture): Finally add lots of
2374 diagrams to describe how the whole system fits together. The
2375 images themselves are kept in SVG files, with ascii-art versions
2376 in corresponding .txt files. Texinfo knows how to interpolate the
2377 text version into .info files, reference the .png versions from
2378 .html files, and include .eps versions in the .ps format.
2379 * docs/images/Makefile: tools to create .png and .eps
2380 * docs/images/*.svg: created pictures with Inkscape.
2381 * .darcs-boring: ignore the generated .eps and .png files
2383 2006-07-24 Brian Warner <warner@lothar.com>
2385 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
2386 Scheduler names, since they cause setServiceParent to explode
2388 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
2390 2006-07-20 Brian Warner <warner@lothar.com>
2392 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
2393 which runs the buildbot unit tests
2395 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
2396 classes that are useful in master.cfg
2398 2006-07-15 Brian Warner <warner@lothar.com>
2400 * Makefile (some-apidocs): new target to build only some epydocs
2402 * setup.py: minor comment.. does the classifiers= argument prevent
2403 the setup.py script from working on python2.2/2.3?
2405 * buildbot/scripts/sample.cfg: update manhole example, arrange into
2408 * buildbot/twcompat.py: fix minor typo in comments
2410 * buildbot/manhole.py: move all Manhole-related code out to this
2411 module. Implement SSH-based manholes (with TwistedConch), and move
2412 to conch's nifty line-editing syntax-coloring REPL shell instead
2413 of the boring non-editing monochromatic (and deprecated) old
2415 * buildbot/master.py: remove all Manhole-related code
2416 (BuildMaster.loadConfig._add): make sure the old manhole is
2417 removed before we add the new one
2418 * docs/buildbot.texinfo (Debug options): document new Manhole options
2420 * buildbot/twcompat.py (_which): fix some epydoc issues
2421 * buildbot/status/html.py (Waterfall.__init__): same
2423 2006-06-29 Brian Warner <warner@lothar.com>
2425 * buildbot/interfaces.py: get Interface from b.twcompat to hush
2426 deprecation warnings under newer Twisteds (by using
2427 zope.interface.Interface instead of old twisted.python.components
2429 * buildbot/slave/interfaces.py: same
2431 2006-06-28 Brian Warner <warner@lothar.com>
2433 * buildbot/slave/commands.py (SVN): add --non-interactive to all
2434 svn commands, so it will fail immediately instead of hanging while
2435 it waits for a username/password to be typed in.
2437 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
2438 log message if the step was shut down
2440 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
2441 obsolete reference to mktap.
2443 2006-06-20 Brian Warner <warner@lothar.com>
2445 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
2446 test to include new 'logfiles' argument sent from master to slave
2448 2006-06-19 Brian Warner <warner@lothar.com>
2450 * buildbot/process/step_twisted.py (Trial): track Progress from
2451 _trial_temp/test.log too
2453 * buildbot/process/step.py (OutputProgressObserver): generalize
2454 the earlier StdioProgressObserver into an OutputProgressObserver
2455 that can track LogFiles other than stdio.
2456 (LoggingBuildStep.__init__): same
2458 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
2459 _trial_temp/test.log, not a separate 'cat' command. TODO: this
2460 will fail under windows because of os.sep issues. It might have
2461 worked before if 'cat' was doing cygwin path conversion.
2463 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
2464 creation of LogFileWatchers
2465 (ShellCommand._startCommand): and record the files that were
2466 watched in the 'headers' section of the ShellCommand output
2468 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
2469 need to actually pass it to the slave if you want it to work.
2470 (ShellCommand): document it a bit
2472 * buildbot/test/test_shell.py: new test to validate LogFiles
2473 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
2475 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
2476 before printing the last batch of lines, to test that the polling
2477 logic is working properly
2479 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
2480 handling, making it possible to track multiple logs for a single
2481 RemoteCommand. The previous single logfile is now known as the
2483 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
2484 (RemoteShellCommand.__init__): accept logfiles=
2485 (LoggingBuildStep.startCommand): stdio_log is now one of many
2486 (ShellCommand): added logfiles= argument, as well as a class-level
2487 .logfiles attribute, which will be merged together to figure out
2488 which logfiles should be tracked. The latter maybe be useful for
2489 subclasses of ShellCommand which know they will aways produce
2490 secondary logfiles in the same location.
2492 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
2493 and closeStdin() methods, preparing to make it possible to write
2494 to a ShellCommand's stdin at any time, not just at startup. These
2495 writes are buffered if the child process hasn't started yet.
2496 (LogFileWatcher): new helper class to watch arbitrary logfiles
2497 while a ShellCommand runs. This class polls the file every two
2498 seconds, and sends back 10k chunks to the buildmaster.
2499 (ShellCommand): rename stdin= to initialStdin=, and add
2500 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
2502 (ShellCommand.addLogfile): LogFile text is sent in updates with a
2503 key of "log" and a value of (logname, data).
2504 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
2505 'logfiles' to the master-visible args dictionary.
2506 (SourceBase.doPatch): match s/stdin/initialStdin/ change
2509 * buildbot/test/test_vc.py (Patch.testPatch): same
2512 * buildbot/test/emit.py: write to a logfile in the current
2513 directory. We use this to figure out what was used as a basedir
2514 rather than looking to see which copy of emit.py gets run, so that
2515 we can run the commands from inside _trial_temp rather than inside
2517 * buildbot/test/subdir/emit.py: same
2518 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
2519 argument rather than running from buildbot/test/
2520 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
2521 rather than using an implicit setUp()
2522 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
2523 (ShellBase.testShell1, etc): use explicit path to emit.py instead
2524 of assuming that we're running in buildbot/test/ (and that '.' is
2527 * buildbot/slave/commands.py (Command.doStart): refactor Command
2528 startup/completion a bit: now the SlaveBuilder calls doStart(),
2529 which is not meant for overridding by subclasses, and doStart()
2530 calls start(), which is. Likewise the SlaveBuilder calls
2531 doInterrupt(), and subclasses override interrupt(). This also puts
2532 responsibility for maintaining .running in Command rather than in
2534 (Command.doInterrupt): same
2535 (Command.commandComplete): same, this is called when the deferred
2536 returned by start() completes.
2537 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
2538 (SlaveBuilder.remote_interruptCommand): same
2539 (SlaveBuilder.stopCommand): same
2541 2006-06-16 Brian Warner <warner@lothar.com>
2543 * buildbot/test/test_shell.py: new test file to contain everything
2544 relating to ShellCommand
2545 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
2546 multiple logfiles in realtime" feature, not yet implemented
2547 * buildbot/test/emitlogs.py: support file for testLogFiles
2548 * docs/buildbot.texinfo (ShellCommand): document the feature
2550 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
2552 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
2553 for tests which exercise SlaveCommands in isolation.
2555 * buildbot/test/test_slavecommand.py: Move some utilities like
2556 SignalMixin and FakeSlaveBuilder from here ..
2557 * buildbot/test/runutils.py: .. to here, so they can be used by
2558 other test classes too
2559 * buildbot/test/test_vc.py: more SignalMixin refactoring
2560 * buildbot/test/test_control.py: same
2561 * buildbot/test/test_run.py: and some rmtree refactoring
2563 2006-06-15 Brian Warner <warner@lothar.com>
2565 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
2566 'testBranch' to match other VC tests and have the tests run in
2567 roughly increasing order of dependency
2569 * buildbot/test/test_steps.py (LogObserver): new test to verify
2570 LogObservers can be created at various times and still get
2571 connected up properly
2573 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
2574 to create BuildStepStatus instances that actually work.
2576 * buildbot/process/step.py (LogObserver): add outReceived and
2577 errReceived base methods, to be overridden
2579 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
2580 API to take a name instead of a step, reducing the coupling
2581 somewhat. This returns the BuildStepStatus object so it can be
2582 passed to the new Step, instead of jamming it directly into the
2584 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
2586 * buildbot/process/base.py (Build.setupBuild): use both methods
2587 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
2588 process a bit to match
2590 2006-06-14 Brian Warner <warner@lothar.com>
2592 * docs/buildbot.texinfo (Adding LogObservers): add some limited
2593 docs on writing new LogObserver classes
2594 (Writing New Status Plugins): brief docs on how Status Plugins fit
2597 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
2598 implement a LogObserver that counts how many unit tests have been
2600 (Trial.__init__): wire it in
2601 * buildbot/test/test_twisted.py (Counter): unit test for it
2603 * buildbot/process/step_twisted.py (HLint.commandComplete): update
2604 to new cmd.logs['stdio'] scheme
2605 (Trial.commandComplete): same
2606 (BuildDebs.commandComplete): same
2608 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
2609 LogFiles, instead of just a single one. The old single logfile is
2610 now called "stdio". LoggedRemoteCommand no longer creates a
2611 LogFile for you (the code to do that was broken anyway). If you
2612 don't create a "stdio" LogFile, then stdout/stderr will be
2614 (LogObserver): implement "LogObservers", which a BuildStep can add
2615 to parse the output of a command in real-time. The primary use is
2616 to provide more useful information to the Progress code, allowing
2617 better ETA estimates.
2618 (LogLineObserver): utility subclass which feeds complete lines to
2619 the parser instead of bytes.
2620 (BuildStep.progressMetrics): this is safer as a tuple
2621 (BuildStep.setProgress): utility method, meant to be called by
2623 (BuildStep.addLogObserver): new method, to be called at any time
2624 during the BuildStep (even before any LogFiles have been created),
2625 to attach (or schedule for eventual attachment) a LogObserver to a
2627 (StdioProgressObserver): new LogObserver which replaces the old
2628 "output" progress gatherer
2629 (LoggingBuildStep.__init__): same
2630 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
2631 (LoggingBuildStep._commandComplete): must use logs['stdio']
2632 instead of the old single ".log" attribute.
2633 * buildbot/status/builder.py (LogFile): remove old logProgressTo
2634 functionality, now subsumed into StdioProgressObserver
2635 * buildbot/test/test_status.py (Subscription._testSlave_2): the
2636 log name changed from "output" to "stdio".
2639 * buildbot/interfaces.py (ILogFile): add the Interface used from
2640 the BuildStep towards the LogFile
2641 (ILogObserver): and the one provided by a LogObserver
2642 * buildbot/status/builder.py (LogFile): implement it
2644 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
2645 HEADER constants here ..
2646 * buildbot/status/builder.py (STDOUT): .. from here
2648 2006-06-13 Brian Warner <warner@lothar.com>
2650 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
2651 compatibility with python2.2, which doesn't have the 'substr in
2653 (TestP4Poller.makeTime): utility function to construct the
2654 timestamp using the same strptime() approach as p4poller does. It
2655 turns out that time.mktime() behaves slightly differently under
2656 python2.2, probably something to do with the DST flag, and that
2657 causes the test to fail under python2.2. (changing the mktime()
2658 arguments to have dst=0 instead of -1 caused it to fail under
2659 python2.3. Go figure.)
2660 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
2662 2006-06-12 Brian Warner <warner@lothar.com>
2664 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
2665 proper Perforce (P4) support. Many many thanks to Scott Lamb for
2666 contributing such an excellent patch, including docs and unit
2667 tests! This makes it *so* much easier to apply. I had to update
2668 test_vc.py to handle some recent refactorings, but everything else
2669 applied smoothly. The only remaining thing I'd like to fix would
2670 be to remove the hard-wired port 1666 used by p4d, and allow it to
2671 claim any unused port. This would allow two copies of the test
2672 suite to run on the same host at the same time, as well as
2673 allowing the test suite to run while a real (production) p4d was
2674 running on the same host. Oh, and maybe we should add a warning to
2675 step.P4 that gets emitted if the slave is too old to provide the
2676 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
2677 * buildbot/slave/commands.py (P4): same
2678 (P4Sync): same, some minor updates
2679 * buildbot/changes/p4poller.py: same
2680 * docs/buildbot.texinfo: same
2681 * buildbot/test/test_p4poller.py: same
2682 * buildbot/test/test_vc.py (P4): same
2684 * setup.py: add Trove classifiers for PyPI
2686 2006-06-08 Brian Warner <warner@allmydata.com>
2688 * buildbot/status/client.py
2689 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
2690 changing this from getCurrentBuild() to getCurrentBuilds(). Each
2691 build needs to be IRemote'd separately, rather than IRemote'ing
2692 the whole list at once. I can't wait until newpb's serialization
2693 adapters make this unnecessary.
2695 2006-06-06 Brian Warner <warner@lothar.com>
2697 * buildbot/process/step.py (WithProperties): make this inherit
2698 from ComparableMixin, so that reloading an unchanged config file
2699 doesn't cause us to spuriously reload any Builders which use them.
2700 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
2703 2006-06-03 Brian Warner <warner@lothar.com>
2705 * contrib/windows/{setup.py, buildbot_service.py}: add support for
2706 running py2exe on windows, contributed by Mark Hammond. Addresses
2707 SF#1401121, but I think we still need to include
2708 buildbot/scripts/sample.cfg
2709 * setup.py: include buildbot_service.py as a script under windows
2710 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
2711 a py2exe application), get the icon/css datafiles from a different
2714 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
2715 double-escape the build URL. Thanks to Olivier Bonnet for the
2716 patch. Fixes SF#1452801.
2718 2006-06-02 Brian Warner <warner@lothar.com>
2720 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
2721 first six columns of 'svnlook' output, not just the first column,
2722 since property changes appear in the other five. Thanks to Olivier
2723 Bonnet for the patch. Fixes SF#1398174.
2725 2006-06-01 Brian Warner <warner@lothar.com>
2727 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
2728 the fake build, so that title= has something to be set to
2730 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
2731 attribute of the "Build #NN" link in the yellow start-the-build
2732 box to the build's reason. This means that you get a little
2733 tooltip explaining why the build was done when you hover over the
2734 yellow box. Thanks to Zandr Milewski for the suggestion.
2736 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
2737 (Box.setETA): handle ETA=None (by stopping the timer)
2738 (Box.update): make the [soon] text less different than the usual
2739 text, so the rest of the text doesn't flop around so much. It
2740 would be awfully nice to figure out how to center this stuff.
2741 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
2743 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
2744 by default, so that any ShellCommand which fails marks the overall
2745 build as a failure. I should have done this from the beginning.
2746 Add flunkOnFailure=False to the arguments if you want to turn off
2749 2006-05-30 Brian Warner <warner@lothar.com>
2751 * buildbot/clients/gtkPanes.py: add a third row: now it shows
2752 last-build/current-build/current-step. Show what step is currently
2753 running. Show ETA for both the overall build and the current step.
2754 Update GTK calls to modern non-deprecated forms. There's still a
2755 lot of dead code and debug noise to remove.
2757 * buildbot/process/step_twisted.py (Trial): set the step name, so it
2758 shows up properly in status displays
2760 2006-05-28 Brian Warner <warner@lothar.com>
2762 * buildbot/test/test_properties.py (Run.testInterpolate): on the
2763 build we use to verify that WithProperties works:
2765 ** set flunkOnFailure=True so that build failures get noticed
2766 ** set workdir='.' so that the build succeeds, otherwise it is trying
2767 to touch 'build/something', and 'build/' doesn't exist because
2768 usually that's created by a Source step
2769 ** set timeout=10, because Twisted-1.3.0 has a race condition that
2770 this test somehow triggers, in which the 'touch' process becomes
2771 a zombie and we wait for th etimeout before giving up on it.
2773 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
2774 to log the Build results and step logs to the twisted log.
2775 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
2776 what went wrong if a build was expected to succeed but didn't.
2778 * buildbot/process/step_twisted.py (Trial): set the default
2779 trialMode to '--reporter=bwverbose', which specifies verbose
2780 black-and-white text. Back in twisted-1.3/2.0 days we had to use
2781 '-to', but those are completely missing in modern Twisteds.
2783 * buildbot/scripts/sample.cfg: make the sample Manhole config use
2784 a localhost-only port, to encourage better security
2786 * docs/buildbot.texinfo (Change Sources): mention
2789 * .darcs-boring: add a Darcs boringfile
2791 * README (REQUIREMENTS): stop claiming compatibility with
2794 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
2797 2006-05-27 Brian Warner <warner@lothar.com>
2799 * buildbot/__init__.py: bump to 0.7.3+ while between releases
2800 * docs/buildbot.texinfo: same
2802 2006-05-23 Brian Warner <warner@lothar.com>
2804 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
2805 * docs/buildbot.texinfo: set version to match
2806 * NEWS: update for 0.7.3
2808 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
2809 give a quick mapping from VC system to possible ChangeSources
2810 (Build Properties): add 'buildername'
2812 * buildbot/process/base.py (Build.setupStatus): oops, set
2813 'buildername' and 'buildnumber' properties
2814 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
2817 2006-05-22 Brian Warner <warner@lothar.com>
2819 * docs/buildbot.texinfo (Build Properties): explain the syntax of
2820 property interpolation better
2822 * README (INSTALLATION): remove old '-v' argument from recommended
2825 * docs/buildbot.texinfo (ShellCommand): add docs for description=
2826 and descriptionDone= arguments. Thanks to Niklaus Giger for the
2829 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
2830 'svnversion' instead of grepping the output of 'svn info', much
2831 simpler and avoids CR/LF problems on windows. Thanks to Olivier
2832 Bonnet for the suggestion.
2833 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
2834 require the WC_PATH argument, so run 'svnversion .' instead.
2836 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
2837 aren't supposed to have 'self' in their argument list
2839 2006-05-21 Brian Warner <warner@lothar.com>
2841 * buildbot/process/step.py (ShellCommand.start): make
2842 testInterpolate pass. I was passing the uninterpolated command to
2843 the RemoteShellCommand constructor
2844 (ShellCommand._interpolateProperties): oops, handle non-list
2845 commands (i.e. strings with multiple words separated by spaces in
2846 them) properly, instead of forgetting about them.
2848 * buildbot/test/test_properties.py (Run.testInterpolate): new test
2849 to actually try to use build properties in a real build. This test
2851 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
2852 to start and evaluate builds
2854 * buildbot/test/test__versions.py: add a pseudo-test to record
2855 what version of Twisted/Python/Buildbot are running. This should
2856 show up at the beginning of _trial_tmp/test.log, and exists to help
2857 debug other problems.
2859 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
2860 a filename to be served as 'robots.txt' to discourage web spiders.
2861 Adapted from a patch by Tobi Vollebregt, thanks!
2862 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
2863 (Waterfall.test_waterfall): tweak the way that filenames are put
2864 into the config file, to accomodate windows pathnames better.
2866 * docs/buildbot.texinfo (HTML Waterfall): document it
2868 * buildbot/process/process_twisted.py
2869 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
2870 changed the build process. The new setup.py no longer takes the
2872 (FullTwistedBuildFactory.__init__): same
2873 (TwistedReactorsBuildFactory.__init__): same
2875 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
2876 be placed in the [hooks] section of the central repository (the
2877 one that everybody pushes changes to).
2879 2006-05-20 Brian Warner <warner@lothar.com>
2881 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
2882 .darcs-context file, use binary mode. I think this was causing a
2883 Darcs failure under windows.
2885 2006-05-19 Brian Warner <warner@lothar.com>
2887 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
2888 use a timezone string of +0000 and gmtime, since this timestamp is
2889 sent to a buildmaster and %z is broken.
2891 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
2892 string and localtime, since this timestamp will only be consumed
2893 locally, and %z is broken.
2895 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
2896 gmtime, since this timestamp is returned to the buildmaster, and
2899 2006-05-18 Brian Warner <warner@lothar.com>
2901 * NEWS: update in preparation for next release
2903 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
2904 setup-repository and do-we-have-the-vc-tools code into a separate
2905 "helper" class, which sticks around in a single module-level
2906 object. This seems more likely to continue to work in the future
2907 than having it hide in the TestCase and hope that TestCases stick
2908 around for a long time.
2910 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
2911 addremove' has been deprecated in recent versions of mercurial, so
2912 use 'hg add' instead
2914 2006-05-07 Brian Warner <warner@lothar.com>
2916 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
2917 operating under windows, move the file before opening it, since
2918 you can't rename a file that somebody has open.
2920 * buildbot/process/base.py (Build.setupBuild): if something goes
2921 wrong while creating a Step, log the name and arguments, since the
2922 error message when you get the number of arguments wrong is really
2925 2006-05-06 Brian Warner <warner@lothar.com>
2927 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
2928 bugs in twisted-specific code not covered by my unit tests, this
2929 time use 'cmd' argument instead of self.cmd
2931 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
2932 fix stupid braino: either use startwith or find()==0, not both.
2933 (TwistedReactorsBuildFactory.__init__): another dumb typo
2935 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
2936 mark this test as TODO under windows, since process-killing seems
2937 dodgy there. We'll come back to this later and try to fix it
2940 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
2941 and don't include a timezone
2942 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
2943 This should avoid the windows-with-verbose-timezone-name problem
2945 (Patch.testPatch): add a test which runs 'patch' with less
2946 overhead than the full VCBase.do_patch sequence, to try to isolate
2947 a windows test failure. This one uses slave.commands.ShellCommand
2948 and 'patch', but none of the VC code.
2950 * buildbot/slave/commands.py (getCommand): use which() to find the
2951 executables for 'cvs', 'svn', etc. This ought to help under
2954 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
2955 working directory before starting. If an earlier test failed, the
2956 leftover directory would mistakenly flunk a later test.
2957 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
2958 Make sure that we use the right commandlines if which("tla") picks
2959 up "tla.exe" (as it does under windows).
2960 (TlaSupport.do_get): factor out this tla-vs-baz difference
2961 (TlaSupport.vc_create): more tla-vs-baz differences
2963 * buildbot/test/test_slavecommand.py
2964 (ShellBase.testShellMissingCommand): stop trying to assert
2965 anything about the error message: different shells on different
2966 OSes with different languages makes it hard, and it really isn't
2967 that interesting of a thing to test anyway.
2969 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
2970 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
2971 "Panther"), because it has a bug which flunks a couple tests in
2972 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
2973 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
2974 able to test that yet.
2976 2006-04-30 Brian Warner <warner@lothar.com>
2978 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
2979 make sure child commands emit messages in english, so our regexps
2980 will match. Thanks to Nikaus Giger for identifying the problems.
2981 (VCBase._do_vctest_export_1): mode="export" is not responsible
2982 for setting the "got_revision" property, since in many cases it is
2983 not convenient to determine.
2984 (SVNSupport.capable): when running 'svn --version' to check for
2985 ra_local, we want error messages in english
2986 * buildbot/test/test_slavecommand.py
2987 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
2988 to emit the error message in english
2990 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
2991 the environment with $LC_ALL="C" so that Commands which need to
2992 parse the output of their child processes can obtain it in
2994 (SVN.parseGotRevision): call "svn info" afterwards instead of
2995 watching the output of the "svn update" or "svn checkout".
2996 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
2997 (Arch.parseGotRevision): same
2998 (Bazaar.parseGotRevision): same
2999 (Mercurial.parseGotRevision): same
3001 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
3002 $LC_ALL="C" when running commands under 'buildbot try', too
3004 * buildbot/test/__init__.py: remove the global os.environ()
3005 setting, instead we do it just for the tests that run commands and
3006 need to parse their output.
3008 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
3009 remove the overly-short .timeout on this test, because non-DNotify
3010 platforms must fall back to polling which happens at 10 second
3011 intervals, so a 5 second timeout would never succeed.
3013 2006-04-24 Brian Warner <warner@lothar.com>
3015 * docs/buildbot.texinfo (Installing the code): update trial
3016 invocation, SF#1469116 by Niklaus Giger.
3017 (Attributes of Changes): updated branch-name examples to be
3018 a bit more realistic, SF#1475240 by Stephen Davis.
3020 * contrib/windows/buildbot2.bat: utility wrapper for windows
3021 developers, contributed by Nick Trout (after a year of neglect..
3022 sorry!). SF#1194231.
3024 * buildbot/test/test_vc.py (*.capable): store the actual VC
3025 binary's pathname in VCS[vcname], so it can be retrieved later
3026 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
3027 strip out non-numeric timezone information, specifically the funky
3028 German string that his system produced that confuses CVS.
3029 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
3030 allow Darcs tests to work on windows
3031 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
3032 procutils.which() everywhere, to allow tryclient to work under
3033 windows. Also from Niklaus Giger, SF#1463394.
3035 * buildbot/twcompat.py (which): move the replacement for a missing
3036 twisted.python.procutils.which from test_vc.py to here, so it can
3037 be used in other places too (specifically tryclient.py)
3039 2006-04-23 Brian Warner <warner@lothar.com>
3041 * buildbot/status/html.py (StatusResourceBuild.body): replace the
3042 bare buildbotURL/projectName line with a proper DIV, along with a
3043 CSS class of "title", from Stefan Seefeld (SF#1461675).
3044 (WaterfallStatusResource.body0): remove the redundant 'table'
3045 class from the table
3046 (WaterfallStatusResource.body): same. Also add class="LastBuild"
3047 to the top-row TR, and class="Activity" to the second-row TR,
3048 rather than putting them in the individual TD nodes.
3050 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
3051 'got_revision' build property for all VC systems that implement
3052 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
3054 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
3055 to determine which revision we actually obtained
3056 (CVS.parseGotRevision): implement this for CVS, which just means
3057 to grab a timestamp. Not ideal, and it depends upon the buildslave
3058 having a clock that is reasonably well syncronized with the server,
3059 but it's better than nothing.
3060 (SVN.parseGotRevision): implement it for SVN, which is accurate
3061 (Darcs.parseGotRevision): same
3062 (Arch.parseGotRevision): same
3063 (Bazaar.parseGotRevision): same
3064 (Mercurial.parseGotRevision): same
3066 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
3067 keep a record of all non-stdout/stderr/header/rc status updates,
3068 for the benefit of RemoteCommands that send other useful things,
3070 (Source.commandComplete): put any 'got_revision' status values
3071 into a build property of the same name
3074 * buildbot/process/step_twisted.py (Trial): update to deal with
3075 new ShellCommand refactoring
3077 * docs/buildbot.texinfo (Build Properties): document new feature
3078 that allows BuildSteps to get/set Build-wide properties like which
3079 revision was requested and/or checked out.
3081 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
3082 * buildbot/status/builder.py (BuildStatus.getProperty): implement
3083 it. Note that this bumps the persistenceVersion of the saved Build
3084 object, so add the necessary upgrade-old-version logic to include
3085 an empty properties dict.
3087 * buildbot/process/base.py (Build.setProperty): implement it
3088 (Build.getProperty): same
3089 (Build.startBuild): change build startup to set 'branch',
3090 'revision', and 'slavename' properties at the right time
3092 * buildbot/process/step.py (BuildStep.__init__): change setup to
3093 require 'build' argument in a better way
3094 (LoggingBuildStep): split ShellCommand into two pieces, for better
3095 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
3096 a single RemoteCommand that sends stdout/stderr status text. It
3097 also provides the usual commandComplete / createSummary /
3098 evaluateCommand / getText methods to be overridden...
3099 (ShellCommand): .. whereas ShellCommand is specifically for
3100 running RemoteShellCommands. Other shell-like BuildSteps (like
3101 Source) can inherit from LoggingBuildStep instead of ShellCommand
3102 (WithProperties): marker class to do build-property interpolation
3103 (Source): inherit from LoggingBuildStep instead of ShellCommand
3106 * buildbot/test/test_properties.py: test new functionality
3108 2006-04-21 Brian Warner <warner@lothar.com>
3110 * buildbot/test/test_vc.py: rename testBranch to
3111 testCheckoutBranch to keep the tests in about the right
3114 2006-04-18 Brian Warner <warner@lothar.com>
3116 * docs/buildbot.texinfo (PBListener): improve cross-references
3117 between PBListener and 'buildbot statusgui', thanks to John Pye
3120 2006-04-17 Brian Warner <warner@lothar.com>
3122 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
3123 running under Twisted-1.3.0, otherwise skipped tests are reported
3126 * all: use isinstance() instead of 'type(x) is foo', suggested by
3129 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3130 oops, fix a brain-fade from the other week, when making the
3131 addStep changes. I changed all the __init__ upcalls to use the
3132 wrong superclass name.
3133 (FullTwistedBuildFactory.__init__): same
3134 (TwistedDebsBuildFactory.__init__): same
3135 (TwistedReactorsBuildFactory.__init__): same
3136 (TwistedBuild.isFileImportant): use .startswith for clarity,
3137 thanks to Neal Norwitz for the suggestions.
3139 * contrib/viewcvspoll.py: script to poll a viewcvs database for
3140 changes, then deliver them over PB to a remote buildmaster.
3142 * contrib/svnpoller.py: added script by John Pye to poll a remote
3143 SVN repository (by running 'svn log') from a cronjob, and run
3144 'buildbot sendchange' to deliver the changes to a remote
3146 * contrib/svn_watcher.py: added script by Niklaus Giger (a
3147 modification of svnpoller.py), same purpose, but this one loops
3148 internally (rather than expecting to run from a cronjob) and works
3150 * contrib/README.txt: same
3152 2006-04-11 Brian Warner <warner@lothar.com>
3154 * all: fix a number of incorrect names and missing imports, thanks
3155 to Anthony Baxter for the patch.
3156 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
3157 remove unused buggy method.
3158 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
3159 comes from shutil, not "shutils"
3160 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
3161 (Arch.checkSlaveVersion): same
3162 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
3164 * buildbot/process/step_twisted2.py: add some missing imports
3165 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
3166 this code used to live in twisted.internet.defer
3168 2006-04-10 Brian Warner <warner@lothar.com>
3170 * buildbot/process/step.py (Mercurial): add Mercurial support
3171 * buildbot/slave/commands.py (Mercurial): same
3172 * buildbot/scripts/tryclient.py (MercurialExtractor): same
3173 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
3174 not yet tested, but 'try' support *is* covered
3175 * docs/buildbot.texinfo (Mercurial): document it
3177 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
3178 some debugging messages (turned off)
3179 * buildbot/test/test_vc.py: improve debug messages
3181 2006-04-07 Brian Warner <warner@lothar.com>
3183 * buildbot/test/test_vc.py (which): define our own which() in case
3184 we can't import twisted.python.procutils, because procutils doesn't
3185 exist in Twisted-1.3
3187 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
3188 of SlaveLocks for performance tests
3190 * docs/examples/twisted_master.cfg: update to match current usage
3192 * buildbot/changes/p4poller.py (P4Source): add new arguments:
3193 password, p4 binary, pollinterval, maximum history to check.
3194 Patch from an anonymous sf.net contributor, SF#1219384.
3195 * buildbot/process/step.py (P4Sync.__init__): add username,
3196 password, and client arguments.
3197 * buildbot/slave/commands.py (P4Sync): same
3199 2006-04-05 Brian Warner <warner@lothar.com>
3201 * buildbot/process/factory.py (BuildFactory.addStep): new method
3202 to add steps to a BuildFactory. Use it instead of f.steps.append,
3203 and you can probably avoid using the s() convenience function.
3204 Patch from Neal Norwitz, sf.net #1412605.
3205 (other): update all factories to use addStep
3206 * buildbot/process/process_twisted.py: update all factories to use
3209 2006-04-03 Brian Warner <warner@lothar.com>
3211 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
3212 work under windows too. Adapted from a patch by Niklaus Giger,
3213 addresses SF#1463399.
3215 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
3216 spawned commands emit parseable results in english and not some
3217 other language. Patch from Niklaus Giger, SF#1463395.
3219 * README (INSTALLATION): discourage users from running unit tests on
3220 a "network drive", patch from Niklaus Giger, SF#1463394.
3222 2006-03-22 Brian Warner <warner@lothar.com>
3224 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
3225 function to turn a repository-relative pathname into a (branch,
3226 branch-relative-filename) tuple. Change this function to handle
3227 the branch naming policy used by your Subversion repository.
3228 Thanks to AllMyData.com for sponsoring this work.
3230 2006-03-16 Brian Warner <warner@lothar.com>
3232 * buildbot/scripts/sample.cfg: add python-mode declaration for
3233 vim. Thanks to John Pye for the patch.
3235 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
3236 command line, mention the importance of running 'crontab' as the
3237 buildmaster/buildslave user. Thanks to John Pye for the catch.
3239 2006-03-13 Brian Warner <warner@lothar.com>
3241 * buildbot/status/words.py (IRC): add an optional password=
3242 argument, which will be sent to Nickserv in an IDENTIFY message at
3243 login, to claim the nickname. freenode requires this before the
3244 bot can sent (or reply to) private messages. Thanks to Clement
3245 Stenac for the patch.
3246 * docs/buildbot.texinfo (IRC Bot): document it
3248 * buildbot/status/builder.py (LogFile.merge): don't write chunks
3249 larger than chunkSize. Fixes SF#1349253.
3250 * buildbot/test/test_status.py (Log.testLargeSummary): test it
3251 (Log.testConsumer): update to match new internal chunking behavior
3253 2006-03-12 Brian Warner <warner@lothar.com>
3255 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
3257 * buildbot/test/test_maildir.py (MaildirTest): rename the
3258 'timeout' method, as it collides with trial's internals
3260 * buildbot/scripts/runner.py: add 'buildbot restart' command
3261 (stop): don't sys.exit() out of here, otherwise restart can't work
3262 * docs/buildbot.texinfo (Shutdown): document it
3264 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
3265 * buildbot/status/html.py (Waterfall.__init__): same
3266 * buildbot/process/builder.py (Builder.startBuild): same
3267 * buildbot/process/base.py (BuildRequest): same
3268 * buildbot/sourcestamp.py (SourceStamp): same
3269 * buildbot/scheduler.py (Nightly): same
3271 * buildbot/__init__.py (version): bump to 0.7.2+ while between
3273 * docs/buildbot.texinfo: same
3275 2006-02-17 Brian Warner <warner@lothar.com>
3277 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
3278 * docs/buildbot.texinfo: set version number to match
3279 * NEWS: update for 0.7.2
3281 2006-02-16 Brian Warner <warner@lothar.com>
3283 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
3285 2006-02-09 Brian Warner <warner@lothar.com>
3287 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
3288 add text to explain per-build branch parameters
3289 * NEWS: mention --umask
3291 2006-02-08 Brian Warner <warner@lothar.com>
3293 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
3295 (SlaveOptions.optParameters): add --umask, to make it possible to
3296 make buildslave-generated files (including build products) be
3299 * buildbot/slave/bot.py (BuildSlave.startService): same
3301 2006-01-23 Brian Warner <warner@lothar.com>
3303 * buildbot/status/builder.py: urllib.quote() all URLs that include
3304 Builder names, so that builders can include characters like '/'
3305 and ' ' without completely breaking the resulting HTML. Thanks to
3306 Kevin Turner for the patch.
3307 * buildbot/status/html.py: same
3308 * buildbot/test/test_web.py (GetURL.testBuild): match changes
3310 * NEWS: update in preparation for upcoming release
3312 2006-01-18 Brian Warner <warner@lothar.com>
3314 * docs/examples/twisted_master.cfg: update to match the Twisted
3315 buildbot: remove python2.2, switch to exarkun's buildslaves,
3316 disable the .deb builder until we figure out how to build twisted
3317 .debs from SVN, add some ktrace debugging to the OS-X build
3318 process and remove the qt build, remove threadless builders,
3319 change freebsd builder to use landonf's buildslave.
3321 2006-01-12 Brian Warner <warner@lothar.com>
3323 * buildbot/master.py (Manhole.__init__): let port= be a strports
3324 specification string, but handle a regular int for backwards
3325 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
3326 used in master.cfg to limit connections to just the local host.
3327 (BuildMaster.loadConfig): same for c['slavePortnum']
3328 * buildbot/scheduler.py (Try_Userpass.__init__): same
3329 * buildbot/status/client.py (PBListener.__init__): same
3330 * buildbot/status/html.py (Waterfall.__init__): same, for both
3331 http_port and distrib_port. Include backwards-compatibility checks
3332 so distrib_port can be a filename string and still mean unix:/foo
3333 * docs/buildbot.texinfo (Setting the slaveport): document it
3334 (Debug options): same
3335 (HTML Waterfall): same
3338 * buildbot/test/test_config.py (ConfigTest): test it
3340 * buildbot/master.py (BuildMaster.loadConfig): wait for the
3341 slaveport's disownServiceParent deferred to fire before opening
3342 the new one. Fixes an annoying bug in the unit tests.
3344 2006-01-03 Brian Warner <warner@lothar.com>
3346 * buildbot/master.py (BuildMaster): remove the .schedulers
3347 attribute, replacing it with an allSchedulers() method that looks
3348 for all IService children that implement IScheduler. Having only
3349 one parent/child relationship means fewer opportunities for bugs.
3350 (BuildMaster.allSchedulers): new method
3351 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
3352 also fix ugly bug that caused any config-file reload to
3353 half-forget about the earlier Schedulers, causing an exception
3354 when a Change arrived and was handed to a half-connected
3355 Scheduler. The exception was in scheduler.py line 54ish:
3356 self.parent.submitBuildSet(bs)
3357 exceptions.AttributeError: 'NoneType' object has no attribute
3359 (BuildMaster.addChange): update to use allSchedulers()
3361 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
3362 to work properly with twisted-1.3.0, where you must explicitly
3363 include the __implements__ from parent classes
3364 (BaseScheduler.__repr__): make it easier to distinguish distinct
3366 (BaseUpstreamScheduler.__implements__): same
3368 * buildbot/status/builder.py (Status.getSchedulers): update to
3370 * buildbot/test/test_run.py (Run.testMaster): same
3371 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
3372 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
3373 make sure Scheduler instances are left alone when an identical
3374 config file is reloaded
3375 (ConfigElements.testSchedulers): make sure Schedulers are properly
3378 * Makefile (TRIALARGS): my local default Twisted version is now
3379 2.1.0, update the trial arguments accordingly
3381 2005-12-22 Brian Warner <warner@lothar.com>
3383 * docs/examples/twisted_master.cfg: merge changes from pyr: add
3386 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
3387 addChange in the parent class, although I suspect this should be
3388 fixed better in the future.
3390 2005-11-26 Brian Warner <warner@lothar.com>
3392 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
3393 explode when branch==None, thanks to Kevin Turner for the catch
3394 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
3397 * buildbot/__init__.py (version): bump to 0.7.1+ while between
3399 * docs/buildbot.texinfo: same
3401 2005-11-26 Brian Warner <warner@lothar.com>
3403 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
3404 * docs/buildbot.texinfo: set version number to match
3406 2005-11-26 Brian Warner <warner@lothar.com>
3408 * NEWS: update for 0.7.1
3410 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
3411 sure that unsubscribe works even if we never sent an ETA update.
3412 Also, don't explode on duplicate unsubscribe.
3413 (BuildStepStatus.addLog): make the convenience "return self"-added
3414 watcher automatically unsubscribe when the Step finishes.
3415 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
3416 (BuildStatus.stepStarted): same auto-unsubscribe
3417 (BuilderStatus.buildStarted): same auto-unsubscribe
3419 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
3421 (IStatusReceiver.stepStarted): same
3422 (IStatusReceiver.logStarted): same
3424 * buildbot/test/test_run.py (Status): move the Status test..
3425 * buildbot/test/test_status.py (Subscription): .. to here
3427 2005-11-25 Brian Warner <warner@lothar.com>
3429 * NEWS: more updates
3431 * buildbot/locks.py: fix the problem in which loading a master.cfg
3432 file that changes some Builders (but not all of them) can result
3433 in having multiple copies of the same Lock. Now, the real Locks
3434 are kept in a table inside the BotMaster, and the Builders/Steps
3435 use "LockIDs", which are still instances of MasterLock and
3436 SlaveLock. The real Locks are instances of the new RealMasterLock
3437 and RealSlaveLock classes.
3438 * buildbot/master.py (BotMaster.getLockByID): new method to
3439 convert LockIDs into real Locks.
3440 * buildbot/process/base.py (Build.startBuild): convert LockIDs
3441 into real Locks before building
3442 * buildbot/process/step.py (BuildStep.startStep): same
3443 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
3444 exercises the problem
3447 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
3448 what Schedulers are available
3450 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
3451 work by Dobes Vandermeer and hacked mercilessly by me. This offers
3452 'cron'-style build scheduling at certain times of day, week,
3454 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
3456 * buildbot/scheduler.py (Scheduler): change fileIsImportant
3457 handling: treat self.fileIsImportant more as an attribute that
3458 contains a callable than as a method. If the attribute is None,
3459 don't call it and assume all filenames are important. It is still
3460 possible to provide a fileIsImportant method in a subclass,
3462 (AnyBranchScheduler): handle fileIsImportant=None, previously it
3464 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
3465 test using AnyBranchScheduler with fileIsImportant=None
3467 2005-11-24 Brian Warner <warner@lothar.com>
3469 * buildbot/test/test_config.py (StartService): don't claim a fixed
3470 port number, instead set slavePort=0 on the first pass, figure out
3471 what port was allocated, then switch to a config file that uses
3474 * buildbot/master.py (BuildMaster.loadConfig): close the old
3475 slaveport before opening the new one, because unit tests might
3476 replace slavePort=0 with the same allocated portnumber, and if we
3477 don't wait for the old port to close first, we get a "port already
3478 in use" error. There is a tiny race condition here, but the only
3479 threat is from other programs that bind (statically) to the same
3480 port number we happened to be allocated, and only if those
3481 programs use SO_REUSEADDR, and only if they get control in between
3484 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
3486 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
3487 deleted ChangeSources before adding any new ones
3488 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
3489 compare_attrs, to make sure that a config-file reload does not
3490 unnecessarily replace an unmodified ChangeSource instance
3491 * buildbot/test/test_config.py (ConfigTest.testSources): update
3493 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
3494 mean "don't build anything", and add a warning if it gets used
3495 because it isn't actually useful.
3497 * contrib/svn_buildbot.py: update example usage to match the port
3498 number that gets used by the PBChangeSource
3499 * buildbot/scripts/sample.cfg: add example of PBChangeSource
3501 2005-11-22 Brian Warner <warner@lothar.com>
3503 * NEWS: start collecting items for next release
3505 * buildbot/process/step.py (SVN.computeSourceRevision): assume
3506 revisions are strings
3507 (P4Sync.computeSourceRevision): same
3509 * buildbot/status/html.py (StatusResourceBuild.body): add a link
3510 to the Buildbot's overall status page
3511 (StatusResourceBuilder.body): same
3513 2005-11-15 Brian Warner <warner@lothar.com>
3515 * buildbot/master.py (BuildMaster.loadConfig): serialize the
3516 config-file loading, specifically to make sure old StatusTargets
3517 are finished shutting down before new ones start up (thus
3518 resolving a bug in which changing the Waterfall object would fail
3519 because both new and old instances were claiming the same
3520 listening port). Also load new Schedulers after all the new
3521 Builders are set up, in case they fire off a new build right away.
3522 * buildbot/test/test_config.py (StartService): test it
3524 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
3525 the branch name to the mail body
3527 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
3528 Without it, a config-file reload fails to update an existing
3530 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
3531 username/passwd to compare_attrs, for the same reason
3532 * buildbot/status/html.py (Waterfall): add favicon to
3533 compare_attrs, same reason
3535 2005-11-05 Brian Warner <warner@lothar.com>
3537 * buildbot/scripts/tryclient.py (createJobfile): stringify the
3538 baserev before stuffing it in the jobfile. This resolves problems
3539 under SVN (and probably Arch) where revisions are expressed as
3540 numbers. I'm inclined to use string-based revisions everywhere in
3541 the future, but this fix should be safe for now. Thanks to Steven
3542 Walter for the patch.
3544 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
3545 binary mode when opening pickle files, to make windows work
3546 better. Thanks to Dobes Vandermeer for the catch.
3547 * buildbot/status/builder.py (BuildStatus.saveYourself): same
3548 (BuilderStatus.getBuildByNumber): same
3549 (Status.builderAdded): same
3550 * buildbot/master.py (BuildMaster.loadChanges): same
3552 * buildbot/util.py (Swappable): delete unused leftover code
3554 * buildbot/process/step.py (SVN): when building on a non-default
3555 branch, add the word "[branch]" to the VC step's description, so
3556 it is obvious that we're not building the usual stuff. Likewise,
3557 when we are building a specific revision, add the text "rNNN" to
3558 indicate what that revision number is. Thanks to Brad Hards and
3559 Nathaniel Smith for the suggestion.
3560 (Darcs.startVC): same
3561 (Arch.startVC): same
3562 (Bazaar.startVC): same
3564 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
3565 typo, caught by Mark Dillavou, closes SF#1216636.
3567 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
3568 about a test to add some day
3570 * docs/examples/twisted_master.cfg: update: bot1 can now handle
3571 the 'full-2.3' build, and the 'reactors' build is now run under
3572 python-2.4 because the buildslave no longer has gtk/etc bindings
3573 for earlier versions.
3575 2005-11-03 Brian Warner <warner@lothar.com>
3577 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
3578 method, takes an IBuildStatus and rebuilds it. It might make more
3579 sense to add this to IBuildControl instead, but that instance goes
3580 away completely once the build has finished, and resubmitting
3581 builds can take place weeks later.
3582 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
3583 * buildbot/status/html.py (StatusResourceBuild): also stash an
3584 IBuilderControl so we can use resubmitBuild.
3585 (StatusResourceBuild.body): render "resubmit" button if we can.
3586 Also add hrefs for each BuildStep
3587 (StatusResourceBuild.rebuild): add action for "resubmit" button
3588 (StatusResourceBuilder.getChild): give it an IBuilderControl
3590 * buildbot/status/builder.py (Status.getURLForThing): change the
3591 URL for BuildSteps to have a "step-" prefix, so the magic URLs
3592 that live as targets of buttons like "stop" and "rebuild" can't
3594 * buildbot/status/builder.py (Status.getURLForThing): same
3595 * buildbot/status/html.py (StatusResourceBuild.getChild): same
3596 (StepBox.getBox): same
3597 * buildbot/test/test_web.py (GetURL): same
3600 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
3601 exclusivity checks after Source.__init__ upcall, so misspelled
3602 arguments will be reported more usefully
3603 (Darcs.__init__): same
3605 2005-10-29 Brian Warner <warner@lothar.com>
3607 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
3608 builder. Move the Try scheduler off to a separate port.
3610 2005-10-27 Brian Warner <warner@lothar.com>
3612 * buildbot/clients/gtkPanes.py
3613 (TwoRowClient.remote_builderRemoved): disappearing Builders used
3614 to cause the app to crash, now they don't.
3616 * buildbot/clients/debug.py: display the buildmaster's location
3617 in the window's title bar
3619 2005-10-26 Brian Warner <warner@lothar.com>
3621 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
3622 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
3623 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
3625 * buildbot/status/html.py (td): put a single non-breaking space
3626 inside otherwise empty <td> elements, as a workaround for buggy
3627 browsers which would optimize them away (along with any associated
3628 styles, like the kind that create the waterfall grid borders).
3629 Patch from Frerich Raabe.
3631 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
3632 argv-list as an argument, defaulting to ["-to"], which is
3633 appropriate for the Trial that comes with Twisted-2.1.0 and
3634 earlier. The Trial in current Twisted SVN wants
3635 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
3636 defaults to an empty list.
3637 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
3638 match it, now that trialMode= is a list instead of a single string
3640 * buildbot/__init__.py (version): bump to 0.7.0+ while between
3642 * docs/buildbot.texinfo: same
3644 2005-10-24 Brian Warner <warner@lothar.com>
3646 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
3647 * docs/buildbot.texinfo: set version number to match
3649 2005-10-24 Brian Warner <warner@lothar.com>
3651 * README: update for 0.7.0
3653 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
3655 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
3656 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
3657 send the branch= argument unless the user really provided one, to
3658 retain compatibility with older buildmasters that don't accept
3660 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3663 * docs/buildbot.texinfo: update lots of stuff
3665 * buildbot/scripts/runner.py (sendchange): add a --branch argument
3666 to the 'buildbot sendchange' command
3667 * buildbot/clients/sendchange.py (Sender.send): same
3668 * buildbot/changes/pb.py (ChangePerspective): same
3669 * buildbot/test/test_changes.py (Sender.testSender): test it
3671 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
3672 'default_branch' argument names to 'baseURL' and 'defaultBranch',
3673 for consistency with other BuildStep arguments that use camelCase.
3674 Well, at least more of them use camelCase (like flunkOnWarnings)
3675 than don't.. I wish I'd picked one style and stuck with it
3676 earlier. Annoying, but it's best done before the release, since
3677 these arguments didn't exist at all in 0.6.6 .
3679 * buildbot/test/test_vc.py (SVN.testCheckout): same
3680 (Darcs.testPatch): same
3681 * docs/buildbot.texinfo (SVN): document the change
3682 (Darcs): same, add some build-on-branch docs
3683 * docs/examples/twisted_master.cfg: match change
3685 * buildbot/process/step.py (BuildStep): rename
3686 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
3687 how it is normally used.
3688 * buildbot/test/test_steps.py (Version.checkCompare): same
3690 * buildbot/process/step.py (CVS.startVC): refuse to build
3691 update/copy -style builds on a non-default branch with an old
3692 buildslave (<=0.6.6) that doesn't know how to do it properly. The
3693 concern is that it will do a VC 'update' in an existing tree when
3694 it is supposed to be switching branches (and therefore clobbering
3695 the tree to do a full checkout), thus building the wrong source.
3696 This used to be a warning, but I think the confusion it is likely
3697 to cause warrants making it an error.
3698 (SVN.startVC): same, also make mode=export on old slaves an error
3699 (Darcs.startVC): same
3700 (Git.startVC): improve error message for non-Git-enabled slaves
3701 (Arch.checkSlaveVersion): same. continue to emit a warning when a
3702 specific revision is built on a slave that doesn't pay attention
3703 to args['revision'], because for slowly-changing trees it will
3704 probably do the right thing, and because we have no way to tell
3705 whether we're asking it to build the most recent version or not.
3706 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
3708 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
3709 that 'master' is in host:portnum format, to catch errors sooner
3711 2005-10-23 Brian Warner <warner@lothar.com>
3713 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
3714 when creating the list of warning messages, include the line
3715 immediately after each WARNING: line, since that's usually where
3716 the file and line number wind up.
3718 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
3723 2005-10-22 Brian Warner <warner@lothar.com>
3725 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
3726 patch from Brad Hards
3727 * buildbot/status/classic.css: same
3728 * buildbot/test/test_web.py (Waterfall): match changes
3730 * buildbot/test/test_steps.py (BuildStep.setUp): set
3731 nextBuildNumber so the test passes
3732 * buildbot/test/test_status.py (MyBuilder): same
3734 * buildbot/status/html.py (StatusResourceBuild.body): revision
3735 might be numeric, so stringify it before html-escapifying it
3736 (CurrentBox.getBox): add a "waiting" state, and show a countdown
3737 timer for the upcoming build
3738 * buildbot/status/classic.css: add background-color attributes for
3739 offline/waiting/building classes
3741 * buildbot/status/builder.py (BuildStatus): derive from
3742 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
3743 the default (i.e. unknown) .slavename to "???" instead of None,
3744 since even unknown slavenames need to be printed eventually.
3745 (BuilderStatus): also derive from styles.Versioned . More
3746 importantly, determine .nextBuildNumber at creation/unpickling
3747 time by scanning the directory of saved BuildStatus instances and
3748 choosing one larger than the highest-numbered one found. This
3749 should fix the problem where random errors during upgrades cause
3750 the buildbot to forget about earlier builds. .nextBuildNumber is
3751 no longer stored in the pickle.
3752 (Status.builderAdded): if we can't unpickle the BuilderStatus,
3753 at least log the error. Also call Builder.determineNextBuildNumber
3754 once the basedir is set.
3756 * buildbot/master.py (BuildMaster.loadChanges): do
3757 styles.doUpgrade afterwards, in case I decide to make Changes
3758 derived from styles.Versioned some day and forget to make this
3762 * buildbot/test/test_runner.py (Options.testForceOptions): skip
3763 when running under older pythons (<2.3) in which the shlex module
3764 doesn't have a 'split' function.
3766 * buildbot/process/step.py (ShellCommand.start): make
3767 errorMessages= be a list of strings to stuff in the log before the
3768 command actually starts. This makes it easier to flag multiple
3769 warning messages, e.g. when the Source steps have to deal with an
3771 (CVS.startVC): handle slaves that don't handle multiple branches
3772 by switching into 'clobber' mode
3773 (SVN.startVC): same. Also reject branches without base_url
3774 (Darcs.startVC): same. Also reject revision= in older slaves
3775 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
3776 (Bazaar.startVC): same, and test for baz separately than for arch
3778 * buildbot/slave/commands.py (cvs_ver): document new features
3780 * buildbot/process/step.py (BuildStep.slaveVersion): document it
3781 (BuildStep.slaveVersionNewEnough): more useful utility method
3782 * buildbot/test/test_steps.py (Version): start testing it
3784 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
3785 the 'force' command requires python2.3, for the shlex.split method
3787 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
3788 since we don't use it anymore. The Twisted buildbot uses a
3791 2005-10-21 Brian Warner <warner@lothar.com>
3793 * buildbot/process/process_twisted.py: rework all BuildFactory
3794 classes to take a 'source' step as an argument, instead of
3795 building up the SVN instance in the factory.
3796 * docs/examples/twisted_master.cfg: enable build-on-branch by
3797 providing a base_url and default_branch
3799 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
3800 control over --branch and --revision, not that they are always
3802 * buildbot/status/html.py (StatusResourceBuilder.force): same
3803 (StatusResourceBuild.body): display SourceStamp components
3805 * buildbot/scripts/runner.py (ForceOptions): option parser for the
3806 IRC 'force' command, so it can be shared with an eventual
3807 command-line-tool 'buildbot force' mode.
3808 * buildbot/test/test_runner.py (Options.testForceOptions): test it
3810 2005-10-20 Brian Warner <warner@lothar.com>
3812 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
3814 * docs/examples/twisted_master.cfg: update to use Schedulers
3816 * buildbot/scripts/sample.cfg: update with Schedulers
3818 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
3819 method specifically for use by HTML "force build" button and the
3820 IRC "force" command. Raises an immediate error if there are no
3822 (IBuilderControl.requestBuild): make this just submit a build, not
3823 try to check for existing slaves or set up any when-finished
3824 Deferreds or anything.
3825 * buildbot/process/builder.py (BuilderControl): same
3826 * buildbot/status/html.py (StatusResourceBuilder.force): same
3827 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3828 * buildbot/test/test_slaves.py: same
3829 * buildbot/test/test_web.py: same
3831 2005-10-19 Brian Warner <warner@lothar.com>
3833 * docs/examples/twisted_master.cfg: re-sync with reality: bring
3834 back python2.2 tests, turn off OS-X threadedselect-reactor tests
3836 2005-10-18 Brian Warner <warner@lothar.com>
3838 * buildbot/status/html.py: provide 'status' argument to most
3839 StatusResourceFOO objects
3840 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
3841 and Logfiles" section to make the Build page into a more-or-less
3842 comprehensive source of status information about the build
3844 * buildbot/status/mail.py (MailNotifier): include the Build's URL
3845 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
3847 2005-10-17 Brian Warner <warner@lothar.com>
3849 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
3850 arguments to accomodate Twisted >=2.1.0 . I will have to figure
3851 out what to do about other projects: the correct options for
3852 recent Twisteds will not work for older ones.
3854 2005-10-15 Brian Warner <warner@lothar.com>
3856 * buildbot/status/builder.py (Status.getURLForThing): add method
3857 to provide a URL for arbitrary IStatusFoo objects. The idea is to
3858 use this in email/IRC status clients to make them more useful, by
3859 providing the end user with hints on where to learn more about the
3860 object being reported on.
3861 * buildbot/test/test_web.py (GetURL): tests for it
3863 2005-10-14 Brian Warner <warner@lothar.com>
3865 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
3866 fix bug resulting from deferredResult changes
3868 2005-10-13 Brian Warner <warner@lothar.com>
3870 * buildbot/test/test_changes.py: remove use of deferredResult
3871 * buildbot/test/test_config.py: same
3872 * buildbot/test/test_control.py: same
3873 * buildbot/test/test_status.py: same
3874 * buildbot/test/test_vc.py: this is the only remaining use, since
3875 it gets used at module level. This needs to be replaced by some
3876 sort of class-level run-once routine.
3878 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
3880 * lots: implement multiple slaves per Builder, which means multiple
3881 current builds per Builder. Some highlights:
3882 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
3883 of (state,currentBuilds) instead of (state,currentBuild)
3884 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
3885 (IBuildStatus.getSlavename): new method, so you can tell which
3886 slave got used. This only gets set when the build completes.
3887 (IBuildRequestStatus.getBuilds): new method
3889 * buildbot/process/builder.py (SlaveBuilder): add a .state
3890 attribute to track things like ATTACHING and IDLE and BUILDING,
3892 (Builder): .. the .slaves attribute here, which has been turned
3893 into a simple list of available slaves. Added a separate
3894 attaching_slaves list to track ones that are not yet ready for
3896 (Builder.fireTestEvent): put off the test-event callback for a
3897 reactor turn, to make tests a bit more consistent.
3898 (Ping): cleaned up the slaveping a bit, now it disconnects if the
3899 ping fails due to an exception. This needs work, I'm worried that
3900 a code error could lead to a constantly re-connecting slave.
3901 Especially since I'm trying to move to a distinct remote_ping
3902 method, separate from the remote_print that we currently use.
3903 (BuilderControl.requestBuild): return a convenience Deferred that
3904 provides an IBuildStatus when the build finishes.
3905 (BuilderControl.ping): ping all connected slaves, only return True
3906 if they all respond.
3908 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
3909 reconnect when we shut down.
3911 * buildbot/status/builder.py: implement new methods, convert
3912 one-build-at-a-time methods to handle multiple builds
3913 * buildbot/status/*.py: do the same in all default status targets
3914 * buildbot/status/html.py: report the build's slavename in the
3915 per-Build page, report all buildslaves on the per-Builder page
3917 * buildbot/test/test_run.py: update/create tests
3918 * buildbot/test/test_slaves.py: same
3919 * buildbot/test/test_scheduler.py: remove stale test
3921 * docs/buildbot.texinfo: document the new builder-specification
3922 'slavenames' parameter
3924 2005-10-12 Brian Warner <warner@lothar.com>
3926 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
3927 report failure correctly, causing Dependent builds to run when
3928 they shouldn't have.
3929 * buildbot/status/builder.py (BuildSetStatus): same
3930 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
3931 (Set.testSuccess): test the both-pass case too
3932 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3933 fix this test: it was ending too early, masking the failure before
3934 (Logger): specialized StatusReceiver to make sure the dependent
3935 builds aren't even started, much less completed.
3937 2005-10-07 Brian Warner <warner@lothar.com>
3939 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
3940 bot.SlaveBuilder being disowned in the middle of a build
3942 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
3943 this inherit from StatusReceiver. Also upcall in __init__. This
3944 fixes the embarrasing crash when the new buildSetSubmitted method
3945 is invoked and Waterfall/etc don't implement their own.
3946 * buildbot/test/test_run.py: add a TODO note about a test to catch
3947 just this sort of thing.
3949 * buildbot/process/builder.py (Builder.attached): remove the
3950 already-attached warning, this situation is normal. Add some
3951 comments explaining it.
3953 2005-10-02 Brian Warner <warner@lothar.com>
3955 * buildbot/changes/maildir.py (Maildir.start): Tolerate
3956 OverflowError when setting up dnotify, because some 64-bit systems
3957 have problems with signed-vs-unsigned constants and trip up on the
3958 DN_MULTISHOT flag. Patch from Brad Hards.
3960 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
3962 * buildbot/process/step.py (BuildStep, ShellCommand): Add
3963 progressMetrics, description, descriptionDone to the 'parms' list,
3964 and make use the 'parms' list from the implementation class
3965 instead of only BuildStep to initialize the parameters. This
3966 allows buildbot.process.factory.s() to initialize all the parms,
3967 not just those defined in directly by BuildStep.
3969 2005-09-03 Brian Warner <warner@lothar.com>
3971 * NEWS: start adding items for the next release
3973 * docs/examples/twisted_master.cfg: (sync with reality) turn off
3974 python2.2 tests, change 'Quick' builder to only use python2.3
3976 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
3978 * buildbot/status/html.py (StatusResourceBuilder.body): only show
3979 the "Ping Builder" button if the build control is available; the
3980 user sees an exception otherwise
3982 * docs/buildbot.texinfo (PBChangeSource): fix a typo
3984 2005-09-01 Brian Warner <warner@lothar.com>
3986 * buildbot/interfaces.py (IBuilderStatus.getState): update
3987 signature, point out that 'build' can be None
3988 (IBuildStatus.getETA): point out ETA can be none
3990 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
3992 * buildbot/status/words.py (IrcStatusBot.emit_status): same
3994 2005-08-31 Brian Warner <warner@lothar.com>
3996 * buildbot/status/base.py (StatusReceiver.builderChangedState):
3997 update to match correct signature: removed 'eta' argument
3998 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
4000 2005-08-30 Brian Warner <warner@lothar.com>
4002 * buildbot/status/builder.py (LogFile): remove the assertion that
4003 blows up when you try to overwrite an existing logfile, instead
4004 just emit a warning. This case gets hit when the buildmaster is
4005 killed and doesn't get a chance to write out the serialized
4006 BuilderStatus object, so the .nextBuildNumber attribute gets out
4009 * buildbot/scripts/runner.py (sendchange): add --revision_file to
4010 the 'buildbot sendchange' arguments, for the Darcs context file
4011 * docs/buildbot.texinfo (sendchange): document it
4013 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
4014 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
4015 (IStatus.getSchedulers): new method
4016 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
4017 (Status.getSchedulers): implement
4018 * buildbot/process/builder.py (Builder): maintain
4019 BuilderStatus.pendingBuilds
4020 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
4021 (TryBase.addChange): Try schedulers should ignore Changes
4023 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
4024 for 'try' on CVS/SVN
4025 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
4027 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
4028 report status properly.
4029 (Try.createJob): implement unique buildset IDs
4031 * buildbot/status/client.py (StatusClientPerspective): add a
4032 perspective_getBuildSets method for the benefit of jobdir-style
4034 * docs/buildbot.texinfo (try): more docs
4035 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
4038 2005-08-18 Brian Warner <warner@lothar.com>
4040 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
4041 actually work. It's functional but still kind of clunky. Also, it
4042 only works with the pb-style.. needs to be made to work with the
4045 * buildbot/status/client.py (RemoteBuildSet): new class
4046 (RemoteBuildRequest): same
4047 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
4048 object, not the internal BuildStatus object.
4049 (RemoteBuild.remote_subscribe): new method to subscribe to builds
4050 outside of the usual buildStarted() return value.
4051 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
4053 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
4054 (Try_Userpass_Perspective.perspective_try): return a remotely
4055 usable BuildSetStatus object
4057 * buildbot/interfaces.py (IBuildStatus): remove obsolete
4058 isStarted()/waitUntilStarted()
4060 2005-08-16 Brian Warner <warner@lothar.com>
4062 * buildbot/status/builder.py: implement IBuildSetStatus and
4063 IBuildRequestStatus, wire them into place.
4064 * buildbot/buildset.py: same. Add ID, move wait-until-finished
4065 methods into the BuildSetStatus object.
4066 * buildbot/interfaces.py: same
4067 (IStatus.getBuildSets): new method to get pending BuildSets
4068 (IStatusReceiver.buildsetSubmitted): new method which hears about
4070 * buildbot/master.py (BuildMaster.submitBuildSet): same
4071 * buildbot/process/base.py (BuildRequest): same, replace
4072 waitUntilStarted with subscribe/unsubscribe
4073 * buildbot/process/builder.py (BuilderControl.forceBuild): use
4074 subscribe instead of waitUntilStarted
4075 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
4077 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
4079 * buildbot/test/test_buildreq.py: update for new code
4080 * buildbot/test/test_control.py (Force.testRequest): same
4083 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
4084 for Darcs to not use the tempfile module, so it works under
4085 python-2.2 too. We really didn't need the full cleverness of that
4086 module, since the slave has exclusive control of its own builddir.
4088 2005-08-15 Brian Warner <warner@lothar.com>
4090 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
4091 for CVS trees. It doesn't work for non-trunk branches,
4093 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
4096 * Makefile: make it easier to test against python2.2
4098 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
4099 tearDown2, so things like Arch can unregister archives as they're
4100 shutting down. The previous subclass-override-tearDown technique
4101 resulted in a nested maybeWait() and test failures under
4104 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
4105 where we can (Arch), add a branch= argument to set the branch used
4107 (BazExtractor): extract the branch too
4108 (TlaExtractor): same
4109 * buildbot/scripts/runner.py (TryOptions): add --branch
4110 * docs/buildbot.texinfo (try): document --branch/try_branch
4112 * buildbot/slave/commands.py (Darcs): implement get-revision for
4113 Darcs, so that 'try' will work. This requires the tempfile module
4116 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
4117 of revisions, branches, and 'try' in the process.
4119 2005-08-11 Brian Warner <warner@lothar.com>
4121 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
4122 this, it got broken at some point in the last few releases
4123 * buildbot/status/words.py (IrcBuildRequest): reply was broken
4124 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
4125 specifically the removal of ETA information from the tuple
4127 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
4130 * docs/buildbot.texinfo (try): document both --builder and
4131 'try_builders' in .buildbot/options
4132 * buildbot/scripts/runner.py (TryOptions): add --builder,
4133 accumulate the values into opts['builders']
4134 * buildbot/scripts/tryclient.py (Try.__init__): set builders
4135 * buildbot/test/test_runner.py (Try): add some quick tests to make
4136 sure 'buildbot try --options' and .buildbot/options get parsed
4137 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
4138 use --builder control
4140 * docs/buildbot.texinfo (try): add --port argument to PB style
4142 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
4143 actual SourceStamp. Still need to extract a branch name, somehow.
4144 (Try): finish implementing the try client side, still need a UI
4145 for specifying which builders to use
4146 (Try.getopt): factor our options/config-file reading
4147 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
4149 * buildbot/test/test_vc.py: match SourceStampExtractor change
4151 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
4152 causes the twisted log to be sent to stderr
4154 * buildbot/scheduler.py (Try_Userpass): implement the PB style
4156 2005-08-10 Brian Warner <warner@lothar.com>
4158 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
4159 style is 90% done, still missing status reporting or waiting for
4160 the buildsets to finish, and it is completely untested.
4162 * buildbot/trybuild.py: delete file, move contents to ..
4163 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
4164 * buildbot/test/test_vc.py: match the move
4166 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
4167 of the TryScheduler, no buildsetID or status-tracking support yet
4168 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
4170 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
4171 possible to set the basedir after __init__ time, so it is easier
4172 to use as a Service-child of the BuildMaster instance
4174 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
4175 that delivers messages to its Service parent instead of requiring
4176 a subclass to be useful. This turns out to be much easier to build
4179 * buildbot/scripts/tryclient.py (createJob): utility code to
4180 create jobfiles, will eventually be used by 'buildbot try'
4182 2005-08-08 Brian Warner <warner@lothar.com>
4184 * docs/buildbot.texinfo (try): add docs on the
4185 as-yet-unimplemented Try scheduler
4187 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
4188 * buildbot/test/test_scheduler.py: .. here
4189 (Scheduling.testTryJobdir): add placeholder test for 'try'
4191 * buildbot/test/test_status.py (Log.testMerge3): update to match new
4192 addEntry merging (>=chunkSize) behavior
4193 (Log.testConsumer): update to handle new callLater(0) behavior
4195 * buildbot/test/test_web.py: rearrange tests a bit, add test for
4196 both the MAX_LENGTH bugfix and the resumeProducing hang.
4198 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
4199 put off the actual resumeProducing for a moment with
4200 reactor.callLater(0). This works around a twisted-1.3.0 bug which
4201 causes large logfiles to hang midway through.
4203 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
4204 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
4205 and to improve memory usage when streaming the file out to a web
4207 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
4208 make this work cleanly
4210 2005-08-03 Brian Warner <warner@lothar.com>
4212 * buildbot/trybuild.py: new file for 'try' utilities
4213 (getSourceStamp): run in a tree, find out the baserev+patch
4214 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
4215 implemented for SVN and Darcs, still working on Arch. I don't know
4216 how to make CVS work yet.
4218 * docs/buildbot.texinfo: document the 'buildbot' command-line
4219 tool, including the not-yet-implemented 'try' feature, and the
4220 in-flux .buildbot/ options directory.
4222 2005-07-20 Brian Warner <warner@lothar.com>
4224 * buildbot/locks.py: added temporary id() numbers to Lock
4225 descriptions, to track down a not-really-sharing-the-Lock bug
4227 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
4229 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
4230 needed for python2.2 compatibility
4231 * buildbot/test/test_vc.py: python2.2 compatibility: generators
4232 are from the __future__
4234 2005-07-19 Brian Warner <warner@lothar.com>
4236 * buildbot/master.py (BuildMaster.loadConfig): give a better error
4237 message when schedulers use unknown builders
4239 * buildbot/process/builder.py (Builder.compareToSetup): make sure
4240 SlaveLock('name') and MasterLock('name') are distinct
4242 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
4243 c['schedulers'] in such a way that we can actually accept
4245 * buildbot/test/test_config.py: check it
4247 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
4248 utility method to *all* the Schedulers
4249 (Periodic.listBuilderNames): same
4251 * docs/buildbot.texinfo (Interlocks): update chapter to match
4254 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
4255 to make sure that c['sources'], c['schedulers'], and c['status']
4256 are all lists of the appropriate objects, and that the Schedulers
4257 all point to real Builders
4258 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
4259 'listBuilderNames' utility method to support this
4260 * buildbot/scheduler.py: implement the utility method
4261 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
4263 * docs/buildbot.texinfo: add some @cindex entries
4265 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
4266 if it wasn't already set: most tla commands will fail unless one
4268 (Arch.createRepository): and disable bazaar's revision cache, since
4269 they cause test failures (the multiple repositories we create all
4270 interfere with each other through the cache)
4272 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
4273 bring it properly up to date with twisted-2.0 test guidelines
4275 * buildbot/master.py (BuildMaster): remove references to old
4276 'interlock' module, this caused a bunch of post-merge test
4278 * buildbot/test/test_config.py: same
4279 * buildbot/process/base.py (Build): same
4281 * buildbot/test/test_slaves.py: stubs for new test case
4283 * buildbot/scheduler.py: add test-case-name tag
4284 * buildbot/test/test_buildreq.py: same
4286 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
4287 unnecessary init code
4288 (Bot.remote_setBuilderList): match it
4290 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
4292 * buildbot/changes/mail.py (parseSyncmail): update comment
4294 * buildbot/test/test_slavecommand.py: disable Shell tests on
4295 platforms that don't suport IReactorProcess
4297 * buildbot/status/builder.py (LogFile): remove the 't' mode from
4298 all places where we open logfiles. It causes OS-X to open the file
4299 in some weird mode that that prevents us from mixing reads and
4300 writes to the same filehandle, which we depend upon to implement
4301 _generateChunks properly. This change doesn't appear to break
4302 win32, on which "b" and "t" are treated differently but a missing
4303 flag seems to be interpreted as "t".
4305 2005-07-18 Brian Warner <warner@lothar.com>
4307 * buildbot/slave/commands.py (ShellCommand): overhaul
4308 error-handling code, to try and make timeout/interrupt work
4309 properly, and make win32 happier
4310 * buildbot/test/test_slavecommand.py: clean up, stop using
4311 reactor.iterate, add tests for timeout and interrupt
4312 * buildbot/test/sleep.py: utility for a new timeout test
4314 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
4315 code from the local-usebranches branch
4317 2005-07-17 Brian Warner <warner@lothar.com>
4319 * buildbot/process/process_twisted.py
4320 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
4321 minutes, to match the other twisted BuildFactories, and don't
4322 excuse failures in c/qt/win32 reactors any more.
4324 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
4325 'freebsd' builders, since the buildslaves have been unavailable
4328 2005-07-13 Brian Warner <warner@lothar.com>
4330 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
4331 build-on-branch feature
4333 * buildbot/process/step.py (Darcs.__init__): add base_url and
4334 default_branch arguments, just like SVN
4335 (Arch.__init__): note that the version= argument is really the
4338 * buildbot/slave/commands.py (SourceBase): keep track of the
4339 repository+branch that was used for the last checkout in
4340 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
4341 match, we clobber the directory and perform a fresh checkout
4342 rather than trying to do an in-place update. This should protect
4343 us against trying to get to branch B by doing an update in a tree
4344 obtained from branch A.
4345 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
4346 (SVN.setup): same, just the svnurl
4347 (Darcs.setup): same, just the repourl
4348 (Arch.setup): same, arch coordinates (url), version, and
4349 buildconfig. Also pull the buildconfig from the args dictionary,
4350 which we weren't doing before, so the build-config was effectively
4352 (Arch.sourcedirIsUpdateable): don't try to update when we're
4353 moving to a specific revision: arch can't go backwards, so it is
4354 safer to just clobber the tree and checkout a new one at the
4356 (Bazaar.setup): same sourcedata as Arch
4358 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
4359 use maybeWait, to work with twisted-1.3.0 and twcompat
4360 (Dependencies.testRun_Pass): same
4362 * buildbot/test/test_vc.py: rearrange, cleanup
4364 * buildbot/twcompat.py: add defer.waitForDeferred and
4365 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
4366 can work under twisted-1.3.0 .
4368 * buildbot/test/test_vc.py: rewrite. The sample repositories are
4369 now created at setUp time. This increases the runtime of the test
4370 suite considerably (from 91 seconds to 151), but it removes the
4371 need for an offline tarball, which should solve a problem I've
4372 seen where the test host has a different version of svn than the
4373 tarball build host. The new code also validates that mode=update
4374 really picks up recent commits. This approach will also make it
4375 easier to test out branches, because the code which creates the VC
4376 branches is next to the code which uses them. It will also make it
4377 possible to test some change-notification hooks, by actually
4378 performing a VC commit and watching to see the ChangeSource get
4381 2005-07-12 Brian Warner <warner@lothar.com>
4383 * docs/buildbot.texinfo (SVN): add branches example
4384 * docs/Makefile (buildbot.ps): add target for postscript manual
4386 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
4387 * buildbot/test/test_locks.py: same
4389 * buildbot/process/step.py (Darcs): comment about default branches
4391 * buildbot/master.py (BuildMaster.loadConfig): don't look for
4392 c['interlocks'] in the config file, complain if it is present.
4393 Scan all locks in c['builders'] to make sure the Locks they use
4395 * buildbot/test/test_config.py: remove old c['interlocks'] test,
4396 add some tests to check for non-uniquely-named Locks
4397 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
4398 since the unique-Lock validation code requires it now
4400 * buildbot/locks.py: fix test-case-name
4402 * buildbot/interlock.py: remove old file
4404 2005-07-11 Brian Warner <warner@lothar.com>
4406 * buildbot/test/test_interlock.py: rename to..
4407 * buildbot/test/test_locks.py: .. something shorter
4409 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
4410 versions (after 2.0.1) changed internet.TCPClient to shut down the
4411 connection in stopService. Change the code to handle this
4414 * buildbot/process/base.py (Build): handle whole-Build locks
4415 * buildbot/process/builder.py (Builder.compareToSetup): same
4416 * buildbot/test/test_interlock.py: make tests work
4418 * buildbot/process/step.py (BuildStep.startStep): complain if a
4419 Step tries to claim a lock that's owned by its own Build
4420 (BuildStep.releaseLocks): typo
4422 * buildbot/locks.py (MasterLock): use ComparableMixin so config
4423 file reloads don't replace unchanged Builders
4425 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
4426 rewrite to cover new Locks instead of old c['interlocks']
4427 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
4431 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
4432 start the master and connect the buildslave
4434 * buildbot/process/step.py (FailingDummy.done): finish with a
4435 FAILURE status rather than raising an exception
4437 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
4438 stringify a BuildRequest.reason that is None
4440 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
4442 * buildbot/status/builder.py (BuildSetStatus): implement enough to
4443 allow scheduler.Dependent to work
4444 * buildbot/buildset.py (BuildSet): set .reason and .results
4446 * buildbot/test/test_interlock.py (Locks.setUp): connect both
4447 slaves, to make the test stop hanging. It still fails, of course,
4448 because I haven't even started to implement Locks.
4450 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
4452 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
4453 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
4454 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
4455 (Dependent): new class for downstream build dependencies
4456 * buildbot/test/test_dependencies.py: tests (still failing)
4458 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
4460 2005-07-07 Brian Warner <warner@lothar.com>
4462 * buildbot/test/runutils.py (RunMixin): factored this class out..
4463 * buildbot/test/test_run.py: .. from here
4464 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
4465 added new buildbot.locks tests (which all hang right now)
4466 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
4467 * buildbot/process/step.py: claim/release per-BuildStep locks
4469 * docs/Makefile: add 'buildbot.html' target
4471 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
4472 interpreted as "HEAD", so that all VC steps can accept branch=None
4473 and have it mean the "default branch".
4475 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
4477 2005-07-07 Brian Warner <warner@lothar.com>
4479 * docs/examples/twisted_master.cfg: update to match current usage
4481 * docs/buildbot.texinfo (System Architecture): comment out the
4482 image, it doesn't exist yet and just screws up the HTML manual.
4484 2005-07-05 Brian Warner <warner@lothar.com>
4486 * debian/.cvsignore: oops, missed one. Removing leftover file.
4488 2005-06-17 Brian Warner <warner@lothar.com>
4490 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
4491 changed its output in 1.2.0, don't mistakenly think that the
4492 subversion we find isn't capable of supporting our tests.
4494 * debian/*: remove the debian/ directory and its contents, to make
4495 life easier for the proper Debian maintainer
4497 * Makefile (release): same
4499 2005-06-07 Brian Warner <warner@lothar.com>
4501 * everything: create a distinct SourceStamp class to replace the
4502 ungainly 4-tuple, let it handle merging instead of BuildRequest.
4503 Changed the signature of Source.startVC to include the revision
4504 information (instead of passing it through self.args). Implement
4505 branches for SVN (now only Darcs/Git is missing support). Add more
4508 2005-06-06 Brian Warner <warner@lothar.com>
4510 * everything: rearrange build scheduling. Create a new Scheduler
4511 object (configured in c['schedulers'], which submit BuildSets to a
4512 set of Builders. Builders can now use multiple slaves. Builds can
4513 be run on alternate branches, either requested manually or driven
4514 by changes. This changed some of the Status classes. Interlocks
4515 are out of service until they've been properly split into Locks
4516 and Dependencies. treeStableTimer, isFileImportant, and
4517 periodicBuild have all been moved from the Builder to the
4519 (BuilderStatus.currentBigState): removed the 'waiting' and
4520 'interlocked' states, removed the 'ETA' argument.
4522 2005-05-24 Brian Warner <warner@lothar.com>
4524 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
4525 erroneously abandons the connection (in clientConnectionFailed)
4526 for non-UserErrors, which means that if we lose the connection due
4527 to a network problem or a timeout, we'll never try to reconnect.
4528 Fix this by not upcalling to the buggy parent method. Note:
4529 twisted-2.0 fixes this, but the function only has 3 lines so it
4530 makes more sense to copy it than to try and detect the buggyness
4531 of the parent class. Fixes SF#1207588.
4533 * buildbot/changes/changes.py (Change.branch): doh! Add a
4534 class-level attribute to accomodate old Change instances that were
4535 pickled before 0.6.5 (where .branch was added for new Changes).
4536 This fixes the exception that occurs when you try to look at an
4537 old Change (through asHTML).
4539 * buildbot/__init__.py (version): bump to 0.6.6+ while between
4542 2005-05-23 Brian Warner <warner@lothar.com>
4544 * buildbot/__init__.py (version): release 0.6.6
4546 2005-05-23 Brian Warner <warner@lothar.com>
4548 * NEWS: update for 0.6.6 release
4549 * debian/changelog: same
4551 * buildbot/scripts/runner.py (start): put the basedir in sys.path
4552 before starting: this was done by twistd back when we spawned it,
4553 now that we're importing the pieces and running them in the
4554 current process, we have to do it ourselves. This allows
4555 master.cfg to import files from the same directory without
4556 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
4557 Stichele for the catch.
4558 (Options.opt_version): Add a --version command (actually, just make
4559 the existing --version command emit Buildbot's version too)
4561 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
4562 fix to make this behave like other LogFiles, this time to handle
4563 existing LogFiles on disk. (add the missing .upgrade method)
4564 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
4566 2005-05-21 Brian Warner <warner@lothar.com>
4568 * buildbot/test/test_runner.py (Create.testMaster): match the
4569 rawstring change in runner.py:masterTAC
4571 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
4572 TwistedWords is installed
4573 * buildbot/test/test_status.py: same, with TwistedMail
4575 * buildbot/master.py: remove old IRC/Waterfall imports (used by
4576 some old, deprecated, and removed config keys). This should enable
4577 you to use the base buildbot functionality with Twisted-2.0.0 when
4578 you don't also have TwistedWeb and TwistedWords installed
4580 2005-05-20 Brian Warner <warner@lothar.com>
4582 * buildbot/scripts/runner.py (run): call sendchange(), not
4583 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
4584 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
4585 (stop): don't wait for process to die when sending SIGHUP
4586 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
4587 directory name gets interpreted, which you don't want
4590 * buildbot/__init__.py (version): bump to 0.6.5+ while between
4593 2005-05-18 Brian Warner <warner@lothar.com>
4595 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
4597 2005-05-18 Brian Warner <warner@lothar.com>
4599 * README: update for 0.6.5
4600 * debian/changelog: same
4602 * buildbot/changes/changes.py: rename tag= to branch=, since
4603 that's how we're using it, and my design for the upcoming "build a
4604 specific branch" feature wants it. also, tag= was too CVS-centric
4605 * buildbot/changes/mail.py (parseSyncmail): same
4606 * buildbot/process/base.py (Build.isBranchImportant): same
4607 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
4608 * docs/buildbot.texinfo (Attributes of Changes): same
4610 * NEWS: update tag=, update for upcoming release
4612 2005-05-17 Brian Warner <warner@lothar.com>
4614 * buildbot/scripts/runner.py (stop): actually poll once per
4615 second, instead of re-killing the poor daemon once per second.
4616 Sleep briefly (0.1s) before the first poll, since there's a good
4617 chance we can avoid waiting the full second if the daemon shuts
4618 down quickly. Also remove the sys.exit() at the end.
4619 (start): remove the unneighborly sys.exit()
4621 * Makefile: improve permission-setting to not kick Arch so badly
4623 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
4624 default --keepalive=600, since it doesn't hurt very much, and it's
4625 a hassle to discover that you need it.
4626 * buildbot/test/test_runner.py (Create.testSlave): test it
4628 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
4629 IRC bot about EXCEPTION
4631 * buildbot/status/client.py (PBListener): upcall more correctly
4633 * buildbot/process/base.py (Build.allStepsDone): if a step caused
4634 an exception mark the overall build with EXCEPTION, not SUCCESS
4636 * buildbot/scripts/runner.py (makefile_sample): remove the leading
4638 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
4639 * Makefile: update some release-related stuff
4641 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
4642 gets called when there isn't actually an active process, just end
4643 the Command instead of blowing up. I don't know how it gets into
4644 this state, but the twisted win32 buildslave will sometimes hang,
4645 and when it shakes its head and comes back, it thinks it's still
4646 running a Command. The next build causes this command to be
4647 interrupted, but the lack of self.process.pid breaks the interrupt
4650 * NEWS: document changes since the last release
4652 * buildbot/scripts/runner.py (start): change 'buildbot start' to
4653 look for Makefile.buildbot instead of a bare Makefile . The
4654 'buildbot start' does not install this file, so you have to
4655 manually copy it if you want to customize startup behavior.
4656 (createMaster): change 'buildbot master' command to create
4657 Makefile.sample instead of Makefile, to create master.cfg.sample
4658 instead of master.cfg (requiring you to copy it before the
4659 buildmaster can be started). Both sample files are kept up to
4660 date, i.e. they are overwritten if they have been changed. The
4661 'buildbot.tac' file is *not* overwritten, but if the new contents
4662 don't match the old, a 'buildbot.tac.new' file is created and the
4663 user is warned. This seems to be a much more sane way to handle
4664 startup files. Also, don't sys.exit(0) when done, so we can run
4665 unit tests against it.
4666 (createSlave): same. Don't overwrite the sample info/ files.
4667 * buildbot/scripts/sample.mk: remove. the contents were pulled
4668 into runner.py, since they need to match the behavior of start()
4672 * docs/buildbot.texinfo (Launching the daemons): document it
4673 * buildbot/test/test_runner.py (Create): test it
4675 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
4676 version that can handle string-in-string tests, because otherwise
4677 python-2.2 fails the tests. It'd be tremendous if Trial's test
4678 took two strings under 2.2 too.
4680 * everything: fixed all deprecation warnings when running against
4681 Twisted-2.0 . (at least all the ones in buildbot code, there are a
4682 few that come from Twisted itself). This involved putting most of
4683 the Twisted-version specific code in the new buildbot.twcompat
4684 module, and creating some abstract base classes in
4685 buildbot.changes.base and buildbot.status.base (which might be
4686 useful anyway). __implements__ is a nuisance and requires an ugly
4687 'if' clause everywhere.
4689 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
4690 delay before finishing the test: it seems that smtp.sendmail
4691 doesn't hang up on the server, so we must wait a moment so it can
4692 hang up on us. This removes the trial warning about an unclean
4695 2005-05-16 Brian Warner <warner@lothar.com>
4697 * buildbot/process/step.py (Source): add 'retry' argument. It is a
4698 tuple of (delay, repeats).
4699 * buildbot/test/test_vc.py (Retry): test it
4700 * docs/buildbot.texinfo (Source Checkout): document it
4701 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
4702 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
4703 doVCFull() are handled by re-trying the checkout (after a delay)
4704 some number of times.
4705 (ShellCommand._startCommand): make header lines easier to read
4707 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
4709 (WebTest.test_logfile): make sure master gets shut down, silences
4710 some "unclean reactor" test errors
4712 * buildbot/test/test_changes.py (Sender.tearDown): spin the
4713 reactor once after shutdown, something in certain versions of
4714 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
4715 fails, svn-trunk is ok.
4717 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
4718 second win32 error message
4720 * buildbot/test/test_run.py (Status.testSlave): be smarter about
4721 validating the ETA, so the tests don't fail on slow systems
4723 2005-05-15 Brian Warner <warner@lothar.com>
4725 * buildbot/status/builder.py (HTMLLogFile): make this behave like
4726 the new LogFile class, so upgrading works properly
4727 (LogFileProducer.resumeProducing): survive resumeProducing after
4728 we've exhausted the chunkGenerator
4730 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
4732 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
4733 (Log.testUpgrade): same
4735 * docs/buildbot.texinfo (Maintenance): describe how to delete old
4736 Builds and logs with a cron job.
4738 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
4739 of the old non-offline LogFile, added code to upgrade these to
4740 new-style contents-live-on-disk instances at load time (in a way
4741 that doesn't invalidate the old Build pickles, so upgrading to
4742 0.6.5 is not a one-way operation). Got rid of everything related
4744 (LogFile.__init__): create LogFiles with the parent step status,
4745 the log's name, and a builder-relative filename where it can keep
4746 the contents on disk.
4747 (LogFile.hasContents): new method, clients are advised to call it
4748 before getText or getChunks and friends. If it returns False, the
4749 log's contents have been deleted and getText() will raise an
4751 (LogFile.getChunks): made it a generator
4752 (LogFile.subscribeConsumer): new method, takes a Twisted-style
4753 Consumer (except one that takes chunks instead of strings). This
4754 enables streaming of very large logfiles without storing the whole
4756 (BuildStatus.generateLogfileName): create names like
4757 12-log-compile-output, with a _0 suffix if required to be unique
4758 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
4759 or earlier) logfiles into new-style ones
4760 (BuilderStatus): remove everything related to 'stub' builds. There
4761 is now only one build cache, and we don't strip logs from old
4763 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
4764 since we no longer fight to keep it in the cache
4766 * buildbot/status/html.py (TextLog.render_GET): use a
4767 ChunkConsumer to stream the log entries efficiently.
4768 (ChunkConsumer): wrapper which consumes chunks and writes
4771 * buildbot/test/test_twisted.py (Parse.testParse): use a
4772 LogFile-like object instead of a real one
4774 * buildbot/test/test_status.py (MyLog): handle new LogFile code
4775 (Log.testMerge3): validate more merge behavior
4776 (Log.testChunks): validate LogFile.getChunks
4777 (Log.testUpgrade): validate old-style LogFile upgrading
4778 (Log.testSubscribe): validate LogFile.subscribe
4779 (Log.testConsumer): validate LogFile.subscribeConsumer
4781 * buildbot/interfaces.py (IStatusLogStub): remove
4782 (IStatusLog.subscribeConsumer): new method
4783 (IStatusLog.hasContents): new method
4784 (IStatusLogConsumer): describes things passed to subscribeConsumer
4786 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
4787 the log contents if it does not have any contents.
4788 (StatusResourceBuildStep.body): same
4789 (StatusResourceBuildStep.getChild): give a 404 for empty logs
4791 2005-05-14 Brian Warner <warner@lothar.com>
4793 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
4794 timeouts to try and make the windows metabuildslave not hang
4796 2005-05-13 Mike Taylor <bear@code-bear.com>
4798 * buildbot/slave/commands.py (rmdirRecursive): added a check
4799 to ensure the path passed into rmdirRecursive actually exists.
4800 On win32 a non-existant path would generate an exception.
4802 2005-05-13 Brian Warner <warner@lothar.com>
4804 * buildbot/slave/commands.py (rmdirRecursive): replacement for
4805 shutil.rmtree which behaves correctly on windows in the face of
4806 files that you have to chmod before deleting. Thanks to Bear at
4807 the OSAF for the routine.
4808 (SourceBase.doClobber): use rmdirRecursive
4810 2005-05-12 Brian Warner <warner@lothar.com>
4812 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
4813 method generate chunks instead of returning a big list. This
4814 allows the same method to be used for both old LogFile and new
4816 (OfflineLogFile.getText): use the generator
4817 (OfflineLogFile.subscribe): same
4818 * buildbot/status/html.py (TextLog.resumeProducing): same
4819 * buildbot/interfaces.py (IStatusLog.getChunks): document it
4821 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
4822 point out that OfflineLogFile does not currently work with
4823 html.Waterfall . Fixing this is high-priority.
4825 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
4826 apparently windows defaults to using stdout
4828 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
4829 better message on failure so I can figure out the win32 problem
4831 * buildbot/slave/commands.py (ShellCommand._startCommand): update
4832 log messages to include more useful copies of the command being
4833 run, the argv array, and the child command's environment.
4834 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
4836 2005-05-11 Brian Warner <warner@lothar.com>
4838 * setup.py: oops, install debug.glade so 'buildbot debugclient'
4840 * Makefile: update the deb-snapshot version
4842 * docs/buildbot.texinfo: move all .xhtml docs into a new
4843 .texinfo-format document, adding a lot of material in the process.
4844 This is starting to look like a real user's manual. Removed all
4845 the Lore-related files: *.xhtml, *.css, template.tpl .
4846 * docs/Makefile: simple makefile to run 'makeinfo'
4847 * buildbot/scripts/sample.cfg: rearrange slightly
4848 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
4850 2005-05-10 Brian Warner <warner@lothar.com>
4852 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
4853 different name for the internal twistw module, handle it.
4855 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
4856 * setup.py: .. and stop trying to install it
4858 * buildbot/process/step.py (Git): added support for 'cogito' (aka
4859 'git'), the new linux kernel VC system (http://kernel.org/git/).
4860 Thanks to Brandon Philips for the patch.
4861 * buildbot/slave/commands.py (Git): same
4863 2005-05-06 Brian Warner <warner@lothar.com>
4865 * buildbot/status/builder.py (OfflineLogFile): replace the default
4866 LogFile with a form that appends its new contents to a disk file
4867 as they arrive. The complete log data is never kept in RAM. This
4868 is the first step towards handling very large (100MB+) logfiles
4869 without choking quite so badly. (The other half is
4870 producer/consumer on the HTML pages).
4871 (BuildStepStatus.addLog): use OfflineLogFile by default
4872 (BuildStatus.getLogfileName): helper code to give the
4873 OfflineLogFile a filename to work with
4875 * buildbot/test/test_status.py (Results.testAddResults): update
4876 tests to handle new asserts
4877 * buildbot/test/test_vc.py (Patch.doPatch): same
4878 * buildbot/test/test_steps.py (BuildStep.setUp): same
4880 2005-05-05 Brian Warner <warner@lothar.com>
4882 * buildbot/scripts/runner.py (start): if there is no Makefile,
4883 launch the app by importing twistd's internals and calling run(),
4884 rather than spawning a new twistd process. This stands a much
4885 better chance of working under windows.
4886 (stop): kill the process with os.kill instead of spawning
4887 /bin/kill, again to reduce the number of external programs which
4888 windows might not have in the PATH. Also wait up to 5 seconds for
4889 the process to go away, allowing things like 'buildbot stop;
4890 buildbot start' to be reliable in the face of slow shutdowns.
4892 * buildbot/master.py (Dispatcher.__getstate__): remove old
4893 .tap-related methods
4894 (BuildMaster.__getstate__): same
4896 * buildbot/slave/bot.py (makeService): same
4897 (Options.longdesc): same
4898 * buildbot/scripts/runner.py: copy over some old mktap option text
4900 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
4901 'buildbot master' now creates a buildbot.tac file, so there is no
4902 longer a create-instance/save/reload sequence. mktap is dead, long
4904 * buildbot/scripts/sample.mk: use twistd -y, not -f
4905 * buildbot/test/test_config.py: remove mktap-based test
4906 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
4907 * README: don't reference mktap
4909 * docs/source.xhtml: document some of the attributes that Changes
4912 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
4914 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
4915 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
4916 * buildbot/changes/changes.py (Change)
4917 * buildbot/changes/mail.py (parseSyncmail)
4918 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
4920 * buildbot/process/base.py (Build.isTagImportant)
4924 2005-05-04 Brian Warner <warner@lothar.com>
4926 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
4927 connection after sending the change, so that unit tests don't
4928 complain about sockets being left around
4930 * buildbot/status/html.py (WaterfallStatusResource.body): fix
4931 exception in phase=0 rendering
4932 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4934 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
4936 * buildbot/master.py (BuildMaster.loadConfig): finally remove
4937 deprecated config keys: webPortnum, webPathname, irc, manholePort,
4938 and configuring builders with tuples.
4939 * buildbot/test/test_config.py: stop testing compatibility with
4940 deprecated config keys
4941 * buildbot/test/test_run.py: same
4943 2005-05-03 Brian Warner <warner@lothar.com>
4945 * contrib/arch_buildbot.py: survive if there are no logfiles
4946 (username): just use a string, os.getlogin isn't reliable
4948 * buildbot/scripts/runner.py (sendchange): oops, fix the command
4949 so 'buildbot sendchange' actually works. The earlier test only
4950 covered the internal (non-reactor-running) form.
4952 * contrib/arch_buildbot.py: utility that can run as an Arch hook
4953 script to notify the buildmaster about changes
4955 * buildbot/scripts/runner.py (sendchange): new command to send a
4956 change to a buildbot.changes.pb.PBChangeSource receiver.
4957 * buildbot/test/test_changes.py (Sender): test it
4959 * buildbot/master.py (BuildMaster.startService): mark .readConfig
4960 after any reading of the config file, not just when we do it in
4961 startService. This makes some tests a bit cleaner.
4963 * buildbot/changes/pb.py: add some log messages
4965 * buildbot/process/base.py (Build.startBuild): fix a bug that
4966 caused an exception when the build terminated in the very first
4968 (Build.stepDone): let steps return a status of EXCEPTION. This
4969 terminates the build right away, and sets the build's overall
4970 status to EXCEPTION too.
4971 * buildbot/process/step.py (BuildStep.failed): return a status of
4972 EXCEPTION when that is what has happened.
4974 * buildbot/process/step.py (Arch.computeSourceRevision): finally
4975 implement this, allowing Arch-based projects to get precise
4976 checkouts instead of always using the latest code
4977 (Bazaar): create variant of Arch to let folks use baz instead of
4978 tla. Requires a new buildslave too.
4979 * buildbot/slave/commands.py (Arch): add 'revision' argument
4980 (Bazaar): create variant of Arch that uses baz instead of tla.
4981 Remove the code that extracts the archive name from the
4982 register-archive output, since baz doesn't provide it, and require
4983 the user provide both the archive name and its location.
4984 * buildbot/test/test_vc.py (VC.testBazaar): added tests
4986 2005-05-02 Brian Warner <warner@lothar.com>
4988 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
4989 thanks to Nick Trout.
4991 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
4992 deals better with source Makefile coming from a read-only CVS
4993 checkout. Thanks to Nick Trout for the catch.
4995 * buildbot/__init__.py (version): bump to 0.6.4+ while between
4998 2005-04-28 Brian Warner <warner@lothar.com>
5000 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
5002 * debian/changelog: update for 0.6.4
5004 2005-04-28 Brian Warner <warner@lothar.com>
5006 * README.w32: add a checklist of steps for getting buildbot
5008 * MANIFEST.in: include it in the tarball
5012 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
5013 broken .tap files from 0.6.3 by getting rid of .services,
5014 .namedServices, and .change_svc at load time.
5016 2005-04-27 Brian Warner <warner@lothar.com>
5018 * NEWS: update in preparation for new release
5020 * buildbot/test/test_config.py (Save.testSave): don't pull in
5021 twisted.scripts.twistd, we don't need it and it isn't for windows
5024 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
5025 accomodate win32 which can't do atomic-rename
5027 2005-04-27 Brian Warner <warner@lothar.com>
5029 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
5030 timeouts to help the slow metabuildbot not flunk them so much
5031 (Disconnect.testBuild3): same
5032 (Disconnect.testBuild4): same
5033 (Disconnect.testInterrupt): same
5035 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
5036 setup, it was completely broken for new buildmasters (those which
5037 did not have a 'change.pck' already saved. Thanks to Paul Warren
5038 for catching this (embarrassing!) bug.
5039 (Dispatcher.__getstate__): don't save our registered avatar
5040 factories, since they'll be re-populated when the config file is
5042 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
5043 tests (since the real mktap-generated BuildMaster doesn't save
5045 (BuildMaster.__getstate__): don't save any service children,
5046 they'll all be re-populated when the config file is re-read.
5047 * buildbot/test/test_config.py (Save.testSave): test for this
5049 2005-04-26 Brian Warner <warner@lothar.com>
5051 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
5052 rendered with Blender.. looks a bit nicer.
5053 * buildbot/docs/images/icon.blend: add the Blender file for it
5055 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
5056 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
5057 running under windows. This appears to be the best way to allow
5058 BuildSteps to do something normal like 'trial -v buildbot.test' or
5059 'make foo' and still expect it to work. The idea is to make the
5060 BuildSteps look as much like what a developer would type when
5061 compiling or testing the tree by hand. This approach probably has
5062 problems when there are spaces in the arguments, so if you've got
5063 windows buildslaves, you'll need to pay close attention to your
5066 * buildbot/status/html.py (WaterfallStatusResource.body): add the
5067 timezone to the timestamp column.
5068 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
5070 * buildbot/scripts/runner.py (loadOptions): do something sane for
5071 windows, I think. We use %APPDATA%/buildbot instead of
5072 ~/.buildbot, but we still search everywhere from the current
5073 directory up to the root for a .buildbot/ subdir. The "is it under
5074 $HOME" security test was replaced with "is it owned by the current
5075 user", which is only performed under posix.
5076 * buildbot/test/test_runner.py (Options.testFindOptions): update
5077 tests to match. The "is it owned by the current user" check is
5078 untested. The test has been re-enabled for windows.
5080 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
5081 any "\n" in the expected output with the platform-specific line
5082 separator. Make this separator "\r\n" on PTYs under unix, they
5083 seem to do that and I don't know why
5085 * buildbot/test/test_runner.py (Options.optionsFile): disable on
5086 windows for now, I don't know what ~/.buildbot/ should mean there.
5088 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
5089 win32 compatibility, don't use "/tmp"
5090 (Basedir.testChangeBuilddir): remove more unixisms
5092 2005-04-26 Brian Warner <warner@lothar.com>
5094 * buildbot/test/test_control.py (Force.rmtree): python2.2
5095 compatibility, apparently its shutil.rmtree ignore_errors=
5096 argument is ignored.
5097 * buildbot/test/test_run.py (Run.rmtree): same
5098 (RunMixin.setUp): same
5100 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
5103 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
5104 'substring in string' operator, must use string.find(substr)!=-1
5105 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
5106 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
5108 * buildbot/scripts/runner.py (loadOptions): add code to search for
5109 ~/.buildbot/, a directory with things like 'options', containing
5110 defaults for various 'buildbot' subcommands. .buildbot/ can be in
5111 the current directory, your $HOME directory, or anywhere
5112 inbetween, as long as you're somewhere inside your home directory.
5113 (debugclient): look in ~/.buildbot/options for master and passwd
5114 (statuslog): look in ~/.buildbot/options for 'masterstatus'
5115 * buildbot/test/test_runner.py (Options.testFindOptions): test it
5117 * buildbot/status/client.py (makeRemote): new approach to making
5118 IRemote(None) be None, which works under Twisted-2.0
5119 * buildbot/test/test_status.py (Client.testAdaptation): test it
5121 * buildbot/status/builder.py (Status.builderAdded): when loading a
5122 pickled BuilderStatus in from disk, set its name after loading.
5123 The config file might have changed its name (but not its
5124 directory) while it wasn't looking.
5126 * buildbot/process/builder.py (Builder.attached): always return a
5127 Deferred, even if the builder was already attached
5128 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
5130 2005-04-25 Brian Warner <warner@lothar.com>
5132 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
5133 category-related exception when announcing a build has finished
5135 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
5136 reference no-longer-existent changemaster.sources
5137 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
5139 * buildbot/__init__.py (version): bump to 0.6.3+ while between
5142 2005-04-25 Brian Warner <warner@lothar.com>
5144 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
5146 * debian/changelog: update for 0.6.3
5148 2005-04-25 Brian Warner <warner@lothar.com>
5150 * MANIFEST.in: make sure debug.glade is in the tarball
5152 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
5154 * NEWS: update for the imminent 0.6.3 release
5156 * buildbot/status/html.py (HtmlResource.content): make the
5157 stylesheet <link> always point at "buildbot.css".
5158 (StatusResource.getChild): map "buildbot.css" to a static.File
5159 containing whatever css= argument was provided to Waterfall()
5160 (Waterfall): provide the "classic" css as the default.
5161 * docs/waterfall.classic.css: move default CSS from here ..
5162 * buildbot/status/classic.css: .. to here
5164 * MANIFEST.in: make sure classic.css is included in the tarball
5165 * setup.py: and that it is installed too, under buildbot/status/
5167 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
5168 the module level, because buildbot.tap files from 0.6.2 don't have
5169 it in their attribute dictionary.
5171 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
5172 really exists at startup, might save some confusion somewhere.
5174 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
5176 * docs/waterfall.classic.css:
5177 add a stylesheet that's almost the same as the "classic"
5180 * buildbot/status/builder.py:
5181 add EXCEPTION as a result - this is a problem for the bot
5182 maintainer, not a build problem for the changers
5183 * buildbot/process/step.py:
5184 use EXCEPTION instead of FAILURE for exceptions
5185 * buildbot/status/html.py:
5186 add build_get_class to get a class out of a build/buildstep
5187 finish naming the classes
5188 split out sourceNames to changeNames and builderNames so we
5189 can style them separately
5190 * docs/config.xhtml:
5191 finish documenting classes as they are right now
5193 * buildbot/status/html.py:
5194 name the classes as we agreed on IRC
5195 * docs/config.xhtml:
5198 * buildbot/status/html.py:
5199 same for cssclass->class_
5201 * buildbot/status/html.py:
5202 as decided on IRC, use class_ for the "class" attribute to not
5203 conflict with the class keyword, and clean up the messy **{} stuff.
5205 * buildbot/status/mail.py:
5206 put back "builders" argument, and fix docstring, because the
5207 code *ignores* builders listed in this argument
5209 * buildbot/process/builder.py:
5210 remove FIXME notes - category is now indeed a cvar of BuilderStatus
5212 * docs/config.xhtml:
5213 describe the category argument for builders
5215 * buildbot/status/builder.py:
5216 Fix a silly bug due to merging
5218 * buildbot/process/builder.py:
5219 remove category from the process Builder ...
5220 * buildbot/status/builder.py:
5221 ... and add it to BuilderStatus instead.
5222 Set category on unpickled builder statuses, they might not have it.
5223 * buildbot/master.py:
5224 include category when doing builderAdded
5225 * buildbot/status/mail.py:
5226 return None instead of self for builders we are not interested in.
5227 * buildbot/test/test_run.py:
5228 fix a bug due to only doing deferredResult on "dummy" waiting
5229 * buildbot/test/test_status.py:
5230 add checks for the Mail IStatusReceiver returning None or self
5232 * buildbot/status/html.py:
5233 fix testsuite by prefixing page title with BuildBot
5235 * buildbot/status/builder.py:
5236 have .category in builder status ...
5237 * buildbot/process/builder.py:
5238 ... and set it from Builder
5239 * buildbot/status/html.py:
5240 make .css a class variable
5241 * buildbot/test/test_status.py:
5242 write more tests to cover our categories stuff ...
5243 * buildbot/status/mail.py:
5244 ... and fix the bug that this uncovered
5246 * buildbot/changes/mail.py:
5247 * buildbot/changes/pb.py:
5248 * buildbot/master.py:
5249 * buildbot/process/base.py:
5250 * buildbot/process/factory.py:
5251 * buildbot/process/interlock.py:
5252 * buildbot/process/step.py:
5253 * buildbot/process/step_twisted.py:
5254 * buildbot/slave/commands.py:
5255 * buildbot/status/builder.py:
5256 * buildbot/status/client.py:
5257 * buildbot/status/html.py:
5258 * buildbot/status/mail.py:
5259 * buildbot/status/progress.py:
5260 * buildbot/test/test_changes.py:
5261 * buildbot/test/test_config.py:
5262 * buildbot/test/test_control.py:
5263 * buildbot/test/test_interlock.py:
5264 * buildbot/test/test_maildir.py:
5265 * buildbot/test/test_mailparse.py:
5266 * buildbot/test/test_run.py:
5267 * buildbot/test/test_slavecommand.py:
5268 * buildbot/test/test_status.py:
5269 * buildbot/test/test_steps.py:
5270 * buildbot/test/test_twisted.py:
5271 * buildbot/test/test_util.py:
5272 * buildbot/test/test_vc.py:
5273 * buildbot/test/test_web.py:
5275 add test-case-name at the top of a whole set of files
5277 * buildbot/status/builder.py:
5278 keep order of addition when getting builder names
5279 * buildbot/status/words.py:
5280 * buildbot/test/test_run.py:
5281 add test for getBuilderNames
5283 * buildbot/process/base.py:
5284 * buildbot/process/step.py:
5285 * buildbot/status/builder.py:
5286 * buildbot/status/html.py:
5287 make buildbot css-able
5288 replace the color code for purple with purple, don't understand
5289 why it wasn't purple to start with
5291 * buildbot/status/words.py:
5292 ok, so it doesn't look like BuilderStatus.remote is still valid.
5293 Use what waterfall uses instead.
5295 * buildbot/interfaces.py:
5296 * buildbot/status/builder.py:
5297 * buildbot/status/html.py:
5298 * buildbot/status/mail.py:
5299 * buildbot/status/words.py:
5300 * buildbot/test/test_run.py:
5301 use categories everywhere and make it be a list. More sensible
5302 for the future. Also make words actually respect this in
5305 * buildbot/interfaces.py:
5306 add category argument to getBuilderNames
5307 * buildbot/process/builder.py:
5308 * buildbot/status/builder.py:
5309 * buildbot/status/html.py:
5310 * buildbot/status/mail.py:
5311 * buildbot/status/words.py:
5312 * buildbot/test/test_run.py:
5313 move from specifying builders by name to specifying the category
5315 * buildbot/status/html.py:
5316 * buildbot/status/words.py:
5317 add "builders=" to __init__ of status clients so they can
5318 limit themselves to the given list of builders to report on
5320 * buildbot/status/html.py: set the title to the product name
5322 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
5324 * buildbot/interfaces.py:
5325 * buildbot/status/builder.py:
5326 more documentation. Hm, not sure if ChangeLog entries make sense
5329 2005-04-23 Brian Warner <warner@lothar.com>
5331 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
5333 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
5335 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
5336 the sub-commands that log buildmaster status to stdout and to a
5337 GUI window, respectively.
5339 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
5340 functionality is working again, but all the step-status and ETA
5341 stuff is missing. Commented out a lot of code pending more
5344 * buildbot/status/client.py: make sure that IRemote(None) is None
5346 * buildbot/changes/changes.py: import defer, oops
5347 (ChangeMaster): remove the .sources list, rely upon the fact that
5348 MultiServices can be treated as sequences of their children. This
5349 cleans up the add/remove ChangeSource routines a lot, as we keep
5350 exactly one list of the current sources instead of three.
5352 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
5353 up an empty ChangeMaster at init time.
5354 (BuildMaster.loadChanges): if there are changes to be had from
5355 disk, replace self.change_svc with the new ones. If not, keep
5356 using the empty ChangeMaster set up in __init__.
5357 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
5358 instead of a separate list, makes the code a bit cleaner.
5359 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
5360 (ConfigTest.testSources): same, also wait for loadConfig to finish.
5361 Extend the test to make sure we can get rid of the sources when
5364 2005-04-22 Brian Warner <warner@lothar.com>
5366 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
5367 and info/host files when making the slave directory
5369 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
5370 whendone= argument, just return the Deferred and let the caller do
5371 what they want with it.
5372 (Disconnect.testBuild1): wait for shutdownSlave
5373 (Basedir.testChangeBuilddir): new test to make sure changes to the
5374 builddir actually get propagated to the slave
5376 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
5377 explicit method, rather than passing the builddir in __init__ .
5378 Make sure to update self.basedir too, this was broken before.
5379 (Bot.remote_setBuilderList): use b.setBuilddir for both new
5380 builders and for ones that have just had their builddir changed.
5381 (BotFactory): add a class-level .perspective attribute, so
5382 BuildSlave.waitUntilDisconnected won't get upset when the
5383 connection hasn't yet been established
5384 (BuildSlave.__init__): keep track of the bot.Bot instance, so
5385 tests can reach through it to inspect the SlaveBuilders
5387 * buildbot/process/base.py (Build.buildException): explain the
5388 log.err with a log.msg
5389 * buildbot/process/builder.py (Builder.startBuild): same
5390 (Builder._startBuildFailed): improve error message
5392 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
5393 occurred because we lost the brand-new connection, retry instead
5394 of giving up. If not, it's probably an authorization failure, and
5395 it makes sense to stop trying. Make sure we log.msg the reason
5396 that we're log.err'ing the failure, otherwise test failures are
5397 really hard to figure out.
5399 * buildbot/master.py: change loadConfig() to return a Deferred
5400 that doesn't fire until the change has been fully implemented.
5401 This means any connected slaves have been updated with the new
5402 builddir. This change makes it easier to test the code which
5403 actually implements this builddir-updating.
5404 (BotPerspective.addBuilder): return Deferred
5405 (BotPerspective.removeBuilder): same
5406 (BotPerspective.attached): same
5407 (BotPerspective._attached): same. finish with remote_print before
5408 starting the getSlaveInfo, instead of doing them in parallel
5409 (BotPerspective.list_done): same
5410 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
5411 actually calling slave.disconnect()
5412 (BotMaster.addBuilder): same
5413 (BotMaster.removeBuilder): same
5414 (BuildMaster.loadConfig): same
5415 (BuildMaster.loadConfig_Slaves): same
5416 (BuildMaster.loadConfig_Sources): same
5417 (BuildMaster.loadConfig_Builders): same
5418 (BuildMaster.loadConfig_status): same
5420 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
5421 a Deferred that fires when the source is finally removed
5423 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
5424 the previous tree on win32, where we have to do it synchronously,
5425 make sure we return a Deferred anyway.
5426 (SourceBase.doCopy): same
5428 * buildbot/scripts/runner.py (statusgui): use the text client for
5429 now, while I rewrite the Gtk one
5430 * buildbot/clients/base.py: strip out old code, leaving just the
5431 basic print-message-on-event functionality. I also remove the
5432 ReconnectingPBClientFactory, but it does at least quit when it
5433 loses the connection instead of going silent
5435 2005-04-21 Brian Warner <warner@lothar.com>
5437 * Makefile: minor tweaks
5439 * NEWS: point out deprecation warnings, new features for
5442 * buildbot/master.py (BuildMaster.loadConfig): emit
5443 DeprecationWarnings for Builders defined with tuples. Rearrange
5444 code to facility removal of deprecated configuration keys in the
5447 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
5448 'buildbot' command to put a little Makefile in the target that
5449 helps you re-create the buildbot.tap file, start or stop the
5450 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
5451 all the files 0600, since they contain passwords.
5452 (start): if there is a Makefile, and /usr/bin/make exists, use
5453 'make start' in preference to a raw twistd command. This lets
5454 slave admins put things like PYTHONPATH variables in their
5455 Makefiles and have them still work when the slave is started with
5456 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
5457 be nice to first try the 'make' command and only fall back to
5458 twistd if it fails. TODO: the Makefile's "start" command does not
5459 add the --reactor=win32 argument when running under windows.
5460 (Options.debugclient, Options.statusgui): add sub-commands to launch
5461 the debug client (formerly in contrib/debugclient.py) and the
5462 Gtk status application (currently broken)
5463 * buildbot/clients/debug.py: move from contrib/debugclient.py
5464 * buildbot/clients/debug.glade: same
5466 * buildbot/test/test_trial.py: remove it. This requires some
5467 functionality out of Twisted that isn't there yet, and until then
5468 having it around just confuses things.
5470 * buildbot/test/test_slavecommand.py (Shell): test both with and
5471 without PTYs, and make sure that command output is properly
5472 interleaved in the with-PTY case. I think the without-PTY test
5473 should pass on windows, where we never use PTYs anyway.
5475 2005-04-20 Brian Warner <warner@lothar.com>
5477 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
5479 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
5481 * NEWS: start creating entries for the next release
5483 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
5485 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
5486 (WebTest.test_webPathname): same
5487 (WebTest.test_webPathname_port): same
5488 (WebTest.test_waterfall): use the default favicon rather than
5489 rooting around the filesystem for it. Open the expected-icon file
5490 in binary mode, to make win32 tests happier (thanks to Nick Trout
5492 * buildbot/status/html.py (buildbot_icon): win32 portability
5494 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
5495 win32-compatibility fixes from Nick Trout, the "file not found" message
5496 is different under windows
5497 (FakeSlaveBuilder.__init__): clean up setup a bit
5498 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
5500 2005-04-19 Brian Warner <warner@lothar.com>
5502 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
5503 skip-if-repositories-are-unavailable test to not kill the trial
5504 that comes with Twisted-1.3.0
5506 * setup.py: install buildbot.png icon file when installing code
5508 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
5509 environment used by the command, at least on the child side.
5511 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
5512 this method needs to be added and implemented because it gets
5513 called under heavy load. I don't quite understand the
5514 producer/consumer API enough to write it.
5515 (StatusResource.getChild): add a resource for /favicon.ico
5516 (Waterfall.__init__): add favicon= argument
5517 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
5518 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
5519 (WebTest.test_webPathname): same
5520 (WebTest.test_webPathname_port): same
5521 * docs/config.xhtml: mention favicon=
5522 * buildbot/buildbot.png: add a default icon, dorky as it is
5524 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
5526 * buildbot/master.py:
5527 * buildbot/process/base.py:
5528 * buildbot/process/builder.py:
5529 * buildbot/process/interlock.py:
5530 * buildbot/status/builder.py:
5531 * buildbot/status/html.py:
5532 * buildbot/status/mail.py:
5533 * buildbot/status/words.py:
5534 new documentation while digging through the code
5536 2005-04-17 Brian Warner <warner@lothar.com>
5538 * general: try to fix file modes on all .py files: a+r, a-x,
5539 but let buildbot/clients/*.py be +x since they're tools
5541 * docs/epyrun (addMod): when an import fails, say why
5543 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
5545 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
5547 * buildbot/process/base.py:
5548 * buildbot/process/builder.py:
5549 * buildbot/status/builder.py:
5550 new documentation while digging through the code
5552 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
5554 * buildbot/changes/changes.py:
5555 * buildbot/changes/p4poller.py:
5556 * buildbot/interfaces.py:
5557 * buildbot/process/base.py:
5558 * buildbot/process/builder.py:
5559 * buildbot/process/step.py:
5560 * buildbot/process/step_twisted.py:
5561 * buildbot/slave/bot.py:
5562 * buildbot/slave/commands.py:
5563 * buildbot/status/builder.py:
5564 fix all docstrings to make epydoc happy. In the process of fixing
5565 some, I also moved pieces of docs, and removed some deprecated
5568 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
5570 * buildbot/process/builder.py:
5571 * buildbot/process/interlock.py:
5572 * buildbot/process/process_twisted.py:
5573 * buildbot/process/step.py:
5574 BuildProcess -> Build, as it looks like that's what happened
5575 * buildbot/process/base.py:
5576 * buildbot/process/factory.py:
5579 2005-04-17 Brian Warner <warner@lothar.com>
5581 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5582 update compile command to accomodate the Twisted split.. now
5583 instead of './setup.py build_ext -i', you do './setup.py all
5584 build_ext -i', to run build_ext over all sub-projects.
5585 (FullTwistedBuildFactory): same
5586 (TwistedReactorsBuildFactory): same
5588 * buildbot/status/html.py (TextLog.finished): null out self.req
5589 when we're done, otherwise the reference cycle of TextLog to .req
5590 to .notifications to a Deferred to TextLog.stop keeps them from
5591 being collected, and consumes a huge (610MB on pyramid at last
5592 check) amount of memory.
5594 2005-04-11 Brian Warner <warner@lothar.com>
5596 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
5597 normalize the VC-repository location.. makes SVN happier with
5598 certain test environments.
5600 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
5601 RemoteShellCommand gets its own .env dictionary, so that code in
5602 start() doesn't mutate the original. I think this should fix the
5603 step_twisted.Trial problem where multiple identical components
5604 kept getting added to PYTHONPATH= over and over again.
5606 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
5607 adding epydoc-format docstrings to many classes. Thanks to Thomas
5608 Vander Stichele for the patches.
5609 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
5610 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
5611 * buildbot/slave/bot.py, commands.py, registry.py: same
5613 2005-04-05 Brian Warner <warner@lothar.com>
5615 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
5616 preserve timestamps, helps incremental builds of large trees.
5617 Patch from Rene Rivera.
5619 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
5620 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
5623 2005-04-03 Brian Warner <warner@lothar.com>
5625 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
5626 with one dict, apparently exec has some scoping bugs when used
5627 with both global/local dicts. Thanks to Nathaniel Smith for the
5630 2005-04-02 Brian Warner <warner@lothar.com>
5632 * buildbot/process/step_twisted.py (countFailedTests): the new
5633 trial in Twisted-2.0 emits a slightly different status line than
5634 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
5635 mistakenly think the test count is unparseable.
5636 (Trial.start): note that for some reason each build causes another
5637 copy of self.testpath to be prepended to PYTHONPATH. This needs to
5638 be fixed but I'm not sure quite where the problem is.
5640 2005-04-01 Brian Warner <warner@lothar.com>
5642 * buildbot/test/test_run.py (Run.testMaster): change some uses of
5643 deferredResult to avoid hangs/warnings under twisted-2.0
5644 (RunMixin.tearDown): same
5645 (RunMixin.shutdownSlave): same
5646 (Disconnect.testIdle1): same
5647 (Disconnect.testBuild2): same: wait one second after the build
5648 finishes for test to really be done.. this should be cleaned up to
5649 avoid wasting that second. Builder.detach uses a callLater(0),
5650 either that should be done in-line (something else needed that
5651 behavior), or it should return a Deferred that fires when the
5652 builder is really offline.
5653 (Disconnect.testBuild3): same
5654 (Disconnect.testDisappear): same
5656 * buildbot/test/test_web.py: rearrange server-setup and teardown
5657 code to remove unclean-reactor warnings from twisted-2.0
5659 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
5660 so the tests don't hang under twisted-2.0
5662 2005-03-31 Brian Warner <warner@lothar.com>
5664 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
5665 caused a warning each time the master changed our set of builders
5667 * buildbot/status/builder.py (BuildStatus.saveYourself): under
5668 w32, don't unlink the file unless it already exists. Thanks to
5669 Baptiste Lepilleur for the catch.
5670 (BuilderStatus.saveYourself): same
5672 2005-02-01 Brian Warner <warner@lothar.com>
5674 * buildbot/status/html.py (TextLog.getChild): use a /text child
5675 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
5676 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
5677 logfile as text/plain (no markup, no headers). This replaces the
5678 previous scheme (which used an ?text=1 argument), and gets us back
5679 to a relative link (which works better when the buildbot lives
5680 behind another web server, such as Apache configured as a reverse
5681 proxy). Thanks to Gerald Combs for spotting the problem.
5683 * buildbot/__init__.py (version): bump to 0.6.2+ while between
5686 2004-12-13 Brian Warner <warner@lothar.com>
5688 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
5690 * debian/changelog: update for 0.6.2
5691 * NEWS: finalize for 0.6.2
5693 2004-12-11 Brian Warner <warner@lothar.com>
5695 * NEWS: bring it up to date
5697 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
5698 detection code. Require some sign of life from the buildmaster
5699 every BotFactory.keepaliveInterval seconds. Provoke this
5700 indication at BotFactory.keepaliveTimeout seconds before the
5701 deadline by sending a keepalive request. We don't actually care if
5702 that request is answered in a timely fashion, what we care about
5703 is that .activity() is called before the deadline. .activity() is
5704 triggered by any PB message from the master (including an ack to
5705 one of the slave's status-update messages). With this new scheme,
5706 large status messages over slow pipes are OK, as long as any given
5707 message can be sent (and thus acked) within .keepaliveTimeout
5708 seconds (which defaults to 30).
5709 (SlaveBuilder.remote_startCommand): record activity
5710 (SlaveBuilder.ackUpdate): same
5711 (SlaveBuilder.ackComplete): same
5712 (BotFactory.gotPerspective): same
5713 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
5715 2004-12-09 Brian Warner <warner@lothar.com>
5717 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
5720 * buildbot/process/step_twisted.py (Trial._commandComplete):
5721 update self.cmd when we start the 'cat test.log' transfer. Without
5722 this, we cannot interrupt the correct RemoteCommand when we lose
5725 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
5726 trying to tell the slave to stop the command if we're already
5727 inactive, or if we no longer have a .remote
5729 * buildbot/process/builder.py (Builder._detached): don't let an
5730 exception in currentBuild.stopBuild() prevent the builder from
5731 being marked offline
5733 2004-12-07 Brian Warner <warner@lothar.com>
5735 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
5736 KeyError that happens when you ask for a non-existent Builder, and
5737 translate it into a UsageError.
5739 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
5740 losing the slave in the middle of a remote step is handled too
5742 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
5743 be a Failure, so be sure to stringify it before using it as the
5744 contents of the 'interrupt' logfile
5745 (RemoteCommand.interrupt): use stringified 'why' in
5746 remote_interruptCommand too, just in case
5748 2004-12-06 Brian Warner <warner@lothar.com>
5750 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
5751 instead of 'tla update', which is more efficient in case we've
5752 missed a couple of patches since the last update.
5754 * debian/changelog: update for previous (0.6.1) release. Obviously
5755 this needs to be handled better.
5757 2004-12-05 Brian Warner <warner@lothar.com>
5759 * NEWS: update for stuff since last release
5761 * buildbot/master.py (DebugPerspective.attached): return 'self', to
5762 match the maybeDeferred change in Dispatcher.requestAvatar
5763 * buildbot/changes/pb.py (ChangePerspective.attached): same
5764 * buildbot/status/client.py (StatusClientPerspective.attached): same
5765 * buildbot/process/builder.py (Builder._attached3): same
5766 * buildbot/pbutil.py (NewCredPerspective.attached): same
5768 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
5769 the date to the top-most box, if it is not the same as today's
5772 * docs/slave.xhtml: provide a buildslave setup checklist
5774 * docs/source.xhtml (Arch): correct terminology
5776 2004-12-04 Brian Warner <warner@lothar.com>
5778 * buildbot/test/test_slavecommand.py: use sys.executable instead
5779 of hard-coding 'python' for child commands, might help portability
5781 * docs/examples/twisted_master.cfg: update to current usage
5783 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
5784 'stop build' command to the IRC bot
5786 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
5787 message that broke PBChangeSource
5789 * buildbot/slave/bot.py: clean up shutdown/lose-master code
5790 (SlaveBuilder): make some attributes class-level, remove the old
5791 "update queue" which existed to support resuming a build after the
5792 master connection was lost. Try to reimplement that feature later.
5793 (SlaveBuilder.stopCommand): clear self.command when the
5794 SlaveCommand finishes, so that we don't try to kill a leftover one
5796 (SlaveBuilder.commandComplete): same, merge with commandFailed and
5799 * buildbot/slave/commands.py (SourceBase): set self.command for
5800 all VC commands, so they can be interrupted.
5802 2004-12-03 Brian Warner <warner@lothar.com>
5804 * buildbot/master.py: clean up slave-handling code, to handle
5805 slave-disconnect and multiple-connect better
5806 (BotPerspective): make these long-lasting, exactly one per bot
5807 listed in the config file.
5808 (BotPerspective.attached): if a slave connects while an existing
5809 one appears to still be connected, disconnect the old one first.
5810 (BotPerspective.disconnect): new method to forcibly disconnect a
5811 buildslave. Use some hacks to empty the transmit buffer quickly to
5812 avoid the long (20-min?) TCP timeout that could occur if the old
5813 slave has dropped off the net.
5814 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
5815 own their own SlaveStatus objects. Remove .attached/.detached, add
5816 .addSlave/.removeSlave, treat slaves like Builders (config file
5817 parsing sends deltas to the BotMaster). Inform the slave
5818 instances, i.e. the BotPerspective, about addBuilder and
5820 (BotMaster.getPerspective): turns into a single dict lookup
5821 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
5822 which gives BotPerspective.attached a chance to disconnect the old
5824 (BuildMaster.loadConfig): add code (disabled) to validate that all
5825 builders use known slaves (listed in c['bots']). The check won't
5826 work with tuple-specified builders, which are deprecated but not
5827 yet invalid, so the check is disabled for now.
5828 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
5829 routine, do the add/changed/removed dance with them like we do
5831 (BuildMaster.loadConfig_Sources): move source-config into a
5832 separate routine too
5834 * buildbot/status/builder.py (Status.getSlave): get the
5835 SlaveStatus object from the BotPerspective, not the BotMaster.
5837 * buildbot/test/test_run.py: bunch of new tests for losing the
5838 buildslave at various points in the build, handling a slave that
5839 connects multiple times, and making sure we can interrupt a
5842 * buildbot/slave/bot.py (BuildSlave): make it possible to use
5843 something other than 'Bot' for the Bot object, to make certain
5844 test cases easier to write.
5845 (BuildSlave.waitUntilDisconnected): utility method for testing
5847 2004-11-30 Brian Warner <warner@lothar.com>
5849 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
5851 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
5852 argument, return a Deferred that always fires with True or False.
5853 I don't use an errback to indicate 'ping failed' so that callers
5854 are free to ignore the deferred without causing spurious errors in
5856 * buildbot/process/builder.py (BuilderControl.ping): implement it
5858 * buildbot/test/test_run.py (Status.testDisappear): test ping
5859 (Status.disappearSlave): fix it
5861 2004-11-30 Brian Warner <warner@lothar.com>
5863 * buildbot/interfaces.py (IBuildControl): add .stopBuild
5864 (IBuilderControl): add .getBuild(num), only works for the current
5865 build, of course, although it might be interesting to offer
5866 something for builds in the .waiting or .interlocked state.
5868 * buildbot/process/base.py (Build): have .stopBuild just do the
5869 interrupt, then let the build die by itself.
5870 (BuildControl): add .stopBuild, and add a point-event named
5871 'interrupt' just after the build so status viewers can tell that
5873 (BuilderControl): add .getBuild
5875 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
5876 stops when you kill it, good for testing
5877 (ShellCommand.interrupt): add a logfile named 'interrupt' which
5878 contains the 'reason' text.
5880 * buildbot/status/html.py: Add Stop Build button, if the build can
5881 still be stopped. Send a Redirect (to the top page) one second
5882 later, hopefully long enough for the interrupt to have an effect.
5883 Move make_row() up to top-level to share it between Stop Build and
5886 * buildbot/slave/commands.py: only kill the child process once
5888 * buildbot/test/test_run.py: add testInterrupt
5890 2004-11-29 Brian Warner <warner@lothar.com>
5892 * buildbot/process/base.py: Refactor command interruption. The
5893 Build is now responsible for noticing that the slave has gone
5894 away: Build.lostRemote() interrupts the current step and makes
5895 sure that no further ones will be started.
5897 * buildbot/process/builder.py: When the initial remote_startBuild
5898 message fails, log it: this usually indicates that the slave has
5899 gone away, but we don't really start paying attention until they
5900 fail to respond to the first step's command.
5902 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
5903 slave disconnect. Now sports a new interrupt() method. Error
5904 handling was simplified a lot by chaining deferreds, so
5905 remoteFailed/remoteComplete were merged into a single
5906 remoteComplete method (which can now get a Failure object).
5907 Likewise failed/finished were merged into just _finished.
5908 (BuildStep): Add interrupt(why) method, and if why is a
5909 ConnectionLost Failure then the step is failed with some useful
5912 * buildbot/slave/bot.py: stop the current command when the remote
5913 Step reference is lost, and when the slave is shut down.
5914 (Bot): make it a MultiService, so it can have children. Use
5915 stopService to tell when the slave is shutting down.
5916 (SlaveBuilder): make it a Service, and a child of the Bot. Add
5917 remote_interruptCommand (which asks the current SlaveCommand to
5918 stop but allows it to keep emitting status messages), and
5919 stopCommand (which tells it to shut up and die).
5921 * buildbot/slave/commands.py: make commands interruptible
5922 (ShellCommand.kill): factor out os.kill logic
5923 (Command): factor out setup()
5924 (Command.sendStatus): don't send status if .running is false, this
5925 happens when the command has been halted.
5926 (Command.interrupt): new method, used to tell the command to die
5927 (SlaveShellCommand): implement .interrupt
5928 (DummyCommand): implement .interrupt
5929 (SourceBase, etc): factor out setup(), don't continue substeps if
5932 * buildbot/status/builder.py: fix all waitUntilFinished() methods
5933 so they can be called after finishing
5935 * buildbot/test/test_run.py: new tests for disconnect behavior,
5936 refactor slave-shutdown routines, add different kinds of
5939 2004-11-27 Brian Warner <warner@lothar.com>
5941 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
5942 method to express ETA time like "2m45s" instead of "165 seconds"
5944 2004-11-24 Brian Warner <warner@lothar.com>
5946 * buildbot/test/test_vc.py (VC.testArch): unregister the test
5947 archive after the test completes, to avoid cluttering the user's
5948 'tla archives' listing with a bogus entry. Arch doesn't happen to
5949 provide any way to override the use of ~/.arch-params/, so there
5950 isn't a convenient way to avoid touching the setup of the user who
5952 (VC_HTTP.testArchHTTP): same
5954 2004-11-23 Brian Warner <warner@lothar.com>
5956 * buildbot/status/html.py (TextLog): split render() up into
5957 render_HEAD and render_GET. Use a Producer when sending log
5958 chunks, to reduce memory requirements and avoid sending huge
5959 non-Banana-able strings over web.distrib connections. Requires
5960 peeking under the covers of IStatusLog.
5961 (TextLog.resumeProducing): fix the "as text" link, handle client
5962 disconnects that occur while we're still sending old chunks.
5964 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
5965 use defer.succeed, not the non-existent defer.success
5966 (LogFile.waitUntilFinished): same
5967 (LogFile.subscribe): don't add watchers to a finished logfile
5969 * buildbot/__init__.py (version): bump to 0.6.1+ while between
5972 2004-11-23 Brian Warner <warner@lothar.com>
5974 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
5976 2004-11-23 Brian Warner <warner@lothar.com>
5978 * NEWS: update for the 0.6.1 release
5979 * MANIFEST.in: add new files
5981 * README (INSTALLATION): explain how to enable the extra VC tests
5983 * buildbot/status/builder.py (LogFile): add .runEntries at the class
5984 level to, so old pickled builds can be displayed ok
5986 2004-11-22 Brian Warner <warner@lothar.com>
5988 * NEWS: summarize updates since last release
5990 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
5991 Yoz Grahame. Closes SF#1050138.
5993 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
5996 * buildbot/process/step_twisted.py (Trial): update docs a bit
5998 * docs/factories.xhtml: fix Trial factory docs to match reality.
6001 * buildbot/process/factory.py (Trial.__init__): add args for
6002 randomly= and recurse=, making them available to instantiators
6003 instead of only to subclassers. Closes: SF#1049759.
6005 2004-11-15 Brian Warner <warner@lothar.com>
6007 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6008 try to teach the Quick factory to use multiple versions of python
6010 2004-11-12 Brian Warner <warner@lothar.com>
6012 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
6013 safer w32-compatible approach, and only use it on windows
6014 (BuildStatus.saveYourself): same
6016 2004-11-11 Brian Warner <warner@lothar.com>
6018 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
6019 it: one string merge per chunk. There are now separate .entries
6020 and .runEntries lists: when enumerating over all chunks, make sure
6022 * buildbot/test/test_status.py (Log): more tests
6024 * buildbot/status/builder.py (LogFile.addEntry): Merge string
6025 chunks together, up to 10kb per chunk. This ought to cut down on
6026 the CPU-burning overhead of large log files. Thanks to Alexander
6027 Staubo for spotting the problem.
6028 * buildbot/test/test_status.py (Log): tests for same
6030 2004-11-10 Brian Warner <warner@lothar.com>
6032 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
6033 header to outbound mail
6034 * buildbot/test/test_status.py (Mail.testBuild1): test for same
6036 2004-11-08 Brian Warner <warner@lothar.com>
6038 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
6039 can't do os.rename() onto an existing file, so catch the exception
6040 and unlink the target file first. This introduces a slight window
6041 where the existing file could be lost, but the main failure case
6042 (disk full) should still be handled safely.
6043 (BuildStatus.saveYourself): same
6045 * buildbot/changes/pb.py (ChangePerspective): use a configurable
6046 separator character instead of os.sep, because the filenames being
6047 split here are coming from the VC system, which can have a
6048 different pathname convention than the local host. This should
6049 help a buildmaster running on windows that uses a CVS repository
6050 which runs under unix.
6051 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
6053 * buildbot/process/step_twisted.py (Trial.createSummary): survive
6054 when there are no test failures to be parsed
6056 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
6057 instead of the unix-specific os.system("cp"), thanks to Elliot
6058 Murphy for this and the other buildbot-vs-windows catches.
6059 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
6061 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
6062 echo the command as it is run
6064 * setup.py: install sample.mk too, not just sample.cfg
6065 (scripts): install contrib/windows/buildbot.bat on windows
6067 2004-11-07 Brian Warner <warner@lothar.com>
6069 * buildbot/process/builder.py (Builder._detached): clear the
6070 self.currentBuild reference, otherwise the next build will be
6071 skipped because we think the Builder is already in use.
6073 * docs/examples/twisted_master.cfg: update to match current usage
6074 on the Twisted buildbot
6076 2004-10-29 Brian Warner <warner@lothar.com>
6078 * buildbot/status/mail.py (MailNotifier): fix typo in docs
6080 2004-10-28 Brian Warner <warner@lothar.com>
6082 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
6083 have separate doVCUpdate/doVCFull methods. Catch an update failure
6084 and respond by clobbering the source directory and re-trying. This
6085 will handle local changes (like replacing a file with a directory)
6086 that will cause CVS and SVN updates to fail.
6087 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
6089 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
6092 2004-10-19 Brian Warner <warner@lothar.com>
6094 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
6096 * buildbot/status/html.py (StatusResourceTestResults): display any
6097 TestResults that the Build might have
6098 (StatusResourceTestResult): and the logs for each TestResult
6099 (StatusResourceBuild): add link from the per-build page
6101 2004-10-15 Brian Warner <warner@lothar.com>
6103 * buildbot/process/step_twisted.py (Trial.createSummary): parse
6104 the 'problems' portion of stdout, add TestResults to our build
6105 * buildbot/test/test_twisted.py (Parse.testParse): test it
6107 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
6108 to retrieve a dict of accumulated test results
6109 (ITestResult): define what a single test result can do
6110 * buildbot/status/builder.py (TestResult): implement ITestResult
6111 (BuildStatus.getTestResults): retrieve dict of TestResults
6112 (BuildStatus.addTestResult): add TestResults
6113 * buildbot/test/test_status.py (Results.testAddResults): test it
6115 2004-10-14 Brian Warner <warner@lothar.com>
6117 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
6118 instead of os.system("rm -rf") for win32 portability
6120 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
6121 SignalMixin instead of starting/stopping the reactor, which is
6122 likely to cause problems with other tests
6124 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
6125 self.copyComplete() call. Yoz Grahame makes the catch.
6127 * contrib/windows/buildbot.bat: helper script to deal with path
6128 issues. Thanks to Yoz Grahame.
6130 * buildbot/master.py (BuildMaster.startService): don't register a
6131 SIGHUP handler if the signal module has no SIGHUP attribute.
6132 Apparently win32 does this.
6134 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
6136 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
6137 test if the reactor can't offer UNIX sockets
6139 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
6140 error introduced in the last commit. We really need that
6143 2004-10-12 Brian Warner <warner@lothar.com>
6145 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
6146 when describing a maildir source. Thanks to Stephen Davis.
6148 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
6151 * buildbot/scripts/runner.py (createMaster): install Makefile too
6152 (start): add --no_save to 'start' command
6153 * buildbot/scripts/sample.mk: simple convenience Makefile with
6154 start/stop/reload targets
6156 * buildbot/__init__.py (version): bump to 0.6.0+ while between
6159 2004-09-30 Brian Warner <warner@lothar.com>
6161 * setup.py: Releasing buildbot-0.6.0
6163 2004-09-30 Brian Warner <warner@lothar.com>
6165 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
6166 test_trial.py from the source tarball until support is complete.
6168 * NEWS: update for 0.6.0 release
6169 * buildbot/__init__.py (version): same
6172 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
6173 'source' command to tell users where to get the Buildbot source
6175 * docs/examples/*.cfg: update to modern standards
6177 * NEWS: update for release
6179 * buildbot/scripts/runner.py (createMaster): remove the
6180 -shutdown.tap stuff now that it isn't necessary
6182 (start): launch buildbot.tap, not buildbot-shutdown.tap
6185 * buildbot/status/mail.py (Domain): shorten class name
6186 (MailNotifier): if lookup= is a string, pass it to Domain()
6187 * buildbot/test/test_status.py (Mail.testBuild1): new class name
6188 (Mail.testBuild2): test the string-to-Domain shortcut
6189 (Mail.testMail): fix test
6192 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
6195 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
6196 more attributes on load
6197 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
6198 to accomodate the whole waterfall page at once, and the thrashing
6199 results in a lot of unnecessary loads
6200 (BuildStatus.saveYourself): use binary pickles, not fluffy text
6201 (BuilderStatus.saveYourself): same
6202 (BuilderStatus.eventGenerator): stop generating on the first missing
6203 build. We assume that saved builds are deleted oldest-first.
6204 (BuildStepStatus.__getstate__): .progress might not exist
6206 * buildbot/changes/changes.py (ChangeMaster): make it
6207 serializable, in $masterdir/changes.pck
6208 (ChangeMaster.stopService): save on shutdown
6209 * buildbot/master.py (BuildMaster.loadChanges): load at startup
6210 * buildbot/test/test_config.py: load Changes before config file
6213 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
6214 "Oh my god, you killed the command" header on a separate line
6216 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
6217 skip over corrupted build pickles
6218 (BuilderStatus.getFullBuildByNumber): same
6219 (BuilderStatus.eventGenerator): skip over unavailable builds
6220 (BuildStatus.saveYourself): save builds to a .tmp file first, then
6221 do an atomic rename. This prevents a corrupted pickle when some
6222 internal serialization error occurs.
6223 (BuilderStatus.saveYourself): same
6225 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
6226 the timeout for shell commands, it got lost somehow
6228 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
6229 run out of build steps, return the rest of the builder events
6231 * buildbot/interfaces.py (IBuilderControl.ping): add method
6233 * buildbot/process/builder.py (BuilderControl.ping): move
6234 slave-ping to BuilderControl, and fix the failure case in the
6235 process (Event.finish() is the verb, Event.finished is the noun).
6237 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
6238 through the BuilderControl instead of the BuilderStatus
6239 (EventBox): add adapter for builder.Event, allowing builder events to
6240 be displayed in the waterfall display
6242 * buildbot/master.py (BotMaster.stopService): add a 'master
6243 shutdown' event to the builder's log
6244 (BuildMaster.startService): and a 'master started' on startup
6246 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
6247 builder events into the BuildStep event stream
6248 (Status.builderAdded): add a 'builder created' event
6251 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
6252 command to announce the completion of a running build
6253 (IrcStatusBot.command_FORCE): announce when the build finishes
6255 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
6256 don't evict unfinished builds from the cache: they must stay in
6257 the full-cache until their logfiles have stopped changing. Make
6258 sure the eviction loop terminates if an unfinished build was hit.
6259 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
6260 This lets exceptions be dumped in an email status message. Really
6261 we need LogFiles which contain both text and HTML, instead of two
6263 (BuildStatus.__getstate__): handle self.finished=False
6264 (Status.builderAdded): if the pickle is corrupted, abandon the
6265 history and create a new BuilderStatus object.
6267 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
6268 self.progress attribute, helped one test which doesn't fully set
6269 up the Build object.
6271 * buildbot/interfaces.py (IStatusLogStub): split out some of the
6272 IStatusLog methods into an Interface that is implemented by "stub"
6273 logs, for which all the actual text chunks are on disk (in the
6274 pickled Build instance). To show the log contents, you must first
6275 adapt the stub log to a full IStatusLog object.
6277 * buildbot/status/builder.py (LogFileStub): create separate stub
6278 log objects, which can be upgraded to a real one if necessary.
6279 (LogFile): make them persistable, and let them stubify themselves
6281 (BuildStepStatus): same
6283 (BuildStatus.saveYourself): save the whole build out to disk
6284 (BuilderStatus): make it persistable
6285 (BuilderStatus.saveYourself): save the builder to disk
6286 (BuilderStatus.addFullBuildToCache): implement two caches which
6287 hold Build objects: a small one which holds full Builds, and a
6288 larger one which holds "stubbed" Builds (ones with their LogFiles
6289 turned into LogFileStubs). This reduces memory usage by the
6290 buildmaster by not keeping more than a few (default is 2) whole
6291 build logs in RAM all the time.
6292 (BuilderStatus.getBuild): rewrite to pull from disk (through the
6294 (BuilderStatus.eventGenerator): rewrite since .builds went away
6295 (BuilderStatus.buildStarted): remove the .builds array. Add the
6296 build to the "full" cache when it starts.
6297 (BuilderStatus._buildFinished): save the build to disk when it
6299 (Status): give it a basedir (same as the BuildMaster's basedir)
6300 where the builder pickles can be saved
6301 (Status.builderAdded): create the BuilderStatus ourselves, by
6302 loading a pickle from disk (or creating a new instance if there
6303 was none on disk). Return the BuilderStatus so the master can glue
6304 it into the new Builder object.
6306 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
6307 all BuilderStatuses to save themselves out to disk. This is in
6308 lieu of saving anything important in the main Application pickle
6309 (the -shutdown.tap file).
6310 (BuildMaster.__init__): give Status() a basedir for its files
6311 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
6312 to get the BuilderStatus, then give it to the Builder (instead of
6313 doing it the other way around). It's ok if the status announces
6314 the new Builder before it's really ready, as the outside world can
6315 only see the BuilderStatus object anyway (and it is ready before
6316 builderAdded returns). Use the builder's "builddir" (which
6317 normally specifies where the slave will run the builder) as the
6318 master's basedir (for saving serialized builds).
6320 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
6321 coerce the logfile to IStatusLog before trying to get the text
6322 chunks out of it. This will pull the full (non-stubified) Build in
6323 from disk if necessary.
6324 (TextLog): fix the adapter registration
6326 * buildbot/test/test_control.py (Force.setUp): create the basedir
6327 * buildbot/test/test_web.py: same
6328 * buildbot/test/test_vc.py (SetupMixin.setUp): same
6329 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
6330 * buildbot/test/test_run.py (Run.testMaster): same
6331 (Status.setUp): same
6333 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
6335 * buildbot/status/html.py (Waterfall.__init__): store actual
6336 allowForce flag passed in rather than using True for everyone;
6337 make sure setting it to False doesn't cause a NameError
6339 (StatusResourceBuilder.__init__) add the builder name to the page
6341 (StatusResourceBuilder.body) move HTML generation for a name/value
6342 row into a helper method (StatusResourceBuilder.make_row); only
6343 generate the "Force Build" form if allowForce was True and the
6344 slave is connected. Use class attributes in the generated HTML to
6345 spread a little CSS-joy.
6347 2004-09-28 Brian Warner <warner@lothar.com>
6349 * buildbot/process/step_twisted.py (Trial.createSummary): fix
6350 warning-scanner to not ignore things like
6351 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
6353 * buildbot/status/html.py (StatusResource.control): add some
6354 class-level values for .control in an attempt to make upgrading
6357 * buildbot/util.py (ComparableMixin): survive missing attributes,
6358 such as when a class is modified and we're comparing old instances
6361 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
6362 failure handling, remove a redundant try/except block. Don't
6363 return the full traceback to the IRC channel.
6364 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
6365 error messages. Get ETA properly.
6367 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
6368 the reason, since (at least) IRC message will have <> in them.
6369 (StatusResourceBuilder.__init__): take an IBuilderControl
6370 (StatusResourceBuilder.force): use the IBuilderControl we get in
6371 the constructor instead of trying to make our own. Catch the
6372 new exceptions and ignore them for now (until we make an
6373 intermediate web page where we could show the error message)
6374 (StatusResource): create with an IControl, use it to give an
6375 IBuilderControl to all children
6376 (Waterfall): take an allowForce= option, pass an IControl object
6377 to StatusResource if it is True
6379 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
6381 * buildbot/master.py (BotPerspective.perspective_forceBuild):
6382 catch new exceptions and return string forms
6384 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
6385 * buildbot/process/builder.py (Builder.forceBuild): raise them
6386 * buildbot/test/test_control.py (Force.testNoSlave): new test
6387 (Force.testBuilderInUse): same
6390 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
6392 * buildbot/test/test_run.py: use IControl
6393 * buildbot/test/test_vc.py: same
6395 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
6396 to use IControl. Still offline.
6397 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
6399 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
6400 who=None so periodic builds don't send out status mail
6401 (Builder.forceBuild): include reason in the log message
6402 (BuilderControl.forceBuild): rename 'name' to 'who'
6404 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
6405 'who' parameter, but make it None by default so builds forced by
6406 slave admins don't cause status mail to be sent to anybody
6407 (BotMaster.forceBuild): same. this method is deprecated.
6408 (DebugPerspective.perspective_forceBuild): same, use IControl.
6409 (DebugPerspective.perspective_fakeChange): use IControl..
6410 (Dispatcher.requestAvatar): .. so don't set .changemaster
6412 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
6413 parameter to avoid confusion with the name of the builder
6416 * buildbot/status/mail.py: refine comment about needing 2.3
6418 * buildbot/status/html.py: move all imports to the top
6420 * buildbot/test/test_control.py: test new interfaces
6421 * buildbot/test/test_run.py (Status): handle new interfaces
6422 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
6424 * buildbot/process/base.py (BuildControl): implement IBuildControl
6425 and its lonely getStatus() method
6427 * buildbot/process/builder.py (BuilderControl): implement
6428 IBuilderControl, obtained by adapting the Builder instance
6429 (Builder.startBuild): return a BuilderControl instead of a
6430 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
6431 accomplish the same thing.
6433 * buildbot/master.py: move all import statements to the top
6434 (Control): implement IControl, obtained by adapting the
6435 BuildMaster instance.
6437 * buildbot/interfaces.py: add IControl, IBuilderControl, and
6438 IBuildControl. These are used to force builds. Eventually they
6439 will provide ways to reconfigure the Builders, pause or abandon a
6440 Build, and perhaps control the BuildMaster itself.
6442 2004-09-26 Brian Warner <warner@lothar.com>
6444 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
6445 ends up comparing us against something without a .__class__
6447 2004-09-24 Brian Warner <warner@lothar.com>
6449 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
6452 * Makefile: add 'deb-snapshot' target, to create a timestamped
6455 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
6457 2004-09-23 Brian Warner <warner@lothar.com>
6459 * buildbot/__init__.py (version): move version string here
6460 * setup.py: get version string from buildbot.version
6461 * buildbot/status/html.py (WaterfallStatusResource.body): add
6462 buildbot version to the page footer
6463 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
6466 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
6467 slaves, let the second know where the first one is coming from
6468 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
6469 see our exceptions. It would be nice if there were a way to just
6470 send them the exception type and value, not the full traceback.
6473 * buildbot/status/mail.py (MailNotifier): add a new argument
6474 sendToInterestedUsers=, which can be set to False to disable the
6475 usual send-to-blamelist behavior.
6476 (top): handle python-2.2 which has no email.MIMEMultipart
6477 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
6478 (MailNotifier.disownServiceParent): unsubscribe on removal
6480 * buildbot/test/test_status.py (Mail.testBuild2): test it
6483 * buildbot/status/progress.py (Expectations.wavg): tolerate
6484 current=None, which happens when steps start failing badly
6485 * buildbot/test/test_status.py (Progress.testWavg): test for it
6487 * buildbot/process/step.py (SVN.startVC): when the (old) slave
6488 doesn't understand args['revision'], emit a warning instead of
6489 bailing completely. Updating to -rHEAD is probably close enough.
6491 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
6493 * buildbot/test/test_status.py: at least import bb.status.client
6494 even if we don't have any test coverage for it yet
6496 * contrib/svn_buildbot.py: don't require python2.3
6497 (main): wait, do require it (for sets.py), but explain how to
6498 make it work under python2.2
6500 2004-09-23 Brian Warner <warner@lothar.com>
6502 * contrib/svn_buildbot.py: include the revision number in the Change
6504 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
6505 using util.now() because FreshCVS is a realtime service
6507 * buildbot/status/event.py: delete dead code
6508 * buildbot/process/step.py: don't import dead Event class
6509 * buildbot/process/step_twisted.py: same
6510 * buildbot/status/builder.py: same
6511 * buildbot/status/client.py: same
6513 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
6515 * buildbot/changes/changes.py (Change): set .when from an __init__
6516 argument (which defaults to now()), rather than having
6517 ChangeMaster.addChange set it later.
6518 (ChangeMaster.addChange): same
6520 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
6521 (parseSyncmail): same. Just use util.now() for now.
6522 (parseBonsaiMail): parse the timestamp field for when=
6524 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
6525 instead of setting .when after the fact
6529 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
6530 results when the target project uses retrial. Still under
6532 * buildbot/test/test_trial.py: same
6534 2004-09-21 Brian Warner <warner@lothar.com>
6536 * buildbot/status/mail.py (MailNotifier.__init__): include
6537 success/warnings/failure in the Subject line
6538 (MailNotifier.buildMessage): add the buildbot's URL to the body,
6539 use step.logname for the addLogs=True attachment filenames
6540 * buildbot/test/test_status.py (Mail): test Subject lines
6541 (Mail.testLogs): test attachment filenames
6543 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
6544 accept a 'who' argument from the debug tool
6545 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
6546 * contrib/debug.glade: add text box to set 'who'
6548 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
6549 .getBuilderName with .getBuilder().getName(), more flexible
6550 (IStatusLog.getName): logs have short names, but you can prefix
6551 them with log.getStep().getName() to make them more useful
6552 * buildbot/status/builder.py: same
6553 * buildbot/status/client.py: same
6554 * buildbot/status/html.py: same
6555 * buildbot/test/test_run.py (Status.testSlave): same
6556 * buildbot/process/step.py: tweak logfile names
6558 * buildbot/status/mail.py (MailNotifier): add lookup, change
6559 argument to extraRecipients. The notifier is now aimed at sending
6560 mail to the people involved in a particular build, with additional
6561 constant recipients as a secondary function.
6563 * buildbot/test/test_status.py: add coverage for IEmailLookup,
6564 including slow-lookup and failing-lookup. Make sure the blamelist
6565 members are included.
6567 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
6568 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
6569 (IBuildStatus.getInterestedUsers): new method
6570 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
6571 * buildbot/status/client.py (remote_getResponsibleUsers): same
6572 * buildbot/status/html.py (StatusResourceBuild.body): same
6573 * buildbot/test/test_run.py (Status.testSlave): same
6575 2004-09-20 Brian Warner <warner@lothar.com>
6577 * docs/users.xhtml: update concepts
6579 * Makefile: add a convenience makefile, for things like 'make
6580 test'. It is not included in the source tarball.
6582 2004-09-16 Brian Warner <warner@lothar.com>
6584 * NEWS: mention /usr/bin/buildbot, debian/*
6586 * debian/*: add preliminary debian packaging. Many thanks to
6587 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
6588 it considerably since it left their hands, I am responsible for
6589 all breakage that's resulted.
6591 * bin/buildbot: create a top-level 'buildbot' command, to be
6592 installed in /usr/bin/buildbot . For now it's just a simple
6593 frontend to mktap/twistd/kill, but eventually it will be the entry
6594 point to the 'try' command and also a status client. It is also
6595 intended to support the upcoming debian-packaging init.d scripts.
6596 * buildbot/scripts/runner.py: the real work is done here
6597 * buildbot/scripts/__init__.py: need this too
6598 * buildbot/scripts/sample.cfg: this is installed in new
6599 buildmaster directories
6600 * setup.py: install new stuff
6602 2004-09-15 Brian Warner <warner@lothar.com>
6604 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
6605 'file:' schema (the version shipped with OS-X was built without the
6607 (SetupMixin.tearDown): stop the goofy twisted.web timer which
6608 updates the log-timestamp, to make sure it isn't still running after
6611 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
6612 values to the config file.
6613 * docs/examples/hello.cfg: add examples
6614 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
6615 * buildbot/status/builder.py (Status.getProjectURL): implement them
6616 * buildbot/master.py (BuildMaster.loadConfig): set them from config
6617 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
6618 * buildbot/status/html.py (WaterfallStatusResource): display them
6621 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
6622 certain error cases don't suffer a secondary exception.
6623 (top): Skip tests if the corresponding VC tool is not installed.
6625 * buildbot/process/factory.py (Trial): introduce separate
6626 'buildpython' and 'trialpython' lists, since trialpython=[] is
6627 what you want to invoke /usr/bin/python, whereas ./setup.py is
6628 less likely to be executable. Add env= parameter to pass options
6629 to test cases (which is how I usually write tests, I don't know if
6630 anyone else does it this way).
6632 * buildbot/process/step_twisted.py (Trial): handle python=None.
6633 Require 'testpath' be a string, not a list. Fix tests= typo.
6634 (Trial.start): sanity-check any PYTHONPATH value for stringness.
6636 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
6637 way to deal with the possibility of removing the disconnect notify
6639 (CVS): add a 'login' parameter to give a password to 'cvs login',
6640 commonly used with pserver methods (where pw="" or pw="guest")
6642 * buildbot/slave/commands.py (SourceBase): move common args
6643 extraction and setup() to __init__, so everything is ready by the
6644 time setup() is called
6645 (CVS.start): call 'cvs login' if a password was supplied
6646 (ShellCommand): special-case PYTHONPATH: prepend the master's
6647 value to any existing slave-local value.
6649 * buildbot/process/builder.py (Builder.updateBigStatus): if we
6650 don't have a remote, mark the builder as Offline. This whole
6651 function should probably go away and be replaced by individual
6653 (Builder.buildFinished): return the results to the build-finished
6654 deferred callback, helps with testing
6656 2004-09-14 Brian Warner <warner@lothar.com>
6658 * buildbot/test/test_vc.py: put all the repositories needed to run
6659 the complete tests into a single small (1.3MB) tarball, so I can
6660 make that tarball available on the buildbot web site. Test HTTP
6661 access (for Arch and Darcs) by spawning a temporary web server
6662 while the test runs.
6664 * docs/users.xhtml: new document, describe Buildbot's limited
6665 understanding of different human users
6667 * buildbot/test/test_vc.py: rearrange test cases a bit
6669 * buildbot/process/step_twisted.py (Trial): handle testpath=
6670 * buildbot/process/factory.py (Trial): update to use step.Trial
6672 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
6674 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
6675 the overall build text (which gives you 'failed 2 tests' rather
6677 (BuildStepStatus.text2): default to [], not None
6679 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
6682 2004-09-12 Brian Warner <warner@lothar.com>
6684 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
6685 log the whole exception if it's just an AttributeError (old slave)
6687 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
6688 so (e.g.) sub-commands can be run in the right directory.
6689 (ShellCommand.start): accept an optional errorMessage= argument
6690 to make life easier for SVN.start
6691 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
6693 (ShellCommand.start): move ['dir'] compatibility hack..
6694 (RemoteShellCommand.start): .. to here so everyone can use it
6696 * buildbot/process/step_twisted.py (Trial): use .workdir
6698 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
6699 text displayed when debuild fails completely
6700 (Trial): snarf _trial_temp/test.log from the slave and display it
6702 2004-09-11 Brian Warner <warner@lothar.com>
6704 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
6706 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
6707 set to 'twisted', so --recurse can find twisted/web/test/*, etc
6709 * buildbot/process/step.py (ShellCommand): call .createSummary
6710 before .evaluateCommand instead of the other way around. This
6711 makes it slightly easier to count warnings and then use that to
6712 set results=WARNINGS
6713 * buildbot/process/step_twisted.py: cosmetic, swap the methods
6715 * buildbot/process/base.py (Build.buildFinished): update status
6716 before doing progress. It's embarrassing for the build to be stuck
6717 in the "building" state when an exceptions occurs elsewhere..
6719 * buildbot/status/progress.py (Expectations.expectedBuildTime):
6720 python2.2 doesn't have 'sum'
6722 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
6723 to prevent clients from accidentally sorting it
6725 * buildbot/master.py (Manhole): add username/password
6726 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
6727 c['manholePort'], deprecate old usage
6728 * docs/config.xhtml: document c['manhole']
6729 * docs/examples/hello.cfg: show example of using a Manhole
6732 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
6733 pretend the slave is up to date
6735 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
6736 the module, overlaps with 'log', the local variable
6738 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
6740 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
6741 new method to let Steps find out the version of their
6742 corresponding SlaveCommand.
6743 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
6744 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
6745 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
6747 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
6748 (Arch.startVC): same
6749 (P4Sync.startVC): same
6751 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
6752 Deferred so we can catch errors in remote_startCommand
6753 (RemoteShellCommand.start): same
6755 * docs/examples/twisted_master.cfg: update sample config file
6757 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
6758 after connectionMade() is called, not before. Close stdin at that
6761 * buildbot/process/process_twisted.py: update to use Trial, clean
6762 up argument passing (move to argv arrays instead of string
6765 * buildbot/process/step_twisted.py (Trial): new step to replace
6766 RunUnitTests, usable by any trial-using project (not just
6767 Twisted). Arguments have changed, see the docstring for details.
6769 * buildbot/process/base.py (Build.startBuild): this now returns a
6770 Deferred. Exceptions that occur during setupBuild are now
6771 caught better and lead to fewer build_status weirdnesses, like
6772 finishing a build that was never started.
6773 (Build.buildFinished): fire the Deferred instead of calling
6774 builder.buildFinished directly. The callback argument is this
6775 Build, everything else can be extracted from it, including the
6776 new build.results attribute.
6777 * buildbot/process/builder.py (Builder.startBuild): same
6778 (Builder.buildFinished): same, extract results from build
6780 * buildbot/process/step.py (ShellCommands): remove dead code
6782 2004-09-08 Brian Warner <warner@lothar.com>
6784 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
6785 doesn't try to use the leftover patched workdir
6786 (SourceStamp): test source-stamp computation for CVS and SVN
6788 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
6789 patched workdir ('touch .buildbot-patched') so we don't try to
6791 (SourceBase.start): add ['revision'] for all Source steps
6792 (CVS): change args: use ['branch'] for -r, remove ['files']
6793 (CVS.buildVC): fix revision/branch stuff
6794 (SVN): add revision stuff
6796 * buildbot/process/step.py (BuildStep.__init__): reject unknown
6797 kwargs (except 'workdir') to avoid silent spelling errors
6798 (ShellCommand.__init__): same
6799 (Source): new base class for CVS/SVN/etc. Factor out everything
6800 common, add revision computation (perform the checkout with a -D
6801 DATE or -r REVISION that gets exactly the sources described by the
6802 last Change), overridable with step.alwaysUseLatest. Add patch
6803 handling (build.getSourceStamp can trigger the use of a base
6804 revision and a patch).
6805 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
6806 * docs/steps.xhtml: update docs
6807 * docs/source.xhtml: mention .checkoutDelay
6808 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
6810 * buildbot/process/base.py (Build.setSourceStamp): add a
6811 .sourceStamp attribute to each Build. If set, this indicates that
6812 the build should be done with something other than the most
6813 recent source tree. This will be used to implement "try" builds.
6814 (Build.allChanges): new support method
6815 (Build.lastChangeTime): remove, functionality moved to Source steps
6816 (Build.setupBuild): copy the Step args before adding ['workdir'],
6817 to avoid modifying the BuildFactory (and thus triggering spurious
6821 * buildbot/status/html.py: rename s/commits/changes/
6822 (StatusResourceChanges): same
6823 (CommitBox.getBox): same, update URL
6824 (WaterfallStatusResource): same
6825 (StatusResource.getChild): same
6827 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
6828 * contrib/debug.glade: add optional 'revision' to the fakeChange
6830 * buildbot/changes/changes.py (html_tmpl): display .revision
6831 (ChangeMaster.addChange): note .revision in log
6832 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
6833 accept a ['revision'] attribute
6835 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
6837 * buildbot/master.py (BotMaster.getPerspective): update the
6838 .connected flag in SlaveStatus when it connects
6839 (BotMaster.detach): and when it disconnects
6840 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
6841 (BuildMaster.loadConfig_Builders): walk old list correctly
6843 * buildbot/test/test_config.py: fix prefix= usage
6845 2004-09-06 Brian Warner <warner@lothar.com>
6849 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
6850 poll a P4 depot looking for recent changes. Thanks to Dave
6851 Peticolas for the contribution. Probably needs some testing after
6854 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
6855 requires manual client setup for each buildslave. Rather
6856 experimental. Thanks again to Dave Peticolas.
6857 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
6859 * buildbot/changes/changes.py (Change): add a .revision attribute,
6860 which will eventually be used to generate source-stamp values.
6862 * buildbot/process/step.py (RemoteCommand.start): use
6863 notifyOnDisconnect to notice when we lose the slave, then treat it
6864 like an exception. This allows LogFiles to be closed and the build
6865 to be wrapped up normally. Be sure to remove the disconnect
6866 notification when the step completes so we don't accumulate a
6867 bazillion such notifications which will fire weeks later (when the
6868 slave finally disconnects normally). Fixes SF#915807, thanks to
6869 spiv (Andrew Bennetts) for the report.
6870 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
6871 really isn't Logged- specific
6872 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
6873 header, since it's almost always going to be appended to an
6875 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
6876 update test to handle use of notifyOnDisconnect
6878 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
6879 don't clear .ETA and .currentBuild when going offline, let the
6880 current build clean up after itself
6882 * buildbot/process/builder.py (Builder.detached): wait a moment
6883 before doing things like stopping the current build, because the
6884 current step will probably notice the disconnect and cleanup the
6886 * buildbot/test/test_run.py (Status.tearDown): update test to
6887 handle asynchronous build-detachment
6889 * buildbot/process/base.py (Build.stopBuild): minor shuffles
6891 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
6892 hush a debug message
6894 2004-09-05 Brian Warner <warner@lothar.com>
6896 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
6897 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
6898 kernels do this: the fcntl module has the F_NOTIFY constant, but
6899 the kernel itself doesn't support the operation. Thanks to Olly
6900 Betts for spotting the problem.
6902 * buildbot/process/step.py (Darcs): new source-checkout command
6903 (Arch): new source-checkout command
6904 (todo_P4): fix constructor syntax, still just a placeholder
6905 * buildbot/test/test_vc.py (VC.testDarcs): test it
6906 (VC.testDarcsHTTP): same, via localhost HTTP
6908 (VC.testArchHTTP): same
6909 * NEWS: mention new features
6911 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
6912 which tells the step to stash stdout text locally (in .stdout).
6913 Slave-side Commands can use this to make decisions based upon the
6914 output of the the ShellCommand (not just the exit code).
6915 (Darcs): New source-checkout command
6916 (Arch): New source-checkout command, uses .keepStdout in one place
6917 where it needs to discover the archive's default name.
6919 * docs/steps.xhtml: Document options taken by Darcs and Arch.
6920 * docs/source.xhtml: add brief descriptions of Darcs and Arch
6921 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
6923 * buildbot/process/step.py (ShellCommand.describe): add an
6924 alternate .descriptionDone attribute which provides descriptive
6925 text when the step is complete. .description can be ["compiling"],
6926 for use while the step is running, then .descriptionDone can be
6927 ["compile"], used alone when the step succeeds or with "failed" when
6928 it does not. Updated other steps to use the new text.
6929 * buildbot/process/step_twisted.py: same
6930 * buildbot/test/test_run.py: update tests to match
6932 2004-08-30 Brian Warner <warner@lothar.com>
6934 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
6935 (CVS.__init__): send 'patch' argument to slave
6936 (CVS.start): don't create the LoggedRemoteCommand until start(),
6937 so we can catch a .patch added after __init__
6938 (SVN.__init__): add 'patch' to SVN too
6941 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
6942 argument, to let commands push data into the process' stdin pipe.
6943 Move usePTY to a per-instance attribute, and clear it if 'stdin'
6944 is in use, since closing a PTY doesn't really affect the process
6945 in the right way (in particular, I couldn't run /usr/bin/patch
6947 (SourceBase.doPatch): handle 'patch' argument
6949 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
6952 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
6953 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
6955 * buildbot/master.py (BotPerspective.got_commands): get command
6956 versions from slave, give to each builder
6957 * buildbot/process/builder.py (Builder.attached): stash slave
6958 command versions in .remoteCommands
6960 * docs/steps.xhtml: bring docs in-line with reality
6962 * buildbot/process/step.py (CVS.__init__): more brutal
6963 compatibility code removal
6964 (SVN.__init__): same
6966 * buildbot/slave/commands.py (SlaveShellCommand): update docs
6967 (SlaveShellCommand.start): require ['workdir'] argument, remove
6968 the ['dir'] fallback (compatibility will come later)
6969 (SourceBase): update docs
6970 (SourceBase.start): remove ['directory'] fallback
6973 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
6974 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6975 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
6977 * buildbot/process/step.py (RemoteShellCommand.__init__): add
6978 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
6979 code.. I will figure out 0.5.0-compatibility hooks later)
6981 2004-08-30 Brian Warner <warner@lothar.com>
6983 * buildbot/process/process_twisted.py: rewrite in terms of new
6984 BuildFactory base class. It got significantly shorter. Yay
6987 * buildbot/process/step_twisted.py (HLint.start): fix to make it
6988 work with the new "self.build isn't nailed down until we call
6989 step.start()" scheme: specifically, __init__ is called before the
6990 build has decided on which Changes are going in, so we don't scan
6991 build.allFiles() for .xhtml files until start()
6992 (HLint.commandComplete): use getText(), not getStdout()
6993 (RunUnitTests.start): same: don't use .build until start()
6994 (RunUnitTests.describe): oops, don't report (None) when using
6996 (RunUnitTests.commandComplete): use getText()
6997 (RunUnitTests.createSummary): same
6998 (BuildDebs.commandComplete): same
7000 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
7001 set args['command'] until start(), since our BuildStep is allowed
7002 to change their mind up until that point
7003 (TreeSize.commandComplete): use getText(), not getStdout()
7005 * docs/examples/twisted_master.cfg: update to current standards
7007 * docs/factories.xhtml: update
7008 * buildbot/process/factory.py: implement all the common factories
7009 described in the docs. The Trial factory doesn't work yet, and
7010 I've probably broken all the process_twisted.py factories in the
7011 process. There are compatibility classes left in for things like
7012 the old BasicBuildFactory, but subclasses of them are unlikely to
7014 * docs/examples/glib_master.cfg: use new BuildFactories
7015 * docs/examples/hello.cfg: same
7017 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
7018 explicit 'workdir' args
7020 * buildbot/process/base.py (BuildFactory): move factories to ..
7021 * buildbot/process/factory.py (BuildFactory): .. here
7022 * buildbot/process/process_twisted.py: handle move
7023 * buildbot/test/test_config.py: same
7024 * buildbot/test/test_run.py: same
7025 * buildbot/test/test_steps.py: same
7026 * buildbot/test/test_vc.py: same
7027 * docs/factories.xhtml: same
7029 * NEWS: mention config changes that require updating master.cfg
7031 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
7032 argument to all steps that weren't given one already, pointing at
7033 the "build/" directory.
7035 * docs/examples/hello.cfg: remove explicit 'workdir' args
7037 * docs/factories.xhtml: document standard BuildFactory clases,
7038 including a bunch which are have not yet been written
7040 2004-08-29 Brian Warner <warner@lothar.com>
7042 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
7043 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
7044 buildbot.status.builder so they aren't quite so internal
7045 * buildbot/process/base.py, buildbot/process/builder.py: same
7046 * buildbot/process/maxq.py, buildbot/process/step.py: same
7047 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
7048 * buildbot/status/mail.py, buildbot/test/test_run.py: same
7049 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
7051 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
7052 to handle new getLogs()-returns-list behavior
7053 (StatusResourceBuildStep.getChild): same
7054 (StepBox.getBox): same
7055 (WaterfallStatusResource.phase0): same
7057 * docs/source.xhtml: document how Buildbot uses version-control
7058 systems (output side: how we get source trees)
7059 * docs/changes.xhtml: rename from sources.xhtml, documents VC
7060 systems (input side: how we learn about Changes)
7062 * buildbot/master.py (Manhole): use ComparableMixin
7063 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
7064 * buildbot/changes/mail.py (MaildirSource): same
7065 * buildbot/status/client.py (PBListener): same
7066 * buildbot/status/html.py (Waterfall): same
7067 * buildbot/status/words.py (IRC): same
7069 * NEWS: start describing new features
7071 * buildbot/status/mail.py (MailNotifier): finish implementation.
7072 The message body is still a bit sparse.
7073 * buildbot/test/test_status.py (Mail): test it
7075 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
7076 and __hash__ methods I wind up adding everywhere. Specifically
7077 intended to support the buildbot config-file update scheme where
7078 we compare, say, the old list of IStatusTargets against the new
7079 one and don't touch something which shows up on both lists.
7080 * buildbot/test/test_util.py (Compare): test case for it
7082 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
7083 return a list instead of a dict
7084 (IBuildStepStatus.getLogs): same. The idea is that steps create
7085 logs with vaguely unique names (although their uniqueness is not
7086 guaranteed). Thus a compilation step should create its sole
7087 logfile with the name 'compile', and contribute it to the
7088 BuildStatus. If a step has two logfiles, try to create them with
7089 different names (like 'test.log' and 'test.summary'), and only
7090 contribute the important ones to the overall BuildStatus.
7091 * buildbot/status/builder.py (Event.getLogs): same
7092 (BuildStepStatus): fix default .text and .results
7093 (BuildStepStatus.addLog): switch to list-like .getLogs()
7094 (BuildStepStatus.stepFinished): same
7095 (BuildStatus.text): fix default .text
7096 (BuildStatus.getLogs): temporary hack to return all logs (from all
7097 child BuildStepStatus objects). Needs to be fixed to only report
7098 the significant ones (as contributed by the steps themselves)
7099 * buildbot/test/test_run.py: handle list-like .getLogs()
7100 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
7102 2004-08-28 Brian Warner <warner@lothar.com>
7104 * buildbot/process/builder.py (Builder.attached): serialize the
7105 attachment process, so the attach-watcher isn't called until the
7106 slave is really available. Add detached watchers too, which makes
7109 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
7111 * buildbot/test/test_swap.py: remove dead code
7113 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
7114 (ShellCommand.start): treat errors in _startCommand/spawnProcess
7115 sort of as if the command being run exited with a -1. There may
7116 still be some holes in this scheme.
7117 (CVSCommand): add 'revision' tag to the VC commands, make sure the
7118 -r option appears before the module list
7119 * buildbot/process/step.py (CVS): add 'revision' argument
7121 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
7122 when sending updates or stepComplete messages to the master, since
7123 we don't currently care whether they arrive or not. When we revamp
7124 the master/slave protocol to really resume interrupted builds,
7125 this will need revisiting.
7126 (lostRemote): remove spurious print
7128 * buildbot/master.py (BotPerspective.attached): serialize the
7129 new-builder interrogation process, to make testing easier
7130 (BotMaster.waitUntilBuilderDetached): convenience function
7132 * buildbot/status/builder.py (BuilderStatus): prune old builds
7133 (BuildStatus.pruneSteps): .. and steps
7134 (BuildStepStatus.pruneLogs): .. and logs
7135 (BuilderStatus.getBuild): handle missing builds
7136 * buildbot/status/html.py (StatusResourceBuild.body): display build
7137 status in the per-build page
7138 (BuildBox.getBox): color finished builds in the per-build box
7140 2004-08-27 Brian Warner <warner@lothar.com>
7142 * buildbot/status/mail.py (MailNotifier): new notification class,
7145 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
7146 variants of a common base class which handles all the mode= logic
7148 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
7150 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
7152 2004-08-26 Brian Warner <warner@lothar.com>
7154 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
7157 * buildbot/test/test_run.py: update to new Logfile interface, new
7158 buildbot.slave modules
7159 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
7161 * MANIFEST.in: new sample config file
7162 * docs/examples/hello.cfg: same
7164 * buildbot/process/step_twisted.py: remove dead import
7166 * buildbot/process/step.py (RemoteCommand.run): catch errors
7168 (RemoteCommand.remote_update): ignore updates that arrive after
7170 (RemoteCommand.remote_complete): ignore duplicate complete msgs
7171 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
7172 the responsibilities of the subclass's methods
7173 (BuildStep.failed): catch errors during failure processing
7174 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
7175 (CVS): move to a mode= argument (described in docstring), rather
7176 than the ungainly clobber=/export=/copydir= combination.
7177 (SVN): add mode= functionality to SVN too
7178 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
7180 * buildbot/process/base.py (Build.startNextStep): catch errors
7181 during s.startStep()
7183 * buildbot/clients/base.py: update to new PB client interface.
7184 gtkPanes is still broken
7186 * buildbot/bot.py, buildbot/slavecommand.py: move to..
7187 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
7188 * setup.py: add buildbot.slave module
7189 * buildbot/bb_tap.py: handle move
7190 * buildbot/slave/registry.py: place to register commands, w/versions
7191 * buildbot/slave/bot.py: major simplifications
7192 (SlaveBuilder.remote_startCommand): use registry for slave commands,
7193 instead of a fixed table. Eventually this will make the slave more
7194 extensible. Use 'start' method on the command, not .startCommand.
7195 Fix unsafeTracebacks handling (I think).
7196 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
7197 helper class with a .start method that returns a Deferred.
7198 SlaveShellCommand is the form reached by the buildmaster. Commands
7199 which use multiple ShellCommands can just chain them as Deferreds,
7200 with some helper methods in Command (_abandonOnFailure and
7201 _checkAbandoned) to bail on rc!=0.
7202 (CVSCommand): prefer new mode= argument
7203 (SVNFetch): add mode= argument
7205 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
7206 put a useful reason string on the build
7208 * buildbot/status/builder.py (LogFile): do LogFile right: move the
7209 core functionality into an IStatusLog object
7210 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
7211 * buildbot/status/html.py (TextLog): HTML-rendering goes here
7212 (StatusResourceBuild.body): use proper accessor methods
7213 * buildbot/status/client.py (RemoteLog): PB-access goes here
7214 (StatusClientPerspective.perspective_subscribe): add "full" mode,
7215 which delivers log contents too
7216 (PBListener.__cmp__): make PBListeners comparable, thus removeable
7217 * buildbot/status/event.py: remove old Logfile completely
7219 * buildbot/interfaces.py (IStatusLog.subscribe): make the
7220 subscription interface for IStatusLog subscriptions just like all
7221 other the status subscriptions
7222 (IStatusReceiver.logChunk): method called on subscribers
7224 2004-08-24 Brian Warner <warner@lothar.com>
7226 * buildbot/process/builder.py (Builder._pong): oops, ping response
7227 includes a result (the implicit None returned by remote_print).
7228 Accept it so the _pong method handles the response correctly.
7230 2004-08-06 Brian Warner <warner@lothar.com>
7232 * buildbot/test/test_config.py: update IRC, PBListener tests
7234 * buildbot/status/client.py (StatusClientPerspective): total
7235 rewrite to match new IStatus interfaces. New subscription scheme.
7236 There are still a few optimizations to make (sending down extra
7237 information with event messages so the client doesn't have to do a
7238 round trip). The logfile-retrieval code is probably still broken.
7239 Moved the PB service into its own port, you can no longer share a
7240 TCP socket between a PBListener and, say, the slaveport (this
7241 should be fixed eventually).
7242 * buildbot/clients/base.py (Client): revamp to match. still needs
7243 a lot of work, but basic event reporting works fine. gtkPanes is
7246 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
7247 instance talks to a single irc server. Threw out all the old
7248 multi-server handling code. Still need to add back in
7249 builder-control (i.e. "force build")
7251 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
7252 more random text to the as-yet-unreachable per-step page
7254 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
7255 rename to stepETAUpdate
7256 (BuildStatus.subscribe): add build-wide ETA updates
7257 (BuilderStatus.getState): remove more cruft
7258 (BuilderStatus.getCurrentBuild): remove more cruft
7259 (BuilderStatus.buildStarted): really handle tuple-subscription
7260 * buildbot/test/test_run.py (Status.testSlave): handle the
7261 stepETAUpdate rename
7263 * buildbot/master.py (BuildMaster): don't add a default
7264 StatusClientService. Don't add a default IrcStatusFactory. Both
7265 are now added through c['status'] in the config file. c['irc'] is
7266 accepted for backwards compatibility, the only quirk is you cannot
7267 use c['irc'] to specify IRC servers on ports other than 6667.
7269 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
7270 (IStatusReceiver.buildStarted): allow update-interval on subscribe
7271 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
7272 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
7275 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
7276 the buildmaster to re-read its config file
7279 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
7280 find out the port our server is running on
7281 (WebTest.test_webPathname_port): same
7283 * buildbot/test/test_config.py (testWebPortnum): test it
7284 (testWebPathname): ditto
7286 * docs/config.xhtml: document new c['status'] configuration option
7288 * buildbot/status/html.py (Waterfall): new top-level class which
7289 can be added to c['status']. This creates the Site as well as the
7290 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
7291 reachable as .parent, for everything.
7293 * buildbot/master.py (Manhole): make it a normal service Child
7294 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
7295 webPathname. It will eventually replace c['irc'] and the implicit
7296 PB listener as well. c['webPortnum'] and c['webPathname'] are left
7297 in as (deprecated) backward compatibility hooks for now.
7300 * buildbot/process/builder.py (Builder.buildFinished): don't
7301 inform out builder_status about a finished build, as it finds out
7302 through its child BuildStatus object
7304 * buildbot/status/html.py: extensive revamp. Use adapters to make
7305 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
7306 have both starting and finishing times and adjust the waterfall
7307 display accordingly, using spacers if necessary. Use SlaveStatus
7308 to get buildslave info.
7309 (StatusResourceBuildStep): new just-one-step resource, used to get
7310 logfiles. No actual href to it yet.
7312 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
7313 the time being, until I get the file-naming scheme right
7315 * buildbot/status/builder.py (Event): clean started/finished names
7316 (BuildStatus.isFinished): .finished is not None is the right test
7317 (BuildStatus.buildStarted): track started/finished times ourselves
7318 (BuilderStatus.getSlave): provide access to SlaveStatus object
7319 (BuilderStatus.getLastFinishedBuild): all builds are now in
7320 .builds, even the currently-running one. Accomodate this change.
7321 (BuilderStatus.eventGenerator): new per-builder event generator.
7322 Returns BuildStepStatus and BuildStatus objects, since they can
7323 both be adapted as necessary.
7324 (BuilderStatus.addEvent): clean up started/finished attributes
7325 (BuilderStatus.startBuild,finishBuild): remove dead code
7326 (SlaveStatus): new object to provide ISlaveStatus
7328 * buildbot/process/step.py (ShellCommand.getColor): actually
7329 return the color instead of setting it ourselves
7330 (CVS.__init__): pull .timeout and .workdir options out of
7331 **kwargs, since BuildStep will ignore them. Without this neither
7332 will be sent to the slave correctly.
7333 (SVN.__init__): same
7335 * buildbot/process/builder.py (Builder): move flags to class-level
7337 (Builder.attached): remove .remoteInfo, let the BotPerspective and
7338 SlaveStatus handle that
7340 * buildbot/process/base.py (Build.firstEvent): remove dead code
7341 (Build.stopBuild): bugfix
7343 * buildbot/changes/pb.py (PBChangeSource.describe): add method
7345 * buildbot/changes/changes.py (Change): add IStatusEvent methods
7346 (ChangeMaster.eventGenerator): yield Changes, since there are now
7347 Adapters to turn them into HTML boxes
7349 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
7350 (BotPerspective.attached): feed a SlaveStatus object
7351 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
7352 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
7354 * buildbot/interfaces.py: API additions
7355 (ISlaveStatus): place to get slave status
7357 2004-08-04 Brian Warner <warner@lothar.com>
7359 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
7360 the delay finishes, so the step is marked as SUCCESS
7362 * buildbot/test/test_run.py (Status.testSlave): cover more of
7363 IBuildStatus and IBuildStepStatus
7365 * buildbot/status/progress.py (StepProgress): move some flags to
7366 class-level attributes
7367 (StepProgress.remaining): if there are no other progress metrics
7368 to go by, fall back to elapsed time
7369 (StepProgress.setExpectations): take a dict of metrics instead of
7371 (BuildProgress.setExpectationsFrom): pull expectations from the
7372 Expectations, instead of having it push them to the BuildProgress
7373 (Expectations): move some flags to class-level attributes
7374 (Expectations.__init__): copy per-step times from the
7376 (Expectations.expectedBuildTime): new method for per-build ETA
7378 * buildbot/status/event.py (Logfile): move some flags to
7379 class-level attributes
7380 (Logfile.logProgressTo): better method name, let step set the
7381 progress axis name (instead of always being "output")
7383 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
7384 times directly, rather than depending upon the (possibly missing)
7385 .progress object. Use 'None' to indicate "not started/finished
7387 (BuildStepStatus.getExpectations): oops, return the full list of
7389 (BuilderStatus._buildFinished): append finished builds to .builds
7391 * buildbot/process/step.py (BuildStep): add separate .useProgress
7392 flag, since empty .progressMetrics[] still implies that time is a
7394 (CVS): set up the cmd in __init__, instead of waiting for start()
7396 * buildbot/process/base.py (Build.startBuild): disable the 'when'
7397 calculation, this will eventually turn into a proper sourceStamp
7398 (Build.setupBuild): tell the Progress to load from the Expectations,
7399 instead of having the Expectations stuff things into the Progress
7400 (Build.buildException): add a build-level errback to make sure the
7401 build's Deferred fires even in case of exceptions
7403 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
7405 * buildbot/process/builder.py (Builder.forceBuild): convey the
7406 reason instead of creating a fake Change
7408 * docs/examples/twisted_master.cfg: update to match reality
7410 * buildbot/test/test_config.py, buildbot/test/test_process.py:
7411 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
7412 fix or remove broken/breaking tests
7414 * buildbot/status/event.py (Logfile.__len__): remove evil method
7416 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
7417 missing .build, for test convenience
7419 * buildbot/process/step_twisted.py: import fixes
7421 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
7423 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
7424 .statusbag reference
7426 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
7427 connection at shutdown, and stop it from reconnecting
7429 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
7430 chase down remote-execution bugs
7432 * buildbot/process/step.py: more fixes, remove
7433 BuildStep.setStatus()
7434 * buildbot/status/builder.py: move setStatus() functionality into
7436 * buildbot/status/event.py: minor fixes
7438 2004-08-03 Brian Warner <warner@lothar.com>
7440 * buildbot/process/base.py, buildbot/process/builder.py
7441 * buildbot/process/step.py, buildbot/status/builder.py
7442 * buildbot/status/event.py, buildbot/test/test_run.py:
7443 fix status delivery, get a basic test case working
7444 * buildbot/master.py: finish implementing basic status delivery,
7445 temporarily disable HTML/IRC/PB status sources
7447 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
7449 * buildbot/status/progress.py (BuildProgress): remove dead code
7451 * buildbot/interfaces.py
7452 * buildbot/process/base.py, buildbot/process/builder.py
7453 * buildbot/process/step.py, buildbot/process/step_twisted.py
7454 * buildbot/status/builder.py: Complete overhaul of the all
7455 status-delivery code, unifying all types of status clients (HTML,
7456 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
7457 look like. This commit is a checkpointing of the work-in-progress:
7458 the input side is mostly done (Builders/Builds sending status
7459 to the BuilderStatus/BuildStatus objects), but the output side has
7460 not yet been started (HTML resources querying BuilderStatus
7461 objects). Things are probably very broken right now and may remain
7462 so for several weeks, I apologize for the disruption.
7464 * buildbot/status/event.py: add a setHTML method to use pre-rendered
7465 HTML as the log's contents. Currently used for exception tracebacks.
7466 * buildbot/status/progress.py: minor spelling changes
7468 2004-08-02 Brian Warner <warner@lothar.com>
7470 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
7471 in mozilla. Also added stylesheets copied from Twisted's docs.
7472 Remember that these files are meant to be run through Lore first.
7473 Thanks to Philipp Frauenfelder for the fixes.
7474 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
7475 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
7476 * docs/template.tpl: added a Lore template
7478 2004-07-29 Brian Warner <warner@lothar.com>
7480 * buildbot/interfaces.py: revamp status delivery. This is the
7481 preview: these are the Interfaces that will be provided by new
7482 Builder code, and to which the current HTML/IRC/PB status
7483 displayers will be adapted.
7485 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
7486 on the SlaveBuilder, not the Bot.
7487 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
7489 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
7490 set .usePTY on the FakeSlaveBuilder
7492 2004-07-25 Brian Warner <warner@lothar.com>
7494 * buildbot/changes/freshcvs.py: add some debug log messages
7495 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
7496 disabled 'setFilter' syntax
7497 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
7498 don't end with a slash
7500 * buildbot/process/base.py (Builder._pong_failed): add TODO note
7502 * setup.py: bump to 0.5.0+ while between releases
7504 2004-07-23 Brian Warner <warner@lothar.com>
7506 * setup.py (version): Releasing buildbot-0.5.0
7508 2004-07-23 Brian Warner <warner@lothar.com>
7510 * README: update for 0.5.0 release
7512 * NEWS: update for 0.5.0 release
7514 2004-07-22 Brian Warner <warner@lothar.com>
7516 * buildbot/slavecommand.py (ShellCommand): make usePTY a
7517 mktap-time configuration flag (--usepty=1, --usepty=0)
7518 * buildbot/bot.py: same
7520 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
7521 an 'info' directory being unwanted
7523 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
7524 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
7525 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
7526 and earlier), use a FreshCVSSourceOldcred instead.
7527 (test): simple test routine: connect to server, print changes
7529 * buildbot/changes/changes.py (Change.getTime): make it possible
7530 to print un-timestamped changes
7532 * buildbot/master.py (makeApp): delete ancient dead code
7533 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
7534 * buildbot/test/test_config.py (testFindConfigFile): test it
7536 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
7537 instead of win32 one
7540 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
7541 now takes a dictionary instead of a tuple. See docs/config.xhtml for
7544 * buildbot/process/base.py (Builder.__init__): change constructor
7545 to accept a dictionary of config data, rather than discrete
7546 name/slave/builddir/factory arguments
7548 * docs/examples/twisted_master.cfg: update to new syntax
7549 * docs/examples/glib_master.cfg: same
7550 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
7551 rough tests of the new syntax
7554 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
7555 to be an int, which means "run a web.distrib sub-server on a TCP
7556 port". This lets you publish the buildbot status page to a remote
7557 twisted.web server (using distrib.ResourceSubscription). Also
7558 rename the local attributes used to hold these web things so
7559 they're more in touch with reality.
7560 * buildbot/test/test_web.py: test webPortnum and webPathname
7561 * docs/config.xhtml: document this new use of webPathname
7563 * docs/config.xhtml: new document, slightly ahead of reality
7565 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
7566 'prefix' handling: treat it as a simple string to check with
7567 .startswith, instead of treating it as a directory. This allows
7568 sub-directories to be used. If you use prefix=, you should give it
7569 a string that starts just below the CVSROOT and ends with a slash.
7570 This prefix will be stripped from all filenames, and filenames
7571 which do not start with it will be ignored.
7573 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
7575 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
7576 and --exclude (inverse of --include). SVN post-commit hooks
7577 now have total control over which changes get sent to buildbot and which
7580 2004-07-10 Brian Warner <warner@lothar.com>
7582 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
7583 test case to match new API
7585 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
7586 which crashed HTML display when self.entries=[] (needed to
7587 distinguish between [], which means "no entries yet", and None,
7588 which means "the entries have been swapped out to disk, go fetch
7591 2004-07-04 Brian Warner <warner@lothar.com>
7593 * buildbot/process/step_twisted.py (countFailedTests): Count
7594 skips, expectedFailures, and unexpectedSuccesses. Start scanning
7595 10kb from the end because any import errors are wedged there and
7596 they would make us think the test log was unparseable.
7597 (RunUnitTests.finishStatus): add skip/todo counts to the event box
7599 2004-06-26 Brian Warner <warner@lothar.com>
7601 * buildbot/process/step_twisted.py (RemovePYCs): turn the
7602 delete-*.pyc command into an actual BuildStep, so we can label it
7604 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7605 (FullTwistedBuildFactory): same
7607 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
7609 * contrib/fakechange.py: Add an errback when sending the fake
7610 change, so we know it didn't work.
7612 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
7614 * buildbot/process/step_twisted.py: Delete *.pyc files before
7615 calling trial, so it doesn't catch any old .pyc files whose .py
7616 files have been moved or deleted.
7618 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
7619 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
7620 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
7621 instead of ["twisted.test"], so that the end result is "trial -R
7624 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
7625 regular expression to match filenames that should be ignored when
7626 changed. Also add a --revision parameter that specifies the
7627 revision to examine, which is useful for debugging.
7629 2004-06-25 Brian Warner <warner@lothar.com>
7631 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
7632 summary of warnings (like DeprecationWarnings), next to the
7635 2004-05-13 Brian Warner <warner@lothar.com>
7637 * docs/examples/twisted_master.cfg: enable the win32 builder, as
7638 we now have a w32 build slave courtesy of Mike Taylor.
7640 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
7641 so broken. Fixed a race condition that tripped up interlocked
7642 builds and caused the status to be stuck at "Interlocked" forever.
7643 The twisted buildbot's one interlocked build just so happened to
7644 never hit this case until recently (the feeding builds both pass
7645 before the interlocked build is attempted.. usually it has to wait
7647 (Builder._pong_failed): fix method signature
7649 * setup.py: bump to 0.4.3+ while between releases
7651 2004-04-30 Brian Warner <warner@lothar.com>
7653 * setup.py (version): Releasing buildbot-0.4.3
7655 2004-04-30 Brian Warner <warner@lothar.com>
7657 * MANIFEST.in: add the doc fragments in docs/*.xhtml
7659 * README: update for 0.4.3 release
7661 * NEWS: update for 0.4.3 release
7663 * buildbot/master.py (BuildMaster.__getstate__): make sure
7664 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
7666 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
7667 .trial as a class attribute, for upgrade from 0.4.2
7669 * buildbot/changes/changes.py (Change.links): add .links for
7672 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
7673 .textWatchers and .htmlWatchers at save time, since they are both
7674 volatile, should allow smooth 0.4.2 upgrade
7676 * buildbot/process/step.py (CVS.finishStatus): catch failed
7677 CVS/SVN commands so we can make the status box red
7679 2004-04-29 Brian Warner <warner@lothar.com>
7681 * buildbot/changes/freshcvs.py
7682 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
7683 code to do setFilter(), which tells the freshcvs daemon to not
7684 send us stuff that we're not interested in. I will uncomment it
7685 when a new version of CVSToys is available in which setFilter()
7686 actually works, and I get a chance to test it better.
7688 * docs/examples/twisted_master.cfg: start using a PBChangeSource
7690 * buildbot/master.py (Dispatcher): use a registration scheme
7691 instead of hardwired service names
7692 (BuildMaster): keep track of the Dispatcher to support
7695 * buildbot/changes/changes.py (ChangeMaster): create a distinct
7696 PBChangeSource class instead of having it be an undocumented
7697 internal feature of the ChangeMaster. Split out the code into a
7699 * buildbot/changes/pb.py (PBChangeSource): same
7700 * buildbot/test/test_changes.py: a few tests for PBChangeSource
7702 * docs/{factories|sources|steps}.xhtml: document some pieces
7704 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
7705 using FCMaildirSource
7706 (f23osx): update OS-X builder to use python2.3, since the slave
7707 was updated to Panther (10.3.3)
7709 2004-03-21 Brian Warner <warner@lothar.com>
7711 * buildbot/process/process_twisted.py: factor out doCheckout, change
7712 to use SVN instead of CVS
7714 * buildbot/process/base.py (BasicBuildFactory): refactor to make
7715 an SVN subclass easier
7716 (BasicSVN): subclass which uses Subversion instead of CVS
7718 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
7720 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
7722 (CVSCommand.cvsComplete): don't assume chdir worked on win32
7724 2004-02-25 Brian Warner <warner@lothar.com>
7726 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
7727 is now either a list (which is passed to spawnProcess directly) or
7728 a string (which gets passed to /bin/sh -c). This removes the useSH
7729 flag and the ArgslistCommand class. Also send status header at the
7730 start and end of each command, instead of having the master-side
7732 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
7733 -r'. Update to use list-based arguments.
7734 (SVNFetch): use list-based arguments, use ['dir'] argument to
7736 * buildbot/test/test_steps.py (Commands): match changes
7738 * buildbot/process/step.py (InternalShellCommand.words): handle
7740 (SVN): inherit from CVS, cleanup
7742 * buildbot/status/event.py (Logfile.content): render in HTML, with
7743 stderr in red and headers (like the name of the command we're
7744 about to run) in blue. Add link to a second URL (url + "?text=1")
7745 to get just stdout/stderr in text/plain without markup. There is
7746 still a problem with .entries=None causing a crash, it seems to occur
7747 when the logfile is read before it is finished.
7749 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
7750 timeout to the keepalives, and use it to explicitly do a
7751 loseConnection instead of waiting for TCP to notice the loss. This
7752 ought to clear up the silent-lossage problem.
7753 (unsafeTracebacks): pass exception tracebacks back to the master,
7754 makes it much easier to debug problems
7756 2004-02-23 Brian Warner <warner@lothar.com>
7758 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
7759 the whole command to /bin/sh instead of execve [Johan Dahlin]
7760 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
7761 '-r HEAD' [Johan Dahlin]
7762 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
7764 * buildbot/changes/changes.py (Change): add links= argument, add
7765 asHTML method [Johan Dahlin]. Modified to make a bit more
7766 XHTMLish. Still not sure how to best use links= .
7768 * buildbot/status/html.py (StatusResourceCommits.getChild): use
7769 Change.asHTML to display the change, not asText
7771 * buildbot/status/html.py (StatusResourceBuilder): web button to
7774 * buildbot/test/test_run.py: test to actually start a buildmaster
7777 * MANIFEST.in: bring back accidentally-dropped test helper files
7779 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
7780 that require cvstoys if it is not installed
7782 * buildbot/process/step_twisted.py (RunUnitTests): allow other
7783 values of "bin/trial" [Dave Peticolas]
7784 (RunUnitTests.finishStatus): say "no tests run" instead of "0
7785 tests passed" when we didn't happen to run any tests
7787 * buildbot/process/step.py (Compile): use haltOnFailure instead of
7788 flunkOnFailure [Johan Dahlin]
7790 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
7791 multiple instances of the same Step class by suffixing "_2", etc,
7792 to the name until it is unique. This name needs to be unique
7793 because it is used as a key in the dictionary that tracks build
7795 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
7798 * buildbot/process/base.py (Builder.ping): add "ping slave" command
7800 2004-01-14 Brian Warner <warner@lothar.com>
7802 * buildbot/status/words.py (IrcStatusBot): when we leave or get
7803 kicked from a channel, log it
7805 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
7806 something over whatever IRC channels the buildmaster is currently
7807 connected to. Added to try and track down a problem in which the
7808 master thinks it is still connected but the IRCd doesn't see it. I
7809 used a styles.Versioned this time, so hopefully users won't have
7810 to rebuild their .tap files this time.
7811 * contrib/debug.glade: add a "Poke IRC" button
7812 * contrib/debugclient.py: same
7814 * setup.py: bump to 0.4.2+ while between releases
7816 2004-01-08 Brian Warner <warner@lothar.com>
7818 * setup.py (version): Releasing buildbot-0.4.2
7820 2004-01-08 Brian Warner <warner@lothar.com>
7822 * NEWS: update for 0.4.2 release
7824 * README: document how to run the tests, now that they all pass
7826 * buildbot/changes/maildir.py (Maildir.poll): minor comment
7828 * buildbot/process/step.py (CVS): add a global_options= argument,
7829 which lets you set CVS global options for the command like "-r"
7830 for read-only checkout, or "-R" to avoid writing in the
7832 * buildbot/slavecommand.py (CVSCommand): same
7834 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
7835 testing easier (it is turned off when testing, to avoid the
7838 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
7839 to make it easier to test: break generateStepID() out to a
7840 separate function, only update statusbag if it exists.
7841 (ShellCommands): create useful text for dict-based commands too.
7843 * test/*, buildbot/test/*: move unit tests under the buildbot/
7845 * setup.py (packages): install buildbot.test too
7847 * buildbot/test/test_slavecommand.py: fix it, tests pass now
7848 * buildbot/test/test_steps.py: fix it, tests pass now
7850 2004-01-06 Brian Warner <warner@lothar.com>
7852 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
7853 freshcvs mail uses a slightly different syntax for new
7854 directories. Update parser to handle either.
7855 * test/test_mailparse.py (Test1.testMsg9): test for same
7857 2003-12-21 Brian Warner <warner@lothar.com>
7859 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
7860 'warnOnWarnings' so that lintian errors mark the build orange
7862 2003-12-17 Brian Warner <warner@lothar.com>
7864 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
7865 messages emitted by Bonsai, contributed by Stephen Davis.
7867 * test/*: moved all tests to use trial instead of unittest. Some
7868 still fail (test_steps, test_slavecommand, and test_process).
7870 * setup.py (version): bump to 0.4.1+ while between releases
7872 2003-12-09 Brian Warner <warner@lothar.com>
7874 * setup.py (version): Releasing buildbot-0.4.1
7876 2003-12-09 Brian Warner <warner@lothar.com>
7878 * NEWS: update for 0.4.1 release
7880 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
7881 freebsd builder code a little bit
7883 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
7884 don't try to compare attributes of different classes
7885 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7886 (MaildirSource.messageReceived): fix Change delivery
7888 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
7889 into the config file's namespace before loading it, like the
7890 documentation claims it does
7891 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
7892 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
7893 daemon comes back online
7895 2003-12-08 Brian Warner <warner@lothar.com>
7897 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
7898 so the example will work with online=0 as well
7900 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
7901 fix the __implements__ line
7903 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
7904 class a twisted.application.service.Service, use startService to
7907 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
7908 directory fd instead of simple open(). I'm sure this used to work,
7909 but the current version of python refuses to open directories with
7912 2003-12-05 Brian Warner <warner@lothar.com>
7914 * setup.py (version): bump to 0.4.0+ while between releases
7916 2003-12-05 Brian Warner <warner@lothar.com>
7918 * setup.py (version): Releasing buildbot-0.4.0
7920 2003-12-05 Brian Warner <warner@lothar.com>
7922 * docs/examples/glib_master.cfg: replace old sample scripts with
7923 new-style config files
7924 * MANIFEST.in: include .cfg files in distribution tarball
7926 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
7927 implement a dummy method to avoid the exception that occurs when
7928 freshcvs sends this to us.
7930 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
7931 removed the method, as it broke reconnection. Apparently
7932 stopFactory is called each time the connection attempt fails. Must
7934 (ReconnectingPBClientFactory.__getstate__): squash the _callID
7935 attribute before serialization, since without stopFactory the
7936 reconnect timer may still be active and they aren't serializable.
7938 * test/test_mailparse.py (ParseTest): test with 'self' argument
7940 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
7941 argument, as these "functions" are invoked like methods from class
7942 attributes and therefore always get an instance as the first
7945 * buildbot/changes/maildir.py (Maildir.start): fix error in error
7946 message: thanks to Stephen Davis for the catch
7948 2003-12-04 Brian Warner <warner@lothar.com>
7950 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
7951 twisted's standard ReconnectingClientFactory. Handles both oldcred
7952 and newcred connections. Also has a bug-workaround for
7953 ReconnectingClientFactory serializing its connector when it
7956 * buildbot/bot.py (BotFactory): rewrite connection layer with new
7957 pbutil. Replace makeApp stuff with proper newcred/mktap
7958 makeService(). Don't serialize Ephemerals on shutdown.
7960 * buildbot/changes/changes.py (ChangeMaster): make it a
7961 MultiService and add the sources as children, to get startService
7962 and stopService for free. This also gets rid of the .running flag.
7964 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
7965 new pbutil, turn into a TCPClient at the same time (to get
7966 startService for free). Two variants exist: FreshCVSSourceOldcred
7967 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
7968 yet, but when it does, we'll be ready).
7969 (FreshCVSSource.notify): handle paths which are empty after the
7970 prefix is stripped. This only happens when the top-level (prefix)
7971 directory is added, at the very beginning of a Repository's life.
7973 * buildbot/clients/base.py: use new pbutil, clean up startup code.
7974 Now the only reconnecting code is in the factory where it belongs.
7975 (Builder.unsubscribe): unregister the disconnect callback when we
7976 delete the builder on command from the master (i.e. when the
7977 buildmaster is reconfigured and that builder goes away). This
7978 fixes a multiple-delete exception when the status client is shut
7980 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
7983 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
7984 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
7986 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
7988 * contrib/run_maxq.py: Accept a testdir as an argument rather than
7989 a list of globs (ugh). The testdir will be searched for files
7990 named *.tests and run the tests in the order specified in each of
7991 those files. This allows for "dependancies" between tests to be
7994 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
7995 argument to pass to run_maxq.py, instead of a glob.
7997 2003-10-17 Brian Warner <warner@lothar.com>
7999 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
8000 files that live in the sandbox
8002 2003-10-15 Brian Warner <warner@lothar.com>
8004 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
8005 spelling error in "docs" count-warnings output
8006 (HLint.start): stupid thinko meant .xhtml files were ignored
8008 * docs/examples/twisted_master.cfg (reactors): disable cReactor
8009 tests now that cReactor is banished to the sandbox
8011 2003-10-10 Brian Warner <warner@lothar.com>
8013 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
8014 scheme: now .xhtml are sources and .html are generated
8016 2003-10-08 Brian Warner <warner@lothar.com>
8018 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
8019 we were ignoring the 'randomly' parameter.
8021 2003-10-01 Brian Warner <warner@lothar.com>
8023 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
8024 posix, to kill sub-children of aborted slavecommands.
8026 * buildbot/status/builder.py: rename Builder to BuilderStatus.
8027 Clean up initialization: lastBuildStatus remains None until the
8028 first build has been completed.
8030 * buildbot/status/html.py (WaterfallStatusResource.body): handle
8031 None as a lastBuildStatus
8032 * buildbot/clients/gtkPanes.py: same
8034 * buildbot/status/client.py (StatusClientService): keep
8035 BuilderStatus objects in self.statusbags . These objects now live
8036 here in the StatusClientService and are referenced by the Builder
8037 object, rather than the other way around.
8038 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
8039 * buildbot/process/base.py (Builder): same
8040 * test/test_config.py (ConfigTest.testBuilders): same
8042 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
8043 an existing builder, leave the statusbag alone. This will preserve the
8046 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
8047 hook. This will probably go away in favor of a class in upcoming
8050 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
8051 serviceName from newcred FreshCVSNotifiee setup
8053 2003-09-29 Brian Warner <warner@lothar.com>
8055 * buildbot/process/process_twisted.py: switch to new reactor
8057 * docs/examples/twisted_master.cfg: same
8059 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
8061 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
8062 botmaster reference instead of the oldapp service lookup
8064 * buildbot/master.py (BuildMaster.__init__): give the
8065 StatusClientService a reference to the botmaster to make it easier to
8068 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
8070 * buildbot/status/html.py (Box.td): escape hreffy things so you
8071 can have spaces in things like builder names
8072 (StatusResourceBuilder.body)
8073 (WaterfallStatusResource.body)
8074 (WaterfallStatusResource.body0): same
8076 2003-09-25 Brian Warner <warner@lothar.com>
8078 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
8079 rearrange the builder list when adding or removing builders: keep
8080 them in the order the user requested.
8081 * test/test_config.py (ConfigTest.testBuilders): verify it
8083 * contrib/debug.glade: give the debug window a name
8085 * buildbot/process/base.py (Builder.buildTimerFired): builders can
8086 now wait on multiple interlocks. Fix code relating to that.
8087 (Builder.checkInterlocks): same
8088 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
8090 * buildbot/master.py (BuildMaster.loadConfig): move from
8091 deprecated pb.BrokerFactory to new pb.PBServerFactory
8092 * test/test_config.py (ConfigTest.testWebPathname): same
8094 * docs/examples/twisted_master.cfg: fix interlock declaration
8096 * buildbot/master.py (BotMaster.addInterlock): move code to attach
8097 Interlocks to their Builders into interlock.py .
8098 (BuildMaster.loadConfig_Interlocks): fix interlock handling
8100 * test/test_config.py (ConfigTest.testInterlocks): validate
8103 * buildbot/process/base.py (Builder.__init__): better comments
8104 * buildbot/process/interlock.py (Interlock.__repr__): same
8105 (Interlock.deactivate): add .active flag, move the code that
8106 attaches/detaches builders into the Interlock
8108 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
8110 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
8111 tests using the new run_maxq.py script, and reporting failures by
8114 * contrib/run_maxq.py: Hacky little script for running a set of maxq
8115 tests, reporting their success or failure in a buildbot-friendly
8118 2003-09-24 Brian Warner <warner@lothar.com>
8120 * docs/examples/twisted_master.cfg: example of a new-style config
8121 file. This lives in the buildmaster base directory as
8124 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
8125 button to make the master re-read its config file
8127 * buildbot/master.py (BuildMaster.loadConfig): new code to load
8128 buildmaster configuration from a file. This file can be re-read
8129 later, and the buildmaster will update itself to match the new
8130 desired configuration. Also use new Twisted Application class.
8131 * test/Makefile, test/test_config.py: unit tests for same
8133 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
8134 FreshCVSSources comparable, to support reload.
8135 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
8137 * buildbot/process/base.py (Builder): make them comparable, make
8138 Interlocks easier to attach, to support reload. Handle
8139 re-attachment of remote slaves.
8140 * buildbot/process/interlock.py (Interlock): same
8142 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
8143 Twisted's new Application class. Requires Twisted >= 1.0.8 .
8144 buildmaster taps are now constructed with mktap.
8145 * buildbot/status/client.py (StatusClientService): same
8147 * buildbot/status/words.py: move to new Services, add support to
8148 connect to multiple networks, add reload support, allow nickname
8149 to be configured on a per-network basis
8151 2003-09-20 Brian Warner <warner@lothar.com>
8153 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
8154 the freebsd builder, now that the machine has been upgraded and no
8155 longer has python2.2
8157 * setup.py (version): bump to 0.3.5+ while between releases
8159 2003-09-19 Brian Warner <warner@lothar.com>
8161 * setup.py (version): Releasing buildbot-0.3.5
8163 2003-09-19 Brian Warner <warner@lothar.com>
8165 * NEWS: add post-0.3.4 notes
8167 * README (REQUIREMENTS): note twisted-1.0.7 requirement
8169 * MANIFEST.in: add contrib/*
8171 * docs/examples/twisted_master.py (twisted_app): all build slaves must
8172 use a remote root now: cvs.twistedmatrix.com
8174 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
8176 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
8177 compatibility with old servers
8178 (FreshCVSSource.start): and provide a way to use it
8179 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
8181 * docs/examples/twisted_master.py (twisted_app): update to new
8183 (twisted_app): listen on new ~buildbot socket
8184 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
8186 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
8187 to reduce cvs bandwidth (update instead of full checkout)
8189 2003-09-11 Brian Warner <warner@lothar.com>
8191 * contrib/fakechange.py: demo how to connect to the changemaster
8192 port. You can use this technique to submit changes to the
8193 buildmaster from source control systems that offer a hook to run a
8194 script when changes are committed.
8196 * contrib/debugclient.py: tool to connect to the debug port. You
8197 can use it to force builds, submit fake changes, and wiggle the
8200 * buildbot/master.py: the Big NewCred Reorganization. Use a single
8201 'Dispatcher' realm to handle all the different kinds of
8202 connections and Perspectives: buildslaves, the changemaster port,
8203 the debug port, and the status client port. NewCredPerspectives
8204 now have .attached/.detached methods called with the remote 'mind'
8205 reference, much like old perspectives did. All the pb.Services
8206 turned into ordinary app.ApplicationServices .
8207 (DebugService): went away, DebugPerspectives are now created
8208 directly by the Dispatcher.
8209 (makeApp): changed interface a little bit
8211 * buildbot/changes/changes.py: newcred
8212 * buildbot/status/client.py: newcred
8214 * buildbot/clients/base.py: newcred client side changes
8215 * buildbot/bot.py: ditto
8217 * docs/examples/glib_master.py: handle new makeApp() interface
8218 * docs/examples/twisted_master.py: ditto
8220 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
8221 base newcred Perspectives on. This should go away once Twisted
8222 itself provides something sensible.
8225 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
8227 * contrib/svn_buildbot.py: A program that you can call from your
8228 SVNREPO/hooks/post-commit file that will notify a BuildBot master
8229 when a change in an SVN repository has happened. See the top of
8230 the file for some minimal usage info.
8232 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
8234 * buildbot/slavecommand.py (ArglistCommand): Add new
8235 ArglistCommand that takes an argument list rather than a string as
8236 a parameter. Using a st.split() for argv is very bad.
8238 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
8239 update to a particular revision rather than always checking out
8240 (still not very smart about it, there may be cases where the
8241 checkout becomes inconsistent).
8243 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
8245 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
8246 SVN fetch support. It can checkout (not update!) a specified
8247 revision from a specified repository to a specified directory.
8249 * buildbot/status/progress.py (Expectations.update): Fix an
8250 obvious bug (apparently created by the change described in the
8251 previous ChangeLog message) by moving a check to *after* the
8252 variable it checks is defined.
8255 2003-09-08 Brian Warner <warner@lothar.com>
8257 * buildbot/status/progress.py (Expectations.update): hack to catch
8258 an exception TTimo sees: sometimes the update() method seems to
8259 get called before the step has actually finished, so the .stopTime
8260 is not set, so no totalTime() is available and we average None
8261 with the previous value. Catch this and just don't update the
8262 metrics, and emit a log message.
8264 2003-08-24 Brian Warner <warner@lothar.com>
8266 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
8267 parameter to set copydir='original' in CVS commands.
8269 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
8271 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
8272 which tells the command to maintain a separate original-source CVS
8273 workspace. For each build, this workspace will be updated, then
8274 the tree copied into a new workdir. This reduces CVS bandwidth
8275 (from a full checkout to a mere update) while doubling the local
8276 disk usage (to keep two copies of the tree).
8278 2003-08-21 Brian Warner <warner@lothar.com>
8280 * buildbot/status/event.py (Logfile.addEntry): if the master web
8281 server dies while we're serving a page, request.write raises
8282 pb.DeadReferenceError . Catch this and treat it like a
8283 notifyFinish event by dropping the request.
8285 2003-08-18 Brian Warner <warner@lothar.com>
8287 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
8288 (instead of blowing up) if a force-build command is given without
8291 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
8292 don't blow up if there aren't yet any Changes in the list
8294 2003-08-02 Brian Warner <warner@lothar.com>
8296 * buildbot/bot.py (updateApplication): don't set the .tap name,
8297 since we shouldn't assume we own the whole .tap file
8299 * buildbot/bb_tap.py (updateApplication): clean up code, detect
8300 'mktap buildbot' (without a subcommand) better
8302 2003-07-29 Brian Warner <warner@lothar.com>
8304 * buildbot/status/words.py
8305 (IrcStatusFactory.clientConnectionLost): when we lose the
8306 connection to the IRC server, schedule a reconnection attempt.
8308 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
8309 use shutil.rmtree instead of forking off an "rm -rf" command.
8310 rmtree may take a while and will block until it finishes, so we
8311 use "rm -rf" if available.
8313 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
8314 freebsd buildslave badly
8316 * setup.py (version): bump to 0.3.4+ while between releases
8318 2003-07-28 Brian Warner <warner@lothar.com>
8320 * setup.py (version): Releasing buildbot-0.3.4
8322 2003-07-28 Brian Warner <warner@lothar.com>
8324 * NEWS: update in preparation for release
8326 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
8327 process.signalProcess instead of os.kill, to improve w32
8330 * docs/examples/twisted_master.py (twisted_app): turn off
8331 win32eventreactor: the tests hang the buildslave badly
8333 * buildbot/process/base.py (Build.buildFinished): update ETA even on
8334 failed builds, since usually the failures are consistent
8336 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
8337 add compileOpts/compileOpts2 to reactors build
8339 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
8340 (twisted_app): use both default and win32eventreactor on w32 build.
8341 Use both default and kqreactor on freebsd build.
8343 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8344 add compileOpts2, which is put after the build_ext argument. w32
8345 needs "-c mingw32" here.
8347 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
8348 touch .acqpath, it goes away in recent Twisted releases
8350 * docs/examples/twisted_master.py (twisted_app): use "python" for
8351 the w32 buildslave, not "python2.2"
8353 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
8354 the directory exists.. should hush an exception under w32
8356 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
8357 ProcessTerminated -provided values for signal and exitCode rather
8358 than parsing the unix status code directly. This should remove one
8359 more roadblock for a w32-hosted buildslave.
8361 * test/test_mailparse.py: add test cases for Syncmail parser
8363 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
8364 temporary compatibility import. Note! Start importing
8365 FCMaildirSource from changes.mail instead of changes.freshcvsmail
8367 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
8369 2003-07-27 Brian Warner <warner@lothar.com>
8371 * NEWS: started adding new features
8373 * buildbot/changes/mail.py: start work on Syncmail parser, move
8374 mail sources into their own file
8376 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
8377 as implementing IChangeSource
8378 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
8380 * buildbot/interfaces.py: define the IChangeSource interface
8382 2003-07-26 Brian Warner <warner@lothar.com>
8384 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
8386 2003-06-25 Brian Warner <warner@lothar.com>
8388 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
8391 2003-06-17 Brian Warner <warner@lothar.com>
8393 * buildbot/status/words.py: clean up method usage to avoid error
8394 in silly IRC command
8395 (IrcStatusBot.emit_status): round off seconds display
8397 * buildbot/process/base.py (Build): delete the timer when saving
8398 to the .tap file, and restore it (if it should still be running)
8399 upon restore. This should fix the "next build in -34 seconds"
8400 messages that result when the master is restarted while builds are
8401 sitting in the .waiting slot. If the time for the build has
8402 already passed, start it very soon (in 1 second).
8404 * buildbot/status/words.py: more silly commands
8406 * README (REQUIREMENTS): add URLs to all required software
8408 * buildbot/status/words.py ('last'): mention results of, and time
8411 2003-05-28 Brian Warner <warner@lothar.com>
8413 * buildbot/status/words.py: add 'last' command
8414 (IrcStatusBot.emit_status): add current-small text to 'status' output
8416 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
8417 (twisted_app): remove spaces from OS-X builder name
8419 * buildbot/master.py (makeApp): add knob to turn on IRC bot
8420 * buildbot/status/words.py: IRC bot should actually be useful now
8422 2003-05-23 Brian Warner <warner@lothar.com>
8424 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
8425 "slave information" from $(slavedir)/info/* . These files are
8426 maintained by the slave administrator, and describe the
8427 machine/environment that is hosting the slave. Information from
8428 them is put into the "Builder" HTML page. Still need to establish
8429 a set of well-known filenames and meanings for this data: at the
8430 moment, *all* info/* files are sent to the master, but only
8431 'admin' and 'host' are used on that end.
8432 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
8433 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
8434 * buildbot/master.py (BotPerspective.got_info): ditto
8436 2003-05-22 Brian Warner <warner@lothar.com>
8438 * setup.py (version): bump version to 0.3.3+ while between releases
8440 2003-05-21 Brian Warner <warner@lothar.com>
8442 * setup.py: Releasing buildbot-0.3.3
8444 2003-05-21 Brian Warner <warner@lothar.com>
8446 * NEWS: 0.3.3 news items
8448 * README: describe --keepalive and life behind a NAT box
8450 * buildbot/bot.py (Bot.connected): implement application-level
8451 keepalives to deal with NAT timeouts, turn them on with
8452 --keepalive option or when SO_KEEPALIVE doesn't work.
8454 * buildbot/master.py (BotPerspective): accept keepalives silently
8456 * buildbot/process/base.py (Build.buildException): CopiedFailures
8457 don't carry as much information as local ones, so don't try to
8458 create a big HTMLized version of them.
8460 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
8461 log file when step fails due to an exception, such as when the slave
8464 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
8465 --testmodule argument instead of grepping for test-case-name tags
8466 ourselves. Remove FindUnitTests code.
8467 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
8469 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
8471 2003-05-16 Brian Warner <warner@lothar.com>
8473 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
8474 argument to allow things like CFLAGS=-O0 to be passed without relying
8475 upon /bin/sh processing on the slave.
8477 * buildbot/process/step.py (InternalShellCommand.start): send
8479 * buildbot/slavecommand.py (ShellCommand.start): create argv with
8480 'split' instead of letting /bin/sh do it. This should also remove
8481 the need for /bin/sh on the buildslave, making it more likely to
8484 * buildbot/status/html.py: html-escape text in blamelist.
8485 Add "force build" button to the Builder page.
8487 * buildbot/process/step_twisted.py (countFailedTests): look at
8488 last 1000 characters for status line, as import errors can put it
8489 before the -200 point.
8491 2003-05-15 Brian Warner <warner@lothar.com>
8493 * docs/examples/twisted_master.py: use clobber=0 for remote builds
8495 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8496 make 'clobber' a parameter, so it is possible to have builds which
8497 do full tests but do a cvs update instead of hammering the CVS
8498 server with a full checkout each build
8500 * buildbot/process/step.py (InternalShellCommand): bump default
8501 timeout to 20 minutes
8503 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
8504 the master to trigger a build. Run it via manhole.
8506 * buildbot/master.py (BotPerspective.perspective_forceBuild):
8507 allow slaves to trigger any build that they host, to make life
8508 easier for slave admins who are testing out new build processes
8510 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
8511 don't flunk cReactor or qtreactor on failure, since they fail alot
8512 these days. Do warnOnFailure instead.
8514 * buildbot/process/base.py: change Builder.buildable from a list
8515 into a single slot. When we don't have a slave, new builds (once
8516 they make it past the timeout) are now merged into an existing
8517 buildable one instead of being queued. With this change, a slave
8518 which has been away for a while doesn't get pounded with all the
8519 builds it missed, but instead just does a single build.
8521 2003-05-07 Brian Warner <warner@lothar.com>
8523 * setup.py (version): bump version to 0.3.2+ while between releases
8525 2003-05-07 Brian Warner <warner@lothar.com>
8527 * setup.py: Releasing buildbot-0.3.2
8529 2003-05-07 Brian Warner <warner@lothar.com>
8531 * setup.py: fix major packaging error: include subdirectories!
8533 * NEWS: add changes since last release
8535 * README (REQUIREMENTS): update twisted/python dependencies
8537 * buildbot/status/builder.py (Builder.startBuild): change
8538 BuildProcess API: now they should call startBuild/finishBuild
8539 instead of pushing firstEvent / setLastBuildStatus. Moving towards
8540 keeping a list of builds in the statusbag, to support other kinds of
8542 (Builder.addClient): send current-activity-small to new clients
8543 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
8546 * buildbot/status/client.py: drop RemoteReferences at shutdown
8548 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
8550 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
8551 more debug messages for remote status client
8553 * buildbot/process/step.py (InternalBuildStep.stepComplete)
8554 (.stepFailed): only fire the Deferred once, even if both
8555 stepComplete and stepFailed are called. I think this can happen if
8556 an exception occurs at a weird time.
8558 * buildbot/status/words.py: work-in-progress: IRC status delivery
8560 2003-05-05 Brian Warner <warner@lothar.com>
8562 * docs/examples/twisted_master.py (twisted_app): hush internal
8563 python2.3 distutils deprecation warnings
8564 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8565 add compileOpts= argument which inserts extra args before the
8566 "setup.py build_ext" command. This can be used to give -Wignore
8567 warnings, to hush some internal python-2.3 deprecation messages.
8569 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
8570 the ['twisted.test'] default test case to make it easier to change
8573 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
8574 * buildbot/clients/gtkPanes.py: ditto
8576 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
8577 arg to collapse RunUnitTestsRandomly into RunUnitTests
8578 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8579 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
8581 * buildbot/status/html.py (StatusResource): shuffle Resources
8582 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
8583 would serve the waterfall display, but the internal links were
8584 only valid on the trailing-slash version. The correct behavior is
8585 for the non-slashed one to serve a Redirect to the slashed one.
8586 This only shows up when the buildbot page is hanging off another
8587 server, like a Twisted-Web distributed server.
8589 * buildbot/status/event.py (Event, RemoteEvent): make Events
8590 pb.Cacheable, with RemoteEvent as the cached version. This removes
8591 a lot of explicit send-an-update code.
8592 * buildbot/status/builder.py (Builder): remove send-update code
8593 * buildbot/status/client.py (ClientBuilder): remove send-update
8594 code, and log errors that occur during callRemote (mostly to catch
8595 InsecureJelly exceptions)
8597 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
8598 run Lore with the same python used in the rest of the build
8600 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
8602 * buildbot/process/step_twisted.py (HLint): accept 'python'
8603 argument. Catch rc!=0 and mark the step as failed. This marks the
8604 build orange ("has warnings").
8605 (RunUnitTestsJelly): move out to step_twisted2.py
8607 * buildbot/util.py (ignoreStaleRefs): add utility function
8609 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
8610 don't fake ETA object, it's too hard to get right
8612 2003-05-02 Brian Warner <warner@lothar.com>
8614 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
8616 2003-05-01 Brian Warner <warner@lothar.com>
8618 * buildbot/status/html.py (StatusResource.body): oops, I was
8619 missing a <tr>, causing the waterfall page to be misrendered in
8620 everything except Galeon.
8622 2003-04-29 Brian Warner <warner@lothar.com>
8624 * docs/examples/twisted_master.py: make debuild use python-2.2
8625 explicitly, now that Twisted stopped supporting 2.1
8627 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
8628 handle tuple results too. I keep forgetting this, which suggests
8629 it needs to be rethought.
8631 * setup.py (setup): bump version to 0.3.1+ while between releases
8633 2003-04-29 Brian Warner <warner@lothar.com>
8635 * setup.py: Releasing buildbot-0.3.1
8637 2003-04-29 Brian Warner <warner@lothar.com>
8639 * README (SUPPORT): add plea to send questions to the mailing list
8641 * NEWS, MANIFEST.in: add description of recent changes
8643 * docs/examples/twisted_master.py: add the code used to create the
8644 Twisted buildmaster, with passwords and such removed out to a
8647 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
8648 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
8649 buildmasters to not require CVSToys be installed.
8650 * README, docs/examples/glib_master: update to match the change
8652 * buildbot/clients/base.py, buildbot/bot.py,
8653 buildbot/changes/changes.py, buildbot/pbutil.py: copy
8654 ReconnectingPB from CVSToys distribution to remove CVSToys
8655 dependency for build slaves and status clients. Buildmasters which
8656 use FreshCVSSources still require cvstoys be installed, of course.
8658 2003-04-25 Brian Warner <warner@lothar.com>
8660 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
8661 runTestsRandomly arg to turn on trial -z
8663 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
8664 experimental code to use trial's machine-parseable output to get
8665 more detailed test results. Still has some major issues.
8666 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
8669 * buildbot/status/builder.py (Builder.setCurrentBuild):
8670 anticipating moving build history into statusbag, not used yet
8672 * buildbot/status/tests.py: code to centralize test results,
8673 doesn't work quite yet
8675 * buildbot/status/event.py (Event): use hasattr("setName") instead
8676 of isinstance for now.. need better long-term solution
8678 * buildbot/status/html.py: Remove old imports
8680 2003-04-24 Brian Warner <warner@lothar.com>
8682 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
8683 ignore changes under doc/fun/ and sandbox/
8685 * buildbot/process/step_twisted.py: update pushEvent and friends.
8687 * buildbot/status/html.py (Box.td): replace event.buildername with
8688 event.parent.getSwappableName(). Needs more thought.
8690 * buildbot/status/builder.py (Builder): Replace pushEvent and
8691 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
8692 Tell events they are being pruned with event.delete().
8694 * buildbot/process/base.py (Build): Remove Builder status-handling
8695 methods. s/pushEvent/setCurrentActivity/.
8697 * buildbot/process/step.py (BuildStep): clean up status delivery.
8698 Gouse builder.statusbag methods instead of intermediate builder
8699 methods. s/updateLastEvent/updateCurrentActivity/.
8700 s/finalizeLastEvent/finishCurrentActivity/. Use
8701 addFileToCurrentActivity for summaryFunction.
8703 * buildbot/status/event.py (Logfile): put data in a Swappable when
8705 (Event): add more setter methods. Remove .buildername, use .parent
8706 and getSwappableName instead (needs more thought).
8708 * buildbot/util.py (Swappable):
8709 * test/test_swap.py: don't bother setting filename at __init__
8710 time, do it later. Change setFilename args to take parent first,
8711 since it provides the most significant part of the filename.
8713 2003-04-23 Brian Warner <warner@lothar.com>
8715 * buildbot/status/event.py (Logfile.addEntry): append to previous
8718 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
8719 anticipating Swappable
8720 (InternalShellCommand.remoteUpdate): split out various log-adding
8721 methods so subclasses can snarf stdout separately
8723 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
8724 in anticipation of Swappable build logs
8725 (Builder.testsFinished): anticipating TestResults, still disabled
8727 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
8730 * buildbot/status/event.py (Logfile): add (disabled) support for
8731 Swappable, not ready for use yet
8733 * buildbot/util.py (Swappable): object which is swapped out to
8734 disk after some period of no use.
8735 * test/test_swap.py: test buildbot.utils.Swappable
8737 2003-04-14 Brian Warner <warner@lothar.com>
8739 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
8740 periodic-build timer. Set the .periodicBuildTime on a builder
8741 instance to some number of seconds to activate it.
8743 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
8745 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
8746 a way that survives result tuples
8748 2003-04-12 Brian Warner <warner@lothar.com>
8750 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8751 return a dict instead of a tuple: allow summarizers to provide
8752 multiple summaries if they want
8753 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
8754 (debuildSummarizer): summarize lintian warnings/errors
8756 2003-04-10 Brian Warner <warner@lothar.com>
8758 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
8760 2003-04-09 Brian Warner <warner@lothar.com>
8762 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
8763 empty summaries: happens when the tests fail so hard they don't emit
8764 a parseable summary line.
8766 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8767 Allow summaryFunction to return None to indicate no summary should
8770 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
8771 writing to stale HTTP requests: notice when they disconnect and
8772 remove the request from the list. Also add CacheToFile from
8773 moshez, will be used later.
8775 2003-04-08 Brian Warner <warner@lothar.com>
8777 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
8778 should be an int, not a list of strings
8780 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
8781 if we weren't actually connected
8783 * buildbot/process/step_twisted.py (trialTextSummarizer): function
8784 to show the tail end of the trial text output
8786 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
8787 hook to summarize the results of a ShellCommand
8789 2003-04-07 Brian Warner <warner@lothar.com>
8791 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
8792 twisted test suite code into a single class.
8793 * buildbot/process/process_twisted.py: same
8795 2003-04-04 Brian Warner <warner@lothar.com>
8797 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
8799 * README (SLAVE): document use of mktap to create slave .tap file
8800 (REQUIREMENTS): describe dependencies
8802 * buildbot/bb_tap.py, buildbot/plugins.tml:
8803 * buildbot/bot.py (updateApplication): Add mktap support for creating
8804 buildslave .tap files
8806 2003-03-28 Brian Warner <warner@lothar.com>
8808 * buildbot/process/step.py (InternalShellCommand.finished): handle
8809 new tuple result values (fix embarrasing bug that appeared during
8812 2003-03-27 Brian Warner <warner@lothar.com>
8814 * docs/examples/glib_master.py, README: add sample buildmaster.tap
8817 2003-03-25 Brian Warner <warner@lothar.com>
8819 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
8820 to overall build status
8821 * buildbot/clients/base.py (Builder): improve event printing
8822 * buildbot/process/base.py (BasicBuildFactory): use specific steps
8823 instead of generic ShellCommand
8824 (Build): Add .stopBuild, use it when slave is detached
8826 * buildbot/process/step.py (Configure,Test): give the steps their
8827 own names and status strings
8829 * buildbot/status/html.py (StatusResource): add "show" argument,
8830 lets you limit the set of Builders being displayed.
8832 2003-03-20 Brian Warner <warner@lothar.com>
8834 * buildbot/process/basic.py: removed
8836 2003-03-19 Brian Warner <warner@lothar.com>
8838 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8839 turn off process-docs by default
8841 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
8842 when displaying build information without anything in allBuilds[]
8844 * buildbot/bot.py (makeApp): really take password from sys.argv
8846 2003-03-18 Brian Warner <warner@lothar.com>
8848 * buildbot/bot.py (buildApp): take password from sys.argv
8850 * README: replace with more useful text
8852 * setup.py: add a real one
8853 * MANIFEST.in, .cvsignore: more distutils packaging stuff
8855 * docs/PyCon-2003/: added sources for PyCon paper.
8857 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
8858 now Build objects control the process and Builder only handles
8859 slave stuff and distribution of changes/status. A new BuildFactory
8860 class creates Build objects on demand.
8862 Created ConfigurableBuild which takes a list of steps to run. This
8863 makes it a lot easier to set up a new kind of build and moves us
8864 closer to being able to configure a build from a web page.
8866 * buildbot/process/step_twisted.py, process_twisted.py: move to
8867 new model. A lot of code went away.
8869 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
8870 send lots of empty progress messages to the client.
8872 * buildbot/master.py (makeApp): enforce builder-name uniqueness
8874 2003-02-20 Brian Warner <warner@lothar.com>
8876 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
8878 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
8879 Twisted bug that prevented non-pty processes from working just got
8880 fixed, and the bug that leaks ptys is still being investigated.
8882 * buildbot/process/step.py (CVS): send timeout arg to slave
8884 * buildbot/clients/gtkPanes.py: add connection-status row, handle
8885 builders coming and going
8886 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
8887 from CVSToys, handle lost-buildmaster
8889 * buildbot/status/client.py (StatusClientService.removeBuilder):
8890 Clean up status client protocol: send builders (with references)
8891 as they are created, rather than sending a list and requiring the
8892 client to figure out which ones are new.
8893 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
8894 attempts to force a build on an unknown builder
8896 2003-02-19 Brian Warner <warner@lothar.com>
8898 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
8899 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
8900 Twisted stops leaking them.
8901 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
8902 builder goes to an idle state.
8904 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
8905 I figure out why CVS commands hang without them, and/or I fix the
8906 hung-command timeout
8908 2003-02-16 Brian Warner <warner@lothar.com>
8910 * buildbot/process/step_twisted.py: bin/hlint went away, replace
8911 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
8912 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
8913 GenerateDocs now that they are prefixed with WARNING:.
8915 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
8916 use manual href target instead of request.childLink
8918 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
8919 display every second, but update the ETA every 5 seconds (or
8920 whenever) as remote_progress messages arrive.
8923 2003-02-12 Brian Warner <warner@lothar.com>
8925 * *: import current sources from home CVS repository
8929 # add-log-time-format: add-log-iso8601-time-string