1 2006-12-10 Brian Warner <warner@lothar.com>
3 * buildbot/test/test_config.py (StartService.testStartService):
4 inhibit the usual read-config-on-startup behavior, since otherwise
5 the log.err that gets recorded causes the test to fail
7 * buildbot/status/builder.py (LogFile.finish): forget about all
8 subscribers once the log has finished, since after that point
9 we're never going to use them again. This might help free up some
12 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
13 than the old/deprecated gtk.mainquit()
15 2006-12-09 Brian Warner <warner@lothar.com>
17 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
18 better when we can't open the masterdst file
20 * buildbot/scripts/startup.py (Follower._failure): add missing
21 import statement for BuildSlaveDetectedError
23 * buildbot/steps/transfer.py (FileUpload): cleanup
24 (FileDownload): same. Add tests for slave version, add mode=.
25 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
26 (SlaveFileDownloadCommand): same
27 * buildbot/test/test_transfer.py: enhance tests
28 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
31 2006-12-08 Brian Warner <warner@lothar.com>
33 * buildbot/scripts/runner.py (sendchange): halt the reactor on
34 both success *and* failure. Without this, the 'buildbot
35 sendchange' command would hang if it could not contact the
36 buildmaster or deliver the Change, which would generally cause the
37 user's commit/record/checkin command to hang too. Thanks to
38 Christian Unger for the catch.
40 2006-12-06 Brian Warner <warner@lothar.com>
42 * NEWS: update with items for the next release
44 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
45 whimsical example pulled from a punch-drunk email I sent out late
47 (Transferring Files): document some of the other parameters
48 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
49 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
50 * buildbot/test/test_svnpoller.py: same
51 * buildbot/changes/svnpoller.py (SVNPoller): same
53 2006-11-26 Brian Warner <warner@lothar.com>
55 * docs/buildbot.texinfo (Build Properties): remind users that
56 WithProperties must appear in a command= list, not as a top-level
58 * buildbot/steps/shell.py (ShellCommand.start): and assert that
59 we're sending a list or a single string to the RemoteShellCommand
61 * buildbot/scheduler.py (Nightly): Improve docs slightly.
63 * buildbot/scripts/startup.py (start): skip the whole
64 watch-the-logfile thing under windows, since it needs os.fork()
66 * buildbot/scripts/runner.py (restart): remove the old message
67 that got printed after the buildbot was restarted.. it most cases
68 it didn't get printed at the right time anyways
70 2006-11-25 Brian Warner <warner@lothar.com>
72 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
73 follow twistd.log and print lines until the process has started
74 started properly. For the buildmaster, this means until the config
75 file has been parsed and accepted. For the buildslave, this means
76 until we've connected to the master. We give up after 5 seconds in
77 any case. Helpful error messages and troubleshooting suggestions
78 are printed when we don't see a successful startup. This closes the
79 remainder of SF#1517975.
80 * buildbot/scripts/startup.py: moved app startup code to here
81 * buildbot/scripts/logwatcher.py: utility class to follow log
82 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
83 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
84 so the LogWatcher can tell the difference between a buildmaster
87 2006-11-24 Brian Warner <warner@lothar.com>
89 * docs/examples/twisted_master.cfg: update to match the version
90 in use on twistedmatrix.com
91 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
92 was using before stopped working, but 'irc.freenode.net' works
95 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
98 * buildbot/clients/base.py (TextClient.not_connected): upon
99 UnauthorizedLogin failures, remind the user to connect to the
100 PBListener port instead of the slaveport.
101 (TextClient.disconnected): shut down more quietly
102 * docs/buildbot.texinfo (statuslog): add another reminder
104 * buildbot/scripts/runner.py (Options.subCommands): rename
105 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
106 'sighup' as an alias.
107 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
108 reconfig command to follow twistd.log and print all of the lines
109 from the start of the config-file reload to its completion. This
110 should make it a lot easier to discover bugs in the config file.
111 Use --quiet to disable this behavior. This addresses half of
112 SF#1517975, the other half will be to add this same utility to
113 'buildbot start' and 'buildbot restart'.
114 * docs/buildbot.texinfo (Loading the Config File): same
117 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
118 method, it has been deprecated for a long time. Use
119 IBuilderControl.requestBuild instead.
120 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
121 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
122 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
123 * buildbot/test/test_control.py (Force.testForce): same
124 * buildbot/test/test_run.py: use requestBuild instead
126 * buildbot/clients/debug.py: replace 'Force Build' button with
127 'Request Build' (which just adds one to the queue), add Ping
128 Builder, add branch/revision fields to Request Build.
129 * buildbot/clients/debug.glade: same
130 * buildbot/master.py: update interface to match. This creates an
131 incompatibility between new debugclients and old buildmasters.
133 * buildbot/process/builder.py (Builder._attached): delay the call
134 to maybeStartBuild for a reactor turn, to avoid starting a build
135 in the middle of a reconfig (say, if the new Builder uses a new
136 slave which is already connected).
138 2006-11-23 Brian Warner <warner@lothar.com>
140 * buildbot/test/test_transfer.py: appease pyflakes
141 * buildbot/test/test_steps.py: same
143 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
144 keeps pyflakes from finding undefined names
146 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
147 Builder no longer induces a disconnect/reconnect cycle. This means
148 that any builds currently in progress will not be interrupted, and
149 any builds which are queued in the Builder will not be lost. This
150 is implemented by having the new Builder extract the state (i.e.
151 all pending Builds and any desired SlaveBuilders) from the old
153 (BotPerspective): refactor. The BotPerspective no longer keeps
154 track of all the Builders that want to use this slave; instead, it
155 asks the BotMaster each time it needs this list. This removes
156 addBuilder and removeBuilder. Clean up attached() to acquire all
157 the slave's information in a more atomic fashion. updateSlave() is
158 now the way to make sure the slave is using the right set of
159 Builders: just call it after everything else has been
161 (BotMaster): refactor, removing addBuilder/removeBuilder and
162 replacing them with an all-at-once setBuilders() call.
164 * buildbot/test/test_slaves.py (Reconfig): new test case to
165 exercise this functionality
166 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
167 * buildbot/slave/commands.py (WaitCommand): same
169 * docs/buildbot.texinfo (Loading the Config File): document the
172 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
173 SlaveBuilder to have its parent Builder changed.
174 (SlaveBuilder.isAvailable): new method to give access to state,
175 which is now a private attribute
176 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
177 the SlaveBuilder about how it is being used. These methods update
178 its internal state. buildFinished() is now the place that invokes
179 maybeStartBuild() on its parent Builder.
180 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
181 new Builder to take over for an old one, transferring state from
183 (Buider): refactor the way that SlaveBuilders are used to match,
184 giving them a bit more autonomy.
185 (Builder.buildFinished): this no longer calls maybeStartBuild():
186 instead the SlaveBuilder calls it on whoever its parent Builder is
187 at the time. This way, when an old Builder is replaced by a new
188 one, and there was a build in progress during the transition, when
189 that build finishes, it will be the new Builder that is told about
190 the newly available slave so it can start a new build.
192 * buildbot/process/base.py (Build.startBuild._release_slave): when
193 the Build finishes, tell the SlaveBuilder that they've been
196 * buildbot/status/builder.py (SlaveStatus): add some new setter
197 methods for use by BotPerspective, to keep some attributes more
200 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
201 called by the buildmaster.
202 (Bot.setBuilderList): instead, we locally announce any leftover
203 directories based upon which Builders we were told about. The
204 master doesn't really care; it's the local admin who may or may not
208 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
209 to allow use of python2.4 or whatever. This tool still requires
212 2006-11-19 Brian Warner <warner@lothar.com>
214 * NEWS (IStatusLog.readlines): more news items
216 2006-11-18 Brian Warner <warner@lothar.com>
218 * NEWS: start collecting items for the next release.
220 2006-11-04 Brian Warner <warner@lothar.com>
222 * buildbot/changes/bonsaipoller.py: apply updates from Ben
223 Hearsum. Closes SF#1590310.
224 * buildbot/test/test_bonsaipoller.py: and tests
226 * buildbot/status/tinderbox.py
227 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
228 status when the build results in WARNINGS. Patch from Dave
229 Liebreich. Closes SF#1587352.
231 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
232 linux-vs-osx behavior difference w.r.t. reading from files that
233 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
234 to Mark Rowe for the patch.
236 2006-10-15 Brian Warner <warner@lothar.com>
238 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
239 method name was misspelled in the interface definition. Thanks to
240 Roy Rapoport for the catch.
242 2006-10-13 Brian Warner <warner@lothar.com>
244 * docs/buildbot.texinfo (Adding LogObservers): update sample code
245 to match the great Steps renaming
247 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
248 Maybe I should run my own unit tests before recording a big
249 change. Good thing I've got a buildbot to remind me.
251 2006-10-12 Brian Warner <warner@lothar.com>
253 * buildbot/steps/transfer.py: rework __init__ and args setup
254 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
256 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
257 when opening the target file, only catch IOError (to report via
258 stderr/rc!=0), let the others be reported as normal exceptions
260 2006-10-08 Brian Warner <warner@lothar.com>
262 * contrib/svn_watcher.py: fix security holes by using proper argv
263 arrays and subprocess.Popen() rather than commands.getoutput().
264 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
265 is deprecated in favor of buildbot/changes/svnpoller.py, and will
266 probably be removed by the next release.
269 2006-10-04 Brian Warner <warner@lothar.com>
271 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
272 initial lines that weren't emitted by pyflakes. When the pyflakes
273 command is run under a Makefile, 'make' will echo the command it
274 runs to stdio, and that was getting logged as a "misc" warning.
275 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
276 * buildbot/test/test_steps.py (testPyFlakes3): another test
278 2006-10-01 Brian Warner <warner@lothar.com>
280 * buildbot/status/html.py (HtmlResource.render): if we get a
281 unicode object from our content() method, encode it into utf-8
282 like we've been claiming to all along. This allows the comments
283 and author names from svnpoller.py to be delivered properly.
285 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
286 de-unicodify filenames before creating the Change, because the
287 rest of buildbot is unlikely to handle them well. Leave the 'who'
288 field as a unicode object.. I don't think there's anything that
289 will break very soon, and it will probably nudge us towards
290 accepting unicode everywhere sooner or later. Stop using the
291 "date" field that comes out of SVN, since it is using the
292 repository's clock (and timezone) and what we care about is the
293 buildmaster's (otherwise Changes from the future show up later
294 than the builds they triggered).
295 * buildbot/test/test_svnpoller.py (Everything.test1): match the
298 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
299 Suvbersion repository polling ChangeSource. I've hacked it up
300 considerably: any bugs are entirely my own fault. Thank you
302 * buildbot/test/test_svnpoller.py: tests for it
303 * docs/buildbot.texinfo (SvnSource): document it
305 2006-09-30 Brian Warner <warner@lothar.com>
307 * buildbot/scheduler.py (Periodic): submit a reason= to the
308 BuildSet to indicate which Scheduler triggered the build. Thanks
309 to Mateusz Loskot for the suggestion.
311 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
313 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
314 changes: set self.loop in __init__, remove unused volatile=
316 * docs/buildbot.texinfo (.buildbot config directory): add more
317 docs on the .buildbot/options keys used by "buildbot try"
318 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
319 (Try.deliverJob): same
321 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
325 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
326 close the filehandle when we stop watching the file. Before, the
327 filehandle was only closed when the LogFileWatcher was
328 garbage-collected, which could be quite a while in the future. If
329 it was still open by the time the next build started, windows will
330 refuse to let the new build delete the old build/ directory. Fixes
331 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
332 #twisted for the catch.
334 2006-09-29 Brian Warner <warner@lothar.com>
336 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
339 2006-09-25 Brian Warner <warner@lothar.com>
341 * setup.py: the new buildbot.steps module wasn't being installed.
342 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
343 (testmsgs): add the extra stuff from buildbot/test/* so you can
344 run unit tests on an installed copy of buildbot, not just from
347 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
348 columns of 'svnlook changed' output contain status information, so
349 strip [:4] instead of [:6]. Depending upon what the status flags
350 were, this would sometimes lead to mangled filenames. Thanks to
351 Riccardo Magliocchetti for the patch. Closes SF#1545146.
353 * buildbot/steps/source.py (Monotone): initial Monotone support,
354 contributed by Nathaniel Smith. Still needs docs and tests, but
355 this code has been in use on the Monotone buildbot for a long
357 * buildbot/slave/commands.py (Monotone): slave-side support
358 * buildbot/changes/monotone.py (MonotoneSource): polling change
361 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
362 contributed a Change Source that polls a Bonsai server (a
363 kind of web-based viewcvs CGI script).
365 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
366 Hearsum contributed a status plugin which sends email in the same
367 format that Tinderbox does: this allows a number of tinderbox
368 tools to be driven by Buildbot instead. Thanks Ben!
370 2006-09-24 Brian Warner <warner@lothar.com>
372 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
373 Thanks to Robert Helmer for the patch.
375 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
376 BuildStatus about the buildslave name at the *beginning* of the
377 build, rather than at the end. Thanks to Alexander Lorenz for the
379 * buildbot/status/html.py (StatusResourceBuild.body): always
380 include the slavename in the build page, not just when the build
382 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
383 slavename in the email message
385 2006-09-21 Brian Warner <warner@lothar.com>
387 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
389 * docs/examples/glib_master.cfg: same
390 * docs/examples/hello.cfg: same
391 * docs/examples/twisted_master.cfg: same, update to current usage
393 2006-09-19 Brian Warner <warner@lothar.com>
395 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
396 (PyFlakes.createSummary): make it compatible with python-2.2
398 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
399 for at least the output-parsing parts of PyFlakes
401 2006-09-18 Brian Warner <warner@lothar.com>
403 * buildbot/steps/python.py: oops, fix import of StringIO
405 2006-09-17 Brian Warner <warner@lothar.com>
407 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
408 turns out that SVN-1.4.0 doesn't fail to update once you've
409 replaced a file with a directory, unlike older versions of SVN and
410 pretty much every other VC tool we support. Since what we really
411 care about is that the update succeeds anyway, stop checking that
412 the tree got clobbered and just assert that the build succeeded.
413 (VCBase.printLogs): add a utility function for debugging
415 * buildbot/process/step.py: oops, added extra imports by mistake
417 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
418 rstrip() on the first line coming out of the 'p4 describe'
419 process, to remove the stray ^M that Wade Brainerd reports seeing
420 in the 'when' field. Fixes SF#1555985.
422 * buildbot/master.py (BuildMaster.loadConfig): improve the error
423 message logged when c['schedulers'] is not right
424 * buildbot/scheduler.py (Scheduler.__init__): improve error
425 message when a Scheduler() is created with the wrong arguments
426 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
427 verify that these error messages are emitted
429 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
430 The idea is that all the base classes (like BuildStep and
431 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
432 will be a leftover backwards-compatibility file that only contains
433 aliases for the steps that were moved out to buildbot.steps.*
434 * lots: change imports to match
435 * buildbot/process/step.py: add a DeprecationWarning if it ever
438 2006-09-12 Brian Warner <warner@lothar.com>
440 * buildbot/scheduler.py (Scheduler.__init__): make sure that
441 builderNames= is actually a sequence, since if you happen to give
442 it a single builder-specification dictionary instead, it won't get
443 caught by the existing assert. Thanks to Brett Neely for the
446 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
448 * docs/buildbot.texinfo (Python BuildSteps): document them
449 (sendchange): include a link to PBChangeSource, since you need one
451 * buildbot/steps/shell.py: clean up test-case-name line, remove some
453 * buildbot/steps/dummy.py: same
455 2006-09-08 Brian Warner <warner@lothar.com>
457 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
458 BuildStep which lets you transfer files from the master to the
459 slave or vice versa. Thanks to Albert Hofkamp for the original
460 patch. Fixes SF#1504631.
461 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
463 (SlaveFileDownloadCommand): same
464 * docs/buildbot.texinfo (Transferring Files): document it
465 * buildbot/test/test_transfer.py: test it
466 * buildbot/test/runutils.py (StepTester): new utility class for
467 testing BuildSteps and RemoteCommands without Builds or Bots or PB
468 * buildbot/test/test_steps.py (CheckStepTester): validate that the
471 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
472 walk through StatusLogs one line at a time, mostly for the benefit
473 of ShellCommand.createSummary methods. You can either walk through
474 STDOUT or STDERR, but the default is STDOUT.
476 * buildbot/status/builder.py (LogFile.readlines): implement it.
477 Note that this is not yet memory-efficient, it just pulls the
478 whole file into RAM and then splits it up with a StringIO.
479 Eventually this should be a generator that only pulls chunks from
481 * buildbot/test/test_status.py (Log.testReadlines): test it
483 * docs/buildbot.texinfo: update to match changes
484 * buildbot/process/factory.py: stop using old definitions
485 * buildbot/process/process_twisted.py: same
486 * buildbot/test/test_*.py: same
488 * buildbot/process/step_twisted.py: move definition to..
489 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
490 relative-import mechanisms prevent this from being named 'twisted'
491 or 'python/twisted' as I would have preferred.
493 * buildbot/process/maxq.py: move definition to..
494 * buildbot/steps/maxq.py: .. here, leave a compatibility import
496 * buildbot/process/step.py: split the user-visible BuildSteps into
497 separate files, all under buildbot/steps/
498 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
499 * buildbot/steps/shell.py: this holds ShellCommand and friends
500 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
502 2006-09-05 Brian Warner <warner@lothar.com>
504 * lots: run pyflakes, removed a lot of unused imports, changed the
505 form of some conditional imports to remove false pyflakes
506 warnings. There are still a number of warnings left, mostly from
507 imports that are done for their side-effects.
508 * buildbot/test/test_vc.py: import twisted.python.failure, since it
511 2006-08-26 Brian Warner <warner@lothar.com>
513 * buildbot/test/test_locks.py (Unit.testLater): make the tests
514 compatible with twisted-1.3.0, for some reason I just can't seem
515 to let go of the past.
517 2006-08-25 Brian Warner <warner@lothar.com>
519 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
521 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
522 all logfiles= in startCommand(), rather than in start() . This
523 makes it easier to have the 'stdio' log come before any secondary
524 logfiles, which I feel makes the waterfall display more
526 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
527 from ShellCommand up into LoggingBuildStep
528 (LoggingBuildStep.__init__): move the handling of logfiles= from
529 ShellCommand up to LoggingBuildStep, because startCommand is
530 provided by LoggingBuildStep, whereas start() was specific to
531 subclasses like ShellCommand and Source. This removes code
532 duplication in those subclasses.
533 (ShellCommand.__init__): same
534 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
535 for a slave that's too old to understand logfiles= into a separate
536 method, so it can live in ShellCommand. The rest of
537 setupLogfiles() can live in LoggingBuildStep.
539 2006-08-24 Brian Warner <warner@lothar.com>
541 * buildbot/locks.py (BaseLock): you can now configure Locks to
542 allow multiple simultaneous owners. They still default to
543 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
545 * docs/buildbot.texinfo (Interlocks): document the new options
546 * buildbot/test/test_locks.py: add a bunch of new unit tests
547 * buildbot/process/base.py (Build.acquireLocks): locks now offer
548 waitUntilMaybeAvailable, not waitUntilAvailable
549 * buildbot/process/step.py (BuildStep.acquireLocks): same
550 * buildbot/master.py (BotMaster.getLockByID): real locks now use
551 the whole lockid in their constructor, not just the name. Also,
552 keep track of which real locks we've handed out by the full
553 lockid, not just class+name, otherwise changing just the maxCount=
554 in the master.cfg file would not actually cause a behavioral
557 2006-08-23 Brian Warner <warner@lothar.com>
559 * buildbot/__init__.py (version): bump to 0.7.4+ while between
561 * docs/buildbot.texinfo: same
563 2006-08-23 Brian Warner <warner@lothar.com>
565 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
566 * docs/buildbot.texinfo: set version to match
567 * NEWS: update for 0.7.4
568 * buildbot/slave/commands.py (command_version): mention that this
569 version (2.1) was released with buildbot-0.7.4
571 2006-08-22 Brian Warner <warner@lothar.com>
575 * CREDITS: new file, list of people who have helped. Thanks!
576 * MANIFEST.in: ship it
578 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
579 new diagrams, the user's manual is more informative than it was.
580 Start shipping the .html user's manual (and generated .png
582 * Makefile: update 'release' target to match
584 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
585 test.. I think the web-parts effort will render it pointless well
586 before it ever actually starts to work.
588 2006-08-20 Brian Warner <warner@lothar.com>
590 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
591 meaning of the prefix= argument. It is now just a string which is
592 stripped from the beginning of the filename. If prefix= is set but
593 not found on any given filename, that filename is ignored. If all
594 filenames in a Change are ignored, the Change is dropped. This is
595 much simpler than the previous sep= nonsense, and I should have
596 implemented it this way from the beginning. Effectively resolves
597 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
598 Gedminas for the catch and suggested fixes.
599 (ChangePerspective.perspective_addChange): implement the actual
601 * buildbot/test/test_changes.py (TestChangePerspective): test it
602 * docs/buildbot.texinfo (PBChangeSource): document it, explain
603 how to properly use prefix=
604 * docs/examples/twisted_master.cfg (source): update prefix= by
605 adding the trailing slash
608 * docs/examples/twisted_master.cfg: update to actual practice
610 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
611 update test case to match new link text.. the HREF has both a
612 class= setting and an enclosing [] pair that I didn't match in the
615 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
616 list of strings is preferred over a single string with embedded
618 (ShellCommand.description=): explain that either single strings or
619 a list of strings is acceptable, and why you might prefer one over
620 the other. Add an example. Fixes SF#1524659, thanks to Paul
621 Winkler for the catch.
622 (Build Steps): update to use f.addStep() rather than using s()
623 and the constructor list
625 * buildbot/process/step.py (ShellCommand): accept either a single
626 string or a list of strings in both description= and
628 * buildbot/test/test_steps.py (Steps.test_description): test it
629 * buildbot/test/runutils.py (makeBuildStep): support for that test
631 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
632 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
633 collecting the files and creating the patch.
635 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
636 per-step URLs that will be displayed on the waterfall display,
637 for things like the HTML output of code-coverage tools, when
638 the results are hosted elsewhere.
639 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
640 way to retrieve these URLs
641 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
642 the method to retrieve these URLs. Also provide backwards
643 compatibility for saved BuildStepStatus instances that didn't have
645 * buildbot/process/step.py (BuildStep.addURL): method to set these
646 URLs from within a BuildStep
647 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
648 (StepBox.getBox): give these external links a distinct CSS class
649 named "BuildStep external" so a .css file can display them
652 * buildbot/test/test_web.py (WaterfallSteps): test that we really
654 * buildbot/test/test_steps.py (Steps): test that we can all the
655 URLs. Also add a bunch of other tests on methods that can be
656 called from within BuildSteps
657 * buildbot/test/runutils.py (makeBuildStep): add utility function
659 2006-08-13 Brian Warner <warner@lothar.com>
661 * docs/buildbot.texinfo (BuildStep LogFiles): document them
663 2006-08-10 Brian Warner <warner@lothar.com>
665 * docs/buildbot.texinfo (Index of master.cfg keys): add another
666 index, this one of things like c['sources'] and c['schedulers']
667 (indices): it looks like my clever idea of putting the @fooindex
668 commands in between the @node and the @subsection (to make the
669 HREF anchor jump to slightly above the section title, which works
670 much better in html) confused texinfo horribly, so I'm moving the
671 index tags back to be just after the @subsection marker. I also
672 added extra lines between the @node/@section paragraph and the
673 index tags, since I think maybe texinfo wants to see these be
676 * docs/Makefile (images): make sure images get built when
678 * docs/images/Makefile: same
680 * buildbot/scripts/runner.py: rename 'buildbot master' to
681 'buildbot create-master', and 'buildbot slave' to 'buildbot
683 * docs/buildbot.texinfo: same
686 * docs/buildbot.texinfo: reimplement the "useful classes" index
687 with actual texinfo indices. The .info rendering is a bit
688 weird-looking but it works well, and the HTML rendering is quite
689 nice. This also puts the index targets in the regular flow of the
690 text, which is easier to maintain.
692 2006-08-06 Brian Warner <warner@lothar.com>
694 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
695 Kevin Turner to prefer the environ= argument be a list rather than
696 a string. If it is a list, it will be joined with a platform-local
697 os.pathsep delimiter, and then prepended to any existing
698 $PYTHONPATH value. This works better in cross-platform (i.e.
699 windows buildslaves) environments when you need to push multiple
700 directories onto the front of the path.
701 (SlaveShellCommand): documented the new magic
702 * docs/buildbot.texinfo (ShellCommand): documented the new magic
703 in a user-visible form
705 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
706 Turner to prefer lists over strings when creating/running VC
707 commands during unit tests. This is clearly necessary to survive
708 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
709 renamed the wq() function to qw() though, since that's how it's
710 spelled in perl. Eventually I'd prefer all commands to be
711 specified with lists.
713 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
714 which are deleted (or not yet created) correctly. Also add
715 failsafe code to not explode if the file-watching poller doesn't
716 get started. Thanks to JP Calderone for the catch and the poller
718 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
720 * buildbot/test/emitlogs.py: same
722 * NEWS: summarize recent changes
724 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
725 clause to avoid the "host key mismatch" warning
727 * buildbot/process/step_twisted.py (Trial.start): if the
728 buildslave is too old to understand logfiles=, fall back to
729 running 'cat _trial_temp/test.log' like before.
730 (Trial.commandComplete): same. this takes advantage of the
731 LoggingBuildStep refactoring to stall commandComplete long enough
732 to run a second RemoteShellCommand.
734 * buildbot/process/step.py (LoggingBuildStep.startCommand):
735 refactor command-completion handling, to allow methods like
736 commandComplete/createSummary/evaluateCommand to return Deferreds.
737 (LoggingBuildStep._commandComplete): delete the refactored method
738 (ShellCommand.setupLogfiles): if the buildslave is too old to
739 understand logfiles=, put a warning message both into twistd.log
740 and into the otherwise empty user-visible LogFiles.
742 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
743 callers to provide the slave-side logfile name, rather than
744 forcing it to come from the local name of the LogFile.
745 (BuildStep.getSlaveName): new method
747 * buildbot/process/base.py (Build.getSlaveName): new method, so
748 steps can find out which buildslave they're running on
750 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
751 to match the s/cvs_ver/command_version/ change
753 2006-08-05 Brian Warner <warner@lothar.com>
755 * buildbot/slave/commands.py (command_version): replace the CVS
756 auto-updated cvs_ver keyword with a manually-updated variable,
757 since CVS is no longer the master repository. Add a description of
758 the remote API change starting in this version (2.1), specifically
759 the fact that SlaveShellCommand now accepts 'initial_stdin',
760 'keep_stdin_open', and 'logfiles'.
762 2006-07-31 Brian Warner <warner@lothar.com>
764 * docs/buildbot.texinfo (System Architecture): Finally add lots of
765 diagrams to describe how the whole system fits together. The
766 images themselves are kept in SVG files, with ascii-art versions
767 in corresponding .txt files. Texinfo knows how to interpolate the
768 text version into .info files, reference the .png versions from
769 .html files, and include .eps versions in the .ps format.
770 * docs/images/Makefile: tools to create .png and .eps
771 * docs/images/*.svg: created pictures with Inkscape.
772 * .darcs-boring: ignore the generated .eps and .png files
774 2006-07-24 Brian Warner <warner@lothar.com>
776 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
777 Scheduler names, since they cause setServiceParent to explode
779 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
781 2006-07-20 Brian Warner <warner@lothar.com>
783 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
784 which runs the buildbot unit tests
786 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
787 classes that are useful in master.cfg
789 2006-07-15 Brian Warner <warner@lothar.com>
791 * Makefile (some-apidocs): new target to build only some epydocs
793 * setup.py: minor comment.. does the classifiers= argument prevent
794 the setup.py script from working on python2.2/2.3?
796 * buildbot/scripts/sample.cfg: update manhole example, arrange into
799 * buildbot/twcompat.py: fix minor typo in comments
801 * buildbot/manhole.py: move all Manhole-related code out to this
802 module. Implement SSH-based manholes (with TwistedConch), and move
803 to conch's nifty line-editing syntax-coloring REPL shell instead
804 of the boring non-editing monochromatic (and deprecated) old
806 * buildbot/master.py: remove all Manhole-related code
807 (BuildMaster.loadConfig._add): make sure the old manhole is
808 removed before we add the new one
809 * docs/buildbot.texinfo (Debug options): document new Manhole options
811 * buildbot/twcompat.py (_which): fix some epydoc issues
812 * buildbot/status/html.py (Waterfall.__init__): same
814 2006-06-29 Brian Warner <warner@lothar.com>
816 * buildbot/interfaces.py: get Interface from b.twcompat to hush
817 deprecation warnings under newer Twisteds (by using
818 zope.interface.Interface instead of old twisted.python.components
820 * buildbot/slave/interfaces.py: same
822 2006-06-28 Brian Warner <warner@lothar.com>
824 * buildbot/slave/commands.py (SVN): add --non-interactive to all
825 svn commands, so it will fail immediately instead of hanging while
826 it waits for a username/password to be typed in.
828 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
829 log message if the step was shut down
831 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
832 obsolete reference to mktap.
834 2006-06-20 Brian Warner <warner@lothar.com>
836 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
837 test to include new 'logfiles' argument sent from master to slave
839 2006-06-19 Brian Warner <warner@lothar.com>
841 * buildbot/process/step_twisted.py (Trial): track Progress from
842 _trial_temp/test.log too
844 * buildbot/process/step.py (OutputProgressObserver): generalize
845 the earlier StdioProgressObserver into an OutputProgressObserver
846 that can track LogFiles other than stdio.
847 (LoggingBuildStep.__init__): same
849 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
850 _trial_temp/test.log, not a separate 'cat' command. TODO: this
851 will fail under windows because of os.sep issues. It might have
852 worked before if 'cat' was doing cygwin path conversion.
854 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
855 creation of LogFileWatchers
856 (ShellCommand._startCommand): and record the files that were
857 watched in the 'headers' section of the ShellCommand output
859 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
860 need to actually pass it to the slave if you want it to work.
861 (ShellCommand): document it a bit
863 * buildbot/test/test_shell.py: new test to validate LogFiles
864 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
866 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
867 before printing the last batch of lines, to test that the polling
868 logic is working properly
870 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
871 handling, making it possible to track multiple logs for a single
872 RemoteCommand. The previous single logfile is now known as the
874 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
875 (RemoteShellCommand.__init__): accept logfiles=
876 (LoggingBuildStep.startCommand): stdio_log is now one of many
877 (ShellCommand): added logfiles= argument, as well as a class-level
878 .logfiles attribute, which will be merged together to figure out
879 which logfiles should be tracked. The latter maybe be useful for
880 subclasses of ShellCommand which know they will aways produce
881 secondary logfiles in the same location.
883 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
884 and closeStdin() methods, preparing to make it possible to write
885 to a ShellCommand's stdin at any time, not just at startup. These
886 writes are buffered if the child process hasn't started yet.
887 (LogFileWatcher): new helper class to watch arbitrary logfiles
888 while a ShellCommand runs. This class polls the file every two
889 seconds, and sends back 10k chunks to the buildmaster.
890 (ShellCommand): rename stdin= to initialStdin=, and add
891 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
893 (ShellCommand.addLogfile): LogFile text is sent in updates with a
894 key of "log" and a value of (logname, data).
895 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
896 'logfiles' to the master-visible args dictionary.
897 (SourceBase.doPatch): match s/stdin/initialStdin/ change
900 * buildbot/test/test_vc.py (Patch.testPatch): same
903 * buildbot/test/emit.py: write to a logfile in the current
904 directory. We use this to figure out what was used as a basedir
905 rather than looking to see which copy of emit.py gets run, so that
906 we can run the commands from inside _trial_temp rather than inside
908 * buildbot/test/subdir/emit.py: same
909 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
910 argument rather than running from buildbot/test/
911 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
912 rather than using an implicit setUp()
913 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
914 (ShellBase.testShell1, etc): use explicit path to emit.py instead
915 of assuming that we're running in buildbot/test/ (and that '.' is
918 * buildbot/slave/commands.py (Command.doStart): refactor Command
919 startup/completion a bit: now the SlaveBuilder calls doStart(),
920 which is not meant for overridding by subclasses, and doStart()
921 calls start(), which is. Likewise the SlaveBuilder calls
922 doInterrupt(), and subclasses override interrupt(). This also puts
923 responsibility for maintaining .running in Command rather than in
925 (Command.doInterrupt): same
926 (Command.commandComplete): same, this is called when the deferred
927 returned by start() completes.
928 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
929 (SlaveBuilder.remote_interruptCommand): same
930 (SlaveBuilder.stopCommand): same
932 2006-06-16 Brian Warner <warner@lothar.com>
934 * buildbot/test/test_shell.py: new test file to contain everything
935 relating to ShellCommand
936 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
937 multiple logfiles in realtime" feature, not yet implemented
938 * buildbot/test/emitlogs.py: support file for testLogFiles
939 * docs/buildbot.texinfo (ShellCommand): document the feature
941 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
943 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
944 for tests which exercise SlaveCommands in isolation.
946 * buildbot/test/test_slavecommand.py: Move some utilities like
947 SignalMixin and FakeSlaveBuilder from here ..
948 * buildbot/test/runutils.py: .. to here, so they can be used by
949 other test classes too
950 * buildbot/test/test_vc.py: more SignalMixin refactoring
951 * buildbot/test/test_control.py: same
952 * buildbot/test/test_run.py: and some rmtree refactoring
954 2006-06-15 Brian Warner <warner@lothar.com>
956 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
957 'testBranch' to match other VC tests and have the tests run in
958 roughly increasing order of dependency
960 * buildbot/test/test_steps.py (LogObserver): new test to verify
961 LogObservers can be created at various times and still get
962 connected up properly
964 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
965 to create BuildStepStatus instances that actually work.
967 * buildbot/process/step.py (LogObserver): add outReceived and
968 errReceived base methods, to be overridden
970 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
971 API to take a name instead of a step, reducing the coupling
972 somewhat. This returns the BuildStepStatus object so it can be
973 passed to the new Step, instead of jamming it directly into the
975 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
977 * buildbot/process/base.py (Build.setupBuild): use both methods
978 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
979 process a bit to match
981 2006-06-14 Brian Warner <warner@lothar.com>
983 * docs/buildbot.texinfo (Adding LogObservers): add some limited
984 docs on writing new LogObserver classes
985 (Writing New Status Plugins): brief docs on how Status Plugins fit
988 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
989 implement a LogObserver that counts how many unit tests have been
991 (Trial.__init__): wire it in
992 * buildbot/test/test_twisted.py (Counter): unit test for it
994 * buildbot/process/step_twisted.py (HLint.commandComplete): update
995 to new cmd.logs['stdio'] scheme
996 (Trial.commandComplete): same
997 (BuildDebs.commandComplete): same
999 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
1000 LogFiles, instead of just a single one. The old single logfile is
1001 now called "stdio". LoggedRemoteCommand no longer creates a
1002 LogFile for you (the code to do that was broken anyway). If you
1003 don't create a "stdio" LogFile, then stdout/stderr will be
1005 (LogObserver): implement "LogObservers", which a BuildStep can add
1006 to parse the output of a command in real-time. The primary use is
1007 to provide more useful information to the Progress code, allowing
1008 better ETA estimates.
1009 (LogLineObserver): utility subclass which feeds complete lines to
1010 the parser instead of bytes.
1011 (BuildStep.progressMetrics): this is safer as a tuple
1012 (BuildStep.setProgress): utility method, meant to be called by
1014 (BuildStep.addLogObserver): new method, to be called at any time
1015 during the BuildStep (even before any LogFiles have been created),
1016 to attach (or schedule for eventual attachment) a LogObserver to a
1018 (StdioProgressObserver): new LogObserver which replaces the old
1019 "output" progress gatherer
1020 (LoggingBuildStep.__init__): same
1021 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
1022 (LoggingBuildStep._commandComplete): must use logs['stdio']
1023 instead of the old single ".log" attribute.
1024 * buildbot/status/builder.py (LogFile): remove old logProgressTo
1025 functionality, now subsumed into StdioProgressObserver
1026 * buildbot/test/test_status.py (Subscription._testSlave_2): the
1027 log name changed from "output" to "stdio".
1030 * buildbot/interfaces.py (ILogFile): add the Interface used from
1031 the BuildStep towards the LogFile
1032 (ILogObserver): and the one provided by a LogObserver
1033 * buildbot/status/builder.py (LogFile): implement it
1035 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
1036 HEADER constants here ..
1037 * buildbot/status/builder.py (STDOUT): .. from here
1039 2006-06-13 Brian Warner <warner@lothar.com>
1041 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
1042 compatibility with python2.2, which doesn't have the 'substr in
1044 (TestP4Poller.makeTime): utility function to construct the
1045 timestamp using the same strptime() approach as p4poller does. It
1046 turns out that time.mktime() behaves slightly differently under
1047 python2.2, probably something to do with the DST flag, and that
1048 causes the test to fail under python2.2. (changing the mktime()
1049 arguments to have dst=0 instead of -1 caused it to fail under
1050 python2.3. Go figure.)
1051 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
1053 2006-06-12 Brian Warner <warner@lothar.com>
1055 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
1056 proper Perforce (P4) support. Many many thanks to Scott Lamb for
1057 contributing such an excellent patch, including docs and unit
1058 tests! This makes it *so* much easier to apply. I had to update
1059 test_vc.py to handle some recent refactorings, but everything else
1060 applied smoothly. The only remaining thing I'd like to fix would
1061 be to remove the hard-wired port 1666 used by p4d, and allow it to
1062 claim any unused port. This would allow two copies of the test
1063 suite to run on the same host at the same time, as well as
1064 allowing the test suite to run while a real (production) p4d was
1065 running on the same host. Oh, and maybe we should add a warning to
1066 step.P4 that gets emitted if the slave is too old to provide the
1067 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
1068 * buildbot/slave/commands.py (P4): same
1069 (P4Sync): same, some minor updates
1070 * buildbot/changes/p4poller.py: same
1071 * docs/buildbot.texinfo: same
1072 * buildbot/test/test_p4poller.py: same
1073 * buildbot/test/test_vc.py (P4): same
1075 * setup.py: add Trove classifiers for PyPI
1077 2006-06-08 Brian Warner <warner@allmydata.com>
1079 * buildbot/status/client.py
1080 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
1081 changing this from getCurrentBuild() to getCurrentBuilds(). Each
1082 build needs to be IRemote'd separately, rather than IRemote'ing
1083 the whole list at once. I can't wait until newpb's serialization
1084 adapters make this unnecessary.
1086 2006-06-06 Brian Warner <warner@lothar.com>
1088 * buildbot/process/step.py (WithProperties): make this inherit
1089 from ComparableMixin, so that reloading an unchanged config file
1090 doesn't cause us to spuriously reload any Builders which use them.
1091 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
1094 2006-06-03 Brian Warner <warner@lothar.com>
1096 * contrib/windows/{setup.py, buildbot_service.py}: add support for
1097 running py2exe on windows, contributed by Mark Hammond. Addresses
1098 SF#1401121, but I think we still need to include
1099 buildbot/scripts/sample.cfg
1100 * setup.py: include buildbot_service.py as a script under windows
1101 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
1102 a py2exe application), get the icon/css datafiles from a different
1105 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
1106 double-escape the build URL. Thanks to Olivier Bonnet for the
1107 patch. Fixes SF#1452801.
1109 2006-06-02 Brian Warner <warner@lothar.com>
1111 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
1112 first six columns of 'svnlook' output, not just the first column,
1113 since property changes appear in the other five. Thanks to Olivier
1114 Bonnet for the patch. Fixes SF#1398174.
1116 2006-06-01 Brian Warner <warner@lothar.com>
1118 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
1119 the fake build, so that title= has something to be set to
1121 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
1122 attribute of the "Build #NN" link in the yellow start-the-build
1123 box to the build's reason. This means that you get a little
1124 tooltip explaining why the build was done when you hover over the
1125 yellow box. Thanks to Zandr Milewski for the suggestion.
1127 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
1128 (Box.setETA): handle ETA=None (by stopping the timer)
1129 (Box.update): make the [soon] text less different than the usual
1130 text, so the rest of the text doesn't flop around so much. It
1131 would be awfully nice to figure out how to center this stuff.
1132 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
1134 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
1135 by default, so that any ShellCommand which fails marks the overall
1136 build as a failure. I should have done this from the beginning.
1137 Add flunkOnFailure=False to the arguments if you want to turn off
1140 2006-05-30 Brian Warner <warner@lothar.com>
1142 * buildbot/clients/gtkPanes.py: add a third row: now it shows
1143 last-build/current-build/current-step. Show what step is currently
1144 running. Show ETA for both the overall build and the current step.
1145 Update GTK calls to modern non-deprecated forms. There's still a
1146 lot of dead code and debug noise to remove.
1148 * buildbot/process/step_twisted.py (Trial): set the step name, so it
1149 shows up properly in status displays
1151 2006-05-28 Brian Warner <warner@lothar.com>
1153 * buildbot/test/test_properties.py (Run.testInterpolate): on the
1154 build we use to verify that WithProperties works:
1156 ** set flunkOnFailure=True so that build failures get noticed
1157 ** set workdir='.' so that the build succeeds, otherwise it is trying
1158 to touch 'build/something', and 'build/' doesn't exist because
1159 usually that's created by a Source step
1160 ** set timeout=10, because Twisted-1.3.0 has a race condition that
1161 this test somehow triggers, in which the 'touch' process becomes
1162 a zombie and we wait for th etimeout before giving up on it.
1164 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
1165 to log the Build results and step logs to the twisted log.
1166 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
1167 what went wrong if a build was expected to succeed but didn't.
1169 * buildbot/process/step_twisted.py (Trial): set the default
1170 trialMode to '--reporter=bwverbose', which specifies verbose
1171 black-and-white text. Back in twisted-1.3/2.0 days we had to use
1172 '-to', but those are completely missing in modern Twisteds.
1174 * buildbot/scripts/sample.cfg: make the sample Manhole config use
1175 a localhost-only port, to encourage better security
1177 * docs/buildbot.texinfo (Change Sources): mention
1180 * .darcs-boring: add a Darcs boringfile
1182 * README (REQUIREMENTS): stop claiming compatibility with
1185 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
1188 2006-05-27 Brian Warner <warner@lothar.com>
1190 * buildbot/__init__.py: bump to 0.7.3+ while between releases
1191 * docs/buildbot.texinfo: same
1193 2006-05-23 Brian Warner <warner@lothar.com>
1195 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
1196 * docs/buildbot.texinfo: set version to match
1197 * NEWS: update for 0.7.3
1199 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
1200 give a quick mapping from VC system to possible ChangeSources
1201 (Build Properties): add 'buildername'
1203 * buildbot/process/base.py (Build.setupStatus): oops, set
1204 'buildername' and 'buildnumber' properties
1205 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
1208 2006-05-22 Brian Warner <warner@lothar.com>
1210 * docs/buildbot.texinfo (Build Properties): explain the syntax of
1211 property interpolation better
1213 * README (INSTALLATION): remove old '-v' argument from recommended
1216 * docs/buildbot.texinfo (ShellCommand): add docs for description=
1217 and descriptionDone= arguments. Thanks to Niklaus Giger for the
1220 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
1221 'svnversion' instead of grepping the output of 'svn info', much
1222 simpler and avoids CR/LF problems on windows. Thanks to Olivier
1223 Bonnet for the suggestion.
1224 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
1225 require the WC_PATH argument, so run 'svnversion .' instead.
1227 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
1228 aren't supposed to have 'self' in their argument list
1230 2006-05-21 Brian Warner <warner@lothar.com>
1232 * buildbot/process/step.py (ShellCommand.start): make
1233 testInterpolate pass. I was passing the uninterpolated command to
1234 the RemoteShellCommand constructor
1235 (ShellCommand._interpolateProperties): oops, handle non-list
1236 commands (i.e. strings with multiple words separated by spaces in
1237 them) properly, instead of forgetting about them.
1239 * buildbot/test/test_properties.py (Run.testInterpolate): new test
1240 to actually try to use build properties in a real build. This test
1242 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
1243 to start and evaluate builds
1245 * buildbot/test/test__versions.py: add a pseudo-test to record
1246 what version of Twisted/Python/Buildbot are running. This should
1247 show up at the beginning of _trial_tmp/test.log, and exists to help
1248 debug other problems.
1250 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
1251 a filename to be served as 'robots.txt' to discourage web spiders.
1252 Adapted from a patch by Tobi Vollebregt, thanks!
1253 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
1254 (Waterfall.test_waterfall): tweak the way that filenames are put
1255 into the config file, to accomodate windows pathnames better.
1257 * docs/buildbot.texinfo (HTML Waterfall): document it
1259 * buildbot/process/process_twisted.py
1260 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
1261 changed the build process. The new setup.py no longer takes the
1263 (FullTwistedBuildFactory.__init__): same
1264 (TwistedReactorsBuildFactory.__init__): same
1266 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
1267 be placed in the [hooks] section of the central repository (the
1268 one that everybody pushes changes to).
1270 2006-05-20 Brian Warner <warner@lothar.com>
1272 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
1273 .darcs-context file, use binary mode. I think this was causing a
1274 Darcs failure under windows.
1276 2006-05-19 Brian Warner <warner@lothar.com>
1278 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
1279 use a timezone string of +0000 and gmtime, since this timestamp is
1280 sent to a buildmaster and %z is broken.
1282 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
1283 string and localtime, since this timestamp will only be consumed
1284 locally, and %z is broken.
1286 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
1287 gmtime, since this timestamp is returned to the buildmaster, and
1290 2006-05-18 Brian Warner <warner@lothar.com>
1292 * NEWS: update in preparation for next release
1294 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
1295 setup-repository and do-we-have-the-vc-tools code into a separate
1296 "helper" class, which sticks around in a single module-level
1297 object. This seems more likely to continue to work in the future
1298 than having it hide in the TestCase and hope that TestCases stick
1299 around for a long time.
1301 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
1302 addremove' has been deprecated in recent versions of mercurial, so
1303 use 'hg add' instead
1305 2006-05-07 Brian Warner <warner@lothar.com>
1307 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
1308 operating under windows, move the file before opening it, since
1309 you can't rename a file that somebody has open.
1311 * buildbot/process/base.py (Build.setupBuild): if something goes
1312 wrong while creating a Step, log the name and arguments, since the
1313 error message when you get the number of arguments wrong is really
1316 2006-05-06 Brian Warner <warner@lothar.com>
1318 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
1319 bugs in twisted-specific code not covered by my unit tests, this
1320 time use 'cmd' argument instead of self.cmd
1322 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
1323 fix stupid braino: either use startwith or find()==0, not both.
1324 (TwistedReactorsBuildFactory.__init__): another dumb typo
1326 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
1327 mark this test as TODO under windows, since process-killing seems
1328 dodgy there. We'll come back to this later and try to fix it
1331 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
1332 and don't include a timezone
1333 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
1334 This should avoid the windows-with-verbose-timezone-name problem
1336 (Patch.testPatch): add a test which runs 'patch' with less
1337 overhead than the full VCBase.do_patch sequence, to try to isolate
1338 a windows test failure. This one uses slave.commands.ShellCommand
1339 and 'patch', but none of the VC code.
1341 * buildbot/slave/commands.py (getCommand): use which() to find the
1342 executables for 'cvs', 'svn', etc. This ought to help under
1345 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
1346 working directory before starting. If an earlier test failed, the
1347 leftover directory would mistakenly flunk a later test.
1348 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
1349 Make sure that we use the right commandlines if which("tla") picks
1350 up "tla.exe" (as it does under windows).
1351 (TlaSupport.do_get): factor out this tla-vs-baz difference
1352 (TlaSupport.vc_create): more tla-vs-baz differences
1354 * buildbot/test/test_slavecommand.py
1355 (ShellBase.testShellMissingCommand): stop trying to assert
1356 anything about the error message: different shells on different
1357 OSes with different languages makes it hard, and it really isn't
1358 that interesting of a thing to test anyway.
1360 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
1361 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
1362 "Panther"), because it has a bug which flunks a couple tests in
1363 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
1364 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
1365 able to test that yet.
1367 2006-04-30 Brian Warner <warner@lothar.com>
1369 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
1370 make sure child commands emit messages in english, so our regexps
1371 will match. Thanks to Nikaus Giger for identifying the problems.
1372 (VCBase._do_vctest_export_1): mode="export" is not responsible
1373 for setting the "got_revision" property, since in many cases it is
1374 not convenient to determine.
1375 (SVNSupport.capable): when running 'svn --version' to check for
1376 ra_local, we want error messages in english
1377 * buildbot/test/test_slavecommand.py
1378 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
1379 to emit the error message in english
1381 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
1382 the environment with $LC_ALL="C" so that Commands which need to
1383 parse the output of their child processes can obtain it in
1385 (SVN.parseGotRevision): call "svn info" afterwards instead of
1386 watching the output of the "svn update" or "svn checkout".
1387 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
1388 (Arch.parseGotRevision): same
1389 (Bazaar.parseGotRevision): same
1390 (Mercurial.parseGotRevision): same
1392 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
1393 $LC_ALL="C" when running commands under 'buildbot try', too
1395 * buildbot/test/__init__.py: remove the global os.environ()
1396 setting, instead we do it just for the tests that run commands and
1397 need to parse their output.
1399 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
1400 remove the overly-short .timeout on this test, because non-DNotify
1401 platforms must fall back to polling which happens at 10 second
1402 intervals, so a 5 second timeout would never succeed.
1404 2006-04-24 Brian Warner <warner@lothar.com>
1406 * docs/buildbot.texinfo (Installing the code): update trial
1407 invocation, SF#1469116 by Niklaus Giger.
1408 (Attributes of Changes): updated branch-name examples to be
1409 a bit more realistic, SF#1475240 by Stephen Davis.
1411 * contrib/windows/buildbot2.bat: utility wrapper for windows
1412 developers, contributed by Nick Trout (after a year of neglect..
1413 sorry!). SF#1194231.
1415 * buildbot/test/test_vc.py (*.capable): store the actual VC
1416 binary's pathname in VCS[vcname], so it can be retrieved later
1417 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
1418 strip out non-numeric timezone information, specifically the funky
1419 German string that his system produced that confuses CVS.
1420 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
1421 allow Darcs tests to work on windows
1422 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
1423 procutils.which() everywhere, to allow tryclient to work under
1424 windows. Also from Niklaus Giger, SF#1463394.
1426 * buildbot/twcompat.py (which): move the replacement for a missing
1427 twisted.python.procutils.which from test_vc.py to here, so it can
1428 be used in other places too (specifically tryclient.py)
1430 2006-04-23 Brian Warner <warner@lothar.com>
1432 * buildbot/status/html.py (StatusResourceBuild.body): replace the
1433 bare buildbotURL/projectName line with a proper DIV, along with a
1434 CSS class of "title", from Stefan Seefeld (SF#1461675).
1435 (WaterfallStatusResource.body0): remove the redundant 'table'
1436 class from the table
1437 (WaterfallStatusResource.body): same. Also add class="LastBuild"
1438 to the top-row TR, and class="Activity" to the second-row TR,
1439 rather than putting them in the individual TD nodes.
1441 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
1442 'got_revision' build property for all VC systems that implement
1443 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
1445 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
1446 to determine which revision we actually obtained
1447 (CVS.parseGotRevision): implement this for CVS, which just means
1448 to grab a timestamp. Not ideal, and it depends upon the buildslave
1449 having a clock that is reasonably well syncronized with the server,
1450 but it's better than nothing.
1451 (SVN.parseGotRevision): implement it for SVN, which is accurate
1452 (Darcs.parseGotRevision): same
1453 (Arch.parseGotRevision): same
1454 (Bazaar.parseGotRevision): same
1455 (Mercurial.parseGotRevision): same
1457 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
1458 keep a record of all non-stdout/stderr/header/rc status updates,
1459 for the benefit of RemoteCommands that send other useful things,
1461 (Source.commandComplete): put any 'got_revision' status values
1462 into a build property of the same name
1465 * buildbot/process/step_twisted.py (Trial): update to deal with
1466 new ShellCommand refactoring
1468 * docs/buildbot.texinfo (Build Properties): document new feature
1469 that allows BuildSteps to get/set Build-wide properties like which
1470 revision was requested and/or checked out.
1472 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
1473 * buildbot/status/builder.py (BuildStatus.getProperty): implement
1474 it. Note that this bumps the persistenceVersion of the saved Build
1475 object, so add the necessary upgrade-old-version logic to include
1476 an empty properties dict.
1478 * buildbot/process/base.py (Build.setProperty): implement it
1479 (Build.getProperty): same
1480 (Build.startBuild): change build startup to set 'branch',
1481 'revision', and 'slavename' properties at the right time
1483 * buildbot/process/step.py (BuildStep.__init__): change setup to
1484 require 'build' argument in a better way
1485 (LoggingBuildStep): split ShellCommand into two pieces, for better
1486 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
1487 a single RemoteCommand that sends stdout/stderr status text. It
1488 also provides the usual commandComplete / createSummary /
1489 evaluateCommand / getText methods to be overridden...
1490 (ShellCommand): .. whereas ShellCommand is specifically for
1491 running RemoteShellCommands. Other shell-like BuildSteps (like
1492 Source) can inherit from LoggingBuildStep instead of ShellCommand
1493 (WithProperties): marker class to do build-property interpolation
1494 (Source): inherit from LoggingBuildStep instead of ShellCommand
1497 * buildbot/test/test_properties.py: test new functionality
1499 2006-04-21 Brian Warner <warner@lothar.com>
1501 * buildbot/test/test_vc.py: rename testBranch to
1502 testCheckoutBranch to keep the tests in about the right
1505 2006-04-18 Brian Warner <warner@lothar.com>
1507 * docs/buildbot.texinfo (PBListener): improve cross-references
1508 between PBListener and 'buildbot statusgui', thanks to John Pye
1511 2006-04-17 Brian Warner <warner@lothar.com>
1513 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
1514 running under Twisted-1.3.0, otherwise skipped tests are reported
1517 * all: use isinstance() instead of 'type(x) is foo', suggested by
1520 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
1521 oops, fix a brain-fade from the other week, when making the
1522 addStep changes. I changed all the __init__ upcalls to use the
1523 wrong superclass name.
1524 (FullTwistedBuildFactory.__init__): same
1525 (TwistedDebsBuildFactory.__init__): same
1526 (TwistedReactorsBuildFactory.__init__): same
1527 (TwistedBuild.isFileImportant): use .startswith for clarity,
1528 thanks to Neal Norwitz for the suggestions.
1530 * contrib/viewcvspoll.py: script to poll a viewcvs database for
1531 changes, then deliver them over PB to a remote buildmaster.
1533 * contrib/svnpoller.py: added script by John Pye to poll a remote
1534 SVN repository (by running 'svn log') from a cronjob, and run
1535 'buildbot sendchange' to deliver the changes to a remote
1537 * contrib/svn_watcher.py: added script by Niklaus Giger (a
1538 modification of svnpoller.py), same purpose, but this one loops
1539 internally (rather than expecting to run from a cronjob) and works
1541 * contrib/README.txt: same
1543 2006-04-11 Brian Warner <warner@lothar.com>
1545 * all: fix a number of incorrect names and missing imports, thanks
1546 to Anthony Baxter for the patch.
1547 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
1548 remove unused buggy method.
1549 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
1550 comes from shutil, not "shutils"
1551 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
1552 (Arch.checkSlaveVersion): same
1553 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
1555 * buildbot/process/step_twisted2.py: add some missing imports
1556 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
1557 this code used to live in twisted.internet.defer
1559 2006-04-10 Brian Warner <warner@lothar.com>
1561 * buildbot/process/step.py (Mercurial): add Mercurial support
1562 * buildbot/slave/commands.py (Mercurial): same
1563 * buildbot/scripts/tryclient.py (MercurialExtractor): same
1564 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
1565 not yet tested, but 'try' support *is* covered
1566 * docs/buildbot.texinfo (Mercurial): document it
1568 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
1569 some debugging messages (turned off)
1570 * buildbot/test/test_vc.py: improve debug messages
1572 2006-04-07 Brian Warner <warner@lothar.com>
1574 * buildbot/test/test_vc.py (which): define our own which() in case
1575 we can't import twisted.python.procutils, because procutils doesn't
1576 exist in Twisted-1.3
1578 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
1579 of SlaveLocks for performance tests
1581 * docs/examples/twisted_master.cfg: update to match current usage
1583 * buildbot/changes/p4poller.py (P4Source): add new arguments:
1584 password, p4 binary, pollinterval, maximum history to check.
1585 Patch from an anonymous sf.net contributor, SF#1219384.
1586 * buildbot/process/step.py (P4Sync.__init__): add username,
1587 password, and client arguments.
1588 * buildbot/slave/commands.py (P4Sync): same
1590 2006-04-05 Brian Warner <warner@lothar.com>
1592 * buildbot/process/factory.py (BuildFactory.addStep): new method
1593 to add steps to a BuildFactory. Use it instead of f.steps.append,
1594 and you can probably avoid using the s() convenience function.
1595 Patch from Neal Norwitz, sf.net #1412605.
1596 (other): update all factories to use addStep
1597 * buildbot/process/process_twisted.py: update all factories to use
1600 2006-04-03 Brian Warner <warner@lothar.com>
1602 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
1603 work under windows too. Adapted from a patch by Niklaus Giger,
1604 addresses SF#1463399.
1606 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
1607 spawned commands emit parseable results in english and not some
1608 other language. Patch from Niklaus Giger, SF#1463395.
1610 * README (INSTALLATION): discourage users from running unit tests on
1611 a "network drive", patch from Niklaus Giger, SF#1463394.
1613 2006-03-22 Brian Warner <warner@lothar.com>
1615 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
1616 function to turn a repository-relative pathname into a (branch,
1617 branch-relative-filename) tuple. Change this function to handle
1618 the branch naming policy used by your Subversion repository.
1619 Thanks to AllMyData.com for sponsoring this work.
1621 2006-03-16 Brian Warner <warner@lothar.com>
1623 * buildbot/scripts/sample.cfg: add python-mode declaration for
1624 vim. Thanks to John Pye for the patch.
1626 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
1627 command line, mention the importance of running 'crontab' as the
1628 buildmaster/buildslave user. Thanks to John Pye for the catch.
1630 2006-03-13 Brian Warner <warner@lothar.com>
1632 * buildbot/status/words.py (IRC): add an optional password=
1633 argument, which will be sent to Nickserv in an IDENTIFY message at
1634 login, to claim the nickname. freenode requires this before the
1635 bot can sent (or reply to) private messages. Thanks to Clement
1636 Stenac for the patch.
1637 * docs/buildbot.texinfo (IRC Bot): document it
1639 * buildbot/status/builder.py (LogFile.merge): don't write chunks
1640 larger than chunkSize. Fixes SF#1349253.
1641 * buildbot/test/test_status.py (Log.testLargeSummary): test it
1642 (Log.testConsumer): update to match new internal chunking behavior
1644 2006-03-12 Brian Warner <warner@lothar.com>
1646 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
1648 * buildbot/test/test_maildir.py (MaildirTest): rename the
1649 'timeout' method, as it collides with trial's internals
1651 * buildbot/scripts/runner.py: add 'buildbot restart' command
1652 (stop): don't sys.exit() out of here, otherwise restart can't work
1653 * docs/buildbot.texinfo (Shutdown): document it
1655 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
1656 * buildbot/status/html.py (Waterfall.__init__): same
1657 * buildbot/process/builder.py (Builder.startBuild): same
1658 * buildbot/process/base.py (BuildRequest): same
1659 * buildbot/sourcestamp.py (SourceStamp): same
1660 * buildbot/scheduler.py (Nightly): same
1662 * buildbot/__init__.py (version): bump to 0.7.2+ while between
1664 * docs/buildbot.texinfo: same
1666 2006-02-17 Brian Warner <warner@lothar.com>
1668 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
1669 * docs/buildbot.texinfo: set version number to match
1670 * NEWS: update for 0.7.2
1672 2006-02-16 Brian Warner <warner@lothar.com>
1674 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
1676 2006-02-09 Brian Warner <warner@lothar.com>
1678 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1679 add text to explain per-build branch parameters
1680 * NEWS: mention --umask
1682 2006-02-08 Brian Warner <warner@lothar.com>
1684 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
1686 (SlaveOptions.optParameters): add --umask, to make it possible to
1687 make buildslave-generated files (including build products) be
1690 * buildbot/slave/bot.py (BuildSlave.startService): same
1692 2006-01-23 Brian Warner <warner@lothar.com>
1694 * buildbot/status/builder.py: urllib.quote() all URLs that include
1695 Builder names, so that builders can include characters like '/'
1696 and ' ' without completely breaking the resulting HTML. Thanks to
1697 Kevin Turner for the patch.
1698 * buildbot/status/html.py: same
1699 * buildbot/test/test_web.py (GetURL.testBuild): match changes
1701 * NEWS: update in preparation for upcoming release
1703 2006-01-18 Brian Warner <warner@lothar.com>
1705 * docs/examples/twisted_master.cfg: update to match the Twisted
1706 buildbot: remove python2.2, switch to exarkun's buildslaves,
1707 disable the .deb builder until we figure out how to build twisted
1708 .debs from SVN, add some ktrace debugging to the OS-X build
1709 process and remove the qt build, remove threadless builders,
1710 change freebsd builder to use landonf's buildslave.
1712 2006-01-12 Brian Warner <warner@lothar.com>
1714 * buildbot/master.py (Manhole.__init__): let port= be a strports
1715 specification string, but handle a regular int for backwards
1716 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
1717 used in master.cfg to limit connections to just the local host.
1718 (BuildMaster.loadConfig): same for c['slavePortnum']
1719 * buildbot/scheduler.py (Try_Userpass.__init__): same
1720 * buildbot/status/client.py (PBListener.__init__): same
1721 * buildbot/status/html.py (Waterfall.__init__): same, for both
1722 http_port and distrib_port. Include backwards-compatibility checks
1723 so distrib_port can be a filename string and still mean unix:/foo
1724 * docs/buildbot.texinfo (Setting the slaveport): document it
1725 (Debug options): same
1726 (HTML Waterfall): same
1729 * buildbot/test/test_config.py (ConfigTest): test it
1731 * buildbot/master.py (BuildMaster.loadConfig): wait for the
1732 slaveport's disownServiceParent deferred to fire before opening
1733 the new one. Fixes an annoying bug in the unit tests.
1735 2006-01-03 Brian Warner <warner@lothar.com>
1737 * buildbot/master.py (BuildMaster): remove the .schedulers
1738 attribute, replacing it with an allSchedulers() method that looks
1739 for all IService children that implement IScheduler. Having only
1740 one parent/child relationship means fewer opportunities for bugs.
1741 (BuildMaster.allSchedulers): new method
1742 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
1743 also fix ugly bug that caused any config-file reload to
1744 half-forget about the earlier Schedulers, causing an exception
1745 when a Change arrived and was handed to a half-connected
1746 Scheduler. The exception was in scheduler.py line 54ish:
1747 self.parent.submitBuildSet(bs)
1748 exceptions.AttributeError: 'NoneType' object has no attribute
1750 (BuildMaster.addChange): update to use allSchedulers()
1752 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
1753 to work properly with twisted-1.3.0, where you must explicitly
1754 include the __implements__ from parent classes
1755 (BaseScheduler.__repr__): make it easier to distinguish distinct
1757 (BaseUpstreamScheduler.__implements__): same
1759 * buildbot/status/builder.py (Status.getSchedulers): update to
1761 * buildbot/test/test_run.py (Run.testMaster): same
1762 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
1763 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
1764 make sure Scheduler instances are left alone when an identical
1765 config file is reloaded
1766 (ConfigElements.testSchedulers): make sure Schedulers are properly
1769 * Makefile (TRIALARGS): my local default Twisted version is now
1770 2.1.0, update the trial arguments accordingly
1772 2005-12-22 Brian Warner <warner@lothar.com>
1774 * docs/examples/twisted_master.cfg: merge changes from pyr: add
1777 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
1778 addChange in the parent class, although I suspect this should be
1779 fixed better in the future.
1781 2005-11-26 Brian Warner <warner@lothar.com>
1783 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
1784 explode when branch==None, thanks to Kevin Turner for the catch
1785 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
1788 * buildbot/__init__.py (version): bump to 0.7.1+ while between
1790 * docs/buildbot.texinfo: same
1792 2005-11-26 Brian Warner <warner@lothar.com>
1794 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
1795 * docs/buildbot.texinfo: set version number to match
1797 2005-11-26 Brian Warner <warner@lothar.com>
1799 * NEWS: update for 0.7.1
1801 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1802 sure that unsubscribe works even if we never sent an ETA update.
1803 Also, don't explode on duplicate unsubscribe.
1804 (BuildStepStatus.addLog): make the convenience "return self"-added
1805 watcher automatically unsubscribe when the Step finishes.
1806 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1807 (BuildStatus.stepStarted): same auto-unsubscribe
1808 (BuilderStatus.buildStarted): same auto-unsubscribe
1810 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1812 (IStatusReceiver.stepStarted): same
1813 (IStatusReceiver.logStarted): same
1815 * buildbot/test/test_run.py (Status): move the Status test..
1816 * buildbot/test/test_status.py (Subscription): .. to here
1818 2005-11-25 Brian Warner <warner@lothar.com>
1820 * NEWS: more updates
1822 * buildbot/locks.py: fix the problem in which loading a master.cfg
1823 file that changes some Builders (but not all of them) can result
1824 in having multiple copies of the same Lock. Now, the real Locks
1825 are kept in a table inside the BotMaster, and the Builders/Steps
1826 use "LockIDs", which are still instances of MasterLock and
1827 SlaveLock. The real Locks are instances of the new RealMasterLock
1828 and RealSlaveLock classes.
1829 * buildbot/master.py (BotMaster.getLockByID): new method to
1830 convert LockIDs into real Locks.
1831 * buildbot/process/base.py (Build.startBuild): convert LockIDs
1832 into real Locks before building
1833 * buildbot/process/step.py (BuildStep.startStep): same
1834 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1835 exercises the problem
1838 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1839 what Schedulers are available
1841 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1842 work by Dobes Vandermeer and hacked mercilessly by me. This offers
1843 'cron'-style build scheduling at certain times of day, week,
1845 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1847 * buildbot/scheduler.py (Scheduler): change fileIsImportant
1848 handling: treat self.fileIsImportant more as an attribute that
1849 contains a callable than as a method. If the attribute is None,
1850 don't call it and assume all filenames are important. It is still
1851 possible to provide a fileIsImportant method in a subclass,
1853 (AnyBranchScheduler): handle fileIsImportant=None, previously it
1855 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1856 test using AnyBranchScheduler with fileIsImportant=None
1858 2005-11-24 Brian Warner <warner@lothar.com>
1860 * buildbot/test/test_config.py (StartService): don't claim a fixed
1861 port number, instead set slavePort=0 on the first pass, figure out
1862 what port was allocated, then switch to a config file that uses
1865 * buildbot/master.py (BuildMaster.loadConfig): close the old
1866 slaveport before opening the new one, because unit tests might
1867 replace slavePort=0 with the same allocated portnumber, and if we
1868 don't wait for the old port to close first, we get a "port already
1869 in use" error. There is a tiny race condition here, but the only
1870 threat is from other programs that bind (statically) to the same
1871 port number we happened to be allocated, and only if those
1872 programs use SO_REUSEADDR, and only if they get control in between
1875 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
1877 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
1878 deleted ChangeSources before adding any new ones
1879 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
1880 compare_attrs, to make sure that a config-file reload does not
1881 unnecessarily replace an unmodified ChangeSource instance
1882 * buildbot/test/test_config.py (ConfigTest.testSources): update
1884 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
1885 mean "don't build anything", and add a warning if it gets used
1886 because it isn't actually useful.
1888 * contrib/svn_buildbot.py: update example usage to match the port
1889 number that gets used by the PBChangeSource
1890 * buildbot/scripts/sample.cfg: add example of PBChangeSource
1892 2005-11-22 Brian Warner <warner@lothar.com>
1894 * NEWS: start collecting items for next release
1896 * buildbot/process/step.py (SVN.computeSourceRevision): assume
1897 revisions are strings
1898 (P4Sync.computeSourceRevision): same
1900 * buildbot/status/html.py (StatusResourceBuild.body): add a link
1901 to the Buildbot's overall status page
1902 (StatusResourceBuilder.body): same
1904 2005-11-15 Brian Warner <warner@lothar.com>
1906 * buildbot/master.py (BuildMaster.loadConfig): serialize the
1907 config-file loading, specifically to make sure old StatusTargets
1908 are finished shutting down before new ones start up (thus
1909 resolving a bug in which changing the Waterfall object would fail
1910 because both new and old instances were claiming the same
1911 listening port). Also load new Schedulers after all the new
1912 Builders are set up, in case they fire off a new build right away.
1913 * buildbot/test/test_config.py (StartService): test it
1915 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
1916 the branch name to the mail body
1918 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
1919 Without it, a config-file reload fails to update an existing
1921 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
1922 username/passwd to compare_attrs, for the same reason
1923 * buildbot/status/html.py (Waterfall): add favicon to
1924 compare_attrs, same reason
1926 2005-11-05 Brian Warner <warner@lothar.com>
1928 * buildbot/scripts/tryclient.py (createJobfile): stringify the
1929 baserev before stuffing it in the jobfile. This resolves problems
1930 under SVN (and probably Arch) where revisions are expressed as
1931 numbers. I'm inclined to use string-based revisions everywhere in
1932 the future, but this fix should be safe for now. Thanks to Steven
1933 Walter for the patch.
1935 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
1936 binary mode when opening pickle files, to make windows work
1937 better. Thanks to Dobes Vandermeer for the catch.
1938 * buildbot/status/builder.py (BuildStatus.saveYourself): same
1939 (BuilderStatus.getBuildByNumber): same
1940 (Status.builderAdded): same
1941 * buildbot/master.py (BuildMaster.loadChanges): same
1943 * buildbot/util.py (Swappable): delete unused leftover code
1945 * buildbot/process/step.py (SVN): when building on a non-default
1946 branch, add the word "[branch]" to the VC step's description, so
1947 it is obvious that we're not building the usual stuff. Likewise,
1948 when we are building a specific revision, add the text "rNNN" to
1949 indicate what that revision number is. Thanks to Brad Hards and
1950 Nathaniel Smith for the suggestion.
1951 (Darcs.startVC): same
1952 (Arch.startVC): same
1953 (Bazaar.startVC): same
1955 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
1956 typo, caught by Mark Dillavou, closes SF#1216636.
1958 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
1959 about a test to add some day
1961 * docs/examples/twisted_master.cfg: update: bot1 can now handle
1962 the 'full-2.3' build, and the 'reactors' build is now run under
1963 python-2.4 because the buildslave no longer has gtk/etc bindings
1964 for earlier versions.
1966 2005-11-03 Brian Warner <warner@lothar.com>
1968 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
1969 method, takes an IBuildStatus and rebuilds it. It might make more
1970 sense to add this to IBuildControl instead, but that instance goes
1971 away completely once the build has finished, and resubmitting
1972 builds can take place weeks later.
1973 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1974 * buildbot/status/html.py (StatusResourceBuild): also stash an
1975 IBuilderControl so we can use resubmitBuild.
1976 (StatusResourceBuild.body): render "resubmit" button if we can.
1977 Also add hrefs for each BuildStep
1978 (StatusResourceBuild.rebuild): add action for "resubmit" button
1979 (StatusResourceBuilder.getChild): give it an IBuilderControl
1981 * buildbot/status/builder.py (Status.getURLForThing): change the
1982 URL for BuildSteps to have a "step-" prefix, so the magic URLs
1983 that live as targets of buttons like "stop" and "rebuild" can't
1985 * buildbot/status/builder.py (Status.getURLForThing): same
1986 * buildbot/status/html.py (StatusResourceBuild.getChild): same
1987 (StepBox.getBox): same
1988 * buildbot/test/test_web.py (GetURL): same
1991 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1992 exclusivity checks after Source.__init__ upcall, so misspelled
1993 arguments will be reported more usefully
1994 (Darcs.__init__): same
1996 2005-10-29 Brian Warner <warner@lothar.com>
1998 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1999 builder. Move the Try scheduler off to a separate port.
2001 2005-10-27 Brian Warner <warner@lothar.com>
2003 * buildbot/clients/gtkPanes.py
2004 (TwoRowClient.remote_builderRemoved): disappearing Builders used
2005 to cause the app to crash, now they don't.
2007 * buildbot/clients/debug.py: display the buildmaster's location
2008 in the window's title bar
2010 2005-10-26 Brian Warner <warner@lothar.com>
2012 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
2013 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
2014 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
2016 * buildbot/status/html.py (td): put a single non-breaking space
2017 inside otherwise empty <td> elements, as a workaround for buggy
2018 browsers which would optimize them away (along with any associated
2019 styles, like the kind that create the waterfall grid borders).
2020 Patch from Frerich Raabe.
2022 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
2023 argv-list as an argument, defaulting to ["-to"], which is
2024 appropriate for the Trial that comes with Twisted-2.1.0 and
2025 earlier. The Trial in current Twisted SVN wants
2026 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
2027 defaults to an empty list.
2028 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
2029 match it, now that trialMode= is a list instead of a single string
2031 * buildbot/__init__.py (version): bump to 0.7.0+ while between
2033 * docs/buildbot.texinfo: same
2035 2005-10-24 Brian Warner <warner@lothar.com>
2037 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
2038 * docs/buildbot.texinfo: set version number to match
2040 2005-10-24 Brian Warner <warner@lothar.com>
2042 * README: update for 0.7.0
2044 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
2046 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
2047 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
2048 send the branch= argument unless the user really provided one, to
2049 retain compatibility with older buildmasters that don't accept
2051 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
2054 * docs/buildbot.texinfo: update lots of stuff
2056 * buildbot/scripts/runner.py (sendchange): add a --branch argument
2057 to the 'buildbot sendchange' command
2058 * buildbot/clients/sendchange.py (Sender.send): same
2059 * buildbot/changes/pb.py (ChangePerspective): same
2060 * buildbot/test/test_changes.py (Sender.testSender): test it
2062 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
2063 'default_branch' argument names to 'baseURL' and 'defaultBranch',
2064 for consistency with other BuildStep arguments that use camelCase.
2065 Well, at least more of them use camelCase (like flunkOnWarnings)
2066 than don't.. I wish I'd picked one style and stuck with it
2067 earlier. Annoying, but it's best done before the release, since
2068 these arguments didn't exist at all in 0.6.6 .
2070 * buildbot/test/test_vc.py (SVN.testCheckout): same
2071 (Darcs.testPatch): same
2072 * docs/buildbot.texinfo (SVN): document the change
2073 (Darcs): same, add some build-on-branch docs
2074 * docs/examples/twisted_master.cfg: match change
2076 * buildbot/process/step.py (BuildStep): rename
2077 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
2078 how it is normally used.
2079 * buildbot/test/test_steps.py (Version.checkCompare): same
2081 * buildbot/process/step.py (CVS.startVC): refuse to build
2082 update/copy -style builds on a non-default branch with an old
2083 buildslave (<=0.6.6) that doesn't know how to do it properly. The
2084 concern is that it will do a VC 'update' in an existing tree when
2085 it is supposed to be switching branches (and therefore clobbering
2086 the tree to do a full checkout), thus building the wrong source.
2087 This used to be a warning, but I think the confusion it is likely
2088 to cause warrants making it an error.
2089 (SVN.startVC): same, also make mode=export on old slaves an error
2090 (Darcs.startVC): same
2091 (Git.startVC): improve error message for non-Git-enabled slaves
2092 (Arch.checkSlaveVersion): same. continue to emit a warning when a
2093 specific revision is built on a slave that doesn't pay attention
2094 to args['revision'], because for slowly-changing trees it will
2095 probably do the right thing, and because we have no way to tell
2096 whether we're asking it to build the most recent version or not.
2097 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
2099 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
2100 that 'master' is in host:portnum format, to catch errors sooner
2102 2005-10-23 Brian Warner <warner@lothar.com>
2104 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
2105 when creating the list of warning messages, include the line
2106 immediately after each WARNING: line, since that's usually where
2107 the file and line number wind up.
2109 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
2114 2005-10-22 Brian Warner <warner@lothar.com>
2116 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
2117 patch from Brad Hards
2118 * buildbot/status/classic.css: same
2119 * buildbot/test/test_web.py (Waterfall): match changes
2121 * buildbot/test/test_steps.py (BuildStep.setUp): set
2122 nextBuildNumber so the test passes
2123 * buildbot/test/test_status.py (MyBuilder): same
2125 * buildbot/status/html.py (StatusResourceBuild.body): revision
2126 might be numeric, so stringify it before html-escapifying it
2127 (CurrentBox.getBox): add a "waiting" state, and show a countdown
2128 timer for the upcoming build
2129 * buildbot/status/classic.css: add background-color attributes for
2130 offline/waiting/building classes
2132 * buildbot/status/builder.py (BuildStatus): derive from
2133 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
2134 the default (i.e. unknown) .slavename to "???" instead of None,
2135 since even unknown slavenames need to be printed eventually.
2136 (BuilderStatus): also derive from styles.Versioned . More
2137 importantly, determine .nextBuildNumber at creation/unpickling
2138 time by scanning the directory of saved BuildStatus instances and
2139 choosing one larger than the highest-numbered one found. This
2140 should fix the problem where random errors during upgrades cause
2141 the buildbot to forget about earlier builds. .nextBuildNumber is
2142 no longer stored in the pickle.
2143 (Status.builderAdded): if we can't unpickle the BuilderStatus,
2144 at least log the error. Also call Builder.determineNextBuildNumber
2145 once the basedir is set.
2147 * buildbot/master.py (BuildMaster.loadChanges): do
2148 styles.doUpgrade afterwards, in case I decide to make Changes
2149 derived from styles.Versioned some day and forget to make this
2153 * buildbot/test/test_runner.py (Options.testForceOptions): skip
2154 when running under older pythons (<2.3) in which the shlex module
2155 doesn't have a 'split' function.
2157 * buildbot/process/step.py (ShellCommand.start): make
2158 errorMessages= be a list of strings to stuff in the log before the
2159 command actually starts. This makes it easier to flag multiple
2160 warning messages, e.g. when the Source steps have to deal with an
2162 (CVS.startVC): handle slaves that don't handle multiple branches
2163 by switching into 'clobber' mode
2164 (SVN.startVC): same. Also reject branches without base_url
2165 (Darcs.startVC): same. Also reject revision= in older slaves
2166 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
2167 (Bazaar.startVC): same, and test for baz separately than for arch
2169 * buildbot/slave/commands.py (cvs_ver): document new features
2171 * buildbot/process/step.py (BuildStep.slaveVersion): document it
2172 (BuildStep.slaveVersionNewEnough): more useful utility method
2173 * buildbot/test/test_steps.py (Version): start testing it
2175 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
2176 the 'force' command requires python2.3, for the shlex.split method
2178 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
2179 since we don't use it anymore. The Twisted buildbot uses a
2182 2005-10-21 Brian Warner <warner@lothar.com>
2184 * buildbot/process/process_twisted.py: rework all BuildFactory
2185 classes to take a 'source' step as an argument, instead of
2186 building up the SVN instance in the factory.
2187 * docs/examples/twisted_master.cfg: enable build-on-branch by
2188 providing a base_url and default_branch
2190 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
2191 control over --branch and --revision, not that they are always
2193 * buildbot/status/html.py (StatusResourceBuilder.force): same
2194 (StatusResourceBuild.body): display SourceStamp components
2196 * buildbot/scripts/runner.py (ForceOptions): option parser for the
2197 IRC 'force' command, so it can be shared with an eventual
2198 command-line-tool 'buildbot force' mode.
2199 * buildbot/test/test_runner.py (Options.testForceOptions): test it
2201 2005-10-20 Brian Warner <warner@lothar.com>
2203 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
2205 * docs/examples/twisted_master.cfg: update to use Schedulers
2207 * buildbot/scripts/sample.cfg: update with Schedulers
2209 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
2210 method specifically for use by HTML "force build" button and the
2211 IRC "force" command. Raises an immediate error if there are no
2213 (IBuilderControl.requestBuild): make this just submit a build, not
2214 try to check for existing slaves or set up any when-finished
2215 Deferreds or anything.
2216 * buildbot/process/builder.py (BuilderControl): same
2217 * buildbot/status/html.py (StatusResourceBuilder.force): same
2218 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
2219 * buildbot/test/test_slaves.py: same
2220 * buildbot/test/test_web.py: same
2222 2005-10-19 Brian Warner <warner@lothar.com>
2224 * docs/examples/twisted_master.cfg: re-sync with reality: bring
2225 back python2.2 tests, turn off OS-X threadedselect-reactor tests
2227 2005-10-18 Brian Warner <warner@lothar.com>
2229 * buildbot/status/html.py: provide 'status' argument to most
2230 StatusResourceFOO objects
2231 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
2232 and Logfiles" section to make the Build page into a more-or-less
2233 comprehensive source of status information about the build
2235 * buildbot/status/mail.py (MailNotifier): include the Build's URL
2236 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
2238 2005-10-17 Brian Warner <warner@lothar.com>
2240 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
2241 arguments to accomodate Twisted >=2.1.0 . I will have to figure
2242 out what to do about other projects: the correct options for
2243 recent Twisteds will not work for older ones.
2245 2005-10-15 Brian Warner <warner@lothar.com>
2247 * buildbot/status/builder.py (Status.getURLForThing): add method
2248 to provide a URL for arbitrary IStatusFoo objects. The idea is to
2249 use this in email/IRC status clients to make them more useful, by
2250 providing the end user with hints on where to learn more about the
2251 object being reported on.
2252 * buildbot/test/test_web.py (GetURL): tests for it
2254 2005-10-14 Brian Warner <warner@lothar.com>
2256 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
2257 fix bug resulting from deferredResult changes
2259 2005-10-13 Brian Warner <warner@lothar.com>
2261 * buildbot/test/test_changes.py: remove use of deferredResult
2262 * buildbot/test/test_config.py: same
2263 * buildbot/test/test_control.py: same
2264 * buildbot/test/test_status.py: same
2265 * buildbot/test/test_vc.py: this is the only remaining use, since
2266 it gets used at module level. This needs to be replaced by some
2267 sort of class-level run-once routine.
2269 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
2271 * lots: implement multiple slaves per Builder, which means multiple
2272 current builds per Builder. Some highlights:
2273 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
2274 of (state,currentBuilds) instead of (state,currentBuild)
2275 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
2276 (IBuildStatus.getSlavename): new method, so you can tell which
2277 slave got used. This only gets set when the build completes.
2278 (IBuildRequestStatus.getBuilds): new method
2280 * buildbot/process/builder.py (SlaveBuilder): add a .state
2281 attribute to track things like ATTACHING and IDLE and BUILDING,
2283 (Builder): .. the .slaves attribute here, which has been turned
2284 into a simple list of available slaves. Added a separate
2285 attaching_slaves list to track ones that are not yet ready for
2287 (Builder.fireTestEvent): put off the test-event callback for a
2288 reactor turn, to make tests a bit more consistent.
2289 (Ping): cleaned up the slaveping a bit, now it disconnects if the
2290 ping fails due to an exception. This needs work, I'm worried that
2291 a code error could lead to a constantly re-connecting slave.
2292 Especially since I'm trying to move to a distinct remote_ping
2293 method, separate from the remote_print that we currently use.
2294 (BuilderControl.requestBuild): return a convenience Deferred that
2295 provides an IBuildStatus when the build finishes.
2296 (BuilderControl.ping): ping all connected slaves, only return True
2297 if they all respond.
2299 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
2300 reconnect when we shut down.
2302 * buildbot/status/builder.py: implement new methods, convert
2303 one-build-at-a-time methods to handle multiple builds
2304 * buildbot/status/*.py: do the same in all default status targets
2305 * buildbot/status/html.py: report the build's slavename in the
2306 per-Build page, report all buildslaves on the per-Builder page
2308 * buildbot/test/test_run.py: update/create tests
2309 * buildbot/test/test_slaves.py: same
2310 * buildbot/test/test_scheduler.py: remove stale test
2312 * docs/buildbot.texinfo: document the new builder-specification
2313 'slavenames' parameter
2315 2005-10-12 Brian Warner <warner@lothar.com>
2317 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
2318 report failure correctly, causing Dependent builds to run when
2319 they shouldn't have.
2320 * buildbot/status/builder.py (BuildSetStatus): same
2321 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
2322 (Set.testSuccess): test the both-pass case too
2323 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2324 fix this test: it was ending too early, masking the failure before
2325 (Logger): specialized StatusReceiver to make sure the dependent
2326 builds aren't even started, much less completed.
2328 2005-10-07 Brian Warner <warner@lothar.com>
2330 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
2331 bot.SlaveBuilder being disowned in the middle of a build
2333 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
2334 this inherit from StatusReceiver. Also upcall in __init__. This
2335 fixes the embarrasing crash when the new buildSetSubmitted method
2336 is invoked and Waterfall/etc don't implement their own.
2337 * buildbot/test/test_run.py: add a TODO note about a test to catch
2338 just this sort of thing.
2340 * buildbot/process/builder.py (Builder.attached): remove the
2341 already-attached warning, this situation is normal. Add some
2342 comments explaining it.
2344 2005-10-02 Brian Warner <warner@lothar.com>
2346 * buildbot/changes/maildir.py (Maildir.start): Tolerate
2347 OverflowError when setting up dnotify, because some 64-bit systems
2348 have problems with signed-vs-unsigned constants and trip up on the
2349 DN_MULTISHOT flag. Patch from Brad Hards.
2351 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
2353 * buildbot/process/step.py (BuildStep, ShellCommand): Add
2354 progressMetrics, description, descriptionDone to the 'parms' list,
2355 and make use the 'parms' list from the implementation class
2356 instead of only BuildStep to initialize the parameters. This
2357 allows buildbot.process.factory.s() to initialize all the parms,
2358 not just those defined in directly by BuildStep.
2360 2005-09-03 Brian Warner <warner@lothar.com>
2362 * NEWS: start adding items for the next release
2364 * docs/examples/twisted_master.cfg: (sync with reality) turn off
2365 python2.2 tests, change 'Quick' builder to only use python2.3
2367 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
2369 * buildbot/status/html.py (StatusResourceBuilder.body): only show
2370 the "Ping Builder" button if the build control is available; the
2371 user sees an exception otherwise
2373 * docs/buildbot.texinfo (PBChangeSource): fix a typo
2375 2005-09-01 Brian Warner <warner@lothar.com>
2377 * buildbot/interfaces.py (IBuilderStatus.getState): update
2378 signature, point out that 'build' can be None
2379 (IBuildStatus.getETA): point out ETA can be none
2381 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
2383 * buildbot/status/words.py (IrcStatusBot.emit_status): same
2385 2005-08-31 Brian Warner <warner@lothar.com>
2387 * buildbot/status/base.py (StatusReceiver.builderChangedState):
2388 update to match correct signature: removed 'eta' argument
2389 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
2391 2005-08-30 Brian Warner <warner@lothar.com>
2393 * buildbot/status/builder.py (LogFile): remove the assertion that
2394 blows up when you try to overwrite an existing logfile, instead
2395 just emit a warning. This case gets hit when the buildmaster is
2396 killed and doesn't get a chance to write out the serialized
2397 BuilderStatus object, so the .nextBuildNumber attribute gets out
2400 * buildbot/scripts/runner.py (sendchange): add --revision_file to
2401 the 'buildbot sendchange' arguments, for the Darcs context file
2402 * docs/buildbot.texinfo (sendchange): document it
2404 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
2405 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
2406 (IStatus.getSchedulers): new method
2407 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
2408 (Status.getSchedulers): implement
2409 * buildbot/process/builder.py (Builder): maintain
2410 BuilderStatus.pendingBuilds
2411 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
2412 (TryBase.addChange): Try schedulers should ignore Changes
2414 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
2415 for 'try' on CVS/SVN
2416 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
2418 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
2419 report status properly.
2420 (Try.createJob): implement unique buildset IDs
2422 * buildbot/status/client.py (StatusClientPerspective): add a
2423 perspective_getBuildSets method for the benefit of jobdir-style
2425 * docs/buildbot.texinfo (try): more docs
2426 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
2429 2005-08-18 Brian Warner <warner@lothar.com>
2431 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
2432 actually work. It's functional but still kind of clunky. Also, it
2433 only works with the pb-style.. needs to be made to work with the
2436 * buildbot/status/client.py (RemoteBuildSet): new class
2437 (RemoteBuildRequest): same
2438 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
2439 object, not the internal BuildStatus object.
2440 (RemoteBuild.remote_subscribe): new method to subscribe to builds
2441 outside of the usual buildStarted() return value.
2442 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
2444 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
2445 (Try_Userpass_Perspective.perspective_try): return a remotely
2446 usable BuildSetStatus object
2448 * buildbot/interfaces.py (IBuildStatus): remove obsolete
2449 isStarted()/waitUntilStarted()
2451 2005-08-16 Brian Warner <warner@lothar.com>
2453 * buildbot/status/builder.py: implement IBuildSetStatus and
2454 IBuildRequestStatus, wire them into place.
2455 * buildbot/buildset.py: same. Add ID, move wait-until-finished
2456 methods into the BuildSetStatus object.
2457 * buildbot/interfaces.py: same
2458 (IStatus.getBuildSets): new method to get pending BuildSets
2459 (IStatusReceiver.buildsetSubmitted): new method which hears about
2461 * buildbot/master.py (BuildMaster.submitBuildSet): same
2462 * buildbot/process/base.py (BuildRequest): same, replace
2463 waitUntilStarted with subscribe/unsubscribe
2464 * buildbot/process/builder.py (BuilderControl.forceBuild): use
2465 subscribe instead of waitUntilStarted
2466 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
2468 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
2470 * buildbot/test/test_buildreq.py: update for new code
2471 * buildbot/test/test_control.py (Force.testRequest): same
2474 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
2475 for Darcs to not use the tempfile module, so it works under
2476 python-2.2 too. We really didn't need the full cleverness of that
2477 module, since the slave has exclusive control of its own builddir.
2479 2005-08-15 Brian Warner <warner@lothar.com>
2481 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
2482 for CVS trees. It doesn't work for non-trunk branches,
2484 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
2487 * Makefile: make it easier to test against python2.2
2489 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
2490 tearDown2, so things like Arch can unregister archives as they're
2491 shutting down. The previous subclass-override-tearDown technique
2492 resulted in a nested maybeWait() and test failures under
2495 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
2496 where we can (Arch), add a branch= argument to set the branch used
2498 (BazExtractor): extract the branch too
2499 (TlaExtractor): same
2500 * buildbot/scripts/runner.py (TryOptions): add --branch
2501 * docs/buildbot.texinfo (try): document --branch/try_branch
2503 * buildbot/slave/commands.py (Darcs): implement get-revision for
2504 Darcs, so that 'try' will work. This requires the tempfile module
2507 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
2508 of revisions, branches, and 'try' in the process.
2510 2005-08-11 Brian Warner <warner@lothar.com>
2512 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
2513 this, it got broken at some point in the last few releases
2514 * buildbot/status/words.py (IrcBuildRequest): reply was broken
2515 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
2516 specifically the removal of ETA information from the tuple
2518 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
2521 * docs/buildbot.texinfo (try): document both --builder and
2522 'try_builders' in .buildbot/options
2523 * buildbot/scripts/runner.py (TryOptions): add --builder,
2524 accumulate the values into opts['builders']
2525 * buildbot/scripts/tryclient.py (Try.__init__): set builders
2526 * buildbot/test/test_runner.py (Try): add some quick tests to make
2527 sure 'buildbot try --options' and .buildbot/options get parsed
2528 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2529 use --builder control
2531 * docs/buildbot.texinfo (try): add --port argument to PB style
2533 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
2534 actual SourceStamp. Still need to extract a branch name, somehow.
2535 (Try): finish implementing the try client side, still need a UI
2536 for specifying which builders to use
2537 (Try.getopt): factor our options/config-file reading
2538 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2540 * buildbot/test/test_vc.py: match SourceStampExtractor change
2542 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
2543 causes the twisted log to be sent to stderr
2545 * buildbot/scheduler.py (Try_Userpass): implement the PB style
2547 2005-08-10 Brian Warner <warner@lothar.com>
2549 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
2550 style is 90% done, still missing status reporting or waiting for
2551 the buildsets to finish, and it is completely untested.
2553 * buildbot/trybuild.py: delete file, move contents to ..
2554 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
2555 * buildbot/test/test_vc.py: match the move
2557 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
2558 of the TryScheduler, no buildsetID or status-tracking support yet
2559 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
2561 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
2562 possible to set the basedir after __init__ time, so it is easier
2563 to use as a Service-child of the BuildMaster instance
2565 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
2566 that delivers messages to its Service parent instead of requiring
2567 a subclass to be useful. This turns out to be much easier to build
2570 * buildbot/scripts/tryclient.py (createJob): utility code to
2571 create jobfiles, will eventually be used by 'buildbot try'
2573 2005-08-08 Brian Warner <warner@lothar.com>
2575 * docs/buildbot.texinfo (try): add docs on the
2576 as-yet-unimplemented Try scheduler
2578 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
2579 * buildbot/test/test_scheduler.py: .. here
2580 (Scheduling.testTryJobdir): add placeholder test for 'try'
2582 * buildbot/test/test_status.py (Log.testMerge3): update to match new
2583 addEntry merging (>=chunkSize) behavior
2584 (Log.testConsumer): update to handle new callLater(0) behavior
2586 * buildbot/test/test_web.py: rearrange tests a bit, add test for
2587 both the MAX_LENGTH bugfix and the resumeProducing hang.
2589 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
2590 put off the actual resumeProducing for a moment with
2591 reactor.callLater(0). This works around a twisted-1.3.0 bug which
2592 causes large logfiles to hang midway through.
2594 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
2595 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
2596 and to improve memory usage when streaming the file out to a web
2598 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
2599 make this work cleanly
2601 2005-08-03 Brian Warner <warner@lothar.com>
2603 * buildbot/trybuild.py: new file for 'try' utilities
2604 (getSourceStamp): run in a tree, find out the baserev+patch
2605 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
2606 implemented for SVN and Darcs, still working on Arch. I don't know
2607 how to make CVS work yet.
2609 * docs/buildbot.texinfo: document the 'buildbot' command-line
2610 tool, including the not-yet-implemented 'try' feature, and the
2611 in-flux .buildbot/ options directory.
2613 2005-07-20 Brian Warner <warner@lothar.com>
2615 * buildbot/locks.py: added temporary id() numbers to Lock
2616 descriptions, to track down a not-really-sharing-the-Lock bug
2618 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
2620 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
2621 needed for python2.2 compatibility
2622 * buildbot/test/test_vc.py: python2.2 compatibility: generators
2623 are from the __future__
2625 2005-07-19 Brian Warner <warner@lothar.com>
2627 * buildbot/master.py (BuildMaster.loadConfig): give a better error
2628 message when schedulers use unknown builders
2630 * buildbot/process/builder.py (Builder.compareToSetup): make sure
2631 SlaveLock('name') and MasterLock('name') are distinct
2633 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
2634 c['schedulers'] in such a way that we can actually accept
2636 * buildbot/test/test_config.py: check it
2638 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
2639 utility method to *all* the Schedulers
2640 (Periodic.listBuilderNames): same
2642 * docs/buildbot.texinfo (Interlocks): update chapter to match
2645 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
2646 to make sure that c['sources'], c['schedulers'], and c['status']
2647 are all lists of the appropriate objects, and that the Schedulers
2648 all point to real Builders
2649 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
2650 'listBuilderNames' utility method to support this
2651 * buildbot/scheduler.py: implement the utility method
2652 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
2654 * docs/buildbot.texinfo: add some @cindex entries
2656 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
2657 if it wasn't already set: most tla commands will fail unless one
2659 (Arch.createRepository): and disable bazaar's revision cache, since
2660 they cause test failures (the multiple repositories we create all
2661 interfere with each other through the cache)
2663 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
2664 bring it properly up to date with twisted-2.0 test guidelines
2666 * buildbot/master.py (BuildMaster): remove references to old
2667 'interlock' module, this caused a bunch of post-merge test
2669 * buildbot/test/test_config.py: same
2670 * buildbot/process/base.py (Build): same
2672 * buildbot/test/test_slaves.py: stubs for new test case
2674 * buildbot/scheduler.py: add test-case-name tag
2675 * buildbot/test/test_buildreq.py: same
2677 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
2678 unnecessary init code
2679 (Bot.remote_setBuilderList): match it
2681 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
2683 * buildbot/changes/mail.py (parseSyncmail): update comment
2685 * buildbot/test/test_slavecommand.py: disable Shell tests on
2686 platforms that don't suport IReactorProcess
2688 * buildbot/status/builder.py (LogFile): remove the 't' mode from
2689 all places where we open logfiles. It causes OS-X to open the file
2690 in some weird mode that that prevents us from mixing reads and
2691 writes to the same filehandle, which we depend upon to implement
2692 _generateChunks properly. This change doesn't appear to break
2693 win32, on which "b" and "t" are treated differently but a missing
2694 flag seems to be interpreted as "t".
2696 2005-07-18 Brian Warner <warner@lothar.com>
2698 * buildbot/slave/commands.py (ShellCommand): overhaul
2699 error-handling code, to try and make timeout/interrupt work
2700 properly, and make win32 happier
2701 * buildbot/test/test_slavecommand.py: clean up, stop using
2702 reactor.iterate, add tests for timeout and interrupt
2703 * buildbot/test/sleep.py: utility for a new timeout test
2705 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
2706 code from the local-usebranches branch
2708 2005-07-17 Brian Warner <warner@lothar.com>
2710 * buildbot/process/process_twisted.py
2711 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
2712 minutes, to match the other twisted BuildFactories, and don't
2713 excuse failures in c/qt/win32 reactors any more.
2715 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
2716 'freebsd' builders, since the buildslaves have been unavailable
2719 2005-07-13 Brian Warner <warner@lothar.com>
2721 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
2722 build-on-branch feature
2724 * buildbot/process/step.py (Darcs.__init__): add base_url and
2725 default_branch arguments, just like SVN
2726 (Arch.__init__): note that the version= argument is really the
2729 * buildbot/slave/commands.py (SourceBase): keep track of the
2730 repository+branch that was used for the last checkout in
2731 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
2732 match, we clobber the directory and perform a fresh checkout
2733 rather than trying to do an in-place update. This should protect
2734 us against trying to get to branch B by doing an update in a tree
2735 obtained from branch A.
2736 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
2737 (SVN.setup): same, just the svnurl
2738 (Darcs.setup): same, just the repourl
2739 (Arch.setup): same, arch coordinates (url), version, and
2740 buildconfig. Also pull the buildconfig from the args dictionary,
2741 which we weren't doing before, so the build-config was effectively
2743 (Arch.sourcedirIsUpdateable): don't try to update when we're
2744 moving to a specific revision: arch can't go backwards, so it is
2745 safer to just clobber the tree and checkout a new one at the
2747 (Bazaar.setup): same sourcedata as Arch
2749 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2750 use maybeWait, to work with twisted-1.3.0 and twcompat
2751 (Dependencies.testRun_Pass): same
2753 * buildbot/test/test_vc.py: rearrange, cleanup
2755 * buildbot/twcompat.py: add defer.waitForDeferred and
2756 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
2757 can work under twisted-1.3.0 .
2759 * buildbot/test/test_vc.py: rewrite. The sample repositories are
2760 now created at setUp time. This increases the runtime of the test
2761 suite considerably (from 91 seconds to 151), but it removes the
2762 need for an offline tarball, which should solve a problem I've
2763 seen where the test host has a different version of svn than the
2764 tarball build host. The new code also validates that mode=update
2765 really picks up recent commits. This approach will also make it
2766 easier to test out branches, because the code which creates the VC
2767 branches is next to the code which uses them. It will also make it
2768 possible to test some change-notification hooks, by actually
2769 performing a VC commit and watching to see the ChangeSource get
2772 2005-07-12 Brian Warner <warner@lothar.com>
2774 * docs/buildbot.texinfo (SVN): add branches example
2775 * docs/Makefile (buildbot.ps): add target for postscript manual
2777 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
2778 * buildbot/test/test_locks.py: same
2780 * buildbot/process/step.py (Darcs): comment about default branches
2782 * buildbot/master.py (BuildMaster.loadConfig): don't look for
2783 c['interlocks'] in the config file, complain if it is present.
2784 Scan all locks in c['builders'] to make sure the Locks they use
2786 * buildbot/test/test_config.py: remove old c['interlocks'] test,
2787 add some tests to check for non-uniquely-named Locks
2788 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
2789 since the unique-Lock validation code requires it now
2791 * buildbot/locks.py: fix test-case-name
2793 * buildbot/interlock.py: remove old file
2795 2005-07-11 Brian Warner <warner@lothar.com>
2797 * buildbot/test/test_interlock.py: rename to..
2798 * buildbot/test/test_locks.py: .. something shorter
2800 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2801 versions (after 2.0.1) changed internet.TCPClient to shut down the
2802 connection in stopService. Change the code to handle this
2805 * buildbot/process/base.py (Build): handle whole-Build locks
2806 * buildbot/process/builder.py (Builder.compareToSetup): same
2807 * buildbot/test/test_interlock.py: make tests work
2809 * buildbot/process/step.py (BuildStep.startStep): complain if a
2810 Step tries to claim a lock that's owned by its own Build
2811 (BuildStep.releaseLocks): typo
2813 * buildbot/locks.py (MasterLock): use ComparableMixin so config
2814 file reloads don't replace unchanged Builders
2816 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2817 rewrite to cover new Locks instead of old c['interlocks']
2818 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2822 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2823 start the master and connect the buildslave
2825 * buildbot/process/step.py (FailingDummy.done): finish with a
2826 FAILURE status rather than raising an exception
2828 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2829 stringify a BuildRequest.reason that is None
2831 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2833 * buildbot/status/builder.py (BuildSetStatus): implement enough to
2834 allow scheduler.Dependent to work
2835 * buildbot/buildset.py (BuildSet): set .reason and .results
2837 * buildbot/test/test_interlock.py (Locks.setUp): connect both
2838 slaves, to make the test stop hanging. It still fails, of course,
2839 because I haven't even started to implement Locks.
2841 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2843 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2844 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2845 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2846 (Dependent): new class for downstream build dependencies
2847 * buildbot/test/test_dependencies.py: tests (still failing)
2849 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2851 2005-07-07 Brian Warner <warner@lothar.com>
2853 * buildbot/test/runutils.py (RunMixin): factored this class out..
2854 * buildbot/test/test_run.py: .. from here
2855 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2856 added new buildbot.locks tests (which all hang right now)
2857 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2858 * buildbot/process/step.py: claim/release per-BuildStep locks
2860 * docs/Makefile: add 'buildbot.html' target
2862 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
2863 interpreted as "HEAD", so that all VC steps can accept branch=None
2864 and have it mean the "default branch".
2866 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
2868 2005-07-07 Brian Warner <warner@lothar.com>
2870 * docs/examples/twisted_master.cfg: update to match current usage
2872 * docs/buildbot.texinfo (System Architecture): comment out the
2873 image, it doesn't exist yet and just screws up the HTML manual.
2875 2005-07-05 Brian Warner <warner@lothar.com>
2877 * debian/.cvsignore: oops, missed one. Removing leftover file.
2879 2005-06-17 Brian Warner <warner@lothar.com>
2881 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
2882 changed its output in 1.2.0, don't mistakenly think that the
2883 subversion we find isn't capable of supporting our tests.
2885 * debian/*: remove the debian/ directory and its contents, to make
2886 life easier for the proper Debian maintainer
2888 * Makefile (release): same
2890 2005-06-07 Brian Warner <warner@lothar.com>
2892 * everything: create a distinct SourceStamp class to replace the
2893 ungainly 4-tuple, let it handle merging instead of BuildRequest.
2894 Changed the signature of Source.startVC to include the revision
2895 information (instead of passing it through self.args). Implement
2896 branches for SVN (now only Darcs/Git is missing support). Add more
2899 2005-06-06 Brian Warner <warner@lothar.com>
2901 * everything: rearrange build scheduling. Create a new Scheduler
2902 object (configured in c['schedulers'], which submit BuildSets to a
2903 set of Builders. Builders can now use multiple slaves. Builds can
2904 be run on alternate branches, either requested manually or driven
2905 by changes. This changed some of the Status classes. Interlocks
2906 are out of service until they've been properly split into Locks
2907 and Dependencies. treeStableTimer, isFileImportant, and
2908 periodicBuild have all been moved from the Builder to the
2910 (BuilderStatus.currentBigState): removed the 'waiting' and
2911 'interlocked' states, removed the 'ETA' argument.
2913 2005-05-24 Brian Warner <warner@lothar.com>
2915 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
2916 erroneously abandons the connection (in clientConnectionFailed)
2917 for non-UserErrors, which means that if we lose the connection due
2918 to a network problem or a timeout, we'll never try to reconnect.
2919 Fix this by not upcalling to the buggy parent method. Note:
2920 twisted-2.0 fixes this, but the function only has 3 lines so it
2921 makes more sense to copy it than to try and detect the buggyness
2922 of the parent class. Fixes SF#1207588.
2924 * buildbot/changes/changes.py (Change.branch): doh! Add a
2925 class-level attribute to accomodate old Change instances that were
2926 pickled before 0.6.5 (where .branch was added for new Changes).
2927 This fixes the exception that occurs when you try to look at an
2928 old Change (through asHTML).
2930 * buildbot/__init__.py (version): bump to 0.6.6+ while between
2933 2005-05-23 Brian Warner <warner@lothar.com>
2935 * buildbot/__init__.py (version): release 0.6.6
2937 2005-05-23 Brian Warner <warner@lothar.com>
2939 * NEWS: update for 0.6.6 release
2940 * debian/changelog: same
2942 * buildbot/scripts/runner.py (start): put the basedir in sys.path
2943 before starting: this was done by twistd back when we spawned it,
2944 now that we're importing the pieces and running them in the
2945 current process, we have to do it ourselves. This allows
2946 master.cfg to import files from the same directory without
2947 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
2948 Stichele for the catch.
2949 (Options.opt_version): Add a --version command (actually, just make
2950 the existing --version command emit Buildbot's version too)
2952 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
2953 fix to make this behave like other LogFiles, this time to handle
2954 existing LogFiles on disk. (add the missing .upgrade method)
2955 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
2957 2005-05-21 Brian Warner <warner@lothar.com>
2959 * buildbot/test/test_runner.py (Create.testMaster): match the
2960 rawstring change in runner.py:masterTAC
2962 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
2963 TwistedWords is installed
2964 * buildbot/test/test_status.py: same, with TwistedMail
2966 * buildbot/master.py: remove old IRC/Waterfall imports (used by
2967 some old, deprecated, and removed config keys). This should enable
2968 you to use the base buildbot functionality with Twisted-2.0.0 when
2969 you don't also have TwistedWeb and TwistedWords installed
2971 2005-05-20 Brian Warner <warner@lothar.com>
2973 * buildbot/scripts/runner.py (run): call sendchange(), not
2974 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
2975 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
2976 (stop): don't wait for process to die when sending SIGHUP
2977 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
2978 directory name gets interpreted, which you don't want
2981 * buildbot/__init__.py (version): bump to 0.6.5+ while between
2984 2005-05-18 Brian Warner <warner@lothar.com>
2986 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2988 2005-05-18 Brian Warner <warner@lothar.com>
2990 * README: update for 0.6.5
2991 * debian/changelog: same
2993 * buildbot/changes/changes.py: rename tag= to branch=, since
2994 that's how we're using it, and my design for the upcoming "build a
2995 specific branch" feature wants it. also, tag= was too CVS-centric
2996 * buildbot/changes/mail.py (parseSyncmail): same
2997 * buildbot/process/base.py (Build.isBranchImportant): same
2998 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2999 * docs/buildbot.texinfo (Attributes of Changes): same
3001 * NEWS: update tag=, update for upcoming release
3003 2005-05-17 Brian Warner <warner@lothar.com>
3005 * buildbot/scripts/runner.py (stop): actually poll once per
3006 second, instead of re-killing the poor daemon once per second.
3007 Sleep briefly (0.1s) before the first poll, since there's a good
3008 chance we can avoid waiting the full second if the daemon shuts
3009 down quickly. Also remove the sys.exit() at the end.
3010 (start): remove the unneighborly sys.exit()
3012 * Makefile: improve permission-setting to not kick Arch so badly
3014 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
3015 default --keepalive=600, since it doesn't hurt very much, and it's
3016 a hassle to discover that you need it.
3017 * buildbot/test/test_runner.py (Create.testSlave): test it
3019 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
3020 IRC bot about EXCEPTION
3022 * buildbot/status/client.py (PBListener): upcall more correctly
3024 * buildbot/process/base.py (Build.allStepsDone): if a step caused
3025 an exception mark the overall build with EXCEPTION, not SUCCESS
3027 * buildbot/scripts/runner.py (makefile_sample): remove the leading
3029 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
3030 * Makefile: update some release-related stuff
3032 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
3033 gets called when there isn't actually an active process, just end
3034 the Command instead of blowing up. I don't know how it gets into
3035 this state, but the twisted win32 buildslave will sometimes hang,
3036 and when it shakes its head and comes back, it thinks it's still
3037 running a Command. The next build causes this command to be
3038 interrupted, but the lack of self.process.pid breaks the interrupt
3041 * NEWS: document changes since the last release
3043 * buildbot/scripts/runner.py (start): change 'buildbot start' to
3044 look for Makefile.buildbot instead of a bare Makefile . The
3045 'buildbot start' does not install this file, so you have to
3046 manually copy it if you want to customize startup behavior.
3047 (createMaster): change 'buildbot master' command to create
3048 Makefile.sample instead of Makefile, to create master.cfg.sample
3049 instead of master.cfg (requiring you to copy it before the
3050 buildmaster can be started). Both sample files are kept up to
3051 date, i.e. they are overwritten if they have been changed. The
3052 'buildbot.tac' file is *not* overwritten, but if the new contents
3053 don't match the old, a 'buildbot.tac.new' file is created and the
3054 user is warned. This seems to be a much more sane way to handle
3055 startup files. Also, don't sys.exit(0) when done, so we can run
3056 unit tests against it.
3057 (createSlave): same. Don't overwrite the sample info/ files.
3058 * buildbot/scripts/sample.mk: remove. the contents were pulled
3059 into runner.py, since they need to match the behavior of start()
3063 * docs/buildbot.texinfo (Launching the daemons): document it
3064 * buildbot/test/test_runner.py (Create): test it
3066 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
3067 version that can handle string-in-string tests, because otherwise
3068 python-2.2 fails the tests. It'd be tremendous if Trial's test
3069 took two strings under 2.2 too.
3071 * everything: fixed all deprecation warnings when running against
3072 Twisted-2.0 . (at least all the ones in buildbot code, there are a
3073 few that come from Twisted itself). This involved putting most of
3074 the Twisted-version specific code in the new buildbot.twcompat
3075 module, and creating some abstract base classes in
3076 buildbot.changes.base and buildbot.status.base (which might be
3077 useful anyway). __implements__ is a nuisance and requires an ugly
3078 'if' clause everywhere.
3080 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
3081 delay before finishing the test: it seems that smtp.sendmail
3082 doesn't hang up on the server, so we must wait a moment so it can
3083 hang up on us. This removes the trial warning about an unclean
3086 2005-05-16 Brian Warner <warner@lothar.com>
3088 * buildbot/process/step.py (Source): add 'retry' argument. It is a
3089 tuple of (delay, repeats).
3090 * buildbot/test/test_vc.py (Retry): test it
3091 * docs/buildbot.texinfo (Source Checkout): document it
3092 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
3093 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
3094 doVCFull() are handled by re-trying the checkout (after a delay)
3095 some number of times.
3096 (ShellCommand._startCommand): make header lines easier to read
3098 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
3100 (WebTest.test_logfile): make sure master gets shut down, silences
3101 some "unclean reactor" test errors
3103 * buildbot/test/test_changes.py (Sender.tearDown): spin the
3104 reactor once after shutdown, something in certain versions of
3105 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
3106 fails, svn-trunk is ok.
3108 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
3109 second win32 error message
3111 * buildbot/test/test_run.py (Status.testSlave): be smarter about
3112 validating the ETA, so the tests don't fail on slow systems
3114 2005-05-15 Brian Warner <warner@lothar.com>
3116 * buildbot/status/builder.py (HTMLLogFile): make this behave like
3117 the new LogFile class, so upgrading works properly
3118 (LogFileProducer.resumeProducing): survive resumeProducing after
3119 we've exhausted the chunkGenerator
3121 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
3123 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
3124 (Log.testUpgrade): same
3126 * docs/buildbot.texinfo (Maintenance): describe how to delete old
3127 Builds and logs with a cron job.
3129 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
3130 of the old non-offline LogFile, added code to upgrade these to
3131 new-style contents-live-on-disk instances at load time (in a way
3132 that doesn't invalidate the old Build pickles, so upgrading to
3133 0.6.5 is not a one-way operation). Got rid of everything related
3135 (LogFile.__init__): create LogFiles with the parent step status,
3136 the log's name, and a builder-relative filename where it can keep
3137 the contents on disk.
3138 (LogFile.hasContents): new method, clients are advised to call it
3139 before getText or getChunks and friends. If it returns False, the
3140 log's contents have been deleted and getText() will raise an
3142 (LogFile.getChunks): made it a generator
3143 (LogFile.subscribeConsumer): new method, takes a Twisted-style
3144 Consumer (except one that takes chunks instead of strings). This
3145 enables streaming of very large logfiles without storing the whole
3147 (BuildStatus.generateLogfileName): create names like
3148 12-log-compile-output, with a _0 suffix if required to be unique
3149 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
3150 or earlier) logfiles into new-style ones
3151 (BuilderStatus): remove everything related to 'stub' builds. There
3152 is now only one build cache, and we don't strip logs from old
3154 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
3155 since we no longer fight to keep it in the cache
3157 * buildbot/status/html.py (TextLog.render_GET): use a
3158 ChunkConsumer to stream the log entries efficiently.
3159 (ChunkConsumer): wrapper which consumes chunks and writes
3162 * buildbot/test/test_twisted.py (Parse.testParse): use a
3163 LogFile-like object instead of a real one
3165 * buildbot/test/test_status.py (MyLog): handle new LogFile code
3166 (Log.testMerge3): validate more merge behavior
3167 (Log.testChunks): validate LogFile.getChunks
3168 (Log.testUpgrade): validate old-style LogFile upgrading
3169 (Log.testSubscribe): validate LogFile.subscribe
3170 (Log.testConsumer): validate LogFile.subscribeConsumer
3172 * buildbot/interfaces.py (IStatusLogStub): remove
3173 (IStatusLog.subscribeConsumer): new method
3174 (IStatusLog.hasContents): new method
3175 (IStatusLogConsumer): describes things passed to subscribeConsumer
3177 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
3178 the log contents if it does not have any contents.
3179 (StatusResourceBuildStep.body): same
3180 (StatusResourceBuildStep.getChild): give a 404 for empty logs
3182 2005-05-14 Brian Warner <warner@lothar.com>
3184 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
3185 timeouts to try and make the windows metabuildslave not hang
3187 2005-05-13 Mike Taylor <bear@code-bear.com>
3189 * buildbot/slave/commands.py (rmdirRecursive): added a check
3190 to ensure the path passed into rmdirRecursive actually exists.
3191 On win32 a non-existant path would generate an exception.
3193 2005-05-13 Brian Warner <warner@lothar.com>
3195 * buildbot/slave/commands.py (rmdirRecursive): replacement for
3196 shutil.rmtree which behaves correctly on windows in the face of
3197 files that you have to chmod before deleting. Thanks to Bear at
3198 the OSAF for the routine.
3199 (SourceBase.doClobber): use rmdirRecursive
3201 2005-05-12 Brian Warner <warner@lothar.com>
3203 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
3204 method generate chunks instead of returning a big list. This
3205 allows the same method to be used for both old LogFile and new
3207 (OfflineLogFile.getText): use the generator
3208 (OfflineLogFile.subscribe): same
3209 * buildbot/status/html.py (TextLog.resumeProducing): same
3210 * buildbot/interfaces.py (IStatusLog.getChunks): document it
3212 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
3213 point out that OfflineLogFile does not currently work with
3214 html.Waterfall . Fixing this is high-priority.
3216 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
3217 apparently windows defaults to using stdout
3219 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
3220 better message on failure so I can figure out the win32 problem
3222 * buildbot/slave/commands.py (ShellCommand._startCommand): update
3223 log messages to include more useful copies of the command being
3224 run, the argv array, and the child command's environment.
3225 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
3227 2005-05-11 Brian Warner <warner@lothar.com>
3229 * setup.py: oops, install debug.glade so 'buildbot debugclient'
3231 * Makefile: update the deb-snapshot version
3233 * docs/buildbot.texinfo: move all .xhtml docs into a new
3234 .texinfo-format document, adding a lot of material in the process.
3235 This is starting to look like a real user's manual. Removed all
3236 the Lore-related files: *.xhtml, *.css, template.tpl .
3237 * docs/Makefile: simple makefile to run 'makeinfo'
3238 * buildbot/scripts/sample.cfg: rearrange slightly
3239 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
3241 2005-05-10 Brian Warner <warner@lothar.com>
3243 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
3244 different name for the internal twistw module, handle it.
3246 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
3247 * setup.py: .. and stop trying to install it
3249 * buildbot/process/step.py (Git): added support for 'cogito' (aka
3250 'git'), the new linux kernel VC system (http://kernel.org/git/).
3251 Thanks to Brandon Philips for the patch.
3252 * buildbot/slave/commands.py (Git): same
3254 2005-05-06 Brian Warner <warner@lothar.com>
3256 * buildbot/status/builder.py (OfflineLogFile): replace the default
3257 LogFile with a form that appends its new contents to a disk file
3258 as they arrive. The complete log data is never kept in RAM. This
3259 is the first step towards handling very large (100MB+) logfiles
3260 without choking quite so badly. (The other half is
3261 producer/consumer on the HTML pages).
3262 (BuildStepStatus.addLog): use OfflineLogFile by default
3263 (BuildStatus.getLogfileName): helper code to give the
3264 OfflineLogFile a filename to work with
3266 * buildbot/test/test_status.py (Results.testAddResults): update
3267 tests to handle new asserts
3268 * buildbot/test/test_vc.py (Patch.doPatch): same
3269 * buildbot/test/test_steps.py (BuildStep.setUp): same
3271 2005-05-05 Brian Warner <warner@lothar.com>
3273 * buildbot/scripts/runner.py (start): if there is no Makefile,
3274 launch the app by importing twistd's internals and calling run(),
3275 rather than spawning a new twistd process. This stands a much
3276 better chance of working under windows.
3277 (stop): kill the process with os.kill instead of spawning
3278 /bin/kill, again to reduce the number of external programs which
3279 windows might not have in the PATH. Also wait up to 5 seconds for
3280 the process to go away, allowing things like 'buildbot stop;
3281 buildbot start' to be reliable in the face of slow shutdowns.
3283 * buildbot/master.py (Dispatcher.__getstate__): remove old
3284 .tap-related methods
3285 (BuildMaster.__getstate__): same
3287 * buildbot/slave/bot.py (makeService): same
3288 (Options.longdesc): same
3289 * buildbot/scripts/runner.py: copy over some old mktap option text
3291 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
3292 'buildbot master' now creates a buildbot.tac file, so there is no
3293 longer a create-instance/save/reload sequence. mktap is dead, long
3295 * buildbot/scripts/sample.mk: use twistd -y, not -f
3296 * buildbot/test/test_config.py: remove mktap-based test
3297 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
3298 * README: don't reference mktap
3300 * docs/source.xhtml: document some of the attributes that Changes
3303 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
3305 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
3306 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
3307 * buildbot/changes/changes.py (Change)
3308 * buildbot/changes/mail.py (parseSyncmail)
3309 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
3311 * buildbot/process/base.py (Build.isTagImportant)
3315 2005-05-04 Brian Warner <warner@lothar.com>
3317 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
3318 connection after sending the change, so that unit tests don't
3319 complain about sockets being left around
3321 * buildbot/status/html.py (WaterfallStatusResource.body): fix
3322 exception in phase=0 rendering
3323 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3325 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
3327 * buildbot/master.py (BuildMaster.loadConfig): finally remove
3328 deprecated config keys: webPortnum, webPathname, irc, manholePort,
3329 and configuring builders with tuples.
3330 * buildbot/test/test_config.py: stop testing compatibility with
3331 deprecated config keys
3332 * buildbot/test/test_run.py: same
3334 2005-05-03 Brian Warner <warner@lothar.com>
3336 * contrib/arch_buildbot.py: survive if there are no logfiles
3337 (username): just use a string, os.getlogin isn't reliable
3339 * buildbot/scripts/runner.py (sendchange): oops, fix the command
3340 so 'buildbot sendchange' actually works. The earlier test only
3341 covered the internal (non-reactor-running) form.
3343 * contrib/arch_buildbot.py: utility that can run as an Arch hook
3344 script to notify the buildmaster about changes
3346 * buildbot/scripts/runner.py (sendchange): new command to send a
3347 change to a buildbot.changes.pb.PBChangeSource receiver.
3348 * buildbot/test/test_changes.py (Sender): test it
3350 * buildbot/master.py (BuildMaster.startService): mark .readConfig
3351 after any reading of the config file, not just when we do it in
3352 startService. This makes some tests a bit cleaner.
3354 * buildbot/changes/pb.py: add some log messages
3356 * buildbot/process/base.py (Build.startBuild): fix a bug that
3357 caused an exception when the build terminated in the very first
3359 (Build.stepDone): let steps return a status of EXCEPTION. This
3360 terminates the build right away, and sets the build's overall
3361 status to EXCEPTION too.
3362 * buildbot/process/step.py (BuildStep.failed): return a status of
3363 EXCEPTION when that is what has happened.
3365 * buildbot/process/step.py (Arch.computeSourceRevision): finally
3366 implement this, allowing Arch-based projects to get precise
3367 checkouts instead of always using the latest code
3368 (Bazaar): create variant of Arch to let folks use baz instead of
3369 tla. Requires a new buildslave too.
3370 * buildbot/slave/commands.py (Arch): add 'revision' argument
3371 (Bazaar): create variant of Arch that uses baz instead of tla.
3372 Remove the code that extracts the archive name from the
3373 register-archive output, since baz doesn't provide it, and require
3374 the user provide both the archive name and its location.
3375 * buildbot/test/test_vc.py (VC.testBazaar): added tests
3377 2005-05-02 Brian Warner <warner@lothar.com>
3379 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
3380 thanks to Nick Trout.
3382 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
3383 deals better with source Makefile coming from a read-only CVS
3384 checkout. Thanks to Nick Trout for the catch.
3386 * buildbot/__init__.py (version): bump to 0.6.4+ while between
3389 2005-04-28 Brian Warner <warner@lothar.com>
3391 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
3393 * debian/changelog: update for 0.6.4
3395 2005-04-28 Brian Warner <warner@lothar.com>
3397 * README.w32: add a checklist of steps for getting buildbot
3399 * MANIFEST.in: include it in the tarball
3403 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
3404 broken .tap files from 0.6.3 by getting rid of .services,
3405 .namedServices, and .change_svc at load time.
3407 2005-04-27 Brian Warner <warner@lothar.com>
3409 * NEWS: update in preparation for new release
3411 * buildbot/test/test_config.py (Save.testSave): don't pull in
3412 twisted.scripts.twistd, we don't need it and it isn't for windows
3415 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
3416 accomodate win32 which can't do atomic-rename
3418 2005-04-27 Brian Warner <warner@lothar.com>
3420 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
3421 timeouts to help the slow metabuildbot not flunk them so much
3422 (Disconnect.testBuild3): same
3423 (Disconnect.testBuild4): same
3424 (Disconnect.testInterrupt): same
3426 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
3427 setup, it was completely broken for new buildmasters (those which
3428 did not have a 'change.pck' already saved. Thanks to Paul Warren
3429 for catching this (embarrassing!) bug.
3430 (Dispatcher.__getstate__): don't save our registered avatar
3431 factories, since they'll be re-populated when the config file is
3433 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
3434 tests (since the real mktap-generated BuildMaster doesn't save
3436 (BuildMaster.__getstate__): don't save any service children,
3437 they'll all be re-populated when the config file is re-read.
3438 * buildbot/test/test_config.py (Save.testSave): test for this
3440 2005-04-26 Brian Warner <warner@lothar.com>
3442 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
3443 rendered with Blender.. looks a bit nicer.
3444 * buildbot/docs/images/icon.blend: add the Blender file for it
3446 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
3447 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
3448 running under windows. This appears to be the best way to allow
3449 BuildSteps to do something normal like 'trial -v buildbot.test' or
3450 'make foo' and still expect it to work. The idea is to make the
3451 BuildSteps look as much like what a developer would type when
3452 compiling or testing the tree by hand. This approach probably has
3453 problems when there are spaces in the arguments, so if you've got
3454 windows buildslaves, you'll need to pay close attention to your
3457 * buildbot/status/html.py (WaterfallStatusResource.body): add the
3458 timezone to the timestamp column.
3459 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3461 * buildbot/scripts/runner.py (loadOptions): do something sane for
3462 windows, I think. We use %APPDATA%/buildbot instead of
3463 ~/.buildbot, but we still search everywhere from the current
3464 directory up to the root for a .buildbot/ subdir. The "is it under
3465 $HOME" security test was replaced with "is it owned by the current
3466 user", which is only performed under posix.
3467 * buildbot/test/test_runner.py (Options.testFindOptions): update
3468 tests to match. The "is it owned by the current user" check is
3469 untested. The test has been re-enabled for windows.
3471 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
3472 any "\n" in the expected output with the platform-specific line
3473 separator. Make this separator "\r\n" on PTYs under unix, they
3474 seem to do that and I don't know why
3476 * buildbot/test/test_runner.py (Options.optionsFile): disable on
3477 windows for now, I don't know what ~/.buildbot/ should mean there.
3479 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
3480 win32 compatibility, don't use "/tmp"
3481 (Basedir.testChangeBuilddir): remove more unixisms
3483 2005-04-26 Brian Warner <warner@lothar.com>
3485 * buildbot/test/test_control.py (Force.rmtree): python2.2
3486 compatibility, apparently its shutil.rmtree ignore_errors=
3487 argument is ignored.
3488 * buildbot/test/test_run.py (Run.rmtree): same
3489 (RunMixin.setUp): same
3491 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
3494 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
3495 'substring in string' operator, must use string.find(substr)!=-1
3496 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
3497 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
3499 * buildbot/scripts/runner.py (loadOptions): add code to search for
3500 ~/.buildbot/, a directory with things like 'options', containing
3501 defaults for various 'buildbot' subcommands. .buildbot/ can be in
3502 the current directory, your $HOME directory, or anywhere
3503 inbetween, as long as you're somewhere inside your home directory.
3504 (debugclient): look in ~/.buildbot/options for master and passwd
3505 (statuslog): look in ~/.buildbot/options for 'masterstatus'
3506 * buildbot/test/test_runner.py (Options.testFindOptions): test it
3508 * buildbot/status/client.py (makeRemote): new approach to making
3509 IRemote(None) be None, which works under Twisted-2.0
3510 * buildbot/test/test_status.py (Client.testAdaptation): test it
3512 * buildbot/status/builder.py (Status.builderAdded): when loading a
3513 pickled BuilderStatus in from disk, set its name after loading.
3514 The config file might have changed its name (but not its
3515 directory) while it wasn't looking.
3517 * buildbot/process/builder.py (Builder.attached): always return a
3518 Deferred, even if the builder was already attached
3519 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
3521 2005-04-25 Brian Warner <warner@lothar.com>
3523 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
3524 category-related exception when announcing a build has finished
3526 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
3527 reference no-longer-existent changemaster.sources
3528 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
3530 * buildbot/__init__.py (version): bump to 0.6.3+ while between
3533 2005-04-25 Brian Warner <warner@lothar.com>
3535 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
3537 * debian/changelog: update for 0.6.3
3539 2005-04-25 Brian Warner <warner@lothar.com>
3541 * MANIFEST.in: make sure debug.glade is in the tarball
3543 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
3545 * NEWS: update for the imminent 0.6.3 release
3547 * buildbot/status/html.py (HtmlResource.content): make the
3548 stylesheet <link> always point at "buildbot.css".
3549 (StatusResource.getChild): map "buildbot.css" to a static.File
3550 containing whatever css= argument was provided to Waterfall()
3551 (Waterfall): provide the "classic" css as the default.
3552 * docs/waterfall.classic.css: move default CSS from here ..
3553 * buildbot/status/classic.css: .. to here
3555 * MANIFEST.in: make sure classic.css is included in the tarball
3556 * setup.py: and that it is installed too, under buildbot/status/
3558 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
3559 the module level, because buildbot.tap files from 0.6.2 don't have
3560 it in their attribute dictionary.
3562 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
3563 really exists at startup, might save some confusion somewhere.
3565 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
3567 * docs/waterfall.classic.css:
3568 add a stylesheet that's almost the same as the "classic"
3571 * buildbot/status/builder.py:
3572 add EXCEPTION as a result - this is a problem for the bot
3573 maintainer, not a build problem for the changers
3574 * buildbot/process/step.py:
3575 use EXCEPTION instead of FAILURE for exceptions
3576 * buildbot/status/html.py:
3577 add build_get_class to get a class out of a build/buildstep
3578 finish naming the classes
3579 split out sourceNames to changeNames and builderNames so we
3580 can style them separately
3581 * docs/config.xhtml:
3582 finish documenting classes as they are right now
3584 * buildbot/status/html.py:
3585 name the classes as we agreed on IRC
3586 * docs/config.xhtml:
3589 * buildbot/status/html.py:
3590 same for cssclass->class_
3592 * buildbot/status/html.py:
3593 as decided on IRC, use class_ for the "class" attribute to not
3594 conflict with the class keyword, and clean up the messy **{} stuff.
3596 * buildbot/status/mail.py:
3597 put back "builders" argument, and fix docstring, because the
3598 code *ignores* builders listed in this argument
3600 * buildbot/process/builder.py:
3601 remove FIXME notes - category is now indeed a cvar of BuilderStatus
3603 * docs/config.xhtml:
3604 describe the category argument for builders
3606 * buildbot/status/builder.py:
3607 Fix a silly bug due to merging
3609 * buildbot/process/builder.py:
3610 remove category from the process Builder ...
3611 * buildbot/status/builder.py:
3612 ... and add it to BuilderStatus instead.
3613 Set category on unpickled builder statuses, they might not have it.
3614 * buildbot/master.py:
3615 include category when doing builderAdded
3616 * buildbot/status/mail.py:
3617 return None instead of self for builders we are not interested in.
3618 * buildbot/test/test_run.py:
3619 fix a bug due to only doing deferredResult on "dummy" waiting
3620 * buildbot/test/test_status.py:
3621 add checks for the Mail IStatusReceiver returning None or self
3623 * buildbot/status/html.py:
3624 fix testsuite by prefixing page title with BuildBot
3626 * buildbot/status/builder.py:
3627 have .category in builder status ...
3628 * buildbot/process/builder.py:
3629 ... and set it from Builder
3630 * buildbot/status/html.py:
3631 make .css a class variable
3632 * buildbot/test/test_status.py:
3633 write more tests to cover our categories stuff ...
3634 * buildbot/status/mail.py:
3635 ... and fix the bug that this uncovered
3637 * buildbot/changes/mail.py:
3638 * buildbot/changes/pb.py:
3639 * buildbot/master.py:
3640 * buildbot/process/base.py:
3641 * buildbot/process/factory.py:
3642 * buildbot/process/interlock.py:
3643 * buildbot/process/step.py:
3644 * buildbot/process/step_twisted.py:
3645 * buildbot/slave/commands.py:
3646 * buildbot/status/builder.py:
3647 * buildbot/status/client.py:
3648 * buildbot/status/html.py:
3649 * buildbot/status/mail.py:
3650 * buildbot/status/progress.py:
3651 * buildbot/test/test_changes.py:
3652 * buildbot/test/test_config.py:
3653 * buildbot/test/test_control.py:
3654 * buildbot/test/test_interlock.py:
3655 * buildbot/test/test_maildir.py:
3656 * buildbot/test/test_mailparse.py:
3657 * buildbot/test/test_run.py:
3658 * buildbot/test/test_slavecommand.py:
3659 * buildbot/test/test_status.py:
3660 * buildbot/test/test_steps.py:
3661 * buildbot/test/test_twisted.py:
3662 * buildbot/test/test_util.py:
3663 * buildbot/test/test_vc.py:
3664 * buildbot/test/test_web.py:
3666 add test-case-name at the top of a whole set of files
3668 * buildbot/status/builder.py:
3669 keep order of addition when getting builder names
3670 * buildbot/status/words.py:
3671 * buildbot/test/test_run.py:
3672 add test for getBuilderNames
3674 * buildbot/process/base.py:
3675 * buildbot/process/step.py:
3676 * buildbot/status/builder.py:
3677 * buildbot/status/html.py:
3678 make buildbot css-able
3679 replace the color code for purple with purple, don't understand
3680 why it wasn't purple to start with
3682 * buildbot/status/words.py:
3683 ok, so it doesn't look like BuilderStatus.remote is still valid.
3684 Use what waterfall uses instead.
3686 * buildbot/interfaces.py:
3687 * buildbot/status/builder.py:
3688 * buildbot/status/html.py:
3689 * buildbot/status/mail.py:
3690 * buildbot/status/words.py:
3691 * buildbot/test/test_run.py:
3692 use categories everywhere and make it be a list. More sensible
3693 for the future. Also make words actually respect this in
3696 * buildbot/interfaces.py:
3697 add category argument to getBuilderNames
3698 * buildbot/process/builder.py:
3699 * buildbot/status/builder.py:
3700 * buildbot/status/html.py:
3701 * buildbot/status/mail.py:
3702 * buildbot/status/words.py:
3703 * buildbot/test/test_run.py:
3704 move from specifying builders by name to specifying the category
3706 * buildbot/status/html.py:
3707 * buildbot/status/words.py:
3708 add "builders=" to __init__ of status clients so they can
3709 limit themselves to the given list of builders to report on
3711 * buildbot/status/html.py: set the title to the product name
3713 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
3715 * buildbot/interfaces.py:
3716 * buildbot/status/builder.py:
3717 more documentation. Hm, not sure if ChangeLog entries make sense
3720 2005-04-23 Brian Warner <warner@lothar.com>
3722 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
3724 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
3726 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
3727 the sub-commands that log buildmaster status to stdout and to a
3728 GUI window, respectively.
3730 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
3731 functionality is working again, but all the step-status and ETA
3732 stuff is missing. Commented out a lot of code pending more
3735 * buildbot/status/client.py: make sure that IRemote(None) is None
3737 * buildbot/changes/changes.py: import defer, oops
3738 (ChangeMaster): remove the .sources list, rely upon the fact that
3739 MultiServices can be treated as sequences of their children. This
3740 cleans up the add/remove ChangeSource routines a lot, as we keep
3741 exactly one list of the current sources instead of three.
3743 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
3744 up an empty ChangeMaster at init time.
3745 (BuildMaster.loadChanges): if there are changes to be had from
3746 disk, replace self.change_svc with the new ones. If not, keep
3747 using the empty ChangeMaster set up in __init__.
3748 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
3749 instead of a separate list, makes the code a bit cleaner.
3750 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
3751 (ConfigTest.testSources): same, also wait for loadConfig to finish.
3752 Extend the test to make sure we can get rid of the sources when
3755 2005-04-22 Brian Warner <warner@lothar.com>
3757 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
3758 and info/host files when making the slave directory
3760 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
3761 whendone= argument, just return the Deferred and let the caller do
3762 what they want with it.
3763 (Disconnect.testBuild1): wait for shutdownSlave
3764 (Basedir.testChangeBuilddir): new test to make sure changes to the
3765 builddir actually get propagated to the slave
3767 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
3768 explicit method, rather than passing the builddir in __init__ .
3769 Make sure to update self.basedir too, this was broken before.
3770 (Bot.remote_setBuilderList): use b.setBuilddir for both new
3771 builders and for ones that have just had their builddir changed.
3772 (BotFactory): add a class-level .perspective attribute, so
3773 BuildSlave.waitUntilDisconnected won't get upset when the
3774 connection hasn't yet been established
3775 (BuildSlave.__init__): keep track of the bot.Bot instance, so
3776 tests can reach through it to inspect the SlaveBuilders
3778 * buildbot/process/base.py (Build.buildException): explain the
3779 log.err with a log.msg
3780 * buildbot/process/builder.py (Builder.startBuild): same
3781 (Builder._startBuildFailed): improve error message
3783 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
3784 occurred because we lost the brand-new connection, retry instead
3785 of giving up. If not, it's probably an authorization failure, and
3786 it makes sense to stop trying. Make sure we log.msg the reason
3787 that we're log.err'ing the failure, otherwise test failures are
3788 really hard to figure out.
3790 * buildbot/master.py: change loadConfig() to return a Deferred
3791 that doesn't fire until the change has been fully implemented.
3792 This means any connected slaves have been updated with the new
3793 builddir. This change makes it easier to test the code which
3794 actually implements this builddir-updating.
3795 (BotPerspective.addBuilder): return Deferred
3796 (BotPerspective.removeBuilder): same
3797 (BotPerspective.attached): same
3798 (BotPerspective._attached): same. finish with remote_print before
3799 starting the getSlaveInfo, instead of doing them in parallel
3800 (BotPerspective.list_done): same
3801 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3802 actually calling slave.disconnect()
3803 (BotMaster.addBuilder): same
3804 (BotMaster.removeBuilder): same
3805 (BuildMaster.loadConfig): same
3806 (BuildMaster.loadConfig_Slaves): same
3807 (BuildMaster.loadConfig_Sources): same
3808 (BuildMaster.loadConfig_Builders): same
3809 (BuildMaster.loadConfig_status): same
3811 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3812 a Deferred that fires when the source is finally removed
3814 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3815 the previous tree on win32, where we have to do it synchronously,
3816 make sure we return a Deferred anyway.
3817 (SourceBase.doCopy): same
3819 * buildbot/scripts/runner.py (statusgui): use the text client for
3820 now, while I rewrite the Gtk one
3821 * buildbot/clients/base.py: strip out old code, leaving just the
3822 basic print-message-on-event functionality. I also remove the
3823 ReconnectingPBClientFactory, but it does at least quit when it
3824 loses the connection instead of going silent
3826 2005-04-21 Brian Warner <warner@lothar.com>
3828 * Makefile: minor tweaks
3830 * NEWS: point out deprecation warnings, new features for
3833 * buildbot/master.py (BuildMaster.loadConfig): emit
3834 DeprecationWarnings for Builders defined with tuples. Rearrange
3835 code to facility removal of deprecated configuration keys in the
3838 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3839 'buildbot' command to put a little Makefile in the target that
3840 helps you re-create the buildbot.tap file, start or stop the
3841 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3842 all the files 0600, since they contain passwords.
3843 (start): if there is a Makefile, and /usr/bin/make exists, use
3844 'make start' in preference to a raw twistd command. This lets
3845 slave admins put things like PYTHONPATH variables in their
3846 Makefiles and have them still work when the slave is started with
3847 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3848 be nice to first try the 'make' command and only fall back to
3849 twistd if it fails. TODO: the Makefile's "start" command does not
3850 add the --reactor=win32 argument when running under windows.
3851 (Options.debugclient, Options.statusgui): add sub-commands to launch
3852 the debug client (formerly in contrib/debugclient.py) and the
3853 Gtk status application (currently broken)
3854 * buildbot/clients/debug.py: move from contrib/debugclient.py
3855 * buildbot/clients/debug.glade: same
3857 * buildbot/test/test_trial.py: remove it. This requires some
3858 functionality out of Twisted that isn't there yet, and until then
3859 having it around just confuses things.
3861 * buildbot/test/test_slavecommand.py (Shell): test both with and
3862 without PTYs, and make sure that command output is properly
3863 interleaved in the with-PTY case. I think the without-PTY test
3864 should pass on windows, where we never use PTYs anyway.
3866 2005-04-20 Brian Warner <warner@lothar.com>
3868 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
3870 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
3872 * NEWS: start creating entries for the next release
3874 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
3876 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
3877 (WebTest.test_webPathname): same
3878 (WebTest.test_webPathname_port): same
3879 (WebTest.test_waterfall): use the default favicon rather than
3880 rooting around the filesystem for it. Open the expected-icon file
3881 in binary mode, to make win32 tests happier (thanks to Nick Trout
3883 * buildbot/status/html.py (buildbot_icon): win32 portability
3885 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
3886 win32-compatibility fixes from Nick Trout, the "file not found" message
3887 is different under windows
3888 (FakeSlaveBuilder.__init__): clean up setup a bit
3889 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
3891 2005-04-19 Brian Warner <warner@lothar.com>
3893 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
3894 skip-if-repositories-are-unavailable test to not kill the trial
3895 that comes with Twisted-1.3.0
3897 * setup.py: install buildbot.png icon file when installing code
3899 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
3900 environment used by the command, at least on the child side.
3902 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
3903 this method needs to be added and implemented because it gets
3904 called under heavy load. I don't quite understand the
3905 producer/consumer API enough to write it.
3906 (StatusResource.getChild): add a resource for /favicon.ico
3907 (Waterfall.__init__): add favicon= argument
3908 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3909 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
3910 (WebTest.test_webPathname): same
3911 (WebTest.test_webPathname_port): same
3912 * docs/config.xhtml: mention favicon=
3913 * buildbot/buildbot.png: add a default icon, dorky as it is
3915 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
3917 * buildbot/master.py:
3918 * buildbot/process/base.py:
3919 * buildbot/process/builder.py:
3920 * buildbot/process/interlock.py:
3921 * buildbot/status/builder.py:
3922 * buildbot/status/html.py:
3923 * buildbot/status/mail.py:
3924 * buildbot/status/words.py:
3925 new documentation while digging through the code
3927 2005-04-17 Brian Warner <warner@lothar.com>
3929 * general: try to fix file modes on all .py files: a+r, a-x,
3930 but let buildbot/clients/*.py be +x since they're tools
3932 * docs/epyrun (addMod): when an import fails, say why
3934 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
3936 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3938 * buildbot/process/base.py:
3939 * buildbot/process/builder.py:
3940 * buildbot/status/builder.py:
3941 new documentation while digging through the code
3943 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3945 * buildbot/changes/changes.py:
3946 * buildbot/changes/p4poller.py:
3947 * buildbot/interfaces.py:
3948 * buildbot/process/base.py:
3949 * buildbot/process/builder.py:
3950 * buildbot/process/step.py:
3951 * buildbot/process/step_twisted.py:
3952 * buildbot/slave/bot.py:
3953 * buildbot/slave/commands.py:
3954 * buildbot/status/builder.py:
3955 fix all docstrings to make epydoc happy. In the process of fixing
3956 some, I also moved pieces of docs, and removed some deprecated
3959 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3961 * buildbot/process/builder.py:
3962 * buildbot/process/interlock.py:
3963 * buildbot/process/process_twisted.py:
3964 * buildbot/process/step.py:
3965 BuildProcess -> Build, as it looks like that's what happened
3966 * buildbot/process/base.py:
3967 * buildbot/process/factory.py:
3970 2005-04-17 Brian Warner <warner@lothar.com>
3972 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3973 update compile command to accomodate the Twisted split.. now
3974 instead of './setup.py build_ext -i', you do './setup.py all
3975 build_ext -i', to run build_ext over all sub-projects.
3976 (FullTwistedBuildFactory): same
3977 (TwistedReactorsBuildFactory): same
3979 * buildbot/status/html.py (TextLog.finished): null out self.req
3980 when we're done, otherwise the reference cycle of TextLog to .req
3981 to .notifications to a Deferred to TextLog.stop keeps them from
3982 being collected, and consumes a huge (610MB on pyramid at last
3983 check) amount of memory.
3985 2005-04-11 Brian Warner <warner@lothar.com>
3987 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3988 normalize the VC-repository location.. makes SVN happier with
3989 certain test environments.
3991 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3992 RemoteShellCommand gets its own .env dictionary, so that code in
3993 start() doesn't mutate the original. I think this should fix the
3994 step_twisted.Trial problem where multiple identical components
3995 kept getting added to PYTHONPATH= over and over again.
3997 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3998 adding epydoc-format docstrings to many classes. Thanks to Thomas
3999 Vander Stichele for the patches.
4000 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
4001 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
4002 * buildbot/slave/bot.py, commands.py, registry.py: same
4004 2005-04-05 Brian Warner <warner@lothar.com>
4006 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
4007 preserve timestamps, helps incremental builds of large trees.
4008 Patch from Rene Rivera.
4010 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
4011 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
4014 2005-04-03 Brian Warner <warner@lothar.com>
4016 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
4017 with one dict, apparently exec has some scoping bugs when used
4018 with both global/local dicts. Thanks to Nathaniel Smith for the
4021 2005-04-02 Brian Warner <warner@lothar.com>
4023 * buildbot/process/step_twisted.py (countFailedTests): the new
4024 trial in Twisted-2.0 emits a slightly different status line than
4025 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
4026 mistakenly think the test count is unparseable.
4027 (Trial.start): note that for some reason each build causes another
4028 copy of self.testpath to be prepended to PYTHONPATH. This needs to
4029 be fixed but I'm not sure quite where the problem is.
4031 2005-04-01 Brian Warner <warner@lothar.com>
4033 * buildbot/test/test_run.py (Run.testMaster): change some uses of
4034 deferredResult to avoid hangs/warnings under twisted-2.0
4035 (RunMixin.tearDown): same
4036 (RunMixin.shutdownSlave): same
4037 (Disconnect.testIdle1): same
4038 (Disconnect.testBuild2): same: wait one second after the build
4039 finishes for test to really be done.. this should be cleaned up to
4040 avoid wasting that second. Builder.detach uses a callLater(0),
4041 either that should be done in-line (something else needed that
4042 behavior), or it should return a Deferred that fires when the
4043 builder is really offline.
4044 (Disconnect.testBuild3): same
4045 (Disconnect.testDisappear): same
4047 * buildbot/test/test_web.py: rearrange server-setup and teardown
4048 code to remove unclean-reactor warnings from twisted-2.0
4050 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
4051 so the tests don't hang under twisted-2.0
4053 2005-03-31 Brian Warner <warner@lothar.com>
4055 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
4056 caused a warning each time the master changed our set of builders
4058 * buildbot/status/builder.py (BuildStatus.saveYourself): under
4059 w32, don't unlink the file unless it already exists. Thanks to
4060 Baptiste Lepilleur for the catch.
4061 (BuilderStatus.saveYourself): same
4063 2005-02-01 Brian Warner <warner@lothar.com>
4065 * buildbot/status/html.py (TextLog.getChild): use a /text child
4066 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
4067 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
4068 logfile as text/plain (no markup, no headers). This replaces the
4069 previous scheme (which used an ?text=1 argument), and gets us back
4070 to a relative link (which works better when the buildbot lives
4071 behind another web server, such as Apache configured as a reverse
4072 proxy). Thanks to Gerald Combs for spotting the problem.
4074 * buildbot/__init__.py (version): bump to 0.6.2+ while between
4077 2004-12-13 Brian Warner <warner@lothar.com>
4079 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
4081 * debian/changelog: update for 0.6.2
4082 * NEWS: finalize for 0.6.2
4084 2004-12-11 Brian Warner <warner@lothar.com>
4086 * NEWS: bring it up to date
4088 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
4089 detection code. Require some sign of life from the buildmaster
4090 every BotFactory.keepaliveInterval seconds. Provoke this
4091 indication at BotFactory.keepaliveTimeout seconds before the
4092 deadline by sending a keepalive request. We don't actually care if
4093 that request is answered in a timely fashion, what we care about
4094 is that .activity() is called before the deadline. .activity() is
4095 triggered by any PB message from the master (including an ack to
4096 one of the slave's status-update messages). With this new scheme,
4097 large status messages over slow pipes are OK, as long as any given
4098 message can be sent (and thus acked) within .keepaliveTimeout
4099 seconds (which defaults to 30).
4100 (SlaveBuilder.remote_startCommand): record activity
4101 (SlaveBuilder.ackUpdate): same
4102 (SlaveBuilder.ackComplete): same
4103 (BotFactory.gotPerspective): same
4104 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
4106 2004-12-09 Brian Warner <warner@lothar.com>
4108 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
4111 * buildbot/process/step_twisted.py (Trial._commandComplete):
4112 update self.cmd when we start the 'cat test.log' transfer. Without
4113 this, we cannot interrupt the correct RemoteCommand when we lose
4116 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
4117 trying to tell the slave to stop the command if we're already
4118 inactive, or if we no longer have a .remote
4120 * buildbot/process/builder.py (Builder._detached): don't let an
4121 exception in currentBuild.stopBuild() prevent the builder from
4122 being marked offline
4124 2004-12-07 Brian Warner <warner@lothar.com>
4126 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
4127 KeyError that happens when you ask for a non-existent Builder, and
4128 translate it into a UsageError.
4130 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
4131 losing the slave in the middle of a remote step is handled too
4133 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
4134 be a Failure, so be sure to stringify it before using it as the
4135 contents of the 'interrupt' logfile
4136 (RemoteCommand.interrupt): use stringified 'why' in
4137 remote_interruptCommand too, just in case
4139 2004-12-06 Brian Warner <warner@lothar.com>
4141 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
4142 instead of 'tla update', which is more efficient in case we've
4143 missed a couple of patches since the last update.
4145 * debian/changelog: update for previous (0.6.1) release. Obviously
4146 this needs to be handled better.
4148 2004-12-05 Brian Warner <warner@lothar.com>
4150 * NEWS: update for stuff since last release
4152 * buildbot/master.py (DebugPerspective.attached): return 'self', to
4153 match the maybeDeferred change in Dispatcher.requestAvatar
4154 * buildbot/changes/pb.py (ChangePerspective.attached): same
4155 * buildbot/status/client.py (StatusClientPerspective.attached): same
4156 * buildbot/process/builder.py (Builder._attached3): same
4157 * buildbot/pbutil.py (NewCredPerspective.attached): same
4159 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
4160 the date to the top-most box, if it is not the same as today's
4163 * docs/slave.xhtml: provide a buildslave setup checklist
4165 * docs/source.xhtml (Arch): correct terminology
4167 2004-12-04 Brian Warner <warner@lothar.com>
4169 * buildbot/test/test_slavecommand.py: use sys.executable instead
4170 of hard-coding 'python' for child commands, might help portability
4172 * docs/examples/twisted_master.cfg: update to current usage
4174 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
4175 'stop build' command to the IRC bot
4177 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
4178 message that broke PBChangeSource
4180 * buildbot/slave/bot.py: clean up shutdown/lose-master code
4181 (SlaveBuilder): make some attributes class-level, remove the old
4182 "update queue" which existed to support resuming a build after the
4183 master connection was lost. Try to reimplement that feature later.
4184 (SlaveBuilder.stopCommand): clear self.command when the
4185 SlaveCommand finishes, so that we don't try to kill a leftover one
4187 (SlaveBuilder.commandComplete): same, merge with commandFailed and
4190 * buildbot/slave/commands.py (SourceBase): set self.command for
4191 all VC commands, so they can be interrupted.
4193 2004-12-03 Brian Warner <warner@lothar.com>
4195 * buildbot/master.py: clean up slave-handling code, to handle
4196 slave-disconnect and multiple-connect better
4197 (BotPerspective): make these long-lasting, exactly one per bot
4198 listed in the config file.
4199 (BotPerspective.attached): if a slave connects while an existing
4200 one appears to still be connected, disconnect the old one first.
4201 (BotPerspective.disconnect): new method to forcibly disconnect a
4202 buildslave. Use some hacks to empty the transmit buffer quickly to
4203 avoid the long (20-min?) TCP timeout that could occur if the old
4204 slave has dropped off the net.
4205 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
4206 own their own SlaveStatus objects. Remove .attached/.detached, add
4207 .addSlave/.removeSlave, treat slaves like Builders (config file
4208 parsing sends deltas to the BotMaster). Inform the slave
4209 instances, i.e. the BotPerspective, about addBuilder and
4211 (BotMaster.getPerspective): turns into a single dict lookup
4212 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
4213 which gives BotPerspective.attached a chance to disconnect the old
4215 (BuildMaster.loadConfig): add code (disabled) to validate that all
4216 builders use known slaves (listed in c['bots']). The check won't
4217 work with tuple-specified builders, which are deprecated but not
4218 yet invalid, so the check is disabled for now.
4219 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
4220 routine, do the add/changed/removed dance with them like we do
4222 (BuildMaster.loadConfig_Sources): move source-config into a
4223 separate routine too
4225 * buildbot/status/builder.py (Status.getSlave): get the
4226 SlaveStatus object from the BotPerspective, not the BotMaster.
4228 * buildbot/test/test_run.py: bunch of new tests for losing the
4229 buildslave at various points in the build, handling a slave that
4230 connects multiple times, and making sure we can interrupt a
4233 * buildbot/slave/bot.py (BuildSlave): make it possible to use
4234 something other than 'Bot' for the Bot object, to make certain
4235 test cases easier to write.
4236 (BuildSlave.waitUntilDisconnected): utility method for testing
4238 2004-11-30 Brian Warner <warner@lothar.com>
4240 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
4242 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
4243 argument, return a Deferred that always fires with True or False.
4244 I don't use an errback to indicate 'ping failed' so that callers
4245 are free to ignore the deferred without causing spurious errors in
4247 * buildbot/process/builder.py (BuilderControl.ping): implement it
4249 * buildbot/test/test_run.py (Status.testDisappear): test ping
4250 (Status.disappearSlave): fix it
4252 2004-11-30 Brian Warner <warner@lothar.com>
4254 * buildbot/interfaces.py (IBuildControl): add .stopBuild
4255 (IBuilderControl): add .getBuild(num), only works for the current
4256 build, of course, although it might be interesting to offer
4257 something for builds in the .waiting or .interlocked state.
4259 * buildbot/process/base.py (Build): have .stopBuild just do the
4260 interrupt, then let the build die by itself.
4261 (BuildControl): add .stopBuild, and add a point-event named
4262 'interrupt' just after the build so status viewers can tell that
4264 (BuilderControl): add .getBuild
4266 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
4267 stops when you kill it, good for testing
4268 (ShellCommand.interrupt): add a logfile named 'interrupt' which
4269 contains the 'reason' text.
4271 * buildbot/status/html.py: Add Stop Build button, if the build can
4272 still be stopped. Send a Redirect (to the top page) one second
4273 later, hopefully long enough for the interrupt to have an effect.
4274 Move make_row() up to top-level to share it between Stop Build and
4277 * buildbot/slave/commands.py: only kill the child process once
4279 * buildbot/test/test_run.py: add testInterrupt
4281 2004-11-29 Brian Warner <warner@lothar.com>
4283 * buildbot/process/base.py: Refactor command interruption. The
4284 Build is now responsible for noticing that the slave has gone
4285 away: Build.lostRemote() interrupts the current step and makes
4286 sure that no further ones will be started.
4288 * buildbot/process/builder.py: When the initial remote_startBuild
4289 message fails, log it: this usually indicates that the slave has
4290 gone away, but we don't really start paying attention until they
4291 fail to respond to the first step's command.
4293 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
4294 slave disconnect. Now sports a new interrupt() method. Error
4295 handling was simplified a lot by chaining deferreds, so
4296 remoteFailed/remoteComplete were merged into a single
4297 remoteComplete method (which can now get a Failure object).
4298 Likewise failed/finished were merged into just _finished.
4299 (BuildStep): Add interrupt(why) method, and if why is a
4300 ConnectionLost Failure then the step is failed with some useful
4303 * buildbot/slave/bot.py: stop the current command when the remote
4304 Step reference is lost, and when the slave is shut down.
4305 (Bot): make it a MultiService, so it can have children. Use
4306 stopService to tell when the slave is shutting down.
4307 (SlaveBuilder): make it a Service, and a child of the Bot. Add
4308 remote_interruptCommand (which asks the current SlaveCommand to
4309 stop but allows it to keep emitting status messages), and
4310 stopCommand (which tells it to shut up and die).
4312 * buildbot/slave/commands.py: make commands interruptible
4313 (ShellCommand.kill): factor out os.kill logic
4314 (Command): factor out setup()
4315 (Command.sendStatus): don't send status if .running is false, this
4316 happens when the command has been halted.
4317 (Command.interrupt): new method, used to tell the command to die
4318 (SlaveShellCommand): implement .interrupt
4319 (DummyCommand): implement .interrupt
4320 (SourceBase, etc): factor out setup(), don't continue substeps if
4323 * buildbot/status/builder.py: fix all waitUntilFinished() methods
4324 so they can be called after finishing
4326 * buildbot/test/test_run.py: new tests for disconnect behavior,
4327 refactor slave-shutdown routines, add different kinds of
4330 2004-11-27 Brian Warner <warner@lothar.com>
4332 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
4333 method to express ETA time like "2m45s" instead of "165 seconds"
4335 2004-11-24 Brian Warner <warner@lothar.com>
4337 * buildbot/test/test_vc.py (VC.testArch): unregister the test
4338 archive after the test completes, to avoid cluttering the user's
4339 'tla archives' listing with a bogus entry. Arch doesn't happen to
4340 provide any way to override the use of ~/.arch-params/, so there
4341 isn't a convenient way to avoid touching the setup of the user who
4343 (VC_HTTP.testArchHTTP): same
4345 2004-11-23 Brian Warner <warner@lothar.com>
4347 * buildbot/status/html.py (TextLog): split render() up into
4348 render_HEAD and render_GET. Use a Producer when sending log
4349 chunks, to reduce memory requirements and avoid sending huge
4350 non-Banana-able strings over web.distrib connections. Requires
4351 peeking under the covers of IStatusLog.
4352 (TextLog.resumeProducing): fix the "as text" link, handle client
4353 disconnects that occur while we're still sending old chunks.
4355 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
4356 use defer.succeed, not the non-existent defer.success
4357 (LogFile.waitUntilFinished): same
4358 (LogFile.subscribe): don't add watchers to a finished logfile
4360 * buildbot/__init__.py (version): bump to 0.6.1+ while between
4363 2004-11-23 Brian Warner <warner@lothar.com>
4365 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
4367 2004-11-23 Brian Warner <warner@lothar.com>
4369 * NEWS: update for the 0.6.1 release
4370 * MANIFEST.in: add new files
4372 * README (INSTALLATION): explain how to enable the extra VC tests
4374 * buildbot/status/builder.py (LogFile): add .runEntries at the class
4375 level to, so old pickled builds can be displayed ok
4377 2004-11-22 Brian Warner <warner@lothar.com>
4379 * NEWS: summarize updates since last release
4381 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
4382 Yoz Grahame. Closes SF#1050138.
4384 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
4387 * buildbot/process/step_twisted.py (Trial): update docs a bit
4389 * docs/factories.xhtml: fix Trial factory docs to match reality.
4392 * buildbot/process/factory.py (Trial.__init__): add args for
4393 randomly= and recurse=, making them available to instantiators
4394 instead of only to subclassers. Closes: SF#1049759.
4396 2004-11-15 Brian Warner <warner@lothar.com>
4398 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4399 try to teach the Quick factory to use multiple versions of python
4401 2004-11-12 Brian Warner <warner@lothar.com>
4403 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
4404 safer w32-compatible approach, and only use it on windows
4405 (BuildStatus.saveYourself): same
4407 2004-11-11 Brian Warner <warner@lothar.com>
4409 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
4410 it: one string merge per chunk. There are now separate .entries
4411 and .runEntries lists: when enumerating over all chunks, make sure
4413 * buildbot/test/test_status.py (Log): more tests
4415 * buildbot/status/builder.py (LogFile.addEntry): Merge string
4416 chunks together, up to 10kb per chunk. This ought to cut down on
4417 the CPU-burning overhead of large log files. Thanks to Alexander
4418 Staubo for spotting the problem.
4419 * buildbot/test/test_status.py (Log): tests for same
4421 2004-11-10 Brian Warner <warner@lothar.com>
4423 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
4424 header to outbound mail
4425 * buildbot/test/test_status.py (Mail.testBuild1): test for same
4427 2004-11-08 Brian Warner <warner@lothar.com>
4429 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
4430 can't do os.rename() onto an existing file, so catch the exception
4431 and unlink the target file first. This introduces a slight window
4432 where the existing file could be lost, but the main failure case
4433 (disk full) should still be handled safely.
4434 (BuildStatus.saveYourself): same
4436 * buildbot/changes/pb.py (ChangePerspective): use a configurable
4437 separator character instead of os.sep, because the filenames being
4438 split here are coming from the VC system, which can have a
4439 different pathname convention than the local host. This should
4440 help a buildmaster running on windows that uses a CVS repository
4441 which runs under unix.
4442 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
4444 * buildbot/process/step_twisted.py (Trial.createSummary): survive
4445 when there are no test failures to be parsed
4447 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
4448 instead of the unix-specific os.system("cp"), thanks to Elliot
4449 Murphy for this and the other buildbot-vs-windows catches.
4450 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
4452 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
4453 echo the command as it is run
4455 * setup.py: install sample.mk too, not just sample.cfg
4456 (scripts): install contrib/windows/buildbot.bat on windows
4458 2004-11-07 Brian Warner <warner@lothar.com>
4460 * buildbot/process/builder.py (Builder._detached): clear the
4461 self.currentBuild reference, otherwise the next build will be
4462 skipped because we think the Builder is already in use.
4464 * docs/examples/twisted_master.cfg: update to match current usage
4465 on the Twisted buildbot
4467 2004-10-29 Brian Warner <warner@lothar.com>
4469 * buildbot/status/mail.py (MailNotifier): fix typo in docs
4471 2004-10-28 Brian Warner <warner@lothar.com>
4473 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
4474 have separate doVCUpdate/doVCFull methods. Catch an update failure
4475 and respond by clobbering the source directory and re-trying. This
4476 will handle local changes (like replacing a file with a directory)
4477 that will cause CVS and SVN updates to fail.
4478 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
4480 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
4483 2004-10-19 Brian Warner <warner@lothar.com>
4485 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
4487 * buildbot/status/html.py (StatusResourceTestResults): display any
4488 TestResults that the Build might have
4489 (StatusResourceTestResult): and the logs for each TestResult
4490 (StatusResourceBuild): add link from the per-build page
4492 2004-10-15 Brian Warner <warner@lothar.com>
4494 * buildbot/process/step_twisted.py (Trial.createSummary): parse
4495 the 'problems' portion of stdout, add TestResults to our build
4496 * buildbot/test/test_twisted.py (Parse.testParse): test it
4498 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
4499 to retrieve a dict of accumulated test results
4500 (ITestResult): define what a single test result can do
4501 * buildbot/status/builder.py (TestResult): implement ITestResult
4502 (BuildStatus.getTestResults): retrieve dict of TestResults
4503 (BuildStatus.addTestResult): add TestResults
4504 * buildbot/test/test_status.py (Results.testAddResults): test it
4506 2004-10-14 Brian Warner <warner@lothar.com>
4508 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
4509 instead of os.system("rm -rf") for win32 portability
4511 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
4512 SignalMixin instead of starting/stopping the reactor, which is
4513 likely to cause problems with other tests
4515 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
4516 self.copyComplete() call. Yoz Grahame makes the catch.
4518 * contrib/windows/buildbot.bat: helper script to deal with path
4519 issues. Thanks to Yoz Grahame.
4521 * buildbot/master.py (BuildMaster.startService): don't register a
4522 SIGHUP handler if the signal module has no SIGHUP attribute.
4523 Apparently win32 does this.
4525 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
4527 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
4528 test if the reactor can't offer UNIX sockets
4530 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
4531 error introduced in the last commit. We really need that
4534 2004-10-12 Brian Warner <warner@lothar.com>
4536 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
4537 when describing a maildir source. Thanks to Stephen Davis.
4539 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
4542 * buildbot/scripts/runner.py (createMaster): install Makefile too
4543 (start): add --no_save to 'start' command
4544 * buildbot/scripts/sample.mk: simple convenience Makefile with
4545 start/stop/reload targets
4547 * buildbot/__init__.py (version): bump to 0.6.0+ while between
4550 2004-09-30 Brian Warner <warner@lothar.com>
4552 * setup.py: Releasing buildbot-0.6.0
4554 2004-09-30 Brian Warner <warner@lothar.com>
4556 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
4557 test_trial.py from the source tarball until support is complete.
4559 * NEWS: update for 0.6.0 release
4560 * buildbot/__init__.py (version): same
4563 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
4564 'source' command to tell users where to get the Buildbot source
4566 * docs/examples/*.cfg: update to modern standards
4568 * NEWS: update for release
4570 * buildbot/scripts/runner.py (createMaster): remove the
4571 -shutdown.tap stuff now that it isn't necessary
4573 (start): launch buildbot.tap, not buildbot-shutdown.tap
4576 * buildbot/status/mail.py (Domain): shorten class name
4577 (MailNotifier): if lookup= is a string, pass it to Domain()
4578 * buildbot/test/test_status.py (Mail.testBuild1): new class name
4579 (Mail.testBuild2): test the string-to-Domain shortcut
4580 (Mail.testMail): fix test
4583 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
4586 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
4587 more attributes on load
4588 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
4589 to accomodate the whole waterfall page at once, and the thrashing
4590 results in a lot of unnecessary loads
4591 (BuildStatus.saveYourself): use binary pickles, not fluffy text
4592 (BuilderStatus.saveYourself): same
4593 (BuilderStatus.eventGenerator): stop generating on the first missing
4594 build. We assume that saved builds are deleted oldest-first.
4595 (BuildStepStatus.__getstate__): .progress might not exist
4597 * buildbot/changes/changes.py (ChangeMaster): make it
4598 serializable, in $masterdir/changes.pck
4599 (ChangeMaster.stopService): save on shutdown
4600 * buildbot/master.py (BuildMaster.loadChanges): load at startup
4601 * buildbot/test/test_config.py: load Changes before config file
4604 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
4605 "Oh my god, you killed the command" header on a separate line
4607 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
4608 skip over corrupted build pickles
4609 (BuilderStatus.getFullBuildByNumber): same
4610 (BuilderStatus.eventGenerator): skip over unavailable builds
4611 (BuildStatus.saveYourself): save builds to a .tmp file first, then
4612 do an atomic rename. This prevents a corrupted pickle when some
4613 internal serialization error occurs.
4614 (BuilderStatus.saveYourself): same
4616 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
4617 the timeout for shell commands, it got lost somehow
4619 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
4620 run out of build steps, return the rest of the builder events
4622 * buildbot/interfaces.py (IBuilderControl.ping): add method
4624 * buildbot/process/builder.py (BuilderControl.ping): move
4625 slave-ping to BuilderControl, and fix the failure case in the
4626 process (Event.finish() is the verb, Event.finished is the noun).
4628 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
4629 through the BuilderControl instead of the BuilderStatus
4630 (EventBox): add adapter for builder.Event, allowing builder events to
4631 be displayed in the waterfall display
4633 * buildbot/master.py (BotMaster.stopService): add a 'master
4634 shutdown' event to the builder's log
4635 (BuildMaster.startService): and a 'master started' on startup
4637 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
4638 builder events into the BuildStep event stream
4639 (Status.builderAdded): add a 'builder created' event
4642 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
4643 command to announce the completion of a running build
4644 (IrcStatusBot.command_FORCE): announce when the build finishes
4646 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
4647 don't evict unfinished builds from the cache: they must stay in
4648 the full-cache until their logfiles have stopped changing. Make
4649 sure the eviction loop terminates if an unfinished build was hit.
4650 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
4651 This lets exceptions be dumped in an email status message. Really
4652 we need LogFiles which contain both text and HTML, instead of two
4654 (BuildStatus.__getstate__): handle self.finished=False
4655 (Status.builderAdded): if the pickle is corrupted, abandon the
4656 history and create a new BuilderStatus object.
4658 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
4659 self.progress attribute, helped one test which doesn't fully set
4660 up the Build object.
4662 * buildbot/interfaces.py (IStatusLogStub): split out some of the
4663 IStatusLog methods into an Interface that is implemented by "stub"
4664 logs, for which all the actual text chunks are on disk (in the
4665 pickled Build instance). To show the log contents, you must first
4666 adapt the stub log to a full IStatusLog object.
4668 * buildbot/status/builder.py (LogFileStub): create separate stub
4669 log objects, which can be upgraded to a real one if necessary.
4670 (LogFile): make them persistable, and let them stubify themselves
4672 (BuildStepStatus): same
4674 (BuildStatus.saveYourself): save the whole build out to disk
4675 (BuilderStatus): make it persistable
4676 (BuilderStatus.saveYourself): save the builder to disk
4677 (BuilderStatus.addFullBuildToCache): implement two caches which
4678 hold Build objects: a small one which holds full Builds, and a
4679 larger one which holds "stubbed" Builds (ones with their LogFiles
4680 turned into LogFileStubs). This reduces memory usage by the
4681 buildmaster by not keeping more than a few (default is 2) whole
4682 build logs in RAM all the time.
4683 (BuilderStatus.getBuild): rewrite to pull from disk (through the
4685 (BuilderStatus.eventGenerator): rewrite since .builds went away
4686 (BuilderStatus.buildStarted): remove the .builds array. Add the
4687 build to the "full" cache when it starts.
4688 (BuilderStatus._buildFinished): save the build to disk when it
4690 (Status): give it a basedir (same as the BuildMaster's basedir)
4691 where the builder pickles can be saved
4692 (Status.builderAdded): create the BuilderStatus ourselves, by
4693 loading a pickle from disk (or creating a new instance if there
4694 was none on disk). Return the BuilderStatus so the master can glue
4695 it into the new Builder object.
4697 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
4698 all BuilderStatuses to save themselves out to disk. This is in
4699 lieu of saving anything important in the main Application pickle
4700 (the -shutdown.tap file).
4701 (BuildMaster.__init__): give Status() a basedir for its files
4702 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
4703 to get the BuilderStatus, then give it to the Builder (instead of
4704 doing it the other way around). It's ok if the status announces
4705 the new Builder before it's really ready, as the outside world can
4706 only see the BuilderStatus object anyway (and it is ready before
4707 builderAdded returns). Use the builder's "builddir" (which
4708 normally specifies where the slave will run the builder) as the
4709 master's basedir (for saving serialized builds).
4711 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
4712 coerce the logfile to IStatusLog before trying to get the text
4713 chunks out of it. This will pull the full (non-stubified) Build in
4714 from disk if necessary.
4715 (TextLog): fix the adapter registration
4717 * buildbot/test/test_control.py (Force.setUp): create the basedir
4718 * buildbot/test/test_web.py: same
4719 * buildbot/test/test_vc.py (SetupMixin.setUp): same
4720 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
4721 * buildbot/test/test_run.py (Run.testMaster): same
4722 (Status.setUp): same
4724 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
4726 * buildbot/status/html.py (Waterfall.__init__): store actual
4727 allowForce flag passed in rather than using True for everyone;
4728 make sure setting it to False doesn't cause a NameError
4730 (StatusResourceBuilder.__init__) add the builder name to the page
4732 (StatusResourceBuilder.body) move HTML generation for a name/value
4733 row into a helper method (StatusResourceBuilder.make_row); only
4734 generate the "Force Build" form if allowForce was True and the
4735 slave is connected. Use class attributes in the generated HTML to
4736 spread a little CSS-joy.
4738 2004-09-28 Brian Warner <warner@lothar.com>
4740 * buildbot/process/step_twisted.py (Trial.createSummary): fix
4741 warning-scanner to not ignore things like
4742 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
4744 * buildbot/status/html.py (StatusResource.control): add some
4745 class-level values for .control in an attempt to make upgrading
4748 * buildbot/util.py (ComparableMixin): survive missing attributes,
4749 such as when a class is modified and we're comparing old instances
4752 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
4753 failure handling, remove a redundant try/except block. Don't
4754 return the full traceback to the IRC channel.
4755 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
4756 error messages. Get ETA properly.
4758 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
4759 the reason, since (at least) IRC message will have <> in them.
4760 (StatusResourceBuilder.__init__): take an IBuilderControl
4761 (StatusResourceBuilder.force): use the IBuilderControl we get in
4762 the constructor instead of trying to make our own. Catch the
4763 new exceptions and ignore them for now (until we make an
4764 intermediate web page where we could show the error message)
4765 (StatusResource): create with an IControl, use it to give an
4766 IBuilderControl to all children
4767 (Waterfall): take an allowForce= option, pass an IControl object
4768 to StatusResource if it is True
4770 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
4772 * buildbot/master.py (BotPerspective.perspective_forceBuild):
4773 catch new exceptions and return string forms
4775 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
4776 * buildbot/process/builder.py (Builder.forceBuild): raise them
4777 * buildbot/test/test_control.py (Force.testNoSlave): new test
4778 (Force.testBuilderInUse): same
4781 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
4783 * buildbot/test/test_run.py: use IControl
4784 * buildbot/test/test_vc.py: same
4786 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
4787 to use IControl. Still offline.
4788 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
4790 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
4791 who=None so periodic builds don't send out status mail
4792 (Builder.forceBuild): include reason in the log message
4793 (BuilderControl.forceBuild): rename 'name' to 'who'
4795 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
4796 'who' parameter, but make it None by default so builds forced by
4797 slave admins don't cause status mail to be sent to anybody
4798 (BotMaster.forceBuild): same. this method is deprecated.
4799 (DebugPerspective.perspective_forceBuild): same, use IControl.
4800 (DebugPerspective.perspective_fakeChange): use IControl..
4801 (Dispatcher.requestAvatar): .. so don't set .changemaster
4803 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4804 parameter to avoid confusion with the name of the builder
4807 * buildbot/status/mail.py: refine comment about needing 2.3
4809 * buildbot/status/html.py: move all imports to the top
4811 * buildbot/test/test_control.py: test new interfaces
4812 * buildbot/test/test_run.py (Status): handle new interfaces
4813 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4815 * buildbot/process/base.py (BuildControl): implement IBuildControl
4816 and its lonely getStatus() method
4818 * buildbot/process/builder.py (BuilderControl): implement
4819 IBuilderControl, obtained by adapting the Builder instance
4820 (Builder.startBuild): return a BuilderControl instead of a
4821 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4822 accomplish the same thing.
4824 * buildbot/master.py: move all import statements to the top
4825 (Control): implement IControl, obtained by adapting the
4826 BuildMaster instance.
4828 * buildbot/interfaces.py: add IControl, IBuilderControl, and
4829 IBuildControl. These are used to force builds. Eventually they
4830 will provide ways to reconfigure the Builders, pause or abandon a
4831 Build, and perhaps control the BuildMaster itself.
4833 2004-09-26 Brian Warner <warner@lothar.com>
4835 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4836 ends up comparing us against something without a .__class__
4838 2004-09-24 Brian Warner <warner@lothar.com>
4840 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4843 * Makefile: add 'deb-snapshot' target, to create a timestamped
4846 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4848 2004-09-23 Brian Warner <warner@lothar.com>
4850 * buildbot/__init__.py (version): move version string here
4851 * setup.py: get version string from buildbot.version
4852 * buildbot/status/html.py (WaterfallStatusResource.body): add
4853 buildbot version to the page footer
4854 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4857 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4858 slaves, let the second know where the first one is coming from
4859 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
4860 see our exceptions. It would be nice if there were a way to just
4861 send them the exception type and value, not the full traceback.
4864 * buildbot/status/mail.py (MailNotifier): add a new argument
4865 sendToInterestedUsers=, which can be set to False to disable the
4866 usual send-to-blamelist behavior.
4867 (top): handle python-2.2 which has no email.MIMEMultipart
4868 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
4869 (MailNotifier.disownServiceParent): unsubscribe on removal
4871 * buildbot/test/test_status.py (Mail.testBuild2): test it
4874 * buildbot/status/progress.py (Expectations.wavg): tolerate
4875 current=None, which happens when steps start failing badly
4876 * buildbot/test/test_status.py (Progress.testWavg): test for it
4878 * buildbot/process/step.py (SVN.startVC): when the (old) slave
4879 doesn't understand args['revision'], emit a warning instead of
4880 bailing completely. Updating to -rHEAD is probably close enough.
4882 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
4884 * buildbot/test/test_status.py: at least import bb.status.client
4885 even if we don't have any test coverage for it yet
4887 * contrib/svn_buildbot.py: don't require python2.3
4888 (main): wait, do require it (for sets.py), but explain how to
4889 make it work under python2.2
4891 2004-09-23 Brian Warner <warner@lothar.com>
4893 * contrib/svn_buildbot.py: include the revision number in the Change
4895 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
4896 using util.now() because FreshCVS is a realtime service
4898 * buildbot/status/event.py: delete dead code
4899 * buildbot/process/step.py: don't import dead Event class
4900 * buildbot/process/step_twisted.py: same
4901 * buildbot/status/builder.py: same
4902 * buildbot/status/client.py: same
4904 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
4906 * buildbot/changes/changes.py (Change): set .when from an __init__
4907 argument (which defaults to now()), rather than having
4908 ChangeMaster.addChange set it later.
4909 (ChangeMaster.addChange): same
4911 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
4912 (parseSyncmail): same. Just use util.now() for now.
4913 (parseBonsaiMail): parse the timestamp field for when=
4915 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
4916 instead of setting .when after the fact
4920 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
4921 results when the target project uses retrial. Still under
4923 * buildbot/test/test_trial.py: same
4925 2004-09-21 Brian Warner <warner@lothar.com>
4927 * buildbot/status/mail.py (MailNotifier.__init__): include
4928 success/warnings/failure in the Subject line
4929 (MailNotifier.buildMessage): add the buildbot's URL to the body,
4930 use step.logname for the addLogs=True attachment filenames
4931 * buildbot/test/test_status.py (Mail): test Subject lines
4932 (Mail.testLogs): test attachment filenames
4934 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
4935 accept a 'who' argument from the debug tool
4936 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
4937 * contrib/debug.glade: add text box to set 'who'
4939 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
4940 .getBuilderName with .getBuilder().getName(), more flexible
4941 (IStatusLog.getName): logs have short names, but you can prefix
4942 them with log.getStep().getName() to make them more useful
4943 * buildbot/status/builder.py: same
4944 * buildbot/status/client.py: same
4945 * buildbot/status/html.py: same
4946 * buildbot/test/test_run.py (Status.testSlave): same
4947 * buildbot/process/step.py: tweak logfile names
4949 * buildbot/status/mail.py (MailNotifier): add lookup, change
4950 argument to extraRecipients. The notifier is now aimed at sending
4951 mail to the people involved in a particular build, with additional
4952 constant recipients as a secondary function.
4954 * buildbot/test/test_status.py: add coverage for IEmailLookup,
4955 including slow-lookup and failing-lookup. Make sure the blamelist
4956 members are included.
4958 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
4959 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
4960 (IBuildStatus.getInterestedUsers): new method
4961 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
4962 * buildbot/status/client.py (remote_getResponsibleUsers): same
4963 * buildbot/status/html.py (StatusResourceBuild.body): same
4964 * buildbot/test/test_run.py (Status.testSlave): same
4966 2004-09-20 Brian Warner <warner@lothar.com>
4968 * docs/users.xhtml: update concepts
4970 * Makefile: add a convenience makefile, for things like 'make
4971 test'. It is not included in the source tarball.
4973 2004-09-16 Brian Warner <warner@lothar.com>
4975 * NEWS: mention /usr/bin/buildbot, debian/*
4977 * debian/*: add preliminary debian packaging. Many thanks to
4978 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
4979 it considerably since it left their hands, I am responsible for
4980 all breakage that's resulted.
4982 * bin/buildbot: create a top-level 'buildbot' command, to be
4983 installed in /usr/bin/buildbot . For now it's just a simple
4984 frontend to mktap/twistd/kill, but eventually it will be the entry
4985 point to the 'try' command and also a status client. It is also
4986 intended to support the upcoming debian-packaging init.d scripts.
4987 * buildbot/scripts/runner.py: the real work is done here
4988 * buildbot/scripts/__init__.py: need this too
4989 * buildbot/scripts/sample.cfg: this is installed in new
4990 buildmaster directories
4991 * setup.py: install new stuff
4993 2004-09-15 Brian Warner <warner@lothar.com>
4995 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4996 'file:' schema (the version shipped with OS-X was built without the
4998 (SetupMixin.tearDown): stop the goofy twisted.web timer which
4999 updates the log-timestamp, to make sure it isn't still running after
5002 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
5003 values to the config file.
5004 * docs/examples/hello.cfg: add examples
5005 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
5006 * buildbot/status/builder.py (Status.getProjectURL): implement them
5007 * buildbot/master.py (BuildMaster.loadConfig): set them from config
5008 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
5009 * buildbot/status/html.py (WaterfallStatusResource): display them
5012 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
5013 certain error cases don't suffer a secondary exception.
5014 (top): Skip tests if the corresponding VC tool is not installed.
5016 * buildbot/process/factory.py (Trial): introduce separate
5017 'buildpython' and 'trialpython' lists, since trialpython=[] is
5018 what you want to invoke /usr/bin/python, whereas ./setup.py is
5019 less likely to be executable. Add env= parameter to pass options
5020 to test cases (which is how I usually write tests, I don't know if
5021 anyone else does it this way).
5023 * buildbot/process/step_twisted.py (Trial): handle python=None.
5024 Require 'testpath' be a string, not a list. Fix tests= typo.
5025 (Trial.start): sanity-check any PYTHONPATH value for stringness.
5027 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
5028 way to deal with the possibility of removing the disconnect notify
5030 (CVS): add a 'login' parameter to give a password to 'cvs login',
5031 commonly used with pserver methods (where pw="" or pw="guest")
5033 * buildbot/slave/commands.py (SourceBase): move common args
5034 extraction and setup() to __init__, so everything is ready by the
5035 time setup() is called
5036 (CVS.start): call 'cvs login' if a password was supplied
5037 (ShellCommand): special-case PYTHONPATH: prepend the master's
5038 value to any existing slave-local value.
5040 * buildbot/process/builder.py (Builder.updateBigStatus): if we
5041 don't have a remote, mark the builder as Offline. This whole
5042 function should probably go away and be replaced by individual
5044 (Builder.buildFinished): return the results to the build-finished
5045 deferred callback, helps with testing
5047 2004-09-14 Brian Warner <warner@lothar.com>
5049 * buildbot/test/test_vc.py: put all the repositories needed to run
5050 the complete tests into a single small (1.3MB) tarball, so I can
5051 make that tarball available on the buildbot web site. Test HTTP
5052 access (for Arch and Darcs) by spawning a temporary web server
5053 while the test runs.
5055 * docs/users.xhtml: new document, describe Buildbot's limited
5056 understanding of different human users
5058 * buildbot/test/test_vc.py: rearrange test cases a bit
5060 * buildbot/process/step_twisted.py (Trial): handle testpath=
5061 * buildbot/process/factory.py (Trial): update to use step.Trial
5063 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
5065 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
5066 the overall build text (which gives you 'failed 2 tests' rather
5068 (BuildStepStatus.text2): default to [], not None
5070 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
5073 2004-09-12 Brian Warner <warner@lothar.com>
5075 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
5076 log the whole exception if it's just an AttributeError (old slave)
5078 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
5079 so (e.g.) sub-commands can be run in the right directory.
5080 (ShellCommand.start): accept an optional errorMessage= argument
5081 to make life easier for SVN.start
5082 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
5084 (ShellCommand.start): move ['dir'] compatibility hack..
5085 (RemoteShellCommand.start): .. to here so everyone can use it
5087 * buildbot/process/step_twisted.py (Trial): use .workdir
5089 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
5090 text displayed when debuild fails completely
5091 (Trial): snarf _trial_temp/test.log from the slave and display it
5093 2004-09-11 Brian Warner <warner@lothar.com>
5095 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
5097 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
5098 set to 'twisted', so --recurse can find twisted/web/test/*, etc
5100 * buildbot/process/step.py (ShellCommand): call .createSummary
5101 before .evaluateCommand instead of the other way around. This
5102 makes it slightly easier to count warnings and then use that to
5103 set results=WARNINGS
5104 * buildbot/process/step_twisted.py: cosmetic, swap the methods
5106 * buildbot/process/base.py (Build.buildFinished): update status
5107 before doing progress. It's embarrassing for the build to be stuck
5108 in the "building" state when an exceptions occurs elsewhere..
5110 * buildbot/status/progress.py (Expectations.expectedBuildTime):
5111 python2.2 doesn't have 'sum'
5113 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
5114 to prevent clients from accidentally sorting it
5116 * buildbot/master.py (Manhole): add username/password
5117 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
5118 c['manholePort'], deprecate old usage
5119 * docs/config.xhtml: document c['manhole']
5120 * docs/examples/hello.cfg: show example of using a Manhole
5123 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
5124 pretend the slave is up to date
5126 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
5127 the module, overlaps with 'log', the local variable
5129 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
5131 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
5132 new method to let Steps find out the version of their
5133 corresponding SlaveCommand.
5134 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
5135 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
5136 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
5138 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
5139 (Arch.startVC): same
5140 (P4Sync.startVC): same
5142 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
5143 Deferred so we can catch errors in remote_startCommand
5144 (RemoteShellCommand.start): same
5146 * docs/examples/twisted_master.cfg: update sample config file
5148 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
5149 after connectionMade() is called, not before. Close stdin at that
5152 * buildbot/process/process_twisted.py: update to use Trial, clean
5153 up argument passing (move to argv arrays instead of string
5156 * buildbot/process/step_twisted.py (Trial): new step to replace
5157 RunUnitTests, usable by any trial-using project (not just
5158 Twisted). Arguments have changed, see the docstring for details.
5160 * buildbot/process/base.py (Build.startBuild): this now returns a
5161 Deferred. Exceptions that occur during setupBuild are now
5162 caught better and lead to fewer build_status weirdnesses, like
5163 finishing a build that was never started.
5164 (Build.buildFinished): fire the Deferred instead of calling
5165 builder.buildFinished directly. The callback argument is this
5166 Build, everything else can be extracted from it, including the
5167 new build.results attribute.
5168 * buildbot/process/builder.py (Builder.startBuild): same
5169 (Builder.buildFinished): same, extract results from build
5171 * buildbot/process/step.py (ShellCommands): remove dead code
5173 2004-09-08 Brian Warner <warner@lothar.com>
5175 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
5176 doesn't try to use the leftover patched workdir
5177 (SourceStamp): test source-stamp computation for CVS and SVN
5179 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
5180 patched workdir ('touch .buildbot-patched') so we don't try to
5182 (SourceBase.start): add ['revision'] for all Source steps
5183 (CVS): change args: use ['branch'] for -r, remove ['files']
5184 (CVS.buildVC): fix revision/branch stuff
5185 (SVN): add revision stuff
5187 * buildbot/process/step.py (BuildStep.__init__): reject unknown
5188 kwargs (except 'workdir') to avoid silent spelling errors
5189 (ShellCommand.__init__): same
5190 (Source): new base class for CVS/SVN/etc. Factor out everything
5191 common, add revision computation (perform the checkout with a -D
5192 DATE or -r REVISION that gets exactly the sources described by the
5193 last Change), overridable with step.alwaysUseLatest. Add patch
5194 handling (build.getSourceStamp can trigger the use of a base
5195 revision and a patch).
5196 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
5197 * docs/steps.xhtml: update docs
5198 * docs/source.xhtml: mention .checkoutDelay
5199 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
5201 * buildbot/process/base.py (Build.setSourceStamp): add a
5202 .sourceStamp attribute to each Build. If set, this indicates that
5203 the build should be done with something other than the most
5204 recent source tree. This will be used to implement "try" builds.
5205 (Build.allChanges): new support method
5206 (Build.lastChangeTime): remove, functionality moved to Source steps
5207 (Build.setupBuild): copy the Step args before adding ['workdir'],
5208 to avoid modifying the BuildFactory (and thus triggering spurious
5212 * buildbot/status/html.py: rename s/commits/changes/
5213 (StatusResourceChanges): same
5214 (CommitBox.getBox): same, update URL
5215 (WaterfallStatusResource): same
5216 (StatusResource.getChild): same
5218 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
5219 * contrib/debug.glade: add optional 'revision' to the fakeChange
5221 * buildbot/changes/changes.py (html_tmpl): display .revision
5222 (ChangeMaster.addChange): note .revision in log
5223 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
5224 accept a ['revision'] attribute
5226 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
5228 * buildbot/master.py (BotMaster.getPerspective): update the
5229 .connected flag in SlaveStatus when it connects
5230 (BotMaster.detach): and when it disconnects
5231 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
5232 (BuildMaster.loadConfig_Builders): walk old list correctly
5234 * buildbot/test/test_config.py: fix prefix= usage
5236 2004-09-06 Brian Warner <warner@lothar.com>
5240 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
5241 poll a P4 depot looking for recent changes. Thanks to Dave
5242 Peticolas for the contribution. Probably needs some testing after
5245 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
5246 requires manual client setup for each buildslave. Rather
5247 experimental. Thanks again to Dave Peticolas.
5248 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
5250 * buildbot/changes/changes.py (Change): add a .revision attribute,
5251 which will eventually be used to generate source-stamp values.
5253 * buildbot/process/step.py (RemoteCommand.start): use
5254 notifyOnDisconnect to notice when we lose the slave, then treat it
5255 like an exception. This allows LogFiles to be closed and the build
5256 to be wrapped up normally. Be sure to remove the disconnect
5257 notification when the step completes so we don't accumulate a
5258 bazillion such notifications which will fire weeks later (when the
5259 slave finally disconnects normally). Fixes SF#915807, thanks to
5260 spiv (Andrew Bennetts) for the report.
5261 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
5262 really isn't Logged- specific
5263 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
5264 header, since it's almost always going to be appended to an
5266 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
5267 update test to handle use of notifyOnDisconnect
5269 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
5270 don't clear .ETA and .currentBuild when going offline, let the
5271 current build clean up after itself
5273 * buildbot/process/builder.py (Builder.detached): wait a moment
5274 before doing things like stopping the current build, because the
5275 current step will probably notice the disconnect and cleanup the
5277 * buildbot/test/test_run.py (Status.tearDown): update test to
5278 handle asynchronous build-detachment
5280 * buildbot/process/base.py (Build.stopBuild): minor shuffles
5282 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
5283 hush a debug message
5285 2004-09-05 Brian Warner <warner@lothar.com>
5287 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
5288 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
5289 kernels do this: the fcntl module has the F_NOTIFY constant, but
5290 the kernel itself doesn't support the operation. Thanks to Olly
5291 Betts for spotting the problem.
5293 * buildbot/process/step.py (Darcs): new source-checkout command
5294 (Arch): new source-checkout command
5295 (todo_P4): fix constructor syntax, still just a placeholder
5296 * buildbot/test/test_vc.py (VC.testDarcs): test it
5297 (VC.testDarcsHTTP): same, via localhost HTTP
5299 (VC.testArchHTTP): same
5300 * NEWS: mention new features
5302 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
5303 which tells the step to stash stdout text locally (in .stdout).
5304 Slave-side Commands can use this to make decisions based upon the
5305 output of the the ShellCommand (not just the exit code).
5306 (Darcs): New source-checkout command
5307 (Arch): New source-checkout command, uses .keepStdout in one place
5308 where it needs to discover the archive's default name.
5310 * docs/steps.xhtml: Document options taken by Darcs and Arch.
5311 * docs/source.xhtml: add brief descriptions of Darcs and Arch
5312 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
5314 * buildbot/process/step.py (ShellCommand.describe): add an
5315 alternate .descriptionDone attribute which provides descriptive
5316 text when the step is complete. .description can be ["compiling"],
5317 for use while the step is running, then .descriptionDone can be
5318 ["compile"], used alone when the step succeeds or with "failed" when
5319 it does not. Updated other steps to use the new text.
5320 * buildbot/process/step_twisted.py: same
5321 * buildbot/test/test_run.py: update tests to match
5323 2004-08-30 Brian Warner <warner@lothar.com>
5325 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
5326 (CVS.__init__): send 'patch' argument to slave
5327 (CVS.start): don't create the LoggedRemoteCommand until start(),
5328 so we can catch a .patch added after __init__
5329 (SVN.__init__): add 'patch' to SVN too
5332 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
5333 argument, to let commands push data into the process' stdin pipe.
5334 Move usePTY to a per-instance attribute, and clear it if 'stdin'
5335 is in use, since closing a PTY doesn't really affect the process
5336 in the right way (in particular, I couldn't run /usr/bin/patch
5338 (SourceBase.doPatch): handle 'patch' argument
5340 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
5343 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
5344 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
5346 * buildbot/master.py (BotPerspective.got_commands): get command
5347 versions from slave, give to each builder
5348 * buildbot/process/builder.py (Builder.attached): stash slave
5349 command versions in .remoteCommands
5351 * docs/steps.xhtml: bring docs in-line with reality
5353 * buildbot/process/step.py (CVS.__init__): more brutal
5354 compatibility code removal
5355 (SVN.__init__): same
5357 * buildbot/slave/commands.py (SlaveShellCommand): update docs
5358 (SlaveShellCommand.start): require ['workdir'] argument, remove
5359 the ['dir'] fallback (compatibility will come later)
5360 (SourceBase): update docs
5361 (SourceBase.start): remove ['directory'] fallback
5364 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
5365 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5366 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
5368 * buildbot/process/step.py (RemoteShellCommand.__init__): add
5369 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
5370 code.. I will figure out 0.5.0-compatibility hooks later)
5372 2004-08-30 Brian Warner <warner@lothar.com>
5374 * buildbot/process/process_twisted.py: rewrite in terms of new
5375 BuildFactory base class. It got significantly shorter. Yay
5378 * buildbot/process/step_twisted.py (HLint.start): fix to make it
5379 work with the new "self.build isn't nailed down until we call
5380 step.start()" scheme: specifically, __init__ is called before the
5381 build has decided on which Changes are going in, so we don't scan
5382 build.allFiles() for .xhtml files until start()
5383 (HLint.commandComplete): use getText(), not getStdout()
5384 (RunUnitTests.start): same: don't use .build until start()
5385 (RunUnitTests.describe): oops, don't report (None) when using
5387 (RunUnitTests.commandComplete): use getText()
5388 (RunUnitTests.createSummary): same
5389 (BuildDebs.commandComplete): same
5391 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
5392 set args['command'] until start(), since our BuildStep is allowed
5393 to change their mind up until that point
5394 (TreeSize.commandComplete): use getText(), not getStdout()
5396 * docs/examples/twisted_master.cfg: update to current standards
5398 * docs/factories.xhtml: update
5399 * buildbot/process/factory.py: implement all the common factories
5400 described in the docs. The Trial factory doesn't work yet, and
5401 I've probably broken all the process_twisted.py factories in the
5402 process. There are compatibility classes left in for things like
5403 the old BasicBuildFactory, but subclasses of them are unlikely to
5405 * docs/examples/glib_master.cfg: use new BuildFactories
5406 * docs/examples/hello.cfg: same
5408 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
5409 explicit 'workdir' args
5411 * buildbot/process/base.py (BuildFactory): move factories to ..
5412 * buildbot/process/factory.py (BuildFactory): .. here
5413 * buildbot/process/process_twisted.py: handle move
5414 * buildbot/test/test_config.py: same
5415 * buildbot/test/test_run.py: same
5416 * buildbot/test/test_steps.py: same
5417 * buildbot/test/test_vc.py: same
5418 * docs/factories.xhtml: same
5420 * NEWS: mention config changes that require updating master.cfg
5422 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
5423 argument to all steps that weren't given one already, pointing at
5424 the "build/" directory.
5426 * docs/examples/hello.cfg: remove explicit 'workdir' args
5428 * docs/factories.xhtml: document standard BuildFactory clases,
5429 including a bunch which are have not yet been written
5431 2004-08-29 Brian Warner <warner@lothar.com>
5433 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
5434 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
5435 buildbot.status.builder so they aren't quite so internal
5436 * buildbot/process/base.py, buildbot/process/builder.py: same
5437 * buildbot/process/maxq.py, buildbot/process/step.py: same
5438 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
5439 * buildbot/status/mail.py, buildbot/test/test_run.py: same
5440 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
5442 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
5443 to handle new getLogs()-returns-list behavior
5444 (StatusResourceBuildStep.getChild): same
5445 (StepBox.getBox): same
5446 (WaterfallStatusResource.phase0): same
5448 * docs/source.xhtml: document how Buildbot uses version-control
5449 systems (output side: how we get source trees)
5450 * docs/changes.xhtml: rename from sources.xhtml, documents VC
5451 systems (input side: how we learn about Changes)
5453 * buildbot/master.py (Manhole): use ComparableMixin
5454 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
5455 * buildbot/changes/mail.py (MaildirSource): same
5456 * buildbot/status/client.py (PBListener): same
5457 * buildbot/status/html.py (Waterfall): same
5458 * buildbot/status/words.py (IRC): same
5460 * NEWS: start describing new features
5462 * buildbot/status/mail.py (MailNotifier): finish implementation.
5463 The message body is still a bit sparse.
5464 * buildbot/test/test_status.py (Mail): test it
5466 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
5467 and __hash__ methods I wind up adding everywhere. Specifically
5468 intended to support the buildbot config-file update scheme where
5469 we compare, say, the old list of IStatusTargets against the new
5470 one and don't touch something which shows up on both lists.
5471 * buildbot/test/test_util.py (Compare): test case for it
5473 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
5474 return a list instead of a dict
5475 (IBuildStepStatus.getLogs): same. The idea is that steps create
5476 logs with vaguely unique names (although their uniqueness is not
5477 guaranteed). Thus a compilation step should create its sole
5478 logfile with the name 'compile', and contribute it to the
5479 BuildStatus. If a step has two logfiles, try to create them with
5480 different names (like 'test.log' and 'test.summary'), and only
5481 contribute the important ones to the overall BuildStatus.
5482 * buildbot/status/builder.py (Event.getLogs): same
5483 (BuildStepStatus): fix default .text and .results
5484 (BuildStepStatus.addLog): switch to list-like .getLogs()
5485 (BuildStepStatus.stepFinished): same
5486 (BuildStatus.text): fix default .text
5487 (BuildStatus.getLogs): temporary hack to return all logs (from all
5488 child BuildStepStatus objects). Needs to be fixed to only report
5489 the significant ones (as contributed by the steps themselves)
5490 * buildbot/test/test_run.py: handle list-like .getLogs()
5491 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5493 2004-08-28 Brian Warner <warner@lothar.com>
5495 * buildbot/process/builder.py (Builder.attached): serialize the
5496 attachment process, so the attach-watcher isn't called until the
5497 slave is really available. Add detached watchers too, which makes
5500 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
5502 * buildbot/test/test_swap.py: remove dead code
5504 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
5505 (ShellCommand.start): treat errors in _startCommand/spawnProcess
5506 sort of as if the command being run exited with a -1. There may
5507 still be some holes in this scheme.
5508 (CVSCommand): add 'revision' tag to the VC commands, make sure the
5509 -r option appears before the module list
5510 * buildbot/process/step.py (CVS): add 'revision' argument
5512 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
5513 when sending updates or stepComplete messages to the master, since
5514 we don't currently care whether they arrive or not. When we revamp
5515 the master/slave protocol to really resume interrupted builds,
5516 this will need revisiting.
5517 (lostRemote): remove spurious print
5519 * buildbot/master.py (BotPerspective.attached): serialize the
5520 new-builder interrogation process, to make testing easier
5521 (BotMaster.waitUntilBuilderDetached): convenience function
5523 * buildbot/status/builder.py (BuilderStatus): prune old builds
5524 (BuildStatus.pruneSteps): .. and steps
5525 (BuildStepStatus.pruneLogs): .. and logs
5526 (BuilderStatus.getBuild): handle missing builds
5527 * buildbot/status/html.py (StatusResourceBuild.body): display build
5528 status in the per-build page
5529 (BuildBox.getBox): color finished builds in the per-build box
5531 2004-08-27 Brian Warner <warner@lothar.com>
5533 * buildbot/status/mail.py (MailNotifier): new notification class,
5536 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
5537 variants of a common base class which handles all the mode= logic
5539 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
5541 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
5543 2004-08-26 Brian Warner <warner@lothar.com>
5545 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
5548 * buildbot/test/test_run.py: update to new Logfile interface, new
5549 buildbot.slave modules
5550 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
5552 * MANIFEST.in: new sample config file
5553 * docs/examples/hello.cfg: same
5555 * buildbot/process/step_twisted.py: remove dead import
5557 * buildbot/process/step.py (RemoteCommand.run): catch errors
5559 (RemoteCommand.remote_update): ignore updates that arrive after
5561 (RemoteCommand.remote_complete): ignore duplicate complete msgs
5562 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
5563 the responsibilities of the subclass's methods
5564 (BuildStep.failed): catch errors during failure processing
5565 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
5566 (CVS): move to a mode= argument (described in docstring), rather
5567 than the ungainly clobber=/export=/copydir= combination.
5568 (SVN): add mode= functionality to SVN too
5569 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
5571 * buildbot/process/base.py (Build.startNextStep): catch errors
5572 during s.startStep()
5574 * buildbot/clients/base.py: update to new PB client interface.
5575 gtkPanes is still broken
5577 * buildbot/bot.py, buildbot/slavecommand.py: move to..
5578 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
5579 * setup.py: add buildbot.slave module
5580 * buildbot/bb_tap.py: handle move
5581 * buildbot/slave/registry.py: place to register commands, w/versions
5582 * buildbot/slave/bot.py: major simplifications
5583 (SlaveBuilder.remote_startCommand): use registry for slave commands,
5584 instead of a fixed table. Eventually this will make the slave more
5585 extensible. Use 'start' method on the command, not .startCommand.
5586 Fix unsafeTracebacks handling (I think).
5587 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
5588 helper class with a .start method that returns a Deferred.
5589 SlaveShellCommand is the form reached by the buildmaster. Commands
5590 which use multiple ShellCommands can just chain them as Deferreds,
5591 with some helper methods in Command (_abandonOnFailure and
5592 _checkAbandoned) to bail on rc!=0.
5593 (CVSCommand): prefer new mode= argument
5594 (SVNFetch): add mode= argument
5596 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
5597 put a useful reason string on the build
5599 * buildbot/status/builder.py (LogFile): do LogFile right: move the
5600 core functionality into an IStatusLog object
5601 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
5602 * buildbot/status/html.py (TextLog): HTML-rendering goes here
5603 (StatusResourceBuild.body): use proper accessor methods
5604 * buildbot/status/client.py (RemoteLog): PB-access goes here
5605 (StatusClientPerspective.perspective_subscribe): add "full" mode,
5606 which delivers log contents too
5607 (PBListener.__cmp__): make PBListeners comparable, thus removeable
5608 * buildbot/status/event.py: remove old Logfile completely
5610 * buildbot/interfaces.py (IStatusLog.subscribe): make the
5611 subscription interface for IStatusLog subscriptions just like all
5612 other the status subscriptions
5613 (IStatusReceiver.logChunk): method called on subscribers
5615 2004-08-24 Brian Warner <warner@lothar.com>
5617 * buildbot/process/builder.py (Builder._pong): oops, ping response
5618 includes a result (the implicit None returned by remote_print).
5619 Accept it so the _pong method handles the response correctly.
5621 2004-08-06 Brian Warner <warner@lothar.com>
5623 * buildbot/test/test_config.py: update IRC, PBListener tests
5625 * buildbot/status/client.py (StatusClientPerspective): total
5626 rewrite to match new IStatus interfaces. New subscription scheme.
5627 There are still a few optimizations to make (sending down extra
5628 information with event messages so the client doesn't have to do a
5629 round trip). The logfile-retrieval code is probably still broken.
5630 Moved the PB service into its own port, you can no longer share a
5631 TCP socket between a PBListener and, say, the slaveport (this
5632 should be fixed eventually).
5633 * buildbot/clients/base.py (Client): revamp to match. still needs
5634 a lot of work, but basic event reporting works fine. gtkPanes is
5637 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
5638 instance talks to a single irc server. Threw out all the old
5639 multi-server handling code. Still need to add back in
5640 builder-control (i.e. "force build")
5642 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
5643 more random text to the as-yet-unreachable per-step page
5645 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
5646 rename to stepETAUpdate
5647 (BuildStatus.subscribe): add build-wide ETA updates
5648 (BuilderStatus.getState): remove more cruft
5649 (BuilderStatus.getCurrentBuild): remove more cruft
5650 (BuilderStatus.buildStarted): really handle tuple-subscription
5651 * buildbot/test/test_run.py (Status.testSlave): handle the
5652 stepETAUpdate rename
5654 * buildbot/master.py (BuildMaster): don't add a default
5655 StatusClientService. Don't add a default IrcStatusFactory. Both
5656 are now added through c['status'] in the config file. c['irc'] is
5657 accepted for backwards compatibility, the only quirk is you cannot
5658 use c['irc'] to specify IRC servers on ports other than 6667.
5660 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
5661 (IStatusReceiver.buildStarted): allow update-interval on subscribe
5662 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
5663 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
5666 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
5667 the buildmaster to re-read its config file
5670 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
5671 find out the port our server is running on
5672 (WebTest.test_webPathname_port): same
5674 * buildbot/test/test_config.py (testWebPortnum): test it
5675 (testWebPathname): ditto
5677 * docs/config.xhtml: document new c['status'] configuration option
5679 * buildbot/status/html.py (Waterfall): new top-level class which
5680 can be added to c['status']. This creates the Site as well as the
5681 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
5682 reachable as .parent, for everything.
5684 * buildbot/master.py (Manhole): make it a normal service Child
5685 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
5686 webPathname. It will eventually replace c['irc'] and the implicit
5687 PB listener as well. c['webPortnum'] and c['webPathname'] are left
5688 in as (deprecated) backward compatibility hooks for now.
5691 * buildbot/process/builder.py (Builder.buildFinished): don't
5692 inform out builder_status about a finished build, as it finds out
5693 through its child BuildStatus object
5695 * buildbot/status/html.py: extensive revamp. Use adapters to make
5696 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
5697 have both starting and finishing times and adjust the waterfall
5698 display accordingly, using spacers if necessary. Use SlaveStatus
5699 to get buildslave info.
5700 (StatusResourceBuildStep): new just-one-step resource, used to get
5701 logfiles. No actual href to it yet.
5703 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
5704 the time being, until I get the file-naming scheme right
5706 * buildbot/status/builder.py (Event): clean started/finished names
5707 (BuildStatus.isFinished): .finished is not None is the right test
5708 (BuildStatus.buildStarted): track started/finished times ourselves
5709 (BuilderStatus.getSlave): provide access to SlaveStatus object
5710 (BuilderStatus.getLastFinishedBuild): all builds are now in
5711 .builds, even the currently-running one. Accomodate this change.
5712 (BuilderStatus.eventGenerator): new per-builder event generator.
5713 Returns BuildStepStatus and BuildStatus objects, since they can
5714 both be adapted as necessary.
5715 (BuilderStatus.addEvent): clean up started/finished attributes
5716 (BuilderStatus.startBuild,finishBuild): remove dead code
5717 (SlaveStatus): new object to provide ISlaveStatus
5719 * buildbot/process/step.py (ShellCommand.getColor): actually
5720 return the color instead of setting it ourselves
5721 (CVS.__init__): pull .timeout and .workdir options out of
5722 **kwargs, since BuildStep will ignore them. Without this neither
5723 will be sent to the slave correctly.
5724 (SVN.__init__): same
5726 * buildbot/process/builder.py (Builder): move flags to class-level
5728 (Builder.attached): remove .remoteInfo, let the BotPerspective and
5729 SlaveStatus handle that
5731 * buildbot/process/base.py (Build.firstEvent): remove dead code
5732 (Build.stopBuild): bugfix
5734 * buildbot/changes/pb.py (PBChangeSource.describe): add method
5736 * buildbot/changes/changes.py (Change): add IStatusEvent methods
5737 (ChangeMaster.eventGenerator): yield Changes, since there are now
5738 Adapters to turn them into HTML boxes
5740 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
5741 (BotPerspective.attached): feed a SlaveStatus object
5742 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
5743 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
5745 * buildbot/interfaces.py: API additions
5746 (ISlaveStatus): place to get slave status
5748 2004-08-04 Brian Warner <warner@lothar.com>
5750 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
5751 the delay finishes, so the step is marked as SUCCESS
5753 * buildbot/test/test_run.py (Status.testSlave): cover more of
5754 IBuildStatus and IBuildStepStatus
5756 * buildbot/status/progress.py (StepProgress): move some flags to
5757 class-level attributes
5758 (StepProgress.remaining): if there are no other progress metrics
5759 to go by, fall back to elapsed time
5760 (StepProgress.setExpectations): take a dict of metrics instead of
5762 (BuildProgress.setExpectationsFrom): pull expectations from the
5763 Expectations, instead of having it push them to the BuildProgress
5764 (Expectations): move some flags to class-level attributes
5765 (Expectations.__init__): copy per-step times from the
5767 (Expectations.expectedBuildTime): new method for per-build ETA
5769 * buildbot/status/event.py (Logfile): move some flags to
5770 class-level attributes
5771 (Logfile.logProgressTo): better method name, let step set the
5772 progress axis name (instead of always being "output")
5774 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
5775 times directly, rather than depending upon the (possibly missing)
5776 .progress object. Use 'None' to indicate "not started/finished
5778 (BuildStepStatus.getExpectations): oops, return the full list of
5780 (BuilderStatus._buildFinished): append finished builds to .builds
5782 * buildbot/process/step.py (BuildStep): add separate .useProgress
5783 flag, since empty .progressMetrics[] still implies that time is a
5785 (CVS): set up the cmd in __init__, instead of waiting for start()
5787 * buildbot/process/base.py (Build.startBuild): disable the 'when'
5788 calculation, this will eventually turn into a proper sourceStamp
5789 (Build.setupBuild): tell the Progress to load from the Expectations,
5790 instead of having the Expectations stuff things into the Progress
5791 (Build.buildException): add a build-level errback to make sure the
5792 build's Deferred fires even in case of exceptions
5794 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
5796 * buildbot/process/builder.py (Builder.forceBuild): convey the
5797 reason instead of creating a fake Change
5799 * docs/examples/twisted_master.cfg: update to match reality
5801 * buildbot/test/test_config.py, buildbot/test/test_process.py:
5802 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5803 fix or remove broken/breaking tests
5805 * buildbot/status/event.py (Logfile.__len__): remove evil method
5807 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5808 missing .build, for test convenience
5810 * buildbot/process/step_twisted.py: import fixes
5812 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5814 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5815 .statusbag reference
5817 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5818 connection at shutdown, and stop it from reconnecting
5820 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5821 chase down remote-execution bugs
5823 * buildbot/process/step.py: more fixes, remove
5824 BuildStep.setStatus()
5825 * buildbot/status/builder.py: move setStatus() functionality into
5827 * buildbot/status/event.py: minor fixes
5829 2004-08-03 Brian Warner <warner@lothar.com>
5831 * buildbot/process/base.py, buildbot/process/builder.py
5832 * buildbot/process/step.py, buildbot/status/builder.py
5833 * buildbot/status/event.py, buildbot/test/test_run.py:
5834 fix status delivery, get a basic test case working
5835 * buildbot/master.py: finish implementing basic status delivery,
5836 temporarily disable HTML/IRC/PB status sources
5838 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5840 * buildbot/status/progress.py (BuildProgress): remove dead code
5842 * buildbot/interfaces.py
5843 * buildbot/process/base.py, buildbot/process/builder.py
5844 * buildbot/process/step.py, buildbot/process/step_twisted.py
5845 * buildbot/status/builder.py: Complete overhaul of the all
5846 status-delivery code, unifying all types of status clients (HTML,
5847 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5848 look like. This commit is a checkpointing of the work-in-progress:
5849 the input side is mostly done (Builders/Builds sending status
5850 to the BuilderStatus/BuildStatus objects), but the output side has
5851 not yet been started (HTML resources querying BuilderStatus
5852 objects). Things are probably very broken right now and may remain
5853 so for several weeks, I apologize for the disruption.
5855 * buildbot/status/event.py: add a setHTML method to use pre-rendered
5856 HTML as the log's contents. Currently used for exception tracebacks.
5857 * buildbot/status/progress.py: minor spelling changes
5859 2004-08-02 Brian Warner <warner@lothar.com>
5861 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
5862 in mozilla. Also added stylesheets copied from Twisted's docs.
5863 Remember that these files are meant to be run through Lore first.
5864 Thanks to Philipp Frauenfelder for the fixes.
5865 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
5866 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
5867 * docs/template.tpl: added a Lore template
5869 2004-07-29 Brian Warner <warner@lothar.com>
5871 * buildbot/interfaces.py: revamp status delivery. This is the
5872 preview: these are the Interfaces that will be provided by new
5873 Builder code, and to which the current HTML/IRC/PB status
5874 displayers will be adapted.
5876 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
5877 on the SlaveBuilder, not the Bot.
5878 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
5880 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
5881 set .usePTY on the FakeSlaveBuilder
5883 2004-07-25 Brian Warner <warner@lothar.com>
5885 * buildbot/changes/freshcvs.py: add some debug log messages
5886 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
5887 disabled 'setFilter' syntax
5888 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
5889 don't end with a slash
5891 * buildbot/process/base.py (Builder._pong_failed): add TODO note
5893 * setup.py: bump to 0.5.0+ while between releases
5895 2004-07-23 Brian Warner <warner@lothar.com>
5897 * setup.py (version): Releasing buildbot-0.5.0
5899 2004-07-23 Brian Warner <warner@lothar.com>
5901 * README: update for 0.5.0 release
5903 * NEWS: update for 0.5.0 release
5905 2004-07-22 Brian Warner <warner@lothar.com>
5907 * buildbot/slavecommand.py (ShellCommand): make usePTY a
5908 mktap-time configuration flag (--usepty=1, --usepty=0)
5909 * buildbot/bot.py: same
5911 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
5912 an 'info' directory being unwanted
5914 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
5915 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
5916 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
5917 and earlier), use a FreshCVSSourceOldcred instead.
5918 (test): simple test routine: connect to server, print changes
5920 * buildbot/changes/changes.py (Change.getTime): make it possible
5921 to print un-timestamped changes
5923 * buildbot/master.py (makeApp): delete ancient dead code
5924 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
5925 * buildbot/test/test_config.py (testFindConfigFile): test it
5927 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
5928 instead of win32 one
5931 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
5932 now takes a dictionary instead of a tuple. See docs/config.xhtml for
5935 * buildbot/process/base.py (Builder.__init__): change constructor
5936 to accept a dictionary of config data, rather than discrete
5937 name/slave/builddir/factory arguments
5939 * docs/examples/twisted_master.cfg: update to new syntax
5940 * docs/examples/glib_master.cfg: same
5941 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
5942 rough tests of the new syntax
5945 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
5946 to be an int, which means "run a web.distrib sub-server on a TCP
5947 port". This lets you publish the buildbot status page to a remote
5948 twisted.web server (using distrib.ResourceSubscription). Also
5949 rename the local attributes used to hold these web things so
5950 they're more in touch with reality.
5951 * buildbot/test/test_web.py: test webPortnum and webPathname
5952 * docs/config.xhtml: document this new use of webPathname
5954 * docs/config.xhtml: new document, slightly ahead of reality
5956 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
5957 'prefix' handling: treat it as a simple string to check with
5958 .startswith, instead of treating it as a directory. This allows
5959 sub-directories to be used. If you use prefix=, you should give it
5960 a string that starts just below the CVSROOT and ends with a slash.
5961 This prefix will be stripped from all filenames, and filenames
5962 which do not start with it will be ignored.
5964 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
5966 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
5967 and --exclude (inverse of --include). SVN post-commit hooks
5968 now have total control over which changes get sent to buildbot and which
5971 2004-07-10 Brian Warner <warner@lothar.com>
5973 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
5974 test case to match new API
5976 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
5977 which crashed HTML display when self.entries=[] (needed to
5978 distinguish between [], which means "no entries yet", and None,
5979 which means "the entries have been swapped out to disk, go fetch
5982 2004-07-04 Brian Warner <warner@lothar.com>
5984 * buildbot/process/step_twisted.py (countFailedTests): Count
5985 skips, expectedFailures, and unexpectedSuccesses. Start scanning
5986 10kb from the end because any import errors are wedged there and
5987 they would make us think the test log was unparseable.
5988 (RunUnitTests.finishStatus): add skip/todo counts to the event box
5990 2004-06-26 Brian Warner <warner@lothar.com>
5992 * buildbot/process/step_twisted.py (RemovePYCs): turn the
5993 delete-*.pyc command into an actual BuildStep, so we can label it
5995 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5996 (FullTwistedBuildFactory): same
5998 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
6000 * contrib/fakechange.py: Add an errback when sending the fake
6001 change, so we know it didn't work.
6003 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
6005 * buildbot/process/step_twisted.py: Delete *.pyc files before
6006 calling trial, so it doesn't catch any old .pyc files whose .py
6007 files have been moved or deleted.
6009 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
6010 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
6011 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
6012 instead of ["twisted.test"], so that the end result is "trial -R
6015 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
6016 regular expression to match filenames that should be ignored when
6017 changed. Also add a --revision parameter that specifies the
6018 revision to examine, which is useful for debugging.
6020 2004-06-25 Brian Warner <warner@lothar.com>
6022 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
6023 summary of warnings (like DeprecationWarnings), next to the
6026 2004-05-13 Brian Warner <warner@lothar.com>
6028 * docs/examples/twisted_master.cfg: enable the win32 builder, as
6029 we now have a w32 build slave courtesy of Mike Taylor.
6031 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
6032 so broken. Fixed a race condition that tripped up interlocked
6033 builds and caused the status to be stuck at "Interlocked" forever.
6034 The twisted buildbot's one interlocked build just so happened to
6035 never hit this case until recently (the feeding builds both pass
6036 before the interlocked build is attempted.. usually it has to wait
6038 (Builder._pong_failed): fix method signature
6040 * setup.py: bump to 0.4.3+ while between releases
6042 2004-04-30 Brian Warner <warner@lothar.com>
6044 * setup.py (version): Releasing buildbot-0.4.3
6046 2004-04-30 Brian Warner <warner@lothar.com>
6048 * MANIFEST.in: add the doc fragments in docs/*.xhtml
6050 * README: update for 0.4.3 release
6052 * NEWS: update for 0.4.3 release
6054 * buildbot/master.py (BuildMaster.__getstate__): make sure
6055 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
6057 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
6058 .trial as a class attribute, for upgrade from 0.4.2
6060 * buildbot/changes/changes.py (Change.links): add .links for
6063 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
6064 .textWatchers and .htmlWatchers at save time, since they are both
6065 volatile, should allow smooth 0.4.2 upgrade
6067 * buildbot/process/step.py (CVS.finishStatus): catch failed
6068 CVS/SVN commands so we can make the status box red
6070 2004-04-29 Brian Warner <warner@lothar.com>
6072 * buildbot/changes/freshcvs.py
6073 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
6074 code to do setFilter(), which tells the freshcvs daemon to not
6075 send us stuff that we're not interested in. I will uncomment it
6076 when a new version of CVSToys is available in which setFilter()
6077 actually works, and I get a chance to test it better.
6079 * docs/examples/twisted_master.cfg: start using a PBChangeSource
6081 * buildbot/master.py (Dispatcher): use a registration scheme
6082 instead of hardwired service names
6083 (BuildMaster): keep track of the Dispatcher to support
6086 * buildbot/changes/changes.py (ChangeMaster): create a distinct
6087 PBChangeSource class instead of having it be an undocumented
6088 internal feature of the ChangeMaster. Split out the code into a
6090 * buildbot/changes/pb.py (PBChangeSource): same
6091 * buildbot/test/test_changes.py: a few tests for PBChangeSource
6093 * docs/{factories|sources|steps}.xhtml: document some pieces
6095 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
6096 using FCMaildirSource
6097 (f23osx): update OS-X builder to use python2.3, since the slave
6098 was updated to Panther (10.3.3)
6100 2004-03-21 Brian Warner <warner@lothar.com>
6102 * buildbot/process/process_twisted.py: factor out doCheckout, change
6103 to use SVN instead of CVS
6105 * buildbot/process/base.py (BasicBuildFactory): refactor to make
6106 an SVN subclass easier
6107 (BasicSVN): subclass which uses Subversion instead of CVS
6109 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
6111 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
6113 (CVSCommand.cvsComplete): don't assume chdir worked on win32
6115 2004-02-25 Brian Warner <warner@lothar.com>
6117 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
6118 is now either a list (which is passed to spawnProcess directly) or
6119 a string (which gets passed to /bin/sh -c). This removes the useSH
6120 flag and the ArgslistCommand class. Also send status header at the
6121 start and end of each command, instead of having the master-side
6123 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
6124 -r'. Update to use list-based arguments.
6125 (SVNFetch): use list-based arguments, use ['dir'] argument to
6127 * buildbot/test/test_steps.py (Commands): match changes
6129 * buildbot/process/step.py (InternalShellCommand.words): handle
6131 (SVN): inherit from CVS, cleanup
6133 * buildbot/status/event.py (Logfile.content): render in HTML, with
6134 stderr in red and headers (like the name of the command we're
6135 about to run) in blue. Add link to a second URL (url + "?text=1")
6136 to get just stdout/stderr in text/plain without markup. There is
6137 still a problem with .entries=None causing a crash, it seems to occur
6138 when the logfile is read before it is finished.
6140 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
6141 timeout to the keepalives, and use it to explicitly do a
6142 loseConnection instead of waiting for TCP to notice the loss. This
6143 ought to clear up the silent-lossage problem.
6144 (unsafeTracebacks): pass exception tracebacks back to the master,
6145 makes it much easier to debug problems
6147 2004-02-23 Brian Warner <warner@lothar.com>
6149 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
6150 the whole command to /bin/sh instead of execve [Johan Dahlin]
6151 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
6152 '-r HEAD' [Johan Dahlin]
6153 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
6155 * buildbot/changes/changes.py (Change): add links= argument, add
6156 asHTML method [Johan Dahlin]. Modified to make a bit more
6157 XHTMLish. Still not sure how to best use links= .
6159 * buildbot/status/html.py (StatusResourceCommits.getChild): use
6160 Change.asHTML to display the change, not asText
6162 * buildbot/status/html.py (StatusResourceBuilder): web button to
6165 * buildbot/test/test_run.py: test to actually start a buildmaster
6168 * MANIFEST.in: bring back accidentally-dropped test helper files
6170 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
6171 that require cvstoys if it is not installed
6173 * buildbot/process/step_twisted.py (RunUnitTests): allow other
6174 values of "bin/trial" [Dave Peticolas]
6175 (RunUnitTests.finishStatus): say "no tests run" instead of "0
6176 tests passed" when we didn't happen to run any tests
6178 * buildbot/process/step.py (Compile): use haltOnFailure instead of
6179 flunkOnFailure [Johan Dahlin]
6181 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
6182 multiple instances of the same Step class by suffixing "_2", etc,
6183 to the name until it is unique. This name needs to be unique
6184 because it is used as a key in the dictionary that tracks build
6186 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
6189 * buildbot/process/base.py (Builder.ping): add "ping slave" command
6191 2004-01-14 Brian Warner <warner@lothar.com>
6193 * buildbot/status/words.py (IrcStatusBot): when we leave or get
6194 kicked from a channel, log it
6196 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
6197 something over whatever IRC channels the buildmaster is currently
6198 connected to. Added to try and track down a problem in which the
6199 master thinks it is still connected but the IRCd doesn't see it. I
6200 used a styles.Versioned this time, so hopefully users won't have
6201 to rebuild their .tap files this time.
6202 * contrib/debug.glade: add a "Poke IRC" button
6203 * contrib/debugclient.py: same
6205 * setup.py: bump to 0.4.2+ while between releases
6207 2004-01-08 Brian Warner <warner@lothar.com>
6209 * setup.py (version): Releasing buildbot-0.4.2
6211 2004-01-08 Brian Warner <warner@lothar.com>
6213 * NEWS: update for 0.4.2 release
6215 * README: document how to run the tests, now that they all pass
6217 * buildbot/changes/maildir.py (Maildir.poll): minor comment
6219 * buildbot/process/step.py (CVS): add a global_options= argument,
6220 which lets you set CVS global options for the command like "-r"
6221 for read-only checkout, or "-R" to avoid writing in the
6223 * buildbot/slavecommand.py (CVSCommand): same
6225 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
6226 testing easier (it is turned off when testing, to avoid the
6229 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
6230 to make it easier to test: break generateStepID() out to a
6231 separate function, only update statusbag if it exists.
6232 (ShellCommands): create useful text for dict-based commands too.
6234 * test/*, buildbot/test/*: move unit tests under the buildbot/
6236 * setup.py (packages): install buildbot.test too
6238 * buildbot/test/test_slavecommand.py: fix it, tests pass now
6239 * buildbot/test/test_steps.py: fix it, tests pass now
6241 2004-01-06 Brian Warner <warner@lothar.com>
6243 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
6244 freshcvs mail uses a slightly different syntax for new
6245 directories. Update parser to handle either.
6246 * test/test_mailparse.py (Test1.testMsg9): test for same
6248 2003-12-21 Brian Warner <warner@lothar.com>
6250 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
6251 'warnOnWarnings' so that lintian errors mark the build orange
6253 2003-12-17 Brian Warner <warner@lothar.com>
6255 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
6256 messages emitted by Bonsai, contributed by Stephen Davis.
6258 * test/*: moved all tests to use trial instead of unittest. Some
6259 still fail (test_steps, test_slavecommand, and test_process).
6261 * setup.py (version): bump to 0.4.1+ while between releases
6263 2003-12-09 Brian Warner <warner@lothar.com>
6265 * setup.py (version): Releasing buildbot-0.4.1
6267 2003-12-09 Brian Warner <warner@lothar.com>
6269 * NEWS: update for 0.4.1 release
6271 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
6272 freebsd builder code a little bit
6274 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
6275 don't try to compare attributes of different classes
6276 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6277 (MaildirSource.messageReceived): fix Change delivery
6279 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
6280 into the config file's namespace before loading it, like the
6281 documentation claims it does
6282 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
6283 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
6284 daemon comes back online
6286 2003-12-08 Brian Warner <warner@lothar.com>
6288 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
6289 so the example will work with online=0 as well
6291 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
6292 fix the __implements__ line
6294 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
6295 class a twisted.application.service.Service, use startService to
6298 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
6299 directory fd instead of simple open(). I'm sure this used to work,
6300 but the current version of python refuses to open directories with
6303 2003-12-05 Brian Warner <warner@lothar.com>
6305 * setup.py (version): bump to 0.4.0+ while between releases
6307 2003-12-05 Brian Warner <warner@lothar.com>
6309 * setup.py (version): Releasing buildbot-0.4.0
6311 2003-12-05 Brian Warner <warner@lothar.com>
6313 * docs/examples/glib_master.cfg: replace old sample scripts with
6314 new-style config files
6315 * MANIFEST.in: include .cfg files in distribution tarball
6317 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
6318 implement a dummy method to avoid the exception that occurs when
6319 freshcvs sends this to us.
6321 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
6322 removed the method, as it broke reconnection. Apparently
6323 stopFactory is called each time the connection attempt fails. Must
6325 (ReconnectingPBClientFactory.__getstate__): squash the _callID
6326 attribute before serialization, since without stopFactory the
6327 reconnect timer may still be active and they aren't serializable.
6329 * test/test_mailparse.py (ParseTest): test with 'self' argument
6331 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
6332 argument, as these "functions" are invoked like methods from class
6333 attributes and therefore always get an instance as the first
6336 * buildbot/changes/maildir.py (Maildir.start): fix error in error
6337 message: thanks to Stephen Davis for the catch
6339 2003-12-04 Brian Warner <warner@lothar.com>
6341 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
6342 twisted's standard ReconnectingClientFactory. Handles both oldcred
6343 and newcred connections. Also has a bug-workaround for
6344 ReconnectingClientFactory serializing its connector when it
6347 * buildbot/bot.py (BotFactory): rewrite connection layer with new
6348 pbutil. Replace makeApp stuff with proper newcred/mktap
6349 makeService(). Don't serialize Ephemerals on shutdown.
6351 * buildbot/changes/changes.py (ChangeMaster): make it a
6352 MultiService and add the sources as children, to get startService
6353 and stopService for free. This also gets rid of the .running flag.
6355 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
6356 new pbutil, turn into a TCPClient at the same time (to get
6357 startService for free). Two variants exist: FreshCVSSourceOldcred
6358 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
6359 yet, but when it does, we'll be ready).
6360 (FreshCVSSource.notify): handle paths which are empty after the
6361 prefix is stripped. This only happens when the top-level (prefix)
6362 directory is added, at the very beginning of a Repository's life.
6364 * buildbot/clients/base.py: use new pbutil, clean up startup code.
6365 Now the only reconnecting code is in the factory where it belongs.
6366 (Builder.unsubscribe): unregister the disconnect callback when we
6367 delete the builder on command from the master (i.e. when the
6368 buildmaster is reconfigured and that builder goes away). This
6369 fixes a multiple-delete exception when the status client is shut
6371 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
6374 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
6375 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
6377 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
6379 * contrib/run_maxq.py: Accept a testdir as an argument rather than
6380 a list of globs (ugh). The testdir will be searched for files
6381 named *.tests and run the tests in the order specified in each of
6382 those files. This allows for "dependancies" between tests to be
6385 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
6386 argument to pass to run_maxq.py, instead of a glob.
6388 2003-10-17 Brian Warner <warner@lothar.com>
6390 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
6391 files that live in the sandbox
6393 2003-10-15 Brian Warner <warner@lothar.com>
6395 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
6396 spelling error in "docs" count-warnings output
6397 (HLint.start): stupid thinko meant .xhtml files were ignored
6399 * docs/examples/twisted_master.cfg (reactors): disable cReactor
6400 tests now that cReactor is banished to the sandbox
6402 2003-10-10 Brian Warner <warner@lothar.com>
6404 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
6405 scheme: now .xhtml are sources and .html are generated
6407 2003-10-08 Brian Warner <warner@lothar.com>
6409 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
6410 we were ignoring the 'randomly' parameter.
6412 2003-10-01 Brian Warner <warner@lothar.com>
6414 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
6415 posix, to kill sub-children of aborted slavecommands.
6417 * buildbot/status/builder.py: rename Builder to BuilderStatus.
6418 Clean up initialization: lastBuildStatus remains None until the
6419 first build has been completed.
6421 * buildbot/status/html.py (WaterfallStatusResource.body): handle
6422 None as a lastBuildStatus
6423 * buildbot/clients/gtkPanes.py: same
6425 * buildbot/status/client.py (StatusClientService): keep
6426 BuilderStatus objects in self.statusbags . These objects now live
6427 here in the StatusClientService and are referenced by the Builder
6428 object, rather than the other way around.
6429 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
6430 * buildbot/process/base.py (Builder): same
6431 * test/test_config.py (ConfigTest.testBuilders): same
6433 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
6434 an existing builder, leave the statusbag alone. This will preserve the
6437 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
6438 hook. This will probably go away in favor of a class in upcoming
6441 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
6442 serviceName from newcred FreshCVSNotifiee setup
6444 2003-09-29 Brian Warner <warner@lothar.com>
6446 * buildbot/process/process_twisted.py: switch to new reactor
6448 * docs/examples/twisted_master.cfg: same
6450 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
6452 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
6453 botmaster reference instead of the oldapp service lookup
6455 * buildbot/master.py (BuildMaster.__init__): give the
6456 StatusClientService a reference to the botmaster to make it easier to
6459 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6461 * buildbot/status/html.py (Box.td): escape hreffy things so you
6462 can have spaces in things like builder names
6463 (StatusResourceBuilder.body)
6464 (WaterfallStatusResource.body)
6465 (WaterfallStatusResource.body0): same
6467 2003-09-25 Brian Warner <warner@lothar.com>
6469 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
6470 rearrange the builder list when adding or removing builders: keep
6471 them in the order the user requested.
6472 * test/test_config.py (ConfigTest.testBuilders): verify it
6474 * contrib/debug.glade: give the debug window a name
6476 * buildbot/process/base.py (Builder.buildTimerFired): builders can
6477 now wait on multiple interlocks. Fix code relating to that.
6478 (Builder.checkInterlocks): same
6479 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
6481 * buildbot/master.py (BuildMaster.loadConfig): move from
6482 deprecated pb.BrokerFactory to new pb.PBServerFactory
6483 * test/test_config.py (ConfigTest.testWebPathname): same
6485 * docs/examples/twisted_master.cfg: fix interlock declaration
6487 * buildbot/master.py (BotMaster.addInterlock): move code to attach
6488 Interlocks to their Builders into interlock.py .
6489 (BuildMaster.loadConfig_Interlocks): fix interlock handling
6491 * test/test_config.py (ConfigTest.testInterlocks): validate
6494 * buildbot/process/base.py (Builder.__init__): better comments
6495 * buildbot/process/interlock.py (Interlock.__repr__): same
6496 (Interlock.deactivate): add .active flag, move the code that
6497 attaches/detaches builders into the Interlock
6499 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6501 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
6502 tests using the new run_maxq.py script, and reporting failures by
6505 * contrib/run_maxq.py: Hacky little script for running a set of maxq
6506 tests, reporting their success or failure in a buildbot-friendly
6509 2003-09-24 Brian Warner <warner@lothar.com>
6511 * docs/examples/twisted_master.cfg: example of a new-style config
6512 file. This lives in the buildmaster base directory as
6515 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
6516 button to make the master re-read its config file
6518 * buildbot/master.py (BuildMaster.loadConfig): new code to load
6519 buildmaster configuration from a file. This file can be re-read
6520 later, and the buildmaster will update itself to match the new
6521 desired configuration. Also use new Twisted Application class.
6522 * test/Makefile, test/test_config.py: unit tests for same
6524 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
6525 FreshCVSSources comparable, to support reload.
6526 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6528 * buildbot/process/base.py (Builder): make them comparable, make
6529 Interlocks easier to attach, to support reload. Handle
6530 re-attachment of remote slaves.
6531 * buildbot/process/interlock.py (Interlock): same
6533 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
6534 Twisted's new Application class. Requires Twisted >= 1.0.8 .
6535 buildmaster taps are now constructed with mktap.
6536 * buildbot/status/client.py (StatusClientService): same
6538 * buildbot/status/words.py: move to new Services, add support to
6539 connect to multiple networks, add reload support, allow nickname
6540 to be configured on a per-network basis
6542 2003-09-20 Brian Warner <warner@lothar.com>
6544 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
6545 the freebsd builder, now that the machine has been upgraded and no
6546 longer has python2.2
6548 * setup.py (version): bump to 0.3.5+ while between releases
6550 2003-09-19 Brian Warner <warner@lothar.com>
6552 * setup.py (version): Releasing buildbot-0.3.5
6554 2003-09-19 Brian Warner <warner@lothar.com>
6556 * NEWS: add post-0.3.4 notes
6558 * README (REQUIREMENTS): note twisted-1.0.7 requirement
6560 * MANIFEST.in: add contrib/*
6562 * docs/examples/twisted_master.py (twisted_app): all build slaves must
6563 use a remote root now: cvs.twistedmatrix.com
6565 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
6567 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
6568 compatibility with old servers
6569 (FreshCVSSource.start): and provide a way to use it
6570 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
6572 * docs/examples/twisted_master.py (twisted_app): update to new
6574 (twisted_app): listen on new ~buildbot socket
6575 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
6577 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
6578 to reduce cvs bandwidth (update instead of full checkout)
6580 2003-09-11 Brian Warner <warner@lothar.com>
6582 * contrib/fakechange.py: demo how to connect to the changemaster
6583 port. You can use this technique to submit changes to the
6584 buildmaster from source control systems that offer a hook to run a
6585 script when changes are committed.
6587 * contrib/debugclient.py: tool to connect to the debug port. You
6588 can use it to force builds, submit fake changes, and wiggle the
6591 * buildbot/master.py: the Big NewCred Reorganization. Use a single
6592 'Dispatcher' realm to handle all the different kinds of
6593 connections and Perspectives: buildslaves, the changemaster port,
6594 the debug port, and the status client port. NewCredPerspectives
6595 now have .attached/.detached methods called with the remote 'mind'
6596 reference, much like old perspectives did. All the pb.Services
6597 turned into ordinary app.ApplicationServices .
6598 (DebugService): went away, DebugPerspectives are now created
6599 directly by the Dispatcher.
6600 (makeApp): changed interface a little bit
6602 * buildbot/changes/changes.py: newcred
6603 * buildbot/status/client.py: newcred
6605 * buildbot/clients/base.py: newcred client side changes
6606 * buildbot/bot.py: ditto
6608 * docs/examples/glib_master.py: handle new makeApp() interface
6609 * docs/examples/twisted_master.py: ditto
6611 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
6612 base newcred Perspectives on. This should go away once Twisted
6613 itself provides something sensible.
6616 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
6618 * contrib/svn_buildbot.py: A program that you can call from your
6619 SVNREPO/hooks/post-commit file that will notify a BuildBot master
6620 when a change in an SVN repository has happened. See the top of
6621 the file for some minimal usage info.
6623 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6625 * buildbot/slavecommand.py (ArglistCommand): Add new
6626 ArglistCommand that takes an argument list rather than a string as
6627 a parameter. Using a st.split() for argv is very bad.
6629 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
6630 update to a particular revision rather than always checking out
6631 (still not very smart about it, there may be cases where the
6632 checkout becomes inconsistent).
6634 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6636 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
6637 SVN fetch support. It can checkout (not update!) a specified
6638 revision from a specified repository to a specified directory.
6640 * buildbot/status/progress.py (Expectations.update): Fix an
6641 obvious bug (apparently created by the change described in the
6642 previous ChangeLog message) by moving a check to *after* the
6643 variable it checks is defined.
6646 2003-09-08 Brian Warner <warner@lothar.com>
6648 * buildbot/status/progress.py (Expectations.update): hack to catch
6649 an exception TTimo sees: sometimes the update() method seems to
6650 get called before the step has actually finished, so the .stopTime
6651 is not set, so no totalTime() is available and we average None
6652 with the previous value. Catch this and just don't update the
6653 metrics, and emit a log message.
6655 2003-08-24 Brian Warner <warner@lothar.com>
6657 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
6658 parameter to set copydir='original' in CVS commands.
6660 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
6662 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
6663 which tells the command to maintain a separate original-source CVS
6664 workspace. For each build, this workspace will be updated, then
6665 the tree copied into a new workdir. This reduces CVS bandwidth
6666 (from a full checkout to a mere update) while doubling the local
6667 disk usage (to keep two copies of the tree).
6669 2003-08-21 Brian Warner <warner@lothar.com>
6671 * buildbot/status/event.py (Logfile.addEntry): if the master web
6672 server dies while we're serving a page, request.write raises
6673 pb.DeadReferenceError . Catch this and treat it like a
6674 notifyFinish event by dropping the request.
6676 2003-08-18 Brian Warner <warner@lothar.com>
6678 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
6679 (instead of blowing up) if a force-build command is given without
6682 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
6683 don't blow up if there aren't yet any Changes in the list
6685 2003-08-02 Brian Warner <warner@lothar.com>
6687 * buildbot/bot.py (updateApplication): don't set the .tap name,
6688 since we shouldn't assume we own the whole .tap file
6690 * buildbot/bb_tap.py (updateApplication): clean up code, detect
6691 'mktap buildbot' (without a subcommand) better
6693 2003-07-29 Brian Warner <warner@lothar.com>
6695 * buildbot/status/words.py
6696 (IrcStatusFactory.clientConnectionLost): when we lose the
6697 connection to the IRC server, schedule a reconnection attempt.
6699 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
6700 use shutil.rmtree instead of forking off an "rm -rf" command.
6701 rmtree may take a while and will block until it finishes, so we
6702 use "rm -rf" if available.
6704 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
6705 freebsd buildslave badly
6707 * setup.py (version): bump to 0.3.4+ while between releases
6709 2003-07-28 Brian Warner <warner@lothar.com>
6711 * setup.py (version): Releasing buildbot-0.3.4
6713 2003-07-28 Brian Warner <warner@lothar.com>
6715 * NEWS: update in preparation for release
6717 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
6718 process.signalProcess instead of os.kill, to improve w32
6721 * docs/examples/twisted_master.py (twisted_app): turn off
6722 win32eventreactor: the tests hang the buildslave badly
6724 * buildbot/process/base.py (Build.buildFinished): update ETA even on
6725 failed builds, since usually the failures are consistent
6727 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6728 add compileOpts/compileOpts2 to reactors build
6730 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
6731 (twisted_app): use both default and win32eventreactor on w32 build.
6732 Use both default and kqreactor on freebsd build.
6734 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6735 add compileOpts2, which is put after the build_ext argument. w32
6736 needs "-c mingw32" here.
6738 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
6739 touch .acqpath, it goes away in recent Twisted releases
6741 * docs/examples/twisted_master.py (twisted_app): use "python" for
6742 the w32 buildslave, not "python2.2"
6744 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
6745 the directory exists.. should hush an exception under w32
6747 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
6748 ProcessTerminated -provided values for signal and exitCode rather
6749 than parsing the unix status code directly. This should remove one
6750 more roadblock for a w32-hosted buildslave.
6752 * test/test_mailparse.py: add test cases for Syncmail parser
6754 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
6755 temporary compatibility import. Note! Start importing
6756 FCMaildirSource from changes.mail instead of changes.freshcvsmail
6758 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
6760 2003-07-27 Brian Warner <warner@lothar.com>
6762 * NEWS: started adding new features
6764 * buildbot/changes/mail.py: start work on Syncmail parser, move
6765 mail sources into their own file
6767 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
6768 as implementing IChangeSource
6769 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
6771 * buildbot/interfaces.py: define the IChangeSource interface
6773 2003-07-26 Brian Warner <warner@lothar.com>
6775 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
6777 2003-06-25 Brian Warner <warner@lothar.com>
6779 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
6782 2003-06-17 Brian Warner <warner@lothar.com>
6784 * buildbot/status/words.py: clean up method usage to avoid error
6785 in silly IRC command
6786 (IrcStatusBot.emit_status): round off seconds display
6788 * buildbot/process/base.py (Build): delete the timer when saving
6789 to the .tap file, and restore it (if it should still be running)
6790 upon restore. This should fix the "next build in -34 seconds"
6791 messages that result when the master is restarted while builds are
6792 sitting in the .waiting slot. If the time for the build has
6793 already passed, start it very soon (in 1 second).
6795 * buildbot/status/words.py: more silly commands
6797 * README (REQUIREMENTS): add URLs to all required software
6799 * buildbot/status/words.py ('last'): mention results of, and time
6802 2003-05-28 Brian Warner <warner@lothar.com>
6804 * buildbot/status/words.py: add 'last' command
6805 (IrcStatusBot.emit_status): add current-small text to 'status' output
6807 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6808 (twisted_app): remove spaces from OS-X builder name
6810 * buildbot/master.py (makeApp): add knob to turn on IRC bot
6811 * buildbot/status/words.py: IRC bot should actually be useful now
6813 2003-05-23 Brian Warner <warner@lothar.com>
6815 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6816 "slave information" from $(slavedir)/info/* . These files are
6817 maintained by the slave administrator, and describe the
6818 machine/environment that is hosting the slave. Information from
6819 them is put into the "Builder" HTML page. Still need to establish
6820 a set of well-known filenames and meanings for this data: at the
6821 moment, *all* info/* files are sent to the master, but only
6822 'admin' and 'host' are used on that end.
6823 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6824 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
6825 * buildbot/master.py (BotPerspective.got_info): ditto
6827 2003-05-22 Brian Warner <warner@lothar.com>
6829 * setup.py (version): bump version to 0.3.3+ while between releases
6831 2003-05-21 Brian Warner <warner@lothar.com>
6833 * setup.py: Releasing buildbot-0.3.3
6835 2003-05-21 Brian Warner <warner@lothar.com>
6837 * NEWS: 0.3.3 news items
6839 * README: describe --keepalive and life behind a NAT box
6841 * buildbot/bot.py (Bot.connected): implement application-level
6842 keepalives to deal with NAT timeouts, turn them on with
6843 --keepalive option or when SO_KEEPALIVE doesn't work.
6845 * buildbot/master.py (BotPerspective): accept keepalives silently
6847 * buildbot/process/base.py (Build.buildException): CopiedFailures
6848 don't carry as much information as local ones, so don't try to
6849 create a big HTMLized version of them.
6851 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6852 log file when step fails due to an exception, such as when the slave
6855 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6856 --testmodule argument instead of grepping for test-case-name tags
6857 ourselves. Remove FindUnitTests code.
6858 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
6860 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
6862 2003-05-16 Brian Warner <warner@lothar.com>
6864 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
6865 argument to allow things like CFLAGS=-O0 to be passed without relying
6866 upon /bin/sh processing on the slave.
6868 * buildbot/process/step.py (InternalShellCommand.start): send
6870 * buildbot/slavecommand.py (ShellCommand.start): create argv with
6871 'split' instead of letting /bin/sh do it. This should also remove
6872 the need for /bin/sh on the buildslave, making it more likely to
6875 * buildbot/status/html.py: html-escape text in blamelist.
6876 Add "force build" button to the Builder page.
6878 * buildbot/process/step_twisted.py (countFailedTests): look at
6879 last 1000 characters for status line, as import errors can put it
6880 before the -200 point.
6882 2003-05-15 Brian Warner <warner@lothar.com>
6884 * docs/examples/twisted_master.py: use clobber=0 for remote builds
6886 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6887 make 'clobber' a parameter, so it is possible to have builds which
6888 do full tests but do a cvs update instead of hammering the CVS
6889 server with a full checkout each build
6891 * buildbot/process/step.py (InternalShellCommand): bump default
6892 timeout to 20 minutes
6894 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
6895 the master to trigger a build. Run it via manhole.
6897 * buildbot/master.py (BotPerspective.perspective_forceBuild):
6898 allow slaves to trigger any build that they host, to make life
6899 easier for slave admins who are testing out new build processes
6901 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6902 don't flunk cReactor or qtreactor on failure, since they fail alot
6903 these days. Do warnOnFailure instead.
6905 * buildbot/process/base.py: change Builder.buildable from a list
6906 into a single slot. When we don't have a slave, new builds (once
6907 they make it past the timeout) are now merged into an existing
6908 buildable one instead of being queued. With this change, a slave
6909 which has been away for a while doesn't get pounded with all the
6910 builds it missed, but instead just does a single build.
6912 2003-05-07 Brian Warner <warner@lothar.com>
6914 * setup.py (version): bump version to 0.3.2+ while between releases
6916 2003-05-07 Brian Warner <warner@lothar.com>
6918 * setup.py: Releasing buildbot-0.3.2
6920 2003-05-07 Brian Warner <warner@lothar.com>
6922 * setup.py: fix major packaging error: include subdirectories!
6924 * NEWS: add changes since last release
6926 * README (REQUIREMENTS): update twisted/python dependencies
6928 * buildbot/status/builder.py (Builder.startBuild): change
6929 BuildProcess API: now they should call startBuild/finishBuild
6930 instead of pushing firstEvent / setLastBuildStatus. Moving towards
6931 keeping a list of builds in the statusbag, to support other kinds of
6933 (Builder.addClient): send current-activity-small to new clients
6934 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
6937 * buildbot/status/client.py: drop RemoteReferences at shutdown
6939 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
6941 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
6942 more debug messages for remote status client
6944 * buildbot/process/step.py (InternalBuildStep.stepComplete)
6945 (.stepFailed): only fire the Deferred once, even if both
6946 stepComplete and stepFailed are called. I think this can happen if
6947 an exception occurs at a weird time.
6949 * buildbot/status/words.py: work-in-progress: IRC status delivery
6951 2003-05-05 Brian Warner <warner@lothar.com>
6953 * docs/examples/twisted_master.py (twisted_app): hush internal
6954 python2.3 distutils deprecation warnings
6955 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6956 add compileOpts= argument which inserts extra args before the
6957 "setup.py build_ext" command. This can be used to give -Wignore
6958 warnings, to hush some internal python-2.3 deprecation messages.
6960 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
6961 the ['twisted.test'] default test case to make it easier to change
6964 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
6965 * buildbot/clients/gtkPanes.py: ditto
6967 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
6968 arg to collapse RunUnitTestsRandomly into RunUnitTests
6969 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6970 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
6972 * buildbot/status/html.py (StatusResource): shuffle Resources
6973 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
6974 would serve the waterfall display, but the internal links were
6975 only valid on the trailing-slash version. The correct behavior is
6976 for the non-slashed one to serve a Redirect to the slashed one.
6977 This only shows up when the buildbot page is hanging off another
6978 server, like a Twisted-Web distributed server.
6980 * buildbot/status/event.py (Event, RemoteEvent): make Events
6981 pb.Cacheable, with RemoteEvent as the cached version. This removes
6982 a lot of explicit send-an-update code.
6983 * buildbot/status/builder.py (Builder): remove send-update code
6984 * buildbot/status/client.py (ClientBuilder): remove send-update
6985 code, and log errors that occur during callRemote (mostly to catch
6986 InsecureJelly exceptions)
6988 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6989 run Lore with the same python used in the rest of the build
6991 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6993 * buildbot/process/step_twisted.py (HLint): accept 'python'
6994 argument. Catch rc!=0 and mark the step as failed. This marks the
6995 build orange ("has warnings").
6996 (RunUnitTestsJelly): move out to step_twisted2.py
6998 * buildbot/util.py (ignoreStaleRefs): add utility function
7000 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
7001 don't fake ETA object, it's too hard to get right
7003 2003-05-02 Brian Warner <warner@lothar.com>
7005 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
7007 2003-05-01 Brian Warner <warner@lothar.com>
7009 * buildbot/status/html.py (StatusResource.body): oops, I was
7010 missing a <tr>, causing the waterfall page to be misrendered in
7011 everything except Galeon.
7013 2003-04-29 Brian Warner <warner@lothar.com>
7015 * docs/examples/twisted_master.py: make debuild use python-2.2
7016 explicitly, now that Twisted stopped supporting 2.1
7018 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
7019 handle tuple results too. I keep forgetting this, which suggests
7020 it needs to be rethought.
7022 * setup.py (setup): bump version to 0.3.1+ while between releases
7024 2003-04-29 Brian Warner <warner@lothar.com>
7026 * setup.py: Releasing buildbot-0.3.1
7028 2003-04-29 Brian Warner <warner@lothar.com>
7030 * README (SUPPORT): add plea to send questions to the mailing list
7032 * NEWS, MANIFEST.in: add description of recent changes
7034 * docs/examples/twisted_master.py: add the code used to create the
7035 Twisted buildmaster, with passwords and such removed out to a
7038 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
7039 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
7040 buildmasters to not require CVSToys be installed.
7041 * README, docs/examples/glib_master: update to match the change
7043 * buildbot/clients/base.py, buildbot/bot.py,
7044 buildbot/changes/changes.py, buildbot/pbutil.py: copy
7045 ReconnectingPB from CVSToys distribution to remove CVSToys
7046 dependency for build slaves and status clients. Buildmasters which
7047 use FreshCVSSources still require cvstoys be installed, of course.
7049 2003-04-25 Brian Warner <warner@lothar.com>
7051 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
7052 runTestsRandomly arg to turn on trial -z
7054 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
7055 experimental code to use trial's machine-parseable output to get
7056 more detailed test results. Still has some major issues.
7057 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
7060 * buildbot/status/builder.py (Builder.setCurrentBuild):
7061 anticipating moving build history into statusbag, not used yet
7063 * buildbot/status/tests.py: code to centralize test results,
7064 doesn't work quite yet
7066 * buildbot/status/event.py (Event): use hasattr("setName") instead
7067 of isinstance for now.. need better long-term solution
7069 * buildbot/status/html.py: Remove old imports
7071 2003-04-24 Brian Warner <warner@lothar.com>
7073 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
7074 ignore changes under doc/fun/ and sandbox/
7076 * buildbot/process/step_twisted.py: update pushEvent and friends.
7078 * buildbot/status/html.py (Box.td): replace event.buildername with
7079 event.parent.getSwappableName(). Needs more thought.
7081 * buildbot/status/builder.py (Builder): Replace pushEvent and
7082 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
7083 Tell events they are being pruned with event.delete().
7085 * buildbot/process/base.py (Build): Remove Builder status-handling
7086 methods. s/pushEvent/setCurrentActivity/.
7088 * buildbot/process/step.py (BuildStep): clean up status delivery.
7089 Gouse builder.statusbag methods instead of intermediate builder
7090 methods. s/updateLastEvent/updateCurrentActivity/.
7091 s/finalizeLastEvent/finishCurrentActivity/. Use
7092 addFileToCurrentActivity for summaryFunction.
7094 * buildbot/status/event.py (Logfile): put data in a Swappable when
7096 (Event): add more setter methods. Remove .buildername, use .parent
7097 and getSwappableName instead (needs more thought).
7099 * buildbot/util.py (Swappable):
7100 * test/test_swap.py: don't bother setting filename at __init__
7101 time, do it later. Change setFilename args to take parent first,
7102 since it provides the most significant part of the filename.
7104 2003-04-23 Brian Warner <warner@lothar.com>
7106 * buildbot/status/event.py (Logfile.addEntry): append to previous
7109 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
7110 anticipating Swappable
7111 (InternalShellCommand.remoteUpdate): split out various log-adding
7112 methods so subclasses can snarf stdout separately
7114 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
7115 in anticipation of Swappable build logs
7116 (Builder.testsFinished): anticipating TestResults, still disabled
7118 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
7121 * buildbot/status/event.py (Logfile): add (disabled) support for
7122 Swappable, not ready for use yet
7124 * buildbot/util.py (Swappable): object which is swapped out to
7125 disk after some period of no use.
7126 * test/test_swap.py: test buildbot.utils.Swappable
7128 2003-04-14 Brian Warner <warner@lothar.com>
7130 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
7131 periodic-build timer. Set the .periodicBuildTime on a builder
7132 instance to some number of seconds to activate it.
7134 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
7136 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
7137 a way that survives result tuples
7139 2003-04-12 Brian Warner <warner@lothar.com>
7141 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7142 return a dict instead of a tuple: allow summarizers to provide
7143 multiple summaries if they want
7144 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
7145 (debuildSummarizer): summarize lintian warnings/errors
7147 2003-04-10 Brian Warner <warner@lothar.com>
7149 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
7151 2003-04-09 Brian Warner <warner@lothar.com>
7153 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
7154 empty summaries: happens when the tests fail so hard they don't emit
7155 a parseable summary line.
7157 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7158 Allow summaryFunction to return None to indicate no summary should
7161 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
7162 writing to stale HTTP requests: notice when they disconnect and
7163 remove the request from the list. Also add CacheToFile from
7164 moshez, will be used later.
7166 2003-04-08 Brian Warner <warner@lothar.com>
7168 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
7169 should be an int, not a list of strings
7171 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
7172 if we weren't actually connected
7174 * buildbot/process/step_twisted.py (trialTextSummarizer): function
7175 to show the tail end of the trial text output
7177 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
7178 hook to summarize the results of a ShellCommand
7180 2003-04-07 Brian Warner <warner@lothar.com>
7182 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
7183 twisted test suite code into a single class.
7184 * buildbot/process/process_twisted.py: same
7186 2003-04-04 Brian Warner <warner@lothar.com>
7188 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
7190 * README (SLAVE): document use of mktap to create slave .tap file
7191 (REQUIREMENTS): describe dependencies
7193 * buildbot/bb_tap.py, buildbot/plugins.tml:
7194 * buildbot/bot.py (updateApplication): Add mktap support for creating
7195 buildslave .tap files
7197 2003-03-28 Brian Warner <warner@lothar.com>
7199 * buildbot/process/step.py (InternalShellCommand.finished): handle
7200 new tuple result values (fix embarrasing bug that appeared during
7203 2003-03-27 Brian Warner <warner@lothar.com>
7205 * docs/examples/glib_master.py, README: add sample buildmaster.tap
7208 2003-03-25 Brian Warner <warner@lothar.com>
7210 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
7211 to overall build status
7212 * buildbot/clients/base.py (Builder): improve event printing
7213 * buildbot/process/base.py (BasicBuildFactory): use specific steps
7214 instead of generic ShellCommand
7215 (Build): Add .stopBuild, use it when slave is detached
7217 * buildbot/process/step.py (Configure,Test): give the steps their
7218 own names and status strings
7220 * buildbot/status/html.py (StatusResource): add "show" argument,
7221 lets you limit the set of Builders being displayed.
7223 2003-03-20 Brian Warner <warner@lothar.com>
7225 * buildbot/process/basic.py: removed
7227 2003-03-19 Brian Warner <warner@lothar.com>
7229 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7230 turn off process-docs by default
7232 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
7233 when displaying build information without anything in allBuilds[]
7235 * buildbot/bot.py (makeApp): really take password from sys.argv
7237 2003-03-18 Brian Warner <warner@lothar.com>
7239 * buildbot/bot.py (buildApp): take password from sys.argv
7241 * README: replace with more useful text
7243 * setup.py: add a real one
7244 * MANIFEST.in, .cvsignore: more distutils packaging stuff
7246 * docs/PyCon-2003/: added sources for PyCon paper.
7248 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
7249 now Build objects control the process and Builder only handles
7250 slave stuff and distribution of changes/status. A new BuildFactory
7251 class creates Build objects on demand.
7253 Created ConfigurableBuild which takes a list of steps to run. This
7254 makes it a lot easier to set up a new kind of build and moves us
7255 closer to being able to configure a build from a web page.
7257 * buildbot/process/step_twisted.py, process_twisted.py: move to
7258 new model. A lot of code went away.
7260 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
7261 send lots of empty progress messages to the client.
7263 * buildbot/master.py (makeApp): enforce builder-name uniqueness
7265 2003-02-20 Brian Warner <warner@lothar.com>
7267 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
7269 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
7270 Twisted bug that prevented non-pty processes from working just got
7271 fixed, and the bug that leaks ptys is still being investigated.
7273 * buildbot/process/step.py (CVS): send timeout arg to slave
7275 * buildbot/clients/gtkPanes.py: add connection-status row, handle
7276 builders coming and going
7277 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
7278 from CVSToys, handle lost-buildmaster
7280 * buildbot/status/client.py (StatusClientService.removeBuilder):
7281 Clean up status client protocol: send builders (with references)
7282 as they are created, rather than sending a list and requiring the
7283 client to figure out which ones are new.
7284 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
7285 attempts to force a build on an unknown builder
7287 2003-02-19 Brian Warner <warner@lothar.com>
7289 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
7290 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
7291 Twisted stops leaking them.
7292 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
7293 builder goes to an idle state.
7295 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
7296 I figure out why CVS commands hang without them, and/or I fix the
7297 hung-command timeout
7299 2003-02-16 Brian Warner <warner@lothar.com>
7301 * buildbot/process/step_twisted.py: bin/hlint went away, replace
7302 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
7303 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
7304 GenerateDocs now that they are prefixed with WARNING:.
7306 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
7307 use manual href target instead of request.childLink
7309 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
7310 display every second, but update the ETA every 5 seconds (or
7311 whenever) as remote_progress messages arrive.
7314 2003-02-12 Brian Warner <warner@lothar.com>
7316 * *: import current sources from home CVS repository
7320 # add-log-time-format: add-log-iso8601-time-string