1 2007-08-12 Brian Warner <warner@lothar.com>
3 * buildbot/status/web/xmlrpc.py (XMLRPCServer): add preliminary
4 XMLRPC server to the WebStatus page. This only has two methods
5 right now (getAllBuildsInInterval and getBuild), but we'll be
6 adding more in the future. This server is extracted from the
9 * buildbot/status/web/baseweb.py (OneLinePerBuild): refactor using
10 generateFinishedBuilds, and improve the data displayed.
11 * buildbot/status/web/build.py (StatusResourceBuild): rearrange
12 the per-Build page, add some information like ETA and got_revision
13 * buildbot/status/web/builder.py (StatusResourceBuilder): same,
14 adding a list of recently completed builds
15 * buildbot/status/web/base.py (css_classes): factor this out
17 * buildbot/interfaces.py (IStatus.generateFinishedBuilds): define
18 new method, to make status display classes easier to write,
19 especially the WebStatus 'one_line_per_build' page.
20 (IBuilderStatus.generateFinishedBuilds): same
21 * buildbot/status/builder.py (BuilderStatus.generateFinishedBuilds):
22 (Status.generateFinishedBuilds): implement it
24 * buildbot/process/factory.py (GNUAutoconf.__init__): allow
25 'source' to be a BuildStep instance, since BuildFactory accepts
28 (Distutils.__init__): same
29 (Trial.__init__): same
31 * buildbot/interfaces.py (IBuildStatus.getProperty): note that
32 this might raise KeyError
34 2007-08-07 Brian Warner <warner@lothar.com>
36 * buildbot/slave/commands.py (P4): use 'p4user' to construct the
37 'Owner:' field of the view, rather than 'p4logname', since
38 p4logname comes from the buildslave's environment and seems
39 unlikely to ever do the right thing. Thanks to Wade Brainerd for
40 the patch. Closes #40.
42 * buildbot/buildslave.py (BuildSlave.__init__): add max_builds=,
43 which imposes a per-slave limit on how many builds are allowed to
44 run simultaneously. This has a the same scope than the SlaveLock,
45 but is different because max_builds= gives the buildmaster the
46 freedom to assign the build to a different slave, whereas the
47 SlaveLock doesn't get tested until after the build is irrevocably
48 assigned to a slave. Therefore using max_builds= will improve
49 utilization in the presence of multiple buildslaves that are
50 attached to the same Builder. This completes the incorporation of
51 Dustin Mitchell's patches, and closes ticket #48. Thanks Dustin!
52 * buildbot/process/builder.py (SlaveBuilder.buildFinished): when
53 any Builder finishes, potentially trigger *all* Builders, since
54 max_builds= may have stalled someone else while waiting for the
56 * buildbot/scripts/sample.cfg: mention max_builds=
57 * buildbot/test/test_run.py (ConcurrencyLimit): test it
58 * docs/buildbot.texinfo (Buildslave Specifiers): document it
60 * buildbot/test/test_run.py (CanStartBuild._do_test2): tests which
61 inherit from RunMixin do not need to call master.stopService()
62 themselves, since RunMixin.tearDown does that. The double call
63 fails on Twisted-2.0.x, which didn't happen to protect against it.
64 * buildbot/test/test_slaves.py (BuildSlave.test_track_builders): same
66 * buildbot/buildslave.py (BuildSlave.addSlaveBuilder): third patch
67 from #48, this one to have the BuildSlave objects track
68 SlaveBuilders, so they'll be able to use that knowledge to
69 influence their canStartBuild() response.
70 * buildbot/process/builder.py (SlaveBuilder.attached): call it
71 (SlaveBuilder.detached): same
72 * buildbot/test/test_slaves.py (BuildSlave): test it
74 * buildbot/buildslave.py (BuildSlave.canStartBuild): incorporate
75 the second of Dustin's #48 patches, this one adding a method to
76 the BuildSlave that allows it to decide whether it is willing to
77 participate in a build or not.
78 (SlaveBuilder.isAvailable): use canStartBuild() to decide
80 * buildbot/test/test_run.py (CanStartBuild): test for it
82 * all: incorporate the first of four patches by Dustin Mitchell
83 from ticket #48, working towards improving control over slave
84 concurrency. The first patch is to use a long-lived BuildSlave
85 object per slave, on which other behavior can be added later. I've
86 modified his patch considerably.
87 * buildbot/buildslave.py (BuildSlave): move class out of
88 slave/__init__.py (where it would get loaded by the slave as well
89 as the master, making dependencies trickier), and merge it with
90 BotPerspective. Now these BuildSlave instances are created once in
91 the master.cfg file, and not destroyed until they are either
92 removed from the config file or changed so
93 much (name/password/class changes) that we cannot continue to use
94 the old one. This affects config files: they must use
95 'from buildbot.buildslave import BuildSlave' instead of using
96 'from buildbot.slave import BuildSlave'.
97 * buildbot/master.py: move BotPerspective out
98 (BuildMaster.loadConfig_Slaves): examine old and new slaves,
99 add or remove as necessary, update the rest using data from
101 * buildbot/slave/__init__.py: move BuildSlave out
102 * buildbot/test/test*.py: import BuildSlave from the new place
103 * buildbot/scripts/sample.cfg: update to match
104 * docs/buildbot.texinfo: update to match
105 * buildbot/process/builder.py: update comments to match
107 2007-08-02 Brian Warner <warner@lothar.com>
109 * buildbot/status/web/baseweb.py (OneLinePerBuild): improve
110 one-line-per-build pages a bit, add a header, refactor slightly
112 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): cleanup
113 the TimeOutError timer, patch by Dustin Mitchell.
115 2007-08-01 Brian Warner <warner@lothar.com>
117 * buildbot/status/web/baseweb.py (OneLinePerBuild): make this
118 mostly work (branch= is still ignored, we need a useful header)
119 (OneLinePerBuildOneBuilder.body): this too
121 * buildbot/status/web/builder.py (StatusResourceBuilder.force):
122 bring this up-to-date w.r.t. recent refactorings, and fix
123 redirections to bounce the browser to the top page after hitting
124 the 'force' button. This needs to be improved, but at least it now
125 redirects to a valid page.
126 (StatusResourceBuilder.ping): same
127 (StatusResourceBuilder.getChild): same, although I think this code
128 might be dead anyways
130 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
131 a branch= query argument, to filter the display down to builds and
132 changes that involve the given branch. You can add multiple
133 branch= arguments to see multiple branches (using a logical OR).
134 Note that there is no way to include the default branch (i.e.
135 None, i.e. trunk) yet, there is still work to be done to allow for
136 simple+uniform names of branches (i.e. removing the VC-specific
137 details of how branches are implemented, so calling the branch
138 'beta4' even though the SVN checkout step requires
140 * buildbot/status/builder.py (BuilderStatus.eventGenerator): same
141 * buildbot/changes/changes.py (ChangeMaster.eventGenerator): same
142 * buildbot/interfaces.py (IEventSource.eventGenerator): same
143 * docs/buildbot.texinfo (Buildbot Web Resources): document it
145 * all: bring import statements up-to-date: don't import
146 __future__, assume cPickle and cStringIO are always available.
147 Also remove #!/usr/bin/python lines from non-scripts, my editor
148 has been a bit over-enthusiastic about stuffing them into new .py
151 * buildbot/status/web/index.html: put a link to the waterfall page
152 on the index, otherwise first-time users of WebStatus aren't going
153 to see anything very interesting.
155 * buildbot/interfaces.py (IEventSource): document this interface.
156 Thanks to Dustin Mitchell for the patch. Closes #60.
157 * buildbot/status/builder.py (BuilderStatus): same
158 * buildbot/changes/changes.py (ChangeMaster): same
160 * buildbot/status/web/waterfall.py (WaterfallStatusResource.buildGrid):
161 add a query arg of 'show_events=true' to display non-build events,
162 like slaves attaching/detaching and reconfig events, or
163 'show_events=false' to hide them. The default is 'true'.
164 * docs/buildbot.texinfo (Buildbot Web Resources): document it
166 * web-parts: merge in web-parts branch. Lots of changes. The new
167 functionality is to add buildbot.status.html.WebStatus, which is a
168 superset of the Waterfall that adds new status pages and serves
169 regular files from BASEDIR/public_html/ , which is now the preferred
170 place to put robots.txt, buildbot.css, and index.html .
171 * buildbot/scripts/runner.py: the 'create-master' command now
172 creates public_html/ too, and populates it with a couple of
174 * buildbot/status/web: split waterfall code into smaller pieces
176 2007-07-31 Brian Warner <warner@lothar.com>
178 * buildbot/scripts/startup.py (launch): import twistd.run in a
179 different way to hush pyflakes
180 * buildbot/process/builder.py: remove unused import
182 2007-07-30 Brian Warner <warner@lothar.com>
184 * buildbot/interfaces.py (ISourceStamp): cleanup patch by Dustin
185 Mitchell: pass SourceStamps around rather than branch/version/etc
186 tuples. Thanks Dustin! Closes #70.
187 * buildbot/sourcestamp.py (SourceStamp): insist that .changes is a
188 tuple rather than a list, to avoid surprising mutations
189 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
190 * buildbot/status/mail.py (MailNotifier.buildMessage): same
191 * buildbot/status/builder.py (BuildStatus.getSourceStamp): same
192 * buildbot/test/test_status.py (Subscription): same
193 * buildbot/test/test_control.py (Force): same
194 * buildbot/test/test_buildreq.py (Request.testMerge): same
196 2007-07-29 Brian Warner <warner@lothar.com>
198 * buildbot/scripts/sample.cfg: remove the spurious 'builders'
199 variable, since it wasn't used and is confusing in the presence of
200 c['builders'] (which *is* used). Thanks to Thomas Vander Stichele
203 * buildbot/status/web/waterfall.py (WaterfallStatusResource): update
204 the Buildbot home-page link to point at buildbot.net instead of
205 sourceforge, and add a current-version query parameter so we can
206 get some statistics on which versions are in use out there.
208 2007-07-28 Brian Warner <warner@lothar.com>
210 * buildbot/master.py (BuildMaster.loadConfig): replace c['sources']
211 with c['change_source'], leaving c['sources'] for backwards
212 compatibility (but deprecated), scheduled for removal in 0.8.0
213 * docs/buildbot.texinfo: same
214 * buildbot/test/test_config.py: verify that c['sources'] still works
215 * buildbot/test/test_*.py: replace c['sources'] with c['change_source']
216 * buildbot/scripts/sample.cfg: update to match
218 * buildbot/changes/mail.py (MaildirSource): parse with python's
219 stdlib 'email' module, which has been available since python2.2,
220 and drop use of the 'rfc822' module, which has been depreceated
222 * buildbot/test/test_maildir.py: same: use parse_file() not parse
224 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): oops,
225 this needs to match the renaming in test/mail/msg*
227 * README (SETTING UP A BUILD MASTER): fix capitalization-typo.
230 * buildbot/test/test_mailparse.py: rename sample emails a bit
231 * buildbot/test/mail/msg*: same
233 * buildbot/changes/mail.py (SVNCommitEmailMaildirSource): add a
234 parser for the "commit-email.pl" script that is shipped with SVN,
235 written by Justin Mason. Thanks! Closes SF#1072845.
236 * buildbot/test/mail/svn-commit.*: sample messages
237 * buildbot/test/test_mailparse.py (TestSVNCommitEmail): test it
238 * docs/buildbot.texinfo (SVNCommitEmailMaildirSource): docs
240 2007-07-27 Brian Warner <warner@lothar.com>
242 * buildbot/changes/mail.py: refactor: move parsing into a method
243 named 'parse', each parser type gets a separate subclass. Remove
244 the old 'sep' argument (hardcode it to '/'), fix usage of prefix=
245 to be a simple leading-substring match. Add a warning to the logs
246 if prefix= does not end in a slash, since that's probably a
247 mistake. Fix both places where a prefix= mismatch would skip all
248 subsequent files in the same email, instead of just skipping the
249 one that didn't match.
250 * buildbot/test/test_mailparse.py: match changes
252 * docs/buildbot.texinfo (Getting Source Code Changes): refactor
253 docs on email-based ChangeSources
255 * docs/buildbot.texinfo (Getting Source Code Changes): move all
256 the changesource types up a level, removing the one-entry menu in
259 * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename
260 c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave
261 instances instead of tuples. Closes #63.
262 * buildbot/slave/__init__.py (BuildSlave): define marker class
263 * buildbot/scripts/sample.cfg: use c['slaves'] in sample config
264 * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves']
265 * buildbot/test/test_*.py: update tests to match
266 * buildbot/test/test_config.py (ConfigTest.testBots): verify that
267 the c['bots'] backwards-compatibility handler works
269 2007-07-26 Brian Warner <warner@lothar.com>
271 * buildbot/changes/hgbuildbot.py (hook): add an in-process
272 Mercurial change-sending hook, contributed by Frederic Leroy.
273 Thanks! Addresses #50.
274 * docs/buildbot.texinfo (MercurialHook): document it
276 * buildbot/changes/hgbuildbot.py: change the way imports are done,
277 to make it compatible with at least hg-0.9.1 and the current 0.9.4
279 2007-07-17 Brian Warner <warner@lothar.com>
281 * buildbot/process/buildstep.py (BuildStep.getLog): add a
282 convenience method to retrieve a log added with
283 addLog()/addCompleteLog()/etc or logfiles= . I should have added
286 2007-07-03 Brian Warner <warner@lothar.com>
288 * buildbot/slave/commands.py (ShellCommand._startCommand): when
289 logging the environment variables, put one variable on each line,
290 rather than having one really long line with all of them. This
291 should make them a bit more readable and not trigger the
292 horizontal scrollbar (when viewing it in a web browser) quite so
293 much. Thanks to Albert Hofkamp for the patch.
295 * buildbot/steps/shell.py (ShellCommand): allow workdir= to be a
296 WithProperties instance. Thanks to Axel Hecht for the patch.
298 * buildbot/test/test_properties.py (Interpolate.testWorkdir): test it
299 * docs/buildbot.texinfo (Build Properties): document it
300 * buildbot/slave/commands.py (ShellCommand._startCommand): create the
301 workdir if it didn't already exist.
303 * docs/buildbot.texinfo (Scheduler Types): correct the description
304 of Dependent schedulers. Thanks to Greg Ward for the patch.
306 * buildbot/steps/source.py (SVN.startVC): when applying a patch,
307 add "[patch]" to the step's display. Thanks to Dustin Mitchell for
308 the patch. Closes #49.
310 * buildbot/slave/commands.py (rmdirRecursive): chmod everything to
311 0700 before removing it, to deal with situations where a build will
312 leave files around without write permissions and the 'copy' or
313 'clobber' VC checkout modes need to blow away the tree first.
314 Thanks to Steve Milner for the suggestion and the patch (which I
315 mangled horribly). Closes #29.
316 * buildbot/test/test_slavecommand.py (Utilities.test_rmdirRecursive):
319 * buildbot/test/runutils.py (RunMixin.disappearSlave): oops, add
320 an allowReconnect= argument to let callers control whether they
321 want this don't-let-it-reconnect behavior, since some tests care.
322 Factor out the .continueTrying=False lines from those callers.
323 * buildbot/test/test_slaves.py: same
324 * buildbot/test/test_run.py: same
326 2007-07-02 Brian Warner <warner@lothar.com>
328 * buildbot/test/runutils.py (RunMixin.disappearSlave): once a
329 slave has been disappeared, don't let it reconnect. This was
330 causing an intermittent failure in test_slaves.py, when the slave
331 that was supposed to be gone managed to come back by the end of
332 the test and affect the count.
333 * buildbot/test/test_slaves.py (Slave.testFallback2): minor
335 * buildbot/process/builder.py (SlaveBuilder.__repr__): added some
336 diagnostic messages to track down this problem
337 (Builder.startBuild): same
339 * buildbot/process/builder.py (Builder.maybeStartBuild): choose
340 the slave randomly rather than always taking the first one. Thanks
341 to Pike for the patch. Closes #36.
342 * buildbot/test/test_slaves.py: match the change. to avoid huge
343 changes to the tests, I added a CHOOSE_SLAVES_RANDOMLY flag which
344 enables/disables the round-robin-ness (enabled by default), and
345 some unit tests disable it.
346 * docs/buildbot.texinfo (Buildmaster Architecture): document it
348 * buildbot/slave/bot.py (BuildSlave.__init__): rename the 'host'
349 argument to 'buildmaster_host', to make it more obvious that this
350 points to the buildmaster. Thanks to Bob Proulx for the
352 * buildbot/scripts/runner.py (slaveTAC): same
353 * buildbot/test/test_runner.py (Create.testSlave): match the change
355 * contrib/hg_buildbot.py: patch from Frederic Leroy to make this
358 2007-06-17 Brian Warner <warner@lothar.com>
360 * buildbot/test/test_config.py (Factories.testAllSteps): make sure
361 we can round-trip all of our current step classes by calling
362 getStepFactory() and using the results to make a clone of the
365 * buildbot/steps/maxq.py: fix import errors. Guess this hasn't been
368 * buildbot/process/factory.py (BuildFactory.addStep): To simplify
369 the config file, we're moving to using actual instances instead of
370 the (class, kwargs) 'step specification' tuples. BuildFactory
371 still keeps a list of tuples internally, but when real instances
372 are passed in to addStep(), they are asked for their class and
373 kwargs using the new BuildStep.getStepFactory method. BuildFactory
374 accepts both instances and the tuple form, and converts instances
375 to the tuple form, but the instance form is preferred because it
376 gives the Steps a chance to do argument validation. Closes: #11.
378 * buildbot/process/buildstep.py (BuildStep.__init__): record the
379 factory information necessary to implement getStepFactory. The
380 addFactoryArguments() method can be used to include arguments that
381 aren't passed to the BuildStep base class constructor.
382 (BuildStep.setBuild):
383 (BuildStep.setDefaultWorkdir): new methods to take parameters that
384 are needed for live BuildSteps but not to construct the specification
385 tuples that are stashed in the factory.
387 * buildbot/process/base.py (Build.setupBuild): pass 'build' and
388 'workdir' into new BuildSteps by using methods instead of
389 arguments. This makes the constructor for BuildSteps a lot
392 * buildbot/steps/*.py: update to match this change. Basically this
393 means adding calls to addFactoryArguments() in the __init__
394 methods to capture the arguments that aren't passed through to the
396 * buildbot/steps/shell.py (ShellCommand.setDefaultWorkdir): copy
397 the new workdir (if any) into the RemoteShellCommands arguments.
398 * buildbot/steps/source.py: allow workdir= to be optional,
399 implement setDefaultWorkdir() since we don't inherit from
400 (CVS): finally remove old clobber=/export=/copydir= arguments,
401 in favor of the mode= argument that's been around forever now.
402 * buildbot/steps/transfer.py: remove build= argument
404 * buildbot/test/*.py: update to match, generally by turning all
405 build= arguments into subsequent calls to s.setBuild()
406 * buildbot/test/test_config.py (Factories): verify that we can
407 use either BuildStep instances or class/kwarg tuples in both
408 BuildFactory.addStep and BuildFactory.__init__
410 * docs/buildbot.texinfo (Build Steps): document the new approach,
411 mention compatibility with the old approach, update all examples
412 to use the new style.
414 2007-06-16 Brian Warner <warner@lothar.com>
416 * buildbot/changes/svnpoller.py: when the poll fails, don't kill
417 the LoopingCall, just eat the failure so that we'll poll again
418 next time. This should allow us to tolerate (e.g.) sf.net SVN
419 failures more gracefully. Many thanks to Dustin Mitchell for the
422 2007-05-17 Brian Warner <warner@lothar.com>
424 * buildbot/status/words.py: refactor the IRC status bot into
425 separate 'Contact' and 'Channel' classes. The base Contact class
426 contains the interaction code: commands and responses. The
427 IRCContact subclass (and IrcStatusBot 'Channel') handle the
428 IRC-specific aspects. The plan is to write other subclasses for
429 other IM protocols like AIM and Jabber.
431 2007-04-16 Brian Warner <warner@lothar.com>
433 * CREDITS: update list of contributors. Thank you all!
435 2007-04-13 Brian Warner <warner@lothar.com>
437 * buildbot/status/mail.py (MailNotifier): add the project name to
438 the subject line and message body, to make it easier to
439 distinguish email coming from different buildmasters. Thanks to
440 Benoit Sigoure for the patch.
441 * buildbot/test/test_status.py (Mail): update to match
443 2007-03-24 Brian Warner <warner@lothar.com>
445 * buildbot/steps/transfer.py: open all files in 'b' binary mode to
446 avoid text-conversion problems between DOS/windows and unix.
447 Thanks to Phil Thompson for the patch. Fixes SF#1674927.
449 2007-03-03 Brian Warner <warner@lothar.com>
451 * buildbot/status/html.py (_hush_pyflakes): hush a pyflakes
452 warning about the use of Waterfall here
454 2007-03-01 Brian Warner <warner@lothar.com>
456 * buildbot/interfaces.py (IStatus.getBuilder): mention exceptions
458 2007-02-28 Brian Warner <warner@lothar.com>
460 * buildbot/changes/p4poller.py (P4Source): apply change from Scott
461 Lamb to use a more optimal form of 'p4 changes', to reduce server
462 load. He reports that this optimization was added to p4d release
463 2005.2, but it should work in all versions. Closes #27.
464 * buildbot/test/test_p4poller.py: match it
466 2007-02-27 Brian Warner <warner@lothar.com>
468 * buildbot/status/web/*.py: move all web status stuff into a
469 separate directory, in anticipation of splitting it into smaller
470 pieces and adding more files. html.py was getting way too big.
471 * buildbot/status/classic.css: move it too
472 * setup.py: add the new sub-package
473 * buildbot/test/test_web.py: match the changes
474 * MANIFEST.in: handle the move of classic.css
476 2007-02-07 Brian Warner <warner@lothar.com>
478 * contrib/OS-X/*: add some launchd .plist files for automatically
479 starting a buildmaster or buildslave under OS-X (10.4 or later).
480 Thanks to Mark Pauley for these.
482 2007-02-06 Brian Warner <warner@lothar.com>
484 * docs/buildbot.texinfo (Requirements): update requirements to
485 stop claiming compatibility with python-2.2 or twisted-1.3.x .
487 * README: mention python-2.5 and twisted-2.5 compatibility
489 * buildbot/clients/debug.py: hush pyflakes warnings by removing a
491 * buildbot/scripts/startup.py: same, by removing twisted-1.3.0
493 * buildbot/status/builder.py: same, by requiring cStringIO
494 * buildbot/status/words.py: same, remove twisted-1.3.0 compat
495 * buildbot/test/test_vc.py: same
496 * buildbot/test/test_web.py:
497 * buildbot/test/test_steps.py: same, remove unused import
499 * buildbot/status/html.py (StatusResourceBuild.body): oops, close
502 * buildbot/master.py (BuildMaster.loadConfig): warn the user if we
503 see any Builders that don't have Schedulers to drive them
505 * buildbot/master.py (BotPerspective.__repr__): fit bitrot, the
506 attributes this uses went away
508 * contrib/bb_applet.py (MyApplet.filled): add a small prefs
509 dialog, to allow you to reset the buildmaster and force
510 connect/disconnect. Correctly handle losing the buildmaster
511 connection (by switching the display to the hexnut, at which point
512 you can use the 'Connect' menu item to reconnect).
514 * buildbot/steps/source.py (Source.start): if we're using a patch,
515 add it as a LogFile to the checkout/update step. This will turn
516 into a link on the waterfall page.
518 * buildbot/scripts/tryclient.py (Try.createJob): implement --diff
519 option, to take the patch from a pre-made file rather than
520 generating it from the local tree. Thanks to Robert Helmer for the
521 idea. Closes #15 (the Trac ticket on the new http://buildbot.net/).
522 * buildbot/scripts/runner.py (TryOptions): add --diff,
523 --patchlevel, and --baserev options
524 * buildbot/scheduler.py (Try_Jobdir.parseJob): treat a baserev of ""
525 as None, meaning HEAD.
526 * buildbot/sourcestamp.py (SourceStamp): update docstring to
527 indicate that baserev=None means HEAD
528 * docs/buildbot.texinfo (try --diff): document it
530 * buildbot/test/test_steps.py (BuildStep): remove use of
531 reactor.iterate(), although the technique I replaced it with is a
532 gross polling hack that must be cleaned up properly some day. This
533 was the last use of reactor.iterate in the entire tree, yay.
535 2007-02-05 Brian Warner <warner@lothar.com>
537 * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
538 is one of the three known values, otherwise we emit some confusing
539 messages later on. Thanks to Grig Gheorghiu for the catch.
541 2007-01-30 Brian Warner <warner@lothar.com>
543 * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
544 Hearsum contributed a patch to let BonsaiPoller work with results
545 that contain non-ascii characters. Closes SF#1632641.
547 2007-01-27 Brian Warner <warner@lothar.com>
549 * Makefile (release): produce both .tar.gz and .zip source bundles.
552 2007-01-23 Brian Warner <warner@lothar.com>
554 * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
555 * buildbot/changes/monotone.py: same
557 * buildbot/changes/maildir.py: combine several files into one,
558 clean up maildir.py to use Services properly.
559 * buildbot/changes/maildirtwisted.py: remove
560 * buildbot/changes/maildirgtk.py: remove, it wasn't used by
562 * buildbot/changes/mail.py: match the change
563 * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
564 * buildbot/test/test_maildir.py: remove use of reactor.iterate()
566 * buildbot/slave/commands.py (command_version): bump to "2.3" to
567 indicate that the buildslave knows about the 'bzr' command
569 2007-01-22 Brian Warner <warner@lothar.com>
571 * buildbot/process/builder.py (Builder.fireTestEvent): don't use
572 'with', it will become a reserved work in python2.6 .
574 * contrib/bb_applet.py: add a simple gnome-panel applet, to
575 display a terse summary of buildbot status.
576 * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
577 some icons, small versions of the Blender object that lives in
578 docs/images/icon.blend
580 * buildbot/steps/source.py (Bzr): add Bazaar-ng support
581 * buildbot/slave/commands.py (Bzr): same
582 * buildbot/scripts/tryclient.py (BzrExtractor): same
583 (SourceStampExtractor.dovc): modify this to allow non-zero exit
584 status, since 'bzr diff' does that
585 * buildbot/test/test_vc.py (Bzr): same
586 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
590 2007-01-20 Brian Warner <warner@lothar.com>
592 * contrib/darcs_buildbot.py: tidy up the progress messages
594 2007-01-17 Brian Warner <warner@lothar.com>
596 * contrib/darcs_buildbot.py: enhance to handle multiple patches
597 being pushed at a time. This keeps state in the repository in a
598 small file named .darcs_buildbot-lastchange, but that shouldn't
599 interfere with normal repository operations. Fixes SF#1534049.
600 * buildbot/clients/sendchange.py (Sender): make a single Sender
601 capable of sending Changes with different usernames.
603 2006-12-11 Brian Warner <warner@lothar.com>
605 * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
606 scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
607 buildbot.changes.mail a long time ago, but I forgot to add the
608 DeprecationWarning until now.
610 * buildbot/process/maxq.py: remove this, the functionality now
611 lives in buildbot.steps.maxq
613 * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
614 * buildbot/clients/gtkPanes.py: remove unused import
616 * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
617 that was meant to provide a special Reporter to run inside trial
618 and give the buildslave lots of machine-readable status. We never
619 finished this project.
621 * buildbot/changes/bonsaipoller.py: remove unused imports
622 * buildbot/changes/svnpoller.py: same
623 * buildbot/process/builder.py: same
624 * buildbot/process/buildstep.py: same
625 * buildbot/slave/bot.py: hush pyflakes warning
626 * buildbot/status/tests.py: remove unused imports
627 * buildbot/status/tinderbox.py: same
628 * buildbot/steps/python_twisted.py: same
630 * buildbot/process/step.py: remove this file, these names were
631 deprecated in 0.7.5 and are now being removed.
632 * buildbot/process/step_twisted.py: same
633 * buildbot/test/test_steps.py (ReorgCompatibility): remove test
635 * buildbot/twcompat.py: remove the empty file, yay it is gone
637 * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
638 tw-2.0.0 and newer have the method we need.
639 (getProcessOutputAndValue): same
640 (which): remove this method, tw-2.0.0 t.p.procutils has it
642 * buildbot/twcompat.py (implements): remove this method
643 * buildbot/*: import implements() from zope.interface directly
645 * buildbot/status/mail.py: stop falling back to importing
646 twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
649 * buildbot/twcompat.py (Interface): remove this import
650 * buildbot/*: import Interface from zope.interface directly
652 * buildbot/twcompat.py (providedBy): remove this method
653 * buildbot/*: turn all uses of providedBy(obj, iface) into
654 iface.providedBy(obj)
656 * buildbot/twcompat.py (maybeWait): remove this method, now that
657 we no longer maintain compatibility with Twisted<=1.3.0 .
658 Twisted-2.0.0 and later allow trial methods to return Deferreds
660 * buildbot/test/*: remove all uses of maybeWait
662 * buildbot/__init__.py (version): bump to 0.7.5+ while between
664 * docs/buildbot.texinfo: same
666 2006-12-10 Brian Warner <warner@lothar.com>
668 * buildbot/__init__.py (version): Releasing buildbot-0.7.5
669 * docs/buildbot.texinfo: set version to match
671 2006-12-10 Brian Warner <warner@lothar.com>
673 * README (REQUIREMENTS): update for release
674 * NEWS: update for release
675 * buildbot/slave/commands.py (command_version): mention that this
676 version (2.2) was released with buildbot-0.7.5
678 * buildbot/test/test_config.py (StartService.testStartService):
679 inhibit the usual read-config-on-startup behavior, since otherwise
680 the log.err that gets recorded causes the test to fail
682 * buildbot/status/builder.py (LogFile.finish): forget about all
683 subscribers once the log has finished, since after that point
684 we're never going to use them again. This might help free up some
687 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
688 than the old/deprecated gtk.mainquit()
690 2006-12-09 Brian Warner <warner@lothar.com>
692 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
693 better when we can't open the masterdst file
695 * buildbot/scripts/startup.py (Follower._failure): add missing
696 import statement for BuildSlaveDetectedError
698 * buildbot/steps/transfer.py (FileUpload): cleanup
699 (FileDownload): same. Add tests for slave version, add mode=.
700 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
701 (SlaveFileDownloadCommand): same
702 * buildbot/test/test_transfer.py: enhance tests
703 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
706 2006-12-08 Brian Warner <warner@lothar.com>
708 * buildbot/scripts/runner.py (sendchange): halt the reactor on
709 both success *and* failure. Without this, the 'buildbot
710 sendchange' command would hang if it could not contact the
711 buildmaster or deliver the Change, which would generally cause the
712 user's commit/record/checkin command to hang too. Thanks to
713 Christian Unger for the catch.
715 2006-12-06 Brian Warner <warner@lothar.com>
717 * NEWS: update with items for the next release
719 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
720 whimsical example pulled from a punch-drunk email I sent out late
722 (Transferring Files): document some of the other parameters
723 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
724 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
725 * buildbot/test/test_svnpoller.py: same
726 * buildbot/changes/svnpoller.py (SVNPoller): same
728 2006-11-26 Brian Warner <warner@lothar.com>
730 * docs/buildbot.texinfo (Build Properties): remind users that
731 WithProperties must appear in a command= list, not as a top-level
733 * buildbot/steps/shell.py (ShellCommand.start): and assert that
734 we're sending a list or a single string to the RemoteShellCommand
736 * buildbot/scheduler.py (Nightly): Improve docs slightly.
738 * buildbot/scripts/startup.py (start): skip the whole
739 watch-the-logfile thing under windows, since it needs os.fork()
741 * buildbot/scripts/runner.py (restart): remove the old message
742 that got printed after the buildbot was restarted.. it most cases
743 it didn't get printed at the right time anyways
745 2006-11-25 Brian Warner <warner@lothar.com>
747 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
748 follow twistd.log and print lines until the process has started
749 started properly. For the buildmaster, this means until the config
750 file has been parsed and accepted. For the buildslave, this means
751 until we've connected to the master. We give up after 5 seconds in
752 any case. Helpful error messages and troubleshooting suggestions
753 are printed when we don't see a successful startup. This closes the
754 remainder of SF#1517975.
755 * buildbot/scripts/startup.py: moved app startup code to here
756 * buildbot/scripts/logwatcher.py: utility class to follow log
757 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
758 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
759 so the LogWatcher can tell the difference between a buildmaster
762 2006-11-24 Brian Warner <warner@lothar.com>
764 * docs/examples/twisted_master.cfg: update to match the version
765 in use on twistedmatrix.com
766 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
767 was using before stopped working, but 'irc.freenode.net' works
770 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
773 * buildbot/clients/base.py (TextClient.not_connected): upon
774 UnauthorizedLogin failures, remind the user to connect to the
775 PBListener port instead of the slaveport.
776 (TextClient.disconnected): shut down more quietly
777 * docs/buildbot.texinfo (statuslog): add another reminder
779 * buildbot/scripts/runner.py (Options.subCommands): rename
780 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
781 'sighup' as an alias.
782 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
783 reconfig command to follow twistd.log and print all of the lines
784 from the start of the config-file reload to its completion. This
785 should make it a lot easier to discover bugs in the config file.
786 Use --quiet to disable this behavior. This addresses half of
787 SF#1517975, the other half will be to add this same utility to
788 'buildbot start' and 'buildbot restart'.
789 * docs/buildbot.texinfo (Loading the Config File): same
792 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
793 method, it has been deprecated for a long time. Use
794 IBuilderControl.requestBuild instead.
795 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
796 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
797 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
798 * buildbot/test/test_control.py (Force.testForce): same
799 * buildbot/test/test_run.py: use requestBuild instead
801 * buildbot/clients/debug.py: replace 'Force Build' button with
802 'Request Build' (which just adds one to the queue), add Ping
803 Builder, add branch/revision fields to Request Build.
804 * buildbot/clients/debug.glade: same
805 * buildbot/master.py: update interface to match. This creates an
806 incompatibility between new debugclients and old buildmasters.
808 * buildbot/process/builder.py (Builder._attached): delay the call
809 to maybeStartBuild for a reactor turn, to avoid starting a build
810 in the middle of a reconfig (say, if the new Builder uses a new
811 slave which is already connected).
813 2006-11-23 Brian Warner <warner@lothar.com>
815 * buildbot/test/test_transfer.py: appease pyflakes
816 * buildbot/test/test_steps.py: same
818 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
819 keeps pyflakes from finding undefined names
821 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
822 Builder no longer induces a disconnect/reconnect cycle. This means
823 that any builds currently in progress will not be interrupted, and
824 any builds which are queued in the Builder will not be lost. This
825 is implemented by having the new Builder extract the state (i.e.
826 all pending Builds and any desired SlaveBuilders) from the old
828 (BotPerspective): refactor. The BotPerspective no longer keeps
829 track of all the Builders that want to use this slave; instead, it
830 asks the BotMaster each time it needs this list. This removes
831 addBuilder and removeBuilder. Clean up attached() to acquire all
832 the slave's information in a more atomic fashion. updateSlave() is
833 now the way to make sure the slave is using the right set of
834 Builders: just call it after everything else has been
836 (BotMaster): refactor, removing addBuilder/removeBuilder and
837 replacing them with an all-at-once setBuilders() call.
839 * buildbot/test/test_slaves.py (Reconfig): new test case to
840 exercise this functionality
841 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
842 * buildbot/slave/commands.py (WaitCommand): same
844 * docs/buildbot.texinfo (Loading the Config File): document the
847 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
848 SlaveBuilder to have its parent Builder changed.
849 (SlaveBuilder.isAvailable): new method to give access to state,
850 which is now a private attribute
851 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
852 the SlaveBuilder about how it is being used. These methods update
853 its internal state. buildFinished() is now the place that invokes
854 maybeStartBuild() on its parent Builder.
855 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
856 new Builder to take over for an old one, transferring state from
858 (Buider): refactor the way that SlaveBuilders are used to match,
859 giving them a bit more autonomy.
860 (Builder.buildFinished): this no longer calls maybeStartBuild():
861 instead the SlaveBuilder calls it on whoever its parent Builder is
862 at the time. This way, when an old Builder is replaced by a new
863 one, and there was a build in progress during the transition, when
864 that build finishes, it will be the new Builder that is told about
865 the newly available slave so it can start a new build.
867 * buildbot/process/base.py (Build.startBuild._release_slave): when
868 the Build finishes, tell the SlaveBuilder that they've been
871 * buildbot/status/builder.py (SlaveStatus): add some new setter
872 methods for use by BotPerspective, to keep some attributes more
875 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
876 called by the buildmaster.
877 (Bot.setBuilderList): instead, we locally announce any leftover
878 directories based upon which Builders we were told about. The
879 master doesn't really care; it's the local admin who may or may not
883 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
884 to allow use of python2.4 or whatever. This tool still requires
887 2006-11-19 Brian Warner <warner@lothar.com>
889 * NEWS (IStatusLog.readlines): more news items
891 2006-11-18 Brian Warner <warner@lothar.com>
893 * NEWS: start collecting items for the next release.
895 2006-11-04 Brian Warner <warner@lothar.com>
897 * buildbot/changes/bonsaipoller.py: apply updates from Ben
898 Hearsum. Closes SF#1590310.
899 * buildbot/test/test_bonsaipoller.py: and tests
901 * buildbot/status/tinderbox.py
902 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
903 status when the build results in WARNINGS. Patch from Dave
904 Liebreich. Closes SF#1587352.
906 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
907 linux-vs-osx behavior difference w.r.t. reading from files that
908 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
909 to Mark Rowe for the patch.
911 2006-10-15 Brian Warner <warner@lothar.com>
913 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
914 method name was misspelled in the interface definition. Thanks to
915 Roy Rapoport for the catch.
917 2006-10-13 Brian Warner <warner@lothar.com>
919 * docs/buildbot.texinfo (Adding LogObservers): update sample code
920 to match the great Steps renaming
922 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
923 Maybe I should run my own unit tests before recording a big
924 change. Good thing I've got a buildbot to remind me.
926 2006-10-12 Brian Warner <warner@lothar.com>
928 * buildbot/steps/transfer.py: rework __init__ and args setup
929 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
931 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
932 when opening the target file, only catch IOError (to report via
933 stderr/rc!=0), let the others be reported as normal exceptions
935 2006-10-08 Brian Warner <warner@lothar.com>
937 * contrib/svn_watcher.py: fix security holes by using proper argv
938 arrays and subprocess.Popen() rather than commands.getoutput().
939 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
940 is deprecated in favor of buildbot/changes/svnpoller.py, and will
941 probably be removed by the next release.
944 2006-10-04 Brian Warner <warner@lothar.com>
946 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
947 initial lines that weren't emitted by pyflakes. When the pyflakes
948 command is run under a Makefile, 'make' will echo the command it
949 runs to stdio, and that was getting logged as a "misc" warning.
950 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
951 * buildbot/test/test_steps.py (testPyFlakes3): another test
953 2006-10-01 Brian Warner <warner@lothar.com>
955 * buildbot/status/html.py (HtmlResource.render): if we get a
956 unicode object from our content() method, encode it into utf-8
957 like we've been claiming to all along. This allows the comments
958 and author names from svnpoller.py to be delivered properly.
960 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
961 de-unicodify filenames before creating the Change, because the
962 rest of buildbot is unlikely to handle them well. Leave the 'who'
963 field as a unicode object.. I don't think there's anything that
964 will break very soon, and it will probably nudge us towards
965 accepting unicode everywhere sooner or later. Stop using the
966 "date" field that comes out of SVN, since it is using the
967 repository's clock (and timezone) and what we care about is the
968 buildmaster's (otherwise Changes from the future show up later
969 than the builds they triggered).
970 * buildbot/test/test_svnpoller.py (Everything.test1): match the
973 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
974 Suvbersion repository polling ChangeSource. I've hacked it up
975 considerably: any bugs are entirely my own fault. Thank you
977 * buildbot/test/test_svnpoller.py: tests for it
978 * docs/buildbot.texinfo (SvnSource): document it
980 2006-09-30 Brian Warner <warner@lothar.com>
982 * buildbot/scheduler.py (Periodic): submit a reason= to the
983 BuildSet to indicate which Scheduler triggered the build. Thanks
984 to Mateusz Loskot for the suggestion.
986 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
988 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
989 changes: set self.loop in __init__, remove unused volatile=
991 * docs/buildbot.texinfo (.buildbot config directory): add more
992 docs on the .buildbot/options keys used by "buildbot try"
993 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
994 (Try.deliverJob): same
996 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
1000 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
1001 close the filehandle when we stop watching the file. Before, the
1002 filehandle was only closed when the LogFileWatcher was
1003 garbage-collected, which could be quite a while in the future. If
1004 it was still open by the time the next build started, windows will
1005 refuse to let the new build delete the old build/ directory. Fixes
1006 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
1007 #twisted for the catch.
1009 2006-09-29 Brian Warner <warner@lothar.com>
1011 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
1014 2006-09-25 Brian Warner <warner@lothar.com>
1016 * setup.py: the new buildbot.steps module wasn't being installed.
1017 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
1018 (testmsgs): add the extra stuff from buildbot/test/* so you can
1019 run unit tests on an installed copy of buildbot, not just from
1022 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
1023 columns of 'svnlook changed' output contain status information, so
1024 strip [:4] instead of [:6]. Depending upon what the status flags
1025 were, this would sometimes lead to mangled filenames. Thanks to
1026 Riccardo Magliocchetti for the patch. Closes SF#1545146.
1028 * buildbot/steps/source.py (Monotone): initial Monotone support,
1029 contributed by Nathaniel Smith. Still needs docs and tests, but
1030 this code has been in use on the Monotone buildbot for a long
1032 * buildbot/slave/commands.py (Monotone): slave-side support
1033 * buildbot/changes/monotone.py (MonotoneSource): polling change
1036 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
1037 contributed a Change Source that polls a Bonsai server (a
1038 kind of web-based viewcvs CGI script).
1040 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
1041 Hearsum contributed a status plugin which sends email in the same
1042 format that Tinderbox does: this allows a number of tinderbox
1043 tools to be driven by Buildbot instead. Thanks Ben!
1045 2006-09-24 Brian Warner <warner@lothar.com>
1047 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
1048 Thanks to Robert Helmer for the patch.
1050 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
1051 BuildStatus about the buildslave name at the *beginning* of the
1052 build, rather than at the end. Thanks to Alexander Lorenz for the
1054 * buildbot/status/html.py (StatusResourceBuild.body): always
1055 include the slavename in the build page, not just when the build
1057 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
1058 slavename in the email message
1060 2006-09-21 Brian Warner <warner@lothar.com>
1062 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
1064 * docs/examples/glib_master.cfg: same
1065 * docs/examples/hello.cfg: same
1066 * docs/examples/twisted_master.cfg: same, update to current usage
1068 2006-09-19 Brian Warner <warner@lothar.com>
1070 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
1071 (PyFlakes.createSummary): make it compatible with python-2.2
1073 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
1074 for at least the output-parsing parts of PyFlakes
1076 2006-09-18 Brian Warner <warner@lothar.com>
1078 * buildbot/steps/python.py: oops, fix import of StringIO
1080 2006-09-17 Brian Warner <warner@lothar.com>
1082 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
1083 turns out that SVN-1.4.0 doesn't fail to update once you've
1084 replaced a file with a directory, unlike older versions of SVN and
1085 pretty much every other VC tool we support. Since what we really
1086 care about is that the update succeeds anyway, stop checking that
1087 the tree got clobbered and just assert that the build succeeded.
1088 (VCBase.printLogs): add a utility function for debugging
1090 * buildbot/process/step.py: oops, added extra imports by mistake
1092 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
1093 rstrip() on the first line coming out of the 'p4 describe'
1094 process, to remove the stray ^M that Wade Brainerd reports seeing
1095 in the 'when' field. Fixes SF#1555985.
1097 * buildbot/master.py (BuildMaster.loadConfig): improve the error
1098 message logged when c['schedulers'] is not right
1099 * buildbot/scheduler.py (Scheduler.__init__): improve error
1100 message when a Scheduler() is created with the wrong arguments
1101 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
1102 verify that these error messages are emitted
1104 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
1105 The idea is that all the base classes (like BuildStep and
1106 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
1107 will be a leftover backwards-compatibility file that only contains
1108 aliases for the steps that were moved out to buildbot.steps.*
1109 * lots: change imports to match
1110 * buildbot/process/step.py: add a DeprecationWarning if it ever
1113 2006-09-12 Brian Warner <warner@lothar.com>
1115 * buildbot/scheduler.py (Scheduler.__init__): make sure that
1116 builderNames= is actually a sequence, since if you happen to give
1117 it a single builder-specification dictionary instead, it won't get
1118 caught by the existing assert. Thanks to Brett Neely for the
1121 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
1123 * docs/buildbot.texinfo (Python BuildSteps): document them
1124 (sendchange): include a link to PBChangeSource, since you need one
1126 * buildbot/steps/shell.py: clean up test-case-name line, remove some
1128 * buildbot/steps/dummy.py: same
1130 2006-09-08 Brian Warner <warner@lothar.com>
1132 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
1133 BuildStep which lets you transfer files from the master to the
1134 slave or vice versa. Thanks to Albert Hofkamp for the original
1135 patch. Fixes SF#1504631.
1136 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
1138 (SlaveFileDownloadCommand): same
1139 * docs/buildbot.texinfo (Transferring Files): document it
1140 * buildbot/test/test_transfer.py: test it
1141 * buildbot/test/runutils.py (StepTester): new utility class for
1142 testing BuildSteps and RemoteCommands without Builds or Bots or PB
1143 * buildbot/test/test_steps.py (CheckStepTester): validate that the
1146 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
1147 walk through StatusLogs one line at a time, mostly for the benefit
1148 of ShellCommand.createSummary methods. You can either walk through
1149 STDOUT or STDERR, but the default is STDOUT.
1151 * buildbot/status/builder.py (LogFile.readlines): implement it.
1152 Note that this is not yet memory-efficient, it just pulls the
1153 whole file into RAM and then splits it up with a StringIO.
1154 Eventually this should be a generator that only pulls chunks from
1156 * buildbot/test/test_status.py (Log.testReadlines): test it
1158 * docs/buildbot.texinfo: update to match changes
1159 * buildbot/process/factory.py: stop using old definitions
1160 * buildbot/process/process_twisted.py: same
1161 * buildbot/test/test_*.py: same
1163 * buildbot/process/step_twisted.py: move definition to..
1164 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
1165 relative-import mechanisms prevent this from being named 'twisted'
1166 or 'python/twisted' as I would have preferred.
1168 * buildbot/process/maxq.py: move definition to..
1169 * buildbot/steps/maxq.py: .. here, leave a compatibility import
1171 * buildbot/process/step.py: split the user-visible BuildSteps into
1172 separate files, all under buildbot/steps/
1173 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
1174 * buildbot/steps/shell.py: this holds ShellCommand and friends
1175 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
1177 2006-09-05 Brian Warner <warner@lothar.com>
1179 * lots: run pyflakes, removed a lot of unused imports, changed the
1180 form of some conditional imports to remove false pyflakes
1181 warnings. There are still a number of warnings left, mostly from
1182 imports that are done for their side-effects.
1183 * buildbot/test/test_vc.py: import twisted.python.failure, since it
1186 2006-08-26 Brian Warner <warner@lothar.com>
1188 * buildbot/test/test_locks.py (Unit.testLater): make the tests
1189 compatible with twisted-1.3.0, for some reason I just can't seem
1190 to let go of the past.
1192 2006-08-25 Brian Warner <warner@lothar.com>
1194 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
1196 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
1197 all logfiles= in startCommand(), rather than in start() . This
1198 makes it easier to have the 'stdio' log come before any secondary
1199 logfiles, which I feel makes the waterfall display more
1201 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
1202 from ShellCommand up into LoggingBuildStep
1203 (LoggingBuildStep.__init__): move the handling of logfiles= from
1204 ShellCommand up to LoggingBuildStep, because startCommand is
1205 provided by LoggingBuildStep, whereas start() was specific to
1206 subclasses like ShellCommand and Source. This removes code
1207 duplication in those subclasses.
1208 (ShellCommand.__init__): same
1209 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
1210 for a slave that's too old to understand logfiles= into a separate
1211 method, so it can live in ShellCommand. The rest of
1212 setupLogfiles() can live in LoggingBuildStep.
1214 2006-08-24 Brian Warner <warner@lothar.com>
1216 * buildbot/locks.py (BaseLock): you can now configure Locks to
1217 allow multiple simultaneous owners. They still default to
1218 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
1220 * docs/buildbot.texinfo (Interlocks): document the new options
1221 * buildbot/test/test_locks.py: add a bunch of new unit tests
1222 * buildbot/process/base.py (Build.acquireLocks): locks now offer
1223 waitUntilMaybeAvailable, not waitUntilAvailable
1224 * buildbot/process/step.py (BuildStep.acquireLocks): same
1225 * buildbot/master.py (BotMaster.getLockByID): real locks now use
1226 the whole lockid in their constructor, not just the name. Also,
1227 keep track of which real locks we've handed out by the full
1228 lockid, not just class+name, otherwise changing just the maxCount=
1229 in the master.cfg file would not actually cause a behavioral
1232 2006-08-23 Brian Warner <warner@lothar.com>
1234 * buildbot/__init__.py (version): bump to 0.7.4+ while between
1236 * docs/buildbot.texinfo: same
1238 2006-08-23 Brian Warner <warner@lothar.com>
1240 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
1241 * docs/buildbot.texinfo: set version to match
1242 * NEWS: update for 0.7.4
1243 * buildbot/slave/commands.py (command_version): mention that this
1244 version (2.1) was released with buildbot-0.7.4
1246 2006-08-22 Brian Warner <warner@lothar.com>
1250 * CREDITS: new file, list of people who have helped. Thanks!
1251 * MANIFEST.in: ship it
1253 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
1254 new diagrams, the user's manual is more informative than it was.
1255 Start shipping the .html user's manual (and generated .png
1257 * Makefile: update 'release' target to match
1259 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
1260 test.. I think the web-parts effort will render it pointless well
1261 before it ever actually starts to work.
1263 2006-08-20 Brian Warner <warner@lothar.com>
1265 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
1266 meaning of the prefix= argument. It is now just a string which is
1267 stripped from the beginning of the filename. If prefix= is set but
1268 not found on any given filename, that filename is ignored. If all
1269 filenames in a Change are ignored, the Change is dropped. This is
1270 much simpler than the previous sep= nonsense, and I should have
1271 implemented it this way from the beginning. Effectively resolves
1272 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
1273 Gedminas for the catch and suggested fixes.
1274 (ChangePerspective.perspective_addChange): implement the actual
1276 * buildbot/test/test_changes.py (TestChangePerspective): test it
1277 * docs/buildbot.texinfo (PBChangeSource): document it, explain
1278 how to properly use prefix=
1279 * docs/examples/twisted_master.cfg (source): update prefix= by
1280 adding the trailing slash
1283 * docs/examples/twisted_master.cfg: update to actual practice
1285 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
1286 update test case to match new link text.. the HREF has both a
1287 class= setting and an enclosing [] pair that I didn't match in the
1290 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
1291 list of strings is preferred over a single string with embedded
1293 (ShellCommand.description=): explain that either single strings or
1294 a list of strings is acceptable, and why you might prefer one over
1295 the other. Add an example. Fixes SF#1524659, thanks to Paul
1296 Winkler for the catch.
1297 (Build Steps): update to use f.addStep() rather than using s()
1298 and the constructor list
1300 * buildbot/process/step.py (ShellCommand): accept either a single
1301 string or a list of strings in both description= and
1303 * buildbot/test/test_steps.py (Steps.test_description): test it
1304 * buildbot/test/runutils.py (makeBuildStep): support for that test
1306 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
1307 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
1308 collecting the files and creating the patch.
1310 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
1311 per-step URLs that will be displayed on the waterfall display,
1312 for things like the HTML output of code-coverage tools, when
1313 the results are hosted elsewhere.
1314 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
1315 way to retrieve these URLs
1316 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
1317 the method to retrieve these URLs. Also provide backwards
1318 compatibility for saved BuildStepStatus instances that didn't have
1320 * buildbot/process/step.py (BuildStep.addURL): method to set these
1321 URLs from within a BuildStep
1322 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
1323 (StepBox.getBox): give these external links a distinct CSS class
1324 named "BuildStep external" so a .css file can display them
1327 * buildbot/test/test_web.py (WaterfallSteps): test that we really
1329 * buildbot/test/test_steps.py (Steps): test that we can all the
1330 URLs. Also add a bunch of other tests on methods that can be
1331 called from within BuildSteps
1332 * buildbot/test/runutils.py (makeBuildStep): add utility function
1334 2006-08-13 Brian Warner <warner@lothar.com>
1336 * docs/buildbot.texinfo (BuildStep LogFiles): document them
1338 2006-08-10 Brian Warner <warner@lothar.com>
1340 * docs/buildbot.texinfo (Index of master.cfg keys): add another
1341 index, this one of things like c['sources'] and c['schedulers']
1342 (indices): it looks like my clever idea of putting the @fooindex
1343 commands in between the @node and the @subsection (to make the
1344 HREF anchor jump to slightly above the section title, which works
1345 much better in html) confused texinfo horribly, so I'm moving the
1346 index tags back to be just after the @subsection marker. I also
1347 added extra lines between the @node/@section paragraph and the
1348 index tags, since I think maybe texinfo wants to see these be
1349 separate paragraphs.
1351 * docs/Makefile (images): make sure images get built when
1352 rendering the manual
1353 * docs/images/Makefile: same
1355 * buildbot/scripts/runner.py: rename 'buildbot master' to
1356 'buildbot create-master', and 'buildbot slave' to 'buildbot
1358 * docs/buildbot.texinfo: same
1361 * docs/buildbot.texinfo: reimplement the "useful classes" index
1362 with actual texinfo indices. The .info rendering is a bit
1363 weird-looking but it works well, and the HTML rendering is quite
1364 nice. This also puts the index targets in the regular flow of the
1365 text, which is easier to maintain.
1367 2006-08-06 Brian Warner <warner@lothar.com>
1369 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
1370 Kevin Turner to prefer the environ= argument be a list rather than
1371 a string. If it is a list, it will be joined with a platform-local
1372 os.pathsep delimiter, and then prepended to any existing
1373 $PYTHONPATH value. This works better in cross-platform (i.e.
1374 windows buildslaves) environments when you need to push multiple
1375 directories onto the front of the path.
1376 (SlaveShellCommand): documented the new magic
1377 * docs/buildbot.texinfo (ShellCommand): documented the new magic
1378 in a user-visible form
1380 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
1381 Turner to prefer lists over strings when creating/running VC
1382 commands during unit tests. This is clearly necessary to survive
1383 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
1384 renamed the wq() function to qw() though, since that's how it's
1385 spelled in perl. Eventually I'd prefer all commands to be
1386 specified with lists.
1388 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
1389 which are deleted (or not yet created) correctly. Also add
1390 failsafe code to not explode if the file-watching poller doesn't
1391 get started. Thanks to JP Calderone for the catch and the poller
1393 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
1395 * buildbot/test/emitlogs.py: same
1397 * NEWS: summarize recent changes
1399 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
1400 clause to avoid the "host key mismatch" warning
1402 * buildbot/process/step_twisted.py (Trial.start): if the
1403 buildslave is too old to understand logfiles=, fall back to
1404 running 'cat _trial_temp/test.log' like before.
1405 (Trial.commandComplete): same. this takes advantage of the
1406 LoggingBuildStep refactoring to stall commandComplete long enough
1407 to run a second RemoteShellCommand.
1409 * buildbot/process/step.py (LoggingBuildStep.startCommand):
1410 refactor command-completion handling, to allow methods like
1411 commandComplete/createSummary/evaluateCommand to return Deferreds.
1412 (LoggingBuildStep._commandComplete): delete the refactored method
1413 (ShellCommand.setupLogfiles): if the buildslave is too old to
1414 understand logfiles=, put a warning message both into twistd.log
1415 and into the otherwise empty user-visible LogFiles.
1417 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
1418 callers to provide the slave-side logfile name, rather than
1419 forcing it to come from the local name of the LogFile.
1420 (BuildStep.getSlaveName): new method
1422 * buildbot/process/base.py (Build.getSlaveName): new method, so
1423 steps can find out which buildslave they're running on
1425 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
1426 to match the s/cvs_ver/command_version/ change
1428 2006-08-05 Brian Warner <warner@lothar.com>
1430 * buildbot/slave/commands.py (command_version): replace the CVS
1431 auto-updated cvs_ver keyword with a manually-updated variable,
1432 since CVS is no longer the master repository. Add a description of
1433 the remote API change starting in this version (2.1), specifically
1434 the fact that SlaveShellCommand now accepts 'initial_stdin',
1435 'keep_stdin_open', and 'logfiles'.
1437 2006-07-31 Brian Warner <warner@lothar.com>
1439 * docs/buildbot.texinfo (System Architecture): Finally add lots of
1440 diagrams to describe how the whole system fits together. The
1441 images themselves are kept in SVG files, with ascii-art versions
1442 in corresponding .txt files. Texinfo knows how to interpolate the
1443 text version into .info files, reference the .png versions from
1444 .html files, and include .eps versions in the .ps format.
1445 * docs/images/Makefile: tools to create .png and .eps
1446 * docs/images/*.svg: created pictures with Inkscape.
1447 * .darcs-boring: ignore the generated .eps and .png files
1449 2006-07-24 Brian Warner <warner@lothar.com>
1451 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
1452 Scheduler names, since they cause setServiceParent to explode
1454 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
1456 2006-07-20 Brian Warner <warner@lothar.com>
1458 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
1459 which runs the buildbot unit tests
1461 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
1462 classes that are useful in master.cfg
1464 2006-07-15 Brian Warner <warner@lothar.com>
1466 * Makefile (some-apidocs): new target to build only some epydocs
1468 * setup.py: minor comment.. does the classifiers= argument prevent
1469 the setup.py script from working on python2.2/2.3?
1471 * buildbot/scripts/sample.cfg: update manhole example, arrange into
1474 * buildbot/twcompat.py: fix minor typo in comments
1476 * buildbot/manhole.py: move all Manhole-related code out to this
1477 module. Implement SSH-based manholes (with TwistedConch), and move
1478 to conch's nifty line-editing syntax-coloring REPL shell instead
1479 of the boring non-editing monochromatic (and deprecated) old
1481 * buildbot/master.py: remove all Manhole-related code
1482 (BuildMaster.loadConfig._add): make sure the old manhole is
1483 removed before we add the new one
1484 * docs/buildbot.texinfo (Debug options): document new Manhole options
1486 * buildbot/twcompat.py (_which): fix some epydoc issues
1487 * buildbot/status/html.py (Waterfall.__init__): same
1489 2006-06-29 Brian Warner <warner@lothar.com>
1491 * buildbot/interfaces.py: get Interface from b.twcompat to hush
1492 deprecation warnings under newer Twisteds (by using
1493 zope.interface.Interface instead of old twisted.python.components
1495 * buildbot/slave/interfaces.py: same
1497 2006-06-28 Brian Warner <warner@lothar.com>
1499 * buildbot/slave/commands.py (SVN): add --non-interactive to all
1500 svn commands, so it will fail immediately instead of hanging while
1501 it waits for a username/password to be typed in.
1503 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
1504 log message if the step was shut down
1506 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
1507 obsolete reference to mktap.
1509 2006-06-20 Brian Warner <warner@lothar.com>
1511 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
1512 test to include new 'logfiles' argument sent from master to slave
1514 2006-06-19 Brian Warner <warner@lothar.com>
1516 * buildbot/process/step_twisted.py (Trial): track Progress from
1517 _trial_temp/test.log too
1519 * buildbot/process/step.py (OutputProgressObserver): generalize
1520 the earlier StdioProgressObserver into an OutputProgressObserver
1521 that can track LogFiles other than stdio.
1522 (LoggingBuildStep.__init__): same
1524 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
1525 _trial_temp/test.log, not a separate 'cat' command. TODO: this
1526 will fail under windows because of os.sep issues. It might have
1527 worked before if 'cat' was doing cygwin path conversion.
1529 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
1530 creation of LogFileWatchers
1531 (ShellCommand._startCommand): and record the files that were
1532 watched in the 'headers' section of the ShellCommand output
1534 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
1535 need to actually pass it to the slave if you want it to work.
1536 (ShellCommand): document it a bit
1538 * buildbot/test/test_shell.py: new test to validate LogFiles
1539 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
1541 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
1542 before printing the last batch of lines, to test that the polling
1543 logic is working properly
1545 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
1546 handling, making it possible to track multiple logs for a single
1547 RemoteCommand. The previous single logfile is now known as the
1549 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
1550 (RemoteShellCommand.__init__): accept logfiles=
1551 (LoggingBuildStep.startCommand): stdio_log is now one of many
1552 (ShellCommand): added logfiles= argument, as well as a class-level
1553 .logfiles attribute, which will be merged together to figure out
1554 which logfiles should be tracked. The latter maybe be useful for
1555 subclasses of ShellCommand which know they will aways produce
1556 secondary logfiles in the same location.
1558 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
1559 and closeStdin() methods, preparing to make it possible to write
1560 to a ShellCommand's stdin at any time, not just at startup. These
1561 writes are buffered if the child process hasn't started yet.
1562 (LogFileWatcher): new helper class to watch arbitrary logfiles
1563 while a ShellCommand runs. This class polls the file every two
1564 seconds, and sends back 10k chunks to the buildmaster.
1565 (ShellCommand): rename stdin= to initialStdin=, and add
1566 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
1568 (ShellCommand.addLogfile): LogFile text is sent in updates with a
1569 key of "log" and a value of (logname, data).
1570 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
1571 'logfiles' to the master-visible args dictionary.
1572 (SourceBase.doPatch): match s/stdin/initialStdin/ change
1575 * buildbot/test/test_vc.py (Patch.testPatch): same
1578 * buildbot/test/emit.py: write to a logfile in the current
1579 directory. We use this to figure out what was used as a basedir
1580 rather than looking to see which copy of emit.py gets run, so that
1581 we can run the commands from inside _trial_temp rather than inside
1583 * buildbot/test/subdir/emit.py: same
1584 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
1585 argument rather than running from buildbot/test/
1586 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
1587 rather than using an implicit setUp()
1588 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
1589 (ShellBase.testShell1, etc): use explicit path to emit.py instead
1590 of assuming that we're running in buildbot/test/ (and that '.' is
1593 * buildbot/slave/commands.py (Command.doStart): refactor Command
1594 startup/completion a bit: now the SlaveBuilder calls doStart(),
1595 which is not meant for overridding by subclasses, and doStart()
1596 calls start(), which is. Likewise the SlaveBuilder calls
1597 doInterrupt(), and subclasses override interrupt(). This also puts
1598 responsibility for maintaining .running in Command rather than in
1600 (Command.doInterrupt): same
1601 (Command.commandComplete): same, this is called when the deferred
1602 returned by start() completes.
1603 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
1604 (SlaveBuilder.remote_interruptCommand): same
1605 (SlaveBuilder.stopCommand): same
1607 2006-06-16 Brian Warner <warner@lothar.com>
1609 * buildbot/test/test_shell.py: new test file to contain everything
1610 relating to ShellCommand
1611 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
1612 multiple logfiles in realtime" feature, not yet implemented
1613 * buildbot/test/emitlogs.py: support file for testLogFiles
1614 * docs/buildbot.texinfo (ShellCommand): document the feature
1616 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
1618 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
1619 for tests which exercise SlaveCommands in isolation.
1621 * buildbot/test/test_slavecommand.py: Move some utilities like
1622 SignalMixin and FakeSlaveBuilder from here ..
1623 * buildbot/test/runutils.py: .. to here, so they can be used by
1624 other test classes too
1625 * buildbot/test/test_vc.py: more SignalMixin refactoring
1626 * buildbot/test/test_control.py: same
1627 * buildbot/test/test_run.py: and some rmtree refactoring
1629 2006-06-15 Brian Warner <warner@lothar.com>
1631 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
1632 'testBranch' to match other VC tests and have the tests run in
1633 roughly increasing order of dependency
1635 * buildbot/test/test_steps.py (LogObserver): new test to verify
1636 LogObservers can be created at various times and still get
1637 connected up properly
1639 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
1640 to create BuildStepStatus instances that actually work.
1642 * buildbot/process/step.py (LogObserver): add outReceived and
1643 errReceived base methods, to be overridden
1645 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
1646 API to take a name instead of a step, reducing the coupling
1647 somewhat. This returns the BuildStepStatus object so it can be
1648 passed to the new Step, instead of jamming it directly into the
1650 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
1652 * buildbot/process/base.py (Build.setupBuild): use both methods
1653 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
1654 process a bit to match
1656 2006-06-14 Brian Warner <warner@lothar.com>
1658 * docs/buildbot.texinfo (Adding LogObservers): add some limited
1659 docs on writing new LogObserver classes
1660 (Writing New Status Plugins): brief docs on how Status Plugins fit
1663 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
1664 implement a LogObserver that counts how many unit tests have been
1666 (Trial.__init__): wire it in
1667 * buildbot/test/test_twisted.py (Counter): unit test for it
1669 * buildbot/process/step_twisted.py (HLint.commandComplete): update
1670 to new cmd.logs['stdio'] scheme
1671 (Trial.commandComplete): same
1672 (BuildDebs.commandComplete): same
1674 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
1675 LogFiles, instead of just a single one. The old single logfile is
1676 now called "stdio". LoggedRemoteCommand no longer creates a
1677 LogFile for you (the code to do that was broken anyway). If you
1678 don't create a "stdio" LogFile, then stdout/stderr will be
1680 (LogObserver): implement "LogObservers", which a BuildStep can add
1681 to parse the output of a command in real-time. The primary use is
1682 to provide more useful information to the Progress code, allowing
1683 better ETA estimates.
1684 (LogLineObserver): utility subclass which feeds complete lines to
1685 the parser instead of bytes.
1686 (BuildStep.progressMetrics): this is safer as a tuple
1687 (BuildStep.setProgress): utility method, meant to be called by
1689 (BuildStep.addLogObserver): new method, to be called at any time
1690 during the BuildStep (even before any LogFiles have been created),
1691 to attach (or schedule for eventual attachment) a LogObserver to a
1693 (StdioProgressObserver): new LogObserver which replaces the old
1694 "output" progress gatherer
1695 (LoggingBuildStep.__init__): same
1696 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
1697 (LoggingBuildStep._commandComplete): must use logs['stdio']
1698 instead of the old single ".log" attribute.
1699 * buildbot/status/builder.py (LogFile): remove old logProgressTo
1700 functionality, now subsumed into StdioProgressObserver
1701 * buildbot/test/test_status.py (Subscription._testSlave_2): the
1702 log name changed from "output" to "stdio".
1705 * buildbot/interfaces.py (ILogFile): add the Interface used from
1706 the BuildStep towards the LogFile
1707 (ILogObserver): and the one provided by a LogObserver
1708 * buildbot/status/builder.py (LogFile): implement it
1710 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
1711 HEADER constants here ..
1712 * buildbot/status/builder.py (STDOUT): .. from here
1714 2006-06-13 Brian Warner <warner@lothar.com>
1716 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
1717 compatibility with python2.2, which doesn't have the 'substr in
1719 (TestP4Poller.makeTime): utility function to construct the
1720 timestamp using the same strptime() approach as p4poller does. It
1721 turns out that time.mktime() behaves slightly differently under
1722 python2.2, probably something to do with the DST flag, and that
1723 causes the test to fail under python2.2. (changing the mktime()
1724 arguments to have dst=0 instead of -1 caused it to fail under
1725 python2.3. Go figure.)
1726 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
1728 2006-06-12 Brian Warner <warner@lothar.com>
1730 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
1731 proper Perforce (P4) support. Many many thanks to Scott Lamb for
1732 contributing such an excellent patch, including docs and unit
1733 tests! This makes it *so* much easier to apply. I had to update
1734 test_vc.py to handle some recent refactorings, but everything else
1735 applied smoothly. The only remaining thing I'd like to fix would
1736 be to remove the hard-wired port 1666 used by p4d, and allow it to
1737 claim any unused port. This would allow two copies of the test
1738 suite to run on the same host at the same time, as well as
1739 allowing the test suite to run while a real (production) p4d was
1740 running on the same host. Oh, and maybe we should add a warning to
1741 step.P4 that gets emitted if the slave is too old to provide the
1742 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
1743 * buildbot/slave/commands.py (P4): same
1744 (P4Sync): same, some minor updates
1745 * buildbot/changes/p4poller.py: same
1746 * docs/buildbot.texinfo: same
1747 * buildbot/test/test_p4poller.py: same
1748 * buildbot/test/test_vc.py (P4): same
1750 * setup.py: add Trove classifiers for PyPI
1752 2006-06-08 Brian Warner <warner@allmydata.com>
1754 * buildbot/status/client.py
1755 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
1756 changing this from getCurrentBuild() to getCurrentBuilds(). Each
1757 build needs to be IRemote'd separately, rather than IRemote'ing
1758 the whole list at once. I can't wait until newpb's serialization
1759 adapters make this unnecessary.
1761 2006-06-06 Brian Warner <warner@lothar.com>
1763 * buildbot/process/step.py (WithProperties): make this inherit
1764 from ComparableMixin, so that reloading an unchanged config file
1765 doesn't cause us to spuriously reload any Builders which use them.
1766 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
1769 2006-06-03 Brian Warner <warner@lothar.com>
1771 * contrib/windows/{setup.py, buildbot_service.py}: add support for
1772 running py2exe on windows, contributed by Mark Hammond. Addresses
1773 SF#1401121, but I think we still need to include
1774 buildbot/scripts/sample.cfg
1775 * setup.py: include buildbot_service.py as a script under windows
1776 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
1777 a py2exe application), get the icon/css datafiles from a different
1780 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
1781 double-escape the build URL. Thanks to Olivier Bonnet for the
1782 patch. Fixes SF#1452801.
1784 2006-06-02 Brian Warner <warner@lothar.com>
1786 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
1787 first six columns of 'svnlook' output, not just the first column,
1788 since property changes appear in the other five. Thanks to Olivier
1789 Bonnet for the patch. Fixes SF#1398174.
1791 2006-06-01 Brian Warner <warner@lothar.com>
1793 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
1794 the fake build, so that title= has something to be set to
1796 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
1797 attribute of the "Build #NN" link in the yellow start-the-build
1798 box to the build's reason. This means that you get a little
1799 tooltip explaining why the build was done when you hover over the
1800 yellow box. Thanks to Zandr Milewski for the suggestion.
1802 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
1803 (Box.setETA): handle ETA=None (by stopping the timer)
1804 (Box.update): make the [soon] text less different than the usual
1805 text, so the rest of the text doesn't flop around so much. It
1806 would be awfully nice to figure out how to center this stuff.
1807 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
1809 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
1810 by default, so that any ShellCommand which fails marks the overall
1811 build as a failure. I should have done this from the beginning.
1812 Add flunkOnFailure=False to the arguments if you want to turn off
1815 2006-05-30 Brian Warner <warner@lothar.com>
1817 * buildbot/clients/gtkPanes.py: add a third row: now it shows
1818 last-build/current-build/current-step. Show what step is currently
1819 running. Show ETA for both the overall build and the current step.
1820 Update GTK calls to modern non-deprecated forms. There's still a
1821 lot of dead code and debug noise to remove.
1823 * buildbot/process/step_twisted.py (Trial): set the step name, so it
1824 shows up properly in status displays
1826 2006-05-28 Brian Warner <warner@lothar.com>
1828 * buildbot/test/test_properties.py (Run.testInterpolate): on the
1829 build we use to verify that WithProperties works:
1831 ** set flunkOnFailure=True so that build failures get noticed
1832 ** set workdir='.' so that the build succeeds, otherwise it is trying
1833 to touch 'build/something', and 'build/' doesn't exist because
1834 usually that's created by a Source step
1835 ** set timeout=10, because Twisted-1.3.0 has a race condition that
1836 this test somehow triggers, in which the 'touch' process becomes
1837 a zombie and we wait for th etimeout before giving up on it.
1839 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
1840 to log the Build results and step logs to the twisted log.
1841 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
1842 what went wrong if a build was expected to succeed but didn't.
1844 * buildbot/process/step_twisted.py (Trial): set the default
1845 trialMode to '--reporter=bwverbose', which specifies verbose
1846 black-and-white text. Back in twisted-1.3/2.0 days we had to use
1847 '-to', but those are completely missing in modern Twisteds.
1849 * buildbot/scripts/sample.cfg: make the sample Manhole config use
1850 a localhost-only port, to encourage better security
1852 * docs/buildbot.texinfo (Change Sources): mention
1855 * .darcs-boring: add a Darcs boringfile
1857 * README (REQUIREMENTS): stop claiming compatibility with
1860 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
1863 2006-05-27 Brian Warner <warner@lothar.com>
1865 * buildbot/__init__.py: bump to 0.7.3+ while between releases
1866 * docs/buildbot.texinfo: same
1868 2006-05-23 Brian Warner <warner@lothar.com>
1870 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
1871 * docs/buildbot.texinfo: set version to match
1872 * NEWS: update for 0.7.3
1874 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
1875 give a quick mapping from VC system to possible ChangeSources
1876 (Build Properties): add 'buildername'
1878 * buildbot/process/base.py (Build.setupStatus): oops, set
1879 'buildername' and 'buildnumber' properties
1880 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
1883 2006-05-22 Brian Warner <warner@lothar.com>
1885 * docs/buildbot.texinfo (Build Properties): explain the syntax of
1886 property interpolation better
1888 * README (INSTALLATION): remove old '-v' argument from recommended
1891 * docs/buildbot.texinfo (ShellCommand): add docs for description=
1892 and descriptionDone= arguments. Thanks to Niklaus Giger for the
1895 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
1896 'svnversion' instead of grepping the output of 'svn info', much
1897 simpler and avoids CR/LF problems on windows. Thanks to Olivier
1898 Bonnet for the suggestion.
1899 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
1900 require the WC_PATH argument, so run 'svnversion .' instead.
1902 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
1903 aren't supposed to have 'self' in their argument list
1905 2006-05-21 Brian Warner <warner@lothar.com>
1907 * buildbot/process/step.py (ShellCommand.start): make
1908 testInterpolate pass. I was passing the uninterpolated command to
1909 the RemoteShellCommand constructor
1910 (ShellCommand._interpolateProperties): oops, handle non-list
1911 commands (i.e. strings with multiple words separated by spaces in
1912 them) properly, instead of forgetting about them.
1914 * buildbot/test/test_properties.py (Run.testInterpolate): new test
1915 to actually try to use build properties in a real build. This test
1917 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
1918 to start and evaluate builds
1920 * buildbot/test/test__versions.py: add a pseudo-test to record
1921 what version of Twisted/Python/Buildbot are running. This should
1922 show up at the beginning of _trial_tmp/test.log, and exists to help
1923 debug other problems.
1925 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
1926 a filename to be served as 'robots.txt' to discourage web spiders.
1927 Adapted from a patch by Tobi Vollebregt, thanks!
1928 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
1929 (Waterfall.test_waterfall): tweak the way that filenames are put
1930 into the config file, to accomodate windows pathnames better.
1932 * docs/buildbot.texinfo (HTML Waterfall): document it
1934 * buildbot/process/process_twisted.py
1935 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
1936 changed the build process. The new setup.py no longer takes the
1938 (FullTwistedBuildFactory.__init__): same
1939 (TwistedReactorsBuildFactory.__init__): same
1941 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
1942 be placed in the [hooks] section of the central repository (the
1943 one that everybody pushes changes to).
1945 2006-05-20 Brian Warner <warner@lothar.com>
1947 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
1948 .darcs-context file, use binary mode. I think this was causing a
1949 Darcs failure under windows.
1951 2006-05-19 Brian Warner <warner@lothar.com>
1953 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
1954 use a timezone string of +0000 and gmtime, since this timestamp is
1955 sent to a buildmaster and %z is broken.
1957 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
1958 string and localtime, since this timestamp will only be consumed
1959 locally, and %z is broken.
1961 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
1962 gmtime, since this timestamp is returned to the buildmaster, and
1965 2006-05-18 Brian Warner <warner@lothar.com>
1967 * NEWS: update in preparation for next release
1969 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
1970 setup-repository and do-we-have-the-vc-tools code into a separate
1971 "helper" class, which sticks around in a single module-level
1972 object. This seems more likely to continue to work in the future
1973 than having it hide in the TestCase and hope that TestCases stick
1974 around for a long time.
1976 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
1977 addremove' has been deprecated in recent versions of mercurial, so
1978 use 'hg add' instead
1980 2006-05-07 Brian Warner <warner@lothar.com>
1982 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
1983 operating under windows, move the file before opening it, since
1984 you can't rename a file that somebody has open.
1986 * buildbot/process/base.py (Build.setupBuild): if something goes
1987 wrong while creating a Step, log the name and arguments, since the
1988 error message when you get the number of arguments wrong is really
1991 2006-05-06 Brian Warner <warner@lothar.com>
1993 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
1994 bugs in twisted-specific code not covered by my unit tests, this
1995 time use 'cmd' argument instead of self.cmd
1997 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
1998 fix stupid braino: either use startwith or find()==0, not both.
1999 (TwistedReactorsBuildFactory.__init__): another dumb typo
2001 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
2002 mark this test as TODO under windows, since process-killing seems
2003 dodgy there. We'll come back to this later and try to fix it
2006 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
2007 and don't include a timezone
2008 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
2009 This should avoid the windows-with-verbose-timezone-name problem
2011 (Patch.testPatch): add a test which runs 'patch' with less
2012 overhead than the full VCBase.do_patch sequence, to try to isolate
2013 a windows test failure. This one uses slave.commands.ShellCommand
2014 and 'patch', but none of the VC code.
2016 * buildbot/slave/commands.py (getCommand): use which() to find the
2017 executables for 'cvs', 'svn', etc. This ought to help under
2020 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
2021 working directory before starting. If an earlier test failed, the
2022 leftover directory would mistakenly flunk a later test.
2023 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
2024 Make sure that we use the right commandlines if which("tla") picks
2025 up "tla.exe" (as it does under windows).
2026 (TlaSupport.do_get): factor out this tla-vs-baz difference
2027 (TlaSupport.vc_create): more tla-vs-baz differences
2029 * buildbot/test/test_slavecommand.py
2030 (ShellBase.testShellMissingCommand): stop trying to assert
2031 anything about the error message: different shells on different
2032 OSes with different languages makes it hard, and it really isn't
2033 that interesting of a thing to test anyway.
2035 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
2036 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
2037 "Panther"), because it has a bug which flunks a couple tests in
2038 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
2039 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
2040 able to test that yet.
2042 2006-04-30 Brian Warner <warner@lothar.com>
2044 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
2045 make sure child commands emit messages in english, so our regexps
2046 will match. Thanks to Nikaus Giger for identifying the problems.
2047 (VCBase._do_vctest_export_1): mode="export" is not responsible
2048 for setting the "got_revision" property, since in many cases it is
2049 not convenient to determine.
2050 (SVNSupport.capable): when running 'svn --version' to check for
2051 ra_local, we want error messages in english
2052 * buildbot/test/test_slavecommand.py
2053 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
2054 to emit the error message in english
2056 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
2057 the environment with $LC_ALL="C" so that Commands which need to
2058 parse the output of their child processes can obtain it in
2060 (SVN.parseGotRevision): call "svn info" afterwards instead of
2061 watching the output of the "svn update" or "svn checkout".
2062 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
2063 (Arch.parseGotRevision): same
2064 (Bazaar.parseGotRevision): same
2065 (Mercurial.parseGotRevision): same
2067 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
2068 $LC_ALL="C" when running commands under 'buildbot try', too
2070 * buildbot/test/__init__.py: remove the global os.environ()
2071 setting, instead we do it just for the tests that run commands and
2072 need to parse their output.
2074 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
2075 remove the overly-short .timeout on this test, because non-DNotify
2076 platforms must fall back to polling which happens at 10 second
2077 intervals, so a 5 second timeout would never succeed.
2079 2006-04-24 Brian Warner <warner@lothar.com>
2081 * docs/buildbot.texinfo (Installing the code): update trial
2082 invocation, SF#1469116 by Niklaus Giger.
2083 (Attributes of Changes): updated branch-name examples to be
2084 a bit more realistic, SF#1475240 by Stephen Davis.
2086 * contrib/windows/buildbot2.bat: utility wrapper for windows
2087 developers, contributed by Nick Trout (after a year of neglect..
2088 sorry!). SF#1194231.
2090 * buildbot/test/test_vc.py (*.capable): store the actual VC
2091 binary's pathname in VCS[vcname], so it can be retrieved later
2092 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
2093 strip out non-numeric timezone information, specifically the funky
2094 German string that his system produced that confuses CVS.
2095 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
2096 allow Darcs tests to work on windows
2097 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
2098 procutils.which() everywhere, to allow tryclient to work under
2099 windows. Also from Niklaus Giger, SF#1463394.
2101 * buildbot/twcompat.py (which): move the replacement for a missing
2102 twisted.python.procutils.which from test_vc.py to here, so it can
2103 be used in other places too (specifically tryclient.py)
2105 2006-04-23 Brian Warner <warner@lothar.com>
2107 * buildbot/status/html.py (StatusResourceBuild.body): replace the
2108 bare buildbotURL/projectName line with a proper DIV, along with a
2109 CSS class of "title", from Stefan Seefeld (SF#1461675).
2110 (WaterfallStatusResource.body0): remove the redundant 'table'
2111 class from the table
2112 (WaterfallStatusResource.body): same. Also add class="LastBuild"
2113 to the top-row TR, and class="Activity" to the second-row TR,
2114 rather than putting them in the individual TD nodes.
2116 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
2117 'got_revision' build property for all VC systems that implement
2118 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
2120 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
2121 to determine which revision we actually obtained
2122 (CVS.parseGotRevision): implement this for CVS, which just means
2123 to grab a timestamp. Not ideal, and it depends upon the buildslave
2124 having a clock that is reasonably well syncronized with the server,
2125 but it's better than nothing.
2126 (SVN.parseGotRevision): implement it for SVN, which is accurate
2127 (Darcs.parseGotRevision): same
2128 (Arch.parseGotRevision): same
2129 (Bazaar.parseGotRevision): same
2130 (Mercurial.parseGotRevision): same
2132 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
2133 keep a record of all non-stdout/stderr/header/rc status updates,
2134 for the benefit of RemoteCommands that send other useful things,
2136 (Source.commandComplete): put any 'got_revision' status values
2137 into a build property of the same name
2140 * buildbot/process/step_twisted.py (Trial): update to deal with
2141 new ShellCommand refactoring
2143 * docs/buildbot.texinfo (Build Properties): document new feature
2144 that allows BuildSteps to get/set Build-wide properties like which
2145 revision was requested and/or checked out.
2147 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
2148 * buildbot/status/builder.py (BuildStatus.getProperty): implement
2149 it. Note that this bumps the persistenceVersion of the saved Build
2150 object, so add the necessary upgrade-old-version logic to include
2151 an empty properties dict.
2153 * buildbot/process/base.py (Build.setProperty): implement it
2154 (Build.getProperty): same
2155 (Build.startBuild): change build startup to set 'branch',
2156 'revision', and 'slavename' properties at the right time
2158 * buildbot/process/step.py (BuildStep.__init__): change setup to
2159 require 'build' argument in a better way
2160 (LoggingBuildStep): split ShellCommand into two pieces, for better
2161 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
2162 a single RemoteCommand that sends stdout/stderr status text. It
2163 also provides the usual commandComplete / createSummary /
2164 evaluateCommand / getText methods to be overridden...
2165 (ShellCommand): .. whereas ShellCommand is specifically for
2166 running RemoteShellCommands. Other shell-like BuildSteps (like
2167 Source) can inherit from LoggingBuildStep instead of ShellCommand
2168 (WithProperties): marker class to do build-property interpolation
2169 (Source): inherit from LoggingBuildStep instead of ShellCommand
2172 * buildbot/test/test_properties.py: test new functionality
2174 2006-04-21 Brian Warner <warner@lothar.com>
2176 * buildbot/test/test_vc.py: rename testBranch to
2177 testCheckoutBranch to keep the tests in about the right
2180 2006-04-18 Brian Warner <warner@lothar.com>
2182 * docs/buildbot.texinfo (PBListener): improve cross-references
2183 between PBListener and 'buildbot statusgui', thanks to John Pye
2186 2006-04-17 Brian Warner <warner@lothar.com>
2188 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
2189 running under Twisted-1.3.0, otherwise skipped tests are reported
2192 * all: use isinstance() instead of 'type(x) is foo', suggested by
2195 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2196 oops, fix a brain-fade from the other week, when making the
2197 addStep changes. I changed all the __init__ upcalls to use the
2198 wrong superclass name.
2199 (FullTwistedBuildFactory.__init__): same
2200 (TwistedDebsBuildFactory.__init__): same
2201 (TwistedReactorsBuildFactory.__init__): same
2202 (TwistedBuild.isFileImportant): use .startswith for clarity,
2203 thanks to Neal Norwitz for the suggestions.
2205 * contrib/viewcvspoll.py: script to poll a viewcvs database for
2206 changes, then deliver them over PB to a remote buildmaster.
2208 * contrib/svnpoller.py: added script by John Pye to poll a remote
2209 SVN repository (by running 'svn log') from a cronjob, and run
2210 'buildbot sendchange' to deliver the changes to a remote
2212 * contrib/svn_watcher.py: added script by Niklaus Giger (a
2213 modification of svnpoller.py), same purpose, but this one loops
2214 internally (rather than expecting to run from a cronjob) and works
2216 * contrib/README.txt: same
2218 2006-04-11 Brian Warner <warner@lothar.com>
2220 * all: fix a number of incorrect names and missing imports, thanks
2221 to Anthony Baxter for the patch.
2222 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
2223 remove unused buggy method.
2224 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
2225 comes from shutil, not "shutils"
2226 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
2227 (Arch.checkSlaveVersion): same
2228 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
2230 * buildbot/process/step_twisted2.py: add some missing imports
2231 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
2232 this code used to live in twisted.internet.defer
2234 2006-04-10 Brian Warner <warner@lothar.com>
2236 * buildbot/process/step.py (Mercurial): add Mercurial support
2237 * buildbot/slave/commands.py (Mercurial): same
2238 * buildbot/scripts/tryclient.py (MercurialExtractor): same
2239 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
2240 not yet tested, but 'try' support *is* covered
2241 * docs/buildbot.texinfo (Mercurial): document it
2243 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
2244 some debugging messages (turned off)
2245 * buildbot/test/test_vc.py: improve debug messages
2247 2006-04-07 Brian Warner <warner@lothar.com>
2249 * buildbot/test/test_vc.py (which): define our own which() in case
2250 we can't import twisted.python.procutils, because procutils doesn't
2251 exist in Twisted-1.3
2253 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
2254 of SlaveLocks for performance tests
2256 * docs/examples/twisted_master.cfg: update to match current usage
2258 * buildbot/changes/p4poller.py (P4Source): add new arguments:
2259 password, p4 binary, pollinterval, maximum history to check.
2260 Patch from an anonymous sf.net contributor, SF#1219384.
2261 * buildbot/process/step.py (P4Sync.__init__): add username,
2262 password, and client arguments.
2263 * buildbot/slave/commands.py (P4Sync): same
2265 2006-04-05 Brian Warner <warner@lothar.com>
2267 * buildbot/process/factory.py (BuildFactory.addStep): new method
2268 to add steps to a BuildFactory. Use it instead of f.steps.append,
2269 and you can probably avoid using the s() convenience function.
2270 Patch from Neal Norwitz, sf.net #1412605.
2271 (other): update all factories to use addStep
2272 * buildbot/process/process_twisted.py: update all factories to use
2275 2006-04-03 Brian Warner <warner@lothar.com>
2277 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
2278 work under windows too. Adapted from a patch by Niklaus Giger,
2279 addresses SF#1463399.
2281 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
2282 spawned commands emit parseable results in english and not some
2283 other language. Patch from Niklaus Giger, SF#1463395.
2285 * README (INSTALLATION): discourage users from running unit tests on
2286 a "network drive", patch from Niklaus Giger, SF#1463394.
2288 2006-03-22 Brian Warner <warner@lothar.com>
2290 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
2291 function to turn a repository-relative pathname into a (branch,
2292 branch-relative-filename) tuple. Change this function to handle
2293 the branch naming policy used by your Subversion repository.
2294 Thanks to AllMyData.com for sponsoring this work.
2296 2006-03-16 Brian Warner <warner@lothar.com>
2298 * buildbot/scripts/sample.cfg: add python-mode declaration for
2299 vim. Thanks to John Pye for the patch.
2301 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
2302 command line, mention the importance of running 'crontab' as the
2303 buildmaster/buildslave user. Thanks to John Pye for the catch.
2305 2006-03-13 Brian Warner <warner@lothar.com>
2307 * buildbot/status/words.py (IRC): add an optional password=
2308 argument, which will be sent to Nickserv in an IDENTIFY message at
2309 login, to claim the nickname. freenode requires this before the
2310 bot can sent (or reply to) private messages. Thanks to Clement
2311 Stenac for the patch.
2312 * docs/buildbot.texinfo (IRC Bot): document it
2314 * buildbot/status/builder.py (LogFile.merge): don't write chunks
2315 larger than chunkSize. Fixes SF#1349253.
2316 * buildbot/test/test_status.py (Log.testLargeSummary): test it
2317 (Log.testConsumer): update to match new internal chunking behavior
2319 2006-03-12 Brian Warner <warner@lothar.com>
2321 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
2323 * buildbot/test/test_maildir.py (MaildirTest): rename the
2324 'timeout' method, as it collides with trial's internals
2326 * buildbot/scripts/runner.py: add 'buildbot restart' command
2327 (stop): don't sys.exit() out of here, otherwise restart can't work
2328 * docs/buildbot.texinfo (Shutdown): document it
2330 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
2331 * buildbot/status/html.py (Waterfall.__init__): same
2332 * buildbot/process/builder.py (Builder.startBuild): same
2333 * buildbot/process/base.py (BuildRequest): same
2334 * buildbot/sourcestamp.py (SourceStamp): same
2335 * buildbot/scheduler.py (Nightly): same
2337 * buildbot/__init__.py (version): bump to 0.7.2+ while between
2339 * docs/buildbot.texinfo: same
2341 2006-02-17 Brian Warner <warner@lothar.com>
2343 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
2344 * docs/buildbot.texinfo: set version number to match
2345 * NEWS: update for 0.7.2
2347 2006-02-16 Brian Warner <warner@lothar.com>
2349 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
2351 2006-02-09 Brian Warner <warner@lothar.com>
2353 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
2354 add text to explain per-build branch parameters
2355 * NEWS: mention --umask
2357 2006-02-08 Brian Warner <warner@lothar.com>
2359 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
2361 (SlaveOptions.optParameters): add --umask, to make it possible to
2362 make buildslave-generated files (including build products) be
2365 * buildbot/slave/bot.py (BuildSlave.startService): same
2367 2006-01-23 Brian Warner <warner@lothar.com>
2369 * buildbot/status/builder.py: urllib.quote() all URLs that include
2370 Builder names, so that builders can include characters like '/'
2371 and ' ' without completely breaking the resulting HTML. Thanks to
2372 Kevin Turner for the patch.
2373 * buildbot/status/html.py: same
2374 * buildbot/test/test_web.py (GetURL.testBuild): match changes
2376 * NEWS: update in preparation for upcoming release
2378 2006-01-18 Brian Warner <warner@lothar.com>
2380 * docs/examples/twisted_master.cfg: update to match the Twisted
2381 buildbot: remove python2.2, switch to exarkun's buildslaves,
2382 disable the .deb builder until we figure out how to build twisted
2383 .debs from SVN, add some ktrace debugging to the OS-X build
2384 process and remove the qt build, remove threadless builders,
2385 change freebsd builder to use landonf's buildslave.
2387 2006-01-12 Brian Warner <warner@lothar.com>
2389 * buildbot/master.py (Manhole.__init__): let port= be a strports
2390 specification string, but handle a regular int for backwards
2391 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
2392 used in master.cfg to limit connections to just the local host.
2393 (BuildMaster.loadConfig): same for c['slavePortnum']
2394 * buildbot/scheduler.py (Try_Userpass.__init__): same
2395 * buildbot/status/client.py (PBListener.__init__): same
2396 * buildbot/status/html.py (Waterfall.__init__): same, for both
2397 http_port and distrib_port. Include backwards-compatibility checks
2398 so distrib_port can be a filename string and still mean unix:/foo
2399 * docs/buildbot.texinfo (Setting the slaveport): document it
2400 (Debug options): same
2401 (HTML Waterfall): same
2404 * buildbot/test/test_config.py (ConfigTest): test it
2406 * buildbot/master.py (BuildMaster.loadConfig): wait for the
2407 slaveport's disownServiceParent deferred to fire before opening
2408 the new one. Fixes an annoying bug in the unit tests.
2410 2006-01-03 Brian Warner <warner@lothar.com>
2412 * buildbot/master.py (BuildMaster): remove the .schedulers
2413 attribute, replacing it with an allSchedulers() method that looks
2414 for all IService children that implement IScheduler. Having only
2415 one parent/child relationship means fewer opportunities for bugs.
2416 (BuildMaster.allSchedulers): new method
2417 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
2418 also fix ugly bug that caused any config-file reload to
2419 half-forget about the earlier Schedulers, causing an exception
2420 when a Change arrived and was handed to a half-connected
2421 Scheduler. The exception was in scheduler.py line 54ish:
2422 self.parent.submitBuildSet(bs)
2423 exceptions.AttributeError: 'NoneType' object has no attribute
2425 (BuildMaster.addChange): update to use allSchedulers()
2427 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
2428 to work properly with twisted-1.3.0, where you must explicitly
2429 include the __implements__ from parent classes
2430 (BaseScheduler.__repr__): make it easier to distinguish distinct
2432 (BaseUpstreamScheduler.__implements__): same
2434 * buildbot/status/builder.py (Status.getSchedulers): update to
2436 * buildbot/test/test_run.py (Run.testMaster): same
2437 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
2438 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
2439 make sure Scheduler instances are left alone when an identical
2440 config file is reloaded
2441 (ConfigElements.testSchedulers): make sure Schedulers are properly
2444 * Makefile (TRIALARGS): my local default Twisted version is now
2445 2.1.0, update the trial arguments accordingly
2447 2005-12-22 Brian Warner <warner@lothar.com>
2449 * docs/examples/twisted_master.cfg: merge changes from pyr: add
2452 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
2453 addChange in the parent class, although I suspect this should be
2454 fixed better in the future.
2456 2005-11-26 Brian Warner <warner@lothar.com>
2458 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
2459 explode when branch==None, thanks to Kevin Turner for the catch
2460 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
2463 * buildbot/__init__.py (version): bump to 0.7.1+ while between
2465 * docs/buildbot.texinfo: same
2467 2005-11-26 Brian Warner <warner@lothar.com>
2469 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
2470 * docs/buildbot.texinfo: set version number to match
2472 2005-11-26 Brian Warner <warner@lothar.com>
2474 * NEWS: update for 0.7.1
2476 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
2477 sure that unsubscribe works even if we never sent an ETA update.
2478 Also, don't explode on duplicate unsubscribe.
2479 (BuildStepStatus.addLog): make the convenience "return self"-added
2480 watcher automatically unsubscribe when the Step finishes.
2481 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
2482 (BuildStatus.stepStarted): same auto-unsubscribe
2483 (BuilderStatus.buildStarted): same auto-unsubscribe
2485 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
2487 (IStatusReceiver.stepStarted): same
2488 (IStatusReceiver.logStarted): same
2490 * buildbot/test/test_run.py (Status): move the Status test..
2491 * buildbot/test/test_status.py (Subscription): .. to here
2493 2005-11-25 Brian Warner <warner@lothar.com>
2495 * NEWS: more updates
2497 * buildbot/locks.py: fix the problem in which loading a master.cfg
2498 file that changes some Builders (but not all of them) can result
2499 in having multiple copies of the same Lock. Now, the real Locks
2500 are kept in a table inside the BotMaster, and the Builders/Steps
2501 use "LockIDs", which are still instances of MasterLock and
2502 SlaveLock. The real Locks are instances of the new RealMasterLock
2503 and RealSlaveLock classes.
2504 * buildbot/master.py (BotMaster.getLockByID): new method to
2505 convert LockIDs into real Locks.
2506 * buildbot/process/base.py (Build.startBuild): convert LockIDs
2507 into real Locks before building
2508 * buildbot/process/step.py (BuildStep.startStep): same
2509 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
2510 exercises the problem
2513 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
2514 what Schedulers are available
2516 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
2517 work by Dobes Vandermeer and hacked mercilessly by me. This offers
2518 'cron'-style build scheduling at certain times of day, week,
2520 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
2522 * buildbot/scheduler.py (Scheduler): change fileIsImportant
2523 handling: treat self.fileIsImportant more as an attribute that
2524 contains a callable than as a method. If the attribute is None,
2525 don't call it and assume all filenames are important. It is still
2526 possible to provide a fileIsImportant method in a subclass,
2528 (AnyBranchScheduler): handle fileIsImportant=None, previously it
2530 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
2531 test using AnyBranchScheduler with fileIsImportant=None
2533 2005-11-24 Brian Warner <warner@lothar.com>
2535 * buildbot/test/test_config.py (StartService): don't claim a fixed
2536 port number, instead set slavePort=0 on the first pass, figure out
2537 what port was allocated, then switch to a config file that uses
2540 * buildbot/master.py (BuildMaster.loadConfig): close the old
2541 slaveport before opening the new one, because unit tests might
2542 replace slavePort=0 with the same allocated portnumber, and if we
2543 don't wait for the old port to close first, we get a "port already
2544 in use" error. There is a tiny race condition here, but the only
2545 threat is from other programs that bind (statically) to the same
2546 port number we happened to be allocated, and only if those
2547 programs use SO_REUSEADDR, and only if they get control in between
2550 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
2552 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
2553 deleted ChangeSources before adding any new ones
2554 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
2555 compare_attrs, to make sure that a config-file reload does not
2556 unnecessarily replace an unmodified ChangeSource instance
2557 * buildbot/test/test_config.py (ConfigTest.testSources): update
2559 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
2560 mean "don't build anything", and add a warning if it gets used
2561 because it isn't actually useful.
2563 * contrib/svn_buildbot.py: update example usage to match the port
2564 number that gets used by the PBChangeSource
2565 * buildbot/scripts/sample.cfg: add example of PBChangeSource
2567 2005-11-22 Brian Warner <warner@lothar.com>
2569 * NEWS: start collecting items for next release
2571 * buildbot/process/step.py (SVN.computeSourceRevision): assume
2572 revisions are strings
2573 (P4Sync.computeSourceRevision): same
2575 * buildbot/status/html.py (StatusResourceBuild.body): add a link
2576 to the Buildbot's overall status page
2577 (StatusResourceBuilder.body): same
2579 2005-11-15 Brian Warner <warner@lothar.com>
2581 * buildbot/master.py (BuildMaster.loadConfig): serialize the
2582 config-file loading, specifically to make sure old StatusTargets
2583 are finished shutting down before new ones start up (thus
2584 resolving a bug in which changing the Waterfall object would fail
2585 because both new and old instances were claiming the same
2586 listening port). Also load new Schedulers after all the new
2587 Builders are set up, in case they fire off a new build right away.
2588 * buildbot/test/test_config.py (StartService): test it
2590 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
2591 the branch name to the mail body
2593 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
2594 Without it, a config-file reload fails to update an existing
2596 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
2597 username/passwd to compare_attrs, for the same reason
2598 * buildbot/status/html.py (Waterfall): add favicon to
2599 compare_attrs, same reason
2601 2005-11-05 Brian Warner <warner@lothar.com>
2603 * buildbot/scripts/tryclient.py (createJobfile): stringify the
2604 baserev before stuffing it in the jobfile. This resolves problems
2605 under SVN (and probably Arch) where revisions are expressed as
2606 numbers. I'm inclined to use string-based revisions everywhere in
2607 the future, but this fix should be safe for now. Thanks to Steven
2608 Walter for the patch.
2610 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
2611 binary mode when opening pickle files, to make windows work
2612 better. Thanks to Dobes Vandermeer for the catch.
2613 * buildbot/status/builder.py (BuildStatus.saveYourself): same
2614 (BuilderStatus.getBuildByNumber): same
2615 (Status.builderAdded): same
2616 * buildbot/master.py (BuildMaster.loadChanges): same
2618 * buildbot/util.py (Swappable): delete unused leftover code
2620 * buildbot/process/step.py (SVN): when building on a non-default
2621 branch, add the word "[branch]" to the VC step's description, so
2622 it is obvious that we're not building the usual stuff. Likewise,
2623 when we are building a specific revision, add the text "rNNN" to
2624 indicate what that revision number is. Thanks to Brad Hards and
2625 Nathaniel Smith for the suggestion.
2626 (Darcs.startVC): same
2627 (Arch.startVC): same
2628 (Bazaar.startVC): same
2630 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
2631 typo, caught by Mark Dillavou, closes SF#1216636.
2633 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
2634 about a test to add some day
2636 * docs/examples/twisted_master.cfg: update: bot1 can now handle
2637 the 'full-2.3' build, and the 'reactors' build is now run under
2638 python-2.4 because the buildslave no longer has gtk/etc bindings
2639 for earlier versions.
2641 2005-11-03 Brian Warner <warner@lothar.com>
2643 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
2644 method, takes an IBuildStatus and rebuilds it. It might make more
2645 sense to add this to IBuildControl instead, but that instance goes
2646 away completely once the build has finished, and resubmitting
2647 builds can take place weeks later.
2648 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
2649 * buildbot/status/html.py (StatusResourceBuild): also stash an
2650 IBuilderControl so we can use resubmitBuild.
2651 (StatusResourceBuild.body): render "resubmit" button if we can.
2652 Also add hrefs for each BuildStep
2653 (StatusResourceBuild.rebuild): add action for "resubmit" button
2654 (StatusResourceBuilder.getChild): give it an IBuilderControl
2656 * buildbot/status/builder.py (Status.getURLForThing): change the
2657 URL for BuildSteps to have a "step-" prefix, so the magic URLs
2658 that live as targets of buttons like "stop" and "rebuild" can't
2660 * buildbot/status/builder.py (Status.getURLForThing): same
2661 * buildbot/status/html.py (StatusResourceBuild.getChild): same
2662 (StepBox.getBox): same
2663 * buildbot/test/test_web.py (GetURL): same
2666 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
2667 exclusivity checks after Source.__init__ upcall, so misspelled
2668 arguments will be reported more usefully
2669 (Darcs.__init__): same
2671 2005-10-29 Brian Warner <warner@lothar.com>
2673 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
2674 builder. Move the Try scheduler off to a separate port.
2676 2005-10-27 Brian Warner <warner@lothar.com>
2678 * buildbot/clients/gtkPanes.py
2679 (TwoRowClient.remote_builderRemoved): disappearing Builders used
2680 to cause the app to crash, now they don't.
2682 * buildbot/clients/debug.py: display the buildmaster's location
2683 in the window's title bar
2685 2005-10-26 Brian Warner <warner@lothar.com>
2687 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
2688 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
2689 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
2691 * buildbot/status/html.py (td): put a single non-breaking space
2692 inside otherwise empty <td> elements, as a workaround for buggy
2693 browsers which would optimize them away (along with any associated
2694 styles, like the kind that create the waterfall grid borders).
2695 Patch from Frerich Raabe.
2697 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
2698 argv-list as an argument, defaulting to ["-to"], which is
2699 appropriate for the Trial that comes with Twisted-2.1.0 and
2700 earlier. The Trial in current Twisted SVN wants
2701 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
2702 defaults to an empty list.
2703 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
2704 match it, now that trialMode= is a list instead of a single string
2706 * buildbot/__init__.py (version): bump to 0.7.0+ while between
2708 * docs/buildbot.texinfo: same
2710 2005-10-24 Brian Warner <warner@lothar.com>
2712 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
2713 * docs/buildbot.texinfo: set version number to match
2715 2005-10-24 Brian Warner <warner@lothar.com>
2717 * README: update for 0.7.0
2719 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
2721 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
2722 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
2723 send the branch= argument unless the user really provided one, to
2724 retain compatibility with older buildmasters that don't accept
2726 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
2729 * docs/buildbot.texinfo: update lots of stuff
2731 * buildbot/scripts/runner.py (sendchange): add a --branch argument
2732 to the 'buildbot sendchange' command
2733 * buildbot/clients/sendchange.py (Sender.send): same
2734 * buildbot/changes/pb.py (ChangePerspective): same
2735 * buildbot/test/test_changes.py (Sender.testSender): test it
2737 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
2738 'default_branch' argument names to 'baseURL' and 'defaultBranch',
2739 for consistency with other BuildStep arguments that use camelCase.
2740 Well, at least more of them use camelCase (like flunkOnWarnings)
2741 than don't.. I wish I'd picked one style and stuck with it
2742 earlier. Annoying, but it's best done before the release, since
2743 these arguments didn't exist at all in 0.6.6 .
2745 * buildbot/test/test_vc.py (SVN.testCheckout): same
2746 (Darcs.testPatch): same
2747 * docs/buildbot.texinfo (SVN): document the change
2748 (Darcs): same, add some build-on-branch docs
2749 * docs/examples/twisted_master.cfg: match change
2751 * buildbot/process/step.py (BuildStep): rename
2752 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
2753 how it is normally used.
2754 * buildbot/test/test_steps.py (Version.checkCompare): same
2756 * buildbot/process/step.py (CVS.startVC): refuse to build
2757 update/copy -style builds on a non-default branch with an old
2758 buildslave (<=0.6.6) that doesn't know how to do it properly. The
2759 concern is that it will do a VC 'update' in an existing tree when
2760 it is supposed to be switching branches (and therefore clobbering
2761 the tree to do a full checkout), thus building the wrong source.
2762 This used to be a warning, but I think the confusion it is likely
2763 to cause warrants making it an error.
2764 (SVN.startVC): same, also make mode=export on old slaves an error
2765 (Darcs.startVC): same
2766 (Git.startVC): improve error message for non-Git-enabled slaves
2767 (Arch.checkSlaveVersion): same. continue to emit a warning when a
2768 specific revision is built on a slave that doesn't pay attention
2769 to args['revision'], because for slowly-changing trees it will
2770 probably do the right thing, and because we have no way to tell
2771 whether we're asking it to build the most recent version or not.
2772 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
2774 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
2775 that 'master' is in host:portnum format, to catch errors sooner
2777 2005-10-23 Brian Warner <warner@lothar.com>
2779 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
2780 when creating the list of warning messages, include the line
2781 immediately after each WARNING: line, since that's usually where
2782 the file and line number wind up.
2784 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
2789 2005-10-22 Brian Warner <warner@lothar.com>
2791 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
2792 patch from Brad Hards
2793 * buildbot/status/classic.css: same
2794 * buildbot/test/test_web.py (Waterfall): match changes
2796 * buildbot/test/test_steps.py (BuildStep.setUp): set
2797 nextBuildNumber so the test passes
2798 * buildbot/test/test_status.py (MyBuilder): same
2800 * buildbot/status/html.py (StatusResourceBuild.body): revision
2801 might be numeric, so stringify it before html-escapifying it
2802 (CurrentBox.getBox): add a "waiting" state, and show a countdown
2803 timer for the upcoming build
2804 * buildbot/status/classic.css: add background-color attributes for
2805 offline/waiting/building classes
2807 * buildbot/status/builder.py (BuildStatus): derive from
2808 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
2809 the default (i.e. unknown) .slavename to "???" instead of None,
2810 since even unknown slavenames need to be printed eventually.
2811 (BuilderStatus): also derive from styles.Versioned . More
2812 importantly, determine .nextBuildNumber at creation/unpickling
2813 time by scanning the directory of saved BuildStatus instances and
2814 choosing one larger than the highest-numbered one found. This
2815 should fix the problem where random errors during upgrades cause
2816 the buildbot to forget about earlier builds. .nextBuildNumber is
2817 no longer stored in the pickle.
2818 (Status.builderAdded): if we can't unpickle the BuilderStatus,
2819 at least log the error. Also call Builder.determineNextBuildNumber
2820 once the basedir is set.
2822 * buildbot/master.py (BuildMaster.loadChanges): do
2823 styles.doUpgrade afterwards, in case I decide to make Changes
2824 derived from styles.Versioned some day and forget to make this
2828 * buildbot/test/test_runner.py (Options.testForceOptions): skip
2829 when running under older pythons (<2.3) in which the shlex module
2830 doesn't have a 'split' function.
2832 * buildbot/process/step.py (ShellCommand.start): make
2833 errorMessages= be a list of strings to stuff in the log before the
2834 command actually starts. This makes it easier to flag multiple
2835 warning messages, e.g. when the Source steps have to deal with an
2837 (CVS.startVC): handle slaves that don't handle multiple branches
2838 by switching into 'clobber' mode
2839 (SVN.startVC): same. Also reject branches without base_url
2840 (Darcs.startVC): same. Also reject revision= in older slaves
2841 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
2842 (Bazaar.startVC): same, and test for baz separately than for arch
2844 * buildbot/slave/commands.py (cvs_ver): document new features
2846 * buildbot/process/step.py (BuildStep.slaveVersion): document it
2847 (BuildStep.slaveVersionNewEnough): more useful utility method
2848 * buildbot/test/test_steps.py (Version): start testing it
2850 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
2851 the 'force' command requires python2.3, for the shlex.split method
2853 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
2854 since we don't use it anymore. The Twisted buildbot uses a
2857 2005-10-21 Brian Warner <warner@lothar.com>
2859 * buildbot/process/process_twisted.py: rework all BuildFactory
2860 classes to take a 'source' step as an argument, instead of
2861 building up the SVN instance in the factory.
2862 * docs/examples/twisted_master.cfg: enable build-on-branch by
2863 providing a base_url and default_branch
2865 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
2866 control over --branch and --revision, not that they are always
2868 * buildbot/status/html.py (StatusResourceBuilder.force): same
2869 (StatusResourceBuild.body): display SourceStamp components
2871 * buildbot/scripts/runner.py (ForceOptions): option parser for the
2872 IRC 'force' command, so it can be shared with an eventual
2873 command-line-tool 'buildbot force' mode.
2874 * buildbot/test/test_runner.py (Options.testForceOptions): test it
2876 2005-10-20 Brian Warner <warner@lothar.com>
2878 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
2880 * docs/examples/twisted_master.cfg: update to use Schedulers
2882 * buildbot/scripts/sample.cfg: update with Schedulers
2884 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
2885 method specifically for use by HTML "force build" button and the
2886 IRC "force" command. Raises an immediate error if there are no
2888 (IBuilderControl.requestBuild): make this just submit a build, not
2889 try to check for existing slaves or set up any when-finished
2890 Deferreds or anything.
2891 * buildbot/process/builder.py (BuilderControl): same
2892 * buildbot/status/html.py (StatusResourceBuilder.force): same
2893 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
2894 * buildbot/test/test_slaves.py: same
2895 * buildbot/test/test_web.py: same
2897 2005-10-19 Brian Warner <warner@lothar.com>
2899 * docs/examples/twisted_master.cfg: re-sync with reality: bring
2900 back python2.2 tests, turn off OS-X threadedselect-reactor tests
2902 2005-10-18 Brian Warner <warner@lothar.com>
2904 * buildbot/status/html.py: provide 'status' argument to most
2905 StatusResourceFOO objects
2906 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
2907 and Logfiles" section to make the Build page into a more-or-less
2908 comprehensive source of status information about the build
2910 * buildbot/status/mail.py (MailNotifier): include the Build's URL
2911 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
2913 2005-10-17 Brian Warner <warner@lothar.com>
2915 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
2916 arguments to accomodate Twisted >=2.1.0 . I will have to figure
2917 out what to do about other projects: the correct options for
2918 recent Twisteds will not work for older ones.
2920 2005-10-15 Brian Warner <warner@lothar.com>
2922 * buildbot/status/builder.py (Status.getURLForThing): add method
2923 to provide a URL for arbitrary IStatusFoo objects. The idea is to
2924 use this in email/IRC status clients to make them more useful, by
2925 providing the end user with hints on where to learn more about the
2926 object being reported on.
2927 * buildbot/test/test_web.py (GetURL): tests for it
2929 2005-10-14 Brian Warner <warner@lothar.com>
2931 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
2932 fix bug resulting from deferredResult changes
2934 2005-10-13 Brian Warner <warner@lothar.com>
2936 * buildbot/test/test_changes.py: remove use of deferredResult
2937 * buildbot/test/test_config.py: same
2938 * buildbot/test/test_control.py: same
2939 * buildbot/test/test_status.py: same
2940 * buildbot/test/test_vc.py: this is the only remaining use, since
2941 it gets used at module level. This needs to be replaced by some
2942 sort of class-level run-once routine.
2944 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
2946 * lots: implement multiple slaves per Builder, which means multiple
2947 current builds per Builder. Some highlights:
2948 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
2949 of (state,currentBuilds) instead of (state,currentBuild)
2950 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
2951 (IBuildStatus.getSlavename): new method, so you can tell which
2952 slave got used. This only gets set when the build completes.
2953 (IBuildRequestStatus.getBuilds): new method
2955 * buildbot/process/builder.py (SlaveBuilder): add a .state
2956 attribute to track things like ATTACHING and IDLE and BUILDING,
2958 (Builder): .. the .slaves attribute here, which has been turned
2959 into a simple list of available slaves. Added a separate
2960 attaching_slaves list to track ones that are not yet ready for
2962 (Builder.fireTestEvent): put off the test-event callback for a
2963 reactor turn, to make tests a bit more consistent.
2964 (Ping): cleaned up the slaveping a bit, now it disconnects if the
2965 ping fails due to an exception. This needs work, I'm worried that
2966 a code error could lead to a constantly re-connecting slave.
2967 Especially since I'm trying to move to a distinct remote_ping
2968 method, separate from the remote_print that we currently use.
2969 (BuilderControl.requestBuild): return a convenience Deferred that
2970 provides an IBuildStatus when the build finishes.
2971 (BuilderControl.ping): ping all connected slaves, only return True
2972 if they all respond.
2974 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
2975 reconnect when we shut down.
2977 * buildbot/status/builder.py: implement new methods, convert
2978 one-build-at-a-time methods to handle multiple builds
2979 * buildbot/status/*.py: do the same in all default status targets
2980 * buildbot/status/html.py: report the build's slavename in the
2981 per-Build page, report all buildslaves on the per-Builder page
2983 * buildbot/test/test_run.py: update/create tests
2984 * buildbot/test/test_slaves.py: same
2985 * buildbot/test/test_scheduler.py: remove stale test
2987 * docs/buildbot.texinfo: document the new builder-specification
2988 'slavenames' parameter
2990 2005-10-12 Brian Warner <warner@lothar.com>
2992 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
2993 report failure correctly, causing Dependent builds to run when
2994 they shouldn't have.
2995 * buildbot/status/builder.py (BuildSetStatus): same
2996 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
2997 (Set.testSuccess): test the both-pass case too
2998 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2999 fix this test: it was ending too early, masking the failure before
3000 (Logger): specialized StatusReceiver to make sure the dependent
3001 builds aren't even started, much less completed.
3003 2005-10-07 Brian Warner <warner@lothar.com>
3005 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
3006 bot.SlaveBuilder being disowned in the middle of a build
3008 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
3009 this inherit from StatusReceiver. Also upcall in __init__. This
3010 fixes the embarrasing crash when the new buildSetSubmitted method
3011 is invoked and Waterfall/etc don't implement their own.
3012 * buildbot/test/test_run.py: add a TODO note about a test to catch
3013 just this sort of thing.
3015 * buildbot/process/builder.py (Builder.attached): remove the
3016 already-attached warning, this situation is normal. Add some
3017 comments explaining it.
3019 2005-10-02 Brian Warner <warner@lothar.com>
3021 * buildbot/changes/maildir.py (Maildir.start): Tolerate
3022 OverflowError when setting up dnotify, because some 64-bit systems
3023 have problems with signed-vs-unsigned constants and trip up on the
3024 DN_MULTISHOT flag. Patch from Brad Hards.
3026 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
3028 * buildbot/process/step.py (BuildStep, ShellCommand): Add
3029 progressMetrics, description, descriptionDone to the 'parms' list,
3030 and make use the 'parms' list from the implementation class
3031 instead of only BuildStep to initialize the parameters. This
3032 allows buildbot.process.factory.s() to initialize all the parms,
3033 not just those defined in directly by BuildStep.
3035 2005-09-03 Brian Warner <warner@lothar.com>
3037 * NEWS: start adding items for the next release
3039 * docs/examples/twisted_master.cfg: (sync with reality) turn off
3040 python2.2 tests, change 'Quick' builder to only use python2.3
3042 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
3044 * buildbot/status/html.py (StatusResourceBuilder.body): only show
3045 the "Ping Builder" button if the build control is available; the
3046 user sees an exception otherwise
3048 * docs/buildbot.texinfo (PBChangeSource): fix a typo
3050 2005-09-01 Brian Warner <warner@lothar.com>
3052 * buildbot/interfaces.py (IBuilderStatus.getState): update
3053 signature, point out that 'build' can be None
3054 (IBuildStatus.getETA): point out ETA can be none
3056 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
3058 * buildbot/status/words.py (IrcStatusBot.emit_status): same
3060 2005-08-31 Brian Warner <warner@lothar.com>
3062 * buildbot/status/base.py (StatusReceiver.builderChangedState):
3063 update to match correct signature: removed 'eta' argument
3064 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
3066 2005-08-30 Brian Warner <warner@lothar.com>
3068 * buildbot/status/builder.py (LogFile): remove the assertion that
3069 blows up when you try to overwrite an existing logfile, instead
3070 just emit a warning. This case gets hit when the buildmaster is
3071 killed and doesn't get a chance to write out the serialized
3072 BuilderStatus object, so the .nextBuildNumber attribute gets out
3075 * buildbot/scripts/runner.py (sendchange): add --revision_file to
3076 the 'buildbot sendchange' arguments, for the Darcs context file
3077 * docs/buildbot.texinfo (sendchange): document it
3079 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
3080 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
3081 (IStatus.getSchedulers): new method
3082 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
3083 (Status.getSchedulers): implement
3084 * buildbot/process/builder.py (Builder): maintain
3085 BuilderStatus.pendingBuilds
3086 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
3087 (TryBase.addChange): Try schedulers should ignore Changes
3089 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
3090 for 'try' on CVS/SVN
3091 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
3093 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
3094 report status properly.
3095 (Try.createJob): implement unique buildset IDs
3097 * buildbot/status/client.py (StatusClientPerspective): add a
3098 perspective_getBuildSets method for the benefit of jobdir-style
3100 * docs/buildbot.texinfo (try): more docs
3101 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
3104 2005-08-18 Brian Warner <warner@lothar.com>
3106 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
3107 actually work. It's functional but still kind of clunky. Also, it
3108 only works with the pb-style.. needs to be made to work with the
3111 * buildbot/status/client.py (RemoteBuildSet): new class
3112 (RemoteBuildRequest): same
3113 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
3114 object, not the internal BuildStatus object.
3115 (RemoteBuild.remote_subscribe): new method to subscribe to builds
3116 outside of the usual buildStarted() return value.
3117 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
3119 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
3120 (Try_Userpass_Perspective.perspective_try): return a remotely
3121 usable BuildSetStatus object
3123 * buildbot/interfaces.py (IBuildStatus): remove obsolete
3124 isStarted()/waitUntilStarted()
3126 2005-08-16 Brian Warner <warner@lothar.com>
3128 * buildbot/status/builder.py: implement IBuildSetStatus and
3129 IBuildRequestStatus, wire them into place.
3130 * buildbot/buildset.py: same. Add ID, move wait-until-finished
3131 methods into the BuildSetStatus object.
3132 * buildbot/interfaces.py: same
3133 (IStatus.getBuildSets): new method to get pending BuildSets
3134 (IStatusReceiver.buildsetSubmitted): new method which hears about
3136 * buildbot/master.py (BuildMaster.submitBuildSet): same
3137 * buildbot/process/base.py (BuildRequest): same, replace
3138 waitUntilStarted with subscribe/unsubscribe
3139 * buildbot/process/builder.py (BuilderControl.forceBuild): use
3140 subscribe instead of waitUntilStarted
3141 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
3143 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
3145 * buildbot/test/test_buildreq.py: update for new code
3146 * buildbot/test/test_control.py (Force.testRequest): same
3149 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
3150 for Darcs to not use the tempfile module, so it works under
3151 python-2.2 too. We really didn't need the full cleverness of that
3152 module, since the slave has exclusive control of its own builddir.
3154 2005-08-15 Brian Warner <warner@lothar.com>
3156 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
3157 for CVS trees. It doesn't work for non-trunk branches,
3159 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
3162 * Makefile: make it easier to test against python2.2
3164 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
3165 tearDown2, so things like Arch can unregister archives as they're
3166 shutting down. The previous subclass-override-tearDown technique
3167 resulted in a nested maybeWait() and test failures under
3170 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
3171 where we can (Arch), add a branch= argument to set the branch used
3173 (BazExtractor): extract the branch too
3174 (TlaExtractor): same
3175 * buildbot/scripts/runner.py (TryOptions): add --branch
3176 * docs/buildbot.texinfo (try): document --branch/try_branch
3178 * buildbot/slave/commands.py (Darcs): implement get-revision for
3179 Darcs, so that 'try' will work. This requires the tempfile module
3182 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
3183 of revisions, branches, and 'try' in the process.
3185 2005-08-11 Brian Warner <warner@lothar.com>
3187 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
3188 this, it got broken at some point in the last few releases
3189 * buildbot/status/words.py (IrcBuildRequest): reply was broken
3190 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
3191 specifically the removal of ETA information from the tuple
3193 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
3196 * docs/buildbot.texinfo (try): document both --builder and
3197 'try_builders' in .buildbot/options
3198 * buildbot/scripts/runner.py (TryOptions): add --builder,
3199 accumulate the values into opts['builders']
3200 * buildbot/scripts/tryclient.py (Try.__init__): set builders
3201 * buildbot/test/test_runner.py (Try): add some quick tests to make
3202 sure 'buildbot try --options' and .buildbot/options get parsed
3203 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3204 use --builder control
3206 * docs/buildbot.texinfo (try): add --port argument to PB style
3208 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
3209 actual SourceStamp. Still need to extract a branch name, somehow.
3210 (Try): finish implementing the try client side, still need a UI
3211 for specifying which builders to use
3212 (Try.getopt): factor our options/config-file reading
3213 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3215 * buildbot/test/test_vc.py: match SourceStampExtractor change
3217 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
3218 causes the twisted log to be sent to stderr
3220 * buildbot/scheduler.py (Try_Userpass): implement the PB style
3222 2005-08-10 Brian Warner <warner@lothar.com>
3224 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
3225 style is 90% done, still missing status reporting or waiting for
3226 the buildsets to finish, and it is completely untested.
3228 * buildbot/trybuild.py: delete file, move contents to ..
3229 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
3230 * buildbot/test/test_vc.py: match the move
3232 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
3233 of the TryScheduler, no buildsetID or status-tracking support yet
3234 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
3236 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
3237 possible to set the basedir after __init__ time, so it is easier
3238 to use as a Service-child of the BuildMaster instance
3240 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
3241 that delivers messages to its Service parent instead of requiring
3242 a subclass to be useful. This turns out to be much easier to build
3245 * buildbot/scripts/tryclient.py (createJob): utility code to
3246 create jobfiles, will eventually be used by 'buildbot try'
3248 2005-08-08 Brian Warner <warner@lothar.com>
3250 * docs/buildbot.texinfo (try): add docs on the
3251 as-yet-unimplemented Try scheduler
3253 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
3254 * buildbot/test/test_scheduler.py: .. here
3255 (Scheduling.testTryJobdir): add placeholder test for 'try'
3257 * buildbot/test/test_status.py (Log.testMerge3): update to match new
3258 addEntry merging (>=chunkSize) behavior
3259 (Log.testConsumer): update to handle new callLater(0) behavior
3261 * buildbot/test/test_web.py: rearrange tests a bit, add test for
3262 both the MAX_LENGTH bugfix and the resumeProducing hang.
3264 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
3265 put off the actual resumeProducing for a moment with
3266 reactor.callLater(0). This works around a twisted-1.3.0 bug which
3267 causes large logfiles to hang midway through.
3269 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
3270 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
3271 and to improve memory usage when streaming the file out to a web
3273 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
3274 make this work cleanly
3276 2005-08-03 Brian Warner <warner@lothar.com>
3278 * buildbot/trybuild.py: new file for 'try' utilities
3279 (getSourceStamp): run in a tree, find out the baserev+patch
3280 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
3281 implemented for SVN and Darcs, still working on Arch. I don't know
3282 how to make CVS work yet.
3284 * docs/buildbot.texinfo: document the 'buildbot' command-line
3285 tool, including the not-yet-implemented 'try' feature, and the
3286 in-flux .buildbot/ options directory.
3288 2005-07-20 Brian Warner <warner@lothar.com>
3290 * buildbot/locks.py: added temporary id() numbers to Lock
3291 descriptions, to track down a not-really-sharing-the-Lock bug
3293 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
3295 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
3296 needed for python2.2 compatibility
3297 * buildbot/test/test_vc.py: python2.2 compatibility: generators
3298 are from the __future__
3300 2005-07-19 Brian Warner <warner@lothar.com>
3302 * buildbot/master.py (BuildMaster.loadConfig): give a better error
3303 message when schedulers use unknown builders
3305 * buildbot/process/builder.py (Builder.compareToSetup): make sure
3306 SlaveLock('name') and MasterLock('name') are distinct
3308 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
3309 c['schedulers'] in such a way that we can actually accept
3311 * buildbot/test/test_config.py: check it
3313 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
3314 utility method to *all* the Schedulers
3315 (Periodic.listBuilderNames): same
3317 * docs/buildbot.texinfo (Interlocks): update chapter to match
3320 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
3321 to make sure that c['sources'], c['schedulers'], and c['status']
3322 are all lists of the appropriate objects, and that the Schedulers
3323 all point to real Builders
3324 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
3325 'listBuilderNames' utility method to support this
3326 * buildbot/scheduler.py: implement the utility method
3327 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
3329 * docs/buildbot.texinfo: add some @cindex entries
3331 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
3332 if it wasn't already set: most tla commands will fail unless one
3334 (Arch.createRepository): and disable bazaar's revision cache, since
3335 they cause test failures (the multiple repositories we create all
3336 interfere with each other through the cache)
3338 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
3339 bring it properly up to date with twisted-2.0 test guidelines
3341 * buildbot/master.py (BuildMaster): remove references to old
3342 'interlock' module, this caused a bunch of post-merge test
3344 * buildbot/test/test_config.py: same
3345 * buildbot/process/base.py (Build): same
3347 * buildbot/test/test_slaves.py: stubs for new test case
3349 * buildbot/scheduler.py: add test-case-name tag
3350 * buildbot/test/test_buildreq.py: same
3352 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
3353 unnecessary init code
3354 (Bot.remote_setBuilderList): match it
3356 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
3358 * buildbot/changes/mail.py (parseSyncmail): update comment
3360 * buildbot/test/test_slavecommand.py: disable Shell tests on
3361 platforms that don't suport IReactorProcess
3363 * buildbot/status/builder.py (LogFile): remove the 't' mode from
3364 all places where we open logfiles. It causes OS-X to open the file
3365 in some weird mode that that prevents us from mixing reads and
3366 writes to the same filehandle, which we depend upon to implement
3367 _generateChunks properly. This change doesn't appear to break
3368 win32, on which "b" and "t" are treated differently but a missing
3369 flag seems to be interpreted as "t".
3371 2005-07-18 Brian Warner <warner@lothar.com>
3373 * buildbot/slave/commands.py (ShellCommand): overhaul
3374 error-handling code, to try and make timeout/interrupt work
3375 properly, and make win32 happier
3376 * buildbot/test/test_slavecommand.py: clean up, stop using
3377 reactor.iterate, add tests for timeout and interrupt
3378 * buildbot/test/sleep.py: utility for a new timeout test
3380 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
3381 code from the local-usebranches branch
3383 2005-07-17 Brian Warner <warner@lothar.com>
3385 * buildbot/process/process_twisted.py
3386 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
3387 minutes, to match the other twisted BuildFactories, and don't
3388 excuse failures in c/qt/win32 reactors any more.
3390 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
3391 'freebsd' builders, since the buildslaves have been unavailable
3394 2005-07-13 Brian Warner <warner@lothar.com>
3396 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
3397 build-on-branch feature
3399 * buildbot/process/step.py (Darcs.__init__): add base_url and
3400 default_branch arguments, just like SVN
3401 (Arch.__init__): note that the version= argument is really the
3404 * buildbot/slave/commands.py (SourceBase): keep track of the
3405 repository+branch that was used for the last checkout in
3406 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
3407 match, we clobber the directory and perform a fresh checkout
3408 rather than trying to do an in-place update. This should protect
3409 us against trying to get to branch B by doing an update in a tree
3410 obtained from branch A.
3411 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
3412 (SVN.setup): same, just the svnurl
3413 (Darcs.setup): same, just the repourl
3414 (Arch.setup): same, arch coordinates (url), version, and
3415 buildconfig. Also pull the buildconfig from the args dictionary,
3416 which we weren't doing before, so the build-config was effectively
3418 (Arch.sourcedirIsUpdateable): don't try to update when we're
3419 moving to a specific revision: arch can't go backwards, so it is
3420 safer to just clobber the tree and checkout a new one at the
3422 (Bazaar.setup): same sourcedata as Arch
3424 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3425 use maybeWait, to work with twisted-1.3.0 and twcompat
3426 (Dependencies.testRun_Pass): same
3428 * buildbot/test/test_vc.py: rearrange, cleanup
3430 * buildbot/twcompat.py: add defer.waitForDeferred and
3431 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
3432 can work under twisted-1.3.0 .
3434 * buildbot/test/test_vc.py: rewrite. The sample repositories are
3435 now created at setUp time. This increases the runtime of the test
3436 suite considerably (from 91 seconds to 151), but it removes the
3437 need for an offline tarball, which should solve a problem I've
3438 seen where the test host has a different version of svn than the
3439 tarball build host. The new code also validates that mode=update
3440 really picks up recent commits. This approach will also make it
3441 easier to test out branches, because the code which creates the VC
3442 branches is next to the code which uses them. It will also make it
3443 possible to test some change-notification hooks, by actually
3444 performing a VC commit and watching to see the ChangeSource get
3447 2005-07-12 Brian Warner <warner@lothar.com>
3449 * docs/buildbot.texinfo (SVN): add branches example
3450 * docs/Makefile (buildbot.ps): add target for postscript manual
3452 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
3453 * buildbot/test/test_locks.py: same
3455 * buildbot/process/step.py (Darcs): comment about default branches
3457 * buildbot/master.py (BuildMaster.loadConfig): don't look for
3458 c['interlocks'] in the config file, complain if it is present.
3459 Scan all locks in c['builders'] to make sure the Locks they use
3461 * buildbot/test/test_config.py: remove old c['interlocks'] test,
3462 add some tests to check for non-uniquely-named Locks
3463 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
3464 since the unique-Lock validation code requires it now
3466 * buildbot/locks.py: fix test-case-name
3468 * buildbot/interlock.py: remove old file
3470 2005-07-11 Brian Warner <warner@lothar.com>
3472 * buildbot/test/test_interlock.py: rename to..
3473 * buildbot/test/test_locks.py: .. something shorter
3475 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
3476 versions (after 2.0.1) changed internet.TCPClient to shut down the
3477 connection in stopService. Change the code to handle this
3480 * buildbot/process/base.py (Build): handle whole-Build locks
3481 * buildbot/process/builder.py (Builder.compareToSetup): same
3482 * buildbot/test/test_interlock.py: make tests work
3484 * buildbot/process/step.py (BuildStep.startStep): complain if a
3485 Step tries to claim a lock that's owned by its own Build
3486 (BuildStep.releaseLocks): typo
3488 * buildbot/locks.py (MasterLock): use ComparableMixin so config
3489 file reloads don't replace unchanged Builders
3491 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
3492 rewrite to cover new Locks instead of old c['interlocks']
3493 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
3497 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
3498 start the master and connect the buildslave
3500 * buildbot/process/step.py (FailingDummy.done): finish with a
3501 FAILURE status rather than raising an exception
3503 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
3504 stringify a BuildRequest.reason that is None
3506 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
3508 * buildbot/status/builder.py (BuildSetStatus): implement enough to
3509 allow scheduler.Dependent to work
3510 * buildbot/buildset.py (BuildSet): set .reason and .results
3512 * buildbot/test/test_interlock.py (Locks.setUp): connect both
3513 slaves, to make the test stop hanging. It still fails, of course,
3514 because I haven't even started to implement Locks.
3516 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
3518 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
3519 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
3520 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
3521 (Dependent): new class for downstream build dependencies
3522 * buildbot/test/test_dependencies.py: tests (still failing)
3524 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
3526 2005-07-07 Brian Warner <warner@lothar.com>
3528 * buildbot/test/runutils.py (RunMixin): factored this class out..
3529 * buildbot/test/test_run.py: .. from here
3530 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
3531 added new buildbot.locks tests (which all hang right now)
3532 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
3533 * buildbot/process/step.py: claim/release per-BuildStep locks
3535 * docs/Makefile: add 'buildbot.html' target
3537 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
3538 interpreted as "HEAD", so that all VC steps can accept branch=None
3539 and have it mean the "default branch".
3541 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
3543 2005-07-07 Brian Warner <warner@lothar.com>
3545 * docs/examples/twisted_master.cfg: update to match current usage
3547 * docs/buildbot.texinfo (System Architecture): comment out the
3548 image, it doesn't exist yet and just screws up the HTML manual.
3550 2005-07-05 Brian Warner <warner@lothar.com>
3552 * debian/.cvsignore: oops, missed one. Removing leftover file.
3554 2005-06-17 Brian Warner <warner@lothar.com>
3556 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
3557 changed its output in 1.2.0, don't mistakenly think that the
3558 subversion we find isn't capable of supporting our tests.
3560 * debian/*: remove the debian/ directory and its contents, to make
3561 life easier for the proper Debian maintainer
3563 * Makefile (release): same
3565 2005-06-07 Brian Warner <warner@lothar.com>
3567 * everything: create a distinct SourceStamp class to replace the
3568 ungainly 4-tuple, let it handle merging instead of BuildRequest.
3569 Changed the signature of Source.startVC to include the revision
3570 information (instead of passing it through self.args). Implement
3571 branches for SVN (now only Darcs/Git is missing support). Add more
3574 2005-06-06 Brian Warner <warner@lothar.com>
3576 * everything: rearrange build scheduling. Create a new Scheduler
3577 object (configured in c['schedulers'], which submit BuildSets to a
3578 set of Builders. Builders can now use multiple slaves. Builds can
3579 be run on alternate branches, either requested manually or driven
3580 by changes. This changed some of the Status classes. Interlocks
3581 are out of service until they've been properly split into Locks
3582 and Dependencies. treeStableTimer, isFileImportant, and
3583 periodicBuild have all been moved from the Builder to the
3585 (BuilderStatus.currentBigState): removed the 'waiting' and
3586 'interlocked' states, removed the 'ETA' argument.
3588 2005-05-24 Brian Warner <warner@lothar.com>
3590 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
3591 erroneously abandons the connection (in clientConnectionFailed)
3592 for non-UserErrors, which means that if we lose the connection due
3593 to a network problem or a timeout, we'll never try to reconnect.
3594 Fix this by not upcalling to the buggy parent method. Note:
3595 twisted-2.0 fixes this, but the function only has 3 lines so it
3596 makes more sense to copy it than to try and detect the buggyness
3597 of the parent class. Fixes SF#1207588.
3599 * buildbot/changes/changes.py (Change.branch): doh! Add a
3600 class-level attribute to accomodate old Change instances that were
3601 pickled before 0.6.5 (where .branch was added for new Changes).
3602 This fixes the exception that occurs when you try to look at an
3603 old Change (through asHTML).
3605 * buildbot/__init__.py (version): bump to 0.6.6+ while between
3608 2005-05-23 Brian Warner <warner@lothar.com>
3610 * buildbot/__init__.py (version): release 0.6.6
3612 2005-05-23 Brian Warner <warner@lothar.com>
3614 * NEWS: update for 0.6.6 release
3615 * debian/changelog: same
3617 * buildbot/scripts/runner.py (start): put the basedir in sys.path
3618 before starting: this was done by twistd back when we spawned it,
3619 now that we're importing the pieces and running them in the
3620 current process, we have to do it ourselves. This allows
3621 master.cfg to import files from the same directory without
3622 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
3623 Stichele for the catch.
3624 (Options.opt_version): Add a --version command (actually, just make
3625 the existing --version command emit Buildbot's version too)
3627 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
3628 fix to make this behave like other LogFiles, this time to handle
3629 existing LogFiles on disk. (add the missing .upgrade method)
3630 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
3632 2005-05-21 Brian Warner <warner@lothar.com>
3634 * buildbot/test/test_runner.py (Create.testMaster): match the
3635 rawstring change in runner.py:masterTAC
3637 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
3638 TwistedWords is installed
3639 * buildbot/test/test_status.py: same, with TwistedMail
3641 * buildbot/master.py: remove old IRC/Waterfall imports (used by
3642 some old, deprecated, and removed config keys). This should enable
3643 you to use the base buildbot functionality with Twisted-2.0.0 when
3644 you don't also have TwistedWeb and TwistedWords installed
3646 2005-05-20 Brian Warner <warner@lothar.com>
3648 * buildbot/scripts/runner.py (run): call sendchange(), not
3649 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
3650 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
3651 (stop): don't wait for process to die when sending SIGHUP
3652 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
3653 directory name gets interpreted, which you don't want
3656 * buildbot/__init__.py (version): bump to 0.6.5+ while between
3659 2005-05-18 Brian Warner <warner@lothar.com>
3661 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
3663 2005-05-18 Brian Warner <warner@lothar.com>
3665 * README: update for 0.6.5
3666 * debian/changelog: same
3668 * buildbot/changes/changes.py: rename tag= to branch=, since
3669 that's how we're using it, and my design for the upcoming "build a
3670 specific branch" feature wants it. also, tag= was too CVS-centric
3671 * buildbot/changes/mail.py (parseSyncmail): same
3672 * buildbot/process/base.py (Build.isBranchImportant): same
3673 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
3674 * docs/buildbot.texinfo (Attributes of Changes): same
3676 * NEWS: update tag=, update for upcoming release
3678 2005-05-17 Brian Warner <warner@lothar.com>
3680 * buildbot/scripts/runner.py (stop): actually poll once per
3681 second, instead of re-killing the poor daemon once per second.
3682 Sleep briefly (0.1s) before the first poll, since there's a good
3683 chance we can avoid waiting the full second if the daemon shuts
3684 down quickly. Also remove the sys.exit() at the end.
3685 (start): remove the unneighborly sys.exit()
3687 * Makefile: improve permission-setting to not kick Arch so badly
3689 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
3690 default --keepalive=600, since it doesn't hurt very much, and it's
3691 a hassle to discover that you need it.
3692 * buildbot/test/test_runner.py (Create.testSlave): test it
3694 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
3695 IRC bot about EXCEPTION
3697 * buildbot/status/client.py (PBListener): upcall more correctly
3699 * buildbot/process/base.py (Build.allStepsDone): if a step caused
3700 an exception mark the overall build with EXCEPTION, not SUCCESS
3702 * buildbot/scripts/runner.py (makefile_sample): remove the leading
3704 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
3705 * Makefile: update some release-related stuff
3707 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
3708 gets called when there isn't actually an active process, just end
3709 the Command instead of blowing up. I don't know how it gets into
3710 this state, but the twisted win32 buildslave will sometimes hang,
3711 and when it shakes its head and comes back, it thinks it's still
3712 running a Command. The next build causes this command to be
3713 interrupted, but the lack of self.process.pid breaks the interrupt
3716 * NEWS: document changes since the last release
3718 * buildbot/scripts/runner.py (start): change 'buildbot start' to
3719 look for Makefile.buildbot instead of a bare Makefile . The
3720 'buildbot start' does not install this file, so you have to
3721 manually copy it if you want to customize startup behavior.
3722 (createMaster): change 'buildbot master' command to create
3723 Makefile.sample instead of Makefile, to create master.cfg.sample
3724 instead of master.cfg (requiring you to copy it before the
3725 buildmaster can be started). Both sample files are kept up to
3726 date, i.e. they are overwritten if they have been changed. The
3727 'buildbot.tac' file is *not* overwritten, but if the new contents
3728 don't match the old, a 'buildbot.tac.new' file is created and the
3729 user is warned. This seems to be a much more sane way to handle
3730 startup files. Also, don't sys.exit(0) when done, so we can run
3731 unit tests against it.
3732 (createSlave): same. Don't overwrite the sample info/ files.
3733 * buildbot/scripts/sample.mk: remove. the contents were pulled
3734 into runner.py, since they need to match the behavior of start()
3738 * docs/buildbot.texinfo (Launching the daemons): document it
3739 * buildbot/test/test_runner.py (Create): test it
3741 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
3742 version that can handle string-in-string tests, because otherwise
3743 python-2.2 fails the tests. It'd be tremendous if Trial's test
3744 took two strings under 2.2 too.
3746 * everything: fixed all deprecation warnings when running against
3747 Twisted-2.0 . (at least all the ones in buildbot code, there are a
3748 few that come from Twisted itself). This involved putting most of
3749 the Twisted-version specific code in the new buildbot.twcompat
3750 module, and creating some abstract base classes in
3751 buildbot.changes.base and buildbot.status.base (which might be
3752 useful anyway). __implements__ is a nuisance and requires an ugly
3753 'if' clause everywhere.
3755 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
3756 delay before finishing the test: it seems that smtp.sendmail
3757 doesn't hang up on the server, so we must wait a moment so it can
3758 hang up on us. This removes the trial warning about an unclean
3761 2005-05-16 Brian Warner <warner@lothar.com>
3763 * buildbot/process/step.py (Source): add 'retry' argument. It is a
3764 tuple of (delay, repeats).
3765 * buildbot/test/test_vc.py (Retry): test it
3766 * docs/buildbot.texinfo (Source Checkout): document it
3767 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
3768 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
3769 doVCFull() are handled by re-trying the checkout (after a delay)
3770 some number of times.
3771 (ShellCommand._startCommand): make header lines easier to read
3773 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
3775 (WebTest.test_logfile): make sure master gets shut down, silences
3776 some "unclean reactor" test errors
3778 * buildbot/test/test_changes.py (Sender.tearDown): spin the
3779 reactor once after shutdown, something in certain versions of
3780 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
3781 fails, svn-trunk is ok.
3783 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
3784 second win32 error message
3786 * buildbot/test/test_run.py (Status.testSlave): be smarter about
3787 validating the ETA, so the tests don't fail on slow systems
3789 2005-05-15 Brian Warner <warner@lothar.com>
3791 * buildbot/status/builder.py (HTMLLogFile): make this behave like
3792 the new LogFile class, so upgrading works properly
3793 (LogFileProducer.resumeProducing): survive resumeProducing after
3794 we've exhausted the chunkGenerator
3796 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
3798 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
3799 (Log.testUpgrade): same
3801 * docs/buildbot.texinfo (Maintenance): describe how to delete old
3802 Builds and logs with a cron job.
3804 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
3805 of the old non-offline LogFile, added code to upgrade these to
3806 new-style contents-live-on-disk instances at load time (in a way
3807 that doesn't invalidate the old Build pickles, so upgrading to
3808 0.6.5 is not a one-way operation). Got rid of everything related
3810 (LogFile.__init__): create LogFiles with the parent step status,
3811 the log's name, and a builder-relative filename where it can keep
3812 the contents on disk.
3813 (LogFile.hasContents): new method, clients are advised to call it
3814 before getText or getChunks and friends. If it returns False, the
3815 log's contents have been deleted and getText() will raise an
3817 (LogFile.getChunks): made it a generator
3818 (LogFile.subscribeConsumer): new method, takes a Twisted-style
3819 Consumer (except one that takes chunks instead of strings). This
3820 enables streaming of very large logfiles without storing the whole
3822 (BuildStatus.generateLogfileName): create names like
3823 12-log-compile-output, with a _0 suffix if required to be unique
3824 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
3825 or earlier) logfiles into new-style ones
3826 (BuilderStatus): remove everything related to 'stub' builds. There
3827 is now only one build cache, and we don't strip logs from old
3829 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
3830 since we no longer fight to keep it in the cache
3832 * buildbot/status/html.py (TextLog.render_GET): use a
3833 ChunkConsumer to stream the log entries efficiently.
3834 (ChunkConsumer): wrapper which consumes chunks and writes
3837 * buildbot/test/test_twisted.py (Parse.testParse): use a
3838 LogFile-like object instead of a real one
3840 * buildbot/test/test_status.py (MyLog): handle new LogFile code
3841 (Log.testMerge3): validate more merge behavior
3842 (Log.testChunks): validate LogFile.getChunks
3843 (Log.testUpgrade): validate old-style LogFile upgrading
3844 (Log.testSubscribe): validate LogFile.subscribe
3845 (Log.testConsumer): validate LogFile.subscribeConsumer
3847 * buildbot/interfaces.py (IStatusLogStub): remove
3848 (IStatusLog.subscribeConsumer): new method
3849 (IStatusLog.hasContents): new method
3850 (IStatusLogConsumer): describes things passed to subscribeConsumer
3852 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
3853 the log contents if it does not have any contents.
3854 (StatusResourceBuildStep.body): same
3855 (StatusResourceBuildStep.getChild): give a 404 for empty logs
3857 2005-05-14 Brian Warner <warner@lothar.com>
3859 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
3860 timeouts to try and make the windows metabuildslave not hang
3862 2005-05-13 Mike Taylor <bear@code-bear.com>
3864 * buildbot/slave/commands.py (rmdirRecursive): added a check
3865 to ensure the path passed into rmdirRecursive actually exists.
3866 On win32 a non-existant path would generate an exception.
3868 2005-05-13 Brian Warner <warner@lothar.com>
3870 * buildbot/slave/commands.py (rmdirRecursive): replacement for
3871 shutil.rmtree which behaves correctly on windows in the face of
3872 files that you have to chmod before deleting. Thanks to Bear at
3873 the OSAF for the routine.
3874 (SourceBase.doClobber): use rmdirRecursive
3876 2005-05-12 Brian Warner <warner@lothar.com>
3878 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
3879 method generate chunks instead of returning a big list. This
3880 allows the same method to be used for both old LogFile and new
3882 (OfflineLogFile.getText): use the generator
3883 (OfflineLogFile.subscribe): same
3884 * buildbot/status/html.py (TextLog.resumeProducing): same
3885 * buildbot/interfaces.py (IStatusLog.getChunks): document it
3887 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
3888 point out that OfflineLogFile does not currently work with
3889 html.Waterfall . Fixing this is high-priority.
3891 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
3892 apparently windows defaults to using stdout
3894 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
3895 better message on failure so I can figure out the win32 problem
3897 * buildbot/slave/commands.py (ShellCommand._startCommand): update
3898 log messages to include more useful copies of the command being
3899 run, the argv array, and the child command's environment.
3900 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
3902 2005-05-11 Brian Warner <warner@lothar.com>
3904 * setup.py: oops, install debug.glade so 'buildbot debugclient'
3906 * Makefile: update the deb-snapshot version
3908 * docs/buildbot.texinfo: move all .xhtml docs into a new
3909 .texinfo-format document, adding a lot of material in the process.
3910 This is starting to look like a real user's manual. Removed all
3911 the Lore-related files: *.xhtml, *.css, template.tpl .
3912 * docs/Makefile: simple makefile to run 'makeinfo'
3913 * buildbot/scripts/sample.cfg: rearrange slightly
3914 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
3916 2005-05-10 Brian Warner <warner@lothar.com>
3918 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
3919 different name for the internal twistw module, handle it.
3921 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
3922 * setup.py: .. and stop trying to install it
3924 * buildbot/process/step.py (Git): added support for 'cogito' (aka
3925 'git'), the new linux kernel VC system (http://kernel.org/git/).
3926 Thanks to Brandon Philips for the patch.
3927 * buildbot/slave/commands.py (Git): same
3929 2005-05-06 Brian Warner <warner@lothar.com>
3931 * buildbot/status/builder.py (OfflineLogFile): replace the default
3932 LogFile with a form that appends its new contents to a disk file
3933 as they arrive. The complete log data is never kept in RAM. This
3934 is the first step towards handling very large (100MB+) logfiles
3935 without choking quite so badly. (The other half is
3936 producer/consumer on the HTML pages).
3937 (BuildStepStatus.addLog): use OfflineLogFile by default
3938 (BuildStatus.getLogfileName): helper code to give the
3939 OfflineLogFile a filename to work with
3941 * buildbot/test/test_status.py (Results.testAddResults): update
3942 tests to handle new asserts
3943 * buildbot/test/test_vc.py (Patch.doPatch): same
3944 * buildbot/test/test_steps.py (BuildStep.setUp): same
3946 2005-05-05 Brian Warner <warner@lothar.com>
3948 * buildbot/scripts/runner.py (start): if there is no Makefile,
3949 launch the app by importing twistd's internals and calling run(),
3950 rather than spawning a new twistd process. This stands a much
3951 better chance of working under windows.
3952 (stop): kill the process with os.kill instead of spawning
3953 /bin/kill, again to reduce the number of external programs which
3954 windows might not have in the PATH. Also wait up to 5 seconds for
3955 the process to go away, allowing things like 'buildbot stop;
3956 buildbot start' to be reliable in the face of slow shutdowns.
3958 * buildbot/master.py (Dispatcher.__getstate__): remove old
3959 .tap-related methods
3960 (BuildMaster.__getstate__): same
3962 * buildbot/slave/bot.py (makeService): same
3963 (Options.longdesc): same
3964 * buildbot/scripts/runner.py: copy over some old mktap option text
3966 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
3967 'buildbot master' now creates a buildbot.tac file, so there is no
3968 longer a create-instance/save/reload sequence. mktap is dead, long
3970 * buildbot/scripts/sample.mk: use twistd -y, not -f
3971 * buildbot/test/test_config.py: remove mktap-based test
3972 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
3973 * README: don't reference mktap
3975 * docs/source.xhtml: document some of the attributes that Changes
3978 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
3980 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
3981 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
3982 * buildbot/changes/changes.py (Change)
3983 * buildbot/changes/mail.py (parseSyncmail)
3984 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
3986 * buildbot/process/base.py (Build.isTagImportant)
3990 2005-05-04 Brian Warner <warner@lothar.com>
3992 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
3993 connection after sending the change, so that unit tests don't
3994 complain about sockets being left around
3996 * buildbot/status/html.py (WaterfallStatusResource.body): fix
3997 exception in phase=0 rendering
3998 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4000 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
4002 * buildbot/master.py (BuildMaster.loadConfig): finally remove
4003 deprecated config keys: webPortnum, webPathname, irc, manholePort,
4004 and configuring builders with tuples.
4005 * buildbot/test/test_config.py: stop testing compatibility with
4006 deprecated config keys
4007 * buildbot/test/test_run.py: same
4009 2005-05-03 Brian Warner <warner@lothar.com>
4011 * contrib/arch_buildbot.py: survive if there are no logfiles
4012 (username): just use a string, os.getlogin isn't reliable
4014 * buildbot/scripts/runner.py (sendchange): oops, fix the command
4015 so 'buildbot sendchange' actually works. The earlier test only
4016 covered the internal (non-reactor-running) form.
4018 * contrib/arch_buildbot.py: utility that can run as an Arch hook
4019 script to notify the buildmaster about changes
4021 * buildbot/scripts/runner.py (sendchange): new command to send a
4022 change to a buildbot.changes.pb.PBChangeSource receiver.
4023 * buildbot/test/test_changes.py (Sender): test it
4025 * buildbot/master.py (BuildMaster.startService): mark .readConfig
4026 after any reading of the config file, not just when we do it in
4027 startService. This makes some tests a bit cleaner.
4029 * buildbot/changes/pb.py: add some log messages
4031 * buildbot/process/base.py (Build.startBuild): fix a bug that
4032 caused an exception when the build terminated in the very first
4034 (Build.stepDone): let steps return a status of EXCEPTION. This
4035 terminates the build right away, and sets the build's overall
4036 status to EXCEPTION too.
4037 * buildbot/process/step.py (BuildStep.failed): return a status of
4038 EXCEPTION when that is what has happened.
4040 * buildbot/process/step.py (Arch.computeSourceRevision): finally
4041 implement this, allowing Arch-based projects to get precise
4042 checkouts instead of always using the latest code
4043 (Bazaar): create variant of Arch to let folks use baz instead of
4044 tla. Requires a new buildslave too.
4045 * buildbot/slave/commands.py (Arch): add 'revision' argument
4046 (Bazaar): create variant of Arch that uses baz instead of tla.
4047 Remove the code that extracts the archive name from the
4048 register-archive output, since baz doesn't provide it, and require
4049 the user provide both the archive name and its location.
4050 * buildbot/test/test_vc.py (VC.testBazaar): added tests
4052 2005-05-02 Brian Warner <warner@lothar.com>
4054 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
4055 thanks to Nick Trout.
4057 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
4058 deals better with source Makefile coming from a read-only CVS
4059 checkout. Thanks to Nick Trout for the catch.
4061 * buildbot/__init__.py (version): bump to 0.6.4+ while between
4064 2005-04-28 Brian Warner <warner@lothar.com>
4066 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
4068 * debian/changelog: update for 0.6.4
4070 2005-04-28 Brian Warner <warner@lothar.com>
4072 * README.w32: add a checklist of steps for getting buildbot
4074 * MANIFEST.in: include it in the tarball
4078 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
4079 broken .tap files from 0.6.3 by getting rid of .services,
4080 .namedServices, and .change_svc at load time.
4082 2005-04-27 Brian Warner <warner@lothar.com>
4084 * NEWS: update in preparation for new release
4086 * buildbot/test/test_config.py (Save.testSave): don't pull in
4087 twisted.scripts.twistd, we don't need it and it isn't for windows
4090 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
4091 accomodate win32 which can't do atomic-rename
4093 2005-04-27 Brian Warner <warner@lothar.com>
4095 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
4096 timeouts to help the slow metabuildbot not flunk them so much
4097 (Disconnect.testBuild3): same
4098 (Disconnect.testBuild4): same
4099 (Disconnect.testInterrupt): same
4101 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
4102 setup, it was completely broken for new buildmasters (those which
4103 did not have a 'change.pck' already saved. Thanks to Paul Warren
4104 for catching this (embarrassing!) bug.
4105 (Dispatcher.__getstate__): don't save our registered avatar
4106 factories, since they'll be re-populated when the config file is
4108 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
4109 tests (since the real mktap-generated BuildMaster doesn't save
4111 (BuildMaster.__getstate__): don't save any service children,
4112 they'll all be re-populated when the config file is re-read.
4113 * buildbot/test/test_config.py (Save.testSave): test for this
4115 2005-04-26 Brian Warner <warner@lothar.com>
4117 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
4118 rendered with Blender.. looks a bit nicer.
4119 * buildbot/docs/images/icon.blend: add the Blender file for it
4121 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
4122 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
4123 running under windows. This appears to be the best way to allow
4124 BuildSteps to do something normal like 'trial -v buildbot.test' or
4125 'make foo' and still expect it to work. The idea is to make the
4126 BuildSteps look as much like what a developer would type when
4127 compiling or testing the tree by hand. This approach probably has
4128 problems when there are spaces in the arguments, so if you've got
4129 windows buildslaves, you'll need to pay close attention to your
4132 * buildbot/status/html.py (WaterfallStatusResource.body): add the
4133 timezone to the timestamp column.
4134 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4136 * buildbot/scripts/runner.py (loadOptions): do something sane for
4137 windows, I think. We use %APPDATA%/buildbot instead of
4138 ~/.buildbot, but we still search everywhere from the current
4139 directory up to the root for a .buildbot/ subdir. The "is it under
4140 $HOME" security test was replaced with "is it owned by the current
4141 user", which is only performed under posix.
4142 * buildbot/test/test_runner.py (Options.testFindOptions): update
4143 tests to match. The "is it owned by the current user" check is
4144 untested. The test has been re-enabled for windows.
4146 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
4147 any "\n" in the expected output with the platform-specific line
4148 separator. Make this separator "\r\n" on PTYs under unix, they
4149 seem to do that and I don't know why
4151 * buildbot/test/test_runner.py (Options.optionsFile): disable on
4152 windows for now, I don't know what ~/.buildbot/ should mean there.
4154 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
4155 win32 compatibility, don't use "/tmp"
4156 (Basedir.testChangeBuilddir): remove more unixisms
4158 2005-04-26 Brian Warner <warner@lothar.com>
4160 * buildbot/test/test_control.py (Force.rmtree): python2.2
4161 compatibility, apparently its shutil.rmtree ignore_errors=
4162 argument is ignored.
4163 * buildbot/test/test_run.py (Run.rmtree): same
4164 (RunMixin.setUp): same
4166 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
4169 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
4170 'substring in string' operator, must use string.find(substr)!=-1
4171 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
4172 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
4174 * buildbot/scripts/runner.py (loadOptions): add code to search for
4175 ~/.buildbot/, a directory with things like 'options', containing
4176 defaults for various 'buildbot' subcommands. .buildbot/ can be in
4177 the current directory, your $HOME directory, or anywhere
4178 inbetween, as long as you're somewhere inside your home directory.
4179 (debugclient): look in ~/.buildbot/options for master and passwd
4180 (statuslog): look in ~/.buildbot/options for 'masterstatus'
4181 * buildbot/test/test_runner.py (Options.testFindOptions): test it
4183 * buildbot/status/client.py (makeRemote): new approach to making
4184 IRemote(None) be None, which works under Twisted-2.0
4185 * buildbot/test/test_status.py (Client.testAdaptation): test it
4187 * buildbot/status/builder.py (Status.builderAdded): when loading a
4188 pickled BuilderStatus in from disk, set its name after loading.
4189 The config file might have changed its name (but not its
4190 directory) while it wasn't looking.
4192 * buildbot/process/builder.py (Builder.attached): always return a
4193 Deferred, even if the builder was already attached
4194 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
4196 2005-04-25 Brian Warner <warner@lothar.com>
4198 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
4199 category-related exception when announcing a build has finished
4201 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
4202 reference no-longer-existent changemaster.sources
4203 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
4205 * buildbot/__init__.py (version): bump to 0.6.3+ while between
4208 2005-04-25 Brian Warner <warner@lothar.com>
4210 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
4212 * debian/changelog: update for 0.6.3
4214 2005-04-25 Brian Warner <warner@lothar.com>
4216 * MANIFEST.in: make sure debug.glade is in the tarball
4218 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
4220 * NEWS: update for the imminent 0.6.3 release
4222 * buildbot/status/html.py (HtmlResource.content): make the
4223 stylesheet <link> always point at "buildbot.css".
4224 (StatusResource.getChild): map "buildbot.css" to a static.File
4225 containing whatever css= argument was provided to Waterfall()
4226 (Waterfall): provide the "classic" css as the default.
4227 * docs/waterfall.classic.css: move default CSS from here ..
4228 * buildbot/status/classic.css: .. to here
4230 * MANIFEST.in: make sure classic.css is included in the tarball
4231 * setup.py: and that it is installed too, under buildbot/status/
4233 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
4234 the module level, because buildbot.tap files from 0.6.2 don't have
4235 it in their attribute dictionary.
4237 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
4238 really exists at startup, might save some confusion somewhere.
4240 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
4242 * docs/waterfall.classic.css:
4243 add a stylesheet that's almost the same as the "classic"
4246 * buildbot/status/builder.py:
4247 add EXCEPTION as a result - this is a problem for the bot
4248 maintainer, not a build problem for the changers
4249 * buildbot/process/step.py:
4250 use EXCEPTION instead of FAILURE for exceptions
4251 * buildbot/status/html.py:
4252 add build_get_class to get a class out of a build/buildstep
4253 finish naming the classes
4254 split out sourceNames to changeNames and builderNames so we
4255 can style them separately
4256 * docs/config.xhtml:
4257 finish documenting classes as they are right now
4259 * buildbot/status/html.py:
4260 name the classes as we agreed on IRC
4261 * docs/config.xhtml:
4264 * buildbot/status/html.py:
4265 same for cssclass->class_
4267 * buildbot/status/html.py:
4268 as decided on IRC, use class_ for the "class" attribute to not
4269 conflict with the class keyword, and clean up the messy **{} stuff.
4271 * buildbot/status/mail.py:
4272 put back "builders" argument, and fix docstring, because the
4273 code *ignores* builders listed in this argument
4275 * buildbot/process/builder.py:
4276 remove FIXME notes - category is now indeed a cvar of BuilderStatus
4278 * docs/config.xhtml:
4279 describe the category argument for builders
4281 * buildbot/status/builder.py:
4282 Fix a silly bug due to merging
4284 * buildbot/process/builder.py:
4285 remove category from the process Builder ...
4286 * buildbot/status/builder.py:
4287 ... and add it to BuilderStatus instead.
4288 Set category on unpickled builder statuses, they might not have it.
4289 * buildbot/master.py:
4290 include category when doing builderAdded
4291 * buildbot/status/mail.py:
4292 return None instead of self for builders we are not interested in.
4293 * buildbot/test/test_run.py:
4294 fix a bug due to only doing deferredResult on "dummy" waiting
4295 * buildbot/test/test_status.py:
4296 add checks for the Mail IStatusReceiver returning None or self
4298 * buildbot/status/html.py:
4299 fix testsuite by prefixing page title with BuildBot
4301 * buildbot/status/builder.py:
4302 have .category in builder status ...
4303 * buildbot/process/builder.py:
4304 ... and set it from Builder
4305 * buildbot/status/html.py:
4306 make .css a class variable
4307 * buildbot/test/test_status.py:
4308 write more tests to cover our categories stuff ...
4309 * buildbot/status/mail.py:
4310 ... and fix the bug that this uncovered
4312 * buildbot/changes/mail.py:
4313 * buildbot/changes/pb.py:
4314 * buildbot/master.py:
4315 * buildbot/process/base.py:
4316 * buildbot/process/factory.py:
4317 * buildbot/process/interlock.py:
4318 * buildbot/process/step.py:
4319 * buildbot/process/step_twisted.py:
4320 * buildbot/slave/commands.py:
4321 * buildbot/status/builder.py:
4322 * buildbot/status/client.py:
4323 * buildbot/status/html.py:
4324 * buildbot/status/mail.py:
4325 * buildbot/status/progress.py:
4326 * buildbot/test/test_changes.py:
4327 * buildbot/test/test_config.py:
4328 * buildbot/test/test_control.py:
4329 * buildbot/test/test_interlock.py:
4330 * buildbot/test/test_maildir.py:
4331 * buildbot/test/test_mailparse.py:
4332 * buildbot/test/test_run.py:
4333 * buildbot/test/test_slavecommand.py:
4334 * buildbot/test/test_status.py:
4335 * buildbot/test/test_steps.py:
4336 * buildbot/test/test_twisted.py:
4337 * buildbot/test/test_util.py:
4338 * buildbot/test/test_vc.py:
4339 * buildbot/test/test_web.py:
4341 add test-case-name at the top of a whole set of files
4343 * buildbot/status/builder.py:
4344 keep order of addition when getting builder names
4345 * buildbot/status/words.py:
4346 * buildbot/test/test_run.py:
4347 add test for getBuilderNames
4349 * buildbot/process/base.py:
4350 * buildbot/process/step.py:
4351 * buildbot/status/builder.py:
4352 * buildbot/status/html.py:
4353 make buildbot css-able
4354 replace the color code for purple with purple, don't understand
4355 why it wasn't purple to start with
4357 * buildbot/status/words.py:
4358 ok, so it doesn't look like BuilderStatus.remote is still valid.
4359 Use what waterfall uses instead.
4361 * buildbot/interfaces.py:
4362 * buildbot/status/builder.py:
4363 * buildbot/status/html.py:
4364 * buildbot/status/mail.py:
4365 * buildbot/status/words.py:
4366 * buildbot/test/test_run.py:
4367 use categories everywhere and make it be a list. More sensible
4368 for the future. Also make words actually respect this in
4371 * buildbot/interfaces.py:
4372 add category argument to getBuilderNames
4373 * buildbot/process/builder.py:
4374 * buildbot/status/builder.py:
4375 * buildbot/status/html.py:
4376 * buildbot/status/mail.py:
4377 * buildbot/status/words.py:
4378 * buildbot/test/test_run.py:
4379 move from specifying builders by name to specifying the category
4381 * buildbot/status/html.py:
4382 * buildbot/status/words.py:
4383 add "builders=" to __init__ of status clients so they can
4384 limit themselves to the given list of builders to report on
4386 * buildbot/status/html.py: set the title to the product name
4388 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
4390 * buildbot/interfaces.py:
4391 * buildbot/status/builder.py:
4392 more documentation. Hm, not sure if ChangeLog entries make sense
4395 2005-04-23 Brian Warner <warner@lothar.com>
4397 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
4399 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
4401 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
4402 the sub-commands that log buildmaster status to stdout and to a
4403 GUI window, respectively.
4405 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
4406 functionality is working again, but all the step-status and ETA
4407 stuff is missing. Commented out a lot of code pending more
4410 * buildbot/status/client.py: make sure that IRemote(None) is None
4412 * buildbot/changes/changes.py: import defer, oops
4413 (ChangeMaster): remove the .sources list, rely upon the fact that
4414 MultiServices can be treated as sequences of their children. This
4415 cleans up the add/remove ChangeSource routines a lot, as we keep
4416 exactly one list of the current sources instead of three.
4418 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
4419 up an empty ChangeMaster at init time.
4420 (BuildMaster.loadChanges): if there are changes to be had from
4421 disk, replace self.change_svc with the new ones. If not, keep
4422 using the empty ChangeMaster set up in __init__.
4423 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
4424 instead of a separate list, makes the code a bit cleaner.
4425 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
4426 (ConfigTest.testSources): same, also wait for loadConfig to finish.
4427 Extend the test to make sure we can get rid of the sources when
4430 2005-04-22 Brian Warner <warner@lothar.com>
4432 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
4433 and info/host files when making the slave directory
4435 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
4436 whendone= argument, just return the Deferred and let the caller do
4437 what they want with it.
4438 (Disconnect.testBuild1): wait for shutdownSlave
4439 (Basedir.testChangeBuilddir): new test to make sure changes to the
4440 builddir actually get propagated to the slave
4442 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
4443 explicit method, rather than passing the builddir in __init__ .
4444 Make sure to update self.basedir too, this was broken before.
4445 (Bot.remote_setBuilderList): use b.setBuilddir for both new
4446 builders and for ones that have just had their builddir changed.
4447 (BotFactory): add a class-level .perspective attribute, so
4448 BuildSlave.waitUntilDisconnected won't get upset when the
4449 connection hasn't yet been established
4450 (BuildSlave.__init__): keep track of the bot.Bot instance, so
4451 tests can reach through it to inspect the SlaveBuilders
4453 * buildbot/process/base.py (Build.buildException): explain the
4454 log.err with a log.msg
4455 * buildbot/process/builder.py (Builder.startBuild): same
4456 (Builder._startBuildFailed): improve error message
4458 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
4459 occurred because we lost the brand-new connection, retry instead
4460 of giving up. If not, it's probably an authorization failure, and
4461 it makes sense to stop trying. Make sure we log.msg the reason
4462 that we're log.err'ing the failure, otherwise test failures are
4463 really hard to figure out.
4465 * buildbot/master.py: change loadConfig() to return a Deferred
4466 that doesn't fire until the change has been fully implemented.
4467 This means any connected slaves have been updated with the new
4468 builddir. This change makes it easier to test the code which
4469 actually implements this builddir-updating.
4470 (BotPerspective.addBuilder): return Deferred
4471 (BotPerspective.removeBuilder): same
4472 (BotPerspective.attached): same
4473 (BotPerspective._attached): same. finish with remote_print before
4474 starting the getSlaveInfo, instead of doing them in parallel
4475 (BotPerspective.list_done): same
4476 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
4477 actually calling slave.disconnect()
4478 (BotMaster.addBuilder): same
4479 (BotMaster.removeBuilder): same
4480 (BuildMaster.loadConfig): same
4481 (BuildMaster.loadConfig_Slaves): same
4482 (BuildMaster.loadConfig_Sources): same
4483 (BuildMaster.loadConfig_Builders): same
4484 (BuildMaster.loadConfig_status): same
4486 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
4487 a Deferred that fires when the source is finally removed
4489 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
4490 the previous tree on win32, where we have to do it synchronously,
4491 make sure we return a Deferred anyway.
4492 (SourceBase.doCopy): same
4494 * buildbot/scripts/runner.py (statusgui): use the text client for
4495 now, while I rewrite the Gtk one
4496 * buildbot/clients/base.py: strip out old code, leaving just the
4497 basic print-message-on-event functionality. I also remove the
4498 ReconnectingPBClientFactory, but it does at least quit when it
4499 loses the connection instead of going silent
4501 2005-04-21 Brian Warner <warner@lothar.com>
4503 * Makefile: minor tweaks
4505 * NEWS: point out deprecation warnings, new features for
4508 * buildbot/master.py (BuildMaster.loadConfig): emit
4509 DeprecationWarnings for Builders defined with tuples. Rearrange
4510 code to facility removal of deprecated configuration keys in the
4513 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
4514 'buildbot' command to put a little Makefile in the target that
4515 helps you re-create the buildbot.tap file, start or stop the
4516 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
4517 all the files 0600, since they contain passwords.
4518 (start): if there is a Makefile, and /usr/bin/make exists, use
4519 'make start' in preference to a raw twistd command. This lets
4520 slave admins put things like PYTHONPATH variables in their
4521 Makefiles and have them still work when the slave is started with
4522 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
4523 be nice to first try the 'make' command and only fall back to
4524 twistd if it fails. TODO: the Makefile's "start" command does not
4525 add the --reactor=win32 argument when running under windows.
4526 (Options.debugclient, Options.statusgui): add sub-commands to launch
4527 the debug client (formerly in contrib/debugclient.py) and the
4528 Gtk status application (currently broken)
4529 * buildbot/clients/debug.py: move from contrib/debugclient.py
4530 * buildbot/clients/debug.glade: same
4532 * buildbot/test/test_trial.py: remove it. This requires some
4533 functionality out of Twisted that isn't there yet, and until then
4534 having it around just confuses things.
4536 * buildbot/test/test_slavecommand.py (Shell): test both with and
4537 without PTYs, and make sure that command output is properly
4538 interleaved in the with-PTY case. I think the without-PTY test
4539 should pass on windows, where we never use PTYs anyway.
4541 2005-04-20 Brian Warner <warner@lothar.com>
4543 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
4545 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
4547 * NEWS: start creating entries for the next release
4549 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
4551 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
4552 (WebTest.test_webPathname): same
4553 (WebTest.test_webPathname_port): same
4554 (WebTest.test_waterfall): use the default favicon rather than
4555 rooting around the filesystem for it. Open the expected-icon file
4556 in binary mode, to make win32 tests happier (thanks to Nick Trout
4558 * buildbot/status/html.py (buildbot_icon): win32 portability
4560 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
4561 win32-compatibility fixes from Nick Trout, the "file not found" message
4562 is different under windows
4563 (FakeSlaveBuilder.__init__): clean up setup a bit
4564 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
4566 2005-04-19 Brian Warner <warner@lothar.com>
4568 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
4569 skip-if-repositories-are-unavailable test to not kill the trial
4570 that comes with Twisted-1.3.0
4572 * setup.py: install buildbot.png icon file when installing code
4574 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
4575 environment used by the command, at least on the child side.
4577 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
4578 this method needs to be added and implemented because it gets
4579 called under heavy load. I don't quite understand the
4580 producer/consumer API enough to write it.
4581 (StatusResource.getChild): add a resource for /favicon.ico
4582 (Waterfall.__init__): add favicon= argument
4583 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4584 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
4585 (WebTest.test_webPathname): same
4586 (WebTest.test_webPathname_port): same
4587 * docs/config.xhtml: mention favicon=
4588 * buildbot/buildbot.png: add a default icon, dorky as it is
4590 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
4592 * buildbot/master.py:
4593 * buildbot/process/base.py:
4594 * buildbot/process/builder.py:
4595 * buildbot/process/interlock.py:
4596 * buildbot/status/builder.py:
4597 * buildbot/status/html.py:
4598 * buildbot/status/mail.py:
4599 * buildbot/status/words.py:
4600 new documentation while digging through the code
4602 2005-04-17 Brian Warner <warner@lothar.com>
4604 * general: try to fix file modes on all .py files: a+r, a-x,
4605 but let buildbot/clients/*.py be +x since they're tools
4607 * docs/epyrun (addMod): when an import fails, say why
4609 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
4611 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4613 * buildbot/process/base.py:
4614 * buildbot/process/builder.py:
4615 * buildbot/status/builder.py:
4616 new documentation while digging through the code
4618 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4620 * buildbot/changes/changes.py:
4621 * buildbot/changes/p4poller.py:
4622 * buildbot/interfaces.py:
4623 * buildbot/process/base.py:
4624 * buildbot/process/builder.py:
4625 * buildbot/process/step.py:
4626 * buildbot/process/step_twisted.py:
4627 * buildbot/slave/bot.py:
4628 * buildbot/slave/commands.py:
4629 * buildbot/status/builder.py:
4630 fix all docstrings to make epydoc happy. In the process of fixing
4631 some, I also moved pieces of docs, and removed some deprecated
4634 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4636 * buildbot/process/builder.py:
4637 * buildbot/process/interlock.py:
4638 * buildbot/process/process_twisted.py:
4639 * buildbot/process/step.py:
4640 BuildProcess -> Build, as it looks like that's what happened
4641 * buildbot/process/base.py:
4642 * buildbot/process/factory.py:
4645 2005-04-17 Brian Warner <warner@lothar.com>
4647 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4648 update compile command to accomodate the Twisted split.. now
4649 instead of './setup.py build_ext -i', you do './setup.py all
4650 build_ext -i', to run build_ext over all sub-projects.
4651 (FullTwistedBuildFactory): same
4652 (TwistedReactorsBuildFactory): same
4654 * buildbot/status/html.py (TextLog.finished): null out self.req
4655 when we're done, otherwise the reference cycle of TextLog to .req
4656 to .notifications to a Deferred to TextLog.stop keeps them from
4657 being collected, and consumes a huge (610MB on pyramid at last
4658 check) amount of memory.
4660 2005-04-11 Brian Warner <warner@lothar.com>
4662 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
4663 normalize the VC-repository location.. makes SVN happier with
4664 certain test environments.
4666 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
4667 RemoteShellCommand gets its own .env dictionary, so that code in
4668 start() doesn't mutate the original. I think this should fix the
4669 step_twisted.Trial problem where multiple identical components
4670 kept getting added to PYTHONPATH= over and over again.
4672 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
4673 adding epydoc-format docstrings to many classes. Thanks to Thomas
4674 Vander Stichele for the patches.
4675 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
4676 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
4677 * buildbot/slave/bot.py, commands.py, registry.py: same
4679 2005-04-05 Brian Warner <warner@lothar.com>
4681 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
4682 preserve timestamps, helps incremental builds of large trees.
4683 Patch from Rene Rivera.
4685 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
4686 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
4689 2005-04-03 Brian Warner <warner@lothar.com>
4691 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
4692 with one dict, apparently exec has some scoping bugs when used
4693 with both global/local dicts. Thanks to Nathaniel Smith for the
4696 2005-04-02 Brian Warner <warner@lothar.com>
4698 * buildbot/process/step_twisted.py (countFailedTests): the new
4699 trial in Twisted-2.0 emits a slightly different status line than
4700 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
4701 mistakenly think the test count is unparseable.
4702 (Trial.start): note that for some reason each build causes another
4703 copy of self.testpath to be prepended to PYTHONPATH. This needs to
4704 be fixed but I'm not sure quite where the problem is.
4706 2005-04-01 Brian Warner <warner@lothar.com>
4708 * buildbot/test/test_run.py (Run.testMaster): change some uses of
4709 deferredResult to avoid hangs/warnings under twisted-2.0
4710 (RunMixin.tearDown): same
4711 (RunMixin.shutdownSlave): same
4712 (Disconnect.testIdle1): same
4713 (Disconnect.testBuild2): same: wait one second after the build
4714 finishes for test to really be done.. this should be cleaned up to
4715 avoid wasting that second. Builder.detach uses a callLater(0),
4716 either that should be done in-line (something else needed that
4717 behavior), or it should return a Deferred that fires when the
4718 builder is really offline.
4719 (Disconnect.testBuild3): same
4720 (Disconnect.testDisappear): same
4722 * buildbot/test/test_web.py: rearrange server-setup and teardown
4723 code to remove unclean-reactor warnings from twisted-2.0
4725 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
4726 so the tests don't hang under twisted-2.0
4728 2005-03-31 Brian Warner <warner@lothar.com>
4730 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
4731 caused a warning each time the master changed our set of builders
4733 * buildbot/status/builder.py (BuildStatus.saveYourself): under
4734 w32, don't unlink the file unless it already exists. Thanks to
4735 Baptiste Lepilleur for the catch.
4736 (BuilderStatus.saveYourself): same
4738 2005-02-01 Brian Warner <warner@lothar.com>
4740 * buildbot/status/html.py (TextLog.getChild): use a /text child
4741 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
4742 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
4743 logfile as text/plain (no markup, no headers). This replaces the
4744 previous scheme (which used an ?text=1 argument), and gets us back
4745 to a relative link (which works better when the buildbot lives
4746 behind another web server, such as Apache configured as a reverse
4747 proxy). Thanks to Gerald Combs for spotting the problem.
4749 * buildbot/__init__.py (version): bump to 0.6.2+ while between
4752 2004-12-13 Brian Warner <warner@lothar.com>
4754 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
4756 * debian/changelog: update for 0.6.2
4757 * NEWS: finalize for 0.6.2
4759 2004-12-11 Brian Warner <warner@lothar.com>
4761 * NEWS: bring it up to date
4763 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
4764 detection code. Require some sign of life from the buildmaster
4765 every BotFactory.keepaliveInterval seconds. Provoke this
4766 indication at BotFactory.keepaliveTimeout seconds before the
4767 deadline by sending a keepalive request. We don't actually care if
4768 that request is answered in a timely fashion, what we care about
4769 is that .activity() is called before the deadline. .activity() is
4770 triggered by any PB message from the master (including an ack to
4771 one of the slave's status-update messages). With this new scheme,
4772 large status messages over slow pipes are OK, as long as any given
4773 message can be sent (and thus acked) within .keepaliveTimeout
4774 seconds (which defaults to 30).
4775 (SlaveBuilder.remote_startCommand): record activity
4776 (SlaveBuilder.ackUpdate): same
4777 (SlaveBuilder.ackComplete): same
4778 (BotFactory.gotPerspective): same
4779 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
4781 2004-12-09 Brian Warner <warner@lothar.com>
4783 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
4786 * buildbot/process/step_twisted.py (Trial._commandComplete):
4787 update self.cmd when we start the 'cat test.log' transfer. Without
4788 this, we cannot interrupt the correct RemoteCommand when we lose
4791 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
4792 trying to tell the slave to stop the command if we're already
4793 inactive, or if we no longer have a .remote
4795 * buildbot/process/builder.py (Builder._detached): don't let an
4796 exception in currentBuild.stopBuild() prevent the builder from
4797 being marked offline
4799 2004-12-07 Brian Warner <warner@lothar.com>
4801 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
4802 KeyError that happens when you ask for a non-existent Builder, and
4803 translate it into a UsageError.
4805 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
4806 losing the slave in the middle of a remote step is handled too
4808 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
4809 be a Failure, so be sure to stringify it before using it as the
4810 contents of the 'interrupt' logfile
4811 (RemoteCommand.interrupt): use stringified 'why' in
4812 remote_interruptCommand too, just in case
4814 2004-12-06 Brian Warner <warner@lothar.com>
4816 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
4817 instead of 'tla update', which is more efficient in case we've
4818 missed a couple of patches since the last update.
4820 * debian/changelog: update for previous (0.6.1) release. Obviously
4821 this needs to be handled better.
4823 2004-12-05 Brian Warner <warner@lothar.com>
4825 * NEWS: update for stuff since last release
4827 * buildbot/master.py (DebugPerspective.attached): return 'self', to
4828 match the maybeDeferred change in Dispatcher.requestAvatar
4829 * buildbot/changes/pb.py (ChangePerspective.attached): same
4830 * buildbot/status/client.py (StatusClientPerspective.attached): same
4831 * buildbot/process/builder.py (Builder._attached3): same
4832 * buildbot/pbutil.py (NewCredPerspective.attached): same
4834 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
4835 the date to the top-most box, if it is not the same as today's
4838 * docs/slave.xhtml: provide a buildslave setup checklist
4840 * docs/source.xhtml (Arch): correct terminology
4842 2004-12-04 Brian Warner <warner@lothar.com>
4844 * buildbot/test/test_slavecommand.py: use sys.executable instead
4845 of hard-coding 'python' for child commands, might help portability
4847 * docs/examples/twisted_master.cfg: update to current usage
4849 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
4850 'stop build' command to the IRC bot
4852 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
4853 message that broke PBChangeSource
4855 * buildbot/slave/bot.py: clean up shutdown/lose-master code
4856 (SlaveBuilder): make some attributes class-level, remove the old
4857 "update queue" which existed to support resuming a build after the
4858 master connection was lost. Try to reimplement that feature later.
4859 (SlaveBuilder.stopCommand): clear self.command when the
4860 SlaveCommand finishes, so that we don't try to kill a leftover one
4862 (SlaveBuilder.commandComplete): same, merge with commandFailed and
4865 * buildbot/slave/commands.py (SourceBase): set self.command for
4866 all VC commands, so they can be interrupted.
4868 2004-12-03 Brian Warner <warner@lothar.com>
4870 * buildbot/master.py: clean up slave-handling code, to handle
4871 slave-disconnect and multiple-connect better
4872 (BotPerspective): make these long-lasting, exactly one per bot
4873 listed in the config file.
4874 (BotPerspective.attached): if a slave connects while an existing
4875 one appears to still be connected, disconnect the old one first.
4876 (BotPerspective.disconnect): new method to forcibly disconnect a
4877 buildslave. Use some hacks to empty the transmit buffer quickly to
4878 avoid the long (20-min?) TCP timeout that could occur if the old
4879 slave has dropped off the net.
4880 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
4881 own their own SlaveStatus objects. Remove .attached/.detached, add
4882 .addSlave/.removeSlave, treat slaves like Builders (config file
4883 parsing sends deltas to the BotMaster). Inform the slave
4884 instances, i.e. the BotPerspective, about addBuilder and
4886 (BotMaster.getPerspective): turns into a single dict lookup
4887 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
4888 which gives BotPerspective.attached a chance to disconnect the old
4890 (BuildMaster.loadConfig): add code (disabled) to validate that all
4891 builders use known slaves (listed in c['bots']). The check won't
4892 work with tuple-specified builders, which are deprecated but not
4893 yet invalid, so the check is disabled for now.
4894 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
4895 routine, do the add/changed/removed dance with them like we do
4897 (BuildMaster.loadConfig_Sources): move source-config into a
4898 separate routine too
4900 * buildbot/status/builder.py (Status.getSlave): get the
4901 SlaveStatus object from the BotPerspective, not the BotMaster.
4903 * buildbot/test/test_run.py: bunch of new tests for losing the
4904 buildslave at various points in the build, handling a slave that
4905 connects multiple times, and making sure we can interrupt a
4908 * buildbot/slave/bot.py (BuildSlave): make it possible to use
4909 something other than 'Bot' for the Bot object, to make certain
4910 test cases easier to write.
4911 (BuildSlave.waitUntilDisconnected): utility method for testing
4913 2004-11-30 Brian Warner <warner@lothar.com>
4915 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
4917 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
4918 argument, return a Deferred that always fires with True or False.
4919 I don't use an errback to indicate 'ping failed' so that callers
4920 are free to ignore the deferred without causing spurious errors in
4922 * buildbot/process/builder.py (BuilderControl.ping): implement it
4924 * buildbot/test/test_run.py (Status.testDisappear): test ping
4925 (Status.disappearSlave): fix it
4927 2004-11-30 Brian Warner <warner@lothar.com>
4929 * buildbot/interfaces.py (IBuildControl): add .stopBuild
4930 (IBuilderControl): add .getBuild(num), only works for the current
4931 build, of course, although it might be interesting to offer
4932 something for builds in the .waiting or .interlocked state.
4934 * buildbot/process/base.py (Build): have .stopBuild just do the
4935 interrupt, then let the build die by itself.
4936 (BuildControl): add .stopBuild, and add a point-event named
4937 'interrupt' just after the build so status viewers can tell that
4939 (BuilderControl): add .getBuild
4941 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
4942 stops when you kill it, good for testing
4943 (ShellCommand.interrupt): add a logfile named 'interrupt' which
4944 contains the 'reason' text.
4946 * buildbot/status/html.py: Add Stop Build button, if the build can
4947 still be stopped. Send a Redirect (to the top page) one second
4948 later, hopefully long enough for the interrupt to have an effect.
4949 Move make_row() up to top-level to share it between Stop Build and
4952 * buildbot/slave/commands.py: only kill the child process once
4954 * buildbot/test/test_run.py: add testInterrupt
4956 2004-11-29 Brian Warner <warner@lothar.com>
4958 * buildbot/process/base.py: Refactor command interruption. The
4959 Build is now responsible for noticing that the slave has gone
4960 away: Build.lostRemote() interrupts the current step and makes
4961 sure that no further ones will be started.
4963 * buildbot/process/builder.py: When the initial remote_startBuild
4964 message fails, log it: this usually indicates that the slave has
4965 gone away, but we don't really start paying attention until they
4966 fail to respond to the first step's command.
4968 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
4969 slave disconnect. Now sports a new interrupt() method. Error
4970 handling was simplified a lot by chaining deferreds, so
4971 remoteFailed/remoteComplete were merged into a single
4972 remoteComplete method (which can now get a Failure object).
4973 Likewise failed/finished were merged into just _finished.
4974 (BuildStep): Add interrupt(why) method, and if why is a
4975 ConnectionLost Failure then the step is failed with some useful
4978 * buildbot/slave/bot.py: stop the current command when the remote
4979 Step reference is lost, and when the slave is shut down.
4980 (Bot): make it a MultiService, so it can have children. Use
4981 stopService to tell when the slave is shutting down.
4982 (SlaveBuilder): make it a Service, and a child of the Bot. Add
4983 remote_interruptCommand (which asks the current SlaveCommand to
4984 stop but allows it to keep emitting status messages), and
4985 stopCommand (which tells it to shut up and die).
4987 * buildbot/slave/commands.py: make commands interruptible
4988 (ShellCommand.kill): factor out os.kill logic
4989 (Command): factor out setup()
4990 (Command.sendStatus): don't send status if .running is false, this
4991 happens when the command has been halted.
4992 (Command.interrupt): new method, used to tell the command to die
4993 (SlaveShellCommand): implement .interrupt
4994 (DummyCommand): implement .interrupt
4995 (SourceBase, etc): factor out setup(), don't continue substeps if
4998 * buildbot/status/builder.py: fix all waitUntilFinished() methods
4999 so they can be called after finishing
5001 * buildbot/test/test_run.py: new tests for disconnect behavior,
5002 refactor slave-shutdown routines, add different kinds of
5005 2004-11-27 Brian Warner <warner@lothar.com>
5007 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
5008 method to express ETA time like "2m45s" instead of "165 seconds"
5010 2004-11-24 Brian Warner <warner@lothar.com>
5012 * buildbot/test/test_vc.py (VC.testArch): unregister the test
5013 archive after the test completes, to avoid cluttering the user's
5014 'tla archives' listing with a bogus entry. Arch doesn't happen to
5015 provide any way to override the use of ~/.arch-params/, so there
5016 isn't a convenient way to avoid touching the setup of the user who
5018 (VC_HTTP.testArchHTTP): same
5020 2004-11-23 Brian Warner <warner@lothar.com>
5022 * buildbot/status/html.py (TextLog): split render() up into
5023 render_HEAD and render_GET. Use a Producer when sending log
5024 chunks, to reduce memory requirements and avoid sending huge
5025 non-Banana-able strings over web.distrib connections. Requires
5026 peeking under the covers of IStatusLog.
5027 (TextLog.resumeProducing): fix the "as text" link, handle client
5028 disconnects that occur while we're still sending old chunks.
5030 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
5031 use defer.succeed, not the non-existent defer.success
5032 (LogFile.waitUntilFinished): same
5033 (LogFile.subscribe): don't add watchers to a finished logfile
5035 * buildbot/__init__.py (version): bump to 0.6.1+ while between
5038 2004-11-23 Brian Warner <warner@lothar.com>
5040 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
5042 2004-11-23 Brian Warner <warner@lothar.com>
5044 * NEWS: update for the 0.6.1 release
5045 * MANIFEST.in: add new files
5047 * README (INSTALLATION): explain how to enable the extra VC tests
5049 * buildbot/status/builder.py (LogFile): add .runEntries at the class
5050 level to, so old pickled builds can be displayed ok
5052 2004-11-22 Brian Warner <warner@lothar.com>
5054 * NEWS: summarize updates since last release
5056 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
5057 Yoz Grahame. Closes SF#1050138.
5059 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
5062 * buildbot/process/step_twisted.py (Trial): update docs a bit
5064 * docs/factories.xhtml: fix Trial factory docs to match reality.
5067 * buildbot/process/factory.py (Trial.__init__): add args for
5068 randomly= and recurse=, making them available to instantiators
5069 instead of only to subclassers. Closes: SF#1049759.
5071 2004-11-15 Brian Warner <warner@lothar.com>
5073 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5074 try to teach the Quick factory to use multiple versions of python
5076 2004-11-12 Brian Warner <warner@lothar.com>
5078 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
5079 safer w32-compatible approach, and only use it on windows
5080 (BuildStatus.saveYourself): same
5082 2004-11-11 Brian Warner <warner@lothar.com>
5084 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
5085 it: one string merge per chunk. There are now separate .entries
5086 and .runEntries lists: when enumerating over all chunks, make sure
5088 * buildbot/test/test_status.py (Log): more tests
5090 * buildbot/status/builder.py (LogFile.addEntry): Merge string
5091 chunks together, up to 10kb per chunk. This ought to cut down on
5092 the CPU-burning overhead of large log files. Thanks to Alexander
5093 Staubo for spotting the problem.
5094 * buildbot/test/test_status.py (Log): tests for same
5096 2004-11-10 Brian Warner <warner@lothar.com>
5098 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
5099 header to outbound mail
5100 * buildbot/test/test_status.py (Mail.testBuild1): test for same
5102 2004-11-08 Brian Warner <warner@lothar.com>
5104 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
5105 can't do os.rename() onto an existing file, so catch the exception
5106 and unlink the target file first. This introduces a slight window
5107 where the existing file could be lost, but the main failure case
5108 (disk full) should still be handled safely.
5109 (BuildStatus.saveYourself): same
5111 * buildbot/changes/pb.py (ChangePerspective): use a configurable
5112 separator character instead of os.sep, because the filenames being
5113 split here are coming from the VC system, which can have a
5114 different pathname convention than the local host. This should
5115 help a buildmaster running on windows that uses a CVS repository
5116 which runs under unix.
5117 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
5119 * buildbot/process/step_twisted.py (Trial.createSummary): survive
5120 when there are no test failures to be parsed
5122 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
5123 instead of the unix-specific os.system("cp"), thanks to Elliot
5124 Murphy for this and the other buildbot-vs-windows catches.
5125 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
5127 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
5128 echo the command as it is run
5130 * setup.py: install sample.mk too, not just sample.cfg
5131 (scripts): install contrib/windows/buildbot.bat on windows
5133 2004-11-07 Brian Warner <warner@lothar.com>
5135 * buildbot/process/builder.py (Builder._detached): clear the
5136 self.currentBuild reference, otherwise the next build will be
5137 skipped because we think the Builder is already in use.
5139 * docs/examples/twisted_master.cfg: update to match current usage
5140 on the Twisted buildbot
5142 2004-10-29 Brian Warner <warner@lothar.com>
5144 * buildbot/status/mail.py (MailNotifier): fix typo in docs
5146 2004-10-28 Brian Warner <warner@lothar.com>
5148 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
5149 have separate doVCUpdate/doVCFull methods. Catch an update failure
5150 and respond by clobbering the source directory and re-trying. This
5151 will handle local changes (like replacing a file with a directory)
5152 that will cause CVS and SVN updates to fail.
5153 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
5155 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
5158 2004-10-19 Brian Warner <warner@lothar.com>
5160 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
5162 * buildbot/status/html.py (StatusResourceTestResults): display any
5163 TestResults that the Build might have
5164 (StatusResourceTestResult): and the logs for each TestResult
5165 (StatusResourceBuild): add link from the per-build page
5167 2004-10-15 Brian Warner <warner@lothar.com>
5169 * buildbot/process/step_twisted.py (Trial.createSummary): parse
5170 the 'problems' portion of stdout, add TestResults to our build
5171 * buildbot/test/test_twisted.py (Parse.testParse): test it
5173 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
5174 to retrieve a dict of accumulated test results
5175 (ITestResult): define what a single test result can do
5176 * buildbot/status/builder.py (TestResult): implement ITestResult
5177 (BuildStatus.getTestResults): retrieve dict of TestResults
5178 (BuildStatus.addTestResult): add TestResults
5179 * buildbot/test/test_status.py (Results.testAddResults): test it
5181 2004-10-14 Brian Warner <warner@lothar.com>
5183 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
5184 instead of os.system("rm -rf") for win32 portability
5186 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
5187 SignalMixin instead of starting/stopping the reactor, which is
5188 likely to cause problems with other tests
5190 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
5191 self.copyComplete() call. Yoz Grahame makes the catch.
5193 * contrib/windows/buildbot.bat: helper script to deal with path
5194 issues. Thanks to Yoz Grahame.
5196 * buildbot/master.py (BuildMaster.startService): don't register a
5197 SIGHUP handler if the signal module has no SIGHUP attribute.
5198 Apparently win32 does this.
5200 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
5202 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
5203 test if the reactor can't offer UNIX sockets
5205 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
5206 error introduced in the last commit. We really need that
5209 2004-10-12 Brian Warner <warner@lothar.com>
5211 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
5212 when describing a maildir source. Thanks to Stephen Davis.
5214 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
5217 * buildbot/scripts/runner.py (createMaster): install Makefile too
5218 (start): add --no_save to 'start' command
5219 * buildbot/scripts/sample.mk: simple convenience Makefile with
5220 start/stop/reload targets
5222 * buildbot/__init__.py (version): bump to 0.6.0+ while between
5225 2004-09-30 Brian Warner <warner@lothar.com>
5227 * setup.py: Releasing buildbot-0.6.0
5229 2004-09-30 Brian Warner <warner@lothar.com>
5231 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
5232 test_trial.py from the source tarball until support is complete.
5234 * NEWS: update for 0.6.0 release
5235 * buildbot/__init__.py (version): same
5238 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
5239 'source' command to tell users where to get the Buildbot source
5241 * docs/examples/*.cfg: update to modern standards
5243 * NEWS: update for release
5245 * buildbot/scripts/runner.py (createMaster): remove the
5246 -shutdown.tap stuff now that it isn't necessary
5248 (start): launch buildbot.tap, not buildbot-shutdown.tap
5251 * buildbot/status/mail.py (Domain): shorten class name
5252 (MailNotifier): if lookup= is a string, pass it to Domain()
5253 * buildbot/test/test_status.py (Mail.testBuild1): new class name
5254 (Mail.testBuild2): test the string-to-Domain shortcut
5255 (Mail.testMail): fix test
5258 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
5261 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
5262 more attributes on load
5263 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
5264 to accomodate the whole waterfall page at once, and the thrashing
5265 results in a lot of unnecessary loads
5266 (BuildStatus.saveYourself): use binary pickles, not fluffy text
5267 (BuilderStatus.saveYourself): same
5268 (BuilderStatus.eventGenerator): stop generating on the first missing
5269 build. We assume that saved builds are deleted oldest-first.
5270 (BuildStepStatus.__getstate__): .progress might not exist
5272 * buildbot/changes/changes.py (ChangeMaster): make it
5273 serializable, in $masterdir/changes.pck
5274 (ChangeMaster.stopService): save on shutdown
5275 * buildbot/master.py (BuildMaster.loadChanges): load at startup
5276 * buildbot/test/test_config.py: load Changes before config file
5279 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
5280 "Oh my god, you killed the command" header on a separate line
5282 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
5283 skip over corrupted build pickles
5284 (BuilderStatus.getFullBuildByNumber): same
5285 (BuilderStatus.eventGenerator): skip over unavailable builds
5286 (BuildStatus.saveYourself): save builds to a .tmp file first, then
5287 do an atomic rename. This prevents a corrupted pickle when some
5288 internal serialization error occurs.
5289 (BuilderStatus.saveYourself): same
5291 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
5292 the timeout for shell commands, it got lost somehow
5294 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
5295 run out of build steps, return the rest of the builder events
5297 * buildbot/interfaces.py (IBuilderControl.ping): add method
5299 * buildbot/process/builder.py (BuilderControl.ping): move
5300 slave-ping to BuilderControl, and fix the failure case in the
5301 process (Event.finish() is the verb, Event.finished is the noun).
5303 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
5304 through the BuilderControl instead of the BuilderStatus
5305 (EventBox): add adapter for builder.Event, allowing builder events to
5306 be displayed in the waterfall display
5308 * buildbot/master.py (BotMaster.stopService): add a 'master
5309 shutdown' event to the builder's log
5310 (BuildMaster.startService): and a 'master started' on startup
5312 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
5313 builder events into the BuildStep event stream
5314 (Status.builderAdded): add a 'builder created' event
5317 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
5318 command to announce the completion of a running build
5319 (IrcStatusBot.command_FORCE): announce when the build finishes
5321 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
5322 don't evict unfinished builds from the cache: they must stay in
5323 the full-cache until their logfiles have stopped changing. Make
5324 sure the eviction loop terminates if an unfinished build was hit.
5325 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
5326 This lets exceptions be dumped in an email status message. Really
5327 we need LogFiles which contain both text and HTML, instead of two
5329 (BuildStatus.__getstate__): handle self.finished=False
5330 (Status.builderAdded): if the pickle is corrupted, abandon the
5331 history and create a new BuilderStatus object.
5333 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
5334 self.progress attribute, helped one test which doesn't fully set
5335 up the Build object.
5337 * buildbot/interfaces.py (IStatusLogStub): split out some of the
5338 IStatusLog methods into an Interface that is implemented by "stub"
5339 logs, for which all the actual text chunks are on disk (in the
5340 pickled Build instance). To show the log contents, you must first
5341 adapt the stub log to a full IStatusLog object.
5343 * buildbot/status/builder.py (LogFileStub): create separate stub
5344 log objects, which can be upgraded to a real one if necessary.
5345 (LogFile): make them persistable, and let them stubify themselves
5347 (BuildStepStatus): same
5349 (BuildStatus.saveYourself): save the whole build out to disk
5350 (BuilderStatus): make it persistable
5351 (BuilderStatus.saveYourself): save the builder to disk
5352 (BuilderStatus.addFullBuildToCache): implement two caches which
5353 hold Build objects: a small one which holds full Builds, and a
5354 larger one which holds "stubbed" Builds (ones with their LogFiles
5355 turned into LogFileStubs). This reduces memory usage by the
5356 buildmaster by not keeping more than a few (default is 2) whole
5357 build logs in RAM all the time.
5358 (BuilderStatus.getBuild): rewrite to pull from disk (through the
5360 (BuilderStatus.eventGenerator): rewrite since .builds went away
5361 (BuilderStatus.buildStarted): remove the .builds array. Add the
5362 build to the "full" cache when it starts.
5363 (BuilderStatus._buildFinished): save the build to disk when it
5365 (Status): give it a basedir (same as the BuildMaster's basedir)
5366 where the builder pickles can be saved
5367 (Status.builderAdded): create the BuilderStatus ourselves, by
5368 loading a pickle from disk (or creating a new instance if there
5369 was none on disk). Return the BuilderStatus so the master can glue
5370 it into the new Builder object.
5372 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
5373 all BuilderStatuses to save themselves out to disk. This is in
5374 lieu of saving anything important in the main Application pickle
5375 (the -shutdown.tap file).
5376 (BuildMaster.__init__): give Status() a basedir for its files
5377 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
5378 to get the BuilderStatus, then give it to the Builder (instead of
5379 doing it the other way around). It's ok if the status announces
5380 the new Builder before it's really ready, as the outside world can
5381 only see the BuilderStatus object anyway (and it is ready before
5382 builderAdded returns). Use the builder's "builddir" (which
5383 normally specifies where the slave will run the builder) as the
5384 master's basedir (for saving serialized builds).
5386 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
5387 coerce the logfile to IStatusLog before trying to get the text
5388 chunks out of it. This will pull the full (non-stubified) Build in
5389 from disk if necessary.
5390 (TextLog): fix the adapter registration
5392 * buildbot/test/test_control.py (Force.setUp): create the basedir
5393 * buildbot/test/test_web.py: same
5394 * buildbot/test/test_vc.py (SetupMixin.setUp): same
5395 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
5396 * buildbot/test/test_run.py (Run.testMaster): same
5397 (Status.setUp): same
5399 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
5401 * buildbot/status/html.py (Waterfall.__init__): store actual
5402 allowForce flag passed in rather than using True for everyone;
5403 make sure setting it to False doesn't cause a NameError
5405 (StatusResourceBuilder.__init__) add the builder name to the page
5407 (StatusResourceBuilder.body) move HTML generation for a name/value
5408 row into a helper method (StatusResourceBuilder.make_row); only
5409 generate the "Force Build" form if allowForce was True and the
5410 slave is connected. Use class attributes in the generated HTML to
5411 spread a little CSS-joy.
5413 2004-09-28 Brian Warner <warner@lothar.com>
5415 * buildbot/process/step_twisted.py (Trial.createSummary): fix
5416 warning-scanner to not ignore things like
5417 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
5419 * buildbot/status/html.py (StatusResource.control): add some
5420 class-level values for .control in an attempt to make upgrading
5423 * buildbot/util.py (ComparableMixin): survive missing attributes,
5424 such as when a class is modified and we're comparing old instances
5427 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
5428 failure handling, remove a redundant try/except block. Don't
5429 return the full traceback to the IRC channel.
5430 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
5431 error messages. Get ETA properly.
5433 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
5434 the reason, since (at least) IRC message will have <> in them.
5435 (StatusResourceBuilder.__init__): take an IBuilderControl
5436 (StatusResourceBuilder.force): use the IBuilderControl we get in
5437 the constructor instead of trying to make our own. Catch the
5438 new exceptions and ignore them for now (until we make an
5439 intermediate web page where we could show the error message)
5440 (StatusResource): create with an IControl, use it to give an
5441 IBuilderControl to all children
5442 (Waterfall): take an allowForce= option, pass an IControl object
5443 to StatusResource if it is True
5445 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
5447 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5448 catch new exceptions and return string forms
5450 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
5451 * buildbot/process/builder.py (Builder.forceBuild): raise them
5452 * buildbot/test/test_control.py (Force.testNoSlave): new test
5453 (Force.testBuilderInUse): same
5456 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
5458 * buildbot/test/test_run.py: use IControl
5459 * buildbot/test/test_vc.py: same
5461 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
5462 to use IControl. Still offline.
5463 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
5465 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
5466 who=None so periodic builds don't send out status mail
5467 (Builder.forceBuild): include reason in the log message
5468 (BuilderControl.forceBuild): rename 'name' to 'who'
5470 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
5471 'who' parameter, but make it None by default so builds forced by
5472 slave admins don't cause status mail to be sent to anybody
5473 (BotMaster.forceBuild): same. this method is deprecated.
5474 (DebugPerspective.perspective_forceBuild): same, use IControl.
5475 (DebugPerspective.perspective_fakeChange): use IControl..
5476 (Dispatcher.requestAvatar): .. so don't set .changemaster
5478 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
5479 parameter to avoid confusion with the name of the builder
5482 * buildbot/status/mail.py: refine comment about needing 2.3
5484 * buildbot/status/html.py: move all imports to the top
5486 * buildbot/test/test_control.py: test new interfaces
5487 * buildbot/test/test_run.py (Status): handle new interfaces
5488 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
5490 * buildbot/process/base.py (BuildControl): implement IBuildControl
5491 and its lonely getStatus() method
5493 * buildbot/process/builder.py (BuilderControl): implement
5494 IBuilderControl, obtained by adapting the Builder instance
5495 (Builder.startBuild): return a BuilderControl instead of a
5496 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
5497 accomplish the same thing.
5499 * buildbot/master.py: move all import statements to the top
5500 (Control): implement IControl, obtained by adapting the
5501 BuildMaster instance.
5503 * buildbot/interfaces.py: add IControl, IBuilderControl, and
5504 IBuildControl. These are used to force builds. Eventually they
5505 will provide ways to reconfigure the Builders, pause or abandon a
5506 Build, and perhaps control the BuildMaster itself.
5508 2004-09-26 Brian Warner <warner@lothar.com>
5510 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
5511 ends up comparing us against something without a .__class__
5513 2004-09-24 Brian Warner <warner@lothar.com>
5515 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
5518 * Makefile: add 'deb-snapshot' target, to create a timestamped
5521 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
5523 2004-09-23 Brian Warner <warner@lothar.com>
5525 * buildbot/__init__.py (version): move version string here
5526 * setup.py: get version string from buildbot.version
5527 * buildbot/status/html.py (WaterfallStatusResource.body): add
5528 buildbot version to the page footer
5529 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
5532 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
5533 slaves, let the second know where the first one is coming from
5534 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
5535 see our exceptions. It would be nice if there were a way to just
5536 send them the exception type and value, not the full traceback.
5539 * buildbot/status/mail.py (MailNotifier): add a new argument
5540 sendToInterestedUsers=, which can be set to False to disable the
5541 usual send-to-blamelist behavior.
5542 (top): handle python-2.2 which has no email.MIMEMultipart
5543 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
5544 (MailNotifier.disownServiceParent): unsubscribe on removal
5546 * buildbot/test/test_status.py (Mail.testBuild2): test it
5549 * buildbot/status/progress.py (Expectations.wavg): tolerate
5550 current=None, which happens when steps start failing badly
5551 * buildbot/test/test_status.py (Progress.testWavg): test for it
5553 * buildbot/process/step.py (SVN.startVC): when the (old) slave
5554 doesn't understand args['revision'], emit a warning instead of
5555 bailing completely. Updating to -rHEAD is probably close enough.
5557 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
5559 * buildbot/test/test_status.py: at least import bb.status.client
5560 even if we don't have any test coverage for it yet
5562 * contrib/svn_buildbot.py: don't require python2.3
5563 (main): wait, do require it (for sets.py), but explain how to
5564 make it work under python2.2
5566 2004-09-23 Brian Warner <warner@lothar.com>
5568 * contrib/svn_buildbot.py: include the revision number in the Change
5570 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
5571 using util.now() because FreshCVS is a realtime service
5573 * buildbot/status/event.py: delete dead code
5574 * buildbot/process/step.py: don't import dead Event class
5575 * buildbot/process/step_twisted.py: same
5576 * buildbot/status/builder.py: same
5577 * buildbot/status/client.py: same
5579 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
5581 * buildbot/changes/changes.py (Change): set .when from an __init__
5582 argument (which defaults to now()), rather than having
5583 ChangeMaster.addChange set it later.
5584 (ChangeMaster.addChange): same
5586 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
5587 (parseSyncmail): same. Just use util.now() for now.
5588 (parseBonsaiMail): parse the timestamp field for when=
5590 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
5591 instead of setting .when after the fact
5595 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
5596 results when the target project uses retrial. Still under
5598 * buildbot/test/test_trial.py: same
5600 2004-09-21 Brian Warner <warner@lothar.com>
5602 * buildbot/status/mail.py (MailNotifier.__init__): include
5603 success/warnings/failure in the Subject line
5604 (MailNotifier.buildMessage): add the buildbot's URL to the body,
5605 use step.logname for the addLogs=True attachment filenames
5606 * buildbot/test/test_status.py (Mail): test Subject lines
5607 (Mail.testLogs): test attachment filenames
5609 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
5610 accept a 'who' argument from the debug tool
5611 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
5612 * contrib/debug.glade: add text box to set 'who'
5614 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
5615 .getBuilderName with .getBuilder().getName(), more flexible
5616 (IStatusLog.getName): logs have short names, but you can prefix
5617 them with log.getStep().getName() to make them more useful
5618 * buildbot/status/builder.py: same
5619 * buildbot/status/client.py: same
5620 * buildbot/status/html.py: same
5621 * buildbot/test/test_run.py (Status.testSlave): same
5622 * buildbot/process/step.py: tweak logfile names
5624 * buildbot/status/mail.py (MailNotifier): add lookup, change
5625 argument to extraRecipients. The notifier is now aimed at sending
5626 mail to the people involved in a particular build, with additional
5627 constant recipients as a secondary function.
5629 * buildbot/test/test_status.py: add coverage for IEmailLookup,
5630 including slow-lookup and failing-lookup. Make sure the blamelist
5631 members are included.
5633 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
5634 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
5635 (IBuildStatus.getInterestedUsers): new method
5636 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
5637 * buildbot/status/client.py (remote_getResponsibleUsers): same
5638 * buildbot/status/html.py (StatusResourceBuild.body): same
5639 * buildbot/test/test_run.py (Status.testSlave): same
5641 2004-09-20 Brian Warner <warner@lothar.com>
5643 * docs/users.xhtml: update concepts
5645 * Makefile: add a convenience makefile, for things like 'make
5646 test'. It is not included in the source tarball.
5648 2004-09-16 Brian Warner <warner@lothar.com>
5650 * NEWS: mention /usr/bin/buildbot, debian/*
5652 * debian/*: add preliminary debian packaging. Many thanks to
5653 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
5654 it considerably since it left their hands, I am responsible for
5655 all breakage that's resulted.
5657 * bin/buildbot: create a top-level 'buildbot' command, to be
5658 installed in /usr/bin/buildbot . For now it's just a simple
5659 frontend to mktap/twistd/kill, but eventually it will be the entry
5660 point to the 'try' command and also a status client. It is also
5661 intended to support the upcoming debian-packaging init.d scripts.
5662 * buildbot/scripts/runner.py: the real work is done here
5663 * buildbot/scripts/__init__.py: need this too
5664 * buildbot/scripts/sample.cfg: this is installed in new
5665 buildmaster directories
5666 * setup.py: install new stuff
5668 2004-09-15 Brian Warner <warner@lothar.com>
5670 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
5671 'file:' schema (the version shipped with OS-X was built without the
5673 (SetupMixin.tearDown): stop the goofy twisted.web timer which
5674 updates the log-timestamp, to make sure it isn't still running after
5677 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
5678 values to the config file.
5679 * docs/examples/hello.cfg: add examples
5680 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
5681 * buildbot/status/builder.py (Status.getProjectURL): implement them
5682 * buildbot/master.py (BuildMaster.loadConfig): set them from config
5683 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
5684 * buildbot/status/html.py (WaterfallStatusResource): display them
5687 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
5688 certain error cases don't suffer a secondary exception.
5689 (top): Skip tests if the corresponding VC tool is not installed.
5691 * buildbot/process/factory.py (Trial): introduce separate
5692 'buildpython' and 'trialpython' lists, since trialpython=[] is
5693 what you want to invoke /usr/bin/python, whereas ./setup.py is
5694 less likely to be executable. Add env= parameter to pass options
5695 to test cases (which is how I usually write tests, I don't know if
5696 anyone else does it this way).
5698 * buildbot/process/step_twisted.py (Trial): handle python=None.
5699 Require 'testpath' be a string, not a list. Fix tests= typo.
5700 (Trial.start): sanity-check any PYTHONPATH value for stringness.
5702 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
5703 way to deal with the possibility of removing the disconnect notify
5705 (CVS): add a 'login' parameter to give a password to 'cvs login',
5706 commonly used with pserver methods (where pw="" or pw="guest")
5708 * buildbot/slave/commands.py (SourceBase): move common args
5709 extraction and setup() to __init__, so everything is ready by the
5710 time setup() is called
5711 (CVS.start): call 'cvs login' if a password was supplied
5712 (ShellCommand): special-case PYTHONPATH: prepend the master's
5713 value to any existing slave-local value.
5715 * buildbot/process/builder.py (Builder.updateBigStatus): if we
5716 don't have a remote, mark the builder as Offline. This whole
5717 function should probably go away and be replaced by individual
5719 (Builder.buildFinished): return the results to the build-finished
5720 deferred callback, helps with testing
5722 2004-09-14 Brian Warner <warner@lothar.com>
5724 * buildbot/test/test_vc.py: put all the repositories needed to run
5725 the complete tests into a single small (1.3MB) tarball, so I can
5726 make that tarball available on the buildbot web site. Test HTTP
5727 access (for Arch and Darcs) by spawning a temporary web server
5728 while the test runs.
5730 * docs/users.xhtml: new document, describe Buildbot's limited
5731 understanding of different human users
5733 * buildbot/test/test_vc.py: rearrange test cases a bit
5735 * buildbot/process/step_twisted.py (Trial): handle testpath=
5736 * buildbot/process/factory.py (Trial): update to use step.Trial
5738 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
5740 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
5741 the overall build text (which gives you 'failed 2 tests' rather
5743 (BuildStepStatus.text2): default to [], not None
5745 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
5748 2004-09-12 Brian Warner <warner@lothar.com>
5750 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
5751 log the whole exception if it's just an AttributeError (old slave)
5753 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
5754 so (e.g.) sub-commands can be run in the right directory.
5755 (ShellCommand.start): accept an optional errorMessage= argument
5756 to make life easier for SVN.start
5757 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
5759 (ShellCommand.start): move ['dir'] compatibility hack..
5760 (RemoteShellCommand.start): .. to here so everyone can use it
5762 * buildbot/process/step_twisted.py (Trial): use .workdir
5764 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
5765 text displayed when debuild fails completely
5766 (Trial): snarf _trial_temp/test.log from the slave and display it
5768 2004-09-11 Brian Warner <warner@lothar.com>
5770 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
5772 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
5773 set to 'twisted', so --recurse can find twisted/web/test/*, etc
5775 * buildbot/process/step.py (ShellCommand): call .createSummary
5776 before .evaluateCommand instead of the other way around. This
5777 makes it slightly easier to count warnings and then use that to
5778 set results=WARNINGS
5779 * buildbot/process/step_twisted.py: cosmetic, swap the methods
5781 * buildbot/process/base.py (Build.buildFinished): update status
5782 before doing progress. It's embarrassing for the build to be stuck
5783 in the "building" state when an exceptions occurs elsewhere..
5785 * buildbot/status/progress.py (Expectations.expectedBuildTime):
5786 python2.2 doesn't have 'sum'
5788 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
5789 to prevent clients from accidentally sorting it
5791 * buildbot/master.py (Manhole): add username/password
5792 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
5793 c['manholePort'], deprecate old usage
5794 * docs/config.xhtml: document c['manhole']
5795 * docs/examples/hello.cfg: show example of using a Manhole
5798 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
5799 pretend the slave is up to date
5801 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
5802 the module, overlaps with 'log', the local variable
5804 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
5806 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
5807 new method to let Steps find out the version of their
5808 corresponding SlaveCommand.
5809 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
5810 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
5811 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
5813 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
5814 (Arch.startVC): same
5815 (P4Sync.startVC): same
5817 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
5818 Deferred so we can catch errors in remote_startCommand
5819 (RemoteShellCommand.start): same
5821 * docs/examples/twisted_master.cfg: update sample config file
5823 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
5824 after connectionMade() is called, not before. Close stdin at that
5827 * buildbot/process/process_twisted.py: update to use Trial, clean
5828 up argument passing (move to argv arrays instead of string
5831 * buildbot/process/step_twisted.py (Trial): new step to replace
5832 RunUnitTests, usable by any trial-using project (not just
5833 Twisted). Arguments have changed, see the docstring for details.
5835 * buildbot/process/base.py (Build.startBuild): this now returns a
5836 Deferred. Exceptions that occur during setupBuild are now
5837 caught better and lead to fewer build_status weirdnesses, like
5838 finishing a build that was never started.
5839 (Build.buildFinished): fire the Deferred instead of calling
5840 builder.buildFinished directly. The callback argument is this
5841 Build, everything else can be extracted from it, including the
5842 new build.results attribute.
5843 * buildbot/process/builder.py (Builder.startBuild): same
5844 (Builder.buildFinished): same, extract results from build
5846 * buildbot/process/step.py (ShellCommands): remove dead code
5848 2004-09-08 Brian Warner <warner@lothar.com>
5850 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
5851 doesn't try to use the leftover patched workdir
5852 (SourceStamp): test source-stamp computation for CVS and SVN
5854 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
5855 patched workdir ('touch .buildbot-patched') so we don't try to
5857 (SourceBase.start): add ['revision'] for all Source steps
5858 (CVS): change args: use ['branch'] for -r, remove ['files']
5859 (CVS.buildVC): fix revision/branch stuff
5860 (SVN): add revision stuff
5862 * buildbot/process/step.py (BuildStep.__init__): reject unknown
5863 kwargs (except 'workdir') to avoid silent spelling errors
5864 (ShellCommand.__init__): same
5865 (Source): new base class for CVS/SVN/etc. Factor out everything
5866 common, add revision computation (perform the checkout with a -D
5867 DATE or -r REVISION that gets exactly the sources described by the
5868 last Change), overridable with step.alwaysUseLatest. Add patch
5869 handling (build.getSourceStamp can trigger the use of a base
5870 revision and a patch).
5871 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
5872 * docs/steps.xhtml: update docs
5873 * docs/source.xhtml: mention .checkoutDelay
5874 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
5876 * buildbot/process/base.py (Build.setSourceStamp): add a
5877 .sourceStamp attribute to each Build. If set, this indicates that
5878 the build should be done with something other than the most
5879 recent source tree. This will be used to implement "try" builds.
5880 (Build.allChanges): new support method
5881 (Build.lastChangeTime): remove, functionality moved to Source steps
5882 (Build.setupBuild): copy the Step args before adding ['workdir'],
5883 to avoid modifying the BuildFactory (and thus triggering spurious
5887 * buildbot/status/html.py: rename s/commits/changes/
5888 (StatusResourceChanges): same
5889 (CommitBox.getBox): same, update URL
5890 (WaterfallStatusResource): same
5891 (StatusResource.getChild): same
5893 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
5894 * contrib/debug.glade: add optional 'revision' to the fakeChange
5896 * buildbot/changes/changes.py (html_tmpl): display .revision
5897 (ChangeMaster.addChange): note .revision in log
5898 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
5899 accept a ['revision'] attribute
5901 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
5903 * buildbot/master.py (BotMaster.getPerspective): update the
5904 .connected flag in SlaveStatus when it connects
5905 (BotMaster.detach): and when it disconnects
5906 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
5907 (BuildMaster.loadConfig_Builders): walk old list correctly
5909 * buildbot/test/test_config.py: fix prefix= usage
5911 2004-09-06 Brian Warner <warner@lothar.com>
5915 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
5916 poll a P4 depot looking for recent changes. Thanks to Dave
5917 Peticolas for the contribution. Probably needs some testing after
5920 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
5921 requires manual client setup for each buildslave. Rather
5922 experimental. Thanks again to Dave Peticolas.
5923 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
5925 * buildbot/changes/changes.py (Change): add a .revision attribute,
5926 which will eventually be used to generate source-stamp values.
5928 * buildbot/process/step.py (RemoteCommand.start): use
5929 notifyOnDisconnect to notice when we lose the slave, then treat it
5930 like an exception. This allows LogFiles to be closed and the build
5931 to be wrapped up normally. Be sure to remove the disconnect
5932 notification when the step completes so we don't accumulate a
5933 bazillion such notifications which will fire weeks later (when the
5934 slave finally disconnects normally). Fixes SF#915807, thanks to
5935 spiv (Andrew Bennetts) for the report.
5936 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
5937 really isn't Logged- specific
5938 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
5939 header, since it's almost always going to be appended to an
5941 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
5942 update test to handle use of notifyOnDisconnect
5944 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
5945 don't clear .ETA and .currentBuild when going offline, let the
5946 current build clean up after itself
5948 * buildbot/process/builder.py (Builder.detached): wait a moment
5949 before doing things like stopping the current build, because the
5950 current step will probably notice the disconnect and cleanup the
5952 * buildbot/test/test_run.py (Status.tearDown): update test to
5953 handle asynchronous build-detachment
5955 * buildbot/process/base.py (Build.stopBuild): minor shuffles
5957 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
5958 hush a debug message
5960 2004-09-05 Brian Warner <warner@lothar.com>
5962 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
5963 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
5964 kernels do this: the fcntl module has the F_NOTIFY constant, but
5965 the kernel itself doesn't support the operation. Thanks to Olly
5966 Betts for spotting the problem.
5968 * buildbot/process/step.py (Darcs): new source-checkout command
5969 (Arch): new source-checkout command
5970 (todo_P4): fix constructor syntax, still just a placeholder
5971 * buildbot/test/test_vc.py (VC.testDarcs): test it
5972 (VC.testDarcsHTTP): same, via localhost HTTP
5974 (VC.testArchHTTP): same
5975 * NEWS: mention new features
5977 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
5978 which tells the step to stash stdout text locally (in .stdout).
5979 Slave-side Commands can use this to make decisions based upon the
5980 output of the the ShellCommand (not just the exit code).
5981 (Darcs): New source-checkout command
5982 (Arch): New source-checkout command, uses .keepStdout in one place
5983 where it needs to discover the archive's default name.
5985 * docs/steps.xhtml: Document options taken by Darcs and Arch.
5986 * docs/source.xhtml: add brief descriptions of Darcs and Arch
5987 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
5989 * buildbot/process/step.py (ShellCommand.describe): add an
5990 alternate .descriptionDone attribute which provides descriptive
5991 text when the step is complete. .description can be ["compiling"],
5992 for use while the step is running, then .descriptionDone can be
5993 ["compile"], used alone when the step succeeds or with "failed" when
5994 it does not. Updated other steps to use the new text.
5995 * buildbot/process/step_twisted.py: same
5996 * buildbot/test/test_run.py: update tests to match
5998 2004-08-30 Brian Warner <warner@lothar.com>
6000 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
6001 (CVS.__init__): send 'patch' argument to slave
6002 (CVS.start): don't create the LoggedRemoteCommand until start(),
6003 so we can catch a .patch added after __init__
6004 (SVN.__init__): add 'patch' to SVN too
6007 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
6008 argument, to let commands push data into the process' stdin pipe.
6009 Move usePTY to a per-instance attribute, and clear it if 'stdin'
6010 is in use, since closing a PTY doesn't really affect the process
6011 in the right way (in particular, I couldn't run /usr/bin/patch
6013 (SourceBase.doPatch): handle 'patch' argument
6015 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
6018 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
6019 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
6021 * buildbot/master.py (BotPerspective.got_commands): get command
6022 versions from slave, give to each builder
6023 * buildbot/process/builder.py (Builder.attached): stash slave
6024 command versions in .remoteCommands
6026 * docs/steps.xhtml: bring docs in-line with reality
6028 * buildbot/process/step.py (CVS.__init__): more brutal
6029 compatibility code removal
6030 (SVN.__init__): same
6032 * buildbot/slave/commands.py (SlaveShellCommand): update docs
6033 (SlaveShellCommand.start): require ['workdir'] argument, remove
6034 the ['dir'] fallback (compatibility will come later)
6035 (SourceBase): update docs
6036 (SourceBase.start): remove ['directory'] fallback
6039 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
6040 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6041 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
6043 * buildbot/process/step.py (RemoteShellCommand.__init__): add
6044 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
6045 code.. I will figure out 0.5.0-compatibility hooks later)
6047 2004-08-30 Brian Warner <warner@lothar.com>
6049 * buildbot/process/process_twisted.py: rewrite in terms of new
6050 BuildFactory base class. It got significantly shorter. Yay
6053 * buildbot/process/step_twisted.py (HLint.start): fix to make it
6054 work with the new "self.build isn't nailed down until we call
6055 step.start()" scheme: specifically, __init__ is called before the
6056 build has decided on which Changes are going in, so we don't scan
6057 build.allFiles() for .xhtml files until start()
6058 (HLint.commandComplete): use getText(), not getStdout()
6059 (RunUnitTests.start): same: don't use .build until start()
6060 (RunUnitTests.describe): oops, don't report (None) when using
6062 (RunUnitTests.commandComplete): use getText()
6063 (RunUnitTests.createSummary): same
6064 (BuildDebs.commandComplete): same
6066 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
6067 set args['command'] until start(), since our BuildStep is allowed
6068 to change their mind up until that point
6069 (TreeSize.commandComplete): use getText(), not getStdout()
6071 * docs/examples/twisted_master.cfg: update to current standards
6073 * docs/factories.xhtml: update
6074 * buildbot/process/factory.py: implement all the common factories
6075 described in the docs. The Trial factory doesn't work yet, and
6076 I've probably broken all the process_twisted.py factories in the
6077 process. There are compatibility classes left in for things like
6078 the old BasicBuildFactory, but subclasses of them are unlikely to
6080 * docs/examples/glib_master.cfg: use new BuildFactories
6081 * docs/examples/hello.cfg: same
6083 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
6084 explicit 'workdir' args
6086 * buildbot/process/base.py (BuildFactory): move factories to ..
6087 * buildbot/process/factory.py (BuildFactory): .. here
6088 * buildbot/process/process_twisted.py: handle move
6089 * buildbot/test/test_config.py: same
6090 * buildbot/test/test_run.py: same
6091 * buildbot/test/test_steps.py: same
6092 * buildbot/test/test_vc.py: same
6093 * docs/factories.xhtml: same
6095 * NEWS: mention config changes that require updating master.cfg
6097 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
6098 argument to all steps that weren't given one already, pointing at
6099 the "build/" directory.
6101 * docs/examples/hello.cfg: remove explicit 'workdir' args
6103 * docs/factories.xhtml: document standard BuildFactory clases,
6104 including a bunch which are have not yet been written
6106 2004-08-29 Brian Warner <warner@lothar.com>
6108 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
6109 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
6110 buildbot.status.builder so they aren't quite so internal
6111 * buildbot/process/base.py, buildbot/process/builder.py: same
6112 * buildbot/process/maxq.py, buildbot/process/step.py: same
6113 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
6114 * buildbot/status/mail.py, buildbot/test/test_run.py: same
6115 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
6117 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
6118 to handle new getLogs()-returns-list behavior
6119 (StatusResourceBuildStep.getChild): same
6120 (StepBox.getBox): same
6121 (WaterfallStatusResource.phase0): same
6123 * docs/source.xhtml: document how Buildbot uses version-control
6124 systems (output side: how we get source trees)
6125 * docs/changes.xhtml: rename from sources.xhtml, documents VC
6126 systems (input side: how we learn about Changes)
6128 * buildbot/master.py (Manhole): use ComparableMixin
6129 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
6130 * buildbot/changes/mail.py (MaildirSource): same
6131 * buildbot/status/client.py (PBListener): same
6132 * buildbot/status/html.py (Waterfall): same
6133 * buildbot/status/words.py (IRC): same
6135 * NEWS: start describing new features
6137 * buildbot/status/mail.py (MailNotifier): finish implementation.
6138 The message body is still a bit sparse.
6139 * buildbot/test/test_status.py (Mail): test it
6141 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
6142 and __hash__ methods I wind up adding everywhere. Specifically
6143 intended to support the buildbot config-file update scheme where
6144 we compare, say, the old list of IStatusTargets against the new
6145 one and don't touch something which shows up on both lists.
6146 * buildbot/test/test_util.py (Compare): test case for it
6148 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
6149 return a list instead of a dict
6150 (IBuildStepStatus.getLogs): same. The idea is that steps create
6151 logs with vaguely unique names (although their uniqueness is not
6152 guaranteed). Thus a compilation step should create its sole
6153 logfile with the name 'compile', and contribute it to the
6154 BuildStatus. If a step has two logfiles, try to create them with
6155 different names (like 'test.log' and 'test.summary'), and only
6156 contribute the important ones to the overall BuildStatus.
6157 * buildbot/status/builder.py (Event.getLogs): same
6158 (BuildStepStatus): fix default .text and .results
6159 (BuildStepStatus.addLog): switch to list-like .getLogs()
6160 (BuildStepStatus.stepFinished): same
6161 (BuildStatus.text): fix default .text
6162 (BuildStatus.getLogs): temporary hack to return all logs (from all
6163 child BuildStepStatus objects). Needs to be fixed to only report
6164 the significant ones (as contributed by the steps themselves)
6165 * buildbot/test/test_run.py: handle list-like .getLogs()
6166 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6168 2004-08-28 Brian Warner <warner@lothar.com>
6170 * buildbot/process/builder.py (Builder.attached): serialize the
6171 attachment process, so the attach-watcher isn't called until the
6172 slave is really available. Add detached watchers too, which makes
6175 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
6177 * buildbot/test/test_swap.py: remove dead code
6179 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
6180 (ShellCommand.start): treat errors in _startCommand/spawnProcess
6181 sort of as if the command being run exited with a -1. There may
6182 still be some holes in this scheme.
6183 (CVSCommand): add 'revision' tag to the VC commands, make sure the
6184 -r option appears before the module list
6185 * buildbot/process/step.py (CVS): add 'revision' argument
6187 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
6188 when sending updates or stepComplete messages to the master, since
6189 we don't currently care whether they arrive or not. When we revamp
6190 the master/slave protocol to really resume interrupted builds,
6191 this will need revisiting.
6192 (lostRemote): remove spurious print
6194 * buildbot/master.py (BotPerspective.attached): serialize the
6195 new-builder interrogation process, to make testing easier
6196 (BotMaster.waitUntilBuilderDetached): convenience function
6198 * buildbot/status/builder.py (BuilderStatus): prune old builds
6199 (BuildStatus.pruneSteps): .. and steps
6200 (BuildStepStatus.pruneLogs): .. and logs
6201 (BuilderStatus.getBuild): handle missing builds
6202 * buildbot/status/html.py (StatusResourceBuild.body): display build
6203 status in the per-build page
6204 (BuildBox.getBox): color finished builds in the per-build box
6206 2004-08-27 Brian Warner <warner@lothar.com>
6208 * buildbot/status/mail.py (MailNotifier): new notification class,
6211 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
6212 variants of a common base class which handles all the mode= logic
6214 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
6216 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
6218 2004-08-26 Brian Warner <warner@lothar.com>
6220 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
6223 * buildbot/test/test_run.py: update to new Logfile interface, new
6224 buildbot.slave modules
6225 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
6227 * MANIFEST.in: new sample config file
6228 * docs/examples/hello.cfg: same
6230 * buildbot/process/step_twisted.py: remove dead import
6232 * buildbot/process/step.py (RemoteCommand.run): catch errors
6234 (RemoteCommand.remote_update): ignore updates that arrive after
6236 (RemoteCommand.remote_complete): ignore duplicate complete msgs
6237 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
6238 the responsibilities of the subclass's methods
6239 (BuildStep.failed): catch errors during failure processing
6240 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
6241 (CVS): move to a mode= argument (described in docstring), rather
6242 than the ungainly clobber=/export=/copydir= combination.
6243 (SVN): add mode= functionality to SVN too
6244 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
6246 * buildbot/process/base.py (Build.startNextStep): catch errors
6247 during s.startStep()
6249 * buildbot/clients/base.py: update to new PB client interface.
6250 gtkPanes is still broken
6252 * buildbot/bot.py, buildbot/slavecommand.py: move to..
6253 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
6254 * setup.py: add buildbot.slave module
6255 * buildbot/bb_tap.py: handle move
6256 * buildbot/slave/registry.py: place to register commands, w/versions
6257 * buildbot/slave/bot.py: major simplifications
6258 (SlaveBuilder.remote_startCommand): use registry for slave commands,
6259 instead of a fixed table. Eventually this will make the slave more
6260 extensible. Use 'start' method on the command, not .startCommand.
6261 Fix unsafeTracebacks handling (I think).
6262 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
6263 helper class with a .start method that returns a Deferred.
6264 SlaveShellCommand is the form reached by the buildmaster. Commands
6265 which use multiple ShellCommands can just chain them as Deferreds,
6266 with some helper methods in Command (_abandonOnFailure and
6267 _checkAbandoned) to bail on rc!=0.
6268 (CVSCommand): prefer new mode= argument
6269 (SVNFetch): add mode= argument
6271 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
6272 put a useful reason string on the build
6274 * buildbot/status/builder.py (LogFile): do LogFile right: move the
6275 core functionality into an IStatusLog object
6276 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
6277 * buildbot/status/html.py (TextLog): HTML-rendering goes here
6278 (StatusResourceBuild.body): use proper accessor methods
6279 * buildbot/status/client.py (RemoteLog): PB-access goes here
6280 (StatusClientPerspective.perspective_subscribe): add "full" mode,
6281 which delivers log contents too
6282 (PBListener.__cmp__): make PBListeners comparable, thus removeable
6283 * buildbot/status/event.py: remove old Logfile completely
6285 * buildbot/interfaces.py (IStatusLog.subscribe): make the
6286 subscription interface for IStatusLog subscriptions just like all
6287 other the status subscriptions
6288 (IStatusReceiver.logChunk): method called on subscribers
6290 2004-08-24 Brian Warner <warner@lothar.com>
6292 * buildbot/process/builder.py (Builder._pong): oops, ping response
6293 includes a result (the implicit None returned by remote_print).
6294 Accept it so the _pong method handles the response correctly.
6296 2004-08-06 Brian Warner <warner@lothar.com>
6298 * buildbot/test/test_config.py: update IRC, PBListener tests
6300 * buildbot/status/client.py (StatusClientPerspective): total
6301 rewrite to match new IStatus interfaces. New subscription scheme.
6302 There are still a few optimizations to make (sending down extra
6303 information with event messages so the client doesn't have to do a
6304 round trip). The logfile-retrieval code is probably still broken.
6305 Moved the PB service into its own port, you can no longer share a
6306 TCP socket between a PBListener and, say, the slaveport (this
6307 should be fixed eventually).
6308 * buildbot/clients/base.py (Client): revamp to match. still needs
6309 a lot of work, but basic event reporting works fine. gtkPanes is
6312 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
6313 instance talks to a single irc server. Threw out all the old
6314 multi-server handling code. Still need to add back in
6315 builder-control (i.e. "force build")
6317 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
6318 more random text to the as-yet-unreachable per-step page
6320 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
6321 rename to stepETAUpdate
6322 (BuildStatus.subscribe): add build-wide ETA updates
6323 (BuilderStatus.getState): remove more cruft
6324 (BuilderStatus.getCurrentBuild): remove more cruft
6325 (BuilderStatus.buildStarted): really handle tuple-subscription
6326 * buildbot/test/test_run.py (Status.testSlave): handle the
6327 stepETAUpdate rename
6329 * buildbot/master.py (BuildMaster): don't add a default
6330 StatusClientService. Don't add a default IrcStatusFactory. Both
6331 are now added through c['status'] in the config file. c['irc'] is
6332 accepted for backwards compatibility, the only quirk is you cannot
6333 use c['irc'] to specify IRC servers on ports other than 6667.
6335 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
6336 (IStatusReceiver.buildStarted): allow update-interval on subscribe
6337 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
6338 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
6341 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
6342 the buildmaster to re-read its config file
6345 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
6346 find out the port our server is running on
6347 (WebTest.test_webPathname_port): same
6349 * buildbot/test/test_config.py (testWebPortnum): test it
6350 (testWebPathname): ditto
6352 * docs/config.xhtml: document new c['status'] configuration option
6354 * buildbot/status/html.py (Waterfall): new top-level class which
6355 can be added to c['status']. This creates the Site as well as the
6356 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
6357 reachable as .parent, for everything.
6359 * buildbot/master.py (Manhole): make it a normal service Child
6360 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
6361 webPathname. It will eventually replace c['irc'] and the implicit
6362 PB listener as well. c['webPortnum'] and c['webPathname'] are left
6363 in as (deprecated) backward compatibility hooks for now.
6366 * buildbot/process/builder.py (Builder.buildFinished): don't
6367 inform out builder_status about a finished build, as it finds out
6368 through its child BuildStatus object
6370 * buildbot/status/html.py: extensive revamp. Use adapters to make
6371 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
6372 have both starting and finishing times and adjust the waterfall
6373 display accordingly, using spacers if necessary. Use SlaveStatus
6374 to get buildslave info.
6375 (StatusResourceBuildStep): new just-one-step resource, used to get
6376 logfiles. No actual href to it yet.
6378 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
6379 the time being, until I get the file-naming scheme right
6381 * buildbot/status/builder.py (Event): clean started/finished names
6382 (BuildStatus.isFinished): .finished is not None is the right test
6383 (BuildStatus.buildStarted): track started/finished times ourselves
6384 (BuilderStatus.getSlave): provide access to SlaveStatus object
6385 (BuilderStatus.getLastFinishedBuild): all builds are now in
6386 .builds, even the currently-running one. Accomodate this change.
6387 (BuilderStatus.eventGenerator): new per-builder event generator.
6388 Returns BuildStepStatus and BuildStatus objects, since they can
6389 both be adapted as necessary.
6390 (BuilderStatus.addEvent): clean up started/finished attributes
6391 (BuilderStatus.startBuild,finishBuild): remove dead code
6392 (SlaveStatus): new object to provide ISlaveStatus
6394 * buildbot/process/step.py (ShellCommand.getColor): actually
6395 return the color instead of setting it ourselves
6396 (CVS.__init__): pull .timeout and .workdir options out of
6397 **kwargs, since BuildStep will ignore them. Without this neither
6398 will be sent to the slave correctly.
6399 (SVN.__init__): same
6401 * buildbot/process/builder.py (Builder): move flags to class-level
6403 (Builder.attached): remove .remoteInfo, let the BotPerspective and
6404 SlaveStatus handle that
6406 * buildbot/process/base.py (Build.firstEvent): remove dead code
6407 (Build.stopBuild): bugfix
6409 * buildbot/changes/pb.py (PBChangeSource.describe): add method
6411 * buildbot/changes/changes.py (Change): add IStatusEvent methods
6412 (ChangeMaster.eventGenerator): yield Changes, since there are now
6413 Adapters to turn them into HTML boxes
6415 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
6416 (BotPerspective.attached): feed a SlaveStatus object
6417 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
6418 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
6420 * buildbot/interfaces.py: API additions
6421 (ISlaveStatus): place to get slave status
6423 2004-08-04 Brian Warner <warner@lothar.com>
6425 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
6426 the delay finishes, so the step is marked as SUCCESS
6428 * buildbot/test/test_run.py (Status.testSlave): cover more of
6429 IBuildStatus and IBuildStepStatus
6431 * buildbot/status/progress.py (StepProgress): move some flags to
6432 class-level attributes
6433 (StepProgress.remaining): if there are no other progress metrics
6434 to go by, fall back to elapsed time
6435 (StepProgress.setExpectations): take a dict of metrics instead of
6437 (BuildProgress.setExpectationsFrom): pull expectations from the
6438 Expectations, instead of having it push them to the BuildProgress
6439 (Expectations): move some flags to class-level attributes
6440 (Expectations.__init__): copy per-step times from the
6442 (Expectations.expectedBuildTime): new method for per-build ETA
6444 * buildbot/status/event.py (Logfile): move some flags to
6445 class-level attributes
6446 (Logfile.logProgressTo): better method name, let step set the
6447 progress axis name (instead of always being "output")
6449 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
6450 times directly, rather than depending upon the (possibly missing)
6451 .progress object. Use 'None' to indicate "not started/finished
6453 (BuildStepStatus.getExpectations): oops, return the full list of
6455 (BuilderStatus._buildFinished): append finished builds to .builds
6457 * buildbot/process/step.py (BuildStep): add separate .useProgress
6458 flag, since empty .progressMetrics[] still implies that time is a
6460 (CVS): set up the cmd in __init__, instead of waiting for start()
6462 * buildbot/process/base.py (Build.startBuild): disable the 'when'
6463 calculation, this will eventually turn into a proper sourceStamp
6464 (Build.setupBuild): tell the Progress to load from the Expectations,
6465 instead of having the Expectations stuff things into the Progress
6466 (Build.buildException): add a build-level errback to make sure the
6467 build's Deferred fires even in case of exceptions
6469 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
6471 * buildbot/process/builder.py (Builder.forceBuild): convey the
6472 reason instead of creating a fake Change
6474 * docs/examples/twisted_master.cfg: update to match reality
6476 * buildbot/test/test_config.py, buildbot/test/test_process.py:
6477 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
6478 fix or remove broken/breaking tests
6480 * buildbot/status/event.py (Logfile.__len__): remove evil method
6482 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
6483 missing .build, for test convenience
6485 * buildbot/process/step_twisted.py: import fixes
6487 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
6489 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
6490 .statusbag reference
6492 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
6493 connection at shutdown, and stop it from reconnecting
6495 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
6496 chase down remote-execution bugs
6498 * buildbot/process/step.py: more fixes, remove
6499 BuildStep.setStatus()
6500 * buildbot/status/builder.py: move setStatus() functionality into
6502 * buildbot/status/event.py: minor fixes
6504 2004-08-03 Brian Warner <warner@lothar.com>
6506 * buildbot/process/base.py, buildbot/process/builder.py
6507 * buildbot/process/step.py, buildbot/status/builder.py
6508 * buildbot/status/event.py, buildbot/test/test_run.py:
6509 fix status delivery, get a basic test case working
6510 * buildbot/master.py: finish implementing basic status delivery,
6511 temporarily disable HTML/IRC/PB status sources
6513 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
6515 * buildbot/status/progress.py (BuildProgress): remove dead code
6517 * buildbot/interfaces.py
6518 * buildbot/process/base.py, buildbot/process/builder.py
6519 * buildbot/process/step.py, buildbot/process/step_twisted.py
6520 * buildbot/status/builder.py: Complete overhaul of the all
6521 status-delivery code, unifying all types of status clients (HTML,
6522 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
6523 look like. This commit is a checkpointing of the work-in-progress:
6524 the input side is mostly done (Builders/Builds sending status
6525 to the BuilderStatus/BuildStatus objects), but the output side has
6526 not yet been started (HTML resources querying BuilderStatus
6527 objects). Things are probably very broken right now and may remain
6528 so for several weeks, I apologize for the disruption.
6530 * buildbot/status/event.py: add a setHTML method to use pre-rendered
6531 HTML as the log's contents. Currently used for exception tracebacks.
6532 * buildbot/status/progress.py: minor spelling changes
6534 2004-08-02 Brian Warner <warner@lothar.com>
6536 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
6537 in mozilla. Also added stylesheets copied from Twisted's docs.
6538 Remember that these files are meant to be run through Lore first.
6539 Thanks to Philipp Frauenfelder for the fixes.
6540 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
6541 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
6542 * docs/template.tpl: added a Lore template
6544 2004-07-29 Brian Warner <warner@lothar.com>
6546 * buildbot/interfaces.py: revamp status delivery. This is the
6547 preview: these are the Interfaces that will be provided by new
6548 Builder code, and to which the current HTML/IRC/PB status
6549 displayers will be adapted.
6551 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
6552 on the SlaveBuilder, not the Bot.
6553 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
6555 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
6556 set .usePTY on the FakeSlaveBuilder
6558 2004-07-25 Brian Warner <warner@lothar.com>
6560 * buildbot/changes/freshcvs.py: add some debug log messages
6561 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
6562 disabled 'setFilter' syntax
6563 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
6564 don't end with a slash
6566 * buildbot/process/base.py (Builder._pong_failed): add TODO note
6568 * setup.py: bump to 0.5.0+ while between releases
6570 2004-07-23 Brian Warner <warner@lothar.com>
6572 * setup.py (version): Releasing buildbot-0.5.0
6574 2004-07-23 Brian Warner <warner@lothar.com>
6576 * README: update for 0.5.0 release
6578 * NEWS: update for 0.5.0 release
6580 2004-07-22 Brian Warner <warner@lothar.com>
6582 * buildbot/slavecommand.py (ShellCommand): make usePTY a
6583 mktap-time configuration flag (--usepty=1, --usepty=0)
6584 * buildbot/bot.py: same
6586 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
6587 an 'info' directory being unwanted
6589 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
6590 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
6591 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
6592 and earlier), use a FreshCVSSourceOldcred instead.
6593 (test): simple test routine: connect to server, print changes
6595 * buildbot/changes/changes.py (Change.getTime): make it possible
6596 to print un-timestamped changes
6598 * buildbot/master.py (makeApp): delete ancient dead code
6599 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
6600 * buildbot/test/test_config.py (testFindConfigFile): test it
6602 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
6603 instead of win32 one
6606 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
6607 now takes a dictionary instead of a tuple. See docs/config.xhtml for
6610 * buildbot/process/base.py (Builder.__init__): change constructor
6611 to accept a dictionary of config data, rather than discrete
6612 name/slave/builddir/factory arguments
6614 * docs/examples/twisted_master.cfg: update to new syntax
6615 * docs/examples/glib_master.cfg: same
6616 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
6617 rough tests of the new syntax
6620 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
6621 to be an int, which means "run a web.distrib sub-server on a TCP
6622 port". This lets you publish the buildbot status page to a remote
6623 twisted.web server (using distrib.ResourceSubscription). Also
6624 rename the local attributes used to hold these web things so
6625 they're more in touch with reality.
6626 * buildbot/test/test_web.py: test webPortnum and webPathname
6627 * docs/config.xhtml: document this new use of webPathname
6629 * docs/config.xhtml: new document, slightly ahead of reality
6631 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
6632 'prefix' handling: treat it as a simple string to check with
6633 .startswith, instead of treating it as a directory. This allows
6634 sub-directories to be used. If you use prefix=, you should give it
6635 a string that starts just below the CVSROOT and ends with a slash.
6636 This prefix will be stripped from all filenames, and filenames
6637 which do not start with it will be ignored.
6639 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
6641 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
6642 and --exclude (inverse of --include). SVN post-commit hooks
6643 now have total control over which changes get sent to buildbot and which
6646 2004-07-10 Brian Warner <warner@lothar.com>
6648 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
6649 test case to match new API
6651 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
6652 which crashed HTML display when self.entries=[] (needed to
6653 distinguish between [], which means "no entries yet", and None,
6654 which means "the entries have been swapped out to disk, go fetch
6657 2004-07-04 Brian Warner <warner@lothar.com>
6659 * buildbot/process/step_twisted.py (countFailedTests): Count
6660 skips, expectedFailures, and unexpectedSuccesses. Start scanning
6661 10kb from the end because any import errors are wedged there and
6662 they would make us think the test log was unparseable.
6663 (RunUnitTests.finishStatus): add skip/todo counts to the event box
6665 2004-06-26 Brian Warner <warner@lothar.com>
6667 * buildbot/process/step_twisted.py (RemovePYCs): turn the
6668 delete-*.pyc command into an actual BuildStep, so we can label it
6670 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6671 (FullTwistedBuildFactory): same
6673 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
6675 * contrib/fakechange.py: Add an errback when sending the fake
6676 change, so we know it didn't work.
6678 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
6680 * buildbot/process/step_twisted.py: Delete *.pyc files before
6681 calling trial, so it doesn't catch any old .pyc files whose .py
6682 files have been moved or deleted.
6684 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
6685 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
6686 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
6687 instead of ["twisted.test"], so that the end result is "trial -R
6690 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
6691 regular expression to match filenames that should be ignored when
6692 changed. Also add a --revision parameter that specifies the
6693 revision to examine, which is useful for debugging.
6695 2004-06-25 Brian Warner <warner@lothar.com>
6697 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
6698 summary of warnings (like DeprecationWarnings), next to the
6701 2004-05-13 Brian Warner <warner@lothar.com>
6703 * docs/examples/twisted_master.cfg: enable the win32 builder, as
6704 we now have a w32 build slave courtesy of Mike Taylor.
6706 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
6707 so broken. Fixed a race condition that tripped up interlocked
6708 builds and caused the status to be stuck at "Interlocked" forever.
6709 The twisted buildbot's one interlocked build just so happened to
6710 never hit this case until recently (the feeding builds both pass
6711 before the interlocked build is attempted.. usually it has to wait
6713 (Builder._pong_failed): fix method signature
6715 * setup.py: bump to 0.4.3+ while between releases
6717 2004-04-30 Brian Warner <warner@lothar.com>
6719 * setup.py (version): Releasing buildbot-0.4.3
6721 2004-04-30 Brian Warner <warner@lothar.com>
6723 * MANIFEST.in: add the doc fragments in docs/*.xhtml
6725 * README: update for 0.4.3 release
6727 * NEWS: update for 0.4.3 release
6729 * buildbot/master.py (BuildMaster.__getstate__): make sure
6730 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
6732 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
6733 .trial as a class attribute, for upgrade from 0.4.2
6735 * buildbot/changes/changes.py (Change.links): add .links for
6738 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
6739 .textWatchers and .htmlWatchers at save time, since they are both
6740 volatile, should allow smooth 0.4.2 upgrade
6742 * buildbot/process/step.py (CVS.finishStatus): catch failed
6743 CVS/SVN commands so we can make the status box red
6745 2004-04-29 Brian Warner <warner@lothar.com>
6747 * buildbot/changes/freshcvs.py
6748 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
6749 code to do setFilter(), which tells the freshcvs daemon to not
6750 send us stuff that we're not interested in. I will uncomment it
6751 when a new version of CVSToys is available in which setFilter()
6752 actually works, and I get a chance to test it better.
6754 * docs/examples/twisted_master.cfg: start using a PBChangeSource
6756 * buildbot/master.py (Dispatcher): use a registration scheme
6757 instead of hardwired service names
6758 (BuildMaster): keep track of the Dispatcher to support
6761 * buildbot/changes/changes.py (ChangeMaster): create a distinct
6762 PBChangeSource class instead of having it be an undocumented
6763 internal feature of the ChangeMaster. Split out the code into a
6765 * buildbot/changes/pb.py (PBChangeSource): same
6766 * buildbot/test/test_changes.py: a few tests for PBChangeSource
6768 * docs/{factories|sources|steps}.xhtml: document some pieces
6770 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
6771 using FCMaildirSource
6772 (f23osx): update OS-X builder to use python2.3, since the slave
6773 was updated to Panther (10.3.3)
6775 2004-03-21 Brian Warner <warner@lothar.com>
6777 * buildbot/process/process_twisted.py: factor out doCheckout, change
6778 to use SVN instead of CVS
6780 * buildbot/process/base.py (BasicBuildFactory): refactor to make
6781 an SVN subclass easier
6782 (BasicSVN): subclass which uses Subversion instead of CVS
6784 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
6786 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
6788 (CVSCommand.cvsComplete): don't assume chdir worked on win32
6790 2004-02-25 Brian Warner <warner@lothar.com>
6792 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
6793 is now either a list (which is passed to spawnProcess directly) or
6794 a string (which gets passed to /bin/sh -c). This removes the useSH
6795 flag and the ArgslistCommand class. Also send status header at the
6796 start and end of each command, instead of having the master-side
6798 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
6799 -r'. Update to use list-based arguments.
6800 (SVNFetch): use list-based arguments, use ['dir'] argument to
6802 * buildbot/test/test_steps.py (Commands): match changes
6804 * buildbot/process/step.py (InternalShellCommand.words): handle
6806 (SVN): inherit from CVS, cleanup
6808 * buildbot/status/event.py (Logfile.content): render in HTML, with
6809 stderr in red and headers (like the name of the command we're
6810 about to run) in blue. Add link to a second URL (url + "?text=1")
6811 to get just stdout/stderr in text/plain without markup. There is
6812 still a problem with .entries=None causing a crash, it seems to occur
6813 when the logfile is read before it is finished.
6815 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
6816 timeout to the keepalives, and use it to explicitly do a
6817 loseConnection instead of waiting for TCP to notice the loss. This
6818 ought to clear up the silent-lossage problem.
6819 (unsafeTracebacks): pass exception tracebacks back to the master,
6820 makes it much easier to debug problems
6822 2004-02-23 Brian Warner <warner@lothar.com>
6824 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
6825 the whole command to /bin/sh instead of execve [Johan Dahlin]
6826 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
6827 '-r HEAD' [Johan Dahlin]
6828 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
6830 * buildbot/changes/changes.py (Change): add links= argument, add
6831 asHTML method [Johan Dahlin]. Modified to make a bit more
6832 XHTMLish. Still not sure how to best use links= .
6834 * buildbot/status/html.py (StatusResourceCommits.getChild): use
6835 Change.asHTML to display the change, not asText
6837 * buildbot/status/html.py (StatusResourceBuilder): web button to
6840 * buildbot/test/test_run.py: test to actually start a buildmaster
6843 * MANIFEST.in: bring back accidentally-dropped test helper files
6845 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
6846 that require cvstoys if it is not installed
6848 * buildbot/process/step_twisted.py (RunUnitTests): allow other
6849 values of "bin/trial" [Dave Peticolas]
6850 (RunUnitTests.finishStatus): say "no tests run" instead of "0
6851 tests passed" when we didn't happen to run any tests
6853 * buildbot/process/step.py (Compile): use haltOnFailure instead of
6854 flunkOnFailure [Johan Dahlin]
6856 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
6857 multiple instances of the same Step class by suffixing "_2", etc,
6858 to the name until it is unique. This name needs to be unique
6859 because it is used as a key in the dictionary that tracks build
6861 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
6864 * buildbot/process/base.py (Builder.ping): add "ping slave" command
6866 2004-01-14 Brian Warner <warner@lothar.com>
6868 * buildbot/status/words.py (IrcStatusBot): when we leave or get
6869 kicked from a channel, log it
6871 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
6872 something over whatever IRC channels the buildmaster is currently
6873 connected to. Added to try and track down a problem in which the
6874 master thinks it is still connected but the IRCd doesn't see it. I
6875 used a styles.Versioned this time, so hopefully users won't have
6876 to rebuild their .tap files this time.
6877 * contrib/debug.glade: add a "Poke IRC" button
6878 * contrib/debugclient.py: same
6880 * setup.py: bump to 0.4.2+ while between releases
6882 2004-01-08 Brian Warner <warner@lothar.com>
6884 * setup.py (version): Releasing buildbot-0.4.2
6886 2004-01-08 Brian Warner <warner@lothar.com>
6888 * NEWS: update for 0.4.2 release
6890 * README: document how to run the tests, now that they all pass
6892 * buildbot/changes/maildir.py (Maildir.poll): minor comment
6894 * buildbot/process/step.py (CVS): add a global_options= argument,
6895 which lets you set CVS global options for the command like "-r"
6896 for read-only checkout, or "-R" to avoid writing in the
6898 * buildbot/slavecommand.py (CVSCommand): same
6900 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
6901 testing easier (it is turned off when testing, to avoid the
6904 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
6905 to make it easier to test: break generateStepID() out to a
6906 separate function, only update statusbag if it exists.
6907 (ShellCommands): create useful text for dict-based commands too.
6909 * test/*, buildbot/test/*: move unit tests under the buildbot/
6911 * setup.py (packages): install buildbot.test too
6913 * buildbot/test/test_slavecommand.py: fix it, tests pass now
6914 * buildbot/test/test_steps.py: fix it, tests pass now
6916 2004-01-06 Brian Warner <warner@lothar.com>
6918 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
6919 freshcvs mail uses a slightly different syntax for new
6920 directories. Update parser to handle either.
6921 * test/test_mailparse.py (Test1.testMsg9): test for same
6923 2003-12-21 Brian Warner <warner@lothar.com>
6925 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
6926 'warnOnWarnings' so that lintian errors mark the build orange
6928 2003-12-17 Brian Warner <warner@lothar.com>
6930 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
6931 messages emitted by Bonsai, contributed by Stephen Davis.
6933 * test/*: moved all tests to use trial instead of unittest. Some
6934 still fail (test_steps, test_slavecommand, and test_process).
6936 * setup.py (version): bump to 0.4.1+ while between releases
6938 2003-12-09 Brian Warner <warner@lothar.com>
6940 * setup.py (version): Releasing buildbot-0.4.1
6942 2003-12-09 Brian Warner <warner@lothar.com>
6944 * NEWS: update for 0.4.1 release
6946 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
6947 freebsd builder code a little bit
6949 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
6950 don't try to compare attributes of different classes
6951 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6952 (MaildirSource.messageReceived): fix Change delivery
6954 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
6955 into the config file's namespace before loading it, like the
6956 documentation claims it does
6957 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
6958 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
6959 daemon comes back online
6961 2003-12-08 Brian Warner <warner@lothar.com>
6963 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
6964 so the example will work with online=0 as well
6966 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
6967 fix the __implements__ line
6969 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
6970 class a twisted.application.service.Service, use startService to
6973 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
6974 directory fd instead of simple open(). I'm sure this used to work,
6975 but the current version of python refuses to open directories with
6978 2003-12-05 Brian Warner <warner@lothar.com>
6980 * setup.py (version): bump to 0.4.0+ while between releases
6982 2003-12-05 Brian Warner <warner@lothar.com>
6984 * setup.py (version): Releasing buildbot-0.4.0
6986 2003-12-05 Brian Warner <warner@lothar.com>
6988 * docs/examples/glib_master.cfg: replace old sample scripts with
6989 new-style config files
6990 * MANIFEST.in: include .cfg files in distribution tarball
6992 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
6993 implement a dummy method to avoid the exception that occurs when
6994 freshcvs sends this to us.
6996 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
6997 removed the method, as it broke reconnection. Apparently
6998 stopFactory is called each time the connection attempt fails. Must
7000 (ReconnectingPBClientFactory.__getstate__): squash the _callID
7001 attribute before serialization, since without stopFactory the
7002 reconnect timer may still be active and they aren't serializable.
7004 * test/test_mailparse.py (ParseTest): test with 'self' argument
7006 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
7007 argument, as these "functions" are invoked like methods from class
7008 attributes and therefore always get an instance as the first
7011 * buildbot/changes/maildir.py (Maildir.start): fix error in error
7012 message: thanks to Stephen Davis for the catch
7014 2003-12-04 Brian Warner <warner@lothar.com>
7016 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
7017 twisted's standard ReconnectingClientFactory. Handles both oldcred
7018 and newcred connections. Also has a bug-workaround for
7019 ReconnectingClientFactory serializing its connector when it
7022 * buildbot/bot.py (BotFactory): rewrite connection layer with new
7023 pbutil. Replace makeApp stuff with proper newcred/mktap
7024 makeService(). Don't serialize Ephemerals on shutdown.
7026 * buildbot/changes/changes.py (ChangeMaster): make it a
7027 MultiService and add the sources as children, to get startService
7028 and stopService for free. This also gets rid of the .running flag.
7030 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
7031 new pbutil, turn into a TCPClient at the same time (to get
7032 startService for free). Two variants exist: FreshCVSSourceOldcred
7033 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
7034 yet, but when it does, we'll be ready).
7035 (FreshCVSSource.notify): handle paths which are empty after the
7036 prefix is stripped. This only happens when the top-level (prefix)
7037 directory is added, at the very beginning of a Repository's life.
7039 * buildbot/clients/base.py: use new pbutil, clean up startup code.
7040 Now the only reconnecting code is in the factory where it belongs.
7041 (Builder.unsubscribe): unregister the disconnect callback when we
7042 delete the builder on command from the master (i.e. when the
7043 buildmaster is reconfigured and that builder goes away). This
7044 fixes a multiple-delete exception when the status client is shut
7046 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
7049 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
7050 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
7052 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
7054 * contrib/run_maxq.py: Accept a testdir as an argument rather than
7055 a list of globs (ugh). The testdir will be searched for files
7056 named *.tests and run the tests in the order specified in each of
7057 those files. This allows for "dependancies" between tests to be
7060 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
7061 argument to pass to run_maxq.py, instead of a glob.
7063 2003-10-17 Brian Warner <warner@lothar.com>
7065 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
7066 files that live in the sandbox
7068 2003-10-15 Brian Warner <warner@lothar.com>
7070 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
7071 spelling error in "docs" count-warnings output
7072 (HLint.start): stupid thinko meant .xhtml files were ignored
7074 * docs/examples/twisted_master.cfg (reactors): disable cReactor
7075 tests now that cReactor is banished to the sandbox
7077 2003-10-10 Brian Warner <warner@lothar.com>
7079 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
7080 scheme: now .xhtml are sources and .html are generated
7082 2003-10-08 Brian Warner <warner@lothar.com>
7084 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
7085 we were ignoring the 'randomly' parameter.
7087 2003-10-01 Brian Warner <warner@lothar.com>
7089 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
7090 posix, to kill sub-children of aborted slavecommands.
7092 * buildbot/status/builder.py: rename Builder to BuilderStatus.
7093 Clean up initialization: lastBuildStatus remains None until the
7094 first build has been completed.
7096 * buildbot/status/html.py (WaterfallStatusResource.body): handle
7097 None as a lastBuildStatus
7098 * buildbot/clients/gtkPanes.py: same
7100 * buildbot/status/client.py (StatusClientService): keep
7101 BuilderStatus objects in self.statusbags . These objects now live
7102 here in the StatusClientService and are referenced by the Builder
7103 object, rather than the other way around.
7104 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
7105 * buildbot/process/base.py (Builder): same
7106 * test/test_config.py (ConfigTest.testBuilders): same
7108 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
7109 an existing builder, leave the statusbag alone. This will preserve the
7112 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
7113 hook. This will probably go away in favor of a class in upcoming
7116 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
7117 serviceName from newcred FreshCVSNotifiee setup
7119 2003-09-29 Brian Warner <warner@lothar.com>
7121 * buildbot/process/process_twisted.py: switch to new reactor
7123 * docs/examples/twisted_master.cfg: same
7125 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
7127 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
7128 botmaster reference instead of the oldapp service lookup
7130 * buildbot/master.py (BuildMaster.__init__): give the
7131 StatusClientService a reference to the botmaster to make it easier to
7134 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7136 * buildbot/status/html.py (Box.td): escape hreffy things so you
7137 can have spaces in things like builder names
7138 (StatusResourceBuilder.body)
7139 (WaterfallStatusResource.body)
7140 (WaterfallStatusResource.body0): same
7142 2003-09-25 Brian Warner <warner@lothar.com>
7144 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
7145 rearrange the builder list when adding or removing builders: keep
7146 them in the order the user requested.
7147 * test/test_config.py (ConfigTest.testBuilders): verify it
7149 * contrib/debug.glade: give the debug window a name
7151 * buildbot/process/base.py (Builder.buildTimerFired): builders can
7152 now wait on multiple interlocks. Fix code relating to that.
7153 (Builder.checkInterlocks): same
7154 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
7156 * buildbot/master.py (BuildMaster.loadConfig): move from
7157 deprecated pb.BrokerFactory to new pb.PBServerFactory
7158 * test/test_config.py (ConfigTest.testWebPathname): same
7160 * docs/examples/twisted_master.cfg: fix interlock declaration
7162 * buildbot/master.py (BotMaster.addInterlock): move code to attach
7163 Interlocks to their Builders into interlock.py .
7164 (BuildMaster.loadConfig_Interlocks): fix interlock handling
7166 * test/test_config.py (ConfigTest.testInterlocks): validate
7169 * buildbot/process/base.py (Builder.__init__): better comments
7170 * buildbot/process/interlock.py (Interlock.__repr__): same
7171 (Interlock.deactivate): add .active flag, move the code that
7172 attaches/detaches builders into the Interlock
7174 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7176 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
7177 tests using the new run_maxq.py script, and reporting failures by
7180 * contrib/run_maxq.py: Hacky little script for running a set of maxq
7181 tests, reporting their success or failure in a buildbot-friendly
7184 2003-09-24 Brian Warner <warner@lothar.com>
7186 * docs/examples/twisted_master.cfg: example of a new-style config
7187 file. This lives in the buildmaster base directory as
7190 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
7191 button to make the master re-read its config file
7193 * buildbot/master.py (BuildMaster.loadConfig): new code to load
7194 buildmaster configuration from a file. This file can be re-read
7195 later, and the buildmaster will update itself to match the new
7196 desired configuration. Also use new Twisted Application class.
7197 * test/Makefile, test/test_config.py: unit tests for same
7199 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
7200 FreshCVSSources comparable, to support reload.
7201 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7203 * buildbot/process/base.py (Builder): make them comparable, make
7204 Interlocks easier to attach, to support reload. Handle
7205 re-attachment of remote slaves.
7206 * buildbot/process/interlock.py (Interlock): same
7208 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
7209 Twisted's new Application class. Requires Twisted >= 1.0.8 .
7210 buildmaster taps are now constructed with mktap.
7211 * buildbot/status/client.py (StatusClientService): same
7213 * buildbot/status/words.py: move to new Services, add support to
7214 connect to multiple networks, add reload support, allow nickname
7215 to be configured on a per-network basis
7217 2003-09-20 Brian Warner <warner@lothar.com>
7219 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
7220 the freebsd builder, now that the machine has been upgraded and no
7221 longer has python2.2
7223 * setup.py (version): bump to 0.3.5+ while between releases
7225 2003-09-19 Brian Warner <warner@lothar.com>
7227 * setup.py (version): Releasing buildbot-0.3.5
7229 2003-09-19 Brian Warner <warner@lothar.com>
7231 * NEWS: add post-0.3.4 notes
7233 * README (REQUIREMENTS): note twisted-1.0.7 requirement
7235 * MANIFEST.in: add contrib/*
7237 * docs/examples/twisted_master.py (twisted_app): all build slaves must
7238 use a remote root now: cvs.twistedmatrix.com
7240 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
7242 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
7243 compatibility with old servers
7244 (FreshCVSSource.start): and provide a way to use it
7245 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
7247 * docs/examples/twisted_master.py (twisted_app): update to new
7249 (twisted_app): listen on new ~buildbot socket
7250 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
7252 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
7253 to reduce cvs bandwidth (update instead of full checkout)
7255 2003-09-11 Brian Warner <warner@lothar.com>
7257 * contrib/fakechange.py: demo how to connect to the changemaster
7258 port. You can use this technique to submit changes to the
7259 buildmaster from source control systems that offer a hook to run a
7260 script when changes are committed.
7262 * contrib/debugclient.py: tool to connect to the debug port. You
7263 can use it to force builds, submit fake changes, and wiggle the
7266 * buildbot/master.py: the Big NewCred Reorganization. Use a single
7267 'Dispatcher' realm to handle all the different kinds of
7268 connections and Perspectives: buildslaves, the changemaster port,
7269 the debug port, and the status client port. NewCredPerspectives
7270 now have .attached/.detached methods called with the remote 'mind'
7271 reference, much like old perspectives did. All the pb.Services
7272 turned into ordinary app.ApplicationServices .
7273 (DebugService): went away, DebugPerspectives are now created
7274 directly by the Dispatcher.
7275 (makeApp): changed interface a little bit
7277 * buildbot/changes/changes.py: newcred
7278 * buildbot/status/client.py: newcred
7280 * buildbot/clients/base.py: newcred client side changes
7281 * buildbot/bot.py: ditto
7283 * docs/examples/glib_master.py: handle new makeApp() interface
7284 * docs/examples/twisted_master.py: ditto
7286 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
7287 base newcred Perspectives on. This should go away once Twisted
7288 itself provides something sensible.
7291 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
7293 * contrib/svn_buildbot.py: A program that you can call from your
7294 SVNREPO/hooks/post-commit file that will notify a BuildBot master
7295 when a change in an SVN repository has happened. See the top of
7296 the file for some minimal usage info.
7298 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7300 * buildbot/slavecommand.py (ArglistCommand): Add new
7301 ArglistCommand that takes an argument list rather than a string as
7302 a parameter. Using a st.split() for argv is very bad.
7304 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
7305 update to a particular revision rather than always checking out
7306 (still not very smart about it, there may be cases where the
7307 checkout becomes inconsistent).
7309 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7311 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
7312 SVN fetch support. It can checkout (not update!) a specified
7313 revision from a specified repository to a specified directory.
7315 * buildbot/status/progress.py (Expectations.update): Fix an
7316 obvious bug (apparently created by the change described in the
7317 previous ChangeLog message) by moving a check to *after* the
7318 variable it checks is defined.
7321 2003-09-08 Brian Warner <warner@lothar.com>
7323 * buildbot/status/progress.py (Expectations.update): hack to catch
7324 an exception TTimo sees: sometimes the update() method seems to
7325 get called before the step has actually finished, so the .stopTime
7326 is not set, so no totalTime() is available and we average None
7327 with the previous value. Catch this and just don't update the
7328 metrics, and emit a log message.
7330 2003-08-24 Brian Warner <warner@lothar.com>
7332 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
7333 parameter to set copydir='original' in CVS commands.
7335 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
7337 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
7338 which tells the command to maintain a separate original-source CVS
7339 workspace. For each build, this workspace will be updated, then
7340 the tree copied into a new workdir. This reduces CVS bandwidth
7341 (from a full checkout to a mere update) while doubling the local
7342 disk usage (to keep two copies of the tree).
7344 2003-08-21 Brian Warner <warner@lothar.com>
7346 * buildbot/status/event.py (Logfile.addEntry): if the master web
7347 server dies while we're serving a page, request.write raises
7348 pb.DeadReferenceError . Catch this and treat it like a
7349 notifyFinish event by dropping the request.
7351 2003-08-18 Brian Warner <warner@lothar.com>
7353 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
7354 (instead of blowing up) if a force-build command is given without
7357 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
7358 don't blow up if there aren't yet any Changes in the list
7360 2003-08-02 Brian Warner <warner@lothar.com>
7362 * buildbot/bot.py (updateApplication): don't set the .tap name,
7363 since we shouldn't assume we own the whole .tap file
7365 * buildbot/bb_tap.py (updateApplication): clean up code, detect
7366 'mktap buildbot' (without a subcommand) better
7368 2003-07-29 Brian Warner <warner@lothar.com>
7370 * buildbot/status/words.py
7371 (IrcStatusFactory.clientConnectionLost): when we lose the
7372 connection to the IRC server, schedule a reconnection attempt.
7374 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
7375 use shutil.rmtree instead of forking off an "rm -rf" command.
7376 rmtree may take a while and will block until it finishes, so we
7377 use "rm -rf" if available.
7379 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
7380 freebsd buildslave badly
7382 * setup.py (version): bump to 0.3.4+ while between releases
7384 2003-07-28 Brian Warner <warner@lothar.com>
7386 * setup.py (version): Releasing buildbot-0.3.4
7388 2003-07-28 Brian Warner <warner@lothar.com>
7390 * NEWS: update in preparation for release
7392 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
7393 process.signalProcess instead of os.kill, to improve w32
7396 * docs/examples/twisted_master.py (twisted_app): turn off
7397 win32eventreactor: the tests hang the buildslave badly
7399 * buildbot/process/base.py (Build.buildFinished): update ETA even on
7400 failed builds, since usually the failures are consistent
7402 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7403 add compileOpts/compileOpts2 to reactors build
7405 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
7406 (twisted_app): use both default and win32eventreactor on w32 build.
7407 Use both default and kqreactor on freebsd build.
7409 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7410 add compileOpts2, which is put after the build_ext argument. w32
7411 needs "-c mingw32" here.
7413 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
7414 touch .acqpath, it goes away in recent Twisted releases
7416 * docs/examples/twisted_master.py (twisted_app): use "python" for
7417 the w32 buildslave, not "python2.2"
7419 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
7420 the directory exists.. should hush an exception under w32
7422 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
7423 ProcessTerminated -provided values for signal and exitCode rather
7424 than parsing the unix status code directly. This should remove one
7425 more roadblock for a w32-hosted buildslave.
7427 * test/test_mailparse.py: add test cases for Syncmail parser
7429 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
7430 temporary compatibility import. Note! Start importing
7431 FCMaildirSource from changes.mail instead of changes.freshcvsmail
7433 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
7435 2003-07-27 Brian Warner <warner@lothar.com>
7437 * NEWS: started adding new features
7439 * buildbot/changes/mail.py: start work on Syncmail parser, move
7440 mail sources into their own file
7442 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
7443 as implementing IChangeSource
7444 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
7446 * buildbot/interfaces.py: define the IChangeSource interface
7448 2003-07-26 Brian Warner <warner@lothar.com>
7450 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
7452 2003-06-25 Brian Warner <warner@lothar.com>
7454 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
7457 2003-06-17 Brian Warner <warner@lothar.com>
7459 * buildbot/status/words.py: clean up method usage to avoid error
7460 in silly IRC command
7461 (IrcStatusBot.emit_status): round off seconds display
7463 * buildbot/process/base.py (Build): delete the timer when saving
7464 to the .tap file, and restore it (if it should still be running)
7465 upon restore. This should fix the "next build in -34 seconds"
7466 messages that result when the master is restarted while builds are
7467 sitting in the .waiting slot. If the time for the build has
7468 already passed, start it very soon (in 1 second).
7470 * buildbot/status/words.py: more silly commands
7472 * README (REQUIREMENTS): add URLs to all required software
7474 * buildbot/status/words.py ('last'): mention results of, and time
7477 2003-05-28 Brian Warner <warner@lothar.com>
7479 * buildbot/status/words.py: add 'last' command
7480 (IrcStatusBot.emit_status): add current-small text to 'status' output
7482 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
7483 (twisted_app): remove spaces from OS-X builder name
7485 * buildbot/master.py (makeApp): add knob to turn on IRC bot
7486 * buildbot/status/words.py: IRC bot should actually be useful now
7488 2003-05-23 Brian Warner <warner@lothar.com>
7490 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
7491 "slave information" from $(slavedir)/info/* . These files are
7492 maintained by the slave administrator, and describe the
7493 machine/environment that is hosting the slave. Information from
7494 them is put into the "Builder" HTML page. Still need to establish
7495 a set of well-known filenames and meanings for this data: at the
7496 moment, *all* info/* files are sent to the master, but only
7497 'admin' and 'host' are used on that end.
7498 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
7499 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
7500 * buildbot/master.py (BotPerspective.got_info): ditto
7502 2003-05-22 Brian Warner <warner@lothar.com>
7504 * setup.py (version): bump version to 0.3.3+ while between releases
7506 2003-05-21 Brian Warner <warner@lothar.com>
7508 * setup.py: Releasing buildbot-0.3.3
7510 2003-05-21 Brian Warner <warner@lothar.com>
7512 * NEWS: 0.3.3 news items
7514 * README: describe --keepalive and life behind a NAT box
7516 * buildbot/bot.py (Bot.connected): implement application-level
7517 keepalives to deal with NAT timeouts, turn them on with
7518 --keepalive option or when SO_KEEPALIVE doesn't work.
7520 * buildbot/master.py (BotPerspective): accept keepalives silently
7522 * buildbot/process/base.py (Build.buildException): CopiedFailures
7523 don't carry as much information as local ones, so don't try to
7524 create a big HTMLized version of them.
7526 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
7527 log file when step fails due to an exception, such as when the slave
7530 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
7531 --testmodule argument instead of grepping for test-case-name tags
7532 ourselves. Remove FindUnitTests code.
7533 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
7535 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
7537 2003-05-16 Brian Warner <warner@lothar.com>
7539 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
7540 argument to allow things like CFLAGS=-O0 to be passed without relying
7541 upon /bin/sh processing on the slave.
7543 * buildbot/process/step.py (InternalShellCommand.start): send
7545 * buildbot/slavecommand.py (ShellCommand.start): create argv with
7546 'split' instead of letting /bin/sh do it. This should also remove
7547 the need for /bin/sh on the buildslave, making it more likely to
7550 * buildbot/status/html.py: html-escape text in blamelist.
7551 Add "force build" button to the Builder page.
7553 * buildbot/process/step_twisted.py (countFailedTests): look at
7554 last 1000 characters for status line, as import errors can put it
7555 before the -200 point.
7557 2003-05-15 Brian Warner <warner@lothar.com>
7559 * docs/examples/twisted_master.py: use clobber=0 for remote builds
7561 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7562 make 'clobber' a parameter, so it is possible to have builds which
7563 do full tests but do a cvs update instead of hammering the CVS
7564 server with a full checkout each build
7566 * buildbot/process/step.py (InternalShellCommand): bump default
7567 timeout to 20 minutes
7569 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
7570 the master to trigger a build. Run it via manhole.
7572 * buildbot/master.py (BotPerspective.perspective_forceBuild):
7573 allow slaves to trigger any build that they host, to make life
7574 easier for slave admins who are testing out new build processes
7576 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7577 don't flunk cReactor or qtreactor on failure, since they fail alot
7578 these days. Do warnOnFailure instead.
7580 * buildbot/process/base.py: change Builder.buildable from a list
7581 into a single slot. When we don't have a slave, new builds (once
7582 they make it past the timeout) are now merged into an existing
7583 buildable one instead of being queued. With this change, a slave
7584 which has been away for a while doesn't get pounded with all the
7585 builds it missed, but instead just does a single build.
7587 2003-05-07 Brian Warner <warner@lothar.com>
7589 * setup.py (version): bump version to 0.3.2+ while between releases
7591 2003-05-07 Brian Warner <warner@lothar.com>
7593 * setup.py: Releasing buildbot-0.3.2
7595 2003-05-07 Brian Warner <warner@lothar.com>
7597 * setup.py: fix major packaging error: include subdirectories!
7599 * NEWS: add changes since last release
7601 * README (REQUIREMENTS): update twisted/python dependencies
7603 * buildbot/status/builder.py (Builder.startBuild): change
7604 BuildProcess API: now they should call startBuild/finishBuild
7605 instead of pushing firstEvent / setLastBuildStatus. Moving towards
7606 keeping a list of builds in the statusbag, to support other kinds of
7608 (Builder.addClient): send current-activity-small to new clients
7609 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
7612 * buildbot/status/client.py: drop RemoteReferences at shutdown
7614 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
7616 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
7617 more debug messages for remote status client
7619 * buildbot/process/step.py (InternalBuildStep.stepComplete)
7620 (.stepFailed): only fire the Deferred once, even if both
7621 stepComplete and stepFailed are called. I think this can happen if
7622 an exception occurs at a weird time.
7624 * buildbot/status/words.py: work-in-progress: IRC status delivery
7626 2003-05-05 Brian Warner <warner@lothar.com>
7628 * docs/examples/twisted_master.py (twisted_app): hush internal
7629 python2.3 distutils deprecation warnings
7630 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7631 add compileOpts= argument which inserts extra args before the
7632 "setup.py build_ext" command. This can be used to give -Wignore
7633 warnings, to hush some internal python-2.3 deprecation messages.
7635 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
7636 the ['twisted.test'] default test case to make it easier to change
7639 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
7640 * buildbot/clients/gtkPanes.py: ditto
7642 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
7643 arg to collapse RunUnitTestsRandomly into RunUnitTests
7644 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7645 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
7647 * buildbot/status/html.py (StatusResource): shuffle Resources
7648 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
7649 would serve the waterfall display, but the internal links were
7650 only valid on the trailing-slash version. The correct behavior is
7651 for the non-slashed one to serve a Redirect to the slashed one.
7652 This only shows up when the buildbot page is hanging off another
7653 server, like a Twisted-Web distributed server.
7655 * buildbot/status/event.py (Event, RemoteEvent): make Events
7656 pb.Cacheable, with RemoteEvent as the cached version. This removes
7657 a lot of explicit send-an-update code.
7658 * buildbot/status/builder.py (Builder): remove send-update code
7659 * buildbot/status/client.py (ClientBuilder): remove send-update
7660 code, and log errors that occur during callRemote (mostly to catch
7661 InsecureJelly exceptions)
7663 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7664 run Lore with the same python used in the rest of the build
7666 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
7668 * buildbot/process/step_twisted.py (HLint): accept 'python'
7669 argument. Catch rc!=0 and mark the step as failed. This marks the
7670 build orange ("has warnings").
7671 (RunUnitTestsJelly): move out to step_twisted2.py
7673 * buildbot/util.py (ignoreStaleRefs): add utility function
7675 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
7676 don't fake ETA object, it's too hard to get right
7678 2003-05-02 Brian Warner <warner@lothar.com>
7680 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
7682 2003-05-01 Brian Warner <warner@lothar.com>
7684 * buildbot/status/html.py (StatusResource.body): oops, I was
7685 missing a <tr>, causing the waterfall page to be misrendered in
7686 everything except Galeon.
7688 2003-04-29 Brian Warner <warner@lothar.com>
7690 * docs/examples/twisted_master.py: make debuild use python-2.2
7691 explicitly, now that Twisted stopped supporting 2.1
7693 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
7694 handle tuple results too. I keep forgetting this, which suggests
7695 it needs to be rethought.
7697 * setup.py (setup): bump version to 0.3.1+ while between releases
7699 2003-04-29 Brian Warner <warner@lothar.com>
7701 * setup.py: Releasing buildbot-0.3.1
7703 2003-04-29 Brian Warner <warner@lothar.com>
7705 * README (SUPPORT): add plea to send questions to the mailing list
7707 * NEWS, MANIFEST.in: add description of recent changes
7709 * docs/examples/twisted_master.py: add the code used to create the
7710 Twisted buildmaster, with passwords and such removed out to a
7713 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
7714 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
7715 buildmasters to not require CVSToys be installed.
7716 * README, docs/examples/glib_master: update to match the change
7718 * buildbot/clients/base.py, buildbot/bot.py,
7719 buildbot/changes/changes.py, buildbot/pbutil.py: copy
7720 ReconnectingPB from CVSToys distribution to remove CVSToys
7721 dependency for build slaves and status clients. Buildmasters which
7722 use FreshCVSSources still require cvstoys be installed, of course.
7724 2003-04-25 Brian Warner <warner@lothar.com>
7726 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
7727 runTestsRandomly arg to turn on trial -z
7729 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
7730 experimental code to use trial's machine-parseable output to get
7731 more detailed test results. Still has some major issues.
7732 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
7735 * buildbot/status/builder.py (Builder.setCurrentBuild):
7736 anticipating moving build history into statusbag, not used yet
7738 * buildbot/status/tests.py: code to centralize test results,
7739 doesn't work quite yet
7741 * buildbot/status/event.py (Event): use hasattr("setName") instead
7742 of isinstance for now.. need better long-term solution
7744 * buildbot/status/html.py: Remove old imports
7746 2003-04-24 Brian Warner <warner@lothar.com>
7748 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
7749 ignore changes under doc/fun/ and sandbox/
7751 * buildbot/process/step_twisted.py: update pushEvent and friends.
7753 * buildbot/status/html.py (Box.td): replace event.buildername with
7754 event.parent.getSwappableName(). Needs more thought.
7756 * buildbot/status/builder.py (Builder): Replace pushEvent and
7757 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
7758 Tell events they are being pruned with event.delete().
7760 * buildbot/process/base.py (Build): Remove Builder status-handling
7761 methods. s/pushEvent/setCurrentActivity/.
7763 * buildbot/process/step.py (BuildStep): clean up status delivery.
7764 Gouse builder.statusbag methods instead of intermediate builder
7765 methods. s/updateLastEvent/updateCurrentActivity/.
7766 s/finalizeLastEvent/finishCurrentActivity/. Use
7767 addFileToCurrentActivity for summaryFunction.
7769 * buildbot/status/event.py (Logfile): put data in a Swappable when
7771 (Event): add more setter methods. Remove .buildername, use .parent
7772 and getSwappableName instead (needs more thought).
7774 * buildbot/util.py (Swappable):
7775 * test/test_swap.py: don't bother setting filename at __init__
7776 time, do it later. Change setFilename args to take parent first,
7777 since it provides the most significant part of the filename.
7779 2003-04-23 Brian Warner <warner@lothar.com>
7781 * buildbot/status/event.py (Logfile.addEntry): append to previous
7784 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
7785 anticipating Swappable
7786 (InternalShellCommand.remoteUpdate): split out various log-adding
7787 methods so subclasses can snarf stdout separately
7789 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
7790 in anticipation of Swappable build logs
7791 (Builder.testsFinished): anticipating TestResults, still disabled
7793 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
7796 * buildbot/status/event.py (Logfile): add (disabled) support for
7797 Swappable, not ready for use yet
7799 * buildbot/util.py (Swappable): object which is swapped out to
7800 disk after some period of no use.
7801 * test/test_swap.py: test buildbot.utils.Swappable
7803 2003-04-14 Brian Warner <warner@lothar.com>
7805 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
7806 periodic-build timer. Set the .periodicBuildTime on a builder
7807 instance to some number of seconds to activate it.
7809 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
7811 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
7812 a way that survives result tuples
7814 2003-04-12 Brian Warner <warner@lothar.com>
7816 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7817 return a dict instead of a tuple: allow summarizers to provide
7818 multiple summaries if they want
7819 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
7820 (debuildSummarizer): summarize lintian warnings/errors
7822 2003-04-10 Brian Warner <warner@lothar.com>
7824 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
7826 2003-04-09 Brian Warner <warner@lothar.com>
7828 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
7829 empty summaries: happens when the tests fail so hard they don't emit
7830 a parseable summary line.
7832 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7833 Allow summaryFunction to return None to indicate no summary should
7836 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
7837 writing to stale HTTP requests: notice when they disconnect and
7838 remove the request from the list. Also add CacheToFile from
7839 moshez, will be used later.
7841 2003-04-08 Brian Warner <warner@lothar.com>
7843 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
7844 should be an int, not a list of strings
7846 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
7847 if we weren't actually connected
7849 * buildbot/process/step_twisted.py (trialTextSummarizer): function
7850 to show the tail end of the trial text output
7852 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
7853 hook to summarize the results of a ShellCommand
7855 2003-04-07 Brian Warner <warner@lothar.com>
7857 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
7858 twisted test suite code into a single class.
7859 * buildbot/process/process_twisted.py: same
7861 2003-04-04 Brian Warner <warner@lothar.com>
7863 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
7865 * README (SLAVE): document use of mktap to create slave .tap file
7866 (REQUIREMENTS): describe dependencies
7868 * buildbot/bb_tap.py, buildbot/plugins.tml:
7869 * buildbot/bot.py (updateApplication): Add mktap support for creating
7870 buildslave .tap files
7872 2003-03-28 Brian Warner <warner@lothar.com>
7874 * buildbot/process/step.py (InternalShellCommand.finished): handle
7875 new tuple result values (fix embarrasing bug that appeared during
7878 2003-03-27 Brian Warner <warner@lothar.com>
7880 * docs/examples/glib_master.py, README: add sample buildmaster.tap
7883 2003-03-25 Brian Warner <warner@lothar.com>
7885 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
7886 to overall build status
7887 * buildbot/clients/base.py (Builder): improve event printing
7888 * buildbot/process/base.py (BasicBuildFactory): use specific steps
7889 instead of generic ShellCommand
7890 (Build): Add .stopBuild, use it when slave is detached
7892 * buildbot/process/step.py (Configure,Test): give the steps their
7893 own names and status strings
7895 * buildbot/status/html.py (StatusResource): add "show" argument,
7896 lets you limit the set of Builders being displayed.
7898 2003-03-20 Brian Warner <warner@lothar.com>
7900 * buildbot/process/basic.py: removed
7902 2003-03-19 Brian Warner <warner@lothar.com>
7904 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7905 turn off process-docs by default
7907 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
7908 when displaying build information without anything in allBuilds[]
7910 * buildbot/bot.py (makeApp): really take password from sys.argv
7912 2003-03-18 Brian Warner <warner@lothar.com>
7914 * buildbot/bot.py (buildApp): take password from sys.argv
7916 * README: replace with more useful text
7918 * setup.py: add a real one
7919 * MANIFEST.in, .cvsignore: more distutils packaging stuff
7921 * docs/PyCon-2003/: added sources for PyCon paper.
7923 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
7924 now Build objects control the process and Builder only handles
7925 slave stuff and distribution of changes/status. A new BuildFactory
7926 class creates Build objects on demand.
7928 Created ConfigurableBuild which takes a list of steps to run. This
7929 makes it a lot easier to set up a new kind of build and moves us
7930 closer to being able to configure a build from a web page.
7932 * buildbot/process/step_twisted.py, process_twisted.py: move to
7933 new model. A lot of code went away.
7935 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
7936 send lots of empty progress messages to the client.
7938 * buildbot/master.py (makeApp): enforce builder-name uniqueness
7940 2003-02-20 Brian Warner <warner@lothar.com>
7942 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
7944 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
7945 Twisted bug that prevented non-pty processes from working just got
7946 fixed, and the bug that leaks ptys is still being investigated.
7948 * buildbot/process/step.py (CVS): send timeout arg to slave
7950 * buildbot/clients/gtkPanes.py: add connection-status row, handle
7951 builders coming and going
7952 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
7953 from CVSToys, handle lost-buildmaster
7955 * buildbot/status/client.py (StatusClientService.removeBuilder):
7956 Clean up status client protocol: send builders (with references)
7957 as they are created, rather than sending a list and requiring the
7958 client to figure out which ones are new.
7959 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
7960 attempts to force a build on an unknown builder
7962 2003-02-19 Brian Warner <warner@lothar.com>
7964 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
7965 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
7966 Twisted stops leaking them.
7967 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
7968 builder goes to an idle state.
7970 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
7971 I figure out why CVS commands hang without them, and/or I fix the
7972 hung-command timeout
7974 2003-02-16 Brian Warner <warner@lothar.com>
7976 * buildbot/process/step_twisted.py: bin/hlint went away, replace
7977 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
7978 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
7979 GenerateDocs now that they are prefixed with WARNING:.
7981 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
7982 use manual href target instead of request.childLink
7984 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
7985 display every second, but update the ETA every 5 seconds (or
7986 whenever) as remote_progress messages arrive.
7989 2003-02-12 Brian Warner <warner@lothar.com>
7991 * *: import current sources from home CVS repository
7995 # add-log-time-format: add-log-iso8601-time-string