1 2007-08-07 Brian Warner <warner@lothar.com>
3 * buildbot/buildslave.py (BuildSlave.__init__): add max_builds=,
4 which imposes a per-slave limit on how many builds are allowed to
5 run simultaneously. This has a the same scope than the SlaveLock,
6 but is different because max_builds= gives the buildmaster the
7 freedom to assign the build to a different slave, whereas the
8 SlaveLock doesn't get tested until after the build is irrevocably
9 assigned to a slave. Therefore using max_builds= will improve
10 utilization in the presence of multiple buildslaves that are
11 attached to the same Builder. This completes the incorporation of
12 Dustin Mitchell's patches, and closes ticket #48. Thanks Dustin!
13 * buildbot/process/builder.py (SlaveBuilder.buildFinished): when
14 any Builder finishes, potentially trigger *all* Builders, since
15 max_builds= may have stalled someone else while waiting for the
17 * buildbot/scripts/sample.cfg: mention max_builds=
18 * buildbot/test/test_run.py (ConcurrencyLimit): test it
19 * docs/buildbot.texinfo (Buildslave Specifiers): document it
21 * buildbot/test/test_run.py (CanStartBuild._do_test2): tests which
22 inherit from RunMixin do not need to call master.stopService()
23 themselves, since RunMixin.tearDown does that. The double call
24 fails on Twisted-2.0.x, which didn't happen to protect against it.
25 * buildbot/test/test_slaves.py (BuildSlave.test_track_builders): same
27 * buildbot/buildslave.py (BuildSlave.addSlaveBuilder): third patch
28 from #48, this one to have the BuildSlave objects track
29 SlaveBuilders, so they'll be able to use that knowledge to
30 influence their canStartBuild() response.
31 * buildbot/process/builder.py (SlaveBuilder.attached): call it
32 (SlaveBuilder.detached): same
33 * buildbot/test/test_slaves.py (BuildSlave): test it
35 * buildbot/buildslave.py (BuildSlave.canStartBuild): incorporate
36 the second of Dustin's #48 patches, this one adding a method to
37 the BuildSlave that allows it to decide whether it is willing to
38 participate in a build or not.
39 (SlaveBuilder.isAvailable): use canStartBuild() to decide
41 * buildbot/test/test_run.py (CanStartBuild): test for it
43 * all: incorporate the first of four patches by Dustin Mitchell
44 from ticket #48, working towards improving control over slave
45 concurrency. The first patch is to use a long-lived BuildSlave
46 object per slave, on which other behavior can be added later. I've
47 modified his patch considerably.
48 * buildbot/buildslave.py (BuildSlave): move class out of
49 slave/__init__.py (where it would get loaded by the slave as well
50 as the master, making dependencies trickier), and merge it with
51 BotPerspective. Now these BuildSlave instances are created once in
52 the master.cfg file, and not destroyed until they are either
53 removed from the config file or changed so
54 much (name/password/class changes) that we cannot continue to use
55 the old one. This affects config files: they must use
56 'from buildbot.buildslave import BuildSlave' instead of using
57 'from buildbot.slave import BuildSlave'.
58 * buildbot/master.py: move BotPerspective out
59 (BuildMaster.loadConfig_Slaves): examine old and new slaves,
60 add or remove as necessary, update the rest using data from
62 * buildbot/slave/__init__.py: move BuildSlave out
63 * buildbot/test/test*.py: import BuildSlave from the new place
64 * buildbot/scripts/sample.cfg: update to match
65 * docs/buildbot.texinfo: update to match
66 * buildbot/process/builder.py: update comments to match
68 2007-08-02 Brian Warner <warner@lothar.com>
70 * buildbot/status/web/baseweb.py (OneLinePerBuild): improve
71 one-line-per-build pages a bit, add a header, refactor slightly
73 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): cleanup
74 the TimeOutError timer, patch by Dustin Mitchell.
76 2007-08-01 Brian Warner <warner@lothar.com>
78 * buildbot/status/web/baseweb.py (OneLinePerBuild): make this
79 mostly work (branch= is still ignored, we need a useful header)
80 (OneLinePerBuildOneBuilder.body): this too
82 * buildbot/status/web/builder.py (StatusResourceBuilder.force):
83 bring this up-to-date w.r.t. recent refactorings, and fix
84 redirections to bounce the browser to the top page after hitting
85 the 'force' button. This needs to be improved, but at least it now
86 redirects to a valid page.
87 (StatusResourceBuilder.ping): same
88 (StatusResourceBuilder.getChild): same, although I think this code
91 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
92 a branch= query argument, to filter the display down to builds and
93 changes that involve the given branch. You can add multiple
94 branch= arguments to see multiple branches (using a logical OR).
95 Note that there is no way to include the default branch (i.e.
96 None, i.e. trunk) yet, there is still work to be done to allow for
97 simple+uniform names of branches (i.e. removing the VC-specific
98 details of how branches are implemented, so calling the branch
99 'beta4' even though the SVN checkout step requires
101 * buildbot/status/builder.py (BuilderStatus.eventGenerator): same
102 * buildbot/changes/changes.py (ChangeMaster.eventGenerator): same
103 * buildbot/interfaces.py (IEventSource.eventGenerator): same
104 * docs/buildbot.texinfo (Buildbot Web Resources): document it
106 * all: bring import statements up-to-date: don't import
107 __future__, assume cPickle and cStringIO are always available.
108 Also remove #!/usr/bin/python lines from non-scripts, my editor
109 has been a bit over-enthusiastic about stuffing them into new .py
112 * buildbot/status/web/index.html: put a link to the waterfall page
113 on the index, otherwise first-time users of WebStatus aren't going
114 to see anything very interesting.
116 * buildbot/interfaces.py (IEventSource): document this interface.
117 Thanks to Dustin Mitchell for the patch. Closes #60.
118 * buildbot/status/builder.py (BuilderStatus): same
119 * buildbot/changes/changes.py (ChangeMaster): same
121 * buildbot/status/web/waterfall.py (WaterfallStatusResource.buildGrid):
122 add a query arg of 'show_events=true' to display non-build events,
123 like slaves attaching/detaching and reconfig events, or
124 'show_events=false' to hide them. The default is 'true'.
125 * docs/buildbot.texinfo (Buildbot Web Resources): document it
127 * web-parts: merge in web-parts branch. Lots of changes. The new
128 functionality is to add buildbot.status.html.WebStatus, which is a
129 superset of the Waterfall that adds new status pages and serves
130 regular files from BASEDIR/public_html/ , which is now the preferred
131 place to put robots.txt, buildbot.css, and index.html .
132 * buildbot/scripts/runner.py: the 'create-master' command now
133 creates public_html/ too, and populates it with a couple of
135 * buildbot/status/web: split waterfall code into smaller pieces
137 2007-07-31 Brian Warner <warner@lothar.com>
139 * buildbot/scripts/startup.py (launch): import twistd.run in a
140 different way to hush pyflakes
141 * buildbot/process/builder.py: remove unused import
143 2007-07-30 Brian Warner <warner@lothar.com>
145 * buildbot/interfaces.py (ISourceStamp): cleanup patch by Dustin
146 Mitchell: pass SourceStamps around rather than branch/version/etc
147 tuples. Thanks Dustin! Closes #70.
148 * buildbot/sourcestamp.py (SourceStamp): insist that .changes is a
149 tuple rather than a list, to avoid surprising mutations
150 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
151 * buildbot/status/mail.py (MailNotifier.buildMessage): same
152 * buildbot/status/builder.py (BuildStatus.getSourceStamp): same
153 * buildbot/test/test_status.py (Subscription): same
154 * buildbot/test/test_control.py (Force): same
155 * buildbot/test/test_buildreq.py (Request.testMerge): same
157 2007-07-29 Brian Warner <warner@lothar.com>
159 * buildbot/scripts/sample.cfg: remove the spurious 'builders'
160 variable, since it wasn't used and is confusing in the presence of
161 c['builders'] (which *is* used). Thanks to Thomas Vander Stichele
164 * buildbot/status/web/waterfall.py (WaterfallStatusResource): update
165 the Buildbot home-page link to point at buildbot.net instead of
166 sourceforge, and add a current-version query parameter so we can
167 get some statistics on which versions are in use out there.
169 2007-07-28 Brian Warner <warner@lothar.com>
171 * buildbot/master.py (BuildMaster.loadConfig): replace c['sources']
172 with c['change_source'], leaving c['sources'] for backwards
173 compatibility (but deprecated), scheduled for removal in 0.8.0
174 * docs/buildbot.texinfo: same
175 * buildbot/test/test_config.py: verify that c['sources'] still works
176 * buildbot/test/test_*.py: replace c['sources'] with c['change_source']
177 * buildbot/scripts/sample.cfg: update to match
179 * buildbot/changes/mail.py (MaildirSource): parse with python's
180 stdlib 'email' module, which has been available since python2.2,
181 and drop use of the 'rfc822' module, which has been depreceated
183 * buildbot/test/test_maildir.py: same: use parse_file() not parse
185 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): oops,
186 this needs to match the renaming in test/mail/msg*
188 * README (SETTING UP A BUILD MASTER): fix capitalization-typo.
191 * buildbot/test/test_mailparse.py: rename sample emails a bit
192 * buildbot/test/mail/msg*: same
194 * buildbot/changes/mail.py (SVNCommitEmailMaildirSource): add a
195 parser for the "commit-email.pl" script that is shipped with SVN,
196 written by Justin Mason. Thanks! Closes SF#1072845.
197 * buildbot/test/mail/svn-commit.*: sample messages
198 * buildbot/test/test_mailparse.py (TestSVNCommitEmail): test it
199 * docs/buildbot.texinfo (SVNCommitEmailMaildirSource): docs
201 2007-07-27 Brian Warner <warner@lothar.com>
203 * buildbot/changes/mail.py: refactor: move parsing into a method
204 named 'parse', each parser type gets a separate subclass. Remove
205 the old 'sep' argument (hardcode it to '/'), fix usage of prefix=
206 to be a simple leading-substring match. Add a warning to the logs
207 if prefix= does not end in a slash, since that's probably a
208 mistake. Fix both places where a prefix= mismatch would skip all
209 subsequent files in the same email, instead of just skipping the
210 one that didn't match.
211 * buildbot/test/test_mailparse.py: match changes
213 * docs/buildbot.texinfo (Getting Source Code Changes): refactor
214 docs on email-based ChangeSources
216 * docs/buildbot.texinfo (Getting Source Code Changes): move all
217 the changesource types up a level, removing the one-entry menu in
220 * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename
221 c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave
222 instances instead of tuples. Closes #63.
223 * buildbot/slave/__init__.py (BuildSlave): define marker class
224 * buildbot/scripts/sample.cfg: use c['slaves'] in sample config
225 * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves']
226 * buildbot/test/test_*.py: update tests to match
227 * buildbot/test/test_config.py (ConfigTest.testBots): verify that
228 the c['bots'] backwards-compatibility handler works
230 2007-07-26 Brian Warner <warner@lothar.com>
232 * buildbot/changes/hgbuildbot.py (hook): add an in-process
233 Mercurial change-sending hook, contributed by Frederic Leroy.
234 Thanks! Addresses #50.
235 * docs/buildbot.texinfo (MercurialHook): document it
237 * buildbot/changes/hgbuildbot.py: change the way imports are done,
238 to make it compatible with at least hg-0.9.1 and the current 0.9.4
240 2007-07-17 Brian Warner <warner@lothar.com>
242 * buildbot/process/buildstep.py (BuildStep.getLog): add a
243 convenience method to retrieve a log added with
244 addLog()/addCompleteLog()/etc or logfiles= . I should have added
247 2007-07-03 Brian Warner <warner@lothar.com>
249 * buildbot/slave/commands.py (ShellCommand._startCommand): when
250 logging the environment variables, put one variable on each line,
251 rather than having one really long line with all of them. This
252 should make them a bit more readable and not trigger the
253 horizontal scrollbar (when viewing it in a web browser) quite so
254 much. Thanks to Albert Hofkamp for the patch.
256 * buildbot/steps/shell.py (ShellCommand): allow workdir= to be a
257 WithProperties instance. Thanks to Axel Hecht for the patch.
259 * buildbot/test/test_properties.py (Interpolate.testWorkdir): test it
260 * docs/buildbot.texinfo (Build Properties): document it
261 * buildbot/slave/commands.py (ShellCommand._startCommand): create the
262 workdir if it didn't already exist.
264 * docs/buildbot.texinfo (Scheduler Types): correct the description
265 of Dependent schedulers. Thanks to Greg Ward for the patch.
267 * buildbot/steps/source.py (SVN.startVC): when applying a patch,
268 add "[patch]" to the step's display. Thanks to Dustin Mitchell for
269 the patch. Closes #49.
271 * buildbot/slave/commands.py (rmdirRecursive): chmod everything to
272 0700 before removing it, to deal with situations where a build will
273 leave files around without write permissions and the 'copy' or
274 'clobber' VC checkout modes need to blow away the tree first.
275 Thanks to Steve Milner for the suggestion and the patch (which I
276 mangled horribly). Closes #29.
277 * buildbot/test/test_slavecommand.py (Utilities.test_rmdirRecursive):
280 * buildbot/test/runutils.py (RunMixin.disappearSlave): oops, add
281 an allowReconnect= argument to let callers control whether they
282 want this don't-let-it-reconnect behavior, since some tests care.
283 Factor out the .continueTrying=False lines from those callers.
284 * buildbot/test/test_slaves.py: same
285 * buildbot/test/test_run.py: same
287 2007-07-02 Brian Warner <warner@lothar.com>
289 * buildbot/test/runutils.py (RunMixin.disappearSlave): once a
290 slave has been disappeared, don't let it reconnect. This was
291 causing an intermittent failure in test_slaves.py, when the slave
292 that was supposed to be gone managed to come back by the end of
293 the test and affect the count.
294 * buildbot/test/test_slaves.py (Slave.testFallback2): minor
296 * buildbot/process/builder.py (SlaveBuilder.__repr__): added some
297 diagnostic messages to track down this problem
298 (Builder.startBuild): same
300 * buildbot/process/builder.py (Builder.maybeStartBuild): choose
301 the slave randomly rather than always taking the first one. Thanks
302 to Pike for the patch. Closes #36.
303 * buildbot/test/test_slaves.py: match the change. to avoid huge
304 changes to the tests, I added a CHOOSE_SLAVES_RANDOMLY flag which
305 enables/disables the round-robin-ness (enabled by default), and
306 some unit tests disable it.
307 * docs/buildbot.texinfo (Buildmaster Architecture): document it
309 * buildbot/slave/bot.py (BuildSlave.__init__): rename the 'host'
310 argument to 'buildmaster_host', to make it more obvious that this
311 points to the buildmaster. Thanks to Bob Proulx for the
313 * buildbot/scripts/runner.py (slaveTAC): same
314 * buildbot/test/test_runner.py (Create.testSlave): match the change
316 * contrib/hg_buildbot.py: patch from Frederic Leroy to make this
319 2007-06-17 Brian Warner <warner@lothar.com>
321 * buildbot/test/test_config.py (Factories.testAllSteps): make sure
322 we can round-trip all of our current step classes by calling
323 getStepFactory() and using the results to make a clone of the
326 * buildbot/steps/maxq.py: fix import errors. Guess this hasn't been
329 * buildbot/process/factory.py (BuildFactory.addStep): To simplify
330 the config file, we're moving to using actual instances instead of
331 the (class, kwargs) 'step specification' tuples. BuildFactory
332 still keeps a list of tuples internally, but when real instances
333 are passed in to addStep(), they are asked for their class and
334 kwargs using the new BuildStep.getStepFactory method. BuildFactory
335 accepts both instances and the tuple form, and converts instances
336 to the tuple form, but the instance form is preferred because it
337 gives the Steps a chance to do argument validation. Closes: #11.
339 * buildbot/process/buildstep.py (BuildStep.__init__): record the
340 factory information necessary to implement getStepFactory. The
341 addFactoryArguments() method can be used to include arguments that
342 aren't passed to the BuildStep base class constructor.
343 (BuildStep.setBuild):
344 (BuildStep.setDefaultWorkdir): new methods to take parameters that
345 are needed for live BuildSteps but not to construct the specification
346 tuples that are stashed in the factory.
348 * buildbot/process/base.py (Build.setupBuild): pass 'build' and
349 'workdir' into new BuildSteps by using methods instead of
350 arguments. This makes the constructor for BuildSteps a lot
353 * buildbot/steps/*.py: update to match this change. Basically this
354 means adding calls to addFactoryArguments() in the __init__
355 methods to capture the arguments that aren't passed through to the
357 * buildbot/steps/shell.py (ShellCommand.setDefaultWorkdir): copy
358 the new workdir (if any) into the RemoteShellCommands arguments.
359 * buildbot/steps/source.py: allow workdir= to be optional,
360 implement setDefaultWorkdir() since we don't inherit from
361 (CVS): finally remove old clobber=/export=/copydir= arguments,
362 in favor of the mode= argument that's been around forever now.
363 * buildbot/steps/transfer.py: remove build= argument
365 * buildbot/test/*.py: update to match, generally by turning all
366 build= arguments into subsequent calls to s.setBuild()
367 * buildbot/test/test_config.py (Factories): verify that we can
368 use either BuildStep instances or class/kwarg tuples in both
369 BuildFactory.addStep and BuildFactory.__init__
371 * docs/buildbot.texinfo (Build Steps): document the new approach,
372 mention compatibility with the old approach, update all examples
373 to use the new style.
375 2007-06-16 Brian Warner <warner@lothar.com>
377 * buildbot/changes/svnpoller.py: when the poll fails, don't kill
378 the LoopingCall, just eat the failure so that we'll poll again
379 next time. This should allow us to tolerate (e.g.) sf.net SVN
380 failures more gracefully. Many thanks to Dustin Mitchell for the
383 2007-05-17 Brian Warner <warner@lothar.com>
385 * buildbot/status/words.py: refactor the IRC status bot into
386 separate 'Contact' and 'Channel' classes. The base Contact class
387 contains the interaction code: commands and responses. The
388 IRCContact subclass (and IrcStatusBot 'Channel') handle the
389 IRC-specific aspects. The plan is to write other subclasses for
390 other IM protocols like AIM and Jabber.
392 2007-04-16 Brian Warner <warner@lothar.com>
394 * CREDITS: update list of contributors. Thank you all!
396 2007-04-13 Brian Warner <warner@lothar.com>
398 * buildbot/status/mail.py (MailNotifier): add the project name to
399 the subject line and message body, to make it easier to
400 distinguish email coming from different buildmasters. Thanks to
401 Benoit Sigoure for the patch.
402 * buildbot/test/test_status.py (Mail): update to match
404 2007-03-24 Brian Warner <warner@lothar.com>
406 * buildbot/steps/transfer.py: open all files in 'b' binary mode to
407 avoid text-conversion problems between DOS/windows and unix.
408 Thanks to Phil Thompson for the patch. Fixes SF#1674927.
410 2007-03-03 Brian Warner <warner@lothar.com>
412 * buildbot/status/html.py (_hush_pyflakes): hush a pyflakes
413 warning about the use of Waterfall here
415 2007-03-01 Brian Warner <warner@lothar.com>
417 * buildbot/interfaces.py (IStatus.getBuilder): mention exceptions
419 2007-02-28 Brian Warner <warner@lothar.com>
421 * buildbot/changes/p4poller.py (P4Source): apply change from Scott
422 Lamb to use a more optimal form of 'p4 changes', to reduce server
423 load. He reports that this optimization was added to p4d release
424 2005.2, but it should work in all versions. Closes #27.
425 * buildbot/test/test_p4poller.py: match it
427 2007-02-27 Brian Warner <warner@lothar.com>
429 * buildbot/status/web/*.py: move all web status stuff into a
430 separate directory, in anticipation of splitting it into smaller
431 pieces and adding more files. html.py was getting way too big.
432 * buildbot/status/classic.css: move it too
433 * setup.py: add the new sub-package
434 * buildbot/test/test_web.py: match the changes
435 * MANIFEST.in: handle the move of classic.css
437 2007-02-07 Brian Warner <warner@lothar.com>
439 * contrib/OS-X/*: add some launchd .plist files for automatically
440 starting a buildmaster or buildslave under OS-X (10.4 or later).
441 Thanks to Mark Pauley for these.
443 2007-02-06 Brian Warner <warner@lothar.com>
445 * docs/buildbot.texinfo (Requirements): update requirements to
446 stop claiming compatibility with python-2.2 or twisted-1.3.x .
448 * README: mention python-2.5 and twisted-2.5 compatibility
450 * buildbot/clients/debug.py: hush pyflakes warnings by removing a
452 * buildbot/scripts/startup.py: same, by removing twisted-1.3.0
454 * buildbot/status/builder.py: same, by requiring cStringIO
455 * buildbot/status/words.py: same, remove twisted-1.3.0 compat
456 * buildbot/test/test_vc.py: same
457 * buildbot/test/test_web.py:
458 * buildbot/test/test_steps.py: same, remove unused import
460 * buildbot/status/html.py (StatusResourceBuild.body): oops, close
463 * buildbot/master.py (BuildMaster.loadConfig): warn the user if we
464 see any Builders that don't have Schedulers to drive them
466 * buildbot/master.py (BotPerspective.__repr__): fit bitrot, the
467 attributes this uses went away
469 * contrib/bb_applet.py (MyApplet.filled): add a small prefs
470 dialog, to allow you to reset the buildmaster and force
471 connect/disconnect. Correctly handle losing the buildmaster
472 connection (by switching the display to the hexnut, at which point
473 you can use the 'Connect' menu item to reconnect).
475 * buildbot/steps/source.py (Source.start): if we're using a patch,
476 add it as a LogFile to the checkout/update step. This will turn
477 into a link on the waterfall page.
479 * buildbot/scripts/tryclient.py (Try.createJob): implement --diff
480 option, to take the patch from a pre-made file rather than
481 generating it from the local tree. Thanks to Robert Helmer for the
482 idea. Closes #15 (the Trac ticket on the new http://buildbot.net/).
483 * buildbot/scripts/runner.py (TryOptions): add --diff,
484 --patchlevel, and --baserev options
485 * buildbot/scheduler.py (Try_Jobdir.parseJob): treat a baserev of ""
486 as None, meaning HEAD.
487 * buildbot/sourcestamp.py (SourceStamp): update docstring to
488 indicate that baserev=None means HEAD
489 * docs/buildbot.texinfo (try --diff): document it
491 * buildbot/test/test_steps.py (BuildStep): remove use of
492 reactor.iterate(), although the technique I replaced it with is a
493 gross polling hack that must be cleaned up properly some day. This
494 was the last use of reactor.iterate in the entire tree, yay.
496 2007-02-05 Brian Warner <warner@lothar.com>
498 * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
499 is one of the three known values, otherwise we emit some confusing
500 messages later on. Thanks to Grig Gheorghiu for the catch.
502 2007-01-30 Brian Warner <warner@lothar.com>
504 * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
505 Hearsum contributed a patch to let BonsaiPoller work with results
506 that contain non-ascii characters. Closes SF#1632641.
508 2007-01-27 Brian Warner <warner@lothar.com>
510 * Makefile (release): produce both .tar.gz and .zip source bundles.
513 2007-01-23 Brian Warner <warner@lothar.com>
515 * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
516 * buildbot/changes/monotone.py: same
518 * buildbot/changes/maildir.py: combine several files into one,
519 clean up maildir.py to use Services properly.
520 * buildbot/changes/maildirtwisted.py: remove
521 * buildbot/changes/maildirgtk.py: remove, it wasn't used by
523 * buildbot/changes/mail.py: match the change
524 * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
525 * buildbot/test/test_maildir.py: remove use of reactor.iterate()
527 * buildbot/slave/commands.py (command_version): bump to "2.3" to
528 indicate that the buildslave knows about the 'bzr' command
530 2007-01-22 Brian Warner <warner@lothar.com>
532 * buildbot/process/builder.py (Builder.fireTestEvent): don't use
533 'with', it will become a reserved work in python2.6 .
535 * contrib/bb_applet.py: add a simple gnome-panel applet, to
536 display a terse summary of buildbot status.
537 * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
538 some icons, small versions of the Blender object that lives in
539 docs/images/icon.blend
541 * buildbot/steps/source.py (Bzr): add Bazaar-ng support
542 * buildbot/slave/commands.py (Bzr): same
543 * buildbot/scripts/tryclient.py (BzrExtractor): same
544 (SourceStampExtractor.dovc): modify this to allow non-zero exit
545 status, since 'bzr diff' does that
546 * buildbot/test/test_vc.py (Bzr): same
547 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
551 2007-01-20 Brian Warner <warner@lothar.com>
553 * contrib/darcs_buildbot.py: tidy up the progress messages
555 2007-01-17 Brian Warner <warner@lothar.com>
557 * contrib/darcs_buildbot.py: enhance to handle multiple patches
558 being pushed at a time. This keeps state in the repository in a
559 small file named .darcs_buildbot-lastchange, but that shouldn't
560 interfere with normal repository operations. Fixes SF#1534049.
561 * buildbot/clients/sendchange.py (Sender): make a single Sender
562 capable of sending Changes with different usernames.
564 2006-12-11 Brian Warner <warner@lothar.com>
566 * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
567 scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
568 buildbot.changes.mail a long time ago, but I forgot to add the
569 DeprecationWarning until now.
571 * buildbot/process/maxq.py: remove this, the functionality now
572 lives in buildbot.steps.maxq
574 * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
575 * buildbot/clients/gtkPanes.py: remove unused import
577 * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
578 that was meant to provide a special Reporter to run inside trial
579 and give the buildslave lots of machine-readable status. We never
580 finished this project.
582 * buildbot/changes/bonsaipoller.py: remove unused imports
583 * buildbot/changes/svnpoller.py: same
584 * buildbot/process/builder.py: same
585 * buildbot/process/buildstep.py: same
586 * buildbot/slave/bot.py: hush pyflakes warning
587 * buildbot/status/tests.py: remove unused imports
588 * buildbot/status/tinderbox.py: same
589 * buildbot/steps/python_twisted.py: same
591 * buildbot/process/step.py: remove this file, these names were
592 deprecated in 0.7.5 and are now being removed.
593 * buildbot/process/step_twisted.py: same
594 * buildbot/test/test_steps.py (ReorgCompatibility): remove test
596 * buildbot/twcompat.py: remove the empty file, yay it is gone
598 * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
599 tw-2.0.0 and newer have the method we need.
600 (getProcessOutputAndValue): same
601 (which): remove this method, tw-2.0.0 t.p.procutils has it
603 * buildbot/twcompat.py (implements): remove this method
604 * buildbot/*: import implements() from zope.interface directly
606 * buildbot/status/mail.py: stop falling back to importing
607 twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
610 * buildbot/twcompat.py (Interface): remove this import
611 * buildbot/*: import Interface from zope.interface directly
613 * buildbot/twcompat.py (providedBy): remove this method
614 * buildbot/*: turn all uses of providedBy(obj, iface) into
615 iface.providedBy(obj)
617 * buildbot/twcompat.py (maybeWait): remove this method, now that
618 we no longer maintain compatibility with Twisted<=1.3.0 .
619 Twisted-2.0.0 and later allow trial methods to return Deferreds
621 * buildbot/test/*: remove all uses of maybeWait
623 * buildbot/__init__.py (version): bump to 0.7.5+ while between
625 * docs/buildbot.texinfo: same
627 2006-12-10 Brian Warner <warner@lothar.com>
629 * buildbot/__init__.py (version): Releasing buildbot-0.7.5
630 * docs/buildbot.texinfo: set version to match
632 2006-12-10 Brian Warner <warner@lothar.com>
634 * README (REQUIREMENTS): update for release
635 * NEWS: update for release
636 * buildbot/slave/commands.py (command_version): mention that this
637 version (2.2) was released with buildbot-0.7.5
639 * buildbot/test/test_config.py (StartService.testStartService):
640 inhibit the usual read-config-on-startup behavior, since otherwise
641 the log.err that gets recorded causes the test to fail
643 * buildbot/status/builder.py (LogFile.finish): forget about all
644 subscribers once the log has finished, since after that point
645 we're never going to use them again. This might help free up some
648 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
649 than the old/deprecated gtk.mainquit()
651 2006-12-09 Brian Warner <warner@lothar.com>
653 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
654 better when we can't open the masterdst file
656 * buildbot/scripts/startup.py (Follower._failure): add missing
657 import statement for BuildSlaveDetectedError
659 * buildbot/steps/transfer.py (FileUpload): cleanup
660 (FileDownload): same. Add tests for slave version, add mode=.
661 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
662 (SlaveFileDownloadCommand): same
663 * buildbot/test/test_transfer.py: enhance tests
664 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
667 2006-12-08 Brian Warner <warner@lothar.com>
669 * buildbot/scripts/runner.py (sendchange): halt the reactor on
670 both success *and* failure. Without this, the 'buildbot
671 sendchange' command would hang if it could not contact the
672 buildmaster or deliver the Change, which would generally cause the
673 user's commit/record/checkin command to hang too. Thanks to
674 Christian Unger for the catch.
676 2006-12-06 Brian Warner <warner@lothar.com>
678 * NEWS: update with items for the next release
680 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
681 whimsical example pulled from a punch-drunk email I sent out late
683 (Transferring Files): document some of the other parameters
684 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
685 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
686 * buildbot/test/test_svnpoller.py: same
687 * buildbot/changes/svnpoller.py (SVNPoller): same
689 2006-11-26 Brian Warner <warner@lothar.com>
691 * docs/buildbot.texinfo (Build Properties): remind users that
692 WithProperties must appear in a command= list, not as a top-level
694 * buildbot/steps/shell.py (ShellCommand.start): and assert that
695 we're sending a list or a single string to the RemoteShellCommand
697 * buildbot/scheduler.py (Nightly): Improve docs slightly.
699 * buildbot/scripts/startup.py (start): skip the whole
700 watch-the-logfile thing under windows, since it needs os.fork()
702 * buildbot/scripts/runner.py (restart): remove the old message
703 that got printed after the buildbot was restarted.. it most cases
704 it didn't get printed at the right time anyways
706 2006-11-25 Brian Warner <warner@lothar.com>
708 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
709 follow twistd.log and print lines until the process has started
710 started properly. For the buildmaster, this means until the config
711 file has been parsed and accepted. For the buildslave, this means
712 until we've connected to the master. We give up after 5 seconds in
713 any case. Helpful error messages and troubleshooting suggestions
714 are printed when we don't see a successful startup. This closes the
715 remainder of SF#1517975.
716 * buildbot/scripts/startup.py: moved app startup code to here
717 * buildbot/scripts/logwatcher.py: utility class to follow log
718 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
719 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
720 so the LogWatcher can tell the difference between a buildmaster
723 2006-11-24 Brian Warner <warner@lothar.com>
725 * docs/examples/twisted_master.cfg: update to match the version
726 in use on twistedmatrix.com
727 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
728 was using before stopped working, but 'irc.freenode.net' works
731 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
734 * buildbot/clients/base.py (TextClient.not_connected): upon
735 UnauthorizedLogin failures, remind the user to connect to the
736 PBListener port instead of the slaveport.
737 (TextClient.disconnected): shut down more quietly
738 * docs/buildbot.texinfo (statuslog): add another reminder
740 * buildbot/scripts/runner.py (Options.subCommands): rename
741 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
742 'sighup' as an alias.
743 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
744 reconfig command to follow twistd.log and print all of the lines
745 from the start of the config-file reload to its completion. This
746 should make it a lot easier to discover bugs in the config file.
747 Use --quiet to disable this behavior. This addresses half of
748 SF#1517975, the other half will be to add this same utility to
749 'buildbot start' and 'buildbot restart'.
750 * docs/buildbot.texinfo (Loading the Config File): same
753 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
754 method, it has been deprecated for a long time. Use
755 IBuilderControl.requestBuild instead.
756 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
757 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
758 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
759 * buildbot/test/test_control.py (Force.testForce): same
760 * buildbot/test/test_run.py: use requestBuild instead
762 * buildbot/clients/debug.py: replace 'Force Build' button with
763 'Request Build' (which just adds one to the queue), add Ping
764 Builder, add branch/revision fields to Request Build.
765 * buildbot/clients/debug.glade: same
766 * buildbot/master.py: update interface to match. This creates an
767 incompatibility between new debugclients and old buildmasters.
769 * buildbot/process/builder.py (Builder._attached): delay the call
770 to maybeStartBuild for a reactor turn, to avoid starting a build
771 in the middle of a reconfig (say, if the new Builder uses a new
772 slave which is already connected).
774 2006-11-23 Brian Warner <warner@lothar.com>
776 * buildbot/test/test_transfer.py: appease pyflakes
777 * buildbot/test/test_steps.py: same
779 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
780 keeps pyflakes from finding undefined names
782 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
783 Builder no longer induces a disconnect/reconnect cycle. This means
784 that any builds currently in progress will not be interrupted, and
785 any builds which are queued in the Builder will not be lost. This
786 is implemented by having the new Builder extract the state (i.e.
787 all pending Builds and any desired SlaveBuilders) from the old
789 (BotPerspective): refactor. The BotPerspective no longer keeps
790 track of all the Builders that want to use this slave; instead, it
791 asks the BotMaster each time it needs this list. This removes
792 addBuilder and removeBuilder. Clean up attached() to acquire all
793 the slave's information in a more atomic fashion. updateSlave() is
794 now the way to make sure the slave is using the right set of
795 Builders: just call it after everything else has been
797 (BotMaster): refactor, removing addBuilder/removeBuilder and
798 replacing them with an all-at-once setBuilders() call.
800 * buildbot/test/test_slaves.py (Reconfig): new test case to
801 exercise this functionality
802 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
803 * buildbot/slave/commands.py (WaitCommand): same
805 * docs/buildbot.texinfo (Loading the Config File): document the
808 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
809 SlaveBuilder to have its parent Builder changed.
810 (SlaveBuilder.isAvailable): new method to give access to state,
811 which is now a private attribute
812 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
813 the SlaveBuilder about how it is being used. These methods update
814 its internal state. buildFinished() is now the place that invokes
815 maybeStartBuild() on its parent Builder.
816 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
817 new Builder to take over for an old one, transferring state from
819 (Buider): refactor the way that SlaveBuilders are used to match,
820 giving them a bit more autonomy.
821 (Builder.buildFinished): this no longer calls maybeStartBuild():
822 instead the SlaveBuilder calls it on whoever its parent Builder is
823 at the time. This way, when an old Builder is replaced by a new
824 one, and there was a build in progress during the transition, when
825 that build finishes, it will be the new Builder that is told about
826 the newly available slave so it can start a new build.
828 * buildbot/process/base.py (Build.startBuild._release_slave): when
829 the Build finishes, tell the SlaveBuilder that they've been
832 * buildbot/status/builder.py (SlaveStatus): add some new setter
833 methods for use by BotPerspective, to keep some attributes more
836 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
837 called by the buildmaster.
838 (Bot.setBuilderList): instead, we locally announce any leftover
839 directories based upon which Builders we were told about. The
840 master doesn't really care; it's the local admin who may or may not
844 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
845 to allow use of python2.4 or whatever. This tool still requires
848 2006-11-19 Brian Warner <warner@lothar.com>
850 * NEWS (IStatusLog.readlines): more news items
852 2006-11-18 Brian Warner <warner@lothar.com>
854 * NEWS: start collecting items for the next release.
856 2006-11-04 Brian Warner <warner@lothar.com>
858 * buildbot/changes/bonsaipoller.py: apply updates from Ben
859 Hearsum. Closes SF#1590310.
860 * buildbot/test/test_bonsaipoller.py: and tests
862 * buildbot/status/tinderbox.py
863 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
864 status when the build results in WARNINGS. Patch from Dave
865 Liebreich. Closes SF#1587352.
867 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
868 linux-vs-osx behavior difference w.r.t. reading from files that
869 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
870 to Mark Rowe for the patch.
872 2006-10-15 Brian Warner <warner@lothar.com>
874 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
875 method name was misspelled in the interface definition. Thanks to
876 Roy Rapoport for the catch.
878 2006-10-13 Brian Warner <warner@lothar.com>
880 * docs/buildbot.texinfo (Adding LogObservers): update sample code
881 to match the great Steps renaming
883 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
884 Maybe I should run my own unit tests before recording a big
885 change. Good thing I've got a buildbot to remind me.
887 2006-10-12 Brian Warner <warner@lothar.com>
889 * buildbot/steps/transfer.py: rework __init__ and args setup
890 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
892 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
893 when opening the target file, only catch IOError (to report via
894 stderr/rc!=0), let the others be reported as normal exceptions
896 2006-10-08 Brian Warner <warner@lothar.com>
898 * contrib/svn_watcher.py: fix security holes by using proper argv
899 arrays and subprocess.Popen() rather than commands.getoutput().
900 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
901 is deprecated in favor of buildbot/changes/svnpoller.py, and will
902 probably be removed by the next release.
905 2006-10-04 Brian Warner <warner@lothar.com>
907 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
908 initial lines that weren't emitted by pyflakes. When the pyflakes
909 command is run under a Makefile, 'make' will echo the command it
910 runs to stdio, and that was getting logged as a "misc" warning.
911 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
912 * buildbot/test/test_steps.py (testPyFlakes3): another test
914 2006-10-01 Brian Warner <warner@lothar.com>
916 * buildbot/status/html.py (HtmlResource.render): if we get a
917 unicode object from our content() method, encode it into utf-8
918 like we've been claiming to all along. This allows the comments
919 and author names from svnpoller.py to be delivered properly.
921 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
922 de-unicodify filenames before creating the Change, because the
923 rest of buildbot is unlikely to handle them well. Leave the 'who'
924 field as a unicode object.. I don't think there's anything that
925 will break very soon, and it will probably nudge us towards
926 accepting unicode everywhere sooner or later. Stop using the
927 "date" field that comes out of SVN, since it is using the
928 repository's clock (and timezone) and what we care about is the
929 buildmaster's (otherwise Changes from the future show up later
930 than the builds they triggered).
931 * buildbot/test/test_svnpoller.py (Everything.test1): match the
934 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
935 Suvbersion repository polling ChangeSource. I've hacked it up
936 considerably: any bugs are entirely my own fault. Thank you
938 * buildbot/test/test_svnpoller.py: tests for it
939 * docs/buildbot.texinfo (SvnSource): document it
941 2006-09-30 Brian Warner <warner@lothar.com>
943 * buildbot/scheduler.py (Periodic): submit a reason= to the
944 BuildSet to indicate which Scheduler triggered the build. Thanks
945 to Mateusz Loskot for the suggestion.
947 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
949 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
950 changes: set self.loop in __init__, remove unused volatile=
952 * docs/buildbot.texinfo (.buildbot config directory): add more
953 docs on the .buildbot/options keys used by "buildbot try"
954 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
955 (Try.deliverJob): same
957 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
961 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
962 close the filehandle when we stop watching the file. Before, the
963 filehandle was only closed when the LogFileWatcher was
964 garbage-collected, which could be quite a while in the future. If
965 it was still open by the time the next build started, windows will
966 refuse to let the new build delete the old build/ directory. Fixes
967 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
968 #twisted for the catch.
970 2006-09-29 Brian Warner <warner@lothar.com>
972 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
975 2006-09-25 Brian Warner <warner@lothar.com>
977 * setup.py: the new buildbot.steps module wasn't being installed.
978 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
979 (testmsgs): add the extra stuff from buildbot/test/* so you can
980 run unit tests on an installed copy of buildbot, not just from
983 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
984 columns of 'svnlook changed' output contain status information, so
985 strip [:4] instead of [:6]. Depending upon what the status flags
986 were, this would sometimes lead to mangled filenames. Thanks to
987 Riccardo Magliocchetti for the patch. Closes SF#1545146.
989 * buildbot/steps/source.py (Monotone): initial Monotone support,
990 contributed by Nathaniel Smith. Still needs docs and tests, but
991 this code has been in use on the Monotone buildbot for a long
993 * buildbot/slave/commands.py (Monotone): slave-side support
994 * buildbot/changes/monotone.py (MonotoneSource): polling change
997 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
998 contributed a Change Source that polls a Bonsai server (a
999 kind of web-based viewcvs CGI script).
1001 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
1002 Hearsum contributed a status plugin which sends email in the same
1003 format that Tinderbox does: this allows a number of tinderbox
1004 tools to be driven by Buildbot instead. Thanks Ben!
1006 2006-09-24 Brian Warner <warner@lothar.com>
1008 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
1009 Thanks to Robert Helmer for the patch.
1011 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
1012 BuildStatus about the buildslave name at the *beginning* of the
1013 build, rather than at the end. Thanks to Alexander Lorenz for the
1015 * buildbot/status/html.py (StatusResourceBuild.body): always
1016 include the slavename in the build page, not just when the build
1018 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
1019 slavename in the email message
1021 2006-09-21 Brian Warner <warner@lothar.com>
1023 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
1025 * docs/examples/glib_master.cfg: same
1026 * docs/examples/hello.cfg: same
1027 * docs/examples/twisted_master.cfg: same, update to current usage
1029 2006-09-19 Brian Warner <warner@lothar.com>
1031 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
1032 (PyFlakes.createSummary): make it compatible with python-2.2
1034 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
1035 for at least the output-parsing parts of PyFlakes
1037 2006-09-18 Brian Warner <warner@lothar.com>
1039 * buildbot/steps/python.py: oops, fix import of StringIO
1041 2006-09-17 Brian Warner <warner@lothar.com>
1043 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
1044 turns out that SVN-1.4.0 doesn't fail to update once you've
1045 replaced a file with a directory, unlike older versions of SVN and
1046 pretty much every other VC tool we support. Since what we really
1047 care about is that the update succeeds anyway, stop checking that
1048 the tree got clobbered and just assert that the build succeeded.
1049 (VCBase.printLogs): add a utility function for debugging
1051 * buildbot/process/step.py: oops, added extra imports by mistake
1053 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
1054 rstrip() on the first line coming out of the 'p4 describe'
1055 process, to remove the stray ^M that Wade Brainerd reports seeing
1056 in the 'when' field. Fixes SF#1555985.
1058 * buildbot/master.py (BuildMaster.loadConfig): improve the error
1059 message logged when c['schedulers'] is not right
1060 * buildbot/scheduler.py (Scheduler.__init__): improve error
1061 message when a Scheduler() is created with the wrong arguments
1062 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
1063 verify that these error messages are emitted
1065 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
1066 The idea is that all the base classes (like BuildStep and
1067 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
1068 will be a leftover backwards-compatibility file that only contains
1069 aliases for the steps that were moved out to buildbot.steps.*
1070 * lots: change imports to match
1071 * buildbot/process/step.py: add a DeprecationWarning if it ever
1074 2006-09-12 Brian Warner <warner@lothar.com>
1076 * buildbot/scheduler.py (Scheduler.__init__): make sure that
1077 builderNames= is actually a sequence, since if you happen to give
1078 it a single builder-specification dictionary instead, it won't get
1079 caught by the existing assert. Thanks to Brett Neely for the
1082 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
1084 * docs/buildbot.texinfo (Python BuildSteps): document them
1085 (sendchange): include a link to PBChangeSource, since you need one
1087 * buildbot/steps/shell.py: clean up test-case-name line, remove some
1089 * buildbot/steps/dummy.py: same
1091 2006-09-08 Brian Warner <warner@lothar.com>
1093 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
1094 BuildStep which lets you transfer files from the master to the
1095 slave or vice versa. Thanks to Albert Hofkamp for the original
1096 patch. Fixes SF#1504631.
1097 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
1099 (SlaveFileDownloadCommand): same
1100 * docs/buildbot.texinfo (Transferring Files): document it
1101 * buildbot/test/test_transfer.py: test it
1102 * buildbot/test/runutils.py (StepTester): new utility class for
1103 testing BuildSteps and RemoteCommands without Builds or Bots or PB
1104 * buildbot/test/test_steps.py (CheckStepTester): validate that the
1107 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
1108 walk through StatusLogs one line at a time, mostly for the benefit
1109 of ShellCommand.createSummary methods. You can either walk through
1110 STDOUT or STDERR, but the default is STDOUT.
1112 * buildbot/status/builder.py (LogFile.readlines): implement it.
1113 Note that this is not yet memory-efficient, it just pulls the
1114 whole file into RAM and then splits it up with a StringIO.
1115 Eventually this should be a generator that only pulls chunks from
1117 * buildbot/test/test_status.py (Log.testReadlines): test it
1119 * docs/buildbot.texinfo: update to match changes
1120 * buildbot/process/factory.py: stop using old definitions
1121 * buildbot/process/process_twisted.py: same
1122 * buildbot/test/test_*.py: same
1124 * buildbot/process/step_twisted.py: move definition to..
1125 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
1126 relative-import mechanisms prevent this from being named 'twisted'
1127 or 'python/twisted' as I would have preferred.
1129 * buildbot/process/maxq.py: move definition to..
1130 * buildbot/steps/maxq.py: .. here, leave a compatibility import
1132 * buildbot/process/step.py: split the user-visible BuildSteps into
1133 separate files, all under buildbot/steps/
1134 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
1135 * buildbot/steps/shell.py: this holds ShellCommand and friends
1136 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
1138 2006-09-05 Brian Warner <warner@lothar.com>
1140 * lots: run pyflakes, removed a lot of unused imports, changed the
1141 form of some conditional imports to remove false pyflakes
1142 warnings. There are still a number of warnings left, mostly from
1143 imports that are done for their side-effects.
1144 * buildbot/test/test_vc.py: import twisted.python.failure, since it
1147 2006-08-26 Brian Warner <warner@lothar.com>
1149 * buildbot/test/test_locks.py (Unit.testLater): make the tests
1150 compatible with twisted-1.3.0, for some reason I just can't seem
1151 to let go of the past.
1153 2006-08-25 Brian Warner <warner@lothar.com>
1155 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
1157 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
1158 all logfiles= in startCommand(), rather than in start() . This
1159 makes it easier to have the 'stdio' log come before any secondary
1160 logfiles, which I feel makes the waterfall display more
1162 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
1163 from ShellCommand up into LoggingBuildStep
1164 (LoggingBuildStep.__init__): move the handling of logfiles= from
1165 ShellCommand up to LoggingBuildStep, because startCommand is
1166 provided by LoggingBuildStep, whereas start() was specific to
1167 subclasses like ShellCommand and Source. This removes code
1168 duplication in those subclasses.
1169 (ShellCommand.__init__): same
1170 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
1171 for a slave that's too old to understand logfiles= into a separate
1172 method, so it can live in ShellCommand. The rest of
1173 setupLogfiles() can live in LoggingBuildStep.
1175 2006-08-24 Brian Warner <warner@lothar.com>
1177 * buildbot/locks.py (BaseLock): you can now configure Locks to
1178 allow multiple simultaneous owners. They still default to
1179 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
1181 * docs/buildbot.texinfo (Interlocks): document the new options
1182 * buildbot/test/test_locks.py: add a bunch of new unit tests
1183 * buildbot/process/base.py (Build.acquireLocks): locks now offer
1184 waitUntilMaybeAvailable, not waitUntilAvailable
1185 * buildbot/process/step.py (BuildStep.acquireLocks): same
1186 * buildbot/master.py (BotMaster.getLockByID): real locks now use
1187 the whole lockid in their constructor, not just the name. Also,
1188 keep track of which real locks we've handed out by the full
1189 lockid, not just class+name, otherwise changing just the maxCount=
1190 in the master.cfg file would not actually cause a behavioral
1193 2006-08-23 Brian Warner <warner@lothar.com>
1195 * buildbot/__init__.py (version): bump to 0.7.4+ while between
1197 * docs/buildbot.texinfo: same
1199 2006-08-23 Brian Warner <warner@lothar.com>
1201 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
1202 * docs/buildbot.texinfo: set version to match
1203 * NEWS: update for 0.7.4
1204 * buildbot/slave/commands.py (command_version): mention that this
1205 version (2.1) was released with buildbot-0.7.4
1207 2006-08-22 Brian Warner <warner@lothar.com>
1211 * CREDITS: new file, list of people who have helped. Thanks!
1212 * MANIFEST.in: ship it
1214 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
1215 new diagrams, the user's manual is more informative than it was.
1216 Start shipping the .html user's manual (and generated .png
1218 * Makefile: update 'release' target to match
1220 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
1221 test.. I think the web-parts effort will render it pointless well
1222 before it ever actually starts to work.
1224 2006-08-20 Brian Warner <warner@lothar.com>
1226 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
1227 meaning of the prefix= argument. It is now just a string which is
1228 stripped from the beginning of the filename. If prefix= is set but
1229 not found on any given filename, that filename is ignored. If all
1230 filenames in a Change are ignored, the Change is dropped. This is
1231 much simpler than the previous sep= nonsense, and I should have
1232 implemented it this way from the beginning. Effectively resolves
1233 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
1234 Gedminas for the catch and suggested fixes.
1235 (ChangePerspective.perspective_addChange): implement the actual
1237 * buildbot/test/test_changes.py (TestChangePerspective): test it
1238 * docs/buildbot.texinfo (PBChangeSource): document it, explain
1239 how to properly use prefix=
1240 * docs/examples/twisted_master.cfg (source): update prefix= by
1241 adding the trailing slash
1244 * docs/examples/twisted_master.cfg: update to actual practice
1246 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
1247 update test case to match new link text.. the HREF has both a
1248 class= setting and an enclosing [] pair that I didn't match in the
1251 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
1252 list of strings is preferred over a single string with embedded
1254 (ShellCommand.description=): explain that either single strings or
1255 a list of strings is acceptable, and why you might prefer one over
1256 the other. Add an example. Fixes SF#1524659, thanks to Paul
1257 Winkler for the catch.
1258 (Build Steps): update to use f.addStep() rather than using s()
1259 and the constructor list
1261 * buildbot/process/step.py (ShellCommand): accept either a single
1262 string or a list of strings in both description= and
1264 * buildbot/test/test_steps.py (Steps.test_description): test it
1265 * buildbot/test/runutils.py (makeBuildStep): support for that test
1267 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
1268 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
1269 collecting the files and creating the patch.
1271 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
1272 per-step URLs that will be displayed on the waterfall display,
1273 for things like the HTML output of code-coverage tools, when
1274 the results are hosted elsewhere.
1275 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
1276 way to retrieve these URLs
1277 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
1278 the method to retrieve these URLs. Also provide backwards
1279 compatibility for saved BuildStepStatus instances that didn't have
1281 * buildbot/process/step.py (BuildStep.addURL): method to set these
1282 URLs from within a BuildStep
1283 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
1284 (StepBox.getBox): give these external links a distinct CSS class
1285 named "BuildStep external" so a .css file can display them
1288 * buildbot/test/test_web.py (WaterfallSteps): test that we really
1290 * buildbot/test/test_steps.py (Steps): test that we can all the
1291 URLs. Also add a bunch of other tests on methods that can be
1292 called from within BuildSteps
1293 * buildbot/test/runutils.py (makeBuildStep): add utility function
1295 2006-08-13 Brian Warner <warner@lothar.com>
1297 * docs/buildbot.texinfo (BuildStep LogFiles): document them
1299 2006-08-10 Brian Warner <warner@lothar.com>
1301 * docs/buildbot.texinfo (Index of master.cfg keys): add another
1302 index, this one of things like c['sources'] and c['schedulers']
1303 (indices): it looks like my clever idea of putting the @fooindex
1304 commands in between the @node and the @subsection (to make the
1305 HREF anchor jump to slightly above the section title, which works
1306 much better in html) confused texinfo horribly, so I'm moving the
1307 index tags back to be just after the @subsection marker. I also
1308 added extra lines between the @node/@section paragraph and the
1309 index tags, since I think maybe texinfo wants to see these be
1310 separate paragraphs.
1312 * docs/Makefile (images): make sure images get built when
1313 rendering the manual
1314 * docs/images/Makefile: same
1316 * buildbot/scripts/runner.py: rename 'buildbot master' to
1317 'buildbot create-master', and 'buildbot slave' to 'buildbot
1319 * docs/buildbot.texinfo: same
1322 * docs/buildbot.texinfo: reimplement the "useful classes" index
1323 with actual texinfo indices. The .info rendering is a bit
1324 weird-looking but it works well, and the HTML rendering is quite
1325 nice. This also puts the index targets in the regular flow of the
1326 text, which is easier to maintain.
1328 2006-08-06 Brian Warner <warner@lothar.com>
1330 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
1331 Kevin Turner to prefer the environ= argument be a list rather than
1332 a string. If it is a list, it will be joined with a platform-local
1333 os.pathsep delimiter, and then prepended to any existing
1334 $PYTHONPATH value. This works better in cross-platform (i.e.
1335 windows buildslaves) environments when you need to push multiple
1336 directories onto the front of the path.
1337 (SlaveShellCommand): documented the new magic
1338 * docs/buildbot.texinfo (ShellCommand): documented the new magic
1339 in a user-visible form
1341 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
1342 Turner to prefer lists over strings when creating/running VC
1343 commands during unit tests. This is clearly necessary to survive
1344 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
1345 renamed the wq() function to qw() though, since that's how it's
1346 spelled in perl. Eventually I'd prefer all commands to be
1347 specified with lists.
1349 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
1350 which are deleted (or not yet created) correctly. Also add
1351 failsafe code to not explode if the file-watching poller doesn't
1352 get started. Thanks to JP Calderone for the catch and the poller
1354 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
1356 * buildbot/test/emitlogs.py: same
1358 * NEWS: summarize recent changes
1360 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
1361 clause to avoid the "host key mismatch" warning
1363 * buildbot/process/step_twisted.py (Trial.start): if the
1364 buildslave is too old to understand logfiles=, fall back to
1365 running 'cat _trial_temp/test.log' like before.
1366 (Trial.commandComplete): same. this takes advantage of the
1367 LoggingBuildStep refactoring to stall commandComplete long enough
1368 to run a second RemoteShellCommand.
1370 * buildbot/process/step.py (LoggingBuildStep.startCommand):
1371 refactor command-completion handling, to allow methods like
1372 commandComplete/createSummary/evaluateCommand to return Deferreds.
1373 (LoggingBuildStep._commandComplete): delete the refactored method
1374 (ShellCommand.setupLogfiles): if the buildslave is too old to
1375 understand logfiles=, put a warning message both into twistd.log
1376 and into the otherwise empty user-visible LogFiles.
1378 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
1379 callers to provide the slave-side logfile name, rather than
1380 forcing it to come from the local name of the LogFile.
1381 (BuildStep.getSlaveName): new method
1383 * buildbot/process/base.py (Build.getSlaveName): new method, so
1384 steps can find out which buildslave they're running on
1386 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
1387 to match the s/cvs_ver/command_version/ change
1389 2006-08-05 Brian Warner <warner@lothar.com>
1391 * buildbot/slave/commands.py (command_version): replace the CVS
1392 auto-updated cvs_ver keyword with a manually-updated variable,
1393 since CVS is no longer the master repository. Add a description of
1394 the remote API change starting in this version (2.1), specifically
1395 the fact that SlaveShellCommand now accepts 'initial_stdin',
1396 'keep_stdin_open', and 'logfiles'.
1398 2006-07-31 Brian Warner <warner@lothar.com>
1400 * docs/buildbot.texinfo (System Architecture): Finally add lots of
1401 diagrams to describe how the whole system fits together. The
1402 images themselves are kept in SVG files, with ascii-art versions
1403 in corresponding .txt files. Texinfo knows how to interpolate the
1404 text version into .info files, reference the .png versions from
1405 .html files, and include .eps versions in the .ps format.
1406 * docs/images/Makefile: tools to create .png and .eps
1407 * docs/images/*.svg: created pictures with Inkscape.
1408 * .darcs-boring: ignore the generated .eps and .png files
1410 2006-07-24 Brian Warner <warner@lothar.com>
1412 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
1413 Scheduler names, since they cause setServiceParent to explode
1415 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
1417 2006-07-20 Brian Warner <warner@lothar.com>
1419 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
1420 which runs the buildbot unit tests
1422 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
1423 classes that are useful in master.cfg
1425 2006-07-15 Brian Warner <warner@lothar.com>
1427 * Makefile (some-apidocs): new target to build only some epydocs
1429 * setup.py: minor comment.. does the classifiers= argument prevent
1430 the setup.py script from working on python2.2/2.3?
1432 * buildbot/scripts/sample.cfg: update manhole example, arrange into
1435 * buildbot/twcompat.py: fix minor typo in comments
1437 * buildbot/manhole.py: move all Manhole-related code out to this
1438 module. Implement SSH-based manholes (with TwistedConch), and move
1439 to conch's nifty line-editing syntax-coloring REPL shell instead
1440 of the boring non-editing monochromatic (and deprecated) old
1442 * buildbot/master.py: remove all Manhole-related code
1443 (BuildMaster.loadConfig._add): make sure the old manhole is
1444 removed before we add the new one
1445 * docs/buildbot.texinfo (Debug options): document new Manhole options
1447 * buildbot/twcompat.py (_which): fix some epydoc issues
1448 * buildbot/status/html.py (Waterfall.__init__): same
1450 2006-06-29 Brian Warner <warner@lothar.com>
1452 * buildbot/interfaces.py: get Interface from b.twcompat to hush
1453 deprecation warnings under newer Twisteds (by using
1454 zope.interface.Interface instead of old twisted.python.components
1456 * buildbot/slave/interfaces.py: same
1458 2006-06-28 Brian Warner <warner@lothar.com>
1460 * buildbot/slave/commands.py (SVN): add --non-interactive to all
1461 svn commands, so it will fail immediately instead of hanging while
1462 it waits for a username/password to be typed in.
1464 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
1465 log message if the step was shut down
1467 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
1468 obsolete reference to mktap.
1470 2006-06-20 Brian Warner <warner@lothar.com>
1472 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
1473 test to include new 'logfiles' argument sent from master to slave
1475 2006-06-19 Brian Warner <warner@lothar.com>
1477 * buildbot/process/step_twisted.py (Trial): track Progress from
1478 _trial_temp/test.log too
1480 * buildbot/process/step.py (OutputProgressObserver): generalize
1481 the earlier StdioProgressObserver into an OutputProgressObserver
1482 that can track LogFiles other than stdio.
1483 (LoggingBuildStep.__init__): same
1485 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
1486 _trial_temp/test.log, not a separate 'cat' command. TODO: this
1487 will fail under windows because of os.sep issues. It might have
1488 worked before if 'cat' was doing cygwin path conversion.
1490 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
1491 creation of LogFileWatchers
1492 (ShellCommand._startCommand): and record the files that were
1493 watched in the 'headers' section of the ShellCommand output
1495 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
1496 need to actually pass it to the slave if you want it to work.
1497 (ShellCommand): document it a bit
1499 * buildbot/test/test_shell.py: new test to validate LogFiles
1500 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
1502 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
1503 before printing the last batch of lines, to test that the polling
1504 logic is working properly
1506 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
1507 handling, making it possible to track multiple logs for a single
1508 RemoteCommand. The previous single logfile is now known as the
1510 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
1511 (RemoteShellCommand.__init__): accept logfiles=
1512 (LoggingBuildStep.startCommand): stdio_log is now one of many
1513 (ShellCommand): added logfiles= argument, as well as a class-level
1514 .logfiles attribute, which will be merged together to figure out
1515 which logfiles should be tracked. The latter maybe be useful for
1516 subclasses of ShellCommand which know they will aways produce
1517 secondary logfiles in the same location.
1519 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
1520 and closeStdin() methods, preparing to make it possible to write
1521 to a ShellCommand's stdin at any time, not just at startup. These
1522 writes are buffered if the child process hasn't started yet.
1523 (LogFileWatcher): new helper class to watch arbitrary logfiles
1524 while a ShellCommand runs. This class polls the file every two
1525 seconds, and sends back 10k chunks to the buildmaster.
1526 (ShellCommand): rename stdin= to initialStdin=, and add
1527 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
1529 (ShellCommand.addLogfile): LogFile text is sent in updates with a
1530 key of "log" and a value of (logname, data).
1531 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
1532 'logfiles' to the master-visible args dictionary.
1533 (SourceBase.doPatch): match s/stdin/initialStdin/ change
1536 * buildbot/test/test_vc.py (Patch.testPatch): same
1539 * buildbot/test/emit.py: write to a logfile in the current
1540 directory. We use this to figure out what was used as a basedir
1541 rather than looking to see which copy of emit.py gets run, so that
1542 we can run the commands from inside _trial_temp rather than inside
1544 * buildbot/test/subdir/emit.py: same
1545 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
1546 argument rather than running from buildbot/test/
1547 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
1548 rather than using an implicit setUp()
1549 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
1550 (ShellBase.testShell1, etc): use explicit path to emit.py instead
1551 of assuming that we're running in buildbot/test/ (and that '.' is
1554 * buildbot/slave/commands.py (Command.doStart): refactor Command
1555 startup/completion a bit: now the SlaveBuilder calls doStart(),
1556 which is not meant for overridding by subclasses, and doStart()
1557 calls start(), which is. Likewise the SlaveBuilder calls
1558 doInterrupt(), and subclasses override interrupt(). This also puts
1559 responsibility for maintaining .running in Command rather than in
1561 (Command.doInterrupt): same
1562 (Command.commandComplete): same, this is called when the deferred
1563 returned by start() completes.
1564 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
1565 (SlaveBuilder.remote_interruptCommand): same
1566 (SlaveBuilder.stopCommand): same
1568 2006-06-16 Brian Warner <warner@lothar.com>
1570 * buildbot/test/test_shell.py: new test file to contain everything
1571 relating to ShellCommand
1572 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
1573 multiple logfiles in realtime" feature, not yet implemented
1574 * buildbot/test/emitlogs.py: support file for testLogFiles
1575 * docs/buildbot.texinfo (ShellCommand): document the feature
1577 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
1579 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
1580 for tests which exercise SlaveCommands in isolation.
1582 * buildbot/test/test_slavecommand.py: Move some utilities like
1583 SignalMixin and FakeSlaveBuilder from here ..
1584 * buildbot/test/runutils.py: .. to here, so they can be used by
1585 other test classes too
1586 * buildbot/test/test_vc.py: more SignalMixin refactoring
1587 * buildbot/test/test_control.py: same
1588 * buildbot/test/test_run.py: and some rmtree refactoring
1590 2006-06-15 Brian Warner <warner@lothar.com>
1592 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
1593 'testBranch' to match other VC tests and have the tests run in
1594 roughly increasing order of dependency
1596 * buildbot/test/test_steps.py (LogObserver): new test to verify
1597 LogObservers can be created at various times and still get
1598 connected up properly
1600 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
1601 to create BuildStepStatus instances that actually work.
1603 * buildbot/process/step.py (LogObserver): add outReceived and
1604 errReceived base methods, to be overridden
1606 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
1607 API to take a name instead of a step, reducing the coupling
1608 somewhat. This returns the BuildStepStatus object so it can be
1609 passed to the new Step, instead of jamming it directly into the
1611 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
1613 * buildbot/process/base.py (Build.setupBuild): use both methods
1614 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
1615 process a bit to match
1617 2006-06-14 Brian Warner <warner@lothar.com>
1619 * docs/buildbot.texinfo (Adding LogObservers): add some limited
1620 docs on writing new LogObserver classes
1621 (Writing New Status Plugins): brief docs on how Status Plugins fit
1624 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
1625 implement a LogObserver that counts how many unit tests have been
1627 (Trial.__init__): wire it in
1628 * buildbot/test/test_twisted.py (Counter): unit test for it
1630 * buildbot/process/step_twisted.py (HLint.commandComplete): update
1631 to new cmd.logs['stdio'] scheme
1632 (Trial.commandComplete): same
1633 (BuildDebs.commandComplete): same
1635 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
1636 LogFiles, instead of just a single one. The old single logfile is
1637 now called "stdio". LoggedRemoteCommand no longer creates a
1638 LogFile for you (the code to do that was broken anyway). If you
1639 don't create a "stdio" LogFile, then stdout/stderr will be
1641 (LogObserver): implement "LogObservers", which a BuildStep can add
1642 to parse the output of a command in real-time. The primary use is
1643 to provide more useful information to the Progress code, allowing
1644 better ETA estimates.
1645 (LogLineObserver): utility subclass which feeds complete lines to
1646 the parser instead of bytes.
1647 (BuildStep.progressMetrics): this is safer as a tuple
1648 (BuildStep.setProgress): utility method, meant to be called by
1650 (BuildStep.addLogObserver): new method, to be called at any time
1651 during the BuildStep (even before any LogFiles have been created),
1652 to attach (or schedule for eventual attachment) a LogObserver to a
1654 (StdioProgressObserver): new LogObserver which replaces the old
1655 "output" progress gatherer
1656 (LoggingBuildStep.__init__): same
1657 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
1658 (LoggingBuildStep._commandComplete): must use logs['stdio']
1659 instead of the old single ".log" attribute.
1660 * buildbot/status/builder.py (LogFile): remove old logProgressTo
1661 functionality, now subsumed into StdioProgressObserver
1662 * buildbot/test/test_status.py (Subscription._testSlave_2): the
1663 log name changed from "output" to "stdio".
1666 * buildbot/interfaces.py (ILogFile): add the Interface used from
1667 the BuildStep towards the LogFile
1668 (ILogObserver): and the one provided by a LogObserver
1669 * buildbot/status/builder.py (LogFile): implement it
1671 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
1672 HEADER constants here ..
1673 * buildbot/status/builder.py (STDOUT): .. from here
1675 2006-06-13 Brian Warner <warner@lothar.com>
1677 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
1678 compatibility with python2.2, which doesn't have the 'substr in
1680 (TestP4Poller.makeTime): utility function to construct the
1681 timestamp using the same strptime() approach as p4poller does. It
1682 turns out that time.mktime() behaves slightly differently under
1683 python2.2, probably something to do with the DST flag, and that
1684 causes the test to fail under python2.2. (changing the mktime()
1685 arguments to have dst=0 instead of -1 caused it to fail under
1686 python2.3. Go figure.)
1687 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
1689 2006-06-12 Brian Warner <warner@lothar.com>
1691 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
1692 proper Perforce (P4) support. Many many thanks to Scott Lamb for
1693 contributing such an excellent patch, including docs and unit
1694 tests! This makes it *so* much easier to apply. I had to update
1695 test_vc.py to handle some recent refactorings, but everything else
1696 applied smoothly. The only remaining thing I'd like to fix would
1697 be to remove the hard-wired port 1666 used by p4d, and allow it to
1698 claim any unused port. This would allow two copies of the test
1699 suite to run on the same host at the same time, as well as
1700 allowing the test suite to run while a real (production) p4d was
1701 running on the same host. Oh, and maybe we should add a warning to
1702 step.P4 that gets emitted if the slave is too old to provide the
1703 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
1704 * buildbot/slave/commands.py (P4): same
1705 (P4Sync): same, some minor updates
1706 * buildbot/changes/p4poller.py: same
1707 * docs/buildbot.texinfo: same
1708 * buildbot/test/test_p4poller.py: same
1709 * buildbot/test/test_vc.py (P4): same
1711 * setup.py: add Trove classifiers for PyPI
1713 2006-06-08 Brian Warner <warner@allmydata.com>
1715 * buildbot/status/client.py
1716 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
1717 changing this from getCurrentBuild() to getCurrentBuilds(). Each
1718 build needs to be IRemote'd separately, rather than IRemote'ing
1719 the whole list at once. I can't wait until newpb's serialization
1720 adapters make this unnecessary.
1722 2006-06-06 Brian Warner <warner@lothar.com>
1724 * buildbot/process/step.py (WithProperties): make this inherit
1725 from ComparableMixin, so that reloading an unchanged config file
1726 doesn't cause us to spuriously reload any Builders which use them.
1727 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
1730 2006-06-03 Brian Warner <warner@lothar.com>
1732 * contrib/windows/{setup.py, buildbot_service.py}: add support for
1733 running py2exe on windows, contributed by Mark Hammond. Addresses
1734 SF#1401121, but I think we still need to include
1735 buildbot/scripts/sample.cfg
1736 * setup.py: include buildbot_service.py as a script under windows
1737 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
1738 a py2exe application), get the icon/css datafiles from a different
1741 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
1742 double-escape the build URL. Thanks to Olivier Bonnet for the
1743 patch. Fixes SF#1452801.
1745 2006-06-02 Brian Warner <warner@lothar.com>
1747 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
1748 first six columns of 'svnlook' output, not just the first column,
1749 since property changes appear in the other five. Thanks to Olivier
1750 Bonnet for the patch. Fixes SF#1398174.
1752 2006-06-01 Brian Warner <warner@lothar.com>
1754 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
1755 the fake build, so that title= has something to be set to
1757 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
1758 attribute of the "Build #NN" link in the yellow start-the-build
1759 box to the build's reason. This means that you get a little
1760 tooltip explaining why the build was done when you hover over the
1761 yellow box. Thanks to Zandr Milewski for the suggestion.
1763 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
1764 (Box.setETA): handle ETA=None (by stopping the timer)
1765 (Box.update): make the [soon] text less different than the usual
1766 text, so the rest of the text doesn't flop around so much. It
1767 would be awfully nice to figure out how to center this stuff.
1768 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
1770 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
1771 by default, so that any ShellCommand which fails marks the overall
1772 build as a failure. I should have done this from the beginning.
1773 Add flunkOnFailure=False to the arguments if you want to turn off
1776 2006-05-30 Brian Warner <warner@lothar.com>
1778 * buildbot/clients/gtkPanes.py: add a third row: now it shows
1779 last-build/current-build/current-step. Show what step is currently
1780 running. Show ETA for both the overall build and the current step.
1781 Update GTK calls to modern non-deprecated forms. There's still a
1782 lot of dead code and debug noise to remove.
1784 * buildbot/process/step_twisted.py (Trial): set the step name, so it
1785 shows up properly in status displays
1787 2006-05-28 Brian Warner <warner@lothar.com>
1789 * buildbot/test/test_properties.py (Run.testInterpolate): on the
1790 build we use to verify that WithProperties works:
1792 ** set flunkOnFailure=True so that build failures get noticed
1793 ** set workdir='.' so that the build succeeds, otherwise it is trying
1794 to touch 'build/something', and 'build/' doesn't exist because
1795 usually that's created by a Source step
1796 ** set timeout=10, because Twisted-1.3.0 has a race condition that
1797 this test somehow triggers, in which the 'touch' process becomes
1798 a zombie and we wait for th etimeout before giving up on it.
1800 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
1801 to log the Build results and step logs to the twisted log.
1802 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
1803 what went wrong if a build was expected to succeed but didn't.
1805 * buildbot/process/step_twisted.py (Trial): set the default
1806 trialMode to '--reporter=bwverbose', which specifies verbose
1807 black-and-white text. Back in twisted-1.3/2.0 days we had to use
1808 '-to', but those are completely missing in modern Twisteds.
1810 * buildbot/scripts/sample.cfg: make the sample Manhole config use
1811 a localhost-only port, to encourage better security
1813 * docs/buildbot.texinfo (Change Sources): mention
1816 * .darcs-boring: add a Darcs boringfile
1818 * README (REQUIREMENTS): stop claiming compatibility with
1821 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
1824 2006-05-27 Brian Warner <warner@lothar.com>
1826 * buildbot/__init__.py: bump to 0.7.3+ while between releases
1827 * docs/buildbot.texinfo: same
1829 2006-05-23 Brian Warner <warner@lothar.com>
1831 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
1832 * docs/buildbot.texinfo: set version to match
1833 * NEWS: update for 0.7.3
1835 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
1836 give a quick mapping from VC system to possible ChangeSources
1837 (Build Properties): add 'buildername'
1839 * buildbot/process/base.py (Build.setupStatus): oops, set
1840 'buildername' and 'buildnumber' properties
1841 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
1844 2006-05-22 Brian Warner <warner@lothar.com>
1846 * docs/buildbot.texinfo (Build Properties): explain the syntax of
1847 property interpolation better
1849 * README (INSTALLATION): remove old '-v' argument from recommended
1852 * docs/buildbot.texinfo (ShellCommand): add docs for description=
1853 and descriptionDone= arguments. Thanks to Niklaus Giger for the
1856 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
1857 'svnversion' instead of grepping the output of 'svn info', much
1858 simpler and avoids CR/LF problems on windows. Thanks to Olivier
1859 Bonnet for the suggestion.
1860 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
1861 require the WC_PATH argument, so run 'svnversion .' instead.
1863 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
1864 aren't supposed to have 'self' in their argument list
1866 2006-05-21 Brian Warner <warner@lothar.com>
1868 * buildbot/process/step.py (ShellCommand.start): make
1869 testInterpolate pass. I was passing the uninterpolated command to
1870 the RemoteShellCommand constructor
1871 (ShellCommand._interpolateProperties): oops, handle non-list
1872 commands (i.e. strings with multiple words separated by spaces in
1873 them) properly, instead of forgetting about them.
1875 * buildbot/test/test_properties.py (Run.testInterpolate): new test
1876 to actually try to use build properties in a real build. This test
1878 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
1879 to start and evaluate builds
1881 * buildbot/test/test__versions.py: add a pseudo-test to record
1882 what version of Twisted/Python/Buildbot are running. This should
1883 show up at the beginning of _trial_tmp/test.log, and exists to help
1884 debug other problems.
1886 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
1887 a filename to be served as 'robots.txt' to discourage web spiders.
1888 Adapted from a patch by Tobi Vollebregt, thanks!
1889 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
1890 (Waterfall.test_waterfall): tweak the way that filenames are put
1891 into the config file, to accomodate windows pathnames better.
1893 * docs/buildbot.texinfo (HTML Waterfall): document it
1895 * buildbot/process/process_twisted.py
1896 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
1897 changed the build process. The new setup.py no longer takes the
1899 (FullTwistedBuildFactory.__init__): same
1900 (TwistedReactorsBuildFactory.__init__): same
1902 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
1903 be placed in the [hooks] section of the central repository (the
1904 one that everybody pushes changes to).
1906 2006-05-20 Brian Warner <warner@lothar.com>
1908 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
1909 .darcs-context file, use binary mode. I think this was causing a
1910 Darcs failure under windows.
1912 2006-05-19 Brian Warner <warner@lothar.com>
1914 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
1915 use a timezone string of +0000 and gmtime, since this timestamp is
1916 sent to a buildmaster and %z is broken.
1918 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
1919 string and localtime, since this timestamp will only be consumed
1920 locally, and %z is broken.
1922 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
1923 gmtime, since this timestamp is returned to the buildmaster, and
1926 2006-05-18 Brian Warner <warner@lothar.com>
1928 * NEWS: update in preparation for next release
1930 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
1931 setup-repository and do-we-have-the-vc-tools code into a separate
1932 "helper" class, which sticks around in a single module-level
1933 object. This seems more likely to continue to work in the future
1934 than having it hide in the TestCase and hope that TestCases stick
1935 around for a long time.
1937 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
1938 addremove' has been deprecated in recent versions of mercurial, so
1939 use 'hg add' instead
1941 2006-05-07 Brian Warner <warner@lothar.com>
1943 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
1944 operating under windows, move the file before opening it, since
1945 you can't rename a file that somebody has open.
1947 * buildbot/process/base.py (Build.setupBuild): if something goes
1948 wrong while creating a Step, log the name and arguments, since the
1949 error message when you get the number of arguments wrong is really
1952 2006-05-06 Brian Warner <warner@lothar.com>
1954 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
1955 bugs in twisted-specific code not covered by my unit tests, this
1956 time use 'cmd' argument instead of self.cmd
1958 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
1959 fix stupid braino: either use startwith or find()==0, not both.
1960 (TwistedReactorsBuildFactory.__init__): another dumb typo
1962 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
1963 mark this test as TODO under windows, since process-killing seems
1964 dodgy there. We'll come back to this later and try to fix it
1967 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
1968 and don't include a timezone
1969 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
1970 This should avoid the windows-with-verbose-timezone-name problem
1972 (Patch.testPatch): add a test which runs 'patch' with less
1973 overhead than the full VCBase.do_patch sequence, to try to isolate
1974 a windows test failure. This one uses slave.commands.ShellCommand
1975 and 'patch', but none of the VC code.
1977 * buildbot/slave/commands.py (getCommand): use which() to find the
1978 executables for 'cvs', 'svn', etc. This ought to help under
1981 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
1982 working directory before starting. If an earlier test failed, the
1983 leftover directory would mistakenly flunk a later test.
1984 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
1985 Make sure that we use the right commandlines if which("tla") picks
1986 up "tla.exe" (as it does under windows).
1987 (TlaSupport.do_get): factor out this tla-vs-baz difference
1988 (TlaSupport.vc_create): more tla-vs-baz differences
1990 * buildbot/test/test_slavecommand.py
1991 (ShellBase.testShellMissingCommand): stop trying to assert
1992 anything about the error message: different shells on different
1993 OSes with different languages makes it hard, and it really isn't
1994 that interesting of a thing to test anyway.
1996 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
1997 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
1998 "Panther"), because it has a bug which flunks a couple tests in
1999 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
2000 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
2001 able to test that yet.
2003 2006-04-30 Brian Warner <warner@lothar.com>
2005 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
2006 make sure child commands emit messages in english, so our regexps
2007 will match. Thanks to Nikaus Giger for identifying the problems.
2008 (VCBase._do_vctest_export_1): mode="export" is not responsible
2009 for setting the "got_revision" property, since in many cases it is
2010 not convenient to determine.
2011 (SVNSupport.capable): when running 'svn --version' to check for
2012 ra_local, we want error messages in english
2013 * buildbot/test/test_slavecommand.py
2014 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
2015 to emit the error message in english
2017 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
2018 the environment with $LC_ALL="C" so that Commands which need to
2019 parse the output of their child processes can obtain it in
2021 (SVN.parseGotRevision): call "svn info" afterwards instead of
2022 watching the output of the "svn update" or "svn checkout".
2023 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
2024 (Arch.parseGotRevision): same
2025 (Bazaar.parseGotRevision): same
2026 (Mercurial.parseGotRevision): same
2028 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
2029 $LC_ALL="C" when running commands under 'buildbot try', too
2031 * buildbot/test/__init__.py: remove the global os.environ()
2032 setting, instead we do it just for the tests that run commands and
2033 need to parse their output.
2035 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
2036 remove the overly-short .timeout on this test, because non-DNotify
2037 platforms must fall back to polling which happens at 10 second
2038 intervals, so a 5 second timeout would never succeed.
2040 2006-04-24 Brian Warner <warner@lothar.com>
2042 * docs/buildbot.texinfo (Installing the code): update trial
2043 invocation, SF#1469116 by Niklaus Giger.
2044 (Attributes of Changes): updated branch-name examples to be
2045 a bit more realistic, SF#1475240 by Stephen Davis.
2047 * contrib/windows/buildbot2.bat: utility wrapper for windows
2048 developers, contributed by Nick Trout (after a year of neglect..
2049 sorry!). SF#1194231.
2051 * buildbot/test/test_vc.py (*.capable): store the actual VC
2052 binary's pathname in VCS[vcname], so it can be retrieved later
2053 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
2054 strip out non-numeric timezone information, specifically the funky
2055 German string that his system produced that confuses CVS.
2056 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
2057 allow Darcs tests to work on windows
2058 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
2059 procutils.which() everywhere, to allow tryclient to work under
2060 windows. Also from Niklaus Giger, SF#1463394.
2062 * buildbot/twcompat.py (which): move the replacement for a missing
2063 twisted.python.procutils.which from test_vc.py to here, so it can
2064 be used in other places too (specifically tryclient.py)
2066 2006-04-23 Brian Warner <warner@lothar.com>
2068 * buildbot/status/html.py (StatusResourceBuild.body): replace the
2069 bare buildbotURL/projectName line with a proper DIV, along with a
2070 CSS class of "title", from Stefan Seefeld (SF#1461675).
2071 (WaterfallStatusResource.body0): remove the redundant 'table'
2072 class from the table
2073 (WaterfallStatusResource.body): same. Also add class="LastBuild"
2074 to the top-row TR, and class="Activity" to the second-row TR,
2075 rather than putting them in the individual TD nodes.
2077 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
2078 'got_revision' build property for all VC systems that implement
2079 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
2081 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
2082 to determine which revision we actually obtained
2083 (CVS.parseGotRevision): implement this for CVS, which just means
2084 to grab a timestamp. Not ideal, and it depends upon the buildslave
2085 having a clock that is reasonably well syncronized with the server,
2086 but it's better than nothing.
2087 (SVN.parseGotRevision): implement it for SVN, which is accurate
2088 (Darcs.parseGotRevision): same
2089 (Arch.parseGotRevision): same
2090 (Bazaar.parseGotRevision): same
2091 (Mercurial.parseGotRevision): same
2093 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
2094 keep a record of all non-stdout/stderr/header/rc status updates,
2095 for the benefit of RemoteCommands that send other useful things,
2097 (Source.commandComplete): put any 'got_revision' status values
2098 into a build property of the same name
2101 * buildbot/process/step_twisted.py (Trial): update to deal with
2102 new ShellCommand refactoring
2104 * docs/buildbot.texinfo (Build Properties): document new feature
2105 that allows BuildSteps to get/set Build-wide properties like which
2106 revision was requested and/or checked out.
2108 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
2109 * buildbot/status/builder.py (BuildStatus.getProperty): implement
2110 it. Note that this bumps the persistenceVersion of the saved Build
2111 object, so add the necessary upgrade-old-version logic to include
2112 an empty properties dict.
2114 * buildbot/process/base.py (Build.setProperty): implement it
2115 (Build.getProperty): same
2116 (Build.startBuild): change build startup to set 'branch',
2117 'revision', and 'slavename' properties at the right time
2119 * buildbot/process/step.py (BuildStep.__init__): change setup to
2120 require 'build' argument in a better way
2121 (LoggingBuildStep): split ShellCommand into two pieces, for better
2122 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
2123 a single RemoteCommand that sends stdout/stderr status text. It
2124 also provides the usual commandComplete / createSummary /
2125 evaluateCommand / getText methods to be overridden...
2126 (ShellCommand): .. whereas ShellCommand is specifically for
2127 running RemoteShellCommands. Other shell-like BuildSteps (like
2128 Source) can inherit from LoggingBuildStep instead of ShellCommand
2129 (WithProperties): marker class to do build-property interpolation
2130 (Source): inherit from LoggingBuildStep instead of ShellCommand
2133 * buildbot/test/test_properties.py: test new functionality
2135 2006-04-21 Brian Warner <warner@lothar.com>
2137 * buildbot/test/test_vc.py: rename testBranch to
2138 testCheckoutBranch to keep the tests in about the right
2141 2006-04-18 Brian Warner <warner@lothar.com>
2143 * docs/buildbot.texinfo (PBListener): improve cross-references
2144 between PBListener and 'buildbot statusgui', thanks to John Pye
2147 2006-04-17 Brian Warner <warner@lothar.com>
2149 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
2150 running under Twisted-1.3.0, otherwise skipped tests are reported
2153 * all: use isinstance() instead of 'type(x) is foo', suggested by
2156 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2157 oops, fix a brain-fade from the other week, when making the
2158 addStep changes. I changed all the __init__ upcalls to use the
2159 wrong superclass name.
2160 (FullTwistedBuildFactory.__init__): same
2161 (TwistedDebsBuildFactory.__init__): same
2162 (TwistedReactorsBuildFactory.__init__): same
2163 (TwistedBuild.isFileImportant): use .startswith for clarity,
2164 thanks to Neal Norwitz for the suggestions.
2166 * contrib/viewcvspoll.py: script to poll a viewcvs database for
2167 changes, then deliver them over PB to a remote buildmaster.
2169 * contrib/svnpoller.py: added script by John Pye to poll a remote
2170 SVN repository (by running 'svn log') from a cronjob, and run
2171 'buildbot sendchange' to deliver the changes to a remote
2173 * contrib/svn_watcher.py: added script by Niklaus Giger (a
2174 modification of svnpoller.py), same purpose, but this one loops
2175 internally (rather than expecting to run from a cronjob) and works
2177 * contrib/README.txt: same
2179 2006-04-11 Brian Warner <warner@lothar.com>
2181 * all: fix a number of incorrect names and missing imports, thanks
2182 to Anthony Baxter for the patch.
2183 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
2184 remove unused buggy method.
2185 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
2186 comes from shutil, not "shutils"
2187 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
2188 (Arch.checkSlaveVersion): same
2189 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
2191 * buildbot/process/step_twisted2.py: add some missing imports
2192 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
2193 this code used to live in twisted.internet.defer
2195 2006-04-10 Brian Warner <warner@lothar.com>
2197 * buildbot/process/step.py (Mercurial): add Mercurial support
2198 * buildbot/slave/commands.py (Mercurial): same
2199 * buildbot/scripts/tryclient.py (MercurialExtractor): same
2200 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
2201 not yet tested, but 'try' support *is* covered
2202 * docs/buildbot.texinfo (Mercurial): document it
2204 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
2205 some debugging messages (turned off)
2206 * buildbot/test/test_vc.py: improve debug messages
2208 2006-04-07 Brian Warner <warner@lothar.com>
2210 * buildbot/test/test_vc.py (which): define our own which() in case
2211 we can't import twisted.python.procutils, because procutils doesn't
2212 exist in Twisted-1.3
2214 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
2215 of SlaveLocks for performance tests
2217 * docs/examples/twisted_master.cfg: update to match current usage
2219 * buildbot/changes/p4poller.py (P4Source): add new arguments:
2220 password, p4 binary, pollinterval, maximum history to check.
2221 Patch from an anonymous sf.net contributor, SF#1219384.
2222 * buildbot/process/step.py (P4Sync.__init__): add username,
2223 password, and client arguments.
2224 * buildbot/slave/commands.py (P4Sync): same
2226 2006-04-05 Brian Warner <warner@lothar.com>
2228 * buildbot/process/factory.py (BuildFactory.addStep): new method
2229 to add steps to a BuildFactory. Use it instead of f.steps.append,
2230 and you can probably avoid using the s() convenience function.
2231 Patch from Neal Norwitz, sf.net #1412605.
2232 (other): update all factories to use addStep
2233 * buildbot/process/process_twisted.py: update all factories to use
2236 2006-04-03 Brian Warner <warner@lothar.com>
2238 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
2239 work under windows too. Adapted from a patch by Niklaus Giger,
2240 addresses SF#1463399.
2242 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
2243 spawned commands emit parseable results in english and not some
2244 other language. Patch from Niklaus Giger, SF#1463395.
2246 * README (INSTALLATION): discourage users from running unit tests on
2247 a "network drive", patch from Niklaus Giger, SF#1463394.
2249 2006-03-22 Brian Warner <warner@lothar.com>
2251 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
2252 function to turn a repository-relative pathname into a (branch,
2253 branch-relative-filename) tuple. Change this function to handle
2254 the branch naming policy used by your Subversion repository.
2255 Thanks to AllMyData.com for sponsoring this work.
2257 2006-03-16 Brian Warner <warner@lothar.com>
2259 * buildbot/scripts/sample.cfg: add python-mode declaration for
2260 vim. Thanks to John Pye for the patch.
2262 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
2263 command line, mention the importance of running 'crontab' as the
2264 buildmaster/buildslave user. Thanks to John Pye for the catch.
2266 2006-03-13 Brian Warner <warner@lothar.com>
2268 * buildbot/status/words.py (IRC): add an optional password=
2269 argument, which will be sent to Nickserv in an IDENTIFY message at
2270 login, to claim the nickname. freenode requires this before the
2271 bot can sent (or reply to) private messages. Thanks to Clement
2272 Stenac for the patch.
2273 * docs/buildbot.texinfo (IRC Bot): document it
2275 * buildbot/status/builder.py (LogFile.merge): don't write chunks
2276 larger than chunkSize. Fixes SF#1349253.
2277 * buildbot/test/test_status.py (Log.testLargeSummary): test it
2278 (Log.testConsumer): update to match new internal chunking behavior
2280 2006-03-12 Brian Warner <warner@lothar.com>
2282 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
2284 * buildbot/test/test_maildir.py (MaildirTest): rename the
2285 'timeout' method, as it collides with trial's internals
2287 * buildbot/scripts/runner.py: add 'buildbot restart' command
2288 (stop): don't sys.exit() out of here, otherwise restart can't work
2289 * docs/buildbot.texinfo (Shutdown): document it
2291 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
2292 * buildbot/status/html.py (Waterfall.__init__): same
2293 * buildbot/process/builder.py (Builder.startBuild): same
2294 * buildbot/process/base.py (BuildRequest): same
2295 * buildbot/sourcestamp.py (SourceStamp): same
2296 * buildbot/scheduler.py (Nightly): same
2298 * buildbot/__init__.py (version): bump to 0.7.2+ while between
2300 * docs/buildbot.texinfo: same
2302 2006-02-17 Brian Warner <warner@lothar.com>
2304 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
2305 * docs/buildbot.texinfo: set version number to match
2306 * NEWS: update for 0.7.2
2308 2006-02-16 Brian Warner <warner@lothar.com>
2310 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
2312 2006-02-09 Brian Warner <warner@lothar.com>
2314 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
2315 add text to explain per-build branch parameters
2316 * NEWS: mention --umask
2318 2006-02-08 Brian Warner <warner@lothar.com>
2320 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
2322 (SlaveOptions.optParameters): add --umask, to make it possible to
2323 make buildslave-generated files (including build products) be
2326 * buildbot/slave/bot.py (BuildSlave.startService): same
2328 2006-01-23 Brian Warner <warner@lothar.com>
2330 * buildbot/status/builder.py: urllib.quote() all URLs that include
2331 Builder names, so that builders can include characters like '/'
2332 and ' ' without completely breaking the resulting HTML. Thanks to
2333 Kevin Turner for the patch.
2334 * buildbot/status/html.py: same
2335 * buildbot/test/test_web.py (GetURL.testBuild): match changes
2337 * NEWS: update in preparation for upcoming release
2339 2006-01-18 Brian Warner <warner@lothar.com>
2341 * docs/examples/twisted_master.cfg: update to match the Twisted
2342 buildbot: remove python2.2, switch to exarkun's buildslaves,
2343 disable the .deb builder until we figure out how to build twisted
2344 .debs from SVN, add some ktrace debugging to the OS-X build
2345 process and remove the qt build, remove threadless builders,
2346 change freebsd builder to use landonf's buildslave.
2348 2006-01-12 Brian Warner <warner@lothar.com>
2350 * buildbot/master.py (Manhole.__init__): let port= be a strports
2351 specification string, but handle a regular int for backwards
2352 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
2353 used in master.cfg to limit connections to just the local host.
2354 (BuildMaster.loadConfig): same for c['slavePortnum']
2355 * buildbot/scheduler.py (Try_Userpass.__init__): same
2356 * buildbot/status/client.py (PBListener.__init__): same
2357 * buildbot/status/html.py (Waterfall.__init__): same, for both
2358 http_port and distrib_port. Include backwards-compatibility checks
2359 so distrib_port can be a filename string and still mean unix:/foo
2360 * docs/buildbot.texinfo (Setting the slaveport): document it
2361 (Debug options): same
2362 (HTML Waterfall): same
2365 * buildbot/test/test_config.py (ConfigTest): test it
2367 * buildbot/master.py (BuildMaster.loadConfig): wait for the
2368 slaveport's disownServiceParent deferred to fire before opening
2369 the new one. Fixes an annoying bug in the unit tests.
2371 2006-01-03 Brian Warner <warner@lothar.com>
2373 * buildbot/master.py (BuildMaster): remove the .schedulers
2374 attribute, replacing it with an allSchedulers() method that looks
2375 for all IService children that implement IScheduler. Having only
2376 one parent/child relationship means fewer opportunities for bugs.
2377 (BuildMaster.allSchedulers): new method
2378 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
2379 also fix ugly bug that caused any config-file reload to
2380 half-forget about the earlier Schedulers, causing an exception
2381 when a Change arrived and was handed to a half-connected
2382 Scheduler. The exception was in scheduler.py line 54ish:
2383 self.parent.submitBuildSet(bs)
2384 exceptions.AttributeError: 'NoneType' object has no attribute
2386 (BuildMaster.addChange): update to use allSchedulers()
2388 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
2389 to work properly with twisted-1.3.0, where you must explicitly
2390 include the __implements__ from parent classes
2391 (BaseScheduler.__repr__): make it easier to distinguish distinct
2393 (BaseUpstreamScheduler.__implements__): same
2395 * buildbot/status/builder.py (Status.getSchedulers): update to
2397 * buildbot/test/test_run.py (Run.testMaster): same
2398 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
2399 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
2400 make sure Scheduler instances are left alone when an identical
2401 config file is reloaded
2402 (ConfigElements.testSchedulers): make sure Schedulers are properly
2405 * Makefile (TRIALARGS): my local default Twisted version is now
2406 2.1.0, update the trial arguments accordingly
2408 2005-12-22 Brian Warner <warner@lothar.com>
2410 * docs/examples/twisted_master.cfg: merge changes from pyr: add
2413 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
2414 addChange in the parent class, although I suspect this should be
2415 fixed better in the future.
2417 2005-11-26 Brian Warner <warner@lothar.com>
2419 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
2420 explode when branch==None, thanks to Kevin Turner for the catch
2421 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
2424 * buildbot/__init__.py (version): bump to 0.7.1+ while between
2426 * docs/buildbot.texinfo: same
2428 2005-11-26 Brian Warner <warner@lothar.com>
2430 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
2431 * docs/buildbot.texinfo: set version number to match
2433 2005-11-26 Brian Warner <warner@lothar.com>
2435 * NEWS: update for 0.7.1
2437 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
2438 sure that unsubscribe works even if we never sent an ETA update.
2439 Also, don't explode on duplicate unsubscribe.
2440 (BuildStepStatus.addLog): make the convenience "return self"-added
2441 watcher automatically unsubscribe when the Step finishes.
2442 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
2443 (BuildStatus.stepStarted): same auto-unsubscribe
2444 (BuilderStatus.buildStarted): same auto-unsubscribe
2446 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
2448 (IStatusReceiver.stepStarted): same
2449 (IStatusReceiver.logStarted): same
2451 * buildbot/test/test_run.py (Status): move the Status test..
2452 * buildbot/test/test_status.py (Subscription): .. to here
2454 2005-11-25 Brian Warner <warner@lothar.com>
2456 * NEWS: more updates
2458 * buildbot/locks.py: fix the problem in which loading a master.cfg
2459 file that changes some Builders (but not all of them) can result
2460 in having multiple copies of the same Lock. Now, the real Locks
2461 are kept in a table inside the BotMaster, and the Builders/Steps
2462 use "LockIDs", which are still instances of MasterLock and
2463 SlaveLock. The real Locks are instances of the new RealMasterLock
2464 and RealSlaveLock classes.
2465 * buildbot/master.py (BotMaster.getLockByID): new method to
2466 convert LockIDs into real Locks.
2467 * buildbot/process/base.py (Build.startBuild): convert LockIDs
2468 into real Locks before building
2469 * buildbot/process/step.py (BuildStep.startStep): same
2470 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
2471 exercises the problem
2474 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
2475 what Schedulers are available
2477 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
2478 work by Dobes Vandermeer and hacked mercilessly by me. This offers
2479 'cron'-style build scheduling at certain times of day, week,
2481 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
2483 * buildbot/scheduler.py (Scheduler): change fileIsImportant
2484 handling: treat self.fileIsImportant more as an attribute that
2485 contains a callable than as a method. If the attribute is None,
2486 don't call it and assume all filenames are important. It is still
2487 possible to provide a fileIsImportant method in a subclass,
2489 (AnyBranchScheduler): handle fileIsImportant=None, previously it
2491 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
2492 test using AnyBranchScheduler with fileIsImportant=None
2494 2005-11-24 Brian Warner <warner@lothar.com>
2496 * buildbot/test/test_config.py (StartService): don't claim a fixed
2497 port number, instead set slavePort=0 on the first pass, figure out
2498 what port was allocated, then switch to a config file that uses
2501 * buildbot/master.py (BuildMaster.loadConfig): close the old
2502 slaveport before opening the new one, because unit tests might
2503 replace slavePort=0 with the same allocated portnumber, and if we
2504 don't wait for the old port to close first, we get a "port already
2505 in use" error. There is a tiny race condition here, but the only
2506 threat is from other programs that bind (statically) to the same
2507 port number we happened to be allocated, and only if those
2508 programs use SO_REUSEADDR, and only if they get control in between
2511 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
2513 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
2514 deleted ChangeSources before adding any new ones
2515 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
2516 compare_attrs, to make sure that a config-file reload does not
2517 unnecessarily replace an unmodified ChangeSource instance
2518 * buildbot/test/test_config.py (ConfigTest.testSources): update
2520 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
2521 mean "don't build anything", and add a warning if it gets used
2522 because it isn't actually useful.
2524 * contrib/svn_buildbot.py: update example usage to match the port
2525 number that gets used by the PBChangeSource
2526 * buildbot/scripts/sample.cfg: add example of PBChangeSource
2528 2005-11-22 Brian Warner <warner@lothar.com>
2530 * NEWS: start collecting items for next release
2532 * buildbot/process/step.py (SVN.computeSourceRevision): assume
2533 revisions are strings
2534 (P4Sync.computeSourceRevision): same
2536 * buildbot/status/html.py (StatusResourceBuild.body): add a link
2537 to the Buildbot's overall status page
2538 (StatusResourceBuilder.body): same
2540 2005-11-15 Brian Warner <warner@lothar.com>
2542 * buildbot/master.py (BuildMaster.loadConfig): serialize the
2543 config-file loading, specifically to make sure old StatusTargets
2544 are finished shutting down before new ones start up (thus
2545 resolving a bug in which changing the Waterfall object would fail
2546 because both new and old instances were claiming the same
2547 listening port). Also load new Schedulers after all the new
2548 Builders are set up, in case they fire off a new build right away.
2549 * buildbot/test/test_config.py (StartService): test it
2551 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
2552 the branch name to the mail body
2554 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
2555 Without it, a config-file reload fails to update an existing
2557 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
2558 username/passwd to compare_attrs, for the same reason
2559 * buildbot/status/html.py (Waterfall): add favicon to
2560 compare_attrs, same reason
2562 2005-11-05 Brian Warner <warner@lothar.com>
2564 * buildbot/scripts/tryclient.py (createJobfile): stringify the
2565 baserev before stuffing it in the jobfile. This resolves problems
2566 under SVN (and probably Arch) where revisions are expressed as
2567 numbers. I'm inclined to use string-based revisions everywhere in
2568 the future, but this fix should be safe for now. Thanks to Steven
2569 Walter for the patch.
2571 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
2572 binary mode when opening pickle files, to make windows work
2573 better. Thanks to Dobes Vandermeer for the catch.
2574 * buildbot/status/builder.py (BuildStatus.saveYourself): same
2575 (BuilderStatus.getBuildByNumber): same
2576 (Status.builderAdded): same
2577 * buildbot/master.py (BuildMaster.loadChanges): same
2579 * buildbot/util.py (Swappable): delete unused leftover code
2581 * buildbot/process/step.py (SVN): when building on a non-default
2582 branch, add the word "[branch]" to the VC step's description, so
2583 it is obvious that we're not building the usual stuff. Likewise,
2584 when we are building a specific revision, add the text "rNNN" to
2585 indicate what that revision number is. Thanks to Brad Hards and
2586 Nathaniel Smith for the suggestion.
2587 (Darcs.startVC): same
2588 (Arch.startVC): same
2589 (Bazaar.startVC): same
2591 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
2592 typo, caught by Mark Dillavou, closes SF#1216636.
2594 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
2595 about a test to add some day
2597 * docs/examples/twisted_master.cfg: update: bot1 can now handle
2598 the 'full-2.3' build, and the 'reactors' build is now run under
2599 python-2.4 because the buildslave no longer has gtk/etc bindings
2600 for earlier versions.
2602 2005-11-03 Brian Warner <warner@lothar.com>
2604 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
2605 method, takes an IBuildStatus and rebuilds it. It might make more
2606 sense to add this to IBuildControl instead, but that instance goes
2607 away completely once the build has finished, and resubmitting
2608 builds can take place weeks later.
2609 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
2610 * buildbot/status/html.py (StatusResourceBuild): also stash an
2611 IBuilderControl so we can use resubmitBuild.
2612 (StatusResourceBuild.body): render "resubmit" button if we can.
2613 Also add hrefs for each BuildStep
2614 (StatusResourceBuild.rebuild): add action for "resubmit" button
2615 (StatusResourceBuilder.getChild): give it an IBuilderControl
2617 * buildbot/status/builder.py (Status.getURLForThing): change the
2618 URL for BuildSteps to have a "step-" prefix, so the magic URLs
2619 that live as targets of buttons like "stop" and "rebuild" can't
2621 * buildbot/status/builder.py (Status.getURLForThing): same
2622 * buildbot/status/html.py (StatusResourceBuild.getChild): same
2623 (StepBox.getBox): same
2624 * buildbot/test/test_web.py (GetURL): same
2627 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
2628 exclusivity checks after Source.__init__ upcall, so misspelled
2629 arguments will be reported more usefully
2630 (Darcs.__init__): same
2632 2005-10-29 Brian Warner <warner@lothar.com>
2634 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
2635 builder. Move the Try scheduler off to a separate port.
2637 2005-10-27 Brian Warner <warner@lothar.com>
2639 * buildbot/clients/gtkPanes.py
2640 (TwoRowClient.remote_builderRemoved): disappearing Builders used
2641 to cause the app to crash, now they don't.
2643 * buildbot/clients/debug.py: display the buildmaster's location
2644 in the window's title bar
2646 2005-10-26 Brian Warner <warner@lothar.com>
2648 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
2649 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
2650 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
2652 * buildbot/status/html.py (td): put a single non-breaking space
2653 inside otherwise empty <td> elements, as a workaround for buggy
2654 browsers which would optimize them away (along with any associated
2655 styles, like the kind that create the waterfall grid borders).
2656 Patch from Frerich Raabe.
2658 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
2659 argv-list as an argument, defaulting to ["-to"], which is
2660 appropriate for the Trial that comes with Twisted-2.1.0 and
2661 earlier. The Trial in current Twisted SVN wants
2662 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
2663 defaults to an empty list.
2664 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
2665 match it, now that trialMode= is a list instead of a single string
2667 * buildbot/__init__.py (version): bump to 0.7.0+ while between
2669 * docs/buildbot.texinfo: same
2671 2005-10-24 Brian Warner <warner@lothar.com>
2673 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
2674 * docs/buildbot.texinfo: set version number to match
2676 2005-10-24 Brian Warner <warner@lothar.com>
2678 * README: update for 0.7.0
2680 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
2682 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
2683 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
2684 send the branch= argument unless the user really provided one, to
2685 retain compatibility with older buildmasters that don't accept
2687 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
2690 * docs/buildbot.texinfo: update lots of stuff
2692 * buildbot/scripts/runner.py (sendchange): add a --branch argument
2693 to the 'buildbot sendchange' command
2694 * buildbot/clients/sendchange.py (Sender.send): same
2695 * buildbot/changes/pb.py (ChangePerspective): same
2696 * buildbot/test/test_changes.py (Sender.testSender): test it
2698 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
2699 'default_branch' argument names to 'baseURL' and 'defaultBranch',
2700 for consistency with other BuildStep arguments that use camelCase.
2701 Well, at least more of them use camelCase (like flunkOnWarnings)
2702 than don't.. I wish I'd picked one style and stuck with it
2703 earlier. Annoying, but it's best done before the release, since
2704 these arguments didn't exist at all in 0.6.6 .
2706 * buildbot/test/test_vc.py (SVN.testCheckout): same
2707 (Darcs.testPatch): same
2708 * docs/buildbot.texinfo (SVN): document the change
2709 (Darcs): same, add some build-on-branch docs
2710 * docs/examples/twisted_master.cfg: match change
2712 * buildbot/process/step.py (BuildStep): rename
2713 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
2714 how it is normally used.
2715 * buildbot/test/test_steps.py (Version.checkCompare): same
2717 * buildbot/process/step.py (CVS.startVC): refuse to build
2718 update/copy -style builds on a non-default branch with an old
2719 buildslave (<=0.6.6) that doesn't know how to do it properly. The
2720 concern is that it will do a VC 'update' in an existing tree when
2721 it is supposed to be switching branches (and therefore clobbering
2722 the tree to do a full checkout), thus building the wrong source.
2723 This used to be a warning, but I think the confusion it is likely
2724 to cause warrants making it an error.
2725 (SVN.startVC): same, also make mode=export on old slaves an error
2726 (Darcs.startVC): same
2727 (Git.startVC): improve error message for non-Git-enabled slaves
2728 (Arch.checkSlaveVersion): same. continue to emit a warning when a
2729 specific revision is built on a slave that doesn't pay attention
2730 to args['revision'], because for slowly-changing trees it will
2731 probably do the right thing, and because we have no way to tell
2732 whether we're asking it to build the most recent version or not.
2733 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
2735 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
2736 that 'master' is in host:portnum format, to catch errors sooner
2738 2005-10-23 Brian Warner <warner@lothar.com>
2740 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
2741 when creating the list of warning messages, include the line
2742 immediately after each WARNING: line, since that's usually where
2743 the file and line number wind up.
2745 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
2750 2005-10-22 Brian Warner <warner@lothar.com>
2752 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
2753 patch from Brad Hards
2754 * buildbot/status/classic.css: same
2755 * buildbot/test/test_web.py (Waterfall): match changes
2757 * buildbot/test/test_steps.py (BuildStep.setUp): set
2758 nextBuildNumber so the test passes
2759 * buildbot/test/test_status.py (MyBuilder): same
2761 * buildbot/status/html.py (StatusResourceBuild.body): revision
2762 might be numeric, so stringify it before html-escapifying it
2763 (CurrentBox.getBox): add a "waiting" state, and show a countdown
2764 timer for the upcoming build
2765 * buildbot/status/classic.css: add background-color attributes for
2766 offline/waiting/building classes
2768 * buildbot/status/builder.py (BuildStatus): derive from
2769 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
2770 the default (i.e. unknown) .slavename to "???" instead of None,
2771 since even unknown slavenames need to be printed eventually.
2772 (BuilderStatus): also derive from styles.Versioned . More
2773 importantly, determine .nextBuildNumber at creation/unpickling
2774 time by scanning the directory of saved BuildStatus instances and
2775 choosing one larger than the highest-numbered one found. This
2776 should fix the problem where random errors during upgrades cause
2777 the buildbot to forget about earlier builds. .nextBuildNumber is
2778 no longer stored in the pickle.
2779 (Status.builderAdded): if we can't unpickle the BuilderStatus,
2780 at least log the error. Also call Builder.determineNextBuildNumber
2781 once the basedir is set.
2783 * buildbot/master.py (BuildMaster.loadChanges): do
2784 styles.doUpgrade afterwards, in case I decide to make Changes
2785 derived from styles.Versioned some day and forget to make this
2789 * buildbot/test/test_runner.py (Options.testForceOptions): skip
2790 when running under older pythons (<2.3) in which the shlex module
2791 doesn't have a 'split' function.
2793 * buildbot/process/step.py (ShellCommand.start): make
2794 errorMessages= be a list of strings to stuff in the log before the
2795 command actually starts. This makes it easier to flag multiple
2796 warning messages, e.g. when the Source steps have to deal with an
2798 (CVS.startVC): handle slaves that don't handle multiple branches
2799 by switching into 'clobber' mode
2800 (SVN.startVC): same. Also reject branches without base_url
2801 (Darcs.startVC): same. Also reject revision= in older slaves
2802 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
2803 (Bazaar.startVC): same, and test for baz separately than for arch
2805 * buildbot/slave/commands.py (cvs_ver): document new features
2807 * buildbot/process/step.py (BuildStep.slaveVersion): document it
2808 (BuildStep.slaveVersionNewEnough): more useful utility method
2809 * buildbot/test/test_steps.py (Version): start testing it
2811 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
2812 the 'force' command requires python2.3, for the shlex.split method
2814 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
2815 since we don't use it anymore. The Twisted buildbot uses a
2818 2005-10-21 Brian Warner <warner@lothar.com>
2820 * buildbot/process/process_twisted.py: rework all BuildFactory
2821 classes to take a 'source' step as an argument, instead of
2822 building up the SVN instance in the factory.
2823 * docs/examples/twisted_master.cfg: enable build-on-branch by
2824 providing a base_url and default_branch
2826 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
2827 control over --branch and --revision, not that they are always
2829 * buildbot/status/html.py (StatusResourceBuilder.force): same
2830 (StatusResourceBuild.body): display SourceStamp components
2832 * buildbot/scripts/runner.py (ForceOptions): option parser for the
2833 IRC 'force' command, so it can be shared with an eventual
2834 command-line-tool 'buildbot force' mode.
2835 * buildbot/test/test_runner.py (Options.testForceOptions): test it
2837 2005-10-20 Brian Warner <warner@lothar.com>
2839 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
2841 * docs/examples/twisted_master.cfg: update to use Schedulers
2843 * buildbot/scripts/sample.cfg: update with Schedulers
2845 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
2846 method specifically for use by HTML "force build" button and the
2847 IRC "force" command. Raises an immediate error if there are no
2849 (IBuilderControl.requestBuild): make this just submit a build, not
2850 try to check for existing slaves or set up any when-finished
2851 Deferreds or anything.
2852 * buildbot/process/builder.py (BuilderControl): same
2853 * buildbot/status/html.py (StatusResourceBuilder.force): same
2854 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
2855 * buildbot/test/test_slaves.py: same
2856 * buildbot/test/test_web.py: same
2858 2005-10-19 Brian Warner <warner@lothar.com>
2860 * docs/examples/twisted_master.cfg: re-sync with reality: bring
2861 back python2.2 tests, turn off OS-X threadedselect-reactor tests
2863 2005-10-18 Brian Warner <warner@lothar.com>
2865 * buildbot/status/html.py: provide 'status' argument to most
2866 StatusResourceFOO objects
2867 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
2868 and Logfiles" section to make the Build page into a more-or-less
2869 comprehensive source of status information about the build
2871 * buildbot/status/mail.py (MailNotifier): include the Build's URL
2872 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
2874 2005-10-17 Brian Warner <warner@lothar.com>
2876 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
2877 arguments to accomodate Twisted >=2.1.0 . I will have to figure
2878 out what to do about other projects: the correct options for
2879 recent Twisteds will not work for older ones.
2881 2005-10-15 Brian Warner <warner@lothar.com>
2883 * buildbot/status/builder.py (Status.getURLForThing): add method
2884 to provide a URL for arbitrary IStatusFoo objects. The idea is to
2885 use this in email/IRC status clients to make them more useful, by
2886 providing the end user with hints on where to learn more about the
2887 object being reported on.
2888 * buildbot/test/test_web.py (GetURL): tests for it
2890 2005-10-14 Brian Warner <warner@lothar.com>
2892 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
2893 fix bug resulting from deferredResult changes
2895 2005-10-13 Brian Warner <warner@lothar.com>
2897 * buildbot/test/test_changes.py: remove use of deferredResult
2898 * buildbot/test/test_config.py: same
2899 * buildbot/test/test_control.py: same
2900 * buildbot/test/test_status.py: same
2901 * buildbot/test/test_vc.py: this is the only remaining use, since
2902 it gets used at module level. This needs to be replaced by some
2903 sort of class-level run-once routine.
2905 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
2907 * lots: implement multiple slaves per Builder, which means multiple
2908 current builds per Builder. Some highlights:
2909 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
2910 of (state,currentBuilds) instead of (state,currentBuild)
2911 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
2912 (IBuildStatus.getSlavename): new method, so you can tell which
2913 slave got used. This only gets set when the build completes.
2914 (IBuildRequestStatus.getBuilds): new method
2916 * buildbot/process/builder.py (SlaveBuilder): add a .state
2917 attribute to track things like ATTACHING and IDLE and BUILDING,
2919 (Builder): .. the .slaves attribute here, which has been turned
2920 into a simple list of available slaves. Added a separate
2921 attaching_slaves list to track ones that are not yet ready for
2923 (Builder.fireTestEvent): put off the test-event callback for a
2924 reactor turn, to make tests a bit more consistent.
2925 (Ping): cleaned up the slaveping a bit, now it disconnects if the
2926 ping fails due to an exception. This needs work, I'm worried that
2927 a code error could lead to a constantly re-connecting slave.
2928 Especially since I'm trying to move to a distinct remote_ping
2929 method, separate from the remote_print that we currently use.
2930 (BuilderControl.requestBuild): return a convenience Deferred that
2931 provides an IBuildStatus when the build finishes.
2932 (BuilderControl.ping): ping all connected slaves, only return True
2933 if they all respond.
2935 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
2936 reconnect when we shut down.
2938 * buildbot/status/builder.py: implement new methods, convert
2939 one-build-at-a-time methods to handle multiple builds
2940 * buildbot/status/*.py: do the same in all default status targets
2941 * buildbot/status/html.py: report the build's slavename in the
2942 per-Build page, report all buildslaves on the per-Builder page
2944 * buildbot/test/test_run.py: update/create tests
2945 * buildbot/test/test_slaves.py: same
2946 * buildbot/test/test_scheduler.py: remove stale test
2948 * docs/buildbot.texinfo: document the new builder-specification
2949 'slavenames' parameter
2951 2005-10-12 Brian Warner <warner@lothar.com>
2953 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
2954 report failure correctly, causing Dependent builds to run when
2955 they shouldn't have.
2956 * buildbot/status/builder.py (BuildSetStatus): same
2957 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
2958 (Set.testSuccess): test the both-pass case too
2959 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2960 fix this test: it was ending too early, masking the failure before
2961 (Logger): specialized StatusReceiver to make sure the dependent
2962 builds aren't even started, much less completed.
2964 2005-10-07 Brian Warner <warner@lothar.com>
2966 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
2967 bot.SlaveBuilder being disowned in the middle of a build
2969 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
2970 this inherit from StatusReceiver. Also upcall in __init__. This
2971 fixes the embarrasing crash when the new buildSetSubmitted method
2972 is invoked and Waterfall/etc don't implement their own.
2973 * buildbot/test/test_run.py: add a TODO note about a test to catch
2974 just this sort of thing.
2976 * buildbot/process/builder.py (Builder.attached): remove the
2977 already-attached warning, this situation is normal. Add some
2978 comments explaining it.
2980 2005-10-02 Brian Warner <warner@lothar.com>
2982 * buildbot/changes/maildir.py (Maildir.start): Tolerate
2983 OverflowError when setting up dnotify, because some 64-bit systems
2984 have problems with signed-vs-unsigned constants and trip up on the
2985 DN_MULTISHOT flag. Patch from Brad Hards.
2987 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
2989 * buildbot/process/step.py (BuildStep, ShellCommand): Add
2990 progressMetrics, description, descriptionDone to the 'parms' list,
2991 and make use the 'parms' list from the implementation class
2992 instead of only BuildStep to initialize the parameters. This
2993 allows buildbot.process.factory.s() to initialize all the parms,
2994 not just those defined in directly by BuildStep.
2996 2005-09-03 Brian Warner <warner@lothar.com>
2998 * NEWS: start adding items for the next release
3000 * docs/examples/twisted_master.cfg: (sync with reality) turn off
3001 python2.2 tests, change 'Quick' builder to only use python2.3
3003 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
3005 * buildbot/status/html.py (StatusResourceBuilder.body): only show
3006 the "Ping Builder" button if the build control is available; the
3007 user sees an exception otherwise
3009 * docs/buildbot.texinfo (PBChangeSource): fix a typo
3011 2005-09-01 Brian Warner <warner@lothar.com>
3013 * buildbot/interfaces.py (IBuilderStatus.getState): update
3014 signature, point out that 'build' can be None
3015 (IBuildStatus.getETA): point out ETA can be none
3017 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
3019 * buildbot/status/words.py (IrcStatusBot.emit_status): same
3021 2005-08-31 Brian Warner <warner@lothar.com>
3023 * buildbot/status/base.py (StatusReceiver.builderChangedState):
3024 update to match correct signature: removed 'eta' argument
3025 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
3027 2005-08-30 Brian Warner <warner@lothar.com>
3029 * buildbot/status/builder.py (LogFile): remove the assertion that
3030 blows up when you try to overwrite an existing logfile, instead
3031 just emit a warning. This case gets hit when the buildmaster is
3032 killed and doesn't get a chance to write out the serialized
3033 BuilderStatus object, so the .nextBuildNumber attribute gets out
3036 * buildbot/scripts/runner.py (sendchange): add --revision_file to
3037 the 'buildbot sendchange' arguments, for the Darcs context file
3038 * docs/buildbot.texinfo (sendchange): document it
3040 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
3041 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
3042 (IStatus.getSchedulers): new method
3043 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
3044 (Status.getSchedulers): implement
3045 * buildbot/process/builder.py (Builder): maintain
3046 BuilderStatus.pendingBuilds
3047 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
3048 (TryBase.addChange): Try schedulers should ignore Changes
3050 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
3051 for 'try' on CVS/SVN
3052 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
3054 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
3055 report status properly.
3056 (Try.createJob): implement unique buildset IDs
3058 * buildbot/status/client.py (StatusClientPerspective): add a
3059 perspective_getBuildSets method for the benefit of jobdir-style
3061 * docs/buildbot.texinfo (try): more docs
3062 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
3065 2005-08-18 Brian Warner <warner@lothar.com>
3067 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
3068 actually work. It's functional but still kind of clunky. Also, it
3069 only works with the pb-style.. needs to be made to work with the
3072 * buildbot/status/client.py (RemoteBuildSet): new class
3073 (RemoteBuildRequest): same
3074 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
3075 object, not the internal BuildStatus object.
3076 (RemoteBuild.remote_subscribe): new method to subscribe to builds
3077 outside of the usual buildStarted() return value.
3078 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
3080 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
3081 (Try_Userpass_Perspective.perspective_try): return a remotely
3082 usable BuildSetStatus object
3084 * buildbot/interfaces.py (IBuildStatus): remove obsolete
3085 isStarted()/waitUntilStarted()
3087 2005-08-16 Brian Warner <warner@lothar.com>
3089 * buildbot/status/builder.py: implement IBuildSetStatus and
3090 IBuildRequestStatus, wire them into place.
3091 * buildbot/buildset.py: same. Add ID, move wait-until-finished
3092 methods into the BuildSetStatus object.
3093 * buildbot/interfaces.py: same
3094 (IStatus.getBuildSets): new method to get pending BuildSets
3095 (IStatusReceiver.buildsetSubmitted): new method which hears about
3097 * buildbot/master.py (BuildMaster.submitBuildSet): same
3098 * buildbot/process/base.py (BuildRequest): same, replace
3099 waitUntilStarted with subscribe/unsubscribe
3100 * buildbot/process/builder.py (BuilderControl.forceBuild): use
3101 subscribe instead of waitUntilStarted
3102 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
3104 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
3106 * buildbot/test/test_buildreq.py: update for new code
3107 * buildbot/test/test_control.py (Force.testRequest): same
3110 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
3111 for Darcs to not use the tempfile module, so it works under
3112 python-2.2 too. We really didn't need the full cleverness of that
3113 module, since the slave has exclusive control of its own builddir.
3115 2005-08-15 Brian Warner <warner@lothar.com>
3117 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
3118 for CVS trees. It doesn't work for non-trunk branches,
3120 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
3123 * Makefile: make it easier to test against python2.2
3125 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
3126 tearDown2, so things like Arch can unregister archives as they're
3127 shutting down. The previous subclass-override-tearDown technique
3128 resulted in a nested maybeWait() and test failures under
3131 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
3132 where we can (Arch), add a branch= argument to set the branch used
3134 (BazExtractor): extract the branch too
3135 (TlaExtractor): same
3136 * buildbot/scripts/runner.py (TryOptions): add --branch
3137 * docs/buildbot.texinfo (try): document --branch/try_branch
3139 * buildbot/slave/commands.py (Darcs): implement get-revision for
3140 Darcs, so that 'try' will work. This requires the tempfile module
3143 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
3144 of revisions, branches, and 'try' in the process.
3146 2005-08-11 Brian Warner <warner@lothar.com>
3148 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
3149 this, it got broken at some point in the last few releases
3150 * buildbot/status/words.py (IrcBuildRequest): reply was broken
3151 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
3152 specifically the removal of ETA information from the tuple
3154 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
3157 * docs/buildbot.texinfo (try): document both --builder and
3158 'try_builders' in .buildbot/options
3159 * buildbot/scripts/runner.py (TryOptions): add --builder,
3160 accumulate the values into opts['builders']
3161 * buildbot/scripts/tryclient.py (Try.__init__): set builders
3162 * buildbot/test/test_runner.py (Try): add some quick tests to make
3163 sure 'buildbot try --options' and .buildbot/options get parsed
3164 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3165 use --builder control
3167 * docs/buildbot.texinfo (try): add --port argument to PB style
3169 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
3170 actual SourceStamp. Still need to extract a branch name, somehow.
3171 (Try): finish implementing the try client side, still need a UI
3172 for specifying which builders to use
3173 (Try.getopt): factor our options/config-file reading
3174 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3176 * buildbot/test/test_vc.py: match SourceStampExtractor change
3178 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
3179 causes the twisted log to be sent to stderr
3181 * buildbot/scheduler.py (Try_Userpass): implement the PB style
3183 2005-08-10 Brian Warner <warner@lothar.com>
3185 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
3186 style is 90% done, still missing status reporting or waiting for
3187 the buildsets to finish, and it is completely untested.
3189 * buildbot/trybuild.py: delete file, move contents to ..
3190 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
3191 * buildbot/test/test_vc.py: match the move
3193 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
3194 of the TryScheduler, no buildsetID or status-tracking support yet
3195 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
3197 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
3198 possible to set the basedir after __init__ time, so it is easier
3199 to use as a Service-child of the BuildMaster instance
3201 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
3202 that delivers messages to its Service parent instead of requiring
3203 a subclass to be useful. This turns out to be much easier to build
3206 * buildbot/scripts/tryclient.py (createJob): utility code to
3207 create jobfiles, will eventually be used by 'buildbot try'
3209 2005-08-08 Brian Warner <warner@lothar.com>
3211 * docs/buildbot.texinfo (try): add docs on the
3212 as-yet-unimplemented Try scheduler
3214 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
3215 * buildbot/test/test_scheduler.py: .. here
3216 (Scheduling.testTryJobdir): add placeholder test for 'try'
3218 * buildbot/test/test_status.py (Log.testMerge3): update to match new
3219 addEntry merging (>=chunkSize) behavior
3220 (Log.testConsumer): update to handle new callLater(0) behavior
3222 * buildbot/test/test_web.py: rearrange tests a bit, add test for
3223 both the MAX_LENGTH bugfix and the resumeProducing hang.
3225 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
3226 put off the actual resumeProducing for a moment with
3227 reactor.callLater(0). This works around a twisted-1.3.0 bug which
3228 causes large logfiles to hang midway through.
3230 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
3231 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
3232 and to improve memory usage when streaming the file out to a web
3234 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
3235 make this work cleanly
3237 2005-08-03 Brian Warner <warner@lothar.com>
3239 * buildbot/trybuild.py: new file for 'try' utilities
3240 (getSourceStamp): run in a tree, find out the baserev+patch
3241 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
3242 implemented for SVN and Darcs, still working on Arch. I don't know
3243 how to make CVS work yet.
3245 * docs/buildbot.texinfo: document the 'buildbot' command-line
3246 tool, including the not-yet-implemented 'try' feature, and the
3247 in-flux .buildbot/ options directory.
3249 2005-07-20 Brian Warner <warner@lothar.com>
3251 * buildbot/locks.py: added temporary id() numbers to Lock
3252 descriptions, to track down a not-really-sharing-the-Lock bug
3254 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
3256 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
3257 needed for python2.2 compatibility
3258 * buildbot/test/test_vc.py: python2.2 compatibility: generators
3259 are from the __future__
3261 2005-07-19 Brian Warner <warner@lothar.com>
3263 * buildbot/master.py (BuildMaster.loadConfig): give a better error
3264 message when schedulers use unknown builders
3266 * buildbot/process/builder.py (Builder.compareToSetup): make sure
3267 SlaveLock('name') and MasterLock('name') are distinct
3269 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
3270 c['schedulers'] in such a way that we can actually accept
3272 * buildbot/test/test_config.py: check it
3274 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
3275 utility method to *all* the Schedulers
3276 (Periodic.listBuilderNames): same
3278 * docs/buildbot.texinfo (Interlocks): update chapter to match
3281 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
3282 to make sure that c['sources'], c['schedulers'], and c['status']
3283 are all lists of the appropriate objects, and that the Schedulers
3284 all point to real Builders
3285 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
3286 'listBuilderNames' utility method to support this
3287 * buildbot/scheduler.py: implement the utility method
3288 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
3290 * docs/buildbot.texinfo: add some @cindex entries
3292 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
3293 if it wasn't already set: most tla commands will fail unless one
3295 (Arch.createRepository): and disable bazaar's revision cache, since
3296 they cause test failures (the multiple repositories we create all
3297 interfere with each other through the cache)
3299 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
3300 bring it properly up to date with twisted-2.0 test guidelines
3302 * buildbot/master.py (BuildMaster): remove references to old
3303 'interlock' module, this caused a bunch of post-merge test
3305 * buildbot/test/test_config.py: same
3306 * buildbot/process/base.py (Build): same
3308 * buildbot/test/test_slaves.py: stubs for new test case
3310 * buildbot/scheduler.py: add test-case-name tag
3311 * buildbot/test/test_buildreq.py: same
3313 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
3314 unnecessary init code
3315 (Bot.remote_setBuilderList): match it
3317 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
3319 * buildbot/changes/mail.py (parseSyncmail): update comment
3321 * buildbot/test/test_slavecommand.py: disable Shell tests on
3322 platforms that don't suport IReactorProcess
3324 * buildbot/status/builder.py (LogFile): remove the 't' mode from
3325 all places where we open logfiles. It causes OS-X to open the file
3326 in some weird mode that that prevents us from mixing reads and
3327 writes to the same filehandle, which we depend upon to implement
3328 _generateChunks properly. This change doesn't appear to break
3329 win32, on which "b" and "t" are treated differently but a missing
3330 flag seems to be interpreted as "t".
3332 2005-07-18 Brian Warner <warner@lothar.com>
3334 * buildbot/slave/commands.py (ShellCommand): overhaul
3335 error-handling code, to try and make timeout/interrupt work
3336 properly, and make win32 happier
3337 * buildbot/test/test_slavecommand.py: clean up, stop using
3338 reactor.iterate, add tests for timeout and interrupt
3339 * buildbot/test/sleep.py: utility for a new timeout test
3341 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
3342 code from the local-usebranches branch
3344 2005-07-17 Brian Warner <warner@lothar.com>
3346 * buildbot/process/process_twisted.py
3347 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
3348 minutes, to match the other twisted BuildFactories, and don't
3349 excuse failures in c/qt/win32 reactors any more.
3351 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
3352 'freebsd' builders, since the buildslaves have been unavailable
3355 2005-07-13 Brian Warner <warner@lothar.com>
3357 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
3358 build-on-branch feature
3360 * buildbot/process/step.py (Darcs.__init__): add base_url and
3361 default_branch arguments, just like SVN
3362 (Arch.__init__): note that the version= argument is really the
3365 * buildbot/slave/commands.py (SourceBase): keep track of the
3366 repository+branch that was used for the last checkout in
3367 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
3368 match, we clobber the directory and perform a fresh checkout
3369 rather than trying to do an in-place update. This should protect
3370 us against trying to get to branch B by doing an update in a tree
3371 obtained from branch A.
3372 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
3373 (SVN.setup): same, just the svnurl
3374 (Darcs.setup): same, just the repourl
3375 (Arch.setup): same, arch coordinates (url), version, and
3376 buildconfig. Also pull the buildconfig from the args dictionary,
3377 which we weren't doing before, so the build-config was effectively
3379 (Arch.sourcedirIsUpdateable): don't try to update when we're
3380 moving to a specific revision: arch can't go backwards, so it is
3381 safer to just clobber the tree and checkout a new one at the
3383 (Bazaar.setup): same sourcedata as Arch
3385 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3386 use maybeWait, to work with twisted-1.3.0 and twcompat
3387 (Dependencies.testRun_Pass): same
3389 * buildbot/test/test_vc.py: rearrange, cleanup
3391 * buildbot/twcompat.py: add defer.waitForDeferred and
3392 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
3393 can work under twisted-1.3.0 .
3395 * buildbot/test/test_vc.py: rewrite. The sample repositories are
3396 now created at setUp time. This increases the runtime of the test
3397 suite considerably (from 91 seconds to 151), but it removes the
3398 need for an offline tarball, which should solve a problem I've
3399 seen where the test host has a different version of svn than the
3400 tarball build host. The new code also validates that mode=update
3401 really picks up recent commits. This approach will also make it
3402 easier to test out branches, because the code which creates the VC
3403 branches is next to the code which uses them. It will also make it
3404 possible to test some change-notification hooks, by actually
3405 performing a VC commit and watching to see the ChangeSource get
3408 2005-07-12 Brian Warner <warner@lothar.com>
3410 * docs/buildbot.texinfo (SVN): add branches example
3411 * docs/Makefile (buildbot.ps): add target for postscript manual
3413 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
3414 * buildbot/test/test_locks.py: same
3416 * buildbot/process/step.py (Darcs): comment about default branches
3418 * buildbot/master.py (BuildMaster.loadConfig): don't look for
3419 c['interlocks'] in the config file, complain if it is present.
3420 Scan all locks in c['builders'] to make sure the Locks they use
3422 * buildbot/test/test_config.py: remove old c['interlocks'] test,
3423 add some tests to check for non-uniquely-named Locks
3424 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
3425 since the unique-Lock validation code requires it now
3427 * buildbot/locks.py: fix test-case-name
3429 * buildbot/interlock.py: remove old file
3431 2005-07-11 Brian Warner <warner@lothar.com>
3433 * buildbot/test/test_interlock.py: rename to..
3434 * buildbot/test/test_locks.py: .. something shorter
3436 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
3437 versions (after 2.0.1) changed internet.TCPClient to shut down the
3438 connection in stopService. Change the code to handle this
3441 * buildbot/process/base.py (Build): handle whole-Build locks
3442 * buildbot/process/builder.py (Builder.compareToSetup): same
3443 * buildbot/test/test_interlock.py: make tests work
3445 * buildbot/process/step.py (BuildStep.startStep): complain if a
3446 Step tries to claim a lock that's owned by its own Build
3447 (BuildStep.releaseLocks): typo
3449 * buildbot/locks.py (MasterLock): use ComparableMixin so config
3450 file reloads don't replace unchanged Builders
3452 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
3453 rewrite to cover new Locks instead of old c['interlocks']
3454 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
3458 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
3459 start the master and connect the buildslave
3461 * buildbot/process/step.py (FailingDummy.done): finish with a
3462 FAILURE status rather than raising an exception
3464 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
3465 stringify a BuildRequest.reason that is None
3467 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
3469 * buildbot/status/builder.py (BuildSetStatus): implement enough to
3470 allow scheduler.Dependent to work
3471 * buildbot/buildset.py (BuildSet): set .reason and .results
3473 * buildbot/test/test_interlock.py (Locks.setUp): connect both
3474 slaves, to make the test stop hanging. It still fails, of course,
3475 because I haven't even started to implement Locks.
3477 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
3479 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
3480 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
3481 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
3482 (Dependent): new class for downstream build dependencies
3483 * buildbot/test/test_dependencies.py: tests (still failing)
3485 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
3487 2005-07-07 Brian Warner <warner@lothar.com>
3489 * buildbot/test/runutils.py (RunMixin): factored this class out..
3490 * buildbot/test/test_run.py: .. from here
3491 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
3492 added new buildbot.locks tests (which all hang right now)
3493 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
3494 * buildbot/process/step.py: claim/release per-BuildStep locks
3496 * docs/Makefile: add 'buildbot.html' target
3498 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
3499 interpreted as "HEAD", so that all VC steps can accept branch=None
3500 and have it mean the "default branch".
3502 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
3504 2005-07-07 Brian Warner <warner@lothar.com>
3506 * docs/examples/twisted_master.cfg: update to match current usage
3508 * docs/buildbot.texinfo (System Architecture): comment out the
3509 image, it doesn't exist yet and just screws up the HTML manual.
3511 2005-07-05 Brian Warner <warner@lothar.com>
3513 * debian/.cvsignore: oops, missed one. Removing leftover file.
3515 2005-06-17 Brian Warner <warner@lothar.com>
3517 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
3518 changed its output in 1.2.0, don't mistakenly think that the
3519 subversion we find isn't capable of supporting our tests.
3521 * debian/*: remove the debian/ directory and its contents, to make
3522 life easier for the proper Debian maintainer
3524 * Makefile (release): same
3526 2005-06-07 Brian Warner <warner@lothar.com>
3528 * everything: create a distinct SourceStamp class to replace the
3529 ungainly 4-tuple, let it handle merging instead of BuildRequest.
3530 Changed the signature of Source.startVC to include the revision
3531 information (instead of passing it through self.args). Implement
3532 branches for SVN (now only Darcs/Git is missing support). Add more
3535 2005-06-06 Brian Warner <warner@lothar.com>
3537 * everything: rearrange build scheduling. Create a new Scheduler
3538 object (configured in c['schedulers'], which submit BuildSets to a
3539 set of Builders. Builders can now use multiple slaves. Builds can
3540 be run on alternate branches, either requested manually or driven
3541 by changes. This changed some of the Status classes. Interlocks
3542 are out of service until they've been properly split into Locks
3543 and Dependencies. treeStableTimer, isFileImportant, and
3544 periodicBuild have all been moved from the Builder to the
3546 (BuilderStatus.currentBigState): removed the 'waiting' and
3547 'interlocked' states, removed the 'ETA' argument.
3549 2005-05-24 Brian Warner <warner@lothar.com>
3551 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
3552 erroneously abandons the connection (in clientConnectionFailed)
3553 for non-UserErrors, which means that if we lose the connection due
3554 to a network problem or a timeout, we'll never try to reconnect.
3555 Fix this by not upcalling to the buggy parent method. Note:
3556 twisted-2.0 fixes this, but the function only has 3 lines so it
3557 makes more sense to copy it than to try and detect the buggyness
3558 of the parent class. Fixes SF#1207588.
3560 * buildbot/changes/changes.py (Change.branch): doh! Add a
3561 class-level attribute to accomodate old Change instances that were
3562 pickled before 0.6.5 (where .branch was added for new Changes).
3563 This fixes the exception that occurs when you try to look at an
3564 old Change (through asHTML).
3566 * buildbot/__init__.py (version): bump to 0.6.6+ while between
3569 2005-05-23 Brian Warner <warner@lothar.com>
3571 * buildbot/__init__.py (version): release 0.6.6
3573 2005-05-23 Brian Warner <warner@lothar.com>
3575 * NEWS: update for 0.6.6 release
3576 * debian/changelog: same
3578 * buildbot/scripts/runner.py (start): put the basedir in sys.path
3579 before starting: this was done by twistd back when we spawned it,
3580 now that we're importing the pieces and running them in the
3581 current process, we have to do it ourselves. This allows
3582 master.cfg to import files from the same directory without
3583 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
3584 Stichele for the catch.
3585 (Options.opt_version): Add a --version command (actually, just make
3586 the existing --version command emit Buildbot's version too)
3588 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
3589 fix to make this behave like other LogFiles, this time to handle
3590 existing LogFiles on disk. (add the missing .upgrade method)
3591 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
3593 2005-05-21 Brian Warner <warner@lothar.com>
3595 * buildbot/test/test_runner.py (Create.testMaster): match the
3596 rawstring change in runner.py:masterTAC
3598 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
3599 TwistedWords is installed
3600 * buildbot/test/test_status.py: same, with TwistedMail
3602 * buildbot/master.py: remove old IRC/Waterfall imports (used by
3603 some old, deprecated, and removed config keys). This should enable
3604 you to use the base buildbot functionality with Twisted-2.0.0 when
3605 you don't also have TwistedWeb and TwistedWords installed
3607 2005-05-20 Brian Warner <warner@lothar.com>
3609 * buildbot/scripts/runner.py (run): call sendchange(), not
3610 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
3611 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
3612 (stop): don't wait for process to die when sending SIGHUP
3613 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
3614 directory name gets interpreted, which you don't want
3617 * buildbot/__init__.py (version): bump to 0.6.5+ while between
3620 2005-05-18 Brian Warner <warner@lothar.com>
3622 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
3624 2005-05-18 Brian Warner <warner@lothar.com>
3626 * README: update for 0.6.5
3627 * debian/changelog: same
3629 * buildbot/changes/changes.py: rename tag= to branch=, since
3630 that's how we're using it, and my design for the upcoming "build a
3631 specific branch" feature wants it. also, tag= was too CVS-centric
3632 * buildbot/changes/mail.py (parseSyncmail): same
3633 * buildbot/process/base.py (Build.isBranchImportant): same
3634 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
3635 * docs/buildbot.texinfo (Attributes of Changes): same
3637 * NEWS: update tag=, update for upcoming release
3639 2005-05-17 Brian Warner <warner@lothar.com>
3641 * buildbot/scripts/runner.py (stop): actually poll once per
3642 second, instead of re-killing the poor daemon once per second.
3643 Sleep briefly (0.1s) before the first poll, since there's a good
3644 chance we can avoid waiting the full second if the daemon shuts
3645 down quickly. Also remove the sys.exit() at the end.
3646 (start): remove the unneighborly sys.exit()
3648 * Makefile: improve permission-setting to not kick Arch so badly
3650 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
3651 default --keepalive=600, since it doesn't hurt very much, and it's
3652 a hassle to discover that you need it.
3653 * buildbot/test/test_runner.py (Create.testSlave): test it
3655 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
3656 IRC bot about EXCEPTION
3658 * buildbot/status/client.py (PBListener): upcall more correctly
3660 * buildbot/process/base.py (Build.allStepsDone): if a step caused
3661 an exception mark the overall build with EXCEPTION, not SUCCESS
3663 * buildbot/scripts/runner.py (makefile_sample): remove the leading
3665 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
3666 * Makefile: update some release-related stuff
3668 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
3669 gets called when there isn't actually an active process, just end
3670 the Command instead of blowing up. I don't know how it gets into
3671 this state, but the twisted win32 buildslave will sometimes hang,
3672 and when it shakes its head and comes back, it thinks it's still
3673 running a Command. The next build causes this command to be
3674 interrupted, but the lack of self.process.pid breaks the interrupt
3677 * NEWS: document changes since the last release
3679 * buildbot/scripts/runner.py (start): change 'buildbot start' to
3680 look for Makefile.buildbot instead of a bare Makefile . The
3681 'buildbot start' does not install this file, so you have to
3682 manually copy it if you want to customize startup behavior.
3683 (createMaster): change 'buildbot master' command to create
3684 Makefile.sample instead of Makefile, to create master.cfg.sample
3685 instead of master.cfg (requiring you to copy it before the
3686 buildmaster can be started). Both sample files are kept up to
3687 date, i.e. they are overwritten if they have been changed. The
3688 'buildbot.tac' file is *not* overwritten, but if the new contents
3689 don't match the old, a 'buildbot.tac.new' file is created and the
3690 user is warned. This seems to be a much more sane way to handle
3691 startup files. Also, don't sys.exit(0) when done, so we can run
3692 unit tests against it.
3693 (createSlave): same. Don't overwrite the sample info/ files.
3694 * buildbot/scripts/sample.mk: remove. the contents were pulled
3695 into runner.py, since they need to match the behavior of start()
3699 * docs/buildbot.texinfo (Launching the daemons): document it
3700 * buildbot/test/test_runner.py (Create): test it
3702 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
3703 version that can handle string-in-string tests, because otherwise
3704 python-2.2 fails the tests. It'd be tremendous if Trial's test
3705 took two strings under 2.2 too.
3707 * everything: fixed all deprecation warnings when running against
3708 Twisted-2.0 . (at least all the ones in buildbot code, there are a
3709 few that come from Twisted itself). This involved putting most of
3710 the Twisted-version specific code in the new buildbot.twcompat
3711 module, and creating some abstract base classes in
3712 buildbot.changes.base and buildbot.status.base (which might be
3713 useful anyway). __implements__ is a nuisance and requires an ugly
3714 'if' clause everywhere.
3716 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
3717 delay before finishing the test: it seems that smtp.sendmail
3718 doesn't hang up on the server, so we must wait a moment so it can
3719 hang up on us. This removes the trial warning about an unclean
3722 2005-05-16 Brian Warner <warner@lothar.com>
3724 * buildbot/process/step.py (Source): add 'retry' argument. It is a
3725 tuple of (delay, repeats).
3726 * buildbot/test/test_vc.py (Retry): test it
3727 * docs/buildbot.texinfo (Source Checkout): document it
3728 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
3729 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
3730 doVCFull() are handled by re-trying the checkout (after a delay)
3731 some number of times.
3732 (ShellCommand._startCommand): make header lines easier to read
3734 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
3736 (WebTest.test_logfile): make sure master gets shut down, silences
3737 some "unclean reactor" test errors
3739 * buildbot/test/test_changes.py (Sender.tearDown): spin the
3740 reactor once after shutdown, something in certain versions of
3741 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
3742 fails, svn-trunk is ok.
3744 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
3745 second win32 error message
3747 * buildbot/test/test_run.py (Status.testSlave): be smarter about
3748 validating the ETA, so the tests don't fail on slow systems
3750 2005-05-15 Brian Warner <warner@lothar.com>
3752 * buildbot/status/builder.py (HTMLLogFile): make this behave like
3753 the new LogFile class, so upgrading works properly
3754 (LogFileProducer.resumeProducing): survive resumeProducing after
3755 we've exhausted the chunkGenerator
3757 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
3759 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
3760 (Log.testUpgrade): same
3762 * docs/buildbot.texinfo (Maintenance): describe how to delete old
3763 Builds and logs with a cron job.
3765 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
3766 of the old non-offline LogFile, added code to upgrade these to
3767 new-style contents-live-on-disk instances at load time (in a way
3768 that doesn't invalidate the old Build pickles, so upgrading to
3769 0.6.5 is not a one-way operation). Got rid of everything related
3771 (LogFile.__init__): create LogFiles with the parent step status,
3772 the log's name, and a builder-relative filename where it can keep
3773 the contents on disk.
3774 (LogFile.hasContents): new method, clients are advised to call it
3775 before getText or getChunks and friends. If it returns False, the
3776 log's contents have been deleted and getText() will raise an
3778 (LogFile.getChunks): made it a generator
3779 (LogFile.subscribeConsumer): new method, takes a Twisted-style
3780 Consumer (except one that takes chunks instead of strings). This
3781 enables streaming of very large logfiles without storing the whole
3783 (BuildStatus.generateLogfileName): create names like
3784 12-log-compile-output, with a _0 suffix if required to be unique
3785 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
3786 or earlier) logfiles into new-style ones
3787 (BuilderStatus): remove everything related to 'stub' builds. There
3788 is now only one build cache, and we don't strip logs from old
3790 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
3791 since we no longer fight to keep it in the cache
3793 * buildbot/status/html.py (TextLog.render_GET): use a
3794 ChunkConsumer to stream the log entries efficiently.
3795 (ChunkConsumer): wrapper which consumes chunks and writes
3798 * buildbot/test/test_twisted.py (Parse.testParse): use a
3799 LogFile-like object instead of a real one
3801 * buildbot/test/test_status.py (MyLog): handle new LogFile code
3802 (Log.testMerge3): validate more merge behavior
3803 (Log.testChunks): validate LogFile.getChunks
3804 (Log.testUpgrade): validate old-style LogFile upgrading
3805 (Log.testSubscribe): validate LogFile.subscribe
3806 (Log.testConsumer): validate LogFile.subscribeConsumer
3808 * buildbot/interfaces.py (IStatusLogStub): remove
3809 (IStatusLog.subscribeConsumer): new method
3810 (IStatusLog.hasContents): new method
3811 (IStatusLogConsumer): describes things passed to subscribeConsumer
3813 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
3814 the log contents if it does not have any contents.
3815 (StatusResourceBuildStep.body): same
3816 (StatusResourceBuildStep.getChild): give a 404 for empty logs
3818 2005-05-14 Brian Warner <warner@lothar.com>
3820 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
3821 timeouts to try and make the windows metabuildslave not hang
3823 2005-05-13 Mike Taylor <bear@code-bear.com>
3825 * buildbot/slave/commands.py (rmdirRecursive): added a check
3826 to ensure the path passed into rmdirRecursive actually exists.
3827 On win32 a non-existant path would generate an exception.
3829 2005-05-13 Brian Warner <warner@lothar.com>
3831 * buildbot/slave/commands.py (rmdirRecursive): replacement for
3832 shutil.rmtree which behaves correctly on windows in the face of
3833 files that you have to chmod before deleting. Thanks to Bear at
3834 the OSAF for the routine.
3835 (SourceBase.doClobber): use rmdirRecursive
3837 2005-05-12 Brian Warner <warner@lothar.com>
3839 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
3840 method generate chunks instead of returning a big list. This
3841 allows the same method to be used for both old LogFile and new
3843 (OfflineLogFile.getText): use the generator
3844 (OfflineLogFile.subscribe): same
3845 * buildbot/status/html.py (TextLog.resumeProducing): same
3846 * buildbot/interfaces.py (IStatusLog.getChunks): document it
3848 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
3849 point out that OfflineLogFile does not currently work with
3850 html.Waterfall . Fixing this is high-priority.
3852 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
3853 apparently windows defaults to using stdout
3855 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
3856 better message on failure so I can figure out the win32 problem
3858 * buildbot/slave/commands.py (ShellCommand._startCommand): update
3859 log messages to include more useful copies of the command being
3860 run, the argv array, and the child command's environment.
3861 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
3863 2005-05-11 Brian Warner <warner@lothar.com>
3865 * setup.py: oops, install debug.glade so 'buildbot debugclient'
3867 * Makefile: update the deb-snapshot version
3869 * docs/buildbot.texinfo: move all .xhtml docs into a new
3870 .texinfo-format document, adding a lot of material in the process.
3871 This is starting to look like a real user's manual. Removed all
3872 the Lore-related files: *.xhtml, *.css, template.tpl .
3873 * docs/Makefile: simple makefile to run 'makeinfo'
3874 * buildbot/scripts/sample.cfg: rearrange slightly
3875 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
3877 2005-05-10 Brian Warner <warner@lothar.com>
3879 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
3880 different name for the internal twistw module, handle it.
3882 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
3883 * setup.py: .. and stop trying to install it
3885 * buildbot/process/step.py (Git): added support for 'cogito' (aka
3886 'git'), the new linux kernel VC system (http://kernel.org/git/).
3887 Thanks to Brandon Philips for the patch.
3888 * buildbot/slave/commands.py (Git): same
3890 2005-05-06 Brian Warner <warner@lothar.com>
3892 * buildbot/status/builder.py (OfflineLogFile): replace the default
3893 LogFile with a form that appends its new contents to a disk file
3894 as they arrive. The complete log data is never kept in RAM. This
3895 is the first step towards handling very large (100MB+) logfiles
3896 without choking quite so badly. (The other half is
3897 producer/consumer on the HTML pages).
3898 (BuildStepStatus.addLog): use OfflineLogFile by default
3899 (BuildStatus.getLogfileName): helper code to give the
3900 OfflineLogFile a filename to work with
3902 * buildbot/test/test_status.py (Results.testAddResults): update
3903 tests to handle new asserts
3904 * buildbot/test/test_vc.py (Patch.doPatch): same
3905 * buildbot/test/test_steps.py (BuildStep.setUp): same
3907 2005-05-05 Brian Warner <warner@lothar.com>
3909 * buildbot/scripts/runner.py (start): if there is no Makefile,
3910 launch the app by importing twistd's internals and calling run(),
3911 rather than spawning a new twistd process. This stands a much
3912 better chance of working under windows.
3913 (stop): kill the process with os.kill instead of spawning
3914 /bin/kill, again to reduce the number of external programs which
3915 windows might not have in the PATH. Also wait up to 5 seconds for
3916 the process to go away, allowing things like 'buildbot stop;
3917 buildbot start' to be reliable in the face of slow shutdowns.
3919 * buildbot/master.py (Dispatcher.__getstate__): remove old
3920 .tap-related methods
3921 (BuildMaster.__getstate__): same
3923 * buildbot/slave/bot.py (makeService): same
3924 (Options.longdesc): same
3925 * buildbot/scripts/runner.py: copy over some old mktap option text
3927 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
3928 'buildbot master' now creates a buildbot.tac file, so there is no
3929 longer a create-instance/save/reload sequence. mktap is dead, long
3931 * buildbot/scripts/sample.mk: use twistd -y, not -f
3932 * buildbot/test/test_config.py: remove mktap-based test
3933 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
3934 * README: don't reference mktap
3936 * docs/source.xhtml: document some of the attributes that Changes
3939 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
3941 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
3942 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
3943 * buildbot/changes/changes.py (Change)
3944 * buildbot/changes/mail.py (parseSyncmail)
3945 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
3947 * buildbot/process/base.py (Build.isTagImportant)
3951 2005-05-04 Brian Warner <warner@lothar.com>
3953 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
3954 connection after sending the change, so that unit tests don't
3955 complain about sockets being left around
3957 * buildbot/status/html.py (WaterfallStatusResource.body): fix
3958 exception in phase=0 rendering
3959 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3961 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
3963 * buildbot/master.py (BuildMaster.loadConfig): finally remove
3964 deprecated config keys: webPortnum, webPathname, irc, manholePort,
3965 and configuring builders with tuples.
3966 * buildbot/test/test_config.py: stop testing compatibility with
3967 deprecated config keys
3968 * buildbot/test/test_run.py: same
3970 2005-05-03 Brian Warner <warner@lothar.com>
3972 * contrib/arch_buildbot.py: survive if there are no logfiles
3973 (username): just use a string, os.getlogin isn't reliable
3975 * buildbot/scripts/runner.py (sendchange): oops, fix the command
3976 so 'buildbot sendchange' actually works. The earlier test only
3977 covered the internal (non-reactor-running) form.
3979 * contrib/arch_buildbot.py: utility that can run as an Arch hook
3980 script to notify the buildmaster about changes
3982 * buildbot/scripts/runner.py (sendchange): new command to send a
3983 change to a buildbot.changes.pb.PBChangeSource receiver.
3984 * buildbot/test/test_changes.py (Sender): test it
3986 * buildbot/master.py (BuildMaster.startService): mark .readConfig
3987 after any reading of the config file, not just when we do it in
3988 startService. This makes some tests a bit cleaner.
3990 * buildbot/changes/pb.py: add some log messages
3992 * buildbot/process/base.py (Build.startBuild): fix a bug that
3993 caused an exception when the build terminated in the very first
3995 (Build.stepDone): let steps return a status of EXCEPTION. This
3996 terminates the build right away, and sets the build's overall
3997 status to EXCEPTION too.
3998 * buildbot/process/step.py (BuildStep.failed): return a status of
3999 EXCEPTION when that is what has happened.
4001 * buildbot/process/step.py (Arch.computeSourceRevision): finally
4002 implement this, allowing Arch-based projects to get precise
4003 checkouts instead of always using the latest code
4004 (Bazaar): create variant of Arch to let folks use baz instead of
4005 tla. Requires a new buildslave too.
4006 * buildbot/slave/commands.py (Arch): add 'revision' argument
4007 (Bazaar): create variant of Arch that uses baz instead of tla.
4008 Remove the code that extracts the archive name from the
4009 register-archive output, since baz doesn't provide it, and require
4010 the user provide both the archive name and its location.
4011 * buildbot/test/test_vc.py (VC.testBazaar): added tests
4013 2005-05-02 Brian Warner <warner@lothar.com>
4015 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
4016 thanks to Nick Trout.
4018 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
4019 deals better with source Makefile coming from a read-only CVS
4020 checkout. Thanks to Nick Trout for the catch.
4022 * buildbot/__init__.py (version): bump to 0.6.4+ while between
4025 2005-04-28 Brian Warner <warner@lothar.com>
4027 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
4029 * debian/changelog: update for 0.6.4
4031 2005-04-28 Brian Warner <warner@lothar.com>
4033 * README.w32: add a checklist of steps for getting buildbot
4035 * MANIFEST.in: include it in the tarball
4039 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
4040 broken .tap files from 0.6.3 by getting rid of .services,
4041 .namedServices, and .change_svc at load time.
4043 2005-04-27 Brian Warner <warner@lothar.com>
4045 * NEWS: update in preparation for new release
4047 * buildbot/test/test_config.py (Save.testSave): don't pull in
4048 twisted.scripts.twistd, we don't need it and it isn't for windows
4051 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
4052 accomodate win32 which can't do atomic-rename
4054 2005-04-27 Brian Warner <warner@lothar.com>
4056 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
4057 timeouts to help the slow metabuildbot not flunk them so much
4058 (Disconnect.testBuild3): same
4059 (Disconnect.testBuild4): same
4060 (Disconnect.testInterrupt): same
4062 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
4063 setup, it was completely broken for new buildmasters (those which
4064 did not have a 'change.pck' already saved. Thanks to Paul Warren
4065 for catching this (embarrassing!) bug.
4066 (Dispatcher.__getstate__): don't save our registered avatar
4067 factories, since they'll be re-populated when the config file is
4069 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
4070 tests (since the real mktap-generated BuildMaster doesn't save
4072 (BuildMaster.__getstate__): don't save any service children,
4073 they'll all be re-populated when the config file is re-read.
4074 * buildbot/test/test_config.py (Save.testSave): test for this
4076 2005-04-26 Brian Warner <warner@lothar.com>
4078 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
4079 rendered with Blender.. looks a bit nicer.
4080 * buildbot/docs/images/icon.blend: add the Blender file for it
4082 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
4083 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
4084 running under windows. This appears to be the best way to allow
4085 BuildSteps to do something normal like 'trial -v buildbot.test' or
4086 'make foo' and still expect it to work. The idea is to make the
4087 BuildSteps look as much like what a developer would type when
4088 compiling or testing the tree by hand. This approach probably has
4089 problems when there are spaces in the arguments, so if you've got
4090 windows buildslaves, you'll need to pay close attention to your
4093 * buildbot/status/html.py (WaterfallStatusResource.body): add the
4094 timezone to the timestamp column.
4095 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4097 * buildbot/scripts/runner.py (loadOptions): do something sane for
4098 windows, I think. We use %APPDATA%/buildbot instead of
4099 ~/.buildbot, but we still search everywhere from the current
4100 directory up to the root for a .buildbot/ subdir. The "is it under
4101 $HOME" security test was replaced with "is it owned by the current
4102 user", which is only performed under posix.
4103 * buildbot/test/test_runner.py (Options.testFindOptions): update
4104 tests to match. The "is it owned by the current user" check is
4105 untested. The test has been re-enabled for windows.
4107 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
4108 any "\n" in the expected output with the platform-specific line
4109 separator. Make this separator "\r\n" on PTYs under unix, they
4110 seem to do that and I don't know why
4112 * buildbot/test/test_runner.py (Options.optionsFile): disable on
4113 windows for now, I don't know what ~/.buildbot/ should mean there.
4115 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
4116 win32 compatibility, don't use "/tmp"
4117 (Basedir.testChangeBuilddir): remove more unixisms
4119 2005-04-26 Brian Warner <warner@lothar.com>
4121 * buildbot/test/test_control.py (Force.rmtree): python2.2
4122 compatibility, apparently its shutil.rmtree ignore_errors=
4123 argument is ignored.
4124 * buildbot/test/test_run.py (Run.rmtree): same
4125 (RunMixin.setUp): same
4127 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
4130 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
4131 'substring in string' operator, must use string.find(substr)!=-1
4132 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
4133 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
4135 * buildbot/scripts/runner.py (loadOptions): add code to search for
4136 ~/.buildbot/, a directory with things like 'options', containing
4137 defaults for various 'buildbot' subcommands. .buildbot/ can be in
4138 the current directory, your $HOME directory, or anywhere
4139 inbetween, as long as you're somewhere inside your home directory.
4140 (debugclient): look in ~/.buildbot/options for master and passwd
4141 (statuslog): look in ~/.buildbot/options for 'masterstatus'
4142 * buildbot/test/test_runner.py (Options.testFindOptions): test it
4144 * buildbot/status/client.py (makeRemote): new approach to making
4145 IRemote(None) be None, which works under Twisted-2.0
4146 * buildbot/test/test_status.py (Client.testAdaptation): test it
4148 * buildbot/status/builder.py (Status.builderAdded): when loading a
4149 pickled BuilderStatus in from disk, set its name after loading.
4150 The config file might have changed its name (but not its
4151 directory) while it wasn't looking.
4153 * buildbot/process/builder.py (Builder.attached): always return a
4154 Deferred, even if the builder was already attached
4155 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
4157 2005-04-25 Brian Warner <warner@lothar.com>
4159 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
4160 category-related exception when announcing a build has finished
4162 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
4163 reference no-longer-existent changemaster.sources
4164 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
4166 * buildbot/__init__.py (version): bump to 0.6.3+ while between
4169 2005-04-25 Brian Warner <warner@lothar.com>
4171 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
4173 * debian/changelog: update for 0.6.3
4175 2005-04-25 Brian Warner <warner@lothar.com>
4177 * MANIFEST.in: make sure debug.glade is in the tarball
4179 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
4181 * NEWS: update for the imminent 0.6.3 release
4183 * buildbot/status/html.py (HtmlResource.content): make the
4184 stylesheet <link> always point at "buildbot.css".
4185 (StatusResource.getChild): map "buildbot.css" to a static.File
4186 containing whatever css= argument was provided to Waterfall()
4187 (Waterfall): provide the "classic" css as the default.
4188 * docs/waterfall.classic.css: move default CSS from here ..
4189 * buildbot/status/classic.css: .. to here
4191 * MANIFEST.in: make sure classic.css is included in the tarball
4192 * setup.py: and that it is installed too, under buildbot/status/
4194 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
4195 the module level, because buildbot.tap files from 0.6.2 don't have
4196 it in their attribute dictionary.
4198 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
4199 really exists at startup, might save some confusion somewhere.
4201 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
4203 * docs/waterfall.classic.css:
4204 add a stylesheet that's almost the same as the "classic"
4207 * buildbot/status/builder.py:
4208 add EXCEPTION as a result - this is a problem for the bot
4209 maintainer, not a build problem for the changers
4210 * buildbot/process/step.py:
4211 use EXCEPTION instead of FAILURE for exceptions
4212 * buildbot/status/html.py:
4213 add build_get_class to get a class out of a build/buildstep
4214 finish naming the classes
4215 split out sourceNames to changeNames and builderNames so we
4216 can style them separately
4217 * docs/config.xhtml:
4218 finish documenting classes as they are right now
4220 * buildbot/status/html.py:
4221 name the classes as we agreed on IRC
4222 * docs/config.xhtml:
4225 * buildbot/status/html.py:
4226 same for cssclass->class_
4228 * buildbot/status/html.py:
4229 as decided on IRC, use class_ for the "class" attribute to not
4230 conflict with the class keyword, and clean up the messy **{} stuff.
4232 * buildbot/status/mail.py:
4233 put back "builders" argument, and fix docstring, because the
4234 code *ignores* builders listed in this argument
4236 * buildbot/process/builder.py:
4237 remove FIXME notes - category is now indeed a cvar of BuilderStatus
4239 * docs/config.xhtml:
4240 describe the category argument for builders
4242 * buildbot/status/builder.py:
4243 Fix a silly bug due to merging
4245 * buildbot/process/builder.py:
4246 remove category from the process Builder ...
4247 * buildbot/status/builder.py:
4248 ... and add it to BuilderStatus instead.
4249 Set category on unpickled builder statuses, they might not have it.
4250 * buildbot/master.py:
4251 include category when doing builderAdded
4252 * buildbot/status/mail.py:
4253 return None instead of self for builders we are not interested in.
4254 * buildbot/test/test_run.py:
4255 fix a bug due to only doing deferredResult on "dummy" waiting
4256 * buildbot/test/test_status.py:
4257 add checks for the Mail IStatusReceiver returning None or self
4259 * buildbot/status/html.py:
4260 fix testsuite by prefixing page title with BuildBot
4262 * buildbot/status/builder.py:
4263 have .category in builder status ...
4264 * buildbot/process/builder.py:
4265 ... and set it from Builder
4266 * buildbot/status/html.py:
4267 make .css a class variable
4268 * buildbot/test/test_status.py:
4269 write more tests to cover our categories stuff ...
4270 * buildbot/status/mail.py:
4271 ... and fix the bug that this uncovered
4273 * buildbot/changes/mail.py:
4274 * buildbot/changes/pb.py:
4275 * buildbot/master.py:
4276 * buildbot/process/base.py:
4277 * buildbot/process/factory.py:
4278 * buildbot/process/interlock.py:
4279 * buildbot/process/step.py:
4280 * buildbot/process/step_twisted.py:
4281 * buildbot/slave/commands.py:
4282 * buildbot/status/builder.py:
4283 * buildbot/status/client.py:
4284 * buildbot/status/html.py:
4285 * buildbot/status/mail.py:
4286 * buildbot/status/progress.py:
4287 * buildbot/test/test_changes.py:
4288 * buildbot/test/test_config.py:
4289 * buildbot/test/test_control.py:
4290 * buildbot/test/test_interlock.py:
4291 * buildbot/test/test_maildir.py:
4292 * buildbot/test/test_mailparse.py:
4293 * buildbot/test/test_run.py:
4294 * buildbot/test/test_slavecommand.py:
4295 * buildbot/test/test_status.py:
4296 * buildbot/test/test_steps.py:
4297 * buildbot/test/test_twisted.py:
4298 * buildbot/test/test_util.py:
4299 * buildbot/test/test_vc.py:
4300 * buildbot/test/test_web.py:
4302 add test-case-name at the top of a whole set of files
4304 * buildbot/status/builder.py:
4305 keep order of addition when getting builder names
4306 * buildbot/status/words.py:
4307 * buildbot/test/test_run.py:
4308 add test for getBuilderNames
4310 * buildbot/process/base.py:
4311 * buildbot/process/step.py:
4312 * buildbot/status/builder.py:
4313 * buildbot/status/html.py:
4314 make buildbot css-able
4315 replace the color code for purple with purple, don't understand
4316 why it wasn't purple to start with
4318 * buildbot/status/words.py:
4319 ok, so it doesn't look like BuilderStatus.remote is still valid.
4320 Use what waterfall uses instead.
4322 * buildbot/interfaces.py:
4323 * buildbot/status/builder.py:
4324 * buildbot/status/html.py:
4325 * buildbot/status/mail.py:
4326 * buildbot/status/words.py:
4327 * buildbot/test/test_run.py:
4328 use categories everywhere and make it be a list. More sensible
4329 for the future. Also make words actually respect this in
4332 * buildbot/interfaces.py:
4333 add category argument to getBuilderNames
4334 * buildbot/process/builder.py:
4335 * buildbot/status/builder.py:
4336 * buildbot/status/html.py:
4337 * buildbot/status/mail.py:
4338 * buildbot/status/words.py:
4339 * buildbot/test/test_run.py:
4340 move from specifying builders by name to specifying the category
4342 * buildbot/status/html.py:
4343 * buildbot/status/words.py:
4344 add "builders=" to __init__ of status clients so they can
4345 limit themselves to the given list of builders to report on
4347 * buildbot/status/html.py: set the title to the product name
4349 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
4351 * buildbot/interfaces.py:
4352 * buildbot/status/builder.py:
4353 more documentation. Hm, not sure if ChangeLog entries make sense
4356 2005-04-23 Brian Warner <warner@lothar.com>
4358 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
4360 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
4362 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
4363 the sub-commands that log buildmaster status to stdout and to a
4364 GUI window, respectively.
4366 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
4367 functionality is working again, but all the step-status and ETA
4368 stuff is missing. Commented out a lot of code pending more
4371 * buildbot/status/client.py: make sure that IRemote(None) is None
4373 * buildbot/changes/changes.py: import defer, oops
4374 (ChangeMaster): remove the .sources list, rely upon the fact that
4375 MultiServices can be treated as sequences of their children. This
4376 cleans up the add/remove ChangeSource routines a lot, as we keep
4377 exactly one list of the current sources instead of three.
4379 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
4380 up an empty ChangeMaster at init time.
4381 (BuildMaster.loadChanges): if there are changes to be had from
4382 disk, replace self.change_svc with the new ones. If not, keep
4383 using the empty ChangeMaster set up in __init__.
4384 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
4385 instead of a separate list, makes the code a bit cleaner.
4386 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
4387 (ConfigTest.testSources): same, also wait for loadConfig to finish.
4388 Extend the test to make sure we can get rid of the sources when
4391 2005-04-22 Brian Warner <warner@lothar.com>
4393 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
4394 and info/host files when making the slave directory
4396 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
4397 whendone= argument, just return the Deferred and let the caller do
4398 what they want with it.
4399 (Disconnect.testBuild1): wait for shutdownSlave
4400 (Basedir.testChangeBuilddir): new test to make sure changes to the
4401 builddir actually get propagated to the slave
4403 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
4404 explicit method, rather than passing the builddir in __init__ .
4405 Make sure to update self.basedir too, this was broken before.
4406 (Bot.remote_setBuilderList): use b.setBuilddir for both new
4407 builders and for ones that have just had their builddir changed.
4408 (BotFactory): add a class-level .perspective attribute, so
4409 BuildSlave.waitUntilDisconnected won't get upset when the
4410 connection hasn't yet been established
4411 (BuildSlave.__init__): keep track of the bot.Bot instance, so
4412 tests can reach through it to inspect the SlaveBuilders
4414 * buildbot/process/base.py (Build.buildException): explain the
4415 log.err with a log.msg
4416 * buildbot/process/builder.py (Builder.startBuild): same
4417 (Builder._startBuildFailed): improve error message
4419 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
4420 occurred because we lost the brand-new connection, retry instead
4421 of giving up. If not, it's probably an authorization failure, and
4422 it makes sense to stop trying. Make sure we log.msg the reason
4423 that we're log.err'ing the failure, otherwise test failures are
4424 really hard to figure out.
4426 * buildbot/master.py: change loadConfig() to return a Deferred
4427 that doesn't fire until the change has been fully implemented.
4428 This means any connected slaves have been updated with the new
4429 builddir. This change makes it easier to test the code which
4430 actually implements this builddir-updating.
4431 (BotPerspective.addBuilder): return Deferred
4432 (BotPerspective.removeBuilder): same
4433 (BotPerspective.attached): same
4434 (BotPerspective._attached): same. finish with remote_print before
4435 starting the getSlaveInfo, instead of doing them in parallel
4436 (BotPerspective.list_done): same
4437 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
4438 actually calling slave.disconnect()
4439 (BotMaster.addBuilder): same
4440 (BotMaster.removeBuilder): same
4441 (BuildMaster.loadConfig): same
4442 (BuildMaster.loadConfig_Slaves): same
4443 (BuildMaster.loadConfig_Sources): same
4444 (BuildMaster.loadConfig_Builders): same
4445 (BuildMaster.loadConfig_status): same
4447 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
4448 a Deferred that fires when the source is finally removed
4450 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
4451 the previous tree on win32, where we have to do it synchronously,
4452 make sure we return a Deferred anyway.
4453 (SourceBase.doCopy): same
4455 * buildbot/scripts/runner.py (statusgui): use the text client for
4456 now, while I rewrite the Gtk one
4457 * buildbot/clients/base.py: strip out old code, leaving just the
4458 basic print-message-on-event functionality. I also remove the
4459 ReconnectingPBClientFactory, but it does at least quit when it
4460 loses the connection instead of going silent
4462 2005-04-21 Brian Warner <warner@lothar.com>
4464 * Makefile: minor tweaks
4466 * NEWS: point out deprecation warnings, new features for
4469 * buildbot/master.py (BuildMaster.loadConfig): emit
4470 DeprecationWarnings for Builders defined with tuples. Rearrange
4471 code to facility removal of deprecated configuration keys in the
4474 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
4475 'buildbot' command to put a little Makefile in the target that
4476 helps you re-create the buildbot.tap file, start or stop the
4477 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
4478 all the files 0600, since they contain passwords.
4479 (start): if there is a Makefile, and /usr/bin/make exists, use
4480 'make start' in preference to a raw twistd command. This lets
4481 slave admins put things like PYTHONPATH variables in their
4482 Makefiles and have them still work when the slave is started with
4483 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
4484 be nice to first try the 'make' command and only fall back to
4485 twistd if it fails. TODO: the Makefile's "start" command does not
4486 add the --reactor=win32 argument when running under windows.
4487 (Options.debugclient, Options.statusgui): add sub-commands to launch
4488 the debug client (formerly in contrib/debugclient.py) and the
4489 Gtk status application (currently broken)
4490 * buildbot/clients/debug.py: move from contrib/debugclient.py
4491 * buildbot/clients/debug.glade: same
4493 * buildbot/test/test_trial.py: remove it. This requires some
4494 functionality out of Twisted that isn't there yet, and until then
4495 having it around just confuses things.
4497 * buildbot/test/test_slavecommand.py (Shell): test both with and
4498 without PTYs, and make sure that command output is properly
4499 interleaved in the with-PTY case. I think the without-PTY test
4500 should pass on windows, where we never use PTYs anyway.
4502 2005-04-20 Brian Warner <warner@lothar.com>
4504 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
4506 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
4508 * NEWS: start creating entries for the next release
4510 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
4512 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
4513 (WebTest.test_webPathname): same
4514 (WebTest.test_webPathname_port): same
4515 (WebTest.test_waterfall): use the default favicon rather than
4516 rooting around the filesystem for it. Open the expected-icon file
4517 in binary mode, to make win32 tests happier (thanks to Nick Trout
4519 * buildbot/status/html.py (buildbot_icon): win32 portability
4521 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
4522 win32-compatibility fixes from Nick Trout, the "file not found" message
4523 is different under windows
4524 (FakeSlaveBuilder.__init__): clean up setup a bit
4525 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
4527 2005-04-19 Brian Warner <warner@lothar.com>
4529 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
4530 skip-if-repositories-are-unavailable test to not kill the trial
4531 that comes with Twisted-1.3.0
4533 * setup.py: install buildbot.png icon file when installing code
4535 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
4536 environment used by the command, at least on the child side.
4538 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
4539 this method needs to be added and implemented because it gets
4540 called under heavy load. I don't quite understand the
4541 producer/consumer API enough to write it.
4542 (StatusResource.getChild): add a resource for /favicon.ico
4543 (Waterfall.__init__): add favicon= argument
4544 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4545 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
4546 (WebTest.test_webPathname): same
4547 (WebTest.test_webPathname_port): same
4548 * docs/config.xhtml: mention favicon=
4549 * buildbot/buildbot.png: add a default icon, dorky as it is
4551 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
4553 * buildbot/master.py:
4554 * buildbot/process/base.py:
4555 * buildbot/process/builder.py:
4556 * buildbot/process/interlock.py:
4557 * buildbot/status/builder.py:
4558 * buildbot/status/html.py:
4559 * buildbot/status/mail.py:
4560 * buildbot/status/words.py:
4561 new documentation while digging through the code
4563 2005-04-17 Brian Warner <warner@lothar.com>
4565 * general: try to fix file modes on all .py files: a+r, a-x,
4566 but let buildbot/clients/*.py be +x since they're tools
4568 * docs/epyrun (addMod): when an import fails, say why
4570 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
4572 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4574 * buildbot/process/base.py:
4575 * buildbot/process/builder.py:
4576 * buildbot/status/builder.py:
4577 new documentation while digging through the code
4579 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4581 * buildbot/changes/changes.py:
4582 * buildbot/changes/p4poller.py:
4583 * buildbot/interfaces.py:
4584 * buildbot/process/base.py:
4585 * buildbot/process/builder.py:
4586 * buildbot/process/step.py:
4587 * buildbot/process/step_twisted.py:
4588 * buildbot/slave/bot.py:
4589 * buildbot/slave/commands.py:
4590 * buildbot/status/builder.py:
4591 fix all docstrings to make epydoc happy. In the process of fixing
4592 some, I also moved pieces of docs, and removed some deprecated
4595 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4597 * buildbot/process/builder.py:
4598 * buildbot/process/interlock.py:
4599 * buildbot/process/process_twisted.py:
4600 * buildbot/process/step.py:
4601 BuildProcess -> Build, as it looks like that's what happened
4602 * buildbot/process/base.py:
4603 * buildbot/process/factory.py:
4606 2005-04-17 Brian Warner <warner@lothar.com>
4608 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4609 update compile command to accomodate the Twisted split.. now
4610 instead of './setup.py build_ext -i', you do './setup.py all
4611 build_ext -i', to run build_ext over all sub-projects.
4612 (FullTwistedBuildFactory): same
4613 (TwistedReactorsBuildFactory): same
4615 * buildbot/status/html.py (TextLog.finished): null out self.req
4616 when we're done, otherwise the reference cycle of TextLog to .req
4617 to .notifications to a Deferred to TextLog.stop keeps them from
4618 being collected, and consumes a huge (610MB on pyramid at last
4619 check) amount of memory.
4621 2005-04-11 Brian Warner <warner@lothar.com>
4623 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
4624 normalize the VC-repository location.. makes SVN happier with
4625 certain test environments.
4627 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
4628 RemoteShellCommand gets its own .env dictionary, so that code in
4629 start() doesn't mutate the original. I think this should fix the
4630 step_twisted.Trial problem where multiple identical components
4631 kept getting added to PYTHONPATH= over and over again.
4633 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
4634 adding epydoc-format docstrings to many classes. Thanks to Thomas
4635 Vander Stichele for the patches.
4636 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
4637 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
4638 * buildbot/slave/bot.py, commands.py, registry.py: same
4640 2005-04-05 Brian Warner <warner@lothar.com>
4642 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
4643 preserve timestamps, helps incremental builds of large trees.
4644 Patch from Rene Rivera.
4646 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
4647 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
4650 2005-04-03 Brian Warner <warner@lothar.com>
4652 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
4653 with one dict, apparently exec has some scoping bugs when used
4654 with both global/local dicts. Thanks to Nathaniel Smith for the
4657 2005-04-02 Brian Warner <warner@lothar.com>
4659 * buildbot/process/step_twisted.py (countFailedTests): the new
4660 trial in Twisted-2.0 emits a slightly different status line than
4661 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
4662 mistakenly think the test count is unparseable.
4663 (Trial.start): note that for some reason each build causes another
4664 copy of self.testpath to be prepended to PYTHONPATH. This needs to
4665 be fixed but I'm not sure quite where the problem is.
4667 2005-04-01 Brian Warner <warner@lothar.com>
4669 * buildbot/test/test_run.py (Run.testMaster): change some uses of
4670 deferredResult to avoid hangs/warnings under twisted-2.0
4671 (RunMixin.tearDown): same
4672 (RunMixin.shutdownSlave): same
4673 (Disconnect.testIdle1): same
4674 (Disconnect.testBuild2): same: wait one second after the build
4675 finishes for test to really be done.. this should be cleaned up to
4676 avoid wasting that second. Builder.detach uses a callLater(0),
4677 either that should be done in-line (something else needed that
4678 behavior), or it should return a Deferred that fires when the
4679 builder is really offline.
4680 (Disconnect.testBuild3): same
4681 (Disconnect.testDisappear): same
4683 * buildbot/test/test_web.py: rearrange server-setup and teardown
4684 code to remove unclean-reactor warnings from twisted-2.0
4686 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
4687 so the tests don't hang under twisted-2.0
4689 2005-03-31 Brian Warner <warner@lothar.com>
4691 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
4692 caused a warning each time the master changed our set of builders
4694 * buildbot/status/builder.py (BuildStatus.saveYourself): under
4695 w32, don't unlink the file unless it already exists. Thanks to
4696 Baptiste Lepilleur for the catch.
4697 (BuilderStatus.saveYourself): same
4699 2005-02-01 Brian Warner <warner@lothar.com>
4701 * buildbot/status/html.py (TextLog.getChild): use a /text child
4702 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
4703 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
4704 logfile as text/plain (no markup, no headers). This replaces the
4705 previous scheme (which used an ?text=1 argument), and gets us back
4706 to a relative link (which works better when the buildbot lives
4707 behind another web server, such as Apache configured as a reverse
4708 proxy). Thanks to Gerald Combs for spotting the problem.
4710 * buildbot/__init__.py (version): bump to 0.6.2+ while between
4713 2004-12-13 Brian Warner <warner@lothar.com>
4715 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
4717 * debian/changelog: update for 0.6.2
4718 * NEWS: finalize for 0.6.2
4720 2004-12-11 Brian Warner <warner@lothar.com>
4722 * NEWS: bring it up to date
4724 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
4725 detection code. Require some sign of life from the buildmaster
4726 every BotFactory.keepaliveInterval seconds. Provoke this
4727 indication at BotFactory.keepaliveTimeout seconds before the
4728 deadline by sending a keepalive request. We don't actually care if
4729 that request is answered in a timely fashion, what we care about
4730 is that .activity() is called before the deadline. .activity() is
4731 triggered by any PB message from the master (including an ack to
4732 one of the slave's status-update messages). With this new scheme,
4733 large status messages over slow pipes are OK, as long as any given
4734 message can be sent (and thus acked) within .keepaliveTimeout
4735 seconds (which defaults to 30).
4736 (SlaveBuilder.remote_startCommand): record activity
4737 (SlaveBuilder.ackUpdate): same
4738 (SlaveBuilder.ackComplete): same
4739 (BotFactory.gotPerspective): same
4740 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
4742 2004-12-09 Brian Warner <warner@lothar.com>
4744 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
4747 * buildbot/process/step_twisted.py (Trial._commandComplete):
4748 update self.cmd when we start the 'cat test.log' transfer. Without
4749 this, we cannot interrupt the correct RemoteCommand when we lose
4752 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
4753 trying to tell the slave to stop the command if we're already
4754 inactive, or if we no longer have a .remote
4756 * buildbot/process/builder.py (Builder._detached): don't let an
4757 exception in currentBuild.stopBuild() prevent the builder from
4758 being marked offline
4760 2004-12-07 Brian Warner <warner@lothar.com>
4762 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
4763 KeyError that happens when you ask for a non-existent Builder, and
4764 translate it into a UsageError.
4766 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
4767 losing the slave in the middle of a remote step is handled too
4769 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
4770 be a Failure, so be sure to stringify it before using it as the
4771 contents of the 'interrupt' logfile
4772 (RemoteCommand.interrupt): use stringified 'why' in
4773 remote_interruptCommand too, just in case
4775 2004-12-06 Brian Warner <warner@lothar.com>
4777 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
4778 instead of 'tla update', which is more efficient in case we've
4779 missed a couple of patches since the last update.
4781 * debian/changelog: update for previous (0.6.1) release. Obviously
4782 this needs to be handled better.
4784 2004-12-05 Brian Warner <warner@lothar.com>
4786 * NEWS: update for stuff since last release
4788 * buildbot/master.py (DebugPerspective.attached): return 'self', to
4789 match the maybeDeferred change in Dispatcher.requestAvatar
4790 * buildbot/changes/pb.py (ChangePerspective.attached): same
4791 * buildbot/status/client.py (StatusClientPerspective.attached): same
4792 * buildbot/process/builder.py (Builder._attached3): same
4793 * buildbot/pbutil.py (NewCredPerspective.attached): same
4795 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
4796 the date to the top-most box, if it is not the same as today's
4799 * docs/slave.xhtml: provide a buildslave setup checklist
4801 * docs/source.xhtml (Arch): correct terminology
4803 2004-12-04 Brian Warner <warner@lothar.com>
4805 * buildbot/test/test_slavecommand.py: use sys.executable instead
4806 of hard-coding 'python' for child commands, might help portability
4808 * docs/examples/twisted_master.cfg: update to current usage
4810 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
4811 'stop build' command to the IRC bot
4813 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
4814 message that broke PBChangeSource
4816 * buildbot/slave/bot.py: clean up shutdown/lose-master code
4817 (SlaveBuilder): make some attributes class-level, remove the old
4818 "update queue" which existed to support resuming a build after the
4819 master connection was lost. Try to reimplement that feature later.
4820 (SlaveBuilder.stopCommand): clear self.command when the
4821 SlaveCommand finishes, so that we don't try to kill a leftover one
4823 (SlaveBuilder.commandComplete): same, merge with commandFailed and
4826 * buildbot/slave/commands.py (SourceBase): set self.command for
4827 all VC commands, so they can be interrupted.
4829 2004-12-03 Brian Warner <warner@lothar.com>
4831 * buildbot/master.py: clean up slave-handling code, to handle
4832 slave-disconnect and multiple-connect better
4833 (BotPerspective): make these long-lasting, exactly one per bot
4834 listed in the config file.
4835 (BotPerspective.attached): if a slave connects while an existing
4836 one appears to still be connected, disconnect the old one first.
4837 (BotPerspective.disconnect): new method to forcibly disconnect a
4838 buildslave. Use some hacks to empty the transmit buffer quickly to
4839 avoid the long (20-min?) TCP timeout that could occur if the old
4840 slave has dropped off the net.
4841 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
4842 own their own SlaveStatus objects. Remove .attached/.detached, add
4843 .addSlave/.removeSlave, treat slaves like Builders (config file
4844 parsing sends deltas to the BotMaster). Inform the slave
4845 instances, i.e. the BotPerspective, about addBuilder and
4847 (BotMaster.getPerspective): turns into a single dict lookup
4848 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
4849 which gives BotPerspective.attached a chance to disconnect the old
4851 (BuildMaster.loadConfig): add code (disabled) to validate that all
4852 builders use known slaves (listed in c['bots']). The check won't
4853 work with tuple-specified builders, which are deprecated but not
4854 yet invalid, so the check is disabled for now.
4855 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
4856 routine, do the add/changed/removed dance with them like we do
4858 (BuildMaster.loadConfig_Sources): move source-config into a
4859 separate routine too
4861 * buildbot/status/builder.py (Status.getSlave): get the
4862 SlaveStatus object from the BotPerspective, not the BotMaster.
4864 * buildbot/test/test_run.py: bunch of new tests for losing the
4865 buildslave at various points in the build, handling a slave that
4866 connects multiple times, and making sure we can interrupt a
4869 * buildbot/slave/bot.py (BuildSlave): make it possible to use
4870 something other than 'Bot' for the Bot object, to make certain
4871 test cases easier to write.
4872 (BuildSlave.waitUntilDisconnected): utility method for testing
4874 2004-11-30 Brian Warner <warner@lothar.com>
4876 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
4878 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
4879 argument, return a Deferred that always fires with True or False.
4880 I don't use an errback to indicate 'ping failed' so that callers
4881 are free to ignore the deferred without causing spurious errors in
4883 * buildbot/process/builder.py (BuilderControl.ping): implement it
4885 * buildbot/test/test_run.py (Status.testDisappear): test ping
4886 (Status.disappearSlave): fix it
4888 2004-11-30 Brian Warner <warner@lothar.com>
4890 * buildbot/interfaces.py (IBuildControl): add .stopBuild
4891 (IBuilderControl): add .getBuild(num), only works for the current
4892 build, of course, although it might be interesting to offer
4893 something for builds in the .waiting or .interlocked state.
4895 * buildbot/process/base.py (Build): have .stopBuild just do the
4896 interrupt, then let the build die by itself.
4897 (BuildControl): add .stopBuild, and add a point-event named
4898 'interrupt' just after the build so status viewers can tell that
4900 (BuilderControl): add .getBuild
4902 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
4903 stops when you kill it, good for testing
4904 (ShellCommand.interrupt): add a logfile named 'interrupt' which
4905 contains the 'reason' text.
4907 * buildbot/status/html.py: Add Stop Build button, if the build can
4908 still be stopped. Send a Redirect (to the top page) one second
4909 later, hopefully long enough for the interrupt to have an effect.
4910 Move make_row() up to top-level to share it between Stop Build and
4913 * buildbot/slave/commands.py: only kill the child process once
4915 * buildbot/test/test_run.py: add testInterrupt
4917 2004-11-29 Brian Warner <warner@lothar.com>
4919 * buildbot/process/base.py: Refactor command interruption. The
4920 Build is now responsible for noticing that the slave has gone
4921 away: Build.lostRemote() interrupts the current step and makes
4922 sure that no further ones will be started.
4924 * buildbot/process/builder.py: When the initial remote_startBuild
4925 message fails, log it: this usually indicates that the slave has
4926 gone away, but we don't really start paying attention until they
4927 fail to respond to the first step's command.
4929 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
4930 slave disconnect. Now sports a new interrupt() method. Error
4931 handling was simplified a lot by chaining deferreds, so
4932 remoteFailed/remoteComplete were merged into a single
4933 remoteComplete method (which can now get a Failure object).
4934 Likewise failed/finished were merged into just _finished.
4935 (BuildStep): Add interrupt(why) method, and if why is a
4936 ConnectionLost Failure then the step is failed with some useful
4939 * buildbot/slave/bot.py: stop the current command when the remote
4940 Step reference is lost, and when the slave is shut down.
4941 (Bot): make it a MultiService, so it can have children. Use
4942 stopService to tell when the slave is shutting down.
4943 (SlaveBuilder): make it a Service, and a child of the Bot. Add
4944 remote_interruptCommand (which asks the current SlaveCommand to
4945 stop but allows it to keep emitting status messages), and
4946 stopCommand (which tells it to shut up and die).
4948 * buildbot/slave/commands.py: make commands interruptible
4949 (ShellCommand.kill): factor out os.kill logic
4950 (Command): factor out setup()
4951 (Command.sendStatus): don't send status if .running is false, this
4952 happens when the command has been halted.
4953 (Command.interrupt): new method, used to tell the command to die
4954 (SlaveShellCommand): implement .interrupt
4955 (DummyCommand): implement .interrupt
4956 (SourceBase, etc): factor out setup(), don't continue substeps if
4959 * buildbot/status/builder.py: fix all waitUntilFinished() methods
4960 so they can be called after finishing
4962 * buildbot/test/test_run.py: new tests for disconnect behavior,
4963 refactor slave-shutdown routines, add different kinds of
4966 2004-11-27 Brian Warner <warner@lothar.com>
4968 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
4969 method to express ETA time like "2m45s" instead of "165 seconds"
4971 2004-11-24 Brian Warner <warner@lothar.com>
4973 * buildbot/test/test_vc.py (VC.testArch): unregister the test
4974 archive after the test completes, to avoid cluttering the user's
4975 'tla archives' listing with a bogus entry. Arch doesn't happen to
4976 provide any way to override the use of ~/.arch-params/, so there
4977 isn't a convenient way to avoid touching the setup of the user who
4979 (VC_HTTP.testArchHTTP): same
4981 2004-11-23 Brian Warner <warner@lothar.com>
4983 * buildbot/status/html.py (TextLog): split render() up into
4984 render_HEAD and render_GET. Use a Producer when sending log
4985 chunks, to reduce memory requirements and avoid sending huge
4986 non-Banana-able strings over web.distrib connections. Requires
4987 peeking under the covers of IStatusLog.
4988 (TextLog.resumeProducing): fix the "as text" link, handle client
4989 disconnects that occur while we're still sending old chunks.
4991 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
4992 use defer.succeed, not the non-existent defer.success
4993 (LogFile.waitUntilFinished): same
4994 (LogFile.subscribe): don't add watchers to a finished logfile
4996 * buildbot/__init__.py (version): bump to 0.6.1+ while between
4999 2004-11-23 Brian Warner <warner@lothar.com>
5001 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
5003 2004-11-23 Brian Warner <warner@lothar.com>
5005 * NEWS: update for the 0.6.1 release
5006 * MANIFEST.in: add new files
5008 * README (INSTALLATION): explain how to enable the extra VC tests
5010 * buildbot/status/builder.py (LogFile): add .runEntries at the class
5011 level to, so old pickled builds can be displayed ok
5013 2004-11-22 Brian Warner <warner@lothar.com>
5015 * NEWS: summarize updates since last release
5017 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
5018 Yoz Grahame. Closes SF#1050138.
5020 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
5023 * buildbot/process/step_twisted.py (Trial): update docs a bit
5025 * docs/factories.xhtml: fix Trial factory docs to match reality.
5028 * buildbot/process/factory.py (Trial.__init__): add args for
5029 randomly= and recurse=, making them available to instantiators
5030 instead of only to subclassers. Closes: SF#1049759.
5032 2004-11-15 Brian Warner <warner@lothar.com>
5034 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5035 try to teach the Quick factory to use multiple versions of python
5037 2004-11-12 Brian Warner <warner@lothar.com>
5039 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
5040 safer w32-compatible approach, and only use it on windows
5041 (BuildStatus.saveYourself): same
5043 2004-11-11 Brian Warner <warner@lothar.com>
5045 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
5046 it: one string merge per chunk. There are now separate .entries
5047 and .runEntries lists: when enumerating over all chunks, make sure
5049 * buildbot/test/test_status.py (Log): more tests
5051 * buildbot/status/builder.py (LogFile.addEntry): Merge string
5052 chunks together, up to 10kb per chunk. This ought to cut down on
5053 the CPU-burning overhead of large log files. Thanks to Alexander
5054 Staubo for spotting the problem.
5055 * buildbot/test/test_status.py (Log): tests for same
5057 2004-11-10 Brian Warner <warner@lothar.com>
5059 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
5060 header to outbound mail
5061 * buildbot/test/test_status.py (Mail.testBuild1): test for same
5063 2004-11-08 Brian Warner <warner@lothar.com>
5065 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
5066 can't do os.rename() onto an existing file, so catch the exception
5067 and unlink the target file first. This introduces a slight window
5068 where the existing file could be lost, but the main failure case
5069 (disk full) should still be handled safely.
5070 (BuildStatus.saveYourself): same
5072 * buildbot/changes/pb.py (ChangePerspective): use a configurable
5073 separator character instead of os.sep, because the filenames being
5074 split here are coming from the VC system, which can have a
5075 different pathname convention than the local host. This should
5076 help a buildmaster running on windows that uses a CVS repository
5077 which runs under unix.
5078 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
5080 * buildbot/process/step_twisted.py (Trial.createSummary): survive
5081 when there are no test failures to be parsed
5083 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
5084 instead of the unix-specific os.system("cp"), thanks to Elliot
5085 Murphy for this and the other buildbot-vs-windows catches.
5086 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
5088 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
5089 echo the command as it is run
5091 * setup.py: install sample.mk too, not just sample.cfg
5092 (scripts): install contrib/windows/buildbot.bat on windows
5094 2004-11-07 Brian Warner <warner@lothar.com>
5096 * buildbot/process/builder.py (Builder._detached): clear the
5097 self.currentBuild reference, otherwise the next build will be
5098 skipped because we think the Builder is already in use.
5100 * docs/examples/twisted_master.cfg: update to match current usage
5101 on the Twisted buildbot
5103 2004-10-29 Brian Warner <warner@lothar.com>
5105 * buildbot/status/mail.py (MailNotifier): fix typo in docs
5107 2004-10-28 Brian Warner <warner@lothar.com>
5109 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
5110 have separate doVCUpdate/doVCFull methods. Catch an update failure
5111 and respond by clobbering the source directory and re-trying. This
5112 will handle local changes (like replacing a file with a directory)
5113 that will cause CVS and SVN updates to fail.
5114 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
5116 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
5119 2004-10-19 Brian Warner <warner@lothar.com>
5121 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
5123 * buildbot/status/html.py (StatusResourceTestResults): display any
5124 TestResults that the Build might have
5125 (StatusResourceTestResult): and the logs for each TestResult
5126 (StatusResourceBuild): add link from the per-build page
5128 2004-10-15 Brian Warner <warner@lothar.com>
5130 * buildbot/process/step_twisted.py (Trial.createSummary): parse
5131 the 'problems' portion of stdout, add TestResults to our build
5132 * buildbot/test/test_twisted.py (Parse.testParse): test it
5134 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
5135 to retrieve a dict of accumulated test results
5136 (ITestResult): define what a single test result can do
5137 * buildbot/status/builder.py (TestResult): implement ITestResult
5138 (BuildStatus.getTestResults): retrieve dict of TestResults
5139 (BuildStatus.addTestResult): add TestResults
5140 * buildbot/test/test_status.py (Results.testAddResults): test it
5142 2004-10-14 Brian Warner <warner@lothar.com>
5144 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
5145 instead of os.system("rm -rf") for win32 portability
5147 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
5148 SignalMixin instead of starting/stopping the reactor, which is
5149 likely to cause problems with other tests
5151 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
5152 self.copyComplete() call. Yoz Grahame makes the catch.
5154 * contrib/windows/buildbot.bat: helper script to deal with path
5155 issues. Thanks to Yoz Grahame.
5157 * buildbot/master.py (BuildMaster.startService): don't register a
5158 SIGHUP handler if the signal module has no SIGHUP attribute.
5159 Apparently win32 does this.
5161 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
5163 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
5164 test if the reactor can't offer UNIX sockets
5166 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
5167 error introduced in the last commit. We really need that
5170 2004-10-12 Brian Warner <warner@lothar.com>
5172 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
5173 when describing a maildir source. Thanks to Stephen Davis.
5175 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
5178 * buildbot/scripts/runner.py (createMaster): install Makefile too
5179 (start): add --no_save to 'start' command
5180 * buildbot/scripts/sample.mk: simple convenience Makefile with
5181 start/stop/reload targets
5183 * buildbot/__init__.py (version): bump to 0.6.0+ while between
5186 2004-09-30 Brian Warner <warner@lothar.com>
5188 * setup.py: Releasing buildbot-0.6.0
5190 2004-09-30 Brian Warner <warner@lothar.com>
5192 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
5193 test_trial.py from the source tarball until support is complete.
5195 * NEWS: update for 0.6.0 release
5196 * buildbot/__init__.py (version): same
5199 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
5200 'source' command to tell users where to get the Buildbot source
5202 * docs/examples/*.cfg: update to modern standards
5204 * NEWS: update for release
5206 * buildbot/scripts/runner.py (createMaster): remove the
5207 -shutdown.tap stuff now that it isn't necessary
5209 (start): launch buildbot.tap, not buildbot-shutdown.tap
5212 * buildbot/status/mail.py (Domain): shorten class name
5213 (MailNotifier): if lookup= is a string, pass it to Domain()
5214 * buildbot/test/test_status.py (Mail.testBuild1): new class name
5215 (Mail.testBuild2): test the string-to-Domain shortcut
5216 (Mail.testMail): fix test
5219 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
5222 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
5223 more attributes on load
5224 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
5225 to accomodate the whole waterfall page at once, and the thrashing
5226 results in a lot of unnecessary loads
5227 (BuildStatus.saveYourself): use binary pickles, not fluffy text
5228 (BuilderStatus.saveYourself): same
5229 (BuilderStatus.eventGenerator): stop generating on the first missing
5230 build. We assume that saved builds are deleted oldest-first.
5231 (BuildStepStatus.__getstate__): .progress might not exist
5233 * buildbot/changes/changes.py (ChangeMaster): make it
5234 serializable, in $masterdir/changes.pck
5235 (ChangeMaster.stopService): save on shutdown
5236 * buildbot/master.py (BuildMaster.loadChanges): load at startup
5237 * buildbot/test/test_config.py: load Changes before config file
5240 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
5241 "Oh my god, you killed the command" header on a separate line
5243 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
5244 skip over corrupted build pickles
5245 (BuilderStatus.getFullBuildByNumber): same
5246 (BuilderStatus.eventGenerator): skip over unavailable builds
5247 (BuildStatus.saveYourself): save builds to a .tmp file first, then
5248 do an atomic rename. This prevents a corrupted pickle when some
5249 internal serialization error occurs.
5250 (BuilderStatus.saveYourself): same
5252 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
5253 the timeout for shell commands, it got lost somehow
5255 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
5256 run out of build steps, return the rest of the builder events
5258 * buildbot/interfaces.py (IBuilderControl.ping): add method
5260 * buildbot/process/builder.py (BuilderControl.ping): move
5261 slave-ping to BuilderControl, and fix the failure case in the
5262 process (Event.finish() is the verb, Event.finished is the noun).
5264 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
5265 through the BuilderControl instead of the BuilderStatus
5266 (EventBox): add adapter for builder.Event, allowing builder events to
5267 be displayed in the waterfall display
5269 * buildbot/master.py (BotMaster.stopService): add a 'master
5270 shutdown' event to the builder's log
5271 (BuildMaster.startService): and a 'master started' on startup
5273 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
5274 builder events into the BuildStep event stream
5275 (Status.builderAdded): add a 'builder created' event
5278 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
5279 command to announce the completion of a running build
5280 (IrcStatusBot.command_FORCE): announce when the build finishes
5282 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
5283 don't evict unfinished builds from the cache: they must stay in
5284 the full-cache until their logfiles have stopped changing. Make
5285 sure the eviction loop terminates if an unfinished build was hit.
5286 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
5287 This lets exceptions be dumped in an email status message. Really
5288 we need LogFiles which contain both text and HTML, instead of two
5290 (BuildStatus.__getstate__): handle self.finished=False
5291 (Status.builderAdded): if the pickle is corrupted, abandon the
5292 history and create a new BuilderStatus object.
5294 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
5295 self.progress attribute, helped one test which doesn't fully set
5296 up the Build object.
5298 * buildbot/interfaces.py (IStatusLogStub): split out some of the
5299 IStatusLog methods into an Interface that is implemented by "stub"
5300 logs, for which all the actual text chunks are on disk (in the
5301 pickled Build instance). To show the log contents, you must first
5302 adapt the stub log to a full IStatusLog object.
5304 * buildbot/status/builder.py (LogFileStub): create separate stub
5305 log objects, which can be upgraded to a real one if necessary.
5306 (LogFile): make them persistable, and let them stubify themselves
5308 (BuildStepStatus): same
5310 (BuildStatus.saveYourself): save the whole build out to disk
5311 (BuilderStatus): make it persistable
5312 (BuilderStatus.saveYourself): save the builder to disk
5313 (BuilderStatus.addFullBuildToCache): implement two caches which
5314 hold Build objects: a small one which holds full Builds, and a
5315 larger one which holds "stubbed" Builds (ones with their LogFiles
5316 turned into LogFileStubs). This reduces memory usage by the
5317 buildmaster by not keeping more than a few (default is 2) whole
5318 build logs in RAM all the time.
5319 (BuilderStatus.getBuild): rewrite to pull from disk (through the
5321 (BuilderStatus.eventGenerator): rewrite since .builds went away
5322 (BuilderStatus.buildStarted): remove the .builds array. Add the
5323 build to the "full" cache when it starts.
5324 (BuilderStatus._buildFinished): save the build to disk when it
5326 (Status): give it a basedir (same as the BuildMaster's basedir)
5327 where the builder pickles can be saved
5328 (Status.builderAdded): create the BuilderStatus ourselves, by
5329 loading a pickle from disk (or creating a new instance if there
5330 was none on disk). Return the BuilderStatus so the master can glue
5331 it into the new Builder object.
5333 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
5334 all BuilderStatuses to save themselves out to disk. This is in
5335 lieu of saving anything important in the main Application pickle
5336 (the -shutdown.tap file).
5337 (BuildMaster.__init__): give Status() a basedir for its files
5338 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
5339 to get the BuilderStatus, then give it to the Builder (instead of
5340 doing it the other way around). It's ok if the status announces
5341 the new Builder before it's really ready, as the outside world can
5342 only see the BuilderStatus object anyway (and it is ready before
5343 builderAdded returns). Use the builder's "builddir" (which
5344 normally specifies where the slave will run the builder) as the
5345 master's basedir (for saving serialized builds).
5347 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
5348 coerce the logfile to IStatusLog before trying to get the text
5349 chunks out of it. This will pull the full (non-stubified) Build in
5350 from disk if necessary.
5351 (TextLog): fix the adapter registration
5353 * buildbot/test/test_control.py (Force.setUp): create the basedir
5354 * buildbot/test/test_web.py: same
5355 * buildbot/test/test_vc.py (SetupMixin.setUp): same
5356 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
5357 * buildbot/test/test_run.py (Run.testMaster): same
5358 (Status.setUp): same
5360 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
5362 * buildbot/status/html.py (Waterfall.__init__): store actual
5363 allowForce flag passed in rather than using True for everyone;
5364 make sure setting it to False doesn't cause a NameError
5366 (StatusResourceBuilder.__init__) add the builder name to the page
5368 (StatusResourceBuilder.body) move HTML generation for a name/value
5369 row into a helper method (StatusResourceBuilder.make_row); only
5370 generate the "Force Build" form if allowForce was True and the
5371 slave is connected. Use class attributes in the generated HTML to
5372 spread a little CSS-joy.
5374 2004-09-28 Brian Warner <warner@lothar.com>
5376 * buildbot/process/step_twisted.py (Trial.createSummary): fix
5377 warning-scanner to not ignore things like
5378 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
5380 * buildbot/status/html.py (StatusResource.control): add some
5381 class-level values for .control in an attempt to make upgrading
5384 * buildbot/util.py (ComparableMixin): survive missing attributes,
5385 such as when a class is modified and we're comparing old instances
5388 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
5389 failure handling, remove a redundant try/except block. Don't
5390 return the full traceback to the IRC channel.
5391 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
5392 error messages. Get ETA properly.
5394 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
5395 the reason, since (at least) IRC message will have <> in them.
5396 (StatusResourceBuilder.__init__): take an IBuilderControl
5397 (StatusResourceBuilder.force): use the IBuilderControl we get in
5398 the constructor instead of trying to make our own. Catch the
5399 new exceptions and ignore them for now (until we make an
5400 intermediate web page where we could show the error message)
5401 (StatusResource): create with an IControl, use it to give an
5402 IBuilderControl to all children
5403 (Waterfall): take an allowForce= option, pass an IControl object
5404 to StatusResource if it is True
5406 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
5408 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5409 catch new exceptions and return string forms
5411 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
5412 * buildbot/process/builder.py (Builder.forceBuild): raise them
5413 * buildbot/test/test_control.py (Force.testNoSlave): new test
5414 (Force.testBuilderInUse): same
5417 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
5419 * buildbot/test/test_run.py: use IControl
5420 * buildbot/test/test_vc.py: same
5422 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
5423 to use IControl. Still offline.
5424 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
5426 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
5427 who=None so periodic builds don't send out status mail
5428 (Builder.forceBuild): include reason in the log message
5429 (BuilderControl.forceBuild): rename 'name' to 'who'
5431 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
5432 'who' parameter, but make it None by default so builds forced by
5433 slave admins don't cause status mail to be sent to anybody
5434 (BotMaster.forceBuild): same. this method is deprecated.
5435 (DebugPerspective.perspective_forceBuild): same, use IControl.
5436 (DebugPerspective.perspective_fakeChange): use IControl..
5437 (Dispatcher.requestAvatar): .. so don't set .changemaster
5439 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
5440 parameter to avoid confusion with the name of the builder
5443 * buildbot/status/mail.py: refine comment about needing 2.3
5445 * buildbot/status/html.py: move all imports to the top
5447 * buildbot/test/test_control.py: test new interfaces
5448 * buildbot/test/test_run.py (Status): handle new interfaces
5449 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
5451 * buildbot/process/base.py (BuildControl): implement IBuildControl
5452 and its lonely getStatus() method
5454 * buildbot/process/builder.py (BuilderControl): implement
5455 IBuilderControl, obtained by adapting the Builder instance
5456 (Builder.startBuild): return a BuilderControl instead of a
5457 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
5458 accomplish the same thing.
5460 * buildbot/master.py: move all import statements to the top
5461 (Control): implement IControl, obtained by adapting the
5462 BuildMaster instance.
5464 * buildbot/interfaces.py: add IControl, IBuilderControl, and
5465 IBuildControl. These are used to force builds. Eventually they
5466 will provide ways to reconfigure the Builders, pause or abandon a
5467 Build, and perhaps control the BuildMaster itself.
5469 2004-09-26 Brian Warner <warner@lothar.com>
5471 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
5472 ends up comparing us against something without a .__class__
5474 2004-09-24 Brian Warner <warner@lothar.com>
5476 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
5479 * Makefile: add 'deb-snapshot' target, to create a timestamped
5482 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
5484 2004-09-23 Brian Warner <warner@lothar.com>
5486 * buildbot/__init__.py (version): move version string here
5487 * setup.py: get version string from buildbot.version
5488 * buildbot/status/html.py (WaterfallStatusResource.body): add
5489 buildbot version to the page footer
5490 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
5493 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
5494 slaves, let the second know where the first one is coming from
5495 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
5496 see our exceptions. It would be nice if there were a way to just
5497 send them the exception type and value, not the full traceback.
5500 * buildbot/status/mail.py (MailNotifier): add a new argument
5501 sendToInterestedUsers=, which can be set to False to disable the
5502 usual send-to-blamelist behavior.
5503 (top): handle python-2.2 which has no email.MIMEMultipart
5504 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
5505 (MailNotifier.disownServiceParent): unsubscribe on removal
5507 * buildbot/test/test_status.py (Mail.testBuild2): test it
5510 * buildbot/status/progress.py (Expectations.wavg): tolerate
5511 current=None, which happens when steps start failing badly
5512 * buildbot/test/test_status.py (Progress.testWavg): test for it
5514 * buildbot/process/step.py (SVN.startVC): when the (old) slave
5515 doesn't understand args['revision'], emit a warning instead of
5516 bailing completely. Updating to -rHEAD is probably close enough.
5518 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
5520 * buildbot/test/test_status.py: at least import bb.status.client
5521 even if we don't have any test coverage for it yet
5523 * contrib/svn_buildbot.py: don't require python2.3
5524 (main): wait, do require it (for sets.py), but explain how to
5525 make it work under python2.2
5527 2004-09-23 Brian Warner <warner@lothar.com>
5529 * contrib/svn_buildbot.py: include the revision number in the Change
5531 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
5532 using util.now() because FreshCVS is a realtime service
5534 * buildbot/status/event.py: delete dead code
5535 * buildbot/process/step.py: don't import dead Event class
5536 * buildbot/process/step_twisted.py: same
5537 * buildbot/status/builder.py: same
5538 * buildbot/status/client.py: same
5540 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
5542 * buildbot/changes/changes.py (Change): set .when from an __init__
5543 argument (which defaults to now()), rather than having
5544 ChangeMaster.addChange set it later.
5545 (ChangeMaster.addChange): same
5547 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
5548 (parseSyncmail): same. Just use util.now() for now.
5549 (parseBonsaiMail): parse the timestamp field for when=
5551 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
5552 instead of setting .when after the fact
5556 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
5557 results when the target project uses retrial. Still under
5559 * buildbot/test/test_trial.py: same
5561 2004-09-21 Brian Warner <warner@lothar.com>
5563 * buildbot/status/mail.py (MailNotifier.__init__): include
5564 success/warnings/failure in the Subject line
5565 (MailNotifier.buildMessage): add the buildbot's URL to the body,
5566 use step.logname for the addLogs=True attachment filenames
5567 * buildbot/test/test_status.py (Mail): test Subject lines
5568 (Mail.testLogs): test attachment filenames
5570 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
5571 accept a 'who' argument from the debug tool
5572 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
5573 * contrib/debug.glade: add text box to set 'who'
5575 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
5576 .getBuilderName with .getBuilder().getName(), more flexible
5577 (IStatusLog.getName): logs have short names, but you can prefix
5578 them with log.getStep().getName() to make them more useful
5579 * buildbot/status/builder.py: same
5580 * buildbot/status/client.py: same
5581 * buildbot/status/html.py: same
5582 * buildbot/test/test_run.py (Status.testSlave): same
5583 * buildbot/process/step.py: tweak logfile names
5585 * buildbot/status/mail.py (MailNotifier): add lookup, change
5586 argument to extraRecipients. The notifier is now aimed at sending
5587 mail to the people involved in a particular build, with additional
5588 constant recipients as a secondary function.
5590 * buildbot/test/test_status.py: add coverage for IEmailLookup,
5591 including slow-lookup and failing-lookup. Make sure the blamelist
5592 members are included.
5594 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
5595 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
5596 (IBuildStatus.getInterestedUsers): new method
5597 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
5598 * buildbot/status/client.py (remote_getResponsibleUsers): same
5599 * buildbot/status/html.py (StatusResourceBuild.body): same
5600 * buildbot/test/test_run.py (Status.testSlave): same
5602 2004-09-20 Brian Warner <warner@lothar.com>
5604 * docs/users.xhtml: update concepts
5606 * Makefile: add a convenience makefile, for things like 'make
5607 test'. It is not included in the source tarball.
5609 2004-09-16 Brian Warner <warner@lothar.com>
5611 * NEWS: mention /usr/bin/buildbot, debian/*
5613 * debian/*: add preliminary debian packaging. Many thanks to
5614 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
5615 it considerably since it left their hands, I am responsible for
5616 all breakage that's resulted.
5618 * bin/buildbot: create a top-level 'buildbot' command, to be
5619 installed in /usr/bin/buildbot . For now it's just a simple
5620 frontend to mktap/twistd/kill, but eventually it will be the entry
5621 point to the 'try' command and also a status client. It is also
5622 intended to support the upcoming debian-packaging init.d scripts.
5623 * buildbot/scripts/runner.py: the real work is done here
5624 * buildbot/scripts/__init__.py: need this too
5625 * buildbot/scripts/sample.cfg: this is installed in new
5626 buildmaster directories
5627 * setup.py: install new stuff
5629 2004-09-15 Brian Warner <warner@lothar.com>
5631 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
5632 'file:' schema (the version shipped with OS-X was built without the
5634 (SetupMixin.tearDown): stop the goofy twisted.web timer which
5635 updates the log-timestamp, to make sure it isn't still running after
5638 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
5639 values to the config file.
5640 * docs/examples/hello.cfg: add examples
5641 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
5642 * buildbot/status/builder.py (Status.getProjectURL): implement them
5643 * buildbot/master.py (BuildMaster.loadConfig): set them from config
5644 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
5645 * buildbot/status/html.py (WaterfallStatusResource): display them
5648 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
5649 certain error cases don't suffer a secondary exception.
5650 (top): Skip tests if the corresponding VC tool is not installed.
5652 * buildbot/process/factory.py (Trial): introduce separate
5653 'buildpython' and 'trialpython' lists, since trialpython=[] is
5654 what you want to invoke /usr/bin/python, whereas ./setup.py is
5655 less likely to be executable. Add env= parameter to pass options
5656 to test cases (which is how I usually write tests, I don't know if
5657 anyone else does it this way).
5659 * buildbot/process/step_twisted.py (Trial): handle python=None.
5660 Require 'testpath' be a string, not a list. Fix tests= typo.
5661 (Trial.start): sanity-check any PYTHONPATH value for stringness.
5663 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
5664 way to deal with the possibility of removing the disconnect notify
5666 (CVS): add a 'login' parameter to give a password to 'cvs login',
5667 commonly used with pserver methods (where pw="" or pw="guest")
5669 * buildbot/slave/commands.py (SourceBase): move common args
5670 extraction and setup() to __init__, so everything is ready by the
5671 time setup() is called
5672 (CVS.start): call 'cvs login' if a password was supplied
5673 (ShellCommand): special-case PYTHONPATH: prepend the master's
5674 value to any existing slave-local value.
5676 * buildbot/process/builder.py (Builder.updateBigStatus): if we
5677 don't have a remote, mark the builder as Offline. This whole
5678 function should probably go away and be replaced by individual
5680 (Builder.buildFinished): return the results to the build-finished
5681 deferred callback, helps with testing
5683 2004-09-14 Brian Warner <warner@lothar.com>
5685 * buildbot/test/test_vc.py: put all the repositories needed to run
5686 the complete tests into a single small (1.3MB) tarball, so I can
5687 make that tarball available on the buildbot web site. Test HTTP
5688 access (for Arch and Darcs) by spawning a temporary web server
5689 while the test runs.
5691 * docs/users.xhtml: new document, describe Buildbot's limited
5692 understanding of different human users
5694 * buildbot/test/test_vc.py: rearrange test cases a bit
5696 * buildbot/process/step_twisted.py (Trial): handle testpath=
5697 * buildbot/process/factory.py (Trial): update to use step.Trial
5699 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
5701 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
5702 the overall build text (which gives you 'failed 2 tests' rather
5704 (BuildStepStatus.text2): default to [], not None
5706 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
5709 2004-09-12 Brian Warner <warner@lothar.com>
5711 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
5712 log the whole exception if it's just an AttributeError (old slave)
5714 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
5715 so (e.g.) sub-commands can be run in the right directory.
5716 (ShellCommand.start): accept an optional errorMessage= argument
5717 to make life easier for SVN.start
5718 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
5720 (ShellCommand.start): move ['dir'] compatibility hack..
5721 (RemoteShellCommand.start): .. to here so everyone can use it
5723 * buildbot/process/step_twisted.py (Trial): use .workdir
5725 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
5726 text displayed when debuild fails completely
5727 (Trial): snarf _trial_temp/test.log from the slave and display it
5729 2004-09-11 Brian Warner <warner@lothar.com>
5731 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
5733 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
5734 set to 'twisted', so --recurse can find twisted/web/test/*, etc
5736 * buildbot/process/step.py (ShellCommand): call .createSummary
5737 before .evaluateCommand instead of the other way around. This
5738 makes it slightly easier to count warnings and then use that to
5739 set results=WARNINGS
5740 * buildbot/process/step_twisted.py: cosmetic, swap the methods
5742 * buildbot/process/base.py (Build.buildFinished): update status
5743 before doing progress. It's embarrassing for the build to be stuck
5744 in the "building" state when an exceptions occurs elsewhere..
5746 * buildbot/status/progress.py (Expectations.expectedBuildTime):
5747 python2.2 doesn't have 'sum'
5749 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
5750 to prevent clients from accidentally sorting it
5752 * buildbot/master.py (Manhole): add username/password
5753 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
5754 c['manholePort'], deprecate old usage
5755 * docs/config.xhtml: document c['manhole']
5756 * docs/examples/hello.cfg: show example of using a Manhole
5759 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
5760 pretend the slave is up to date
5762 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
5763 the module, overlaps with 'log', the local variable
5765 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
5767 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
5768 new method to let Steps find out the version of their
5769 corresponding SlaveCommand.
5770 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
5771 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
5772 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
5774 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
5775 (Arch.startVC): same
5776 (P4Sync.startVC): same
5778 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
5779 Deferred so we can catch errors in remote_startCommand
5780 (RemoteShellCommand.start): same
5782 * docs/examples/twisted_master.cfg: update sample config file
5784 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
5785 after connectionMade() is called, not before. Close stdin at that
5788 * buildbot/process/process_twisted.py: update to use Trial, clean
5789 up argument passing (move to argv arrays instead of string
5792 * buildbot/process/step_twisted.py (Trial): new step to replace
5793 RunUnitTests, usable by any trial-using project (not just
5794 Twisted). Arguments have changed, see the docstring for details.
5796 * buildbot/process/base.py (Build.startBuild): this now returns a
5797 Deferred. Exceptions that occur during setupBuild are now
5798 caught better and lead to fewer build_status weirdnesses, like
5799 finishing a build that was never started.
5800 (Build.buildFinished): fire the Deferred instead of calling
5801 builder.buildFinished directly. The callback argument is this
5802 Build, everything else can be extracted from it, including the
5803 new build.results attribute.
5804 * buildbot/process/builder.py (Builder.startBuild): same
5805 (Builder.buildFinished): same, extract results from build
5807 * buildbot/process/step.py (ShellCommands): remove dead code
5809 2004-09-08 Brian Warner <warner@lothar.com>
5811 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
5812 doesn't try to use the leftover patched workdir
5813 (SourceStamp): test source-stamp computation for CVS and SVN
5815 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
5816 patched workdir ('touch .buildbot-patched') so we don't try to
5818 (SourceBase.start): add ['revision'] for all Source steps
5819 (CVS): change args: use ['branch'] for -r, remove ['files']
5820 (CVS.buildVC): fix revision/branch stuff
5821 (SVN): add revision stuff
5823 * buildbot/process/step.py (BuildStep.__init__): reject unknown
5824 kwargs (except 'workdir') to avoid silent spelling errors
5825 (ShellCommand.__init__): same
5826 (Source): new base class for CVS/SVN/etc. Factor out everything
5827 common, add revision computation (perform the checkout with a -D
5828 DATE or -r REVISION that gets exactly the sources described by the
5829 last Change), overridable with step.alwaysUseLatest. Add patch
5830 handling (build.getSourceStamp can trigger the use of a base
5831 revision and a patch).
5832 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
5833 * docs/steps.xhtml: update docs
5834 * docs/source.xhtml: mention .checkoutDelay
5835 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
5837 * buildbot/process/base.py (Build.setSourceStamp): add a
5838 .sourceStamp attribute to each Build. If set, this indicates that
5839 the build should be done with something other than the most
5840 recent source tree. This will be used to implement "try" builds.
5841 (Build.allChanges): new support method
5842 (Build.lastChangeTime): remove, functionality moved to Source steps
5843 (Build.setupBuild): copy the Step args before adding ['workdir'],
5844 to avoid modifying the BuildFactory (and thus triggering spurious
5848 * buildbot/status/html.py: rename s/commits/changes/
5849 (StatusResourceChanges): same
5850 (CommitBox.getBox): same, update URL
5851 (WaterfallStatusResource): same
5852 (StatusResource.getChild): same
5854 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
5855 * contrib/debug.glade: add optional 'revision' to the fakeChange
5857 * buildbot/changes/changes.py (html_tmpl): display .revision
5858 (ChangeMaster.addChange): note .revision in log
5859 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
5860 accept a ['revision'] attribute
5862 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
5864 * buildbot/master.py (BotMaster.getPerspective): update the
5865 .connected flag in SlaveStatus when it connects
5866 (BotMaster.detach): and when it disconnects
5867 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
5868 (BuildMaster.loadConfig_Builders): walk old list correctly
5870 * buildbot/test/test_config.py: fix prefix= usage
5872 2004-09-06 Brian Warner <warner@lothar.com>
5876 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
5877 poll a P4 depot looking for recent changes. Thanks to Dave
5878 Peticolas for the contribution. Probably needs some testing after
5881 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
5882 requires manual client setup for each buildslave. Rather
5883 experimental. Thanks again to Dave Peticolas.
5884 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
5886 * buildbot/changes/changes.py (Change): add a .revision attribute,
5887 which will eventually be used to generate source-stamp values.
5889 * buildbot/process/step.py (RemoteCommand.start): use
5890 notifyOnDisconnect to notice when we lose the slave, then treat it
5891 like an exception. This allows LogFiles to be closed and the build
5892 to be wrapped up normally. Be sure to remove the disconnect
5893 notification when the step completes so we don't accumulate a
5894 bazillion such notifications which will fire weeks later (when the
5895 slave finally disconnects normally). Fixes SF#915807, thanks to
5896 spiv (Andrew Bennetts) for the report.
5897 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
5898 really isn't Logged- specific
5899 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
5900 header, since it's almost always going to be appended to an
5902 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
5903 update test to handle use of notifyOnDisconnect
5905 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
5906 don't clear .ETA and .currentBuild when going offline, let the
5907 current build clean up after itself
5909 * buildbot/process/builder.py (Builder.detached): wait a moment
5910 before doing things like stopping the current build, because the
5911 current step will probably notice the disconnect and cleanup the
5913 * buildbot/test/test_run.py (Status.tearDown): update test to
5914 handle asynchronous build-detachment
5916 * buildbot/process/base.py (Build.stopBuild): minor shuffles
5918 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
5919 hush a debug message
5921 2004-09-05 Brian Warner <warner@lothar.com>
5923 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
5924 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
5925 kernels do this: the fcntl module has the F_NOTIFY constant, but
5926 the kernel itself doesn't support the operation. Thanks to Olly
5927 Betts for spotting the problem.
5929 * buildbot/process/step.py (Darcs): new source-checkout command
5930 (Arch): new source-checkout command
5931 (todo_P4): fix constructor syntax, still just a placeholder
5932 * buildbot/test/test_vc.py (VC.testDarcs): test it
5933 (VC.testDarcsHTTP): same, via localhost HTTP
5935 (VC.testArchHTTP): same
5936 * NEWS: mention new features
5938 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
5939 which tells the step to stash stdout text locally (in .stdout).
5940 Slave-side Commands can use this to make decisions based upon the
5941 output of the the ShellCommand (not just the exit code).
5942 (Darcs): New source-checkout command
5943 (Arch): New source-checkout command, uses .keepStdout in one place
5944 where it needs to discover the archive's default name.
5946 * docs/steps.xhtml: Document options taken by Darcs and Arch.
5947 * docs/source.xhtml: add brief descriptions of Darcs and Arch
5948 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
5950 * buildbot/process/step.py (ShellCommand.describe): add an
5951 alternate .descriptionDone attribute which provides descriptive
5952 text when the step is complete. .description can be ["compiling"],
5953 for use while the step is running, then .descriptionDone can be
5954 ["compile"], used alone when the step succeeds or with "failed" when
5955 it does not. Updated other steps to use the new text.
5956 * buildbot/process/step_twisted.py: same
5957 * buildbot/test/test_run.py: update tests to match
5959 2004-08-30 Brian Warner <warner@lothar.com>
5961 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
5962 (CVS.__init__): send 'patch' argument to slave
5963 (CVS.start): don't create the LoggedRemoteCommand until start(),
5964 so we can catch a .patch added after __init__
5965 (SVN.__init__): add 'patch' to SVN too
5968 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
5969 argument, to let commands push data into the process' stdin pipe.
5970 Move usePTY to a per-instance attribute, and clear it if 'stdin'
5971 is in use, since closing a PTY doesn't really affect the process
5972 in the right way (in particular, I couldn't run /usr/bin/patch
5974 (SourceBase.doPatch): handle 'patch' argument
5976 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
5979 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
5980 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
5982 * buildbot/master.py (BotPerspective.got_commands): get command
5983 versions from slave, give to each builder
5984 * buildbot/process/builder.py (Builder.attached): stash slave
5985 command versions in .remoteCommands
5987 * docs/steps.xhtml: bring docs in-line with reality
5989 * buildbot/process/step.py (CVS.__init__): more brutal
5990 compatibility code removal
5991 (SVN.__init__): same
5993 * buildbot/slave/commands.py (SlaveShellCommand): update docs
5994 (SlaveShellCommand.start): require ['workdir'] argument, remove
5995 the ['dir'] fallback (compatibility will come later)
5996 (SourceBase): update docs
5997 (SourceBase.start): remove ['directory'] fallback
6000 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
6001 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6002 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
6004 * buildbot/process/step.py (RemoteShellCommand.__init__): add
6005 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
6006 code.. I will figure out 0.5.0-compatibility hooks later)
6008 2004-08-30 Brian Warner <warner@lothar.com>
6010 * buildbot/process/process_twisted.py: rewrite in terms of new
6011 BuildFactory base class. It got significantly shorter. Yay
6014 * buildbot/process/step_twisted.py (HLint.start): fix to make it
6015 work with the new "self.build isn't nailed down until we call
6016 step.start()" scheme: specifically, __init__ is called before the
6017 build has decided on which Changes are going in, so we don't scan
6018 build.allFiles() for .xhtml files until start()
6019 (HLint.commandComplete): use getText(), not getStdout()
6020 (RunUnitTests.start): same: don't use .build until start()
6021 (RunUnitTests.describe): oops, don't report (None) when using
6023 (RunUnitTests.commandComplete): use getText()
6024 (RunUnitTests.createSummary): same
6025 (BuildDebs.commandComplete): same
6027 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
6028 set args['command'] until start(), since our BuildStep is allowed
6029 to change their mind up until that point
6030 (TreeSize.commandComplete): use getText(), not getStdout()
6032 * docs/examples/twisted_master.cfg: update to current standards
6034 * docs/factories.xhtml: update
6035 * buildbot/process/factory.py: implement all the common factories
6036 described in the docs. The Trial factory doesn't work yet, and
6037 I've probably broken all the process_twisted.py factories in the
6038 process. There are compatibility classes left in for things like
6039 the old BasicBuildFactory, but subclasses of them are unlikely to
6041 * docs/examples/glib_master.cfg: use new BuildFactories
6042 * docs/examples/hello.cfg: same
6044 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
6045 explicit 'workdir' args
6047 * buildbot/process/base.py (BuildFactory): move factories to ..
6048 * buildbot/process/factory.py (BuildFactory): .. here
6049 * buildbot/process/process_twisted.py: handle move
6050 * buildbot/test/test_config.py: same
6051 * buildbot/test/test_run.py: same
6052 * buildbot/test/test_steps.py: same
6053 * buildbot/test/test_vc.py: same
6054 * docs/factories.xhtml: same
6056 * NEWS: mention config changes that require updating master.cfg
6058 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
6059 argument to all steps that weren't given one already, pointing at
6060 the "build/" directory.
6062 * docs/examples/hello.cfg: remove explicit 'workdir' args
6064 * docs/factories.xhtml: document standard BuildFactory clases,
6065 including a bunch which are have not yet been written
6067 2004-08-29 Brian Warner <warner@lothar.com>
6069 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
6070 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
6071 buildbot.status.builder so they aren't quite so internal
6072 * buildbot/process/base.py, buildbot/process/builder.py: same
6073 * buildbot/process/maxq.py, buildbot/process/step.py: same
6074 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
6075 * buildbot/status/mail.py, buildbot/test/test_run.py: same
6076 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
6078 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
6079 to handle new getLogs()-returns-list behavior
6080 (StatusResourceBuildStep.getChild): same
6081 (StepBox.getBox): same
6082 (WaterfallStatusResource.phase0): same
6084 * docs/source.xhtml: document how Buildbot uses version-control
6085 systems (output side: how we get source trees)
6086 * docs/changes.xhtml: rename from sources.xhtml, documents VC
6087 systems (input side: how we learn about Changes)
6089 * buildbot/master.py (Manhole): use ComparableMixin
6090 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
6091 * buildbot/changes/mail.py (MaildirSource): same
6092 * buildbot/status/client.py (PBListener): same
6093 * buildbot/status/html.py (Waterfall): same
6094 * buildbot/status/words.py (IRC): same
6096 * NEWS: start describing new features
6098 * buildbot/status/mail.py (MailNotifier): finish implementation.
6099 The message body is still a bit sparse.
6100 * buildbot/test/test_status.py (Mail): test it
6102 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
6103 and __hash__ methods I wind up adding everywhere. Specifically
6104 intended to support the buildbot config-file update scheme where
6105 we compare, say, the old list of IStatusTargets against the new
6106 one and don't touch something which shows up on both lists.
6107 * buildbot/test/test_util.py (Compare): test case for it
6109 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
6110 return a list instead of a dict
6111 (IBuildStepStatus.getLogs): same. The idea is that steps create
6112 logs with vaguely unique names (although their uniqueness is not
6113 guaranteed). Thus a compilation step should create its sole
6114 logfile with the name 'compile', and contribute it to the
6115 BuildStatus. If a step has two logfiles, try to create them with
6116 different names (like 'test.log' and 'test.summary'), and only
6117 contribute the important ones to the overall BuildStatus.
6118 * buildbot/status/builder.py (Event.getLogs): same
6119 (BuildStepStatus): fix default .text and .results
6120 (BuildStepStatus.addLog): switch to list-like .getLogs()
6121 (BuildStepStatus.stepFinished): same
6122 (BuildStatus.text): fix default .text
6123 (BuildStatus.getLogs): temporary hack to return all logs (from all
6124 child BuildStepStatus objects). Needs to be fixed to only report
6125 the significant ones (as contributed by the steps themselves)
6126 * buildbot/test/test_run.py: handle list-like .getLogs()
6127 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6129 2004-08-28 Brian Warner <warner@lothar.com>
6131 * buildbot/process/builder.py (Builder.attached): serialize the
6132 attachment process, so the attach-watcher isn't called until the
6133 slave is really available. Add detached watchers too, which makes
6136 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
6138 * buildbot/test/test_swap.py: remove dead code
6140 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
6141 (ShellCommand.start): treat errors in _startCommand/spawnProcess
6142 sort of as if the command being run exited with a -1. There may
6143 still be some holes in this scheme.
6144 (CVSCommand): add 'revision' tag to the VC commands, make sure the
6145 -r option appears before the module list
6146 * buildbot/process/step.py (CVS): add 'revision' argument
6148 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
6149 when sending updates or stepComplete messages to the master, since
6150 we don't currently care whether they arrive or not. When we revamp
6151 the master/slave protocol to really resume interrupted builds,
6152 this will need revisiting.
6153 (lostRemote): remove spurious print
6155 * buildbot/master.py (BotPerspective.attached): serialize the
6156 new-builder interrogation process, to make testing easier
6157 (BotMaster.waitUntilBuilderDetached): convenience function
6159 * buildbot/status/builder.py (BuilderStatus): prune old builds
6160 (BuildStatus.pruneSteps): .. and steps
6161 (BuildStepStatus.pruneLogs): .. and logs
6162 (BuilderStatus.getBuild): handle missing builds
6163 * buildbot/status/html.py (StatusResourceBuild.body): display build
6164 status in the per-build page
6165 (BuildBox.getBox): color finished builds in the per-build box
6167 2004-08-27 Brian Warner <warner@lothar.com>
6169 * buildbot/status/mail.py (MailNotifier): new notification class,
6172 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
6173 variants of a common base class which handles all the mode= logic
6175 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
6177 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
6179 2004-08-26 Brian Warner <warner@lothar.com>
6181 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
6184 * buildbot/test/test_run.py: update to new Logfile interface, new
6185 buildbot.slave modules
6186 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
6188 * MANIFEST.in: new sample config file
6189 * docs/examples/hello.cfg: same
6191 * buildbot/process/step_twisted.py: remove dead import
6193 * buildbot/process/step.py (RemoteCommand.run): catch errors
6195 (RemoteCommand.remote_update): ignore updates that arrive after
6197 (RemoteCommand.remote_complete): ignore duplicate complete msgs
6198 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
6199 the responsibilities of the subclass's methods
6200 (BuildStep.failed): catch errors during failure processing
6201 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
6202 (CVS): move to a mode= argument (described in docstring), rather
6203 than the ungainly clobber=/export=/copydir= combination.
6204 (SVN): add mode= functionality to SVN too
6205 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
6207 * buildbot/process/base.py (Build.startNextStep): catch errors
6208 during s.startStep()
6210 * buildbot/clients/base.py: update to new PB client interface.
6211 gtkPanes is still broken
6213 * buildbot/bot.py, buildbot/slavecommand.py: move to..
6214 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
6215 * setup.py: add buildbot.slave module
6216 * buildbot/bb_tap.py: handle move
6217 * buildbot/slave/registry.py: place to register commands, w/versions
6218 * buildbot/slave/bot.py: major simplifications
6219 (SlaveBuilder.remote_startCommand): use registry for slave commands,
6220 instead of a fixed table. Eventually this will make the slave more
6221 extensible. Use 'start' method on the command, not .startCommand.
6222 Fix unsafeTracebacks handling (I think).
6223 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
6224 helper class with a .start method that returns a Deferred.
6225 SlaveShellCommand is the form reached by the buildmaster. Commands
6226 which use multiple ShellCommands can just chain them as Deferreds,
6227 with some helper methods in Command (_abandonOnFailure and
6228 _checkAbandoned) to bail on rc!=0.
6229 (CVSCommand): prefer new mode= argument
6230 (SVNFetch): add mode= argument
6232 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
6233 put a useful reason string on the build
6235 * buildbot/status/builder.py (LogFile): do LogFile right: move the
6236 core functionality into an IStatusLog object
6237 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
6238 * buildbot/status/html.py (TextLog): HTML-rendering goes here
6239 (StatusResourceBuild.body): use proper accessor methods
6240 * buildbot/status/client.py (RemoteLog): PB-access goes here
6241 (StatusClientPerspective.perspective_subscribe): add "full" mode,
6242 which delivers log contents too
6243 (PBListener.__cmp__): make PBListeners comparable, thus removeable
6244 * buildbot/status/event.py: remove old Logfile completely
6246 * buildbot/interfaces.py (IStatusLog.subscribe): make the
6247 subscription interface for IStatusLog subscriptions just like all
6248 other the status subscriptions
6249 (IStatusReceiver.logChunk): method called on subscribers
6251 2004-08-24 Brian Warner <warner@lothar.com>
6253 * buildbot/process/builder.py (Builder._pong): oops, ping response
6254 includes a result (the implicit None returned by remote_print).
6255 Accept it so the _pong method handles the response correctly.
6257 2004-08-06 Brian Warner <warner@lothar.com>
6259 * buildbot/test/test_config.py: update IRC, PBListener tests
6261 * buildbot/status/client.py (StatusClientPerspective): total
6262 rewrite to match new IStatus interfaces. New subscription scheme.
6263 There are still a few optimizations to make (sending down extra
6264 information with event messages so the client doesn't have to do a
6265 round trip). The logfile-retrieval code is probably still broken.
6266 Moved the PB service into its own port, you can no longer share a
6267 TCP socket between a PBListener and, say, the slaveport (this
6268 should be fixed eventually).
6269 * buildbot/clients/base.py (Client): revamp to match. still needs
6270 a lot of work, but basic event reporting works fine. gtkPanes is
6273 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
6274 instance talks to a single irc server. Threw out all the old
6275 multi-server handling code. Still need to add back in
6276 builder-control (i.e. "force build")
6278 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
6279 more random text to the as-yet-unreachable per-step page
6281 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
6282 rename to stepETAUpdate
6283 (BuildStatus.subscribe): add build-wide ETA updates
6284 (BuilderStatus.getState): remove more cruft
6285 (BuilderStatus.getCurrentBuild): remove more cruft
6286 (BuilderStatus.buildStarted): really handle tuple-subscription
6287 * buildbot/test/test_run.py (Status.testSlave): handle the
6288 stepETAUpdate rename
6290 * buildbot/master.py (BuildMaster): don't add a default
6291 StatusClientService. Don't add a default IrcStatusFactory. Both
6292 are now added through c['status'] in the config file. c['irc'] is
6293 accepted for backwards compatibility, the only quirk is you cannot
6294 use c['irc'] to specify IRC servers on ports other than 6667.
6296 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
6297 (IStatusReceiver.buildStarted): allow update-interval on subscribe
6298 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
6299 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
6302 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
6303 the buildmaster to re-read its config file
6306 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
6307 find out the port our server is running on
6308 (WebTest.test_webPathname_port): same
6310 * buildbot/test/test_config.py (testWebPortnum): test it
6311 (testWebPathname): ditto
6313 * docs/config.xhtml: document new c['status'] configuration option
6315 * buildbot/status/html.py (Waterfall): new top-level class which
6316 can be added to c['status']. This creates the Site as well as the
6317 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
6318 reachable as .parent, for everything.
6320 * buildbot/master.py (Manhole): make it a normal service Child
6321 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
6322 webPathname. It will eventually replace c['irc'] and the implicit
6323 PB listener as well. c['webPortnum'] and c['webPathname'] are left
6324 in as (deprecated) backward compatibility hooks for now.
6327 * buildbot/process/builder.py (Builder.buildFinished): don't
6328 inform out builder_status about a finished build, as it finds out
6329 through its child BuildStatus object
6331 * buildbot/status/html.py: extensive revamp. Use adapters to make
6332 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
6333 have both starting and finishing times and adjust the waterfall
6334 display accordingly, using spacers if necessary. Use SlaveStatus
6335 to get buildslave info.
6336 (StatusResourceBuildStep): new just-one-step resource, used to get
6337 logfiles. No actual href to it yet.
6339 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
6340 the time being, until I get the file-naming scheme right
6342 * buildbot/status/builder.py (Event): clean started/finished names
6343 (BuildStatus.isFinished): .finished is not None is the right test
6344 (BuildStatus.buildStarted): track started/finished times ourselves
6345 (BuilderStatus.getSlave): provide access to SlaveStatus object
6346 (BuilderStatus.getLastFinishedBuild): all builds are now in
6347 .builds, even the currently-running one. Accomodate this change.
6348 (BuilderStatus.eventGenerator): new per-builder event generator.
6349 Returns BuildStepStatus and BuildStatus objects, since they can
6350 both be adapted as necessary.
6351 (BuilderStatus.addEvent): clean up started/finished attributes
6352 (BuilderStatus.startBuild,finishBuild): remove dead code
6353 (SlaveStatus): new object to provide ISlaveStatus
6355 * buildbot/process/step.py (ShellCommand.getColor): actually
6356 return the color instead of setting it ourselves
6357 (CVS.__init__): pull .timeout and .workdir options out of
6358 **kwargs, since BuildStep will ignore them. Without this neither
6359 will be sent to the slave correctly.
6360 (SVN.__init__): same
6362 * buildbot/process/builder.py (Builder): move flags to class-level
6364 (Builder.attached): remove .remoteInfo, let the BotPerspective and
6365 SlaveStatus handle that
6367 * buildbot/process/base.py (Build.firstEvent): remove dead code
6368 (Build.stopBuild): bugfix
6370 * buildbot/changes/pb.py (PBChangeSource.describe): add method
6372 * buildbot/changes/changes.py (Change): add IStatusEvent methods
6373 (ChangeMaster.eventGenerator): yield Changes, since there are now
6374 Adapters to turn them into HTML boxes
6376 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
6377 (BotPerspective.attached): feed a SlaveStatus object
6378 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
6379 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
6381 * buildbot/interfaces.py: API additions
6382 (ISlaveStatus): place to get slave status
6384 2004-08-04 Brian Warner <warner@lothar.com>
6386 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
6387 the delay finishes, so the step is marked as SUCCESS
6389 * buildbot/test/test_run.py (Status.testSlave): cover more of
6390 IBuildStatus and IBuildStepStatus
6392 * buildbot/status/progress.py (StepProgress): move some flags to
6393 class-level attributes
6394 (StepProgress.remaining): if there are no other progress metrics
6395 to go by, fall back to elapsed time
6396 (StepProgress.setExpectations): take a dict of metrics instead of
6398 (BuildProgress.setExpectationsFrom): pull expectations from the
6399 Expectations, instead of having it push them to the BuildProgress
6400 (Expectations): move some flags to class-level attributes
6401 (Expectations.__init__): copy per-step times from the
6403 (Expectations.expectedBuildTime): new method for per-build ETA
6405 * buildbot/status/event.py (Logfile): move some flags to
6406 class-level attributes
6407 (Logfile.logProgressTo): better method name, let step set the
6408 progress axis name (instead of always being "output")
6410 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
6411 times directly, rather than depending upon the (possibly missing)
6412 .progress object. Use 'None' to indicate "not started/finished
6414 (BuildStepStatus.getExpectations): oops, return the full list of
6416 (BuilderStatus._buildFinished): append finished builds to .builds
6418 * buildbot/process/step.py (BuildStep): add separate .useProgress
6419 flag, since empty .progressMetrics[] still implies that time is a
6421 (CVS): set up the cmd in __init__, instead of waiting for start()
6423 * buildbot/process/base.py (Build.startBuild): disable the 'when'
6424 calculation, this will eventually turn into a proper sourceStamp
6425 (Build.setupBuild): tell the Progress to load from the Expectations,
6426 instead of having the Expectations stuff things into the Progress
6427 (Build.buildException): add a build-level errback to make sure the
6428 build's Deferred fires even in case of exceptions
6430 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
6432 * buildbot/process/builder.py (Builder.forceBuild): convey the
6433 reason instead of creating a fake Change
6435 * docs/examples/twisted_master.cfg: update to match reality
6437 * buildbot/test/test_config.py, buildbot/test/test_process.py:
6438 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
6439 fix or remove broken/breaking tests
6441 * buildbot/status/event.py (Logfile.__len__): remove evil method
6443 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
6444 missing .build, for test convenience
6446 * buildbot/process/step_twisted.py: import fixes
6448 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
6450 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
6451 .statusbag reference
6453 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
6454 connection at shutdown, and stop it from reconnecting
6456 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
6457 chase down remote-execution bugs
6459 * buildbot/process/step.py: more fixes, remove
6460 BuildStep.setStatus()
6461 * buildbot/status/builder.py: move setStatus() functionality into
6463 * buildbot/status/event.py: minor fixes
6465 2004-08-03 Brian Warner <warner@lothar.com>
6467 * buildbot/process/base.py, buildbot/process/builder.py
6468 * buildbot/process/step.py, buildbot/status/builder.py
6469 * buildbot/status/event.py, buildbot/test/test_run.py:
6470 fix status delivery, get a basic test case working
6471 * buildbot/master.py: finish implementing basic status delivery,
6472 temporarily disable HTML/IRC/PB status sources
6474 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
6476 * buildbot/status/progress.py (BuildProgress): remove dead code
6478 * buildbot/interfaces.py
6479 * buildbot/process/base.py, buildbot/process/builder.py
6480 * buildbot/process/step.py, buildbot/process/step_twisted.py
6481 * buildbot/status/builder.py: Complete overhaul of the all
6482 status-delivery code, unifying all types of status clients (HTML,
6483 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
6484 look like. This commit is a checkpointing of the work-in-progress:
6485 the input side is mostly done (Builders/Builds sending status
6486 to the BuilderStatus/BuildStatus objects), but the output side has
6487 not yet been started (HTML resources querying BuilderStatus
6488 objects). Things are probably very broken right now and may remain
6489 so for several weeks, I apologize for the disruption.
6491 * buildbot/status/event.py: add a setHTML method to use pre-rendered
6492 HTML as the log's contents. Currently used for exception tracebacks.
6493 * buildbot/status/progress.py: minor spelling changes
6495 2004-08-02 Brian Warner <warner@lothar.com>
6497 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
6498 in mozilla. Also added stylesheets copied from Twisted's docs.
6499 Remember that these files are meant to be run through Lore first.
6500 Thanks to Philipp Frauenfelder for the fixes.
6501 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
6502 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
6503 * docs/template.tpl: added a Lore template
6505 2004-07-29 Brian Warner <warner@lothar.com>
6507 * buildbot/interfaces.py: revamp status delivery. This is the
6508 preview: these are the Interfaces that will be provided by new
6509 Builder code, and to which the current HTML/IRC/PB status
6510 displayers will be adapted.
6512 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
6513 on the SlaveBuilder, not the Bot.
6514 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
6516 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
6517 set .usePTY on the FakeSlaveBuilder
6519 2004-07-25 Brian Warner <warner@lothar.com>
6521 * buildbot/changes/freshcvs.py: add some debug log messages
6522 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
6523 disabled 'setFilter' syntax
6524 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
6525 don't end with a slash
6527 * buildbot/process/base.py (Builder._pong_failed): add TODO note
6529 * setup.py: bump to 0.5.0+ while between releases
6531 2004-07-23 Brian Warner <warner@lothar.com>
6533 * setup.py (version): Releasing buildbot-0.5.0
6535 2004-07-23 Brian Warner <warner@lothar.com>
6537 * README: update for 0.5.0 release
6539 * NEWS: update for 0.5.0 release
6541 2004-07-22 Brian Warner <warner@lothar.com>
6543 * buildbot/slavecommand.py (ShellCommand): make usePTY a
6544 mktap-time configuration flag (--usepty=1, --usepty=0)
6545 * buildbot/bot.py: same
6547 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
6548 an 'info' directory being unwanted
6550 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
6551 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
6552 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
6553 and earlier), use a FreshCVSSourceOldcred instead.
6554 (test): simple test routine: connect to server, print changes
6556 * buildbot/changes/changes.py (Change.getTime): make it possible
6557 to print un-timestamped changes
6559 * buildbot/master.py (makeApp): delete ancient dead code
6560 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
6561 * buildbot/test/test_config.py (testFindConfigFile): test it
6563 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
6564 instead of win32 one
6567 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
6568 now takes a dictionary instead of a tuple. See docs/config.xhtml for
6571 * buildbot/process/base.py (Builder.__init__): change constructor
6572 to accept a dictionary of config data, rather than discrete
6573 name/slave/builddir/factory arguments
6575 * docs/examples/twisted_master.cfg: update to new syntax
6576 * docs/examples/glib_master.cfg: same
6577 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
6578 rough tests of the new syntax
6581 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
6582 to be an int, which means "run a web.distrib sub-server on a TCP
6583 port". This lets you publish the buildbot status page to a remote
6584 twisted.web server (using distrib.ResourceSubscription). Also
6585 rename the local attributes used to hold these web things so
6586 they're more in touch with reality.
6587 * buildbot/test/test_web.py: test webPortnum and webPathname
6588 * docs/config.xhtml: document this new use of webPathname
6590 * docs/config.xhtml: new document, slightly ahead of reality
6592 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
6593 'prefix' handling: treat it as a simple string to check with
6594 .startswith, instead of treating it as a directory. This allows
6595 sub-directories to be used. If you use prefix=, you should give it
6596 a string that starts just below the CVSROOT and ends with a slash.
6597 This prefix will be stripped from all filenames, and filenames
6598 which do not start with it will be ignored.
6600 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
6602 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
6603 and --exclude (inverse of --include). SVN post-commit hooks
6604 now have total control over which changes get sent to buildbot and which
6607 2004-07-10 Brian Warner <warner@lothar.com>
6609 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
6610 test case to match new API
6612 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
6613 which crashed HTML display when self.entries=[] (needed to
6614 distinguish between [], which means "no entries yet", and None,
6615 which means "the entries have been swapped out to disk, go fetch
6618 2004-07-04 Brian Warner <warner@lothar.com>
6620 * buildbot/process/step_twisted.py (countFailedTests): Count
6621 skips, expectedFailures, and unexpectedSuccesses. Start scanning
6622 10kb from the end because any import errors are wedged there and
6623 they would make us think the test log was unparseable.
6624 (RunUnitTests.finishStatus): add skip/todo counts to the event box
6626 2004-06-26 Brian Warner <warner@lothar.com>
6628 * buildbot/process/step_twisted.py (RemovePYCs): turn the
6629 delete-*.pyc command into an actual BuildStep, so we can label it
6631 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6632 (FullTwistedBuildFactory): same
6634 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
6636 * contrib/fakechange.py: Add an errback when sending the fake
6637 change, so we know it didn't work.
6639 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
6641 * buildbot/process/step_twisted.py: Delete *.pyc files before
6642 calling trial, so it doesn't catch any old .pyc files whose .py
6643 files have been moved or deleted.
6645 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
6646 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
6647 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
6648 instead of ["twisted.test"], so that the end result is "trial -R
6651 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
6652 regular expression to match filenames that should be ignored when
6653 changed. Also add a --revision parameter that specifies the
6654 revision to examine, which is useful for debugging.
6656 2004-06-25 Brian Warner <warner@lothar.com>
6658 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
6659 summary of warnings (like DeprecationWarnings), next to the
6662 2004-05-13 Brian Warner <warner@lothar.com>
6664 * docs/examples/twisted_master.cfg: enable the win32 builder, as
6665 we now have a w32 build slave courtesy of Mike Taylor.
6667 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
6668 so broken. Fixed a race condition that tripped up interlocked
6669 builds and caused the status to be stuck at "Interlocked" forever.
6670 The twisted buildbot's one interlocked build just so happened to
6671 never hit this case until recently (the feeding builds both pass
6672 before the interlocked build is attempted.. usually it has to wait
6674 (Builder._pong_failed): fix method signature
6676 * setup.py: bump to 0.4.3+ while between releases
6678 2004-04-30 Brian Warner <warner@lothar.com>
6680 * setup.py (version): Releasing buildbot-0.4.3
6682 2004-04-30 Brian Warner <warner@lothar.com>
6684 * MANIFEST.in: add the doc fragments in docs/*.xhtml
6686 * README: update for 0.4.3 release
6688 * NEWS: update for 0.4.3 release
6690 * buildbot/master.py (BuildMaster.__getstate__): make sure
6691 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
6693 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
6694 .trial as a class attribute, for upgrade from 0.4.2
6696 * buildbot/changes/changes.py (Change.links): add .links for
6699 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
6700 .textWatchers and .htmlWatchers at save time, since they are both
6701 volatile, should allow smooth 0.4.2 upgrade
6703 * buildbot/process/step.py (CVS.finishStatus): catch failed
6704 CVS/SVN commands so we can make the status box red
6706 2004-04-29 Brian Warner <warner@lothar.com>
6708 * buildbot/changes/freshcvs.py
6709 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
6710 code to do setFilter(), which tells the freshcvs daemon to not
6711 send us stuff that we're not interested in. I will uncomment it
6712 when a new version of CVSToys is available in which setFilter()
6713 actually works, and I get a chance to test it better.
6715 * docs/examples/twisted_master.cfg: start using a PBChangeSource
6717 * buildbot/master.py (Dispatcher): use a registration scheme
6718 instead of hardwired service names
6719 (BuildMaster): keep track of the Dispatcher to support
6722 * buildbot/changes/changes.py (ChangeMaster): create a distinct
6723 PBChangeSource class instead of having it be an undocumented
6724 internal feature of the ChangeMaster. Split out the code into a
6726 * buildbot/changes/pb.py (PBChangeSource): same
6727 * buildbot/test/test_changes.py: a few tests for PBChangeSource
6729 * docs/{factories|sources|steps}.xhtml: document some pieces
6731 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
6732 using FCMaildirSource
6733 (f23osx): update OS-X builder to use python2.3, since the slave
6734 was updated to Panther (10.3.3)
6736 2004-03-21 Brian Warner <warner@lothar.com>
6738 * buildbot/process/process_twisted.py: factor out doCheckout, change
6739 to use SVN instead of CVS
6741 * buildbot/process/base.py (BasicBuildFactory): refactor to make
6742 an SVN subclass easier
6743 (BasicSVN): subclass which uses Subversion instead of CVS
6745 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
6747 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
6749 (CVSCommand.cvsComplete): don't assume chdir worked on win32
6751 2004-02-25 Brian Warner <warner@lothar.com>
6753 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
6754 is now either a list (which is passed to spawnProcess directly) or
6755 a string (which gets passed to /bin/sh -c). This removes the useSH
6756 flag and the ArgslistCommand class. Also send status header at the
6757 start and end of each command, instead of having the master-side
6759 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
6760 -r'. Update to use list-based arguments.
6761 (SVNFetch): use list-based arguments, use ['dir'] argument to
6763 * buildbot/test/test_steps.py (Commands): match changes
6765 * buildbot/process/step.py (InternalShellCommand.words): handle
6767 (SVN): inherit from CVS, cleanup
6769 * buildbot/status/event.py (Logfile.content): render in HTML, with
6770 stderr in red and headers (like the name of the command we're
6771 about to run) in blue. Add link to a second URL (url + "?text=1")
6772 to get just stdout/stderr in text/plain without markup. There is
6773 still a problem with .entries=None causing a crash, it seems to occur
6774 when the logfile is read before it is finished.
6776 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
6777 timeout to the keepalives, and use it to explicitly do a
6778 loseConnection instead of waiting for TCP to notice the loss. This
6779 ought to clear up the silent-lossage problem.
6780 (unsafeTracebacks): pass exception tracebacks back to the master,
6781 makes it much easier to debug problems
6783 2004-02-23 Brian Warner <warner@lothar.com>
6785 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
6786 the whole command to /bin/sh instead of execve [Johan Dahlin]
6787 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
6788 '-r HEAD' [Johan Dahlin]
6789 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
6791 * buildbot/changes/changes.py (Change): add links= argument, add
6792 asHTML method [Johan Dahlin]. Modified to make a bit more
6793 XHTMLish. Still not sure how to best use links= .
6795 * buildbot/status/html.py (StatusResourceCommits.getChild): use
6796 Change.asHTML to display the change, not asText
6798 * buildbot/status/html.py (StatusResourceBuilder): web button to
6801 * buildbot/test/test_run.py: test to actually start a buildmaster
6804 * MANIFEST.in: bring back accidentally-dropped test helper files
6806 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
6807 that require cvstoys if it is not installed
6809 * buildbot/process/step_twisted.py (RunUnitTests): allow other
6810 values of "bin/trial" [Dave Peticolas]
6811 (RunUnitTests.finishStatus): say "no tests run" instead of "0
6812 tests passed" when we didn't happen to run any tests
6814 * buildbot/process/step.py (Compile): use haltOnFailure instead of
6815 flunkOnFailure [Johan Dahlin]
6817 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
6818 multiple instances of the same Step class by suffixing "_2", etc,
6819 to the name until it is unique. This name needs to be unique
6820 because it is used as a key in the dictionary that tracks build
6822 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
6825 * buildbot/process/base.py (Builder.ping): add "ping slave" command
6827 2004-01-14 Brian Warner <warner@lothar.com>
6829 * buildbot/status/words.py (IrcStatusBot): when we leave or get
6830 kicked from a channel, log it
6832 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
6833 something over whatever IRC channels the buildmaster is currently
6834 connected to. Added to try and track down a problem in which the
6835 master thinks it is still connected but the IRCd doesn't see it. I
6836 used a styles.Versioned this time, so hopefully users won't have
6837 to rebuild their .tap files this time.
6838 * contrib/debug.glade: add a "Poke IRC" button
6839 * contrib/debugclient.py: same
6841 * setup.py: bump to 0.4.2+ while between releases
6843 2004-01-08 Brian Warner <warner@lothar.com>
6845 * setup.py (version): Releasing buildbot-0.4.2
6847 2004-01-08 Brian Warner <warner@lothar.com>
6849 * NEWS: update for 0.4.2 release
6851 * README: document how to run the tests, now that they all pass
6853 * buildbot/changes/maildir.py (Maildir.poll): minor comment
6855 * buildbot/process/step.py (CVS): add a global_options= argument,
6856 which lets you set CVS global options for the command like "-r"
6857 for read-only checkout, or "-R" to avoid writing in the
6859 * buildbot/slavecommand.py (CVSCommand): same
6861 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
6862 testing easier (it is turned off when testing, to avoid the
6865 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
6866 to make it easier to test: break generateStepID() out to a
6867 separate function, only update statusbag if it exists.
6868 (ShellCommands): create useful text for dict-based commands too.
6870 * test/*, buildbot/test/*: move unit tests under the buildbot/
6872 * setup.py (packages): install buildbot.test too
6874 * buildbot/test/test_slavecommand.py: fix it, tests pass now
6875 * buildbot/test/test_steps.py: fix it, tests pass now
6877 2004-01-06 Brian Warner <warner@lothar.com>
6879 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
6880 freshcvs mail uses a slightly different syntax for new
6881 directories. Update parser to handle either.
6882 * test/test_mailparse.py (Test1.testMsg9): test for same
6884 2003-12-21 Brian Warner <warner@lothar.com>
6886 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
6887 'warnOnWarnings' so that lintian errors mark the build orange
6889 2003-12-17 Brian Warner <warner@lothar.com>
6891 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
6892 messages emitted by Bonsai, contributed by Stephen Davis.
6894 * test/*: moved all tests to use trial instead of unittest. Some
6895 still fail (test_steps, test_slavecommand, and test_process).
6897 * setup.py (version): bump to 0.4.1+ while between releases
6899 2003-12-09 Brian Warner <warner@lothar.com>
6901 * setup.py (version): Releasing buildbot-0.4.1
6903 2003-12-09 Brian Warner <warner@lothar.com>
6905 * NEWS: update for 0.4.1 release
6907 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
6908 freebsd builder code a little bit
6910 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
6911 don't try to compare attributes of different classes
6912 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6913 (MaildirSource.messageReceived): fix Change delivery
6915 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
6916 into the config file's namespace before loading it, like the
6917 documentation claims it does
6918 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
6919 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
6920 daemon comes back online
6922 2003-12-08 Brian Warner <warner@lothar.com>
6924 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
6925 so the example will work with online=0 as well
6927 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
6928 fix the __implements__ line
6930 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
6931 class a twisted.application.service.Service, use startService to
6934 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
6935 directory fd instead of simple open(). I'm sure this used to work,
6936 but the current version of python refuses to open directories with
6939 2003-12-05 Brian Warner <warner@lothar.com>
6941 * setup.py (version): bump to 0.4.0+ while between releases
6943 2003-12-05 Brian Warner <warner@lothar.com>
6945 * setup.py (version): Releasing buildbot-0.4.0
6947 2003-12-05 Brian Warner <warner@lothar.com>
6949 * docs/examples/glib_master.cfg: replace old sample scripts with
6950 new-style config files
6951 * MANIFEST.in: include .cfg files in distribution tarball
6953 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
6954 implement a dummy method to avoid the exception that occurs when
6955 freshcvs sends this to us.
6957 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
6958 removed the method, as it broke reconnection. Apparently
6959 stopFactory is called each time the connection attempt fails. Must
6961 (ReconnectingPBClientFactory.__getstate__): squash the _callID
6962 attribute before serialization, since without stopFactory the
6963 reconnect timer may still be active and they aren't serializable.
6965 * test/test_mailparse.py (ParseTest): test with 'self' argument
6967 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
6968 argument, as these "functions" are invoked like methods from class
6969 attributes and therefore always get an instance as the first
6972 * buildbot/changes/maildir.py (Maildir.start): fix error in error
6973 message: thanks to Stephen Davis for the catch
6975 2003-12-04 Brian Warner <warner@lothar.com>
6977 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
6978 twisted's standard ReconnectingClientFactory. Handles both oldcred
6979 and newcred connections. Also has a bug-workaround for
6980 ReconnectingClientFactory serializing its connector when it
6983 * buildbot/bot.py (BotFactory): rewrite connection layer with new
6984 pbutil. Replace makeApp stuff with proper newcred/mktap
6985 makeService(). Don't serialize Ephemerals on shutdown.
6987 * buildbot/changes/changes.py (ChangeMaster): make it a
6988 MultiService and add the sources as children, to get startService
6989 and stopService for free. This also gets rid of the .running flag.
6991 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
6992 new pbutil, turn into a TCPClient at the same time (to get
6993 startService for free). Two variants exist: FreshCVSSourceOldcred
6994 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
6995 yet, but when it does, we'll be ready).
6996 (FreshCVSSource.notify): handle paths which are empty after the
6997 prefix is stripped. This only happens when the top-level (prefix)
6998 directory is added, at the very beginning of a Repository's life.
7000 * buildbot/clients/base.py: use new pbutil, clean up startup code.
7001 Now the only reconnecting code is in the factory where it belongs.
7002 (Builder.unsubscribe): unregister the disconnect callback when we
7003 delete the builder on command from the master (i.e. when the
7004 buildmaster is reconfigured and that builder goes away). This
7005 fixes a multiple-delete exception when the status client is shut
7007 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
7010 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
7011 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
7013 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
7015 * contrib/run_maxq.py: Accept a testdir as an argument rather than
7016 a list of globs (ugh). The testdir will be searched for files
7017 named *.tests and run the tests in the order specified in each of
7018 those files. This allows for "dependancies" between tests to be
7021 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
7022 argument to pass to run_maxq.py, instead of a glob.
7024 2003-10-17 Brian Warner <warner@lothar.com>
7026 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
7027 files that live in the sandbox
7029 2003-10-15 Brian Warner <warner@lothar.com>
7031 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
7032 spelling error in "docs" count-warnings output
7033 (HLint.start): stupid thinko meant .xhtml files were ignored
7035 * docs/examples/twisted_master.cfg (reactors): disable cReactor
7036 tests now that cReactor is banished to the sandbox
7038 2003-10-10 Brian Warner <warner@lothar.com>
7040 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
7041 scheme: now .xhtml are sources and .html are generated
7043 2003-10-08 Brian Warner <warner@lothar.com>
7045 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
7046 we were ignoring the 'randomly' parameter.
7048 2003-10-01 Brian Warner <warner@lothar.com>
7050 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
7051 posix, to kill sub-children of aborted slavecommands.
7053 * buildbot/status/builder.py: rename Builder to BuilderStatus.
7054 Clean up initialization: lastBuildStatus remains None until the
7055 first build has been completed.
7057 * buildbot/status/html.py (WaterfallStatusResource.body): handle
7058 None as a lastBuildStatus
7059 * buildbot/clients/gtkPanes.py: same
7061 * buildbot/status/client.py (StatusClientService): keep
7062 BuilderStatus objects in self.statusbags . These objects now live
7063 here in the StatusClientService and are referenced by the Builder
7064 object, rather than the other way around.
7065 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
7066 * buildbot/process/base.py (Builder): same
7067 * test/test_config.py (ConfigTest.testBuilders): same
7069 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
7070 an existing builder, leave the statusbag alone. This will preserve the
7073 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
7074 hook. This will probably go away in favor of a class in upcoming
7077 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
7078 serviceName from newcred FreshCVSNotifiee setup
7080 2003-09-29 Brian Warner <warner@lothar.com>
7082 * buildbot/process/process_twisted.py: switch to new reactor
7084 * docs/examples/twisted_master.cfg: same
7086 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
7088 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
7089 botmaster reference instead of the oldapp service lookup
7091 * buildbot/master.py (BuildMaster.__init__): give the
7092 StatusClientService a reference to the botmaster to make it easier to
7095 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7097 * buildbot/status/html.py (Box.td): escape hreffy things so you
7098 can have spaces in things like builder names
7099 (StatusResourceBuilder.body)
7100 (WaterfallStatusResource.body)
7101 (WaterfallStatusResource.body0): same
7103 2003-09-25 Brian Warner <warner@lothar.com>
7105 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
7106 rearrange the builder list when adding or removing builders: keep
7107 them in the order the user requested.
7108 * test/test_config.py (ConfigTest.testBuilders): verify it
7110 * contrib/debug.glade: give the debug window a name
7112 * buildbot/process/base.py (Builder.buildTimerFired): builders can
7113 now wait on multiple interlocks. Fix code relating to that.
7114 (Builder.checkInterlocks): same
7115 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
7117 * buildbot/master.py (BuildMaster.loadConfig): move from
7118 deprecated pb.BrokerFactory to new pb.PBServerFactory
7119 * test/test_config.py (ConfigTest.testWebPathname): same
7121 * docs/examples/twisted_master.cfg: fix interlock declaration
7123 * buildbot/master.py (BotMaster.addInterlock): move code to attach
7124 Interlocks to their Builders into interlock.py .
7125 (BuildMaster.loadConfig_Interlocks): fix interlock handling
7127 * test/test_config.py (ConfigTest.testInterlocks): validate
7130 * buildbot/process/base.py (Builder.__init__): better comments
7131 * buildbot/process/interlock.py (Interlock.__repr__): same
7132 (Interlock.deactivate): add .active flag, move the code that
7133 attaches/detaches builders into the Interlock
7135 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7137 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
7138 tests using the new run_maxq.py script, and reporting failures by
7141 * contrib/run_maxq.py: Hacky little script for running a set of maxq
7142 tests, reporting their success or failure in a buildbot-friendly
7145 2003-09-24 Brian Warner <warner@lothar.com>
7147 * docs/examples/twisted_master.cfg: example of a new-style config
7148 file. This lives in the buildmaster base directory as
7151 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
7152 button to make the master re-read its config file
7154 * buildbot/master.py (BuildMaster.loadConfig): new code to load
7155 buildmaster configuration from a file. This file can be re-read
7156 later, and the buildmaster will update itself to match the new
7157 desired configuration. Also use new Twisted Application class.
7158 * test/Makefile, test/test_config.py: unit tests for same
7160 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
7161 FreshCVSSources comparable, to support reload.
7162 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7164 * buildbot/process/base.py (Builder): make them comparable, make
7165 Interlocks easier to attach, to support reload. Handle
7166 re-attachment of remote slaves.
7167 * buildbot/process/interlock.py (Interlock): same
7169 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
7170 Twisted's new Application class. Requires Twisted >= 1.0.8 .
7171 buildmaster taps are now constructed with mktap.
7172 * buildbot/status/client.py (StatusClientService): same
7174 * buildbot/status/words.py: move to new Services, add support to
7175 connect to multiple networks, add reload support, allow nickname
7176 to be configured on a per-network basis
7178 2003-09-20 Brian Warner <warner@lothar.com>
7180 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
7181 the freebsd builder, now that the machine has been upgraded and no
7182 longer has python2.2
7184 * setup.py (version): bump to 0.3.5+ while between releases
7186 2003-09-19 Brian Warner <warner@lothar.com>
7188 * setup.py (version): Releasing buildbot-0.3.5
7190 2003-09-19 Brian Warner <warner@lothar.com>
7192 * NEWS: add post-0.3.4 notes
7194 * README (REQUIREMENTS): note twisted-1.0.7 requirement
7196 * MANIFEST.in: add contrib/*
7198 * docs/examples/twisted_master.py (twisted_app): all build slaves must
7199 use a remote root now: cvs.twistedmatrix.com
7201 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
7203 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
7204 compatibility with old servers
7205 (FreshCVSSource.start): and provide a way to use it
7206 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
7208 * docs/examples/twisted_master.py (twisted_app): update to new
7210 (twisted_app): listen on new ~buildbot socket
7211 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
7213 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
7214 to reduce cvs bandwidth (update instead of full checkout)
7216 2003-09-11 Brian Warner <warner@lothar.com>
7218 * contrib/fakechange.py: demo how to connect to the changemaster
7219 port. You can use this technique to submit changes to the
7220 buildmaster from source control systems that offer a hook to run a
7221 script when changes are committed.
7223 * contrib/debugclient.py: tool to connect to the debug port. You
7224 can use it to force builds, submit fake changes, and wiggle the
7227 * buildbot/master.py: the Big NewCred Reorganization. Use a single
7228 'Dispatcher' realm to handle all the different kinds of
7229 connections and Perspectives: buildslaves, the changemaster port,
7230 the debug port, and the status client port. NewCredPerspectives
7231 now have .attached/.detached methods called with the remote 'mind'
7232 reference, much like old perspectives did. All the pb.Services
7233 turned into ordinary app.ApplicationServices .
7234 (DebugService): went away, DebugPerspectives are now created
7235 directly by the Dispatcher.
7236 (makeApp): changed interface a little bit
7238 * buildbot/changes/changes.py: newcred
7239 * buildbot/status/client.py: newcred
7241 * buildbot/clients/base.py: newcred client side changes
7242 * buildbot/bot.py: ditto
7244 * docs/examples/glib_master.py: handle new makeApp() interface
7245 * docs/examples/twisted_master.py: ditto
7247 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
7248 base newcred Perspectives on. This should go away once Twisted
7249 itself provides something sensible.
7252 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
7254 * contrib/svn_buildbot.py: A program that you can call from your
7255 SVNREPO/hooks/post-commit file that will notify a BuildBot master
7256 when a change in an SVN repository has happened. See the top of
7257 the file for some minimal usage info.
7259 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7261 * buildbot/slavecommand.py (ArglistCommand): Add new
7262 ArglistCommand that takes an argument list rather than a string as
7263 a parameter. Using a st.split() for argv is very bad.
7265 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
7266 update to a particular revision rather than always checking out
7267 (still not very smart about it, there may be cases where the
7268 checkout becomes inconsistent).
7270 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7272 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
7273 SVN fetch support. It can checkout (not update!) a specified
7274 revision from a specified repository to a specified directory.
7276 * buildbot/status/progress.py (Expectations.update): Fix an
7277 obvious bug (apparently created by the change described in the
7278 previous ChangeLog message) by moving a check to *after* the
7279 variable it checks is defined.
7282 2003-09-08 Brian Warner <warner@lothar.com>
7284 * buildbot/status/progress.py (Expectations.update): hack to catch
7285 an exception TTimo sees: sometimes the update() method seems to
7286 get called before the step has actually finished, so the .stopTime
7287 is not set, so no totalTime() is available and we average None
7288 with the previous value. Catch this and just don't update the
7289 metrics, and emit a log message.
7291 2003-08-24 Brian Warner <warner@lothar.com>
7293 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
7294 parameter to set copydir='original' in CVS commands.
7296 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
7298 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
7299 which tells the command to maintain a separate original-source CVS
7300 workspace. For each build, this workspace will be updated, then
7301 the tree copied into a new workdir. This reduces CVS bandwidth
7302 (from a full checkout to a mere update) while doubling the local
7303 disk usage (to keep two copies of the tree).
7305 2003-08-21 Brian Warner <warner@lothar.com>
7307 * buildbot/status/event.py (Logfile.addEntry): if the master web
7308 server dies while we're serving a page, request.write raises
7309 pb.DeadReferenceError . Catch this and treat it like a
7310 notifyFinish event by dropping the request.
7312 2003-08-18 Brian Warner <warner@lothar.com>
7314 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
7315 (instead of blowing up) if a force-build command is given without
7318 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
7319 don't blow up if there aren't yet any Changes in the list
7321 2003-08-02 Brian Warner <warner@lothar.com>
7323 * buildbot/bot.py (updateApplication): don't set the .tap name,
7324 since we shouldn't assume we own the whole .tap file
7326 * buildbot/bb_tap.py (updateApplication): clean up code, detect
7327 'mktap buildbot' (without a subcommand) better
7329 2003-07-29 Brian Warner <warner@lothar.com>
7331 * buildbot/status/words.py
7332 (IrcStatusFactory.clientConnectionLost): when we lose the
7333 connection to the IRC server, schedule a reconnection attempt.
7335 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
7336 use shutil.rmtree instead of forking off an "rm -rf" command.
7337 rmtree may take a while and will block until it finishes, so we
7338 use "rm -rf" if available.
7340 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
7341 freebsd buildslave badly
7343 * setup.py (version): bump to 0.3.4+ while between releases
7345 2003-07-28 Brian Warner <warner@lothar.com>
7347 * setup.py (version): Releasing buildbot-0.3.4
7349 2003-07-28 Brian Warner <warner@lothar.com>
7351 * NEWS: update in preparation for release
7353 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
7354 process.signalProcess instead of os.kill, to improve w32
7357 * docs/examples/twisted_master.py (twisted_app): turn off
7358 win32eventreactor: the tests hang the buildslave badly
7360 * buildbot/process/base.py (Build.buildFinished): update ETA even on
7361 failed builds, since usually the failures are consistent
7363 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7364 add compileOpts/compileOpts2 to reactors build
7366 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
7367 (twisted_app): use both default and win32eventreactor on w32 build.
7368 Use both default and kqreactor on freebsd build.
7370 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7371 add compileOpts2, which is put after the build_ext argument. w32
7372 needs "-c mingw32" here.
7374 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
7375 touch .acqpath, it goes away in recent Twisted releases
7377 * docs/examples/twisted_master.py (twisted_app): use "python" for
7378 the w32 buildslave, not "python2.2"
7380 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
7381 the directory exists.. should hush an exception under w32
7383 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
7384 ProcessTerminated -provided values for signal and exitCode rather
7385 than parsing the unix status code directly. This should remove one
7386 more roadblock for a w32-hosted buildslave.
7388 * test/test_mailparse.py: add test cases for Syncmail parser
7390 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
7391 temporary compatibility import. Note! Start importing
7392 FCMaildirSource from changes.mail instead of changes.freshcvsmail
7394 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
7396 2003-07-27 Brian Warner <warner@lothar.com>
7398 * NEWS: started adding new features
7400 * buildbot/changes/mail.py: start work on Syncmail parser, move
7401 mail sources into their own file
7403 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
7404 as implementing IChangeSource
7405 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
7407 * buildbot/interfaces.py: define the IChangeSource interface
7409 2003-07-26 Brian Warner <warner@lothar.com>
7411 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
7413 2003-06-25 Brian Warner <warner@lothar.com>
7415 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
7418 2003-06-17 Brian Warner <warner@lothar.com>
7420 * buildbot/status/words.py: clean up method usage to avoid error
7421 in silly IRC command
7422 (IrcStatusBot.emit_status): round off seconds display
7424 * buildbot/process/base.py (Build): delete the timer when saving
7425 to the .tap file, and restore it (if it should still be running)
7426 upon restore. This should fix the "next build in -34 seconds"
7427 messages that result when the master is restarted while builds are
7428 sitting in the .waiting slot. If the time for the build has
7429 already passed, start it very soon (in 1 second).
7431 * buildbot/status/words.py: more silly commands
7433 * README (REQUIREMENTS): add URLs to all required software
7435 * buildbot/status/words.py ('last'): mention results of, and time
7438 2003-05-28 Brian Warner <warner@lothar.com>
7440 * buildbot/status/words.py: add 'last' command
7441 (IrcStatusBot.emit_status): add current-small text to 'status' output
7443 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
7444 (twisted_app): remove spaces from OS-X builder name
7446 * buildbot/master.py (makeApp): add knob to turn on IRC bot
7447 * buildbot/status/words.py: IRC bot should actually be useful now
7449 2003-05-23 Brian Warner <warner@lothar.com>
7451 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
7452 "slave information" from $(slavedir)/info/* . These files are
7453 maintained by the slave administrator, and describe the
7454 machine/environment that is hosting the slave. Information from
7455 them is put into the "Builder" HTML page. Still need to establish
7456 a set of well-known filenames and meanings for this data: at the
7457 moment, *all* info/* files are sent to the master, but only
7458 'admin' and 'host' are used on that end.
7459 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
7460 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
7461 * buildbot/master.py (BotPerspective.got_info): ditto
7463 2003-05-22 Brian Warner <warner@lothar.com>
7465 * setup.py (version): bump version to 0.3.3+ while between releases
7467 2003-05-21 Brian Warner <warner@lothar.com>
7469 * setup.py: Releasing buildbot-0.3.3
7471 2003-05-21 Brian Warner <warner@lothar.com>
7473 * NEWS: 0.3.3 news items
7475 * README: describe --keepalive and life behind a NAT box
7477 * buildbot/bot.py (Bot.connected): implement application-level
7478 keepalives to deal with NAT timeouts, turn them on with
7479 --keepalive option or when SO_KEEPALIVE doesn't work.
7481 * buildbot/master.py (BotPerspective): accept keepalives silently
7483 * buildbot/process/base.py (Build.buildException): CopiedFailures
7484 don't carry as much information as local ones, so don't try to
7485 create a big HTMLized version of them.
7487 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
7488 log file when step fails due to an exception, such as when the slave
7491 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
7492 --testmodule argument instead of grepping for test-case-name tags
7493 ourselves. Remove FindUnitTests code.
7494 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
7496 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
7498 2003-05-16 Brian Warner <warner@lothar.com>
7500 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
7501 argument to allow things like CFLAGS=-O0 to be passed without relying
7502 upon /bin/sh processing on the slave.
7504 * buildbot/process/step.py (InternalShellCommand.start): send
7506 * buildbot/slavecommand.py (ShellCommand.start): create argv with
7507 'split' instead of letting /bin/sh do it. This should also remove
7508 the need for /bin/sh on the buildslave, making it more likely to
7511 * buildbot/status/html.py: html-escape text in blamelist.
7512 Add "force build" button to the Builder page.
7514 * buildbot/process/step_twisted.py (countFailedTests): look at
7515 last 1000 characters for status line, as import errors can put it
7516 before the -200 point.
7518 2003-05-15 Brian Warner <warner@lothar.com>
7520 * docs/examples/twisted_master.py: use clobber=0 for remote builds
7522 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7523 make 'clobber' a parameter, so it is possible to have builds which
7524 do full tests but do a cvs update instead of hammering the CVS
7525 server with a full checkout each build
7527 * buildbot/process/step.py (InternalShellCommand): bump default
7528 timeout to 20 minutes
7530 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
7531 the master to trigger a build. Run it via manhole.
7533 * buildbot/master.py (BotPerspective.perspective_forceBuild):
7534 allow slaves to trigger any build that they host, to make life
7535 easier for slave admins who are testing out new build processes
7537 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7538 don't flunk cReactor or qtreactor on failure, since they fail alot
7539 these days. Do warnOnFailure instead.
7541 * buildbot/process/base.py: change Builder.buildable from a list
7542 into a single slot. When we don't have a slave, new builds (once
7543 they make it past the timeout) are now merged into an existing
7544 buildable one instead of being queued. With this change, a slave
7545 which has been away for a while doesn't get pounded with all the
7546 builds it missed, but instead just does a single build.
7548 2003-05-07 Brian Warner <warner@lothar.com>
7550 * setup.py (version): bump version to 0.3.2+ while between releases
7552 2003-05-07 Brian Warner <warner@lothar.com>
7554 * setup.py: Releasing buildbot-0.3.2
7556 2003-05-07 Brian Warner <warner@lothar.com>
7558 * setup.py: fix major packaging error: include subdirectories!
7560 * NEWS: add changes since last release
7562 * README (REQUIREMENTS): update twisted/python dependencies
7564 * buildbot/status/builder.py (Builder.startBuild): change
7565 BuildProcess API: now they should call startBuild/finishBuild
7566 instead of pushing firstEvent / setLastBuildStatus. Moving towards
7567 keeping a list of builds in the statusbag, to support other kinds of
7569 (Builder.addClient): send current-activity-small to new clients
7570 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
7573 * buildbot/status/client.py: drop RemoteReferences at shutdown
7575 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
7577 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
7578 more debug messages for remote status client
7580 * buildbot/process/step.py (InternalBuildStep.stepComplete)
7581 (.stepFailed): only fire the Deferred once, even if both
7582 stepComplete and stepFailed are called. I think this can happen if
7583 an exception occurs at a weird time.
7585 * buildbot/status/words.py: work-in-progress: IRC status delivery
7587 2003-05-05 Brian Warner <warner@lothar.com>
7589 * docs/examples/twisted_master.py (twisted_app): hush internal
7590 python2.3 distutils deprecation warnings
7591 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7592 add compileOpts= argument which inserts extra args before the
7593 "setup.py build_ext" command. This can be used to give -Wignore
7594 warnings, to hush some internal python-2.3 deprecation messages.
7596 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
7597 the ['twisted.test'] default test case to make it easier to change
7600 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
7601 * buildbot/clients/gtkPanes.py: ditto
7603 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
7604 arg to collapse RunUnitTestsRandomly into RunUnitTests
7605 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7606 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
7608 * buildbot/status/html.py (StatusResource): shuffle Resources
7609 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
7610 would serve the waterfall display, but the internal links were
7611 only valid on the trailing-slash version. The correct behavior is
7612 for the non-slashed one to serve a Redirect to the slashed one.
7613 This only shows up when the buildbot page is hanging off another
7614 server, like a Twisted-Web distributed server.
7616 * buildbot/status/event.py (Event, RemoteEvent): make Events
7617 pb.Cacheable, with RemoteEvent as the cached version. This removes
7618 a lot of explicit send-an-update code.
7619 * buildbot/status/builder.py (Builder): remove send-update code
7620 * buildbot/status/client.py (ClientBuilder): remove send-update
7621 code, and log errors that occur during callRemote (mostly to catch
7622 InsecureJelly exceptions)
7624 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7625 run Lore with the same python used in the rest of the build
7627 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
7629 * buildbot/process/step_twisted.py (HLint): accept 'python'
7630 argument. Catch rc!=0 and mark the step as failed. This marks the
7631 build orange ("has warnings").
7632 (RunUnitTestsJelly): move out to step_twisted2.py
7634 * buildbot/util.py (ignoreStaleRefs): add utility function
7636 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
7637 don't fake ETA object, it's too hard to get right
7639 2003-05-02 Brian Warner <warner@lothar.com>
7641 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
7643 2003-05-01 Brian Warner <warner@lothar.com>
7645 * buildbot/status/html.py (StatusResource.body): oops, I was
7646 missing a <tr>, causing the waterfall page to be misrendered in
7647 everything except Galeon.
7649 2003-04-29 Brian Warner <warner@lothar.com>
7651 * docs/examples/twisted_master.py: make debuild use python-2.2
7652 explicitly, now that Twisted stopped supporting 2.1
7654 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
7655 handle tuple results too. I keep forgetting this, which suggests
7656 it needs to be rethought.
7658 * setup.py (setup): bump version to 0.3.1+ while between releases
7660 2003-04-29 Brian Warner <warner@lothar.com>
7662 * setup.py: Releasing buildbot-0.3.1
7664 2003-04-29 Brian Warner <warner@lothar.com>
7666 * README (SUPPORT): add plea to send questions to the mailing list
7668 * NEWS, MANIFEST.in: add description of recent changes
7670 * docs/examples/twisted_master.py: add the code used to create the
7671 Twisted buildmaster, with passwords and such removed out to a
7674 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
7675 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
7676 buildmasters to not require CVSToys be installed.
7677 * README, docs/examples/glib_master: update to match the change
7679 * buildbot/clients/base.py, buildbot/bot.py,
7680 buildbot/changes/changes.py, buildbot/pbutil.py: copy
7681 ReconnectingPB from CVSToys distribution to remove CVSToys
7682 dependency for build slaves and status clients. Buildmasters which
7683 use FreshCVSSources still require cvstoys be installed, of course.
7685 2003-04-25 Brian Warner <warner@lothar.com>
7687 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
7688 runTestsRandomly arg to turn on trial -z
7690 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
7691 experimental code to use trial's machine-parseable output to get
7692 more detailed test results. Still has some major issues.
7693 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
7696 * buildbot/status/builder.py (Builder.setCurrentBuild):
7697 anticipating moving build history into statusbag, not used yet
7699 * buildbot/status/tests.py: code to centralize test results,
7700 doesn't work quite yet
7702 * buildbot/status/event.py (Event): use hasattr("setName") instead
7703 of isinstance for now.. need better long-term solution
7705 * buildbot/status/html.py: Remove old imports
7707 2003-04-24 Brian Warner <warner@lothar.com>
7709 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
7710 ignore changes under doc/fun/ and sandbox/
7712 * buildbot/process/step_twisted.py: update pushEvent and friends.
7714 * buildbot/status/html.py (Box.td): replace event.buildername with
7715 event.parent.getSwappableName(). Needs more thought.
7717 * buildbot/status/builder.py (Builder): Replace pushEvent and
7718 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
7719 Tell events they are being pruned with event.delete().
7721 * buildbot/process/base.py (Build): Remove Builder status-handling
7722 methods. s/pushEvent/setCurrentActivity/.
7724 * buildbot/process/step.py (BuildStep): clean up status delivery.
7725 Gouse builder.statusbag methods instead of intermediate builder
7726 methods. s/updateLastEvent/updateCurrentActivity/.
7727 s/finalizeLastEvent/finishCurrentActivity/. Use
7728 addFileToCurrentActivity for summaryFunction.
7730 * buildbot/status/event.py (Logfile): put data in a Swappable when
7732 (Event): add more setter methods. Remove .buildername, use .parent
7733 and getSwappableName instead (needs more thought).
7735 * buildbot/util.py (Swappable):
7736 * test/test_swap.py: don't bother setting filename at __init__
7737 time, do it later. Change setFilename args to take parent first,
7738 since it provides the most significant part of the filename.
7740 2003-04-23 Brian Warner <warner@lothar.com>
7742 * buildbot/status/event.py (Logfile.addEntry): append to previous
7745 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
7746 anticipating Swappable
7747 (InternalShellCommand.remoteUpdate): split out various log-adding
7748 methods so subclasses can snarf stdout separately
7750 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
7751 in anticipation of Swappable build logs
7752 (Builder.testsFinished): anticipating TestResults, still disabled
7754 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
7757 * buildbot/status/event.py (Logfile): add (disabled) support for
7758 Swappable, not ready for use yet
7760 * buildbot/util.py (Swappable): object which is swapped out to
7761 disk after some period of no use.
7762 * test/test_swap.py: test buildbot.utils.Swappable
7764 2003-04-14 Brian Warner <warner@lothar.com>
7766 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
7767 periodic-build timer. Set the .periodicBuildTime on a builder
7768 instance to some number of seconds to activate it.
7770 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
7772 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
7773 a way that survives result tuples
7775 2003-04-12 Brian Warner <warner@lothar.com>
7777 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7778 return a dict instead of a tuple: allow summarizers to provide
7779 multiple summaries if they want
7780 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
7781 (debuildSummarizer): summarize lintian warnings/errors
7783 2003-04-10 Brian Warner <warner@lothar.com>
7785 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
7787 2003-04-09 Brian Warner <warner@lothar.com>
7789 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
7790 empty summaries: happens when the tests fail so hard they don't emit
7791 a parseable summary line.
7793 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7794 Allow summaryFunction to return None to indicate no summary should
7797 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
7798 writing to stale HTTP requests: notice when they disconnect and
7799 remove the request from the list. Also add CacheToFile from
7800 moshez, will be used later.
7802 2003-04-08 Brian Warner <warner@lothar.com>
7804 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
7805 should be an int, not a list of strings
7807 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
7808 if we weren't actually connected
7810 * buildbot/process/step_twisted.py (trialTextSummarizer): function
7811 to show the tail end of the trial text output
7813 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
7814 hook to summarize the results of a ShellCommand
7816 2003-04-07 Brian Warner <warner@lothar.com>
7818 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
7819 twisted test suite code into a single class.
7820 * buildbot/process/process_twisted.py: same
7822 2003-04-04 Brian Warner <warner@lothar.com>
7824 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
7826 * README (SLAVE): document use of mktap to create slave .tap file
7827 (REQUIREMENTS): describe dependencies
7829 * buildbot/bb_tap.py, buildbot/plugins.tml:
7830 * buildbot/bot.py (updateApplication): Add mktap support for creating
7831 buildslave .tap files
7833 2003-03-28 Brian Warner <warner@lothar.com>
7835 * buildbot/process/step.py (InternalShellCommand.finished): handle
7836 new tuple result values (fix embarrasing bug that appeared during
7839 2003-03-27 Brian Warner <warner@lothar.com>
7841 * docs/examples/glib_master.py, README: add sample buildmaster.tap
7844 2003-03-25 Brian Warner <warner@lothar.com>
7846 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
7847 to overall build status
7848 * buildbot/clients/base.py (Builder): improve event printing
7849 * buildbot/process/base.py (BasicBuildFactory): use specific steps
7850 instead of generic ShellCommand
7851 (Build): Add .stopBuild, use it when slave is detached
7853 * buildbot/process/step.py (Configure,Test): give the steps their
7854 own names and status strings
7856 * buildbot/status/html.py (StatusResource): add "show" argument,
7857 lets you limit the set of Builders being displayed.
7859 2003-03-20 Brian Warner <warner@lothar.com>
7861 * buildbot/process/basic.py: removed
7863 2003-03-19 Brian Warner <warner@lothar.com>
7865 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7866 turn off process-docs by default
7868 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
7869 when displaying build information without anything in allBuilds[]
7871 * buildbot/bot.py (makeApp): really take password from sys.argv
7873 2003-03-18 Brian Warner <warner@lothar.com>
7875 * buildbot/bot.py (buildApp): take password from sys.argv
7877 * README: replace with more useful text
7879 * setup.py: add a real one
7880 * MANIFEST.in, .cvsignore: more distutils packaging stuff
7882 * docs/PyCon-2003/: added sources for PyCon paper.
7884 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
7885 now Build objects control the process and Builder only handles
7886 slave stuff and distribution of changes/status. A new BuildFactory
7887 class creates Build objects on demand.
7889 Created ConfigurableBuild which takes a list of steps to run. This
7890 makes it a lot easier to set up a new kind of build and moves us
7891 closer to being able to configure a build from a web page.
7893 * buildbot/process/step_twisted.py, process_twisted.py: move to
7894 new model. A lot of code went away.
7896 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
7897 send lots of empty progress messages to the client.
7899 * buildbot/master.py (makeApp): enforce builder-name uniqueness
7901 2003-02-20 Brian Warner <warner@lothar.com>
7903 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
7905 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
7906 Twisted bug that prevented non-pty processes from working just got
7907 fixed, and the bug that leaks ptys is still being investigated.
7909 * buildbot/process/step.py (CVS): send timeout arg to slave
7911 * buildbot/clients/gtkPanes.py: add connection-status row, handle
7912 builders coming and going
7913 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
7914 from CVSToys, handle lost-buildmaster
7916 * buildbot/status/client.py (StatusClientService.removeBuilder):
7917 Clean up status client protocol: send builders (with references)
7918 as they are created, rather than sending a list and requiring the
7919 client to figure out which ones are new.
7920 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
7921 attempts to force a build on an unknown builder
7923 2003-02-19 Brian Warner <warner@lothar.com>
7925 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
7926 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
7927 Twisted stops leaking them.
7928 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
7929 builder goes to an idle state.
7931 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
7932 I figure out why CVS commands hang without them, and/or I fix the
7933 hung-command timeout
7935 2003-02-16 Brian Warner <warner@lothar.com>
7937 * buildbot/process/step_twisted.py: bin/hlint went away, replace
7938 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
7939 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
7940 GenerateDocs now that they are prefixed with WARNING:.
7942 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
7943 use manual href target instead of request.childLink
7945 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
7946 display every second, but update the ETA every 5 seconds (or
7947 whenever) as remote_progress messages arrive.
7950 2003-02-12 Brian Warner <warner@lothar.com>
7952 * *: import current sources from home CVS repository
7956 # add-log-time-format: add-log-iso8601-time-string