1 2007-02-05 Brian Warner <warner@lothar.com>
3 * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
4 is one of the three known values, otherwise we emit some confusing
5 messages later on. Thanks to Grig Gheorghiu for the catch.
7 2007-01-30 Brian Warner <warner@lothar.com>
9 * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
10 Hearsum contributed a patch to let BonsaiPoller work with results
11 that contain non-ascii characters. Closes SF#1632641.
13 2007-01-27 Brian Warner <warner@lothar.com>
15 * Makefile (release): produce both .tar.gz and .zip source bundles.
18 2007-01-23 Brian Warner <warner@lothar.com>
20 * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
21 * buildbot/changes/monotone.py: same
23 * buildbot/changes/maildir.py: combine several files into one,
24 clean up maildir.py to use Services properly.
25 * buildbot/changes/maildirtwisted.py: remove
26 * buildbot/changes/maildirgtk.py: remove, it wasn't used by
28 * buildbot/changes/mail.py: match the change
29 * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
30 * buildbot/test/test_maildir.py: remove use of reactor.iterate()
32 * buildbot/slave/commands.py (command_version): bump to "2.3" to
33 indicate that the buildslave knows about the 'bzr' command
35 2007-01-22 Brian Warner <warner@lothar.com>
37 * buildbot/process/builder.py (Builder.fireTestEvent): don't use
38 'with', it will become a reserved work in python2.6 .
40 * contrib/bb_applet.py: add a simple gnome-panel applet, to
41 display a terse summary of buildbot status.
42 * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
43 some icons, small versions of the Blender object that lives in
44 docs/images/icon.blend
46 * buildbot/steps/source.py (Bzr): add Bazaar-ng support
47 * buildbot/slave/commands.py (Bzr): same
48 * buildbot/scripts/tryclient.py (BzrExtractor): same
49 (SourceStampExtractor.dovc): modify this to allow non-zero exit
50 status, since 'bzr diff' does that
51 * buildbot/test/test_vc.py (Bzr): same
52 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
56 2007-01-20 Brian Warner <warner@lothar.com>
58 * contrib/darcs_buildbot.py: tidy up the progress messages
60 2007-01-17 Brian Warner <warner@lothar.com>
62 * contrib/darcs_buildbot.py: enhance to handle multiple patches
63 being pushed at a time. This keeps state in the repository in a
64 small file named .darcs_buildbot-lastchange, but that shouldn't
65 interfere with normal repository operations. Fixes SF#1534049.
66 * buildbot/clients/sendchange.py (Sender): make a single Sender
67 capable of sending Changes with different usernames.
69 2006-12-11 Brian Warner <warner@lothar.com>
71 * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
72 scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
73 buildbot.changes.mail a long time ago, but I forgot to add the
74 DeprecationWarning until now.
76 * buildbot/process/maxq.py: remove this, the functionality now
77 lives in buildbot.steps.maxq
79 * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
80 * buildbot/clients/gtkPanes.py: remove unused import
82 * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
83 that was meant to provide a special Reporter to run inside trial
84 and give the buildslave lots of machine-readable status. We never
85 finished this project.
87 * buildbot/changes/bonsaipoller.py: remove unused imports
88 * buildbot/changes/svnpoller.py: same
89 * buildbot/process/builder.py: same
90 * buildbot/process/buildstep.py: same
91 * buildbot/slave/bot.py: hush pyflakes warning
92 * buildbot/status/tests.py: remove unused imports
93 * buildbot/status/tinderbox.py: same
94 * buildbot/steps/python_twisted.py: same
96 * buildbot/process/step.py: remove this file, these names were
97 deprecated in 0.7.5 and are now being removed.
98 * buildbot/process/step_twisted.py: same
99 * buildbot/test/test_steps.py (ReorgCompatibility): remove test
101 * buildbot/twcompat.py: remove the empty file, yay it is gone
103 * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
104 tw-2.0.0 and newer have the method we need.
105 (getProcessOutputAndValue): same
106 (which): remove this method, tw-2.0.0 t.p.procutils has it
108 * buildbot/twcompat.py (implements): remove this method
109 * buildbot/*: import implements() from zope.interface directly
111 * buildbot/status/mail.py: stop falling back to importing
112 twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
115 * buildbot/twcompat.py (Interface): remove this import
116 * buildbot/*: import Interface from zope.interface directly
118 * buildbot/twcompat.py (providedBy): remove this method
119 * buildbot/*: turn all uses of providedBy(obj, iface) into
120 iface.providedBy(obj)
122 * buildbot/twcompat.py (maybeWait): remove this method, now that
123 we no longer maintain compatibility with Twisted<=1.3.0 .
124 Twisted-2.0.0 and later allow trial methods to return Deferreds
126 * buildbot/test/*: remove all uses of maybeWait
128 * buildbot/__init__.py (version): bump to 0.7.5+ while between
130 * docs/buildbot.texinfo: same
132 2006-12-10 Brian Warner <warner@lothar.com>
134 * buildbot/__init__.py (version): Releasing buildbot-0.7.5
135 * docs/buildbot.texinfo: set version to match
137 2006-12-10 Brian Warner <warner@lothar.com>
139 * README (REQUIREMENTS): update for release
140 * NEWS: update for release
141 * buildbot/slave/commands.py (command_version): mention that this
142 version (2.2) was released with buildbot-0.7.5
144 * buildbot/test/test_config.py (StartService.testStartService):
145 inhibit the usual read-config-on-startup behavior, since otherwise
146 the log.err that gets recorded causes the test to fail
148 * buildbot/status/builder.py (LogFile.finish): forget about all
149 subscribers once the log has finished, since after that point
150 we're never going to use them again. This might help free up some
153 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
154 than the old/deprecated gtk.mainquit()
156 2006-12-09 Brian Warner <warner@lothar.com>
158 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
159 better when we can't open the masterdst file
161 * buildbot/scripts/startup.py (Follower._failure): add missing
162 import statement for BuildSlaveDetectedError
164 * buildbot/steps/transfer.py (FileUpload): cleanup
165 (FileDownload): same. Add tests for slave version, add mode=.
166 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
167 (SlaveFileDownloadCommand): same
168 * buildbot/test/test_transfer.py: enhance tests
169 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
172 2006-12-08 Brian Warner <warner@lothar.com>
174 * buildbot/scripts/runner.py (sendchange): halt the reactor on
175 both success *and* failure. Without this, the 'buildbot
176 sendchange' command would hang if it could not contact the
177 buildmaster or deliver the Change, which would generally cause the
178 user's commit/record/checkin command to hang too. Thanks to
179 Christian Unger for the catch.
181 2006-12-06 Brian Warner <warner@lothar.com>
183 * NEWS: update with items for the next release
185 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
186 whimsical example pulled from a punch-drunk email I sent out late
188 (Transferring Files): document some of the other parameters
189 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
190 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
191 * buildbot/test/test_svnpoller.py: same
192 * buildbot/changes/svnpoller.py (SVNPoller): same
194 2006-11-26 Brian Warner <warner@lothar.com>
196 * docs/buildbot.texinfo (Build Properties): remind users that
197 WithProperties must appear in a command= list, not as a top-level
199 * buildbot/steps/shell.py (ShellCommand.start): and assert that
200 we're sending a list or a single string to the RemoteShellCommand
202 * buildbot/scheduler.py (Nightly): Improve docs slightly.
204 * buildbot/scripts/startup.py (start): skip the whole
205 watch-the-logfile thing under windows, since it needs os.fork()
207 * buildbot/scripts/runner.py (restart): remove the old message
208 that got printed after the buildbot was restarted.. it most cases
209 it didn't get printed at the right time anyways
211 2006-11-25 Brian Warner <warner@lothar.com>
213 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
214 follow twistd.log and print lines until the process has started
215 started properly. For the buildmaster, this means until the config
216 file has been parsed and accepted. For the buildslave, this means
217 until we've connected to the master. We give up after 5 seconds in
218 any case. Helpful error messages and troubleshooting suggestions
219 are printed when we don't see a successful startup. This closes the
220 remainder of SF#1517975.
221 * buildbot/scripts/startup.py: moved app startup code to here
222 * buildbot/scripts/logwatcher.py: utility class to follow log
223 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
224 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
225 so the LogWatcher can tell the difference between a buildmaster
228 2006-11-24 Brian Warner <warner@lothar.com>
230 * docs/examples/twisted_master.cfg: update to match the version
231 in use on twistedmatrix.com
232 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
233 was using before stopped working, but 'irc.freenode.net' works
236 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
239 * buildbot/clients/base.py (TextClient.not_connected): upon
240 UnauthorizedLogin failures, remind the user to connect to the
241 PBListener port instead of the slaveport.
242 (TextClient.disconnected): shut down more quietly
243 * docs/buildbot.texinfo (statuslog): add another reminder
245 * buildbot/scripts/runner.py (Options.subCommands): rename
246 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
247 'sighup' as an alias.
248 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
249 reconfig command to follow twistd.log and print all of the lines
250 from the start of the config-file reload to its completion. This
251 should make it a lot easier to discover bugs in the config file.
252 Use --quiet to disable this behavior. This addresses half of
253 SF#1517975, the other half will be to add this same utility to
254 'buildbot start' and 'buildbot restart'.
255 * docs/buildbot.texinfo (Loading the Config File): same
258 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
259 method, it has been deprecated for a long time. Use
260 IBuilderControl.requestBuild instead.
261 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
262 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
263 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
264 * buildbot/test/test_control.py (Force.testForce): same
265 * buildbot/test/test_run.py: use requestBuild instead
267 * buildbot/clients/debug.py: replace 'Force Build' button with
268 'Request Build' (which just adds one to the queue), add Ping
269 Builder, add branch/revision fields to Request Build.
270 * buildbot/clients/debug.glade: same
271 * buildbot/master.py: update interface to match. This creates an
272 incompatibility between new debugclients and old buildmasters.
274 * buildbot/process/builder.py (Builder._attached): delay the call
275 to maybeStartBuild for a reactor turn, to avoid starting a build
276 in the middle of a reconfig (say, if the new Builder uses a new
277 slave which is already connected).
279 2006-11-23 Brian Warner <warner@lothar.com>
281 * buildbot/test/test_transfer.py: appease pyflakes
282 * buildbot/test/test_steps.py: same
284 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
285 keeps pyflakes from finding undefined names
287 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
288 Builder no longer induces a disconnect/reconnect cycle. This means
289 that any builds currently in progress will not be interrupted, and
290 any builds which are queued in the Builder will not be lost. This
291 is implemented by having the new Builder extract the state (i.e.
292 all pending Builds and any desired SlaveBuilders) from the old
294 (BotPerspective): refactor. The BotPerspective no longer keeps
295 track of all the Builders that want to use this slave; instead, it
296 asks the BotMaster each time it needs this list. This removes
297 addBuilder and removeBuilder. Clean up attached() to acquire all
298 the slave's information in a more atomic fashion. updateSlave() is
299 now the way to make sure the slave is using the right set of
300 Builders: just call it after everything else has been
302 (BotMaster): refactor, removing addBuilder/removeBuilder and
303 replacing them with an all-at-once setBuilders() call.
305 * buildbot/test/test_slaves.py (Reconfig): new test case to
306 exercise this functionality
307 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
308 * buildbot/slave/commands.py (WaitCommand): same
310 * docs/buildbot.texinfo (Loading the Config File): document the
313 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
314 SlaveBuilder to have its parent Builder changed.
315 (SlaveBuilder.isAvailable): new method to give access to state,
316 which is now a private attribute
317 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
318 the SlaveBuilder about how it is being used. These methods update
319 its internal state. buildFinished() is now the place that invokes
320 maybeStartBuild() on its parent Builder.
321 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
322 new Builder to take over for an old one, transferring state from
324 (Buider): refactor the way that SlaveBuilders are used to match,
325 giving them a bit more autonomy.
326 (Builder.buildFinished): this no longer calls maybeStartBuild():
327 instead the SlaveBuilder calls it on whoever its parent Builder is
328 at the time. This way, when an old Builder is replaced by a new
329 one, and there was a build in progress during the transition, when
330 that build finishes, it will be the new Builder that is told about
331 the newly available slave so it can start a new build.
333 * buildbot/process/base.py (Build.startBuild._release_slave): when
334 the Build finishes, tell the SlaveBuilder that they've been
337 * buildbot/status/builder.py (SlaveStatus): add some new setter
338 methods for use by BotPerspective, to keep some attributes more
341 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
342 called by the buildmaster.
343 (Bot.setBuilderList): instead, we locally announce any leftover
344 directories based upon which Builders we were told about. The
345 master doesn't really care; it's the local admin who may or may not
349 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
350 to allow use of python2.4 or whatever. This tool still requires
353 2006-11-19 Brian Warner <warner@lothar.com>
355 * NEWS (IStatusLog.readlines): more news items
357 2006-11-18 Brian Warner <warner@lothar.com>
359 * NEWS: start collecting items for the next release.
361 2006-11-04 Brian Warner <warner@lothar.com>
363 * buildbot/changes/bonsaipoller.py: apply updates from Ben
364 Hearsum. Closes SF#1590310.
365 * buildbot/test/test_bonsaipoller.py: and tests
367 * buildbot/status/tinderbox.py
368 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
369 status when the build results in WARNINGS. Patch from Dave
370 Liebreich. Closes SF#1587352.
372 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
373 linux-vs-osx behavior difference w.r.t. reading from files that
374 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
375 to Mark Rowe for the patch.
377 2006-10-15 Brian Warner <warner@lothar.com>
379 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
380 method name was misspelled in the interface definition. Thanks to
381 Roy Rapoport for the catch.
383 2006-10-13 Brian Warner <warner@lothar.com>
385 * docs/buildbot.texinfo (Adding LogObservers): update sample code
386 to match the great Steps renaming
388 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
389 Maybe I should run my own unit tests before recording a big
390 change. Good thing I've got a buildbot to remind me.
392 2006-10-12 Brian Warner <warner@lothar.com>
394 * buildbot/steps/transfer.py: rework __init__ and args setup
395 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
397 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
398 when opening the target file, only catch IOError (to report via
399 stderr/rc!=0), let the others be reported as normal exceptions
401 2006-10-08 Brian Warner <warner@lothar.com>
403 * contrib/svn_watcher.py: fix security holes by using proper argv
404 arrays and subprocess.Popen() rather than commands.getoutput().
405 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
406 is deprecated in favor of buildbot/changes/svnpoller.py, and will
407 probably be removed by the next release.
410 2006-10-04 Brian Warner <warner@lothar.com>
412 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
413 initial lines that weren't emitted by pyflakes. When the pyflakes
414 command is run under a Makefile, 'make' will echo the command it
415 runs to stdio, and that was getting logged as a "misc" warning.
416 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
417 * buildbot/test/test_steps.py (testPyFlakes3): another test
419 2006-10-01 Brian Warner <warner@lothar.com>
421 * buildbot/status/html.py (HtmlResource.render): if we get a
422 unicode object from our content() method, encode it into utf-8
423 like we've been claiming to all along. This allows the comments
424 and author names from svnpoller.py to be delivered properly.
426 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
427 de-unicodify filenames before creating the Change, because the
428 rest of buildbot is unlikely to handle them well. Leave the 'who'
429 field as a unicode object.. I don't think there's anything that
430 will break very soon, and it will probably nudge us towards
431 accepting unicode everywhere sooner or later. Stop using the
432 "date" field that comes out of SVN, since it is using the
433 repository's clock (and timezone) and what we care about is the
434 buildmaster's (otherwise Changes from the future show up later
435 than the builds they triggered).
436 * buildbot/test/test_svnpoller.py (Everything.test1): match the
439 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
440 Suvbersion repository polling ChangeSource. I've hacked it up
441 considerably: any bugs are entirely my own fault. Thank you
443 * buildbot/test/test_svnpoller.py: tests for it
444 * docs/buildbot.texinfo (SvnSource): document it
446 2006-09-30 Brian Warner <warner@lothar.com>
448 * buildbot/scheduler.py (Periodic): submit a reason= to the
449 BuildSet to indicate which Scheduler triggered the build. Thanks
450 to Mateusz Loskot for the suggestion.
452 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
454 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
455 changes: set self.loop in __init__, remove unused volatile=
457 * docs/buildbot.texinfo (.buildbot config directory): add more
458 docs on the .buildbot/options keys used by "buildbot try"
459 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
460 (Try.deliverJob): same
462 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
466 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
467 close the filehandle when we stop watching the file. Before, the
468 filehandle was only closed when the LogFileWatcher was
469 garbage-collected, which could be quite a while in the future. If
470 it was still open by the time the next build started, windows will
471 refuse to let the new build delete the old build/ directory. Fixes
472 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
473 #twisted for the catch.
475 2006-09-29 Brian Warner <warner@lothar.com>
477 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
480 2006-09-25 Brian Warner <warner@lothar.com>
482 * setup.py: the new buildbot.steps module wasn't being installed.
483 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
484 (testmsgs): add the extra stuff from buildbot/test/* so you can
485 run unit tests on an installed copy of buildbot, not just from
488 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
489 columns of 'svnlook changed' output contain status information, so
490 strip [:4] instead of [:6]. Depending upon what the status flags
491 were, this would sometimes lead to mangled filenames. Thanks to
492 Riccardo Magliocchetti for the patch. Closes SF#1545146.
494 * buildbot/steps/source.py (Monotone): initial Monotone support,
495 contributed by Nathaniel Smith. Still needs docs and tests, but
496 this code has been in use on the Monotone buildbot for a long
498 * buildbot/slave/commands.py (Monotone): slave-side support
499 * buildbot/changes/monotone.py (MonotoneSource): polling change
502 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
503 contributed a Change Source that polls a Bonsai server (a
504 kind of web-based viewcvs CGI script).
506 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
507 Hearsum contributed a status plugin which sends email in the same
508 format that Tinderbox does: this allows a number of tinderbox
509 tools to be driven by Buildbot instead. Thanks Ben!
511 2006-09-24 Brian Warner <warner@lothar.com>
513 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
514 Thanks to Robert Helmer for the patch.
516 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
517 BuildStatus about the buildslave name at the *beginning* of the
518 build, rather than at the end. Thanks to Alexander Lorenz for the
520 * buildbot/status/html.py (StatusResourceBuild.body): always
521 include the slavename in the build page, not just when the build
523 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
524 slavename in the email message
526 2006-09-21 Brian Warner <warner@lothar.com>
528 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
530 * docs/examples/glib_master.cfg: same
531 * docs/examples/hello.cfg: same
532 * docs/examples/twisted_master.cfg: same, update to current usage
534 2006-09-19 Brian Warner <warner@lothar.com>
536 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
537 (PyFlakes.createSummary): make it compatible with python-2.2
539 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
540 for at least the output-parsing parts of PyFlakes
542 2006-09-18 Brian Warner <warner@lothar.com>
544 * buildbot/steps/python.py: oops, fix import of StringIO
546 2006-09-17 Brian Warner <warner@lothar.com>
548 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
549 turns out that SVN-1.4.0 doesn't fail to update once you've
550 replaced a file with a directory, unlike older versions of SVN and
551 pretty much every other VC tool we support. Since what we really
552 care about is that the update succeeds anyway, stop checking that
553 the tree got clobbered and just assert that the build succeeded.
554 (VCBase.printLogs): add a utility function for debugging
556 * buildbot/process/step.py: oops, added extra imports by mistake
558 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
559 rstrip() on the first line coming out of the 'p4 describe'
560 process, to remove the stray ^M that Wade Brainerd reports seeing
561 in the 'when' field. Fixes SF#1555985.
563 * buildbot/master.py (BuildMaster.loadConfig): improve the error
564 message logged when c['schedulers'] is not right
565 * buildbot/scheduler.py (Scheduler.__init__): improve error
566 message when a Scheduler() is created with the wrong arguments
567 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
568 verify that these error messages are emitted
570 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
571 The idea is that all the base classes (like BuildStep and
572 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
573 will be a leftover backwards-compatibility file that only contains
574 aliases for the steps that were moved out to buildbot.steps.*
575 * lots: change imports to match
576 * buildbot/process/step.py: add a DeprecationWarning if it ever
579 2006-09-12 Brian Warner <warner@lothar.com>
581 * buildbot/scheduler.py (Scheduler.__init__): make sure that
582 builderNames= is actually a sequence, since if you happen to give
583 it a single builder-specification dictionary instead, it won't get
584 caught by the existing assert. Thanks to Brett Neely for the
587 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
589 * docs/buildbot.texinfo (Python BuildSteps): document them
590 (sendchange): include a link to PBChangeSource, since you need one
592 * buildbot/steps/shell.py: clean up test-case-name line, remove some
594 * buildbot/steps/dummy.py: same
596 2006-09-08 Brian Warner <warner@lothar.com>
598 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
599 BuildStep which lets you transfer files from the master to the
600 slave or vice versa. Thanks to Albert Hofkamp for the original
601 patch. Fixes SF#1504631.
602 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
604 (SlaveFileDownloadCommand): same
605 * docs/buildbot.texinfo (Transferring Files): document it
606 * buildbot/test/test_transfer.py: test it
607 * buildbot/test/runutils.py (StepTester): new utility class for
608 testing BuildSteps and RemoteCommands without Builds or Bots or PB
609 * buildbot/test/test_steps.py (CheckStepTester): validate that the
612 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
613 walk through StatusLogs one line at a time, mostly for the benefit
614 of ShellCommand.createSummary methods. You can either walk through
615 STDOUT or STDERR, but the default is STDOUT.
617 * buildbot/status/builder.py (LogFile.readlines): implement it.
618 Note that this is not yet memory-efficient, it just pulls the
619 whole file into RAM and then splits it up with a StringIO.
620 Eventually this should be a generator that only pulls chunks from
622 * buildbot/test/test_status.py (Log.testReadlines): test it
624 * docs/buildbot.texinfo: update to match changes
625 * buildbot/process/factory.py: stop using old definitions
626 * buildbot/process/process_twisted.py: same
627 * buildbot/test/test_*.py: same
629 * buildbot/process/step_twisted.py: move definition to..
630 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
631 relative-import mechanisms prevent this from being named 'twisted'
632 or 'python/twisted' as I would have preferred.
634 * buildbot/process/maxq.py: move definition to..
635 * buildbot/steps/maxq.py: .. here, leave a compatibility import
637 * buildbot/process/step.py: split the user-visible BuildSteps into
638 separate files, all under buildbot/steps/
639 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
640 * buildbot/steps/shell.py: this holds ShellCommand and friends
641 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
643 2006-09-05 Brian Warner <warner@lothar.com>
645 * lots: run pyflakes, removed a lot of unused imports, changed the
646 form of some conditional imports to remove false pyflakes
647 warnings. There are still a number of warnings left, mostly from
648 imports that are done for their side-effects.
649 * buildbot/test/test_vc.py: import twisted.python.failure, since it
652 2006-08-26 Brian Warner <warner@lothar.com>
654 * buildbot/test/test_locks.py (Unit.testLater): make the tests
655 compatible with twisted-1.3.0, for some reason I just can't seem
656 to let go of the past.
658 2006-08-25 Brian Warner <warner@lothar.com>
660 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
662 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
663 all logfiles= in startCommand(), rather than in start() . This
664 makes it easier to have the 'stdio' log come before any secondary
665 logfiles, which I feel makes the waterfall display more
667 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
668 from ShellCommand up into LoggingBuildStep
669 (LoggingBuildStep.__init__): move the handling of logfiles= from
670 ShellCommand up to LoggingBuildStep, because startCommand is
671 provided by LoggingBuildStep, whereas start() was specific to
672 subclasses like ShellCommand and Source. This removes code
673 duplication in those subclasses.
674 (ShellCommand.__init__): same
675 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
676 for a slave that's too old to understand logfiles= into a separate
677 method, so it can live in ShellCommand. The rest of
678 setupLogfiles() can live in LoggingBuildStep.
680 2006-08-24 Brian Warner <warner@lothar.com>
682 * buildbot/locks.py (BaseLock): you can now configure Locks to
683 allow multiple simultaneous owners. They still default to
684 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
686 * docs/buildbot.texinfo (Interlocks): document the new options
687 * buildbot/test/test_locks.py: add a bunch of new unit tests
688 * buildbot/process/base.py (Build.acquireLocks): locks now offer
689 waitUntilMaybeAvailable, not waitUntilAvailable
690 * buildbot/process/step.py (BuildStep.acquireLocks): same
691 * buildbot/master.py (BotMaster.getLockByID): real locks now use
692 the whole lockid in their constructor, not just the name. Also,
693 keep track of which real locks we've handed out by the full
694 lockid, not just class+name, otherwise changing just the maxCount=
695 in the master.cfg file would not actually cause a behavioral
698 2006-08-23 Brian Warner <warner@lothar.com>
700 * buildbot/__init__.py (version): bump to 0.7.4+ while between
702 * docs/buildbot.texinfo: same
704 2006-08-23 Brian Warner <warner@lothar.com>
706 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
707 * docs/buildbot.texinfo: set version to match
708 * NEWS: update for 0.7.4
709 * buildbot/slave/commands.py (command_version): mention that this
710 version (2.1) was released with buildbot-0.7.4
712 2006-08-22 Brian Warner <warner@lothar.com>
716 * CREDITS: new file, list of people who have helped. Thanks!
717 * MANIFEST.in: ship it
719 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
720 new diagrams, the user's manual is more informative than it was.
721 Start shipping the .html user's manual (and generated .png
723 * Makefile: update 'release' target to match
725 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
726 test.. I think the web-parts effort will render it pointless well
727 before it ever actually starts to work.
729 2006-08-20 Brian Warner <warner@lothar.com>
731 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
732 meaning of the prefix= argument. It is now just a string which is
733 stripped from the beginning of the filename. If prefix= is set but
734 not found on any given filename, that filename is ignored. If all
735 filenames in a Change are ignored, the Change is dropped. This is
736 much simpler than the previous sep= nonsense, and I should have
737 implemented it this way from the beginning. Effectively resolves
738 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
739 Gedminas for the catch and suggested fixes.
740 (ChangePerspective.perspective_addChange): implement the actual
742 * buildbot/test/test_changes.py (TestChangePerspective): test it
743 * docs/buildbot.texinfo (PBChangeSource): document it, explain
744 how to properly use prefix=
745 * docs/examples/twisted_master.cfg (source): update prefix= by
746 adding the trailing slash
749 * docs/examples/twisted_master.cfg: update to actual practice
751 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
752 update test case to match new link text.. the HREF has both a
753 class= setting and an enclosing [] pair that I didn't match in the
756 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
757 list of strings is preferred over a single string with embedded
759 (ShellCommand.description=): explain that either single strings or
760 a list of strings is acceptable, and why you might prefer one over
761 the other. Add an example. Fixes SF#1524659, thanks to Paul
762 Winkler for the catch.
763 (Build Steps): update to use f.addStep() rather than using s()
764 and the constructor list
766 * buildbot/process/step.py (ShellCommand): accept either a single
767 string or a list of strings in both description= and
769 * buildbot/test/test_steps.py (Steps.test_description): test it
770 * buildbot/test/runutils.py (makeBuildStep): support for that test
772 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
773 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
774 collecting the files and creating the patch.
776 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
777 per-step URLs that will be displayed on the waterfall display,
778 for things like the HTML output of code-coverage tools, when
779 the results are hosted elsewhere.
780 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
781 way to retrieve these URLs
782 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
783 the method to retrieve these URLs. Also provide backwards
784 compatibility for saved BuildStepStatus instances that didn't have
786 * buildbot/process/step.py (BuildStep.addURL): method to set these
787 URLs from within a BuildStep
788 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
789 (StepBox.getBox): give these external links a distinct CSS class
790 named "BuildStep external" so a .css file can display them
793 * buildbot/test/test_web.py (WaterfallSteps): test that we really
795 * buildbot/test/test_steps.py (Steps): test that we can all the
796 URLs. Also add a bunch of other tests on methods that can be
797 called from within BuildSteps
798 * buildbot/test/runutils.py (makeBuildStep): add utility function
800 2006-08-13 Brian Warner <warner@lothar.com>
802 * docs/buildbot.texinfo (BuildStep LogFiles): document them
804 2006-08-10 Brian Warner <warner@lothar.com>
806 * docs/buildbot.texinfo (Index of master.cfg keys): add another
807 index, this one of things like c['sources'] and c['schedulers']
808 (indices): it looks like my clever idea of putting the @fooindex
809 commands in between the @node and the @subsection (to make the
810 HREF anchor jump to slightly above the section title, which works
811 much better in html) confused texinfo horribly, so I'm moving the
812 index tags back to be just after the @subsection marker. I also
813 added extra lines between the @node/@section paragraph and the
814 index tags, since I think maybe texinfo wants to see these be
817 * docs/Makefile (images): make sure images get built when
819 * docs/images/Makefile: same
821 * buildbot/scripts/runner.py: rename 'buildbot master' to
822 'buildbot create-master', and 'buildbot slave' to 'buildbot
824 * docs/buildbot.texinfo: same
827 * docs/buildbot.texinfo: reimplement the "useful classes" index
828 with actual texinfo indices. The .info rendering is a bit
829 weird-looking but it works well, and the HTML rendering is quite
830 nice. This also puts the index targets in the regular flow of the
831 text, which is easier to maintain.
833 2006-08-06 Brian Warner <warner@lothar.com>
835 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
836 Kevin Turner to prefer the environ= argument be a list rather than
837 a string. If it is a list, it will be joined with a platform-local
838 os.pathsep delimiter, and then prepended to any existing
839 $PYTHONPATH value. This works better in cross-platform (i.e.
840 windows buildslaves) environments when you need to push multiple
841 directories onto the front of the path.
842 (SlaveShellCommand): documented the new magic
843 * docs/buildbot.texinfo (ShellCommand): documented the new magic
844 in a user-visible form
846 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
847 Turner to prefer lists over strings when creating/running VC
848 commands during unit tests. This is clearly necessary to survive
849 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
850 renamed the wq() function to qw() though, since that's how it's
851 spelled in perl. Eventually I'd prefer all commands to be
852 specified with lists.
854 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
855 which are deleted (or not yet created) correctly. Also add
856 failsafe code to not explode if the file-watching poller doesn't
857 get started. Thanks to JP Calderone for the catch and the poller
859 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
861 * buildbot/test/emitlogs.py: same
863 * NEWS: summarize recent changes
865 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
866 clause to avoid the "host key mismatch" warning
868 * buildbot/process/step_twisted.py (Trial.start): if the
869 buildslave is too old to understand logfiles=, fall back to
870 running 'cat _trial_temp/test.log' like before.
871 (Trial.commandComplete): same. this takes advantage of the
872 LoggingBuildStep refactoring to stall commandComplete long enough
873 to run a second RemoteShellCommand.
875 * buildbot/process/step.py (LoggingBuildStep.startCommand):
876 refactor command-completion handling, to allow methods like
877 commandComplete/createSummary/evaluateCommand to return Deferreds.
878 (LoggingBuildStep._commandComplete): delete the refactored method
879 (ShellCommand.setupLogfiles): if the buildslave is too old to
880 understand logfiles=, put a warning message both into twistd.log
881 and into the otherwise empty user-visible LogFiles.
883 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
884 callers to provide the slave-side logfile name, rather than
885 forcing it to come from the local name of the LogFile.
886 (BuildStep.getSlaveName): new method
888 * buildbot/process/base.py (Build.getSlaveName): new method, so
889 steps can find out which buildslave they're running on
891 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
892 to match the s/cvs_ver/command_version/ change
894 2006-08-05 Brian Warner <warner@lothar.com>
896 * buildbot/slave/commands.py (command_version): replace the CVS
897 auto-updated cvs_ver keyword with a manually-updated variable,
898 since CVS is no longer the master repository. Add a description of
899 the remote API change starting in this version (2.1), specifically
900 the fact that SlaveShellCommand now accepts 'initial_stdin',
901 'keep_stdin_open', and 'logfiles'.
903 2006-07-31 Brian Warner <warner@lothar.com>
905 * docs/buildbot.texinfo (System Architecture): Finally add lots of
906 diagrams to describe how the whole system fits together. The
907 images themselves are kept in SVG files, with ascii-art versions
908 in corresponding .txt files. Texinfo knows how to interpolate the
909 text version into .info files, reference the .png versions from
910 .html files, and include .eps versions in the .ps format.
911 * docs/images/Makefile: tools to create .png and .eps
912 * docs/images/*.svg: created pictures with Inkscape.
913 * .darcs-boring: ignore the generated .eps and .png files
915 2006-07-24 Brian Warner <warner@lothar.com>
917 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
918 Scheduler names, since they cause setServiceParent to explode
920 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
922 2006-07-20 Brian Warner <warner@lothar.com>
924 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
925 which runs the buildbot unit tests
927 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
928 classes that are useful in master.cfg
930 2006-07-15 Brian Warner <warner@lothar.com>
932 * Makefile (some-apidocs): new target to build only some epydocs
934 * setup.py: minor comment.. does the classifiers= argument prevent
935 the setup.py script from working on python2.2/2.3?
937 * buildbot/scripts/sample.cfg: update manhole example, arrange into
940 * buildbot/twcompat.py: fix minor typo in comments
942 * buildbot/manhole.py: move all Manhole-related code out to this
943 module. Implement SSH-based manholes (with TwistedConch), and move
944 to conch's nifty line-editing syntax-coloring REPL shell instead
945 of the boring non-editing monochromatic (and deprecated) old
947 * buildbot/master.py: remove all Manhole-related code
948 (BuildMaster.loadConfig._add): make sure the old manhole is
949 removed before we add the new one
950 * docs/buildbot.texinfo (Debug options): document new Manhole options
952 * buildbot/twcompat.py (_which): fix some epydoc issues
953 * buildbot/status/html.py (Waterfall.__init__): same
955 2006-06-29 Brian Warner <warner@lothar.com>
957 * buildbot/interfaces.py: get Interface from b.twcompat to hush
958 deprecation warnings under newer Twisteds (by using
959 zope.interface.Interface instead of old twisted.python.components
961 * buildbot/slave/interfaces.py: same
963 2006-06-28 Brian Warner <warner@lothar.com>
965 * buildbot/slave/commands.py (SVN): add --non-interactive to all
966 svn commands, so it will fail immediately instead of hanging while
967 it waits for a username/password to be typed in.
969 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
970 log message if the step was shut down
972 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
973 obsolete reference to mktap.
975 2006-06-20 Brian Warner <warner@lothar.com>
977 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
978 test to include new 'logfiles' argument sent from master to slave
980 2006-06-19 Brian Warner <warner@lothar.com>
982 * buildbot/process/step_twisted.py (Trial): track Progress from
983 _trial_temp/test.log too
985 * buildbot/process/step.py (OutputProgressObserver): generalize
986 the earlier StdioProgressObserver into an OutputProgressObserver
987 that can track LogFiles other than stdio.
988 (LoggingBuildStep.__init__): same
990 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
991 _trial_temp/test.log, not a separate 'cat' command. TODO: this
992 will fail under windows because of os.sep issues. It might have
993 worked before if 'cat' was doing cygwin path conversion.
995 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
996 creation of LogFileWatchers
997 (ShellCommand._startCommand): and record the files that were
998 watched in the 'headers' section of the ShellCommand output
1000 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
1001 need to actually pass it to the slave if you want it to work.
1002 (ShellCommand): document it a bit
1004 * buildbot/test/test_shell.py: new test to validate LogFiles
1005 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
1007 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
1008 before printing the last batch of lines, to test that the polling
1009 logic is working properly
1011 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
1012 handling, making it possible to track multiple logs for a single
1013 RemoteCommand. The previous single logfile is now known as the
1015 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
1016 (RemoteShellCommand.__init__): accept logfiles=
1017 (LoggingBuildStep.startCommand): stdio_log is now one of many
1018 (ShellCommand): added logfiles= argument, as well as a class-level
1019 .logfiles attribute, which will be merged together to figure out
1020 which logfiles should be tracked. The latter maybe be useful for
1021 subclasses of ShellCommand which know they will aways produce
1022 secondary logfiles in the same location.
1024 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
1025 and closeStdin() methods, preparing to make it possible to write
1026 to a ShellCommand's stdin at any time, not just at startup. These
1027 writes are buffered if the child process hasn't started yet.
1028 (LogFileWatcher): new helper class to watch arbitrary logfiles
1029 while a ShellCommand runs. This class polls the file every two
1030 seconds, and sends back 10k chunks to the buildmaster.
1031 (ShellCommand): rename stdin= to initialStdin=, and add
1032 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
1034 (ShellCommand.addLogfile): LogFile text is sent in updates with a
1035 key of "log" and a value of (logname, data).
1036 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
1037 'logfiles' to the master-visible args dictionary.
1038 (SourceBase.doPatch): match s/stdin/initialStdin/ change
1041 * buildbot/test/test_vc.py (Patch.testPatch): same
1044 * buildbot/test/emit.py: write to a logfile in the current
1045 directory. We use this to figure out what was used as a basedir
1046 rather than looking to see which copy of emit.py gets run, so that
1047 we can run the commands from inside _trial_temp rather than inside
1049 * buildbot/test/subdir/emit.py: same
1050 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
1051 argument rather than running from buildbot/test/
1052 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
1053 rather than using an implicit setUp()
1054 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
1055 (ShellBase.testShell1, etc): use explicit path to emit.py instead
1056 of assuming that we're running in buildbot/test/ (and that '.' is
1059 * buildbot/slave/commands.py (Command.doStart): refactor Command
1060 startup/completion a bit: now the SlaveBuilder calls doStart(),
1061 which is not meant for overridding by subclasses, and doStart()
1062 calls start(), which is. Likewise the SlaveBuilder calls
1063 doInterrupt(), and subclasses override interrupt(). This also puts
1064 responsibility for maintaining .running in Command rather than in
1066 (Command.doInterrupt): same
1067 (Command.commandComplete): same, this is called when the deferred
1068 returned by start() completes.
1069 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
1070 (SlaveBuilder.remote_interruptCommand): same
1071 (SlaveBuilder.stopCommand): same
1073 2006-06-16 Brian Warner <warner@lothar.com>
1075 * buildbot/test/test_shell.py: new test file to contain everything
1076 relating to ShellCommand
1077 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
1078 multiple logfiles in realtime" feature, not yet implemented
1079 * buildbot/test/emitlogs.py: support file for testLogFiles
1080 * docs/buildbot.texinfo (ShellCommand): document the feature
1082 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
1084 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
1085 for tests which exercise SlaveCommands in isolation.
1087 * buildbot/test/test_slavecommand.py: Move some utilities like
1088 SignalMixin and FakeSlaveBuilder from here ..
1089 * buildbot/test/runutils.py: .. to here, so they can be used by
1090 other test classes too
1091 * buildbot/test/test_vc.py: more SignalMixin refactoring
1092 * buildbot/test/test_control.py: same
1093 * buildbot/test/test_run.py: and some rmtree refactoring
1095 2006-06-15 Brian Warner <warner@lothar.com>
1097 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
1098 'testBranch' to match other VC tests and have the tests run in
1099 roughly increasing order of dependency
1101 * buildbot/test/test_steps.py (LogObserver): new test to verify
1102 LogObservers can be created at various times and still get
1103 connected up properly
1105 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
1106 to create BuildStepStatus instances that actually work.
1108 * buildbot/process/step.py (LogObserver): add outReceived and
1109 errReceived base methods, to be overridden
1111 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
1112 API to take a name instead of a step, reducing the coupling
1113 somewhat. This returns the BuildStepStatus object so it can be
1114 passed to the new Step, instead of jamming it directly into the
1116 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
1118 * buildbot/process/base.py (Build.setupBuild): use both methods
1119 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
1120 process a bit to match
1122 2006-06-14 Brian Warner <warner@lothar.com>
1124 * docs/buildbot.texinfo (Adding LogObservers): add some limited
1125 docs on writing new LogObserver classes
1126 (Writing New Status Plugins): brief docs on how Status Plugins fit
1129 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
1130 implement a LogObserver that counts how many unit tests have been
1132 (Trial.__init__): wire it in
1133 * buildbot/test/test_twisted.py (Counter): unit test for it
1135 * buildbot/process/step_twisted.py (HLint.commandComplete): update
1136 to new cmd.logs['stdio'] scheme
1137 (Trial.commandComplete): same
1138 (BuildDebs.commandComplete): same
1140 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
1141 LogFiles, instead of just a single one. The old single logfile is
1142 now called "stdio". LoggedRemoteCommand no longer creates a
1143 LogFile for you (the code to do that was broken anyway). If you
1144 don't create a "stdio" LogFile, then stdout/stderr will be
1146 (LogObserver): implement "LogObservers", which a BuildStep can add
1147 to parse the output of a command in real-time. The primary use is
1148 to provide more useful information to the Progress code, allowing
1149 better ETA estimates.
1150 (LogLineObserver): utility subclass which feeds complete lines to
1151 the parser instead of bytes.
1152 (BuildStep.progressMetrics): this is safer as a tuple
1153 (BuildStep.setProgress): utility method, meant to be called by
1155 (BuildStep.addLogObserver): new method, to be called at any time
1156 during the BuildStep (even before any LogFiles have been created),
1157 to attach (or schedule for eventual attachment) a LogObserver to a
1159 (StdioProgressObserver): new LogObserver which replaces the old
1160 "output" progress gatherer
1161 (LoggingBuildStep.__init__): same
1162 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
1163 (LoggingBuildStep._commandComplete): must use logs['stdio']
1164 instead of the old single ".log" attribute.
1165 * buildbot/status/builder.py (LogFile): remove old logProgressTo
1166 functionality, now subsumed into StdioProgressObserver
1167 * buildbot/test/test_status.py (Subscription._testSlave_2): the
1168 log name changed from "output" to "stdio".
1171 * buildbot/interfaces.py (ILogFile): add the Interface used from
1172 the BuildStep towards the LogFile
1173 (ILogObserver): and the one provided by a LogObserver
1174 * buildbot/status/builder.py (LogFile): implement it
1176 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
1177 HEADER constants here ..
1178 * buildbot/status/builder.py (STDOUT): .. from here
1180 2006-06-13 Brian Warner <warner@lothar.com>
1182 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
1183 compatibility with python2.2, which doesn't have the 'substr in
1185 (TestP4Poller.makeTime): utility function to construct the
1186 timestamp using the same strptime() approach as p4poller does. It
1187 turns out that time.mktime() behaves slightly differently under
1188 python2.2, probably something to do with the DST flag, and that
1189 causes the test to fail under python2.2. (changing the mktime()
1190 arguments to have dst=0 instead of -1 caused it to fail under
1191 python2.3. Go figure.)
1192 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
1194 2006-06-12 Brian Warner <warner@lothar.com>
1196 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
1197 proper Perforce (P4) support. Many many thanks to Scott Lamb for
1198 contributing such an excellent patch, including docs and unit
1199 tests! This makes it *so* much easier to apply. I had to update
1200 test_vc.py to handle some recent refactorings, but everything else
1201 applied smoothly. The only remaining thing I'd like to fix would
1202 be to remove the hard-wired port 1666 used by p4d, and allow it to
1203 claim any unused port. This would allow two copies of the test
1204 suite to run on the same host at the same time, as well as
1205 allowing the test suite to run while a real (production) p4d was
1206 running on the same host. Oh, and maybe we should add a warning to
1207 step.P4 that gets emitted if the slave is too old to provide the
1208 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
1209 * buildbot/slave/commands.py (P4): same
1210 (P4Sync): same, some minor updates
1211 * buildbot/changes/p4poller.py: same
1212 * docs/buildbot.texinfo: same
1213 * buildbot/test/test_p4poller.py: same
1214 * buildbot/test/test_vc.py (P4): same
1216 * setup.py: add Trove classifiers for PyPI
1218 2006-06-08 Brian Warner <warner@allmydata.com>
1220 * buildbot/status/client.py
1221 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
1222 changing this from getCurrentBuild() to getCurrentBuilds(). Each
1223 build needs to be IRemote'd separately, rather than IRemote'ing
1224 the whole list at once. I can't wait until newpb's serialization
1225 adapters make this unnecessary.
1227 2006-06-06 Brian Warner <warner@lothar.com>
1229 * buildbot/process/step.py (WithProperties): make this inherit
1230 from ComparableMixin, so that reloading an unchanged config file
1231 doesn't cause us to spuriously reload any Builders which use them.
1232 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
1235 2006-06-03 Brian Warner <warner@lothar.com>
1237 * contrib/windows/{setup.py, buildbot_service.py}: add support for
1238 running py2exe on windows, contributed by Mark Hammond. Addresses
1239 SF#1401121, but I think we still need to include
1240 buildbot/scripts/sample.cfg
1241 * setup.py: include buildbot_service.py as a script under windows
1242 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
1243 a py2exe application), get the icon/css datafiles from a different
1246 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
1247 double-escape the build URL. Thanks to Olivier Bonnet for the
1248 patch. Fixes SF#1452801.
1250 2006-06-02 Brian Warner <warner@lothar.com>
1252 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
1253 first six columns of 'svnlook' output, not just the first column,
1254 since property changes appear in the other five. Thanks to Olivier
1255 Bonnet for the patch. Fixes SF#1398174.
1257 2006-06-01 Brian Warner <warner@lothar.com>
1259 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
1260 the fake build, so that title= has something to be set to
1262 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
1263 attribute of the "Build #NN" link in the yellow start-the-build
1264 box to the build's reason. This means that you get a little
1265 tooltip explaining why the build was done when you hover over the
1266 yellow box. Thanks to Zandr Milewski for the suggestion.
1268 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
1269 (Box.setETA): handle ETA=None (by stopping the timer)
1270 (Box.update): make the [soon] text less different than the usual
1271 text, so the rest of the text doesn't flop around so much. It
1272 would be awfully nice to figure out how to center this stuff.
1273 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
1275 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
1276 by default, so that any ShellCommand which fails marks the overall
1277 build as a failure. I should have done this from the beginning.
1278 Add flunkOnFailure=False to the arguments if you want to turn off
1281 2006-05-30 Brian Warner <warner@lothar.com>
1283 * buildbot/clients/gtkPanes.py: add a third row: now it shows
1284 last-build/current-build/current-step. Show what step is currently
1285 running. Show ETA for both the overall build and the current step.
1286 Update GTK calls to modern non-deprecated forms. There's still a
1287 lot of dead code and debug noise to remove.
1289 * buildbot/process/step_twisted.py (Trial): set the step name, so it
1290 shows up properly in status displays
1292 2006-05-28 Brian Warner <warner@lothar.com>
1294 * buildbot/test/test_properties.py (Run.testInterpolate): on the
1295 build we use to verify that WithProperties works:
1297 ** set flunkOnFailure=True so that build failures get noticed
1298 ** set workdir='.' so that the build succeeds, otherwise it is trying
1299 to touch 'build/something', and 'build/' doesn't exist because
1300 usually that's created by a Source step
1301 ** set timeout=10, because Twisted-1.3.0 has a race condition that
1302 this test somehow triggers, in which the 'touch' process becomes
1303 a zombie and we wait for th etimeout before giving up on it.
1305 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
1306 to log the Build results and step logs to the twisted log.
1307 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
1308 what went wrong if a build was expected to succeed but didn't.
1310 * buildbot/process/step_twisted.py (Trial): set the default
1311 trialMode to '--reporter=bwverbose', which specifies verbose
1312 black-and-white text. Back in twisted-1.3/2.0 days we had to use
1313 '-to', but those are completely missing in modern Twisteds.
1315 * buildbot/scripts/sample.cfg: make the sample Manhole config use
1316 a localhost-only port, to encourage better security
1318 * docs/buildbot.texinfo (Change Sources): mention
1321 * .darcs-boring: add a Darcs boringfile
1323 * README (REQUIREMENTS): stop claiming compatibility with
1326 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
1329 2006-05-27 Brian Warner <warner@lothar.com>
1331 * buildbot/__init__.py: bump to 0.7.3+ while between releases
1332 * docs/buildbot.texinfo: same
1334 2006-05-23 Brian Warner <warner@lothar.com>
1336 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
1337 * docs/buildbot.texinfo: set version to match
1338 * NEWS: update for 0.7.3
1340 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
1341 give a quick mapping from VC system to possible ChangeSources
1342 (Build Properties): add 'buildername'
1344 * buildbot/process/base.py (Build.setupStatus): oops, set
1345 'buildername' and 'buildnumber' properties
1346 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
1349 2006-05-22 Brian Warner <warner@lothar.com>
1351 * docs/buildbot.texinfo (Build Properties): explain the syntax of
1352 property interpolation better
1354 * README (INSTALLATION): remove old '-v' argument from recommended
1357 * docs/buildbot.texinfo (ShellCommand): add docs for description=
1358 and descriptionDone= arguments. Thanks to Niklaus Giger for the
1361 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
1362 'svnversion' instead of grepping the output of 'svn info', much
1363 simpler and avoids CR/LF problems on windows. Thanks to Olivier
1364 Bonnet for the suggestion.
1365 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
1366 require the WC_PATH argument, so run 'svnversion .' instead.
1368 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
1369 aren't supposed to have 'self' in their argument list
1371 2006-05-21 Brian Warner <warner@lothar.com>
1373 * buildbot/process/step.py (ShellCommand.start): make
1374 testInterpolate pass. I was passing the uninterpolated command to
1375 the RemoteShellCommand constructor
1376 (ShellCommand._interpolateProperties): oops, handle non-list
1377 commands (i.e. strings with multiple words separated by spaces in
1378 them) properly, instead of forgetting about them.
1380 * buildbot/test/test_properties.py (Run.testInterpolate): new test
1381 to actually try to use build properties in a real build. This test
1383 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
1384 to start and evaluate builds
1386 * buildbot/test/test__versions.py: add a pseudo-test to record
1387 what version of Twisted/Python/Buildbot are running. This should
1388 show up at the beginning of _trial_tmp/test.log, and exists to help
1389 debug other problems.
1391 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
1392 a filename to be served as 'robots.txt' to discourage web spiders.
1393 Adapted from a patch by Tobi Vollebregt, thanks!
1394 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
1395 (Waterfall.test_waterfall): tweak the way that filenames are put
1396 into the config file, to accomodate windows pathnames better.
1398 * docs/buildbot.texinfo (HTML Waterfall): document it
1400 * buildbot/process/process_twisted.py
1401 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
1402 changed the build process. The new setup.py no longer takes the
1404 (FullTwistedBuildFactory.__init__): same
1405 (TwistedReactorsBuildFactory.__init__): same
1407 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
1408 be placed in the [hooks] section of the central repository (the
1409 one that everybody pushes changes to).
1411 2006-05-20 Brian Warner <warner@lothar.com>
1413 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
1414 .darcs-context file, use binary mode. I think this was causing a
1415 Darcs failure under windows.
1417 2006-05-19 Brian Warner <warner@lothar.com>
1419 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
1420 use a timezone string of +0000 and gmtime, since this timestamp is
1421 sent to a buildmaster and %z is broken.
1423 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
1424 string and localtime, since this timestamp will only be consumed
1425 locally, and %z is broken.
1427 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
1428 gmtime, since this timestamp is returned to the buildmaster, and
1431 2006-05-18 Brian Warner <warner@lothar.com>
1433 * NEWS: update in preparation for next release
1435 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
1436 setup-repository and do-we-have-the-vc-tools code into a separate
1437 "helper" class, which sticks around in a single module-level
1438 object. This seems more likely to continue to work in the future
1439 than having it hide in the TestCase and hope that TestCases stick
1440 around for a long time.
1442 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
1443 addremove' has been deprecated in recent versions of mercurial, so
1444 use 'hg add' instead
1446 2006-05-07 Brian Warner <warner@lothar.com>
1448 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
1449 operating under windows, move the file before opening it, since
1450 you can't rename a file that somebody has open.
1452 * buildbot/process/base.py (Build.setupBuild): if something goes
1453 wrong while creating a Step, log the name and arguments, since the
1454 error message when you get the number of arguments wrong is really
1457 2006-05-06 Brian Warner <warner@lothar.com>
1459 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
1460 bugs in twisted-specific code not covered by my unit tests, this
1461 time use 'cmd' argument instead of self.cmd
1463 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
1464 fix stupid braino: either use startwith or find()==0, not both.
1465 (TwistedReactorsBuildFactory.__init__): another dumb typo
1467 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
1468 mark this test as TODO under windows, since process-killing seems
1469 dodgy there. We'll come back to this later and try to fix it
1472 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
1473 and don't include a timezone
1474 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
1475 This should avoid the windows-with-verbose-timezone-name problem
1477 (Patch.testPatch): add a test which runs 'patch' with less
1478 overhead than the full VCBase.do_patch sequence, to try to isolate
1479 a windows test failure. This one uses slave.commands.ShellCommand
1480 and 'patch', but none of the VC code.
1482 * buildbot/slave/commands.py (getCommand): use which() to find the
1483 executables for 'cvs', 'svn', etc. This ought to help under
1486 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
1487 working directory before starting. If an earlier test failed, the
1488 leftover directory would mistakenly flunk a later test.
1489 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
1490 Make sure that we use the right commandlines if which("tla") picks
1491 up "tla.exe" (as it does under windows).
1492 (TlaSupport.do_get): factor out this tla-vs-baz difference
1493 (TlaSupport.vc_create): more tla-vs-baz differences
1495 * buildbot/test/test_slavecommand.py
1496 (ShellBase.testShellMissingCommand): stop trying to assert
1497 anything about the error message: different shells on different
1498 OSes with different languages makes it hard, and it really isn't
1499 that interesting of a thing to test anyway.
1501 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
1502 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
1503 "Panther"), because it has a bug which flunks a couple tests in
1504 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
1505 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
1506 able to test that yet.
1508 2006-04-30 Brian Warner <warner@lothar.com>
1510 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
1511 make sure child commands emit messages in english, so our regexps
1512 will match. Thanks to Nikaus Giger for identifying the problems.
1513 (VCBase._do_vctest_export_1): mode="export" is not responsible
1514 for setting the "got_revision" property, since in many cases it is
1515 not convenient to determine.
1516 (SVNSupport.capable): when running 'svn --version' to check for
1517 ra_local, we want error messages in english
1518 * buildbot/test/test_slavecommand.py
1519 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
1520 to emit the error message in english
1522 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
1523 the environment with $LC_ALL="C" so that Commands which need to
1524 parse the output of their child processes can obtain it in
1526 (SVN.parseGotRevision): call "svn info" afterwards instead of
1527 watching the output of the "svn update" or "svn checkout".
1528 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
1529 (Arch.parseGotRevision): same
1530 (Bazaar.parseGotRevision): same
1531 (Mercurial.parseGotRevision): same
1533 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
1534 $LC_ALL="C" when running commands under 'buildbot try', too
1536 * buildbot/test/__init__.py: remove the global os.environ()
1537 setting, instead we do it just for the tests that run commands and
1538 need to parse their output.
1540 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
1541 remove the overly-short .timeout on this test, because non-DNotify
1542 platforms must fall back to polling which happens at 10 second
1543 intervals, so a 5 second timeout would never succeed.
1545 2006-04-24 Brian Warner <warner@lothar.com>
1547 * docs/buildbot.texinfo (Installing the code): update trial
1548 invocation, SF#1469116 by Niklaus Giger.
1549 (Attributes of Changes): updated branch-name examples to be
1550 a bit more realistic, SF#1475240 by Stephen Davis.
1552 * contrib/windows/buildbot2.bat: utility wrapper for windows
1553 developers, contributed by Nick Trout (after a year of neglect..
1554 sorry!). SF#1194231.
1556 * buildbot/test/test_vc.py (*.capable): store the actual VC
1557 binary's pathname in VCS[vcname], so it can be retrieved later
1558 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
1559 strip out non-numeric timezone information, specifically the funky
1560 German string that his system produced that confuses CVS.
1561 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
1562 allow Darcs tests to work on windows
1563 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
1564 procutils.which() everywhere, to allow tryclient to work under
1565 windows. Also from Niklaus Giger, SF#1463394.
1567 * buildbot/twcompat.py (which): move the replacement for a missing
1568 twisted.python.procutils.which from test_vc.py to here, so it can
1569 be used in other places too (specifically tryclient.py)
1571 2006-04-23 Brian Warner <warner@lothar.com>
1573 * buildbot/status/html.py (StatusResourceBuild.body): replace the
1574 bare buildbotURL/projectName line with a proper DIV, along with a
1575 CSS class of "title", from Stefan Seefeld (SF#1461675).
1576 (WaterfallStatusResource.body0): remove the redundant 'table'
1577 class from the table
1578 (WaterfallStatusResource.body): same. Also add class="LastBuild"
1579 to the top-row TR, and class="Activity" to the second-row TR,
1580 rather than putting them in the individual TD nodes.
1582 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
1583 'got_revision' build property for all VC systems that implement
1584 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
1586 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
1587 to determine which revision we actually obtained
1588 (CVS.parseGotRevision): implement this for CVS, which just means
1589 to grab a timestamp. Not ideal, and it depends upon the buildslave
1590 having a clock that is reasonably well syncronized with the server,
1591 but it's better than nothing.
1592 (SVN.parseGotRevision): implement it for SVN, which is accurate
1593 (Darcs.parseGotRevision): same
1594 (Arch.parseGotRevision): same
1595 (Bazaar.parseGotRevision): same
1596 (Mercurial.parseGotRevision): same
1598 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
1599 keep a record of all non-stdout/stderr/header/rc status updates,
1600 for the benefit of RemoteCommands that send other useful things,
1602 (Source.commandComplete): put any 'got_revision' status values
1603 into a build property of the same name
1606 * buildbot/process/step_twisted.py (Trial): update to deal with
1607 new ShellCommand refactoring
1609 * docs/buildbot.texinfo (Build Properties): document new feature
1610 that allows BuildSteps to get/set Build-wide properties like which
1611 revision was requested and/or checked out.
1613 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
1614 * buildbot/status/builder.py (BuildStatus.getProperty): implement
1615 it. Note that this bumps the persistenceVersion of the saved Build
1616 object, so add the necessary upgrade-old-version logic to include
1617 an empty properties dict.
1619 * buildbot/process/base.py (Build.setProperty): implement it
1620 (Build.getProperty): same
1621 (Build.startBuild): change build startup to set 'branch',
1622 'revision', and 'slavename' properties at the right time
1624 * buildbot/process/step.py (BuildStep.__init__): change setup to
1625 require 'build' argument in a better way
1626 (LoggingBuildStep): split ShellCommand into two pieces, for better
1627 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
1628 a single RemoteCommand that sends stdout/stderr status text. It
1629 also provides the usual commandComplete / createSummary /
1630 evaluateCommand / getText methods to be overridden...
1631 (ShellCommand): .. whereas ShellCommand is specifically for
1632 running RemoteShellCommands. Other shell-like BuildSteps (like
1633 Source) can inherit from LoggingBuildStep instead of ShellCommand
1634 (WithProperties): marker class to do build-property interpolation
1635 (Source): inherit from LoggingBuildStep instead of ShellCommand
1638 * buildbot/test/test_properties.py: test new functionality
1640 2006-04-21 Brian Warner <warner@lothar.com>
1642 * buildbot/test/test_vc.py: rename testBranch to
1643 testCheckoutBranch to keep the tests in about the right
1646 2006-04-18 Brian Warner <warner@lothar.com>
1648 * docs/buildbot.texinfo (PBListener): improve cross-references
1649 between PBListener and 'buildbot statusgui', thanks to John Pye
1652 2006-04-17 Brian Warner <warner@lothar.com>
1654 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
1655 running under Twisted-1.3.0, otherwise skipped tests are reported
1658 * all: use isinstance() instead of 'type(x) is foo', suggested by
1661 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
1662 oops, fix a brain-fade from the other week, when making the
1663 addStep changes. I changed all the __init__ upcalls to use the
1664 wrong superclass name.
1665 (FullTwistedBuildFactory.__init__): same
1666 (TwistedDebsBuildFactory.__init__): same
1667 (TwistedReactorsBuildFactory.__init__): same
1668 (TwistedBuild.isFileImportant): use .startswith for clarity,
1669 thanks to Neal Norwitz for the suggestions.
1671 * contrib/viewcvspoll.py: script to poll a viewcvs database for
1672 changes, then deliver them over PB to a remote buildmaster.
1674 * contrib/svnpoller.py: added script by John Pye to poll a remote
1675 SVN repository (by running 'svn log') from a cronjob, and run
1676 'buildbot sendchange' to deliver the changes to a remote
1678 * contrib/svn_watcher.py: added script by Niklaus Giger (a
1679 modification of svnpoller.py), same purpose, but this one loops
1680 internally (rather than expecting to run from a cronjob) and works
1682 * contrib/README.txt: same
1684 2006-04-11 Brian Warner <warner@lothar.com>
1686 * all: fix a number of incorrect names and missing imports, thanks
1687 to Anthony Baxter for the patch.
1688 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
1689 remove unused buggy method.
1690 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
1691 comes from shutil, not "shutils"
1692 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
1693 (Arch.checkSlaveVersion): same
1694 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
1696 * buildbot/process/step_twisted2.py: add some missing imports
1697 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
1698 this code used to live in twisted.internet.defer
1700 2006-04-10 Brian Warner <warner@lothar.com>
1702 * buildbot/process/step.py (Mercurial): add Mercurial support
1703 * buildbot/slave/commands.py (Mercurial): same
1704 * buildbot/scripts/tryclient.py (MercurialExtractor): same
1705 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
1706 not yet tested, but 'try' support *is* covered
1707 * docs/buildbot.texinfo (Mercurial): document it
1709 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
1710 some debugging messages (turned off)
1711 * buildbot/test/test_vc.py: improve debug messages
1713 2006-04-07 Brian Warner <warner@lothar.com>
1715 * buildbot/test/test_vc.py (which): define our own which() in case
1716 we can't import twisted.python.procutils, because procutils doesn't
1717 exist in Twisted-1.3
1719 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
1720 of SlaveLocks for performance tests
1722 * docs/examples/twisted_master.cfg: update to match current usage
1724 * buildbot/changes/p4poller.py (P4Source): add new arguments:
1725 password, p4 binary, pollinterval, maximum history to check.
1726 Patch from an anonymous sf.net contributor, SF#1219384.
1727 * buildbot/process/step.py (P4Sync.__init__): add username,
1728 password, and client arguments.
1729 * buildbot/slave/commands.py (P4Sync): same
1731 2006-04-05 Brian Warner <warner@lothar.com>
1733 * buildbot/process/factory.py (BuildFactory.addStep): new method
1734 to add steps to a BuildFactory. Use it instead of f.steps.append,
1735 and you can probably avoid using the s() convenience function.
1736 Patch from Neal Norwitz, sf.net #1412605.
1737 (other): update all factories to use addStep
1738 * buildbot/process/process_twisted.py: update all factories to use
1741 2006-04-03 Brian Warner <warner@lothar.com>
1743 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
1744 work under windows too. Adapted from a patch by Niklaus Giger,
1745 addresses SF#1463399.
1747 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
1748 spawned commands emit parseable results in english and not some
1749 other language. Patch from Niklaus Giger, SF#1463395.
1751 * README (INSTALLATION): discourage users from running unit tests on
1752 a "network drive", patch from Niklaus Giger, SF#1463394.
1754 2006-03-22 Brian Warner <warner@lothar.com>
1756 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
1757 function to turn a repository-relative pathname into a (branch,
1758 branch-relative-filename) tuple. Change this function to handle
1759 the branch naming policy used by your Subversion repository.
1760 Thanks to AllMyData.com for sponsoring this work.
1762 2006-03-16 Brian Warner <warner@lothar.com>
1764 * buildbot/scripts/sample.cfg: add python-mode declaration for
1765 vim. Thanks to John Pye for the patch.
1767 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
1768 command line, mention the importance of running 'crontab' as the
1769 buildmaster/buildslave user. Thanks to John Pye for the catch.
1771 2006-03-13 Brian Warner <warner@lothar.com>
1773 * buildbot/status/words.py (IRC): add an optional password=
1774 argument, which will be sent to Nickserv in an IDENTIFY message at
1775 login, to claim the nickname. freenode requires this before the
1776 bot can sent (or reply to) private messages. Thanks to Clement
1777 Stenac for the patch.
1778 * docs/buildbot.texinfo (IRC Bot): document it
1780 * buildbot/status/builder.py (LogFile.merge): don't write chunks
1781 larger than chunkSize. Fixes SF#1349253.
1782 * buildbot/test/test_status.py (Log.testLargeSummary): test it
1783 (Log.testConsumer): update to match new internal chunking behavior
1785 2006-03-12 Brian Warner <warner@lothar.com>
1787 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
1789 * buildbot/test/test_maildir.py (MaildirTest): rename the
1790 'timeout' method, as it collides with trial's internals
1792 * buildbot/scripts/runner.py: add 'buildbot restart' command
1793 (stop): don't sys.exit() out of here, otherwise restart can't work
1794 * docs/buildbot.texinfo (Shutdown): document it
1796 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
1797 * buildbot/status/html.py (Waterfall.__init__): same
1798 * buildbot/process/builder.py (Builder.startBuild): same
1799 * buildbot/process/base.py (BuildRequest): same
1800 * buildbot/sourcestamp.py (SourceStamp): same
1801 * buildbot/scheduler.py (Nightly): same
1803 * buildbot/__init__.py (version): bump to 0.7.2+ while between
1805 * docs/buildbot.texinfo: same
1807 2006-02-17 Brian Warner <warner@lothar.com>
1809 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
1810 * docs/buildbot.texinfo: set version number to match
1811 * NEWS: update for 0.7.2
1813 2006-02-16 Brian Warner <warner@lothar.com>
1815 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
1817 2006-02-09 Brian Warner <warner@lothar.com>
1819 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1820 add text to explain per-build branch parameters
1821 * NEWS: mention --umask
1823 2006-02-08 Brian Warner <warner@lothar.com>
1825 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
1827 (SlaveOptions.optParameters): add --umask, to make it possible to
1828 make buildslave-generated files (including build products) be
1831 * buildbot/slave/bot.py (BuildSlave.startService): same
1833 2006-01-23 Brian Warner <warner@lothar.com>
1835 * buildbot/status/builder.py: urllib.quote() all URLs that include
1836 Builder names, so that builders can include characters like '/'
1837 and ' ' without completely breaking the resulting HTML. Thanks to
1838 Kevin Turner for the patch.
1839 * buildbot/status/html.py: same
1840 * buildbot/test/test_web.py (GetURL.testBuild): match changes
1842 * NEWS: update in preparation for upcoming release
1844 2006-01-18 Brian Warner <warner@lothar.com>
1846 * docs/examples/twisted_master.cfg: update to match the Twisted
1847 buildbot: remove python2.2, switch to exarkun's buildslaves,
1848 disable the .deb builder until we figure out how to build twisted
1849 .debs from SVN, add some ktrace debugging to the OS-X build
1850 process and remove the qt build, remove threadless builders,
1851 change freebsd builder to use landonf's buildslave.
1853 2006-01-12 Brian Warner <warner@lothar.com>
1855 * buildbot/master.py (Manhole.__init__): let port= be a strports
1856 specification string, but handle a regular int for backwards
1857 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
1858 used in master.cfg to limit connections to just the local host.
1859 (BuildMaster.loadConfig): same for c['slavePortnum']
1860 * buildbot/scheduler.py (Try_Userpass.__init__): same
1861 * buildbot/status/client.py (PBListener.__init__): same
1862 * buildbot/status/html.py (Waterfall.__init__): same, for both
1863 http_port and distrib_port. Include backwards-compatibility checks
1864 so distrib_port can be a filename string and still mean unix:/foo
1865 * docs/buildbot.texinfo (Setting the slaveport): document it
1866 (Debug options): same
1867 (HTML Waterfall): same
1870 * buildbot/test/test_config.py (ConfigTest): test it
1872 * buildbot/master.py (BuildMaster.loadConfig): wait for the
1873 slaveport's disownServiceParent deferred to fire before opening
1874 the new one. Fixes an annoying bug in the unit tests.
1876 2006-01-03 Brian Warner <warner@lothar.com>
1878 * buildbot/master.py (BuildMaster): remove the .schedulers
1879 attribute, replacing it with an allSchedulers() method that looks
1880 for all IService children that implement IScheduler. Having only
1881 one parent/child relationship means fewer opportunities for bugs.
1882 (BuildMaster.allSchedulers): new method
1883 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
1884 also fix ugly bug that caused any config-file reload to
1885 half-forget about the earlier Schedulers, causing an exception
1886 when a Change arrived and was handed to a half-connected
1887 Scheduler. The exception was in scheduler.py line 54ish:
1888 self.parent.submitBuildSet(bs)
1889 exceptions.AttributeError: 'NoneType' object has no attribute
1891 (BuildMaster.addChange): update to use allSchedulers()
1893 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
1894 to work properly with twisted-1.3.0, where you must explicitly
1895 include the __implements__ from parent classes
1896 (BaseScheduler.__repr__): make it easier to distinguish distinct
1898 (BaseUpstreamScheduler.__implements__): same
1900 * buildbot/status/builder.py (Status.getSchedulers): update to
1902 * buildbot/test/test_run.py (Run.testMaster): same
1903 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
1904 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
1905 make sure Scheduler instances are left alone when an identical
1906 config file is reloaded
1907 (ConfigElements.testSchedulers): make sure Schedulers are properly
1910 * Makefile (TRIALARGS): my local default Twisted version is now
1911 2.1.0, update the trial arguments accordingly
1913 2005-12-22 Brian Warner <warner@lothar.com>
1915 * docs/examples/twisted_master.cfg: merge changes from pyr: add
1918 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
1919 addChange in the parent class, although I suspect this should be
1920 fixed better in the future.
1922 2005-11-26 Brian Warner <warner@lothar.com>
1924 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
1925 explode when branch==None, thanks to Kevin Turner for the catch
1926 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
1929 * buildbot/__init__.py (version): bump to 0.7.1+ while between
1931 * docs/buildbot.texinfo: same
1933 2005-11-26 Brian Warner <warner@lothar.com>
1935 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
1936 * docs/buildbot.texinfo: set version number to match
1938 2005-11-26 Brian Warner <warner@lothar.com>
1940 * NEWS: update for 0.7.1
1942 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1943 sure that unsubscribe works even if we never sent an ETA update.
1944 Also, don't explode on duplicate unsubscribe.
1945 (BuildStepStatus.addLog): make the convenience "return self"-added
1946 watcher automatically unsubscribe when the Step finishes.
1947 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1948 (BuildStatus.stepStarted): same auto-unsubscribe
1949 (BuilderStatus.buildStarted): same auto-unsubscribe
1951 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1953 (IStatusReceiver.stepStarted): same
1954 (IStatusReceiver.logStarted): same
1956 * buildbot/test/test_run.py (Status): move the Status test..
1957 * buildbot/test/test_status.py (Subscription): .. to here
1959 2005-11-25 Brian Warner <warner@lothar.com>
1961 * NEWS: more updates
1963 * buildbot/locks.py: fix the problem in which loading a master.cfg
1964 file that changes some Builders (but not all of them) can result
1965 in having multiple copies of the same Lock. Now, the real Locks
1966 are kept in a table inside the BotMaster, and the Builders/Steps
1967 use "LockIDs", which are still instances of MasterLock and
1968 SlaveLock. The real Locks are instances of the new RealMasterLock
1969 and RealSlaveLock classes.
1970 * buildbot/master.py (BotMaster.getLockByID): new method to
1971 convert LockIDs into real Locks.
1972 * buildbot/process/base.py (Build.startBuild): convert LockIDs
1973 into real Locks before building
1974 * buildbot/process/step.py (BuildStep.startStep): same
1975 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1976 exercises the problem
1979 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1980 what Schedulers are available
1982 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1983 work by Dobes Vandermeer and hacked mercilessly by me. This offers
1984 'cron'-style build scheduling at certain times of day, week,
1986 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1988 * buildbot/scheduler.py (Scheduler): change fileIsImportant
1989 handling: treat self.fileIsImportant more as an attribute that
1990 contains a callable than as a method. If the attribute is None,
1991 don't call it and assume all filenames are important. It is still
1992 possible to provide a fileIsImportant method in a subclass,
1994 (AnyBranchScheduler): handle fileIsImportant=None, previously it
1996 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1997 test using AnyBranchScheduler with fileIsImportant=None
1999 2005-11-24 Brian Warner <warner@lothar.com>
2001 * buildbot/test/test_config.py (StartService): don't claim a fixed
2002 port number, instead set slavePort=0 on the first pass, figure out
2003 what port was allocated, then switch to a config file that uses
2006 * buildbot/master.py (BuildMaster.loadConfig): close the old
2007 slaveport before opening the new one, because unit tests might
2008 replace slavePort=0 with the same allocated portnumber, and if we
2009 don't wait for the old port to close first, we get a "port already
2010 in use" error. There is a tiny race condition here, but the only
2011 threat is from other programs that bind (statically) to the same
2012 port number we happened to be allocated, and only if those
2013 programs use SO_REUSEADDR, and only if they get control in between
2016 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
2018 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
2019 deleted ChangeSources before adding any new ones
2020 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
2021 compare_attrs, to make sure that a config-file reload does not
2022 unnecessarily replace an unmodified ChangeSource instance
2023 * buildbot/test/test_config.py (ConfigTest.testSources): update
2025 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
2026 mean "don't build anything", and add a warning if it gets used
2027 because it isn't actually useful.
2029 * contrib/svn_buildbot.py: update example usage to match the port
2030 number that gets used by the PBChangeSource
2031 * buildbot/scripts/sample.cfg: add example of PBChangeSource
2033 2005-11-22 Brian Warner <warner@lothar.com>
2035 * NEWS: start collecting items for next release
2037 * buildbot/process/step.py (SVN.computeSourceRevision): assume
2038 revisions are strings
2039 (P4Sync.computeSourceRevision): same
2041 * buildbot/status/html.py (StatusResourceBuild.body): add a link
2042 to the Buildbot's overall status page
2043 (StatusResourceBuilder.body): same
2045 2005-11-15 Brian Warner <warner@lothar.com>
2047 * buildbot/master.py (BuildMaster.loadConfig): serialize the
2048 config-file loading, specifically to make sure old StatusTargets
2049 are finished shutting down before new ones start up (thus
2050 resolving a bug in which changing the Waterfall object would fail
2051 because both new and old instances were claiming the same
2052 listening port). Also load new Schedulers after all the new
2053 Builders are set up, in case they fire off a new build right away.
2054 * buildbot/test/test_config.py (StartService): test it
2056 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
2057 the branch name to the mail body
2059 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
2060 Without it, a config-file reload fails to update an existing
2062 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
2063 username/passwd to compare_attrs, for the same reason
2064 * buildbot/status/html.py (Waterfall): add favicon to
2065 compare_attrs, same reason
2067 2005-11-05 Brian Warner <warner@lothar.com>
2069 * buildbot/scripts/tryclient.py (createJobfile): stringify the
2070 baserev before stuffing it in the jobfile. This resolves problems
2071 under SVN (and probably Arch) where revisions are expressed as
2072 numbers. I'm inclined to use string-based revisions everywhere in
2073 the future, but this fix should be safe for now. Thanks to Steven
2074 Walter for the patch.
2076 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
2077 binary mode when opening pickle files, to make windows work
2078 better. Thanks to Dobes Vandermeer for the catch.
2079 * buildbot/status/builder.py (BuildStatus.saveYourself): same
2080 (BuilderStatus.getBuildByNumber): same
2081 (Status.builderAdded): same
2082 * buildbot/master.py (BuildMaster.loadChanges): same
2084 * buildbot/util.py (Swappable): delete unused leftover code
2086 * buildbot/process/step.py (SVN): when building on a non-default
2087 branch, add the word "[branch]" to the VC step's description, so
2088 it is obvious that we're not building the usual stuff. Likewise,
2089 when we are building a specific revision, add the text "rNNN" to
2090 indicate what that revision number is. Thanks to Brad Hards and
2091 Nathaniel Smith for the suggestion.
2092 (Darcs.startVC): same
2093 (Arch.startVC): same
2094 (Bazaar.startVC): same
2096 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
2097 typo, caught by Mark Dillavou, closes SF#1216636.
2099 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
2100 about a test to add some day
2102 * docs/examples/twisted_master.cfg: update: bot1 can now handle
2103 the 'full-2.3' build, and the 'reactors' build is now run under
2104 python-2.4 because the buildslave no longer has gtk/etc bindings
2105 for earlier versions.
2107 2005-11-03 Brian Warner <warner@lothar.com>
2109 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
2110 method, takes an IBuildStatus and rebuilds it. It might make more
2111 sense to add this to IBuildControl instead, but that instance goes
2112 away completely once the build has finished, and resubmitting
2113 builds can take place weeks later.
2114 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
2115 * buildbot/status/html.py (StatusResourceBuild): also stash an
2116 IBuilderControl so we can use resubmitBuild.
2117 (StatusResourceBuild.body): render "resubmit" button if we can.
2118 Also add hrefs for each BuildStep
2119 (StatusResourceBuild.rebuild): add action for "resubmit" button
2120 (StatusResourceBuilder.getChild): give it an IBuilderControl
2122 * buildbot/status/builder.py (Status.getURLForThing): change the
2123 URL for BuildSteps to have a "step-" prefix, so the magic URLs
2124 that live as targets of buttons like "stop" and "rebuild" can't
2126 * buildbot/status/builder.py (Status.getURLForThing): same
2127 * buildbot/status/html.py (StatusResourceBuild.getChild): same
2128 (StepBox.getBox): same
2129 * buildbot/test/test_web.py (GetURL): same
2132 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
2133 exclusivity checks after Source.__init__ upcall, so misspelled
2134 arguments will be reported more usefully
2135 (Darcs.__init__): same
2137 2005-10-29 Brian Warner <warner@lothar.com>
2139 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
2140 builder. Move the Try scheduler off to a separate port.
2142 2005-10-27 Brian Warner <warner@lothar.com>
2144 * buildbot/clients/gtkPanes.py
2145 (TwoRowClient.remote_builderRemoved): disappearing Builders used
2146 to cause the app to crash, now they don't.
2148 * buildbot/clients/debug.py: display the buildmaster's location
2149 in the window's title bar
2151 2005-10-26 Brian Warner <warner@lothar.com>
2153 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
2154 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
2155 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
2157 * buildbot/status/html.py (td): put a single non-breaking space
2158 inside otherwise empty <td> elements, as a workaround for buggy
2159 browsers which would optimize them away (along with any associated
2160 styles, like the kind that create the waterfall grid borders).
2161 Patch from Frerich Raabe.
2163 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
2164 argv-list as an argument, defaulting to ["-to"], which is
2165 appropriate for the Trial that comes with Twisted-2.1.0 and
2166 earlier. The Trial in current Twisted SVN wants
2167 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
2168 defaults to an empty list.
2169 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
2170 match it, now that trialMode= is a list instead of a single string
2172 * buildbot/__init__.py (version): bump to 0.7.0+ while between
2174 * docs/buildbot.texinfo: same
2176 2005-10-24 Brian Warner <warner@lothar.com>
2178 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
2179 * docs/buildbot.texinfo: set version number to match
2181 2005-10-24 Brian Warner <warner@lothar.com>
2183 * README: update for 0.7.0
2185 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
2187 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
2188 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
2189 send the branch= argument unless the user really provided one, to
2190 retain compatibility with older buildmasters that don't accept
2192 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
2195 * docs/buildbot.texinfo: update lots of stuff
2197 * buildbot/scripts/runner.py (sendchange): add a --branch argument
2198 to the 'buildbot sendchange' command
2199 * buildbot/clients/sendchange.py (Sender.send): same
2200 * buildbot/changes/pb.py (ChangePerspective): same
2201 * buildbot/test/test_changes.py (Sender.testSender): test it
2203 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
2204 'default_branch' argument names to 'baseURL' and 'defaultBranch',
2205 for consistency with other BuildStep arguments that use camelCase.
2206 Well, at least more of them use camelCase (like flunkOnWarnings)
2207 than don't.. I wish I'd picked one style and stuck with it
2208 earlier. Annoying, but it's best done before the release, since
2209 these arguments didn't exist at all in 0.6.6 .
2211 * buildbot/test/test_vc.py (SVN.testCheckout): same
2212 (Darcs.testPatch): same
2213 * docs/buildbot.texinfo (SVN): document the change
2214 (Darcs): same, add some build-on-branch docs
2215 * docs/examples/twisted_master.cfg: match change
2217 * buildbot/process/step.py (BuildStep): rename
2218 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
2219 how it is normally used.
2220 * buildbot/test/test_steps.py (Version.checkCompare): same
2222 * buildbot/process/step.py (CVS.startVC): refuse to build
2223 update/copy -style builds on a non-default branch with an old
2224 buildslave (<=0.6.6) that doesn't know how to do it properly. The
2225 concern is that it will do a VC 'update' in an existing tree when
2226 it is supposed to be switching branches (and therefore clobbering
2227 the tree to do a full checkout), thus building the wrong source.
2228 This used to be a warning, but I think the confusion it is likely
2229 to cause warrants making it an error.
2230 (SVN.startVC): same, also make mode=export on old slaves an error
2231 (Darcs.startVC): same
2232 (Git.startVC): improve error message for non-Git-enabled slaves
2233 (Arch.checkSlaveVersion): same. continue to emit a warning when a
2234 specific revision is built on a slave that doesn't pay attention
2235 to args['revision'], because for slowly-changing trees it will
2236 probably do the right thing, and because we have no way to tell
2237 whether we're asking it to build the most recent version or not.
2238 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
2240 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
2241 that 'master' is in host:portnum format, to catch errors sooner
2243 2005-10-23 Brian Warner <warner@lothar.com>
2245 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
2246 when creating the list of warning messages, include the line
2247 immediately after each WARNING: line, since that's usually where
2248 the file and line number wind up.
2250 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
2255 2005-10-22 Brian Warner <warner@lothar.com>
2257 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
2258 patch from Brad Hards
2259 * buildbot/status/classic.css: same
2260 * buildbot/test/test_web.py (Waterfall): match changes
2262 * buildbot/test/test_steps.py (BuildStep.setUp): set
2263 nextBuildNumber so the test passes
2264 * buildbot/test/test_status.py (MyBuilder): same
2266 * buildbot/status/html.py (StatusResourceBuild.body): revision
2267 might be numeric, so stringify it before html-escapifying it
2268 (CurrentBox.getBox): add a "waiting" state, and show a countdown
2269 timer for the upcoming build
2270 * buildbot/status/classic.css: add background-color attributes for
2271 offline/waiting/building classes
2273 * buildbot/status/builder.py (BuildStatus): derive from
2274 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
2275 the default (i.e. unknown) .slavename to "???" instead of None,
2276 since even unknown slavenames need to be printed eventually.
2277 (BuilderStatus): also derive from styles.Versioned . More
2278 importantly, determine .nextBuildNumber at creation/unpickling
2279 time by scanning the directory of saved BuildStatus instances and
2280 choosing one larger than the highest-numbered one found. This
2281 should fix the problem where random errors during upgrades cause
2282 the buildbot to forget about earlier builds. .nextBuildNumber is
2283 no longer stored in the pickle.
2284 (Status.builderAdded): if we can't unpickle the BuilderStatus,
2285 at least log the error. Also call Builder.determineNextBuildNumber
2286 once the basedir is set.
2288 * buildbot/master.py (BuildMaster.loadChanges): do
2289 styles.doUpgrade afterwards, in case I decide to make Changes
2290 derived from styles.Versioned some day and forget to make this
2294 * buildbot/test/test_runner.py (Options.testForceOptions): skip
2295 when running under older pythons (<2.3) in which the shlex module
2296 doesn't have a 'split' function.
2298 * buildbot/process/step.py (ShellCommand.start): make
2299 errorMessages= be a list of strings to stuff in the log before the
2300 command actually starts. This makes it easier to flag multiple
2301 warning messages, e.g. when the Source steps have to deal with an
2303 (CVS.startVC): handle slaves that don't handle multiple branches
2304 by switching into 'clobber' mode
2305 (SVN.startVC): same. Also reject branches without base_url
2306 (Darcs.startVC): same. Also reject revision= in older slaves
2307 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
2308 (Bazaar.startVC): same, and test for baz separately than for arch
2310 * buildbot/slave/commands.py (cvs_ver): document new features
2312 * buildbot/process/step.py (BuildStep.slaveVersion): document it
2313 (BuildStep.slaveVersionNewEnough): more useful utility method
2314 * buildbot/test/test_steps.py (Version): start testing it
2316 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
2317 the 'force' command requires python2.3, for the shlex.split method
2319 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
2320 since we don't use it anymore. The Twisted buildbot uses a
2323 2005-10-21 Brian Warner <warner@lothar.com>
2325 * buildbot/process/process_twisted.py: rework all BuildFactory
2326 classes to take a 'source' step as an argument, instead of
2327 building up the SVN instance in the factory.
2328 * docs/examples/twisted_master.cfg: enable build-on-branch by
2329 providing a base_url and default_branch
2331 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
2332 control over --branch and --revision, not that they are always
2334 * buildbot/status/html.py (StatusResourceBuilder.force): same
2335 (StatusResourceBuild.body): display SourceStamp components
2337 * buildbot/scripts/runner.py (ForceOptions): option parser for the
2338 IRC 'force' command, so it can be shared with an eventual
2339 command-line-tool 'buildbot force' mode.
2340 * buildbot/test/test_runner.py (Options.testForceOptions): test it
2342 2005-10-20 Brian Warner <warner@lothar.com>
2344 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
2346 * docs/examples/twisted_master.cfg: update to use Schedulers
2348 * buildbot/scripts/sample.cfg: update with Schedulers
2350 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
2351 method specifically for use by HTML "force build" button and the
2352 IRC "force" command. Raises an immediate error if there are no
2354 (IBuilderControl.requestBuild): make this just submit a build, not
2355 try to check for existing slaves or set up any when-finished
2356 Deferreds or anything.
2357 * buildbot/process/builder.py (BuilderControl): same
2358 * buildbot/status/html.py (StatusResourceBuilder.force): same
2359 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
2360 * buildbot/test/test_slaves.py: same
2361 * buildbot/test/test_web.py: same
2363 2005-10-19 Brian Warner <warner@lothar.com>
2365 * docs/examples/twisted_master.cfg: re-sync with reality: bring
2366 back python2.2 tests, turn off OS-X threadedselect-reactor tests
2368 2005-10-18 Brian Warner <warner@lothar.com>
2370 * buildbot/status/html.py: provide 'status' argument to most
2371 StatusResourceFOO objects
2372 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
2373 and Logfiles" section to make the Build page into a more-or-less
2374 comprehensive source of status information about the build
2376 * buildbot/status/mail.py (MailNotifier): include the Build's URL
2377 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
2379 2005-10-17 Brian Warner <warner@lothar.com>
2381 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
2382 arguments to accomodate Twisted >=2.1.0 . I will have to figure
2383 out what to do about other projects: the correct options for
2384 recent Twisteds will not work for older ones.
2386 2005-10-15 Brian Warner <warner@lothar.com>
2388 * buildbot/status/builder.py (Status.getURLForThing): add method
2389 to provide a URL for arbitrary IStatusFoo objects. The idea is to
2390 use this in email/IRC status clients to make them more useful, by
2391 providing the end user with hints on where to learn more about the
2392 object being reported on.
2393 * buildbot/test/test_web.py (GetURL): tests for it
2395 2005-10-14 Brian Warner <warner@lothar.com>
2397 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
2398 fix bug resulting from deferredResult changes
2400 2005-10-13 Brian Warner <warner@lothar.com>
2402 * buildbot/test/test_changes.py: remove use of deferredResult
2403 * buildbot/test/test_config.py: same
2404 * buildbot/test/test_control.py: same
2405 * buildbot/test/test_status.py: same
2406 * buildbot/test/test_vc.py: this is the only remaining use, since
2407 it gets used at module level. This needs to be replaced by some
2408 sort of class-level run-once routine.
2410 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
2412 * lots: implement multiple slaves per Builder, which means multiple
2413 current builds per Builder. Some highlights:
2414 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
2415 of (state,currentBuilds) instead of (state,currentBuild)
2416 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
2417 (IBuildStatus.getSlavename): new method, so you can tell which
2418 slave got used. This only gets set when the build completes.
2419 (IBuildRequestStatus.getBuilds): new method
2421 * buildbot/process/builder.py (SlaveBuilder): add a .state
2422 attribute to track things like ATTACHING and IDLE and BUILDING,
2424 (Builder): .. the .slaves attribute here, which has been turned
2425 into a simple list of available slaves. Added a separate
2426 attaching_slaves list to track ones that are not yet ready for
2428 (Builder.fireTestEvent): put off the test-event callback for a
2429 reactor turn, to make tests a bit more consistent.
2430 (Ping): cleaned up the slaveping a bit, now it disconnects if the
2431 ping fails due to an exception. This needs work, I'm worried that
2432 a code error could lead to a constantly re-connecting slave.
2433 Especially since I'm trying to move to a distinct remote_ping
2434 method, separate from the remote_print that we currently use.
2435 (BuilderControl.requestBuild): return a convenience Deferred that
2436 provides an IBuildStatus when the build finishes.
2437 (BuilderControl.ping): ping all connected slaves, only return True
2438 if they all respond.
2440 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
2441 reconnect when we shut down.
2443 * buildbot/status/builder.py: implement new methods, convert
2444 one-build-at-a-time methods to handle multiple builds
2445 * buildbot/status/*.py: do the same in all default status targets
2446 * buildbot/status/html.py: report the build's slavename in the
2447 per-Build page, report all buildslaves on the per-Builder page
2449 * buildbot/test/test_run.py: update/create tests
2450 * buildbot/test/test_slaves.py: same
2451 * buildbot/test/test_scheduler.py: remove stale test
2453 * docs/buildbot.texinfo: document the new builder-specification
2454 'slavenames' parameter
2456 2005-10-12 Brian Warner <warner@lothar.com>
2458 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
2459 report failure correctly, causing Dependent builds to run when
2460 they shouldn't have.
2461 * buildbot/status/builder.py (BuildSetStatus): same
2462 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
2463 (Set.testSuccess): test the both-pass case too
2464 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2465 fix this test: it was ending too early, masking the failure before
2466 (Logger): specialized StatusReceiver to make sure the dependent
2467 builds aren't even started, much less completed.
2469 2005-10-07 Brian Warner <warner@lothar.com>
2471 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
2472 bot.SlaveBuilder being disowned in the middle of a build
2474 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
2475 this inherit from StatusReceiver. Also upcall in __init__. This
2476 fixes the embarrasing crash when the new buildSetSubmitted method
2477 is invoked and Waterfall/etc don't implement their own.
2478 * buildbot/test/test_run.py: add a TODO note about a test to catch
2479 just this sort of thing.
2481 * buildbot/process/builder.py (Builder.attached): remove the
2482 already-attached warning, this situation is normal. Add some
2483 comments explaining it.
2485 2005-10-02 Brian Warner <warner@lothar.com>
2487 * buildbot/changes/maildir.py (Maildir.start): Tolerate
2488 OverflowError when setting up dnotify, because some 64-bit systems
2489 have problems with signed-vs-unsigned constants and trip up on the
2490 DN_MULTISHOT flag. Patch from Brad Hards.
2492 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
2494 * buildbot/process/step.py (BuildStep, ShellCommand): Add
2495 progressMetrics, description, descriptionDone to the 'parms' list,
2496 and make use the 'parms' list from the implementation class
2497 instead of only BuildStep to initialize the parameters. This
2498 allows buildbot.process.factory.s() to initialize all the parms,
2499 not just those defined in directly by BuildStep.
2501 2005-09-03 Brian Warner <warner@lothar.com>
2503 * NEWS: start adding items for the next release
2505 * docs/examples/twisted_master.cfg: (sync with reality) turn off
2506 python2.2 tests, change 'Quick' builder to only use python2.3
2508 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
2510 * buildbot/status/html.py (StatusResourceBuilder.body): only show
2511 the "Ping Builder" button if the build control is available; the
2512 user sees an exception otherwise
2514 * docs/buildbot.texinfo (PBChangeSource): fix a typo
2516 2005-09-01 Brian Warner <warner@lothar.com>
2518 * buildbot/interfaces.py (IBuilderStatus.getState): update
2519 signature, point out that 'build' can be None
2520 (IBuildStatus.getETA): point out ETA can be none
2522 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
2524 * buildbot/status/words.py (IrcStatusBot.emit_status): same
2526 2005-08-31 Brian Warner <warner@lothar.com>
2528 * buildbot/status/base.py (StatusReceiver.builderChangedState):
2529 update to match correct signature: removed 'eta' argument
2530 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
2532 2005-08-30 Brian Warner <warner@lothar.com>
2534 * buildbot/status/builder.py (LogFile): remove the assertion that
2535 blows up when you try to overwrite an existing logfile, instead
2536 just emit a warning. This case gets hit when the buildmaster is
2537 killed and doesn't get a chance to write out the serialized
2538 BuilderStatus object, so the .nextBuildNumber attribute gets out
2541 * buildbot/scripts/runner.py (sendchange): add --revision_file to
2542 the 'buildbot sendchange' arguments, for the Darcs context file
2543 * docs/buildbot.texinfo (sendchange): document it
2545 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
2546 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
2547 (IStatus.getSchedulers): new method
2548 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
2549 (Status.getSchedulers): implement
2550 * buildbot/process/builder.py (Builder): maintain
2551 BuilderStatus.pendingBuilds
2552 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
2553 (TryBase.addChange): Try schedulers should ignore Changes
2555 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
2556 for 'try' on CVS/SVN
2557 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
2559 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
2560 report status properly.
2561 (Try.createJob): implement unique buildset IDs
2563 * buildbot/status/client.py (StatusClientPerspective): add a
2564 perspective_getBuildSets method for the benefit of jobdir-style
2566 * docs/buildbot.texinfo (try): more docs
2567 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
2570 2005-08-18 Brian Warner <warner@lothar.com>
2572 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
2573 actually work. It's functional but still kind of clunky. Also, it
2574 only works with the pb-style.. needs to be made to work with the
2577 * buildbot/status/client.py (RemoteBuildSet): new class
2578 (RemoteBuildRequest): same
2579 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
2580 object, not the internal BuildStatus object.
2581 (RemoteBuild.remote_subscribe): new method to subscribe to builds
2582 outside of the usual buildStarted() return value.
2583 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
2585 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
2586 (Try_Userpass_Perspective.perspective_try): return a remotely
2587 usable BuildSetStatus object
2589 * buildbot/interfaces.py (IBuildStatus): remove obsolete
2590 isStarted()/waitUntilStarted()
2592 2005-08-16 Brian Warner <warner@lothar.com>
2594 * buildbot/status/builder.py: implement IBuildSetStatus and
2595 IBuildRequestStatus, wire them into place.
2596 * buildbot/buildset.py: same. Add ID, move wait-until-finished
2597 methods into the BuildSetStatus object.
2598 * buildbot/interfaces.py: same
2599 (IStatus.getBuildSets): new method to get pending BuildSets
2600 (IStatusReceiver.buildsetSubmitted): new method which hears about
2602 * buildbot/master.py (BuildMaster.submitBuildSet): same
2603 * buildbot/process/base.py (BuildRequest): same, replace
2604 waitUntilStarted with subscribe/unsubscribe
2605 * buildbot/process/builder.py (BuilderControl.forceBuild): use
2606 subscribe instead of waitUntilStarted
2607 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
2609 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
2611 * buildbot/test/test_buildreq.py: update for new code
2612 * buildbot/test/test_control.py (Force.testRequest): same
2615 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
2616 for Darcs to not use the tempfile module, so it works under
2617 python-2.2 too. We really didn't need the full cleverness of that
2618 module, since the slave has exclusive control of its own builddir.
2620 2005-08-15 Brian Warner <warner@lothar.com>
2622 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
2623 for CVS trees. It doesn't work for non-trunk branches,
2625 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
2628 * Makefile: make it easier to test against python2.2
2630 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
2631 tearDown2, so things like Arch can unregister archives as they're
2632 shutting down. The previous subclass-override-tearDown technique
2633 resulted in a nested maybeWait() and test failures under
2636 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
2637 where we can (Arch), add a branch= argument to set the branch used
2639 (BazExtractor): extract the branch too
2640 (TlaExtractor): same
2641 * buildbot/scripts/runner.py (TryOptions): add --branch
2642 * docs/buildbot.texinfo (try): document --branch/try_branch
2644 * buildbot/slave/commands.py (Darcs): implement get-revision for
2645 Darcs, so that 'try' will work. This requires the tempfile module
2648 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
2649 of revisions, branches, and 'try' in the process.
2651 2005-08-11 Brian Warner <warner@lothar.com>
2653 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
2654 this, it got broken at some point in the last few releases
2655 * buildbot/status/words.py (IrcBuildRequest): reply was broken
2656 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
2657 specifically the removal of ETA information from the tuple
2659 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
2662 * docs/buildbot.texinfo (try): document both --builder and
2663 'try_builders' in .buildbot/options
2664 * buildbot/scripts/runner.py (TryOptions): add --builder,
2665 accumulate the values into opts['builders']
2666 * buildbot/scripts/tryclient.py (Try.__init__): set builders
2667 * buildbot/test/test_runner.py (Try): add some quick tests to make
2668 sure 'buildbot try --options' and .buildbot/options get parsed
2669 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2670 use --builder control
2672 * docs/buildbot.texinfo (try): add --port argument to PB style
2674 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
2675 actual SourceStamp. Still need to extract a branch name, somehow.
2676 (Try): finish implementing the try client side, still need a UI
2677 for specifying which builders to use
2678 (Try.getopt): factor our options/config-file reading
2679 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2681 * buildbot/test/test_vc.py: match SourceStampExtractor change
2683 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
2684 causes the twisted log to be sent to stderr
2686 * buildbot/scheduler.py (Try_Userpass): implement the PB style
2688 2005-08-10 Brian Warner <warner@lothar.com>
2690 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
2691 style is 90% done, still missing status reporting or waiting for
2692 the buildsets to finish, and it is completely untested.
2694 * buildbot/trybuild.py: delete file, move contents to ..
2695 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
2696 * buildbot/test/test_vc.py: match the move
2698 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
2699 of the TryScheduler, no buildsetID or status-tracking support yet
2700 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
2702 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
2703 possible to set the basedir after __init__ time, so it is easier
2704 to use as a Service-child of the BuildMaster instance
2706 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
2707 that delivers messages to its Service parent instead of requiring
2708 a subclass to be useful. This turns out to be much easier to build
2711 * buildbot/scripts/tryclient.py (createJob): utility code to
2712 create jobfiles, will eventually be used by 'buildbot try'
2714 2005-08-08 Brian Warner <warner@lothar.com>
2716 * docs/buildbot.texinfo (try): add docs on the
2717 as-yet-unimplemented Try scheduler
2719 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
2720 * buildbot/test/test_scheduler.py: .. here
2721 (Scheduling.testTryJobdir): add placeholder test for 'try'
2723 * buildbot/test/test_status.py (Log.testMerge3): update to match new
2724 addEntry merging (>=chunkSize) behavior
2725 (Log.testConsumer): update to handle new callLater(0) behavior
2727 * buildbot/test/test_web.py: rearrange tests a bit, add test for
2728 both the MAX_LENGTH bugfix and the resumeProducing hang.
2730 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
2731 put off the actual resumeProducing for a moment with
2732 reactor.callLater(0). This works around a twisted-1.3.0 bug which
2733 causes large logfiles to hang midway through.
2735 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
2736 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
2737 and to improve memory usage when streaming the file out to a web
2739 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
2740 make this work cleanly
2742 2005-08-03 Brian Warner <warner@lothar.com>
2744 * buildbot/trybuild.py: new file for 'try' utilities
2745 (getSourceStamp): run in a tree, find out the baserev+patch
2746 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
2747 implemented for SVN and Darcs, still working on Arch. I don't know
2748 how to make CVS work yet.
2750 * docs/buildbot.texinfo: document the 'buildbot' command-line
2751 tool, including the not-yet-implemented 'try' feature, and the
2752 in-flux .buildbot/ options directory.
2754 2005-07-20 Brian Warner <warner@lothar.com>
2756 * buildbot/locks.py: added temporary id() numbers to Lock
2757 descriptions, to track down a not-really-sharing-the-Lock bug
2759 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
2761 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
2762 needed for python2.2 compatibility
2763 * buildbot/test/test_vc.py: python2.2 compatibility: generators
2764 are from the __future__
2766 2005-07-19 Brian Warner <warner@lothar.com>
2768 * buildbot/master.py (BuildMaster.loadConfig): give a better error
2769 message when schedulers use unknown builders
2771 * buildbot/process/builder.py (Builder.compareToSetup): make sure
2772 SlaveLock('name') and MasterLock('name') are distinct
2774 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
2775 c['schedulers'] in such a way that we can actually accept
2777 * buildbot/test/test_config.py: check it
2779 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
2780 utility method to *all* the Schedulers
2781 (Periodic.listBuilderNames): same
2783 * docs/buildbot.texinfo (Interlocks): update chapter to match
2786 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
2787 to make sure that c['sources'], c['schedulers'], and c['status']
2788 are all lists of the appropriate objects, and that the Schedulers
2789 all point to real Builders
2790 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
2791 'listBuilderNames' utility method to support this
2792 * buildbot/scheduler.py: implement the utility method
2793 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
2795 * docs/buildbot.texinfo: add some @cindex entries
2797 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
2798 if it wasn't already set: most tla commands will fail unless one
2800 (Arch.createRepository): and disable bazaar's revision cache, since
2801 they cause test failures (the multiple repositories we create all
2802 interfere with each other through the cache)
2804 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
2805 bring it properly up to date with twisted-2.0 test guidelines
2807 * buildbot/master.py (BuildMaster): remove references to old
2808 'interlock' module, this caused a bunch of post-merge test
2810 * buildbot/test/test_config.py: same
2811 * buildbot/process/base.py (Build): same
2813 * buildbot/test/test_slaves.py: stubs for new test case
2815 * buildbot/scheduler.py: add test-case-name tag
2816 * buildbot/test/test_buildreq.py: same
2818 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
2819 unnecessary init code
2820 (Bot.remote_setBuilderList): match it
2822 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
2824 * buildbot/changes/mail.py (parseSyncmail): update comment
2826 * buildbot/test/test_slavecommand.py: disable Shell tests on
2827 platforms that don't suport IReactorProcess
2829 * buildbot/status/builder.py (LogFile): remove the 't' mode from
2830 all places where we open logfiles. It causes OS-X to open the file
2831 in some weird mode that that prevents us from mixing reads and
2832 writes to the same filehandle, which we depend upon to implement
2833 _generateChunks properly. This change doesn't appear to break
2834 win32, on which "b" and "t" are treated differently but a missing
2835 flag seems to be interpreted as "t".
2837 2005-07-18 Brian Warner <warner@lothar.com>
2839 * buildbot/slave/commands.py (ShellCommand): overhaul
2840 error-handling code, to try and make timeout/interrupt work
2841 properly, and make win32 happier
2842 * buildbot/test/test_slavecommand.py: clean up, stop using
2843 reactor.iterate, add tests for timeout and interrupt
2844 * buildbot/test/sleep.py: utility for a new timeout test
2846 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
2847 code from the local-usebranches branch
2849 2005-07-17 Brian Warner <warner@lothar.com>
2851 * buildbot/process/process_twisted.py
2852 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
2853 minutes, to match the other twisted BuildFactories, and don't
2854 excuse failures in c/qt/win32 reactors any more.
2856 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
2857 'freebsd' builders, since the buildslaves have been unavailable
2860 2005-07-13 Brian Warner <warner@lothar.com>
2862 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
2863 build-on-branch feature
2865 * buildbot/process/step.py (Darcs.__init__): add base_url and
2866 default_branch arguments, just like SVN
2867 (Arch.__init__): note that the version= argument is really the
2870 * buildbot/slave/commands.py (SourceBase): keep track of the
2871 repository+branch that was used for the last checkout in
2872 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
2873 match, we clobber the directory and perform a fresh checkout
2874 rather than trying to do an in-place update. This should protect
2875 us against trying to get to branch B by doing an update in a tree
2876 obtained from branch A.
2877 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
2878 (SVN.setup): same, just the svnurl
2879 (Darcs.setup): same, just the repourl
2880 (Arch.setup): same, arch coordinates (url), version, and
2881 buildconfig. Also pull the buildconfig from the args dictionary,
2882 which we weren't doing before, so the build-config was effectively
2884 (Arch.sourcedirIsUpdateable): don't try to update when we're
2885 moving to a specific revision: arch can't go backwards, so it is
2886 safer to just clobber the tree and checkout a new one at the
2888 (Bazaar.setup): same sourcedata as Arch
2890 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2891 use maybeWait, to work with twisted-1.3.0 and twcompat
2892 (Dependencies.testRun_Pass): same
2894 * buildbot/test/test_vc.py: rearrange, cleanup
2896 * buildbot/twcompat.py: add defer.waitForDeferred and
2897 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
2898 can work under twisted-1.3.0 .
2900 * buildbot/test/test_vc.py: rewrite. The sample repositories are
2901 now created at setUp time. This increases the runtime of the test
2902 suite considerably (from 91 seconds to 151), but it removes the
2903 need for an offline tarball, which should solve a problem I've
2904 seen where the test host has a different version of svn than the
2905 tarball build host. The new code also validates that mode=update
2906 really picks up recent commits. This approach will also make it
2907 easier to test out branches, because the code which creates the VC
2908 branches is next to the code which uses them. It will also make it
2909 possible to test some change-notification hooks, by actually
2910 performing a VC commit and watching to see the ChangeSource get
2913 2005-07-12 Brian Warner <warner@lothar.com>
2915 * docs/buildbot.texinfo (SVN): add branches example
2916 * docs/Makefile (buildbot.ps): add target for postscript manual
2918 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
2919 * buildbot/test/test_locks.py: same
2921 * buildbot/process/step.py (Darcs): comment about default branches
2923 * buildbot/master.py (BuildMaster.loadConfig): don't look for
2924 c['interlocks'] in the config file, complain if it is present.
2925 Scan all locks in c['builders'] to make sure the Locks they use
2927 * buildbot/test/test_config.py: remove old c['interlocks'] test,
2928 add some tests to check for non-uniquely-named Locks
2929 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
2930 since the unique-Lock validation code requires it now
2932 * buildbot/locks.py: fix test-case-name
2934 * buildbot/interlock.py: remove old file
2936 2005-07-11 Brian Warner <warner@lothar.com>
2938 * buildbot/test/test_interlock.py: rename to..
2939 * buildbot/test/test_locks.py: .. something shorter
2941 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2942 versions (after 2.0.1) changed internet.TCPClient to shut down the
2943 connection in stopService. Change the code to handle this
2946 * buildbot/process/base.py (Build): handle whole-Build locks
2947 * buildbot/process/builder.py (Builder.compareToSetup): same
2948 * buildbot/test/test_interlock.py: make tests work
2950 * buildbot/process/step.py (BuildStep.startStep): complain if a
2951 Step tries to claim a lock that's owned by its own Build
2952 (BuildStep.releaseLocks): typo
2954 * buildbot/locks.py (MasterLock): use ComparableMixin so config
2955 file reloads don't replace unchanged Builders
2957 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2958 rewrite to cover new Locks instead of old c['interlocks']
2959 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2963 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2964 start the master and connect the buildslave
2966 * buildbot/process/step.py (FailingDummy.done): finish with a
2967 FAILURE status rather than raising an exception
2969 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2970 stringify a BuildRequest.reason that is None
2972 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2974 * buildbot/status/builder.py (BuildSetStatus): implement enough to
2975 allow scheduler.Dependent to work
2976 * buildbot/buildset.py (BuildSet): set .reason and .results
2978 * buildbot/test/test_interlock.py (Locks.setUp): connect both
2979 slaves, to make the test stop hanging. It still fails, of course,
2980 because I haven't even started to implement Locks.
2982 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2984 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2985 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2986 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2987 (Dependent): new class for downstream build dependencies
2988 * buildbot/test/test_dependencies.py: tests (still failing)
2990 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2992 2005-07-07 Brian Warner <warner@lothar.com>
2994 * buildbot/test/runutils.py (RunMixin): factored this class out..
2995 * buildbot/test/test_run.py: .. from here
2996 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2997 added new buildbot.locks tests (which all hang right now)
2998 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2999 * buildbot/process/step.py: claim/release per-BuildStep locks
3001 * docs/Makefile: add 'buildbot.html' target
3003 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
3004 interpreted as "HEAD", so that all VC steps can accept branch=None
3005 and have it mean the "default branch".
3007 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
3009 2005-07-07 Brian Warner <warner@lothar.com>
3011 * docs/examples/twisted_master.cfg: update to match current usage
3013 * docs/buildbot.texinfo (System Architecture): comment out the
3014 image, it doesn't exist yet and just screws up the HTML manual.
3016 2005-07-05 Brian Warner <warner@lothar.com>
3018 * debian/.cvsignore: oops, missed one. Removing leftover file.
3020 2005-06-17 Brian Warner <warner@lothar.com>
3022 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
3023 changed its output in 1.2.0, don't mistakenly think that the
3024 subversion we find isn't capable of supporting our tests.
3026 * debian/*: remove the debian/ directory and its contents, to make
3027 life easier for the proper Debian maintainer
3029 * Makefile (release): same
3031 2005-06-07 Brian Warner <warner@lothar.com>
3033 * everything: create a distinct SourceStamp class to replace the
3034 ungainly 4-tuple, let it handle merging instead of BuildRequest.
3035 Changed the signature of Source.startVC to include the revision
3036 information (instead of passing it through self.args). Implement
3037 branches for SVN (now only Darcs/Git is missing support). Add more
3040 2005-06-06 Brian Warner <warner@lothar.com>
3042 * everything: rearrange build scheduling. Create a new Scheduler
3043 object (configured in c['schedulers'], which submit BuildSets to a
3044 set of Builders. Builders can now use multiple slaves. Builds can
3045 be run on alternate branches, either requested manually or driven
3046 by changes. This changed some of the Status classes. Interlocks
3047 are out of service until they've been properly split into Locks
3048 and Dependencies. treeStableTimer, isFileImportant, and
3049 periodicBuild have all been moved from the Builder to the
3051 (BuilderStatus.currentBigState): removed the 'waiting' and
3052 'interlocked' states, removed the 'ETA' argument.
3054 2005-05-24 Brian Warner <warner@lothar.com>
3056 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
3057 erroneously abandons the connection (in clientConnectionFailed)
3058 for non-UserErrors, which means that if we lose the connection due
3059 to a network problem or a timeout, we'll never try to reconnect.
3060 Fix this by not upcalling to the buggy parent method. Note:
3061 twisted-2.0 fixes this, but the function only has 3 lines so it
3062 makes more sense to copy it than to try and detect the buggyness
3063 of the parent class. Fixes SF#1207588.
3065 * buildbot/changes/changes.py (Change.branch): doh! Add a
3066 class-level attribute to accomodate old Change instances that were
3067 pickled before 0.6.5 (where .branch was added for new Changes).
3068 This fixes the exception that occurs when you try to look at an
3069 old Change (through asHTML).
3071 * buildbot/__init__.py (version): bump to 0.6.6+ while between
3074 2005-05-23 Brian Warner <warner@lothar.com>
3076 * buildbot/__init__.py (version): release 0.6.6
3078 2005-05-23 Brian Warner <warner@lothar.com>
3080 * NEWS: update for 0.6.6 release
3081 * debian/changelog: same
3083 * buildbot/scripts/runner.py (start): put the basedir in sys.path
3084 before starting: this was done by twistd back when we spawned it,
3085 now that we're importing the pieces and running them in the
3086 current process, we have to do it ourselves. This allows
3087 master.cfg to import files from the same directory without
3088 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
3089 Stichele for the catch.
3090 (Options.opt_version): Add a --version command (actually, just make
3091 the existing --version command emit Buildbot's version too)
3093 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
3094 fix to make this behave like other LogFiles, this time to handle
3095 existing LogFiles on disk. (add the missing .upgrade method)
3096 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
3098 2005-05-21 Brian Warner <warner@lothar.com>
3100 * buildbot/test/test_runner.py (Create.testMaster): match the
3101 rawstring change in runner.py:masterTAC
3103 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
3104 TwistedWords is installed
3105 * buildbot/test/test_status.py: same, with TwistedMail
3107 * buildbot/master.py: remove old IRC/Waterfall imports (used by
3108 some old, deprecated, and removed config keys). This should enable
3109 you to use the base buildbot functionality with Twisted-2.0.0 when
3110 you don't also have TwistedWeb and TwistedWords installed
3112 2005-05-20 Brian Warner <warner@lothar.com>
3114 * buildbot/scripts/runner.py (run): call sendchange(), not
3115 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
3116 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
3117 (stop): don't wait for process to die when sending SIGHUP
3118 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
3119 directory name gets interpreted, which you don't want
3122 * buildbot/__init__.py (version): bump to 0.6.5+ while between
3125 2005-05-18 Brian Warner <warner@lothar.com>
3127 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
3129 2005-05-18 Brian Warner <warner@lothar.com>
3131 * README: update for 0.6.5
3132 * debian/changelog: same
3134 * buildbot/changes/changes.py: rename tag= to branch=, since
3135 that's how we're using it, and my design for the upcoming "build a
3136 specific branch" feature wants it. also, tag= was too CVS-centric
3137 * buildbot/changes/mail.py (parseSyncmail): same
3138 * buildbot/process/base.py (Build.isBranchImportant): same
3139 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
3140 * docs/buildbot.texinfo (Attributes of Changes): same
3142 * NEWS: update tag=, update for upcoming release
3144 2005-05-17 Brian Warner <warner@lothar.com>
3146 * buildbot/scripts/runner.py (stop): actually poll once per
3147 second, instead of re-killing the poor daemon once per second.
3148 Sleep briefly (0.1s) before the first poll, since there's a good
3149 chance we can avoid waiting the full second if the daemon shuts
3150 down quickly. Also remove the sys.exit() at the end.
3151 (start): remove the unneighborly sys.exit()
3153 * Makefile: improve permission-setting to not kick Arch so badly
3155 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
3156 default --keepalive=600, since it doesn't hurt very much, and it's
3157 a hassle to discover that you need it.
3158 * buildbot/test/test_runner.py (Create.testSlave): test it
3160 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
3161 IRC bot about EXCEPTION
3163 * buildbot/status/client.py (PBListener): upcall more correctly
3165 * buildbot/process/base.py (Build.allStepsDone): if a step caused
3166 an exception mark the overall build with EXCEPTION, not SUCCESS
3168 * buildbot/scripts/runner.py (makefile_sample): remove the leading
3170 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
3171 * Makefile: update some release-related stuff
3173 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
3174 gets called when there isn't actually an active process, just end
3175 the Command instead of blowing up. I don't know how it gets into
3176 this state, but the twisted win32 buildslave will sometimes hang,
3177 and when it shakes its head and comes back, it thinks it's still
3178 running a Command. The next build causes this command to be
3179 interrupted, but the lack of self.process.pid breaks the interrupt
3182 * NEWS: document changes since the last release
3184 * buildbot/scripts/runner.py (start): change 'buildbot start' to
3185 look for Makefile.buildbot instead of a bare Makefile . The
3186 'buildbot start' does not install this file, so you have to
3187 manually copy it if you want to customize startup behavior.
3188 (createMaster): change 'buildbot master' command to create
3189 Makefile.sample instead of Makefile, to create master.cfg.sample
3190 instead of master.cfg (requiring you to copy it before the
3191 buildmaster can be started). Both sample files are kept up to
3192 date, i.e. they are overwritten if they have been changed. The
3193 'buildbot.tac' file is *not* overwritten, but if the new contents
3194 don't match the old, a 'buildbot.tac.new' file is created and the
3195 user is warned. This seems to be a much more sane way to handle
3196 startup files. Also, don't sys.exit(0) when done, so we can run
3197 unit tests against it.
3198 (createSlave): same. Don't overwrite the sample info/ files.
3199 * buildbot/scripts/sample.mk: remove. the contents were pulled
3200 into runner.py, since they need to match the behavior of start()
3204 * docs/buildbot.texinfo (Launching the daemons): document it
3205 * buildbot/test/test_runner.py (Create): test it
3207 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
3208 version that can handle string-in-string tests, because otherwise
3209 python-2.2 fails the tests. It'd be tremendous if Trial's test
3210 took two strings under 2.2 too.
3212 * everything: fixed all deprecation warnings when running against
3213 Twisted-2.0 . (at least all the ones in buildbot code, there are a
3214 few that come from Twisted itself). This involved putting most of
3215 the Twisted-version specific code in the new buildbot.twcompat
3216 module, and creating some abstract base classes in
3217 buildbot.changes.base and buildbot.status.base (which might be
3218 useful anyway). __implements__ is a nuisance and requires an ugly
3219 'if' clause everywhere.
3221 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
3222 delay before finishing the test: it seems that smtp.sendmail
3223 doesn't hang up on the server, so we must wait a moment so it can
3224 hang up on us. This removes the trial warning about an unclean
3227 2005-05-16 Brian Warner <warner@lothar.com>
3229 * buildbot/process/step.py (Source): add 'retry' argument. It is a
3230 tuple of (delay, repeats).
3231 * buildbot/test/test_vc.py (Retry): test it
3232 * docs/buildbot.texinfo (Source Checkout): document it
3233 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
3234 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
3235 doVCFull() are handled by re-trying the checkout (after a delay)
3236 some number of times.
3237 (ShellCommand._startCommand): make header lines easier to read
3239 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
3241 (WebTest.test_logfile): make sure master gets shut down, silences
3242 some "unclean reactor" test errors
3244 * buildbot/test/test_changes.py (Sender.tearDown): spin the
3245 reactor once after shutdown, something in certain versions of
3246 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
3247 fails, svn-trunk is ok.
3249 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
3250 second win32 error message
3252 * buildbot/test/test_run.py (Status.testSlave): be smarter about
3253 validating the ETA, so the tests don't fail on slow systems
3255 2005-05-15 Brian Warner <warner@lothar.com>
3257 * buildbot/status/builder.py (HTMLLogFile): make this behave like
3258 the new LogFile class, so upgrading works properly
3259 (LogFileProducer.resumeProducing): survive resumeProducing after
3260 we've exhausted the chunkGenerator
3262 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
3264 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
3265 (Log.testUpgrade): same
3267 * docs/buildbot.texinfo (Maintenance): describe how to delete old
3268 Builds and logs with a cron job.
3270 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
3271 of the old non-offline LogFile, added code to upgrade these to
3272 new-style contents-live-on-disk instances at load time (in a way
3273 that doesn't invalidate the old Build pickles, so upgrading to
3274 0.6.5 is not a one-way operation). Got rid of everything related
3276 (LogFile.__init__): create LogFiles with the parent step status,
3277 the log's name, and a builder-relative filename where it can keep
3278 the contents on disk.
3279 (LogFile.hasContents): new method, clients are advised to call it
3280 before getText or getChunks and friends. If it returns False, the
3281 log's contents have been deleted and getText() will raise an
3283 (LogFile.getChunks): made it a generator
3284 (LogFile.subscribeConsumer): new method, takes a Twisted-style
3285 Consumer (except one that takes chunks instead of strings). This
3286 enables streaming of very large logfiles without storing the whole
3288 (BuildStatus.generateLogfileName): create names like
3289 12-log-compile-output, with a _0 suffix if required to be unique
3290 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
3291 or earlier) logfiles into new-style ones
3292 (BuilderStatus): remove everything related to 'stub' builds. There
3293 is now only one build cache, and we don't strip logs from old
3295 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
3296 since we no longer fight to keep it in the cache
3298 * buildbot/status/html.py (TextLog.render_GET): use a
3299 ChunkConsumer to stream the log entries efficiently.
3300 (ChunkConsumer): wrapper which consumes chunks and writes
3303 * buildbot/test/test_twisted.py (Parse.testParse): use a
3304 LogFile-like object instead of a real one
3306 * buildbot/test/test_status.py (MyLog): handle new LogFile code
3307 (Log.testMerge3): validate more merge behavior
3308 (Log.testChunks): validate LogFile.getChunks
3309 (Log.testUpgrade): validate old-style LogFile upgrading
3310 (Log.testSubscribe): validate LogFile.subscribe
3311 (Log.testConsumer): validate LogFile.subscribeConsumer
3313 * buildbot/interfaces.py (IStatusLogStub): remove
3314 (IStatusLog.subscribeConsumer): new method
3315 (IStatusLog.hasContents): new method
3316 (IStatusLogConsumer): describes things passed to subscribeConsumer
3318 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
3319 the log contents if it does not have any contents.
3320 (StatusResourceBuildStep.body): same
3321 (StatusResourceBuildStep.getChild): give a 404 for empty logs
3323 2005-05-14 Brian Warner <warner@lothar.com>
3325 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
3326 timeouts to try and make the windows metabuildslave not hang
3328 2005-05-13 Mike Taylor <bear@code-bear.com>
3330 * buildbot/slave/commands.py (rmdirRecursive): added a check
3331 to ensure the path passed into rmdirRecursive actually exists.
3332 On win32 a non-existant path would generate an exception.
3334 2005-05-13 Brian Warner <warner@lothar.com>
3336 * buildbot/slave/commands.py (rmdirRecursive): replacement for
3337 shutil.rmtree which behaves correctly on windows in the face of
3338 files that you have to chmod before deleting. Thanks to Bear at
3339 the OSAF for the routine.
3340 (SourceBase.doClobber): use rmdirRecursive
3342 2005-05-12 Brian Warner <warner@lothar.com>
3344 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
3345 method generate chunks instead of returning a big list. This
3346 allows the same method to be used for both old LogFile and new
3348 (OfflineLogFile.getText): use the generator
3349 (OfflineLogFile.subscribe): same
3350 * buildbot/status/html.py (TextLog.resumeProducing): same
3351 * buildbot/interfaces.py (IStatusLog.getChunks): document it
3353 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
3354 point out that OfflineLogFile does not currently work with
3355 html.Waterfall . Fixing this is high-priority.
3357 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
3358 apparently windows defaults to using stdout
3360 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
3361 better message on failure so I can figure out the win32 problem
3363 * buildbot/slave/commands.py (ShellCommand._startCommand): update
3364 log messages to include more useful copies of the command being
3365 run, the argv array, and the child command's environment.
3366 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
3368 2005-05-11 Brian Warner <warner@lothar.com>
3370 * setup.py: oops, install debug.glade so 'buildbot debugclient'
3372 * Makefile: update the deb-snapshot version
3374 * docs/buildbot.texinfo: move all .xhtml docs into a new
3375 .texinfo-format document, adding a lot of material in the process.
3376 This is starting to look like a real user's manual. Removed all
3377 the Lore-related files: *.xhtml, *.css, template.tpl .
3378 * docs/Makefile: simple makefile to run 'makeinfo'
3379 * buildbot/scripts/sample.cfg: rearrange slightly
3380 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
3382 2005-05-10 Brian Warner <warner@lothar.com>
3384 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
3385 different name for the internal twistw module, handle it.
3387 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
3388 * setup.py: .. and stop trying to install it
3390 * buildbot/process/step.py (Git): added support for 'cogito' (aka
3391 'git'), the new linux kernel VC system (http://kernel.org/git/).
3392 Thanks to Brandon Philips for the patch.
3393 * buildbot/slave/commands.py (Git): same
3395 2005-05-06 Brian Warner <warner@lothar.com>
3397 * buildbot/status/builder.py (OfflineLogFile): replace the default
3398 LogFile with a form that appends its new contents to a disk file
3399 as they arrive. The complete log data is never kept in RAM. This
3400 is the first step towards handling very large (100MB+) logfiles
3401 without choking quite so badly. (The other half is
3402 producer/consumer on the HTML pages).
3403 (BuildStepStatus.addLog): use OfflineLogFile by default
3404 (BuildStatus.getLogfileName): helper code to give the
3405 OfflineLogFile a filename to work with
3407 * buildbot/test/test_status.py (Results.testAddResults): update
3408 tests to handle new asserts
3409 * buildbot/test/test_vc.py (Patch.doPatch): same
3410 * buildbot/test/test_steps.py (BuildStep.setUp): same
3412 2005-05-05 Brian Warner <warner@lothar.com>
3414 * buildbot/scripts/runner.py (start): if there is no Makefile,
3415 launch the app by importing twistd's internals and calling run(),
3416 rather than spawning a new twistd process. This stands a much
3417 better chance of working under windows.
3418 (stop): kill the process with os.kill instead of spawning
3419 /bin/kill, again to reduce the number of external programs which
3420 windows might not have in the PATH. Also wait up to 5 seconds for
3421 the process to go away, allowing things like 'buildbot stop;
3422 buildbot start' to be reliable in the face of slow shutdowns.
3424 * buildbot/master.py (Dispatcher.__getstate__): remove old
3425 .tap-related methods
3426 (BuildMaster.__getstate__): same
3428 * buildbot/slave/bot.py (makeService): same
3429 (Options.longdesc): same
3430 * buildbot/scripts/runner.py: copy over some old mktap option text
3432 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
3433 'buildbot master' now creates a buildbot.tac file, so there is no
3434 longer a create-instance/save/reload sequence. mktap is dead, long
3436 * buildbot/scripts/sample.mk: use twistd -y, not -f
3437 * buildbot/test/test_config.py: remove mktap-based test
3438 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
3439 * README: don't reference mktap
3441 * docs/source.xhtml: document some of the attributes that Changes
3444 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
3446 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
3447 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
3448 * buildbot/changes/changes.py (Change)
3449 * buildbot/changes/mail.py (parseSyncmail)
3450 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
3452 * buildbot/process/base.py (Build.isTagImportant)
3456 2005-05-04 Brian Warner <warner@lothar.com>
3458 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
3459 connection after sending the change, so that unit tests don't
3460 complain about sockets being left around
3462 * buildbot/status/html.py (WaterfallStatusResource.body): fix
3463 exception in phase=0 rendering
3464 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3466 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
3468 * buildbot/master.py (BuildMaster.loadConfig): finally remove
3469 deprecated config keys: webPortnum, webPathname, irc, manholePort,
3470 and configuring builders with tuples.
3471 * buildbot/test/test_config.py: stop testing compatibility with
3472 deprecated config keys
3473 * buildbot/test/test_run.py: same
3475 2005-05-03 Brian Warner <warner@lothar.com>
3477 * contrib/arch_buildbot.py: survive if there are no logfiles
3478 (username): just use a string, os.getlogin isn't reliable
3480 * buildbot/scripts/runner.py (sendchange): oops, fix the command
3481 so 'buildbot sendchange' actually works. The earlier test only
3482 covered the internal (non-reactor-running) form.
3484 * contrib/arch_buildbot.py: utility that can run as an Arch hook
3485 script to notify the buildmaster about changes
3487 * buildbot/scripts/runner.py (sendchange): new command to send a
3488 change to a buildbot.changes.pb.PBChangeSource receiver.
3489 * buildbot/test/test_changes.py (Sender): test it
3491 * buildbot/master.py (BuildMaster.startService): mark .readConfig
3492 after any reading of the config file, not just when we do it in
3493 startService. This makes some tests a bit cleaner.
3495 * buildbot/changes/pb.py: add some log messages
3497 * buildbot/process/base.py (Build.startBuild): fix a bug that
3498 caused an exception when the build terminated in the very first
3500 (Build.stepDone): let steps return a status of EXCEPTION. This
3501 terminates the build right away, and sets the build's overall
3502 status to EXCEPTION too.
3503 * buildbot/process/step.py (BuildStep.failed): return a status of
3504 EXCEPTION when that is what has happened.
3506 * buildbot/process/step.py (Arch.computeSourceRevision): finally
3507 implement this, allowing Arch-based projects to get precise
3508 checkouts instead of always using the latest code
3509 (Bazaar): create variant of Arch to let folks use baz instead of
3510 tla. Requires a new buildslave too.
3511 * buildbot/slave/commands.py (Arch): add 'revision' argument
3512 (Bazaar): create variant of Arch that uses baz instead of tla.
3513 Remove the code that extracts the archive name from the
3514 register-archive output, since baz doesn't provide it, and require
3515 the user provide both the archive name and its location.
3516 * buildbot/test/test_vc.py (VC.testBazaar): added tests
3518 2005-05-02 Brian Warner <warner@lothar.com>
3520 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
3521 thanks to Nick Trout.
3523 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
3524 deals better with source Makefile coming from a read-only CVS
3525 checkout. Thanks to Nick Trout for the catch.
3527 * buildbot/__init__.py (version): bump to 0.6.4+ while between
3530 2005-04-28 Brian Warner <warner@lothar.com>
3532 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
3534 * debian/changelog: update for 0.6.4
3536 2005-04-28 Brian Warner <warner@lothar.com>
3538 * README.w32: add a checklist of steps for getting buildbot
3540 * MANIFEST.in: include it in the tarball
3544 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
3545 broken .tap files from 0.6.3 by getting rid of .services,
3546 .namedServices, and .change_svc at load time.
3548 2005-04-27 Brian Warner <warner@lothar.com>
3550 * NEWS: update in preparation for new release
3552 * buildbot/test/test_config.py (Save.testSave): don't pull in
3553 twisted.scripts.twistd, we don't need it and it isn't for windows
3556 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
3557 accomodate win32 which can't do atomic-rename
3559 2005-04-27 Brian Warner <warner@lothar.com>
3561 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
3562 timeouts to help the slow metabuildbot not flunk them so much
3563 (Disconnect.testBuild3): same
3564 (Disconnect.testBuild4): same
3565 (Disconnect.testInterrupt): same
3567 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
3568 setup, it was completely broken for new buildmasters (those which
3569 did not have a 'change.pck' already saved. Thanks to Paul Warren
3570 for catching this (embarrassing!) bug.
3571 (Dispatcher.__getstate__): don't save our registered avatar
3572 factories, since they'll be re-populated when the config file is
3574 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
3575 tests (since the real mktap-generated BuildMaster doesn't save
3577 (BuildMaster.__getstate__): don't save any service children,
3578 they'll all be re-populated when the config file is re-read.
3579 * buildbot/test/test_config.py (Save.testSave): test for this
3581 2005-04-26 Brian Warner <warner@lothar.com>
3583 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
3584 rendered with Blender.. looks a bit nicer.
3585 * buildbot/docs/images/icon.blend: add the Blender file for it
3587 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
3588 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
3589 running under windows. This appears to be the best way to allow
3590 BuildSteps to do something normal like 'trial -v buildbot.test' or
3591 'make foo' and still expect it to work. The idea is to make the
3592 BuildSteps look as much like what a developer would type when
3593 compiling or testing the tree by hand. This approach probably has
3594 problems when there are spaces in the arguments, so if you've got
3595 windows buildslaves, you'll need to pay close attention to your
3598 * buildbot/status/html.py (WaterfallStatusResource.body): add the
3599 timezone to the timestamp column.
3600 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3602 * buildbot/scripts/runner.py (loadOptions): do something sane for
3603 windows, I think. We use %APPDATA%/buildbot instead of
3604 ~/.buildbot, but we still search everywhere from the current
3605 directory up to the root for a .buildbot/ subdir. The "is it under
3606 $HOME" security test was replaced with "is it owned by the current
3607 user", which is only performed under posix.
3608 * buildbot/test/test_runner.py (Options.testFindOptions): update
3609 tests to match. The "is it owned by the current user" check is
3610 untested. The test has been re-enabled for windows.
3612 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
3613 any "\n" in the expected output with the platform-specific line
3614 separator. Make this separator "\r\n" on PTYs under unix, they
3615 seem to do that and I don't know why
3617 * buildbot/test/test_runner.py (Options.optionsFile): disable on
3618 windows for now, I don't know what ~/.buildbot/ should mean there.
3620 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
3621 win32 compatibility, don't use "/tmp"
3622 (Basedir.testChangeBuilddir): remove more unixisms
3624 2005-04-26 Brian Warner <warner@lothar.com>
3626 * buildbot/test/test_control.py (Force.rmtree): python2.2
3627 compatibility, apparently its shutil.rmtree ignore_errors=
3628 argument is ignored.
3629 * buildbot/test/test_run.py (Run.rmtree): same
3630 (RunMixin.setUp): same
3632 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
3635 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
3636 'substring in string' operator, must use string.find(substr)!=-1
3637 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
3638 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
3640 * buildbot/scripts/runner.py (loadOptions): add code to search for
3641 ~/.buildbot/, a directory with things like 'options', containing
3642 defaults for various 'buildbot' subcommands. .buildbot/ can be in
3643 the current directory, your $HOME directory, or anywhere
3644 inbetween, as long as you're somewhere inside your home directory.
3645 (debugclient): look in ~/.buildbot/options for master and passwd
3646 (statuslog): look in ~/.buildbot/options for 'masterstatus'
3647 * buildbot/test/test_runner.py (Options.testFindOptions): test it
3649 * buildbot/status/client.py (makeRemote): new approach to making
3650 IRemote(None) be None, which works under Twisted-2.0
3651 * buildbot/test/test_status.py (Client.testAdaptation): test it
3653 * buildbot/status/builder.py (Status.builderAdded): when loading a
3654 pickled BuilderStatus in from disk, set its name after loading.
3655 The config file might have changed its name (but not its
3656 directory) while it wasn't looking.
3658 * buildbot/process/builder.py (Builder.attached): always return a
3659 Deferred, even if the builder was already attached
3660 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
3662 2005-04-25 Brian Warner <warner@lothar.com>
3664 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
3665 category-related exception when announcing a build has finished
3667 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
3668 reference no-longer-existent changemaster.sources
3669 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
3671 * buildbot/__init__.py (version): bump to 0.6.3+ while between
3674 2005-04-25 Brian Warner <warner@lothar.com>
3676 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
3678 * debian/changelog: update for 0.6.3
3680 2005-04-25 Brian Warner <warner@lothar.com>
3682 * MANIFEST.in: make sure debug.glade is in the tarball
3684 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
3686 * NEWS: update for the imminent 0.6.3 release
3688 * buildbot/status/html.py (HtmlResource.content): make the
3689 stylesheet <link> always point at "buildbot.css".
3690 (StatusResource.getChild): map "buildbot.css" to a static.File
3691 containing whatever css= argument was provided to Waterfall()
3692 (Waterfall): provide the "classic" css as the default.
3693 * docs/waterfall.classic.css: move default CSS from here ..
3694 * buildbot/status/classic.css: .. to here
3696 * MANIFEST.in: make sure classic.css is included in the tarball
3697 * setup.py: and that it is installed too, under buildbot/status/
3699 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
3700 the module level, because buildbot.tap files from 0.6.2 don't have
3701 it in their attribute dictionary.
3703 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
3704 really exists at startup, might save some confusion somewhere.
3706 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
3708 * docs/waterfall.classic.css:
3709 add a stylesheet that's almost the same as the "classic"
3712 * buildbot/status/builder.py:
3713 add EXCEPTION as a result - this is a problem for the bot
3714 maintainer, not a build problem for the changers
3715 * buildbot/process/step.py:
3716 use EXCEPTION instead of FAILURE for exceptions
3717 * buildbot/status/html.py:
3718 add build_get_class to get a class out of a build/buildstep
3719 finish naming the classes
3720 split out sourceNames to changeNames and builderNames so we
3721 can style them separately
3722 * docs/config.xhtml:
3723 finish documenting classes as they are right now
3725 * buildbot/status/html.py:
3726 name the classes as we agreed on IRC
3727 * docs/config.xhtml:
3730 * buildbot/status/html.py:
3731 same for cssclass->class_
3733 * buildbot/status/html.py:
3734 as decided on IRC, use class_ for the "class" attribute to not
3735 conflict with the class keyword, and clean up the messy **{} stuff.
3737 * buildbot/status/mail.py:
3738 put back "builders" argument, and fix docstring, because the
3739 code *ignores* builders listed in this argument
3741 * buildbot/process/builder.py:
3742 remove FIXME notes - category is now indeed a cvar of BuilderStatus
3744 * docs/config.xhtml:
3745 describe the category argument for builders
3747 * buildbot/status/builder.py:
3748 Fix a silly bug due to merging
3750 * buildbot/process/builder.py:
3751 remove category from the process Builder ...
3752 * buildbot/status/builder.py:
3753 ... and add it to BuilderStatus instead.
3754 Set category on unpickled builder statuses, they might not have it.
3755 * buildbot/master.py:
3756 include category when doing builderAdded
3757 * buildbot/status/mail.py:
3758 return None instead of self for builders we are not interested in.
3759 * buildbot/test/test_run.py:
3760 fix a bug due to only doing deferredResult on "dummy" waiting
3761 * buildbot/test/test_status.py:
3762 add checks for the Mail IStatusReceiver returning None or self
3764 * buildbot/status/html.py:
3765 fix testsuite by prefixing page title with BuildBot
3767 * buildbot/status/builder.py:
3768 have .category in builder status ...
3769 * buildbot/process/builder.py:
3770 ... and set it from Builder
3771 * buildbot/status/html.py:
3772 make .css a class variable
3773 * buildbot/test/test_status.py:
3774 write more tests to cover our categories stuff ...
3775 * buildbot/status/mail.py:
3776 ... and fix the bug that this uncovered
3778 * buildbot/changes/mail.py:
3779 * buildbot/changes/pb.py:
3780 * buildbot/master.py:
3781 * buildbot/process/base.py:
3782 * buildbot/process/factory.py:
3783 * buildbot/process/interlock.py:
3784 * buildbot/process/step.py:
3785 * buildbot/process/step_twisted.py:
3786 * buildbot/slave/commands.py:
3787 * buildbot/status/builder.py:
3788 * buildbot/status/client.py:
3789 * buildbot/status/html.py:
3790 * buildbot/status/mail.py:
3791 * buildbot/status/progress.py:
3792 * buildbot/test/test_changes.py:
3793 * buildbot/test/test_config.py:
3794 * buildbot/test/test_control.py:
3795 * buildbot/test/test_interlock.py:
3796 * buildbot/test/test_maildir.py:
3797 * buildbot/test/test_mailparse.py:
3798 * buildbot/test/test_run.py:
3799 * buildbot/test/test_slavecommand.py:
3800 * buildbot/test/test_status.py:
3801 * buildbot/test/test_steps.py:
3802 * buildbot/test/test_twisted.py:
3803 * buildbot/test/test_util.py:
3804 * buildbot/test/test_vc.py:
3805 * buildbot/test/test_web.py:
3807 add test-case-name at the top of a whole set of files
3809 * buildbot/status/builder.py:
3810 keep order of addition when getting builder names
3811 * buildbot/status/words.py:
3812 * buildbot/test/test_run.py:
3813 add test for getBuilderNames
3815 * buildbot/process/base.py:
3816 * buildbot/process/step.py:
3817 * buildbot/status/builder.py:
3818 * buildbot/status/html.py:
3819 make buildbot css-able
3820 replace the color code for purple with purple, don't understand
3821 why it wasn't purple to start with
3823 * buildbot/status/words.py:
3824 ok, so it doesn't look like BuilderStatus.remote is still valid.
3825 Use what waterfall uses instead.
3827 * buildbot/interfaces.py:
3828 * buildbot/status/builder.py:
3829 * buildbot/status/html.py:
3830 * buildbot/status/mail.py:
3831 * buildbot/status/words.py:
3832 * buildbot/test/test_run.py:
3833 use categories everywhere and make it be a list. More sensible
3834 for the future. Also make words actually respect this in
3837 * buildbot/interfaces.py:
3838 add category argument to getBuilderNames
3839 * buildbot/process/builder.py:
3840 * buildbot/status/builder.py:
3841 * buildbot/status/html.py:
3842 * buildbot/status/mail.py:
3843 * buildbot/status/words.py:
3844 * buildbot/test/test_run.py:
3845 move from specifying builders by name to specifying the category
3847 * buildbot/status/html.py:
3848 * buildbot/status/words.py:
3849 add "builders=" to __init__ of status clients so they can
3850 limit themselves to the given list of builders to report on
3852 * buildbot/status/html.py: set the title to the product name
3854 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
3856 * buildbot/interfaces.py:
3857 * buildbot/status/builder.py:
3858 more documentation. Hm, not sure if ChangeLog entries make sense
3861 2005-04-23 Brian Warner <warner@lothar.com>
3863 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
3865 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
3867 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
3868 the sub-commands that log buildmaster status to stdout and to a
3869 GUI window, respectively.
3871 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
3872 functionality is working again, but all the step-status and ETA
3873 stuff is missing. Commented out a lot of code pending more
3876 * buildbot/status/client.py: make sure that IRemote(None) is None
3878 * buildbot/changes/changes.py: import defer, oops
3879 (ChangeMaster): remove the .sources list, rely upon the fact that
3880 MultiServices can be treated as sequences of their children. This
3881 cleans up the add/remove ChangeSource routines a lot, as we keep
3882 exactly one list of the current sources instead of three.
3884 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
3885 up an empty ChangeMaster at init time.
3886 (BuildMaster.loadChanges): if there are changes to be had from
3887 disk, replace self.change_svc with the new ones. If not, keep
3888 using the empty ChangeMaster set up in __init__.
3889 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
3890 instead of a separate list, makes the code a bit cleaner.
3891 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
3892 (ConfigTest.testSources): same, also wait for loadConfig to finish.
3893 Extend the test to make sure we can get rid of the sources when
3896 2005-04-22 Brian Warner <warner@lothar.com>
3898 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
3899 and info/host files when making the slave directory
3901 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
3902 whendone= argument, just return the Deferred and let the caller do
3903 what they want with it.
3904 (Disconnect.testBuild1): wait for shutdownSlave
3905 (Basedir.testChangeBuilddir): new test to make sure changes to the
3906 builddir actually get propagated to the slave
3908 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
3909 explicit method, rather than passing the builddir in __init__ .
3910 Make sure to update self.basedir too, this was broken before.
3911 (Bot.remote_setBuilderList): use b.setBuilddir for both new
3912 builders and for ones that have just had their builddir changed.
3913 (BotFactory): add a class-level .perspective attribute, so
3914 BuildSlave.waitUntilDisconnected won't get upset when the
3915 connection hasn't yet been established
3916 (BuildSlave.__init__): keep track of the bot.Bot instance, so
3917 tests can reach through it to inspect the SlaveBuilders
3919 * buildbot/process/base.py (Build.buildException): explain the
3920 log.err with a log.msg
3921 * buildbot/process/builder.py (Builder.startBuild): same
3922 (Builder._startBuildFailed): improve error message
3924 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
3925 occurred because we lost the brand-new connection, retry instead
3926 of giving up. If not, it's probably an authorization failure, and
3927 it makes sense to stop trying. Make sure we log.msg the reason
3928 that we're log.err'ing the failure, otherwise test failures are
3929 really hard to figure out.
3931 * buildbot/master.py: change loadConfig() to return a Deferred
3932 that doesn't fire until the change has been fully implemented.
3933 This means any connected slaves have been updated with the new
3934 builddir. This change makes it easier to test the code which
3935 actually implements this builddir-updating.
3936 (BotPerspective.addBuilder): return Deferred
3937 (BotPerspective.removeBuilder): same
3938 (BotPerspective.attached): same
3939 (BotPerspective._attached): same. finish with remote_print before
3940 starting the getSlaveInfo, instead of doing them in parallel
3941 (BotPerspective.list_done): same
3942 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3943 actually calling slave.disconnect()
3944 (BotMaster.addBuilder): same
3945 (BotMaster.removeBuilder): same
3946 (BuildMaster.loadConfig): same
3947 (BuildMaster.loadConfig_Slaves): same
3948 (BuildMaster.loadConfig_Sources): same
3949 (BuildMaster.loadConfig_Builders): same
3950 (BuildMaster.loadConfig_status): same
3952 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3953 a Deferred that fires when the source is finally removed
3955 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3956 the previous tree on win32, where we have to do it synchronously,
3957 make sure we return a Deferred anyway.
3958 (SourceBase.doCopy): same
3960 * buildbot/scripts/runner.py (statusgui): use the text client for
3961 now, while I rewrite the Gtk one
3962 * buildbot/clients/base.py: strip out old code, leaving just the
3963 basic print-message-on-event functionality. I also remove the
3964 ReconnectingPBClientFactory, but it does at least quit when it
3965 loses the connection instead of going silent
3967 2005-04-21 Brian Warner <warner@lothar.com>
3969 * Makefile: minor tweaks
3971 * NEWS: point out deprecation warnings, new features for
3974 * buildbot/master.py (BuildMaster.loadConfig): emit
3975 DeprecationWarnings for Builders defined with tuples. Rearrange
3976 code to facility removal of deprecated configuration keys in the
3979 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3980 'buildbot' command to put a little Makefile in the target that
3981 helps you re-create the buildbot.tap file, start or stop the
3982 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3983 all the files 0600, since they contain passwords.
3984 (start): if there is a Makefile, and /usr/bin/make exists, use
3985 'make start' in preference to a raw twistd command. This lets
3986 slave admins put things like PYTHONPATH variables in their
3987 Makefiles and have them still work when the slave is started with
3988 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3989 be nice to first try the 'make' command and only fall back to
3990 twistd if it fails. TODO: the Makefile's "start" command does not
3991 add the --reactor=win32 argument when running under windows.
3992 (Options.debugclient, Options.statusgui): add sub-commands to launch
3993 the debug client (formerly in contrib/debugclient.py) and the
3994 Gtk status application (currently broken)
3995 * buildbot/clients/debug.py: move from contrib/debugclient.py
3996 * buildbot/clients/debug.glade: same
3998 * buildbot/test/test_trial.py: remove it. This requires some
3999 functionality out of Twisted that isn't there yet, and until then
4000 having it around just confuses things.
4002 * buildbot/test/test_slavecommand.py (Shell): test both with and
4003 without PTYs, and make sure that command output is properly
4004 interleaved in the with-PTY case. I think the without-PTY test
4005 should pass on windows, where we never use PTYs anyway.
4007 2005-04-20 Brian Warner <warner@lothar.com>
4009 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
4011 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
4013 * NEWS: start creating entries for the next release
4015 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
4017 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
4018 (WebTest.test_webPathname): same
4019 (WebTest.test_webPathname_port): same
4020 (WebTest.test_waterfall): use the default favicon rather than
4021 rooting around the filesystem for it. Open the expected-icon file
4022 in binary mode, to make win32 tests happier (thanks to Nick Trout
4024 * buildbot/status/html.py (buildbot_icon): win32 portability
4026 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
4027 win32-compatibility fixes from Nick Trout, the "file not found" message
4028 is different under windows
4029 (FakeSlaveBuilder.__init__): clean up setup a bit
4030 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
4032 2005-04-19 Brian Warner <warner@lothar.com>
4034 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
4035 skip-if-repositories-are-unavailable test to not kill the trial
4036 that comes with Twisted-1.3.0
4038 * setup.py: install buildbot.png icon file when installing code
4040 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
4041 environment used by the command, at least on the child side.
4043 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
4044 this method needs to be added and implemented because it gets
4045 called under heavy load. I don't quite understand the
4046 producer/consumer API enough to write it.
4047 (StatusResource.getChild): add a resource for /favicon.ico
4048 (Waterfall.__init__): add favicon= argument
4049 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4050 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
4051 (WebTest.test_webPathname): same
4052 (WebTest.test_webPathname_port): same
4053 * docs/config.xhtml: mention favicon=
4054 * buildbot/buildbot.png: add a default icon, dorky as it is
4056 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
4058 * buildbot/master.py:
4059 * buildbot/process/base.py:
4060 * buildbot/process/builder.py:
4061 * buildbot/process/interlock.py:
4062 * buildbot/status/builder.py:
4063 * buildbot/status/html.py:
4064 * buildbot/status/mail.py:
4065 * buildbot/status/words.py:
4066 new documentation while digging through the code
4068 2005-04-17 Brian Warner <warner@lothar.com>
4070 * general: try to fix file modes on all .py files: a+r, a-x,
4071 but let buildbot/clients/*.py be +x since they're tools
4073 * docs/epyrun (addMod): when an import fails, say why
4075 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
4077 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4079 * buildbot/process/base.py:
4080 * buildbot/process/builder.py:
4081 * buildbot/status/builder.py:
4082 new documentation while digging through the code
4084 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4086 * buildbot/changes/changes.py:
4087 * buildbot/changes/p4poller.py:
4088 * buildbot/interfaces.py:
4089 * buildbot/process/base.py:
4090 * buildbot/process/builder.py:
4091 * buildbot/process/step.py:
4092 * buildbot/process/step_twisted.py:
4093 * buildbot/slave/bot.py:
4094 * buildbot/slave/commands.py:
4095 * buildbot/status/builder.py:
4096 fix all docstrings to make epydoc happy. In the process of fixing
4097 some, I also moved pieces of docs, and removed some deprecated
4100 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4102 * buildbot/process/builder.py:
4103 * buildbot/process/interlock.py:
4104 * buildbot/process/process_twisted.py:
4105 * buildbot/process/step.py:
4106 BuildProcess -> Build, as it looks like that's what happened
4107 * buildbot/process/base.py:
4108 * buildbot/process/factory.py:
4111 2005-04-17 Brian Warner <warner@lothar.com>
4113 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4114 update compile command to accomodate the Twisted split.. now
4115 instead of './setup.py build_ext -i', you do './setup.py all
4116 build_ext -i', to run build_ext over all sub-projects.
4117 (FullTwistedBuildFactory): same
4118 (TwistedReactorsBuildFactory): same
4120 * buildbot/status/html.py (TextLog.finished): null out self.req
4121 when we're done, otherwise the reference cycle of TextLog to .req
4122 to .notifications to a Deferred to TextLog.stop keeps them from
4123 being collected, and consumes a huge (610MB on pyramid at last
4124 check) amount of memory.
4126 2005-04-11 Brian Warner <warner@lothar.com>
4128 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
4129 normalize the VC-repository location.. makes SVN happier with
4130 certain test environments.
4132 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
4133 RemoteShellCommand gets its own .env dictionary, so that code in
4134 start() doesn't mutate the original. I think this should fix the
4135 step_twisted.Trial problem where multiple identical components
4136 kept getting added to PYTHONPATH= over and over again.
4138 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
4139 adding epydoc-format docstrings to many classes. Thanks to Thomas
4140 Vander Stichele for the patches.
4141 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
4142 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
4143 * buildbot/slave/bot.py, commands.py, registry.py: same
4145 2005-04-05 Brian Warner <warner@lothar.com>
4147 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
4148 preserve timestamps, helps incremental builds of large trees.
4149 Patch from Rene Rivera.
4151 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
4152 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
4155 2005-04-03 Brian Warner <warner@lothar.com>
4157 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
4158 with one dict, apparently exec has some scoping bugs when used
4159 with both global/local dicts. Thanks to Nathaniel Smith for the
4162 2005-04-02 Brian Warner <warner@lothar.com>
4164 * buildbot/process/step_twisted.py (countFailedTests): the new
4165 trial in Twisted-2.0 emits a slightly different status line than
4166 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
4167 mistakenly think the test count is unparseable.
4168 (Trial.start): note that for some reason each build causes another
4169 copy of self.testpath to be prepended to PYTHONPATH. This needs to
4170 be fixed but I'm not sure quite where the problem is.
4172 2005-04-01 Brian Warner <warner@lothar.com>
4174 * buildbot/test/test_run.py (Run.testMaster): change some uses of
4175 deferredResult to avoid hangs/warnings under twisted-2.0
4176 (RunMixin.tearDown): same
4177 (RunMixin.shutdownSlave): same
4178 (Disconnect.testIdle1): same
4179 (Disconnect.testBuild2): same: wait one second after the build
4180 finishes for test to really be done.. this should be cleaned up to
4181 avoid wasting that second. Builder.detach uses a callLater(0),
4182 either that should be done in-line (something else needed that
4183 behavior), or it should return a Deferred that fires when the
4184 builder is really offline.
4185 (Disconnect.testBuild3): same
4186 (Disconnect.testDisappear): same
4188 * buildbot/test/test_web.py: rearrange server-setup and teardown
4189 code to remove unclean-reactor warnings from twisted-2.0
4191 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
4192 so the tests don't hang under twisted-2.0
4194 2005-03-31 Brian Warner <warner@lothar.com>
4196 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
4197 caused a warning each time the master changed our set of builders
4199 * buildbot/status/builder.py (BuildStatus.saveYourself): under
4200 w32, don't unlink the file unless it already exists. Thanks to
4201 Baptiste Lepilleur for the catch.
4202 (BuilderStatus.saveYourself): same
4204 2005-02-01 Brian Warner <warner@lothar.com>
4206 * buildbot/status/html.py (TextLog.getChild): use a /text child
4207 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
4208 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
4209 logfile as text/plain (no markup, no headers). This replaces the
4210 previous scheme (which used an ?text=1 argument), and gets us back
4211 to a relative link (which works better when the buildbot lives
4212 behind another web server, such as Apache configured as a reverse
4213 proxy). Thanks to Gerald Combs for spotting the problem.
4215 * buildbot/__init__.py (version): bump to 0.6.2+ while between
4218 2004-12-13 Brian Warner <warner@lothar.com>
4220 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
4222 * debian/changelog: update for 0.6.2
4223 * NEWS: finalize for 0.6.2
4225 2004-12-11 Brian Warner <warner@lothar.com>
4227 * NEWS: bring it up to date
4229 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
4230 detection code. Require some sign of life from the buildmaster
4231 every BotFactory.keepaliveInterval seconds. Provoke this
4232 indication at BotFactory.keepaliveTimeout seconds before the
4233 deadline by sending a keepalive request. We don't actually care if
4234 that request is answered in a timely fashion, what we care about
4235 is that .activity() is called before the deadline. .activity() is
4236 triggered by any PB message from the master (including an ack to
4237 one of the slave's status-update messages). With this new scheme,
4238 large status messages over slow pipes are OK, as long as any given
4239 message can be sent (and thus acked) within .keepaliveTimeout
4240 seconds (which defaults to 30).
4241 (SlaveBuilder.remote_startCommand): record activity
4242 (SlaveBuilder.ackUpdate): same
4243 (SlaveBuilder.ackComplete): same
4244 (BotFactory.gotPerspective): same
4245 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
4247 2004-12-09 Brian Warner <warner@lothar.com>
4249 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
4252 * buildbot/process/step_twisted.py (Trial._commandComplete):
4253 update self.cmd when we start the 'cat test.log' transfer. Without
4254 this, we cannot interrupt the correct RemoteCommand when we lose
4257 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
4258 trying to tell the slave to stop the command if we're already
4259 inactive, or if we no longer have a .remote
4261 * buildbot/process/builder.py (Builder._detached): don't let an
4262 exception in currentBuild.stopBuild() prevent the builder from
4263 being marked offline
4265 2004-12-07 Brian Warner <warner@lothar.com>
4267 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
4268 KeyError that happens when you ask for a non-existent Builder, and
4269 translate it into a UsageError.
4271 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
4272 losing the slave in the middle of a remote step is handled too
4274 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
4275 be a Failure, so be sure to stringify it before using it as the
4276 contents of the 'interrupt' logfile
4277 (RemoteCommand.interrupt): use stringified 'why' in
4278 remote_interruptCommand too, just in case
4280 2004-12-06 Brian Warner <warner@lothar.com>
4282 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
4283 instead of 'tla update', which is more efficient in case we've
4284 missed a couple of patches since the last update.
4286 * debian/changelog: update for previous (0.6.1) release. Obviously
4287 this needs to be handled better.
4289 2004-12-05 Brian Warner <warner@lothar.com>
4291 * NEWS: update for stuff since last release
4293 * buildbot/master.py (DebugPerspective.attached): return 'self', to
4294 match the maybeDeferred change in Dispatcher.requestAvatar
4295 * buildbot/changes/pb.py (ChangePerspective.attached): same
4296 * buildbot/status/client.py (StatusClientPerspective.attached): same
4297 * buildbot/process/builder.py (Builder._attached3): same
4298 * buildbot/pbutil.py (NewCredPerspective.attached): same
4300 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
4301 the date to the top-most box, if it is not the same as today's
4304 * docs/slave.xhtml: provide a buildslave setup checklist
4306 * docs/source.xhtml (Arch): correct terminology
4308 2004-12-04 Brian Warner <warner@lothar.com>
4310 * buildbot/test/test_slavecommand.py: use sys.executable instead
4311 of hard-coding 'python' for child commands, might help portability
4313 * docs/examples/twisted_master.cfg: update to current usage
4315 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
4316 'stop build' command to the IRC bot
4318 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
4319 message that broke PBChangeSource
4321 * buildbot/slave/bot.py: clean up shutdown/lose-master code
4322 (SlaveBuilder): make some attributes class-level, remove the old
4323 "update queue" which existed to support resuming a build after the
4324 master connection was lost. Try to reimplement that feature later.
4325 (SlaveBuilder.stopCommand): clear self.command when the
4326 SlaveCommand finishes, so that we don't try to kill a leftover one
4328 (SlaveBuilder.commandComplete): same, merge with commandFailed and
4331 * buildbot/slave/commands.py (SourceBase): set self.command for
4332 all VC commands, so they can be interrupted.
4334 2004-12-03 Brian Warner <warner@lothar.com>
4336 * buildbot/master.py: clean up slave-handling code, to handle
4337 slave-disconnect and multiple-connect better
4338 (BotPerspective): make these long-lasting, exactly one per bot
4339 listed in the config file.
4340 (BotPerspective.attached): if a slave connects while an existing
4341 one appears to still be connected, disconnect the old one first.
4342 (BotPerspective.disconnect): new method to forcibly disconnect a
4343 buildslave. Use some hacks to empty the transmit buffer quickly to
4344 avoid the long (20-min?) TCP timeout that could occur if the old
4345 slave has dropped off the net.
4346 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
4347 own their own SlaveStatus objects. Remove .attached/.detached, add
4348 .addSlave/.removeSlave, treat slaves like Builders (config file
4349 parsing sends deltas to the BotMaster). Inform the slave
4350 instances, i.e. the BotPerspective, about addBuilder and
4352 (BotMaster.getPerspective): turns into a single dict lookup
4353 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
4354 which gives BotPerspective.attached a chance to disconnect the old
4356 (BuildMaster.loadConfig): add code (disabled) to validate that all
4357 builders use known slaves (listed in c['bots']). The check won't
4358 work with tuple-specified builders, which are deprecated but not
4359 yet invalid, so the check is disabled for now.
4360 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
4361 routine, do the add/changed/removed dance with them like we do
4363 (BuildMaster.loadConfig_Sources): move source-config into a
4364 separate routine too
4366 * buildbot/status/builder.py (Status.getSlave): get the
4367 SlaveStatus object from the BotPerspective, not the BotMaster.
4369 * buildbot/test/test_run.py: bunch of new tests for losing the
4370 buildslave at various points in the build, handling a slave that
4371 connects multiple times, and making sure we can interrupt a
4374 * buildbot/slave/bot.py (BuildSlave): make it possible to use
4375 something other than 'Bot' for the Bot object, to make certain
4376 test cases easier to write.
4377 (BuildSlave.waitUntilDisconnected): utility method for testing
4379 2004-11-30 Brian Warner <warner@lothar.com>
4381 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
4383 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
4384 argument, return a Deferred that always fires with True or False.
4385 I don't use an errback to indicate 'ping failed' so that callers
4386 are free to ignore the deferred without causing spurious errors in
4388 * buildbot/process/builder.py (BuilderControl.ping): implement it
4390 * buildbot/test/test_run.py (Status.testDisappear): test ping
4391 (Status.disappearSlave): fix it
4393 2004-11-30 Brian Warner <warner@lothar.com>
4395 * buildbot/interfaces.py (IBuildControl): add .stopBuild
4396 (IBuilderControl): add .getBuild(num), only works for the current
4397 build, of course, although it might be interesting to offer
4398 something for builds in the .waiting or .interlocked state.
4400 * buildbot/process/base.py (Build): have .stopBuild just do the
4401 interrupt, then let the build die by itself.
4402 (BuildControl): add .stopBuild, and add a point-event named
4403 'interrupt' just after the build so status viewers can tell that
4405 (BuilderControl): add .getBuild
4407 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
4408 stops when you kill it, good for testing
4409 (ShellCommand.interrupt): add a logfile named 'interrupt' which
4410 contains the 'reason' text.
4412 * buildbot/status/html.py: Add Stop Build button, if the build can
4413 still be stopped. Send a Redirect (to the top page) one second
4414 later, hopefully long enough for the interrupt to have an effect.
4415 Move make_row() up to top-level to share it between Stop Build and
4418 * buildbot/slave/commands.py: only kill the child process once
4420 * buildbot/test/test_run.py: add testInterrupt
4422 2004-11-29 Brian Warner <warner@lothar.com>
4424 * buildbot/process/base.py: Refactor command interruption. The
4425 Build is now responsible for noticing that the slave has gone
4426 away: Build.lostRemote() interrupts the current step and makes
4427 sure that no further ones will be started.
4429 * buildbot/process/builder.py: When the initial remote_startBuild
4430 message fails, log it: this usually indicates that the slave has
4431 gone away, but we don't really start paying attention until they
4432 fail to respond to the first step's command.
4434 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
4435 slave disconnect. Now sports a new interrupt() method. Error
4436 handling was simplified a lot by chaining deferreds, so
4437 remoteFailed/remoteComplete were merged into a single
4438 remoteComplete method (which can now get a Failure object).
4439 Likewise failed/finished were merged into just _finished.
4440 (BuildStep): Add interrupt(why) method, and if why is a
4441 ConnectionLost Failure then the step is failed with some useful
4444 * buildbot/slave/bot.py: stop the current command when the remote
4445 Step reference is lost, and when the slave is shut down.
4446 (Bot): make it a MultiService, so it can have children. Use
4447 stopService to tell when the slave is shutting down.
4448 (SlaveBuilder): make it a Service, and a child of the Bot. Add
4449 remote_interruptCommand (which asks the current SlaveCommand to
4450 stop but allows it to keep emitting status messages), and
4451 stopCommand (which tells it to shut up and die).
4453 * buildbot/slave/commands.py: make commands interruptible
4454 (ShellCommand.kill): factor out os.kill logic
4455 (Command): factor out setup()
4456 (Command.sendStatus): don't send status if .running is false, this
4457 happens when the command has been halted.
4458 (Command.interrupt): new method, used to tell the command to die
4459 (SlaveShellCommand): implement .interrupt
4460 (DummyCommand): implement .interrupt
4461 (SourceBase, etc): factor out setup(), don't continue substeps if
4464 * buildbot/status/builder.py: fix all waitUntilFinished() methods
4465 so they can be called after finishing
4467 * buildbot/test/test_run.py: new tests for disconnect behavior,
4468 refactor slave-shutdown routines, add different kinds of
4471 2004-11-27 Brian Warner <warner@lothar.com>
4473 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
4474 method to express ETA time like "2m45s" instead of "165 seconds"
4476 2004-11-24 Brian Warner <warner@lothar.com>
4478 * buildbot/test/test_vc.py (VC.testArch): unregister the test
4479 archive after the test completes, to avoid cluttering the user's
4480 'tla archives' listing with a bogus entry. Arch doesn't happen to
4481 provide any way to override the use of ~/.arch-params/, so there
4482 isn't a convenient way to avoid touching the setup of the user who
4484 (VC_HTTP.testArchHTTP): same
4486 2004-11-23 Brian Warner <warner@lothar.com>
4488 * buildbot/status/html.py (TextLog): split render() up into
4489 render_HEAD and render_GET. Use a Producer when sending log
4490 chunks, to reduce memory requirements and avoid sending huge
4491 non-Banana-able strings over web.distrib connections. Requires
4492 peeking under the covers of IStatusLog.
4493 (TextLog.resumeProducing): fix the "as text" link, handle client
4494 disconnects that occur while we're still sending old chunks.
4496 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
4497 use defer.succeed, not the non-existent defer.success
4498 (LogFile.waitUntilFinished): same
4499 (LogFile.subscribe): don't add watchers to a finished logfile
4501 * buildbot/__init__.py (version): bump to 0.6.1+ while between
4504 2004-11-23 Brian Warner <warner@lothar.com>
4506 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
4508 2004-11-23 Brian Warner <warner@lothar.com>
4510 * NEWS: update for the 0.6.1 release
4511 * MANIFEST.in: add new files
4513 * README (INSTALLATION): explain how to enable the extra VC tests
4515 * buildbot/status/builder.py (LogFile): add .runEntries at the class
4516 level to, so old pickled builds can be displayed ok
4518 2004-11-22 Brian Warner <warner@lothar.com>
4520 * NEWS: summarize updates since last release
4522 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
4523 Yoz Grahame. Closes SF#1050138.
4525 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
4528 * buildbot/process/step_twisted.py (Trial): update docs a bit
4530 * docs/factories.xhtml: fix Trial factory docs to match reality.
4533 * buildbot/process/factory.py (Trial.__init__): add args for
4534 randomly= and recurse=, making them available to instantiators
4535 instead of only to subclassers. Closes: SF#1049759.
4537 2004-11-15 Brian Warner <warner@lothar.com>
4539 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4540 try to teach the Quick factory to use multiple versions of python
4542 2004-11-12 Brian Warner <warner@lothar.com>
4544 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
4545 safer w32-compatible approach, and only use it on windows
4546 (BuildStatus.saveYourself): same
4548 2004-11-11 Brian Warner <warner@lothar.com>
4550 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
4551 it: one string merge per chunk. There are now separate .entries
4552 and .runEntries lists: when enumerating over all chunks, make sure
4554 * buildbot/test/test_status.py (Log): more tests
4556 * buildbot/status/builder.py (LogFile.addEntry): Merge string
4557 chunks together, up to 10kb per chunk. This ought to cut down on
4558 the CPU-burning overhead of large log files. Thanks to Alexander
4559 Staubo for spotting the problem.
4560 * buildbot/test/test_status.py (Log): tests for same
4562 2004-11-10 Brian Warner <warner@lothar.com>
4564 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
4565 header to outbound mail
4566 * buildbot/test/test_status.py (Mail.testBuild1): test for same
4568 2004-11-08 Brian Warner <warner@lothar.com>
4570 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
4571 can't do os.rename() onto an existing file, so catch the exception
4572 and unlink the target file first. This introduces a slight window
4573 where the existing file could be lost, but the main failure case
4574 (disk full) should still be handled safely.
4575 (BuildStatus.saveYourself): same
4577 * buildbot/changes/pb.py (ChangePerspective): use a configurable
4578 separator character instead of os.sep, because the filenames being
4579 split here are coming from the VC system, which can have a
4580 different pathname convention than the local host. This should
4581 help a buildmaster running on windows that uses a CVS repository
4582 which runs under unix.
4583 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
4585 * buildbot/process/step_twisted.py (Trial.createSummary): survive
4586 when there are no test failures to be parsed
4588 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
4589 instead of the unix-specific os.system("cp"), thanks to Elliot
4590 Murphy for this and the other buildbot-vs-windows catches.
4591 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
4593 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
4594 echo the command as it is run
4596 * setup.py: install sample.mk too, not just sample.cfg
4597 (scripts): install contrib/windows/buildbot.bat on windows
4599 2004-11-07 Brian Warner <warner@lothar.com>
4601 * buildbot/process/builder.py (Builder._detached): clear the
4602 self.currentBuild reference, otherwise the next build will be
4603 skipped because we think the Builder is already in use.
4605 * docs/examples/twisted_master.cfg: update to match current usage
4606 on the Twisted buildbot
4608 2004-10-29 Brian Warner <warner@lothar.com>
4610 * buildbot/status/mail.py (MailNotifier): fix typo in docs
4612 2004-10-28 Brian Warner <warner@lothar.com>
4614 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
4615 have separate doVCUpdate/doVCFull methods. Catch an update failure
4616 and respond by clobbering the source directory and re-trying. This
4617 will handle local changes (like replacing a file with a directory)
4618 that will cause CVS and SVN updates to fail.
4619 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
4621 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
4624 2004-10-19 Brian Warner <warner@lothar.com>
4626 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
4628 * buildbot/status/html.py (StatusResourceTestResults): display any
4629 TestResults that the Build might have
4630 (StatusResourceTestResult): and the logs for each TestResult
4631 (StatusResourceBuild): add link from the per-build page
4633 2004-10-15 Brian Warner <warner@lothar.com>
4635 * buildbot/process/step_twisted.py (Trial.createSummary): parse
4636 the 'problems' portion of stdout, add TestResults to our build
4637 * buildbot/test/test_twisted.py (Parse.testParse): test it
4639 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
4640 to retrieve a dict of accumulated test results
4641 (ITestResult): define what a single test result can do
4642 * buildbot/status/builder.py (TestResult): implement ITestResult
4643 (BuildStatus.getTestResults): retrieve dict of TestResults
4644 (BuildStatus.addTestResult): add TestResults
4645 * buildbot/test/test_status.py (Results.testAddResults): test it
4647 2004-10-14 Brian Warner <warner@lothar.com>
4649 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
4650 instead of os.system("rm -rf") for win32 portability
4652 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
4653 SignalMixin instead of starting/stopping the reactor, which is
4654 likely to cause problems with other tests
4656 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
4657 self.copyComplete() call. Yoz Grahame makes the catch.
4659 * contrib/windows/buildbot.bat: helper script to deal with path
4660 issues. Thanks to Yoz Grahame.
4662 * buildbot/master.py (BuildMaster.startService): don't register a
4663 SIGHUP handler if the signal module has no SIGHUP attribute.
4664 Apparently win32 does this.
4666 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
4668 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
4669 test if the reactor can't offer UNIX sockets
4671 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
4672 error introduced in the last commit. We really need that
4675 2004-10-12 Brian Warner <warner@lothar.com>
4677 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
4678 when describing a maildir source. Thanks to Stephen Davis.
4680 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
4683 * buildbot/scripts/runner.py (createMaster): install Makefile too
4684 (start): add --no_save to 'start' command
4685 * buildbot/scripts/sample.mk: simple convenience Makefile with
4686 start/stop/reload targets
4688 * buildbot/__init__.py (version): bump to 0.6.0+ while between
4691 2004-09-30 Brian Warner <warner@lothar.com>
4693 * setup.py: Releasing buildbot-0.6.0
4695 2004-09-30 Brian Warner <warner@lothar.com>
4697 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
4698 test_trial.py from the source tarball until support is complete.
4700 * NEWS: update for 0.6.0 release
4701 * buildbot/__init__.py (version): same
4704 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
4705 'source' command to tell users where to get the Buildbot source
4707 * docs/examples/*.cfg: update to modern standards
4709 * NEWS: update for release
4711 * buildbot/scripts/runner.py (createMaster): remove the
4712 -shutdown.tap stuff now that it isn't necessary
4714 (start): launch buildbot.tap, not buildbot-shutdown.tap
4717 * buildbot/status/mail.py (Domain): shorten class name
4718 (MailNotifier): if lookup= is a string, pass it to Domain()
4719 * buildbot/test/test_status.py (Mail.testBuild1): new class name
4720 (Mail.testBuild2): test the string-to-Domain shortcut
4721 (Mail.testMail): fix test
4724 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
4727 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
4728 more attributes on load
4729 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
4730 to accomodate the whole waterfall page at once, and the thrashing
4731 results in a lot of unnecessary loads
4732 (BuildStatus.saveYourself): use binary pickles, not fluffy text
4733 (BuilderStatus.saveYourself): same
4734 (BuilderStatus.eventGenerator): stop generating on the first missing
4735 build. We assume that saved builds are deleted oldest-first.
4736 (BuildStepStatus.__getstate__): .progress might not exist
4738 * buildbot/changes/changes.py (ChangeMaster): make it
4739 serializable, in $masterdir/changes.pck
4740 (ChangeMaster.stopService): save on shutdown
4741 * buildbot/master.py (BuildMaster.loadChanges): load at startup
4742 * buildbot/test/test_config.py: load Changes before config file
4745 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
4746 "Oh my god, you killed the command" header on a separate line
4748 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
4749 skip over corrupted build pickles
4750 (BuilderStatus.getFullBuildByNumber): same
4751 (BuilderStatus.eventGenerator): skip over unavailable builds
4752 (BuildStatus.saveYourself): save builds to a .tmp file first, then
4753 do an atomic rename. This prevents a corrupted pickle when some
4754 internal serialization error occurs.
4755 (BuilderStatus.saveYourself): same
4757 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
4758 the timeout for shell commands, it got lost somehow
4760 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
4761 run out of build steps, return the rest of the builder events
4763 * buildbot/interfaces.py (IBuilderControl.ping): add method
4765 * buildbot/process/builder.py (BuilderControl.ping): move
4766 slave-ping to BuilderControl, and fix the failure case in the
4767 process (Event.finish() is the verb, Event.finished is the noun).
4769 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
4770 through the BuilderControl instead of the BuilderStatus
4771 (EventBox): add adapter for builder.Event, allowing builder events to
4772 be displayed in the waterfall display
4774 * buildbot/master.py (BotMaster.stopService): add a 'master
4775 shutdown' event to the builder's log
4776 (BuildMaster.startService): and a 'master started' on startup
4778 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
4779 builder events into the BuildStep event stream
4780 (Status.builderAdded): add a 'builder created' event
4783 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
4784 command to announce the completion of a running build
4785 (IrcStatusBot.command_FORCE): announce when the build finishes
4787 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
4788 don't evict unfinished builds from the cache: they must stay in
4789 the full-cache until their logfiles have stopped changing. Make
4790 sure the eviction loop terminates if an unfinished build was hit.
4791 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
4792 This lets exceptions be dumped in an email status message. Really
4793 we need LogFiles which contain both text and HTML, instead of two
4795 (BuildStatus.__getstate__): handle self.finished=False
4796 (Status.builderAdded): if the pickle is corrupted, abandon the
4797 history and create a new BuilderStatus object.
4799 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
4800 self.progress attribute, helped one test which doesn't fully set
4801 up the Build object.
4803 * buildbot/interfaces.py (IStatusLogStub): split out some of the
4804 IStatusLog methods into an Interface that is implemented by "stub"
4805 logs, for which all the actual text chunks are on disk (in the
4806 pickled Build instance). To show the log contents, you must first
4807 adapt the stub log to a full IStatusLog object.
4809 * buildbot/status/builder.py (LogFileStub): create separate stub
4810 log objects, which can be upgraded to a real one if necessary.
4811 (LogFile): make them persistable, and let them stubify themselves
4813 (BuildStepStatus): same
4815 (BuildStatus.saveYourself): save the whole build out to disk
4816 (BuilderStatus): make it persistable
4817 (BuilderStatus.saveYourself): save the builder to disk
4818 (BuilderStatus.addFullBuildToCache): implement two caches which
4819 hold Build objects: a small one which holds full Builds, and a
4820 larger one which holds "stubbed" Builds (ones with their LogFiles
4821 turned into LogFileStubs). This reduces memory usage by the
4822 buildmaster by not keeping more than a few (default is 2) whole
4823 build logs in RAM all the time.
4824 (BuilderStatus.getBuild): rewrite to pull from disk (through the
4826 (BuilderStatus.eventGenerator): rewrite since .builds went away
4827 (BuilderStatus.buildStarted): remove the .builds array. Add the
4828 build to the "full" cache when it starts.
4829 (BuilderStatus._buildFinished): save the build to disk when it
4831 (Status): give it a basedir (same as the BuildMaster's basedir)
4832 where the builder pickles can be saved
4833 (Status.builderAdded): create the BuilderStatus ourselves, by
4834 loading a pickle from disk (or creating a new instance if there
4835 was none on disk). Return the BuilderStatus so the master can glue
4836 it into the new Builder object.
4838 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
4839 all BuilderStatuses to save themselves out to disk. This is in
4840 lieu of saving anything important in the main Application pickle
4841 (the -shutdown.tap file).
4842 (BuildMaster.__init__): give Status() a basedir for its files
4843 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
4844 to get the BuilderStatus, then give it to the Builder (instead of
4845 doing it the other way around). It's ok if the status announces
4846 the new Builder before it's really ready, as the outside world can
4847 only see the BuilderStatus object anyway (and it is ready before
4848 builderAdded returns). Use the builder's "builddir" (which
4849 normally specifies where the slave will run the builder) as the
4850 master's basedir (for saving serialized builds).
4852 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
4853 coerce the logfile to IStatusLog before trying to get the text
4854 chunks out of it. This will pull the full (non-stubified) Build in
4855 from disk if necessary.
4856 (TextLog): fix the adapter registration
4858 * buildbot/test/test_control.py (Force.setUp): create the basedir
4859 * buildbot/test/test_web.py: same
4860 * buildbot/test/test_vc.py (SetupMixin.setUp): same
4861 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
4862 * buildbot/test/test_run.py (Run.testMaster): same
4863 (Status.setUp): same
4865 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
4867 * buildbot/status/html.py (Waterfall.__init__): store actual
4868 allowForce flag passed in rather than using True for everyone;
4869 make sure setting it to False doesn't cause a NameError
4871 (StatusResourceBuilder.__init__) add the builder name to the page
4873 (StatusResourceBuilder.body) move HTML generation for a name/value
4874 row into a helper method (StatusResourceBuilder.make_row); only
4875 generate the "Force Build" form if allowForce was True and the
4876 slave is connected. Use class attributes in the generated HTML to
4877 spread a little CSS-joy.
4879 2004-09-28 Brian Warner <warner@lothar.com>
4881 * buildbot/process/step_twisted.py (Trial.createSummary): fix
4882 warning-scanner to not ignore things like
4883 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
4885 * buildbot/status/html.py (StatusResource.control): add some
4886 class-level values for .control in an attempt to make upgrading
4889 * buildbot/util.py (ComparableMixin): survive missing attributes,
4890 such as when a class is modified and we're comparing old instances
4893 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
4894 failure handling, remove a redundant try/except block. Don't
4895 return the full traceback to the IRC channel.
4896 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
4897 error messages. Get ETA properly.
4899 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
4900 the reason, since (at least) IRC message will have <> in them.
4901 (StatusResourceBuilder.__init__): take an IBuilderControl
4902 (StatusResourceBuilder.force): use the IBuilderControl we get in
4903 the constructor instead of trying to make our own. Catch the
4904 new exceptions and ignore them for now (until we make an
4905 intermediate web page where we could show the error message)
4906 (StatusResource): create with an IControl, use it to give an
4907 IBuilderControl to all children
4908 (Waterfall): take an allowForce= option, pass an IControl object
4909 to StatusResource if it is True
4911 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
4913 * buildbot/master.py (BotPerspective.perspective_forceBuild):
4914 catch new exceptions and return string forms
4916 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
4917 * buildbot/process/builder.py (Builder.forceBuild): raise them
4918 * buildbot/test/test_control.py (Force.testNoSlave): new test
4919 (Force.testBuilderInUse): same
4922 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
4924 * buildbot/test/test_run.py: use IControl
4925 * buildbot/test/test_vc.py: same
4927 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
4928 to use IControl. Still offline.
4929 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
4931 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
4932 who=None so periodic builds don't send out status mail
4933 (Builder.forceBuild): include reason in the log message
4934 (BuilderControl.forceBuild): rename 'name' to 'who'
4936 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
4937 'who' parameter, but make it None by default so builds forced by
4938 slave admins don't cause status mail to be sent to anybody
4939 (BotMaster.forceBuild): same. this method is deprecated.
4940 (DebugPerspective.perspective_forceBuild): same, use IControl.
4941 (DebugPerspective.perspective_fakeChange): use IControl..
4942 (Dispatcher.requestAvatar): .. so don't set .changemaster
4944 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4945 parameter to avoid confusion with the name of the builder
4948 * buildbot/status/mail.py: refine comment about needing 2.3
4950 * buildbot/status/html.py: move all imports to the top
4952 * buildbot/test/test_control.py: test new interfaces
4953 * buildbot/test/test_run.py (Status): handle new interfaces
4954 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4956 * buildbot/process/base.py (BuildControl): implement IBuildControl
4957 and its lonely getStatus() method
4959 * buildbot/process/builder.py (BuilderControl): implement
4960 IBuilderControl, obtained by adapting the Builder instance
4961 (Builder.startBuild): return a BuilderControl instead of a
4962 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4963 accomplish the same thing.
4965 * buildbot/master.py: move all import statements to the top
4966 (Control): implement IControl, obtained by adapting the
4967 BuildMaster instance.
4969 * buildbot/interfaces.py: add IControl, IBuilderControl, and
4970 IBuildControl. These are used to force builds. Eventually they
4971 will provide ways to reconfigure the Builders, pause or abandon a
4972 Build, and perhaps control the BuildMaster itself.
4974 2004-09-26 Brian Warner <warner@lothar.com>
4976 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4977 ends up comparing us against something without a .__class__
4979 2004-09-24 Brian Warner <warner@lothar.com>
4981 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4984 * Makefile: add 'deb-snapshot' target, to create a timestamped
4987 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4989 2004-09-23 Brian Warner <warner@lothar.com>
4991 * buildbot/__init__.py (version): move version string here
4992 * setup.py: get version string from buildbot.version
4993 * buildbot/status/html.py (WaterfallStatusResource.body): add
4994 buildbot version to the page footer
4995 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4998 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4999 slaves, let the second know where the first one is coming from
5000 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
5001 see our exceptions. It would be nice if there were a way to just
5002 send them the exception type and value, not the full traceback.
5005 * buildbot/status/mail.py (MailNotifier): add a new argument
5006 sendToInterestedUsers=, which can be set to False to disable the
5007 usual send-to-blamelist behavior.
5008 (top): handle python-2.2 which has no email.MIMEMultipart
5009 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
5010 (MailNotifier.disownServiceParent): unsubscribe on removal
5012 * buildbot/test/test_status.py (Mail.testBuild2): test it
5015 * buildbot/status/progress.py (Expectations.wavg): tolerate
5016 current=None, which happens when steps start failing badly
5017 * buildbot/test/test_status.py (Progress.testWavg): test for it
5019 * buildbot/process/step.py (SVN.startVC): when the (old) slave
5020 doesn't understand args['revision'], emit a warning instead of
5021 bailing completely. Updating to -rHEAD is probably close enough.
5023 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
5025 * buildbot/test/test_status.py: at least import bb.status.client
5026 even if we don't have any test coverage for it yet
5028 * contrib/svn_buildbot.py: don't require python2.3
5029 (main): wait, do require it (for sets.py), but explain how to
5030 make it work under python2.2
5032 2004-09-23 Brian Warner <warner@lothar.com>
5034 * contrib/svn_buildbot.py: include the revision number in the Change
5036 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
5037 using util.now() because FreshCVS is a realtime service
5039 * buildbot/status/event.py: delete dead code
5040 * buildbot/process/step.py: don't import dead Event class
5041 * buildbot/process/step_twisted.py: same
5042 * buildbot/status/builder.py: same
5043 * buildbot/status/client.py: same
5045 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
5047 * buildbot/changes/changes.py (Change): set .when from an __init__
5048 argument (which defaults to now()), rather than having
5049 ChangeMaster.addChange set it later.
5050 (ChangeMaster.addChange): same
5052 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
5053 (parseSyncmail): same. Just use util.now() for now.
5054 (parseBonsaiMail): parse the timestamp field for when=
5056 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
5057 instead of setting .when after the fact
5061 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
5062 results when the target project uses retrial. Still under
5064 * buildbot/test/test_trial.py: same
5066 2004-09-21 Brian Warner <warner@lothar.com>
5068 * buildbot/status/mail.py (MailNotifier.__init__): include
5069 success/warnings/failure in the Subject line
5070 (MailNotifier.buildMessage): add the buildbot's URL to the body,
5071 use step.logname for the addLogs=True attachment filenames
5072 * buildbot/test/test_status.py (Mail): test Subject lines
5073 (Mail.testLogs): test attachment filenames
5075 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
5076 accept a 'who' argument from the debug tool
5077 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
5078 * contrib/debug.glade: add text box to set 'who'
5080 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
5081 .getBuilderName with .getBuilder().getName(), more flexible
5082 (IStatusLog.getName): logs have short names, but you can prefix
5083 them with log.getStep().getName() to make them more useful
5084 * buildbot/status/builder.py: same
5085 * buildbot/status/client.py: same
5086 * buildbot/status/html.py: same
5087 * buildbot/test/test_run.py (Status.testSlave): same
5088 * buildbot/process/step.py: tweak logfile names
5090 * buildbot/status/mail.py (MailNotifier): add lookup, change
5091 argument to extraRecipients. The notifier is now aimed at sending
5092 mail to the people involved in a particular build, with additional
5093 constant recipients as a secondary function.
5095 * buildbot/test/test_status.py: add coverage for IEmailLookup,
5096 including slow-lookup and failing-lookup. Make sure the blamelist
5097 members are included.
5099 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
5100 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
5101 (IBuildStatus.getInterestedUsers): new method
5102 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
5103 * buildbot/status/client.py (remote_getResponsibleUsers): same
5104 * buildbot/status/html.py (StatusResourceBuild.body): same
5105 * buildbot/test/test_run.py (Status.testSlave): same
5107 2004-09-20 Brian Warner <warner@lothar.com>
5109 * docs/users.xhtml: update concepts
5111 * Makefile: add a convenience makefile, for things like 'make
5112 test'. It is not included in the source tarball.
5114 2004-09-16 Brian Warner <warner@lothar.com>
5116 * NEWS: mention /usr/bin/buildbot, debian/*
5118 * debian/*: add preliminary debian packaging. Many thanks to
5119 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
5120 it considerably since it left their hands, I am responsible for
5121 all breakage that's resulted.
5123 * bin/buildbot: create a top-level 'buildbot' command, to be
5124 installed in /usr/bin/buildbot . For now it's just a simple
5125 frontend to mktap/twistd/kill, but eventually it will be the entry
5126 point to the 'try' command and also a status client. It is also
5127 intended to support the upcoming debian-packaging init.d scripts.
5128 * buildbot/scripts/runner.py: the real work is done here
5129 * buildbot/scripts/__init__.py: need this too
5130 * buildbot/scripts/sample.cfg: this is installed in new
5131 buildmaster directories
5132 * setup.py: install new stuff
5134 2004-09-15 Brian Warner <warner@lothar.com>
5136 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
5137 'file:' schema (the version shipped with OS-X was built without the
5139 (SetupMixin.tearDown): stop the goofy twisted.web timer which
5140 updates the log-timestamp, to make sure it isn't still running after
5143 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
5144 values to the config file.
5145 * docs/examples/hello.cfg: add examples
5146 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
5147 * buildbot/status/builder.py (Status.getProjectURL): implement them
5148 * buildbot/master.py (BuildMaster.loadConfig): set them from config
5149 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
5150 * buildbot/status/html.py (WaterfallStatusResource): display them
5153 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
5154 certain error cases don't suffer a secondary exception.
5155 (top): Skip tests if the corresponding VC tool is not installed.
5157 * buildbot/process/factory.py (Trial): introduce separate
5158 'buildpython' and 'trialpython' lists, since trialpython=[] is
5159 what you want to invoke /usr/bin/python, whereas ./setup.py is
5160 less likely to be executable. Add env= parameter to pass options
5161 to test cases (which is how I usually write tests, I don't know if
5162 anyone else does it this way).
5164 * buildbot/process/step_twisted.py (Trial): handle python=None.
5165 Require 'testpath' be a string, not a list. Fix tests= typo.
5166 (Trial.start): sanity-check any PYTHONPATH value for stringness.
5168 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
5169 way to deal with the possibility of removing the disconnect notify
5171 (CVS): add a 'login' parameter to give a password to 'cvs login',
5172 commonly used with pserver methods (where pw="" or pw="guest")
5174 * buildbot/slave/commands.py (SourceBase): move common args
5175 extraction and setup() to __init__, so everything is ready by the
5176 time setup() is called
5177 (CVS.start): call 'cvs login' if a password was supplied
5178 (ShellCommand): special-case PYTHONPATH: prepend the master's
5179 value to any existing slave-local value.
5181 * buildbot/process/builder.py (Builder.updateBigStatus): if we
5182 don't have a remote, mark the builder as Offline. This whole
5183 function should probably go away and be replaced by individual
5185 (Builder.buildFinished): return the results to the build-finished
5186 deferred callback, helps with testing
5188 2004-09-14 Brian Warner <warner@lothar.com>
5190 * buildbot/test/test_vc.py: put all the repositories needed to run
5191 the complete tests into a single small (1.3MB) tarball, so I can
5192 make that tarball available on the buildbot web site. Test HTTP
5193 access (for Arch and Darcs) by spawning a temporary web server
5194 while the test runs.
5196 * docs/users.xhtml: new document, describe Buildbot's limited
5197 understanding of different human users
5199 * buildbot/test/test_vc.py: rearrange test cases a bit
5201 * buildbot/process/step_twisted.py (Trial): handle testpath=
5202 * buildbot/process/factory.py (Trial): update to use step.Trial
5204 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
5206 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
5207 the overall build text (which gives you 'failed 2 tests' rather
5209 (BuildStepStatus.text2): default to [], not None
5211 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
5214 2004-09-12 Brian Warner <warner@lothar.com>
5216 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
5217 log the whole exception if it's just an AttributeError (old slave)
5219 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
5220 so (e.g.) sub-commands can be run in the right directory.
5221 (ShellCommand.start): accept an optional errorMessage= argument
5222 to make life easier for SVN.start
5223 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
5225 (ShellCommand.start): move ['dir'] compatibility hack..
5226 (RemoteShellCommand.start): .. to here so everyone can use it
5228 * buildbot/process/step_twisted.py (Trial): use .workdir
5230 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
5231 text displayed when debuild fails completely
5232 (Trial): snarf _trial_temp/test.log from the slave and display it
5234 2004-09-11 Brian Warner <warner@lothar.com>
5236 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
5238 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
5239 set to 'twisted', so --recurse can find twisted/web/test/*, etc
5241 * buildbot/process/step.py (ShellCommand): call .createSummary
5242 before .evaluateCommand instead of the other way around. This
5243 makes it slightly easier to count warnings and then use that to
5244 set results=WARNINGS
5245 * buildbot/process/step_twisted.py: cosmetic, swap the methods
5247 * buildbot/process/base.py (Build.buildFinished): update status
5248 before doing progress. It's embarrassing for the build to be stuck
5249 in the "building" state when an exceptions occurs elsewhere..
5251 * buildbot/status/progress.py (Expectations.expectedBuildTime):
5252 python2.2 doesn't have 'sum'
5254 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
5255 to prevent clients from accidentally sorting it
5257 * buildbot/master.py (Manhole): add username/password
5258 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
5259 c['manholePort'], deprecate old usage
5260 * docs/config.xhtml: document c['manhole']
5261 * docs/examples/hello.cfg: show example of using a Manhole
5264 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
5265 pretend the slave is up to date
5267 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
5268 the module, overlaps with 'log', the local variable
5270 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
5272 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
5273 new method to let Steps find out the version of their
5274 corresponding SlaveCommand.
5275 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
5276 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
5277 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
5279 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
5280 (Arch.startVC): same
5281 (P4Sync.startVC): same
5283 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
5284 Deferred so we can catch errors in remote_startCommand
5285 (RemoteShellCommand.start): same
5287 * docs/examples/twisted_master.cfg: update sample config file
5289 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
5290 after connectionMade() is called, not before. Close stdin at that
5293 * buildbot/process/process_twisted.py: update to use Trial, clean
5294 up argument passing (move to argv arrays instead of string
5297 * buildbot/process/step_twisted.py (Trial): new step to replace
5298 RunUnitTests, usable by any trial-using project (not just
5299 Twisted). Arguments have changed, see the docstring for details.
5301 * buildbot/process/base.py (Build.startBuild): this now returns a
5302 Deferred. Exceptions that occur during setupBuild are now
5303 caught better and lead to fewer build_status weirdnesses, like
5304 finishing a build that was never started.
5305 (Build.buildFinished): fire the Deferred instead of calling
5306 builder.buildFinished directly. The callback argument is this
5307 Build, everything else can be extracted from it, including the
5308 new build.results attribute.
5309 * buildbot/process/builder.py (Builder.startBuild): same
5310 (Builder.buildFinished): same, extract results from build
5312 * buildbot/process/step.py (ShellCommands): remove dead code
5314 2004-09-08 Brian Warner <warner@lothar.com>
5316 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
5317 doesn't try to use the leftover patched workdir
5318 (SourceStamp): test source-stamp computation for CVS and SVN
5320 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
5321 patched workdir ('touch .buildbot-patched') so we don't try to
5323 (SourceBase.start): add ['revision'] for all Source steps
5324 (CVS): change args: use ['branch'] for -r, remove ['files']
5325 (CVS.buildVC): fix revision/branch stuff
5326 (SVN): add revision stuff
5328 * buildbot/process/step.py (BuildStep.__init__): reject unknown
5329 kwargs (except 'workdir') to avoid silent spelling errors
5330 (ShellCommand.__init__): same
5331 (Source): new base class for CVS/SVN/etc. Factor out everything
5332 common, add revision computation (perform the checkout with a -D
5333 DATE or -r REVISION that gets exactly the sources described by the
5334 last Change), overridable with step.alwaysUseLatest. Add patch
5335 handling (build.getSourceStamp can trigger the use of a base
5336 revision and a patch).
5337 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
5338 * docs/steps.xhtml: update docs
5339 * docs/source.xhtml: mention .checkoutDelay
5340 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
5342 * buildbot/process/base.py (Build.setSourceStamp): add a
5343 .sourceStamp attribute to each Build. If set, this indicates that
5344 the build should be done with something other than the most
5345 recent source tree. This will be used to implement "try" builds.
5346 (Build.allChanges): new support method
5347 (Build.lastChangeTime): remove, functionality moved to Source steps
5348 (Build.setupBuild): copy the Step args before adding ['workdir'],
5349 to avoid modifying the BuildFactory (and thus triggering spurious
5353 * buildbot/status/html.py: rename s/commits/changes/
5354 (StatusResourceChanges): same
5355 (CommitBox.getBox): same, update URL
5356 (WaterfallStatusResource): same
5357 (StatusResource.getChild): same
5359 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
5360 * contrib/debug.glade: add optional 'revision' to the fakeChange
5362 * buildbot/changes/changes.py (html_tmpl): display .revision
5363 (ChangeMaster.addChange): note .revision in log
5364 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
5365 accept a ['revision'] attribute
5367 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
5369 * buildbot/master.py (BotMaster.getPerspective): update the
5370 .connected flag in SlaveStatus when it connects
5371 (BotMaster.detach): and when it disconnects
5372 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
5373 (BuildMaster.loadConfig_Builders): walk old list correctly
5375 * buildbot/test/test_config.py: fix prefix= usage
5377 2004-09-06 Brian Warner <warner@lothar.com>
5381 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
5382 poll a P4 depot looking for recent changes. Thanks to Dave
5383 Peticolas for the contribution. Probably needs some testing after
5386 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
5387 requires manual client setup for each buildslave. Rather
5388 experimental. Thanks again to Dave Peticolas.
5389 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
5391 * buildbot/changes/changes.py (Change): add a .revision attribute,
5392 which will eventually be used to generate source-stamp values.
5394 * buildbot/process/step.py (RemoteCommand.start): use
5395 notifyOnDisconnect to notice when we lose the slave, then treat it
5396 like an exception. This allows LogFiles to be closed and the build
5397 to be wrapped up normally. Be sure to remove the disconnect
5398 notification when the step completes so we don't accumulate a
5399 bazillion such notifications which will fire weeks later (when the
5400 slave finally disconnects normally). Fixes SF#915807, thanks to
5401 spiv (Andrew Bennetts) for the report.
5402 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
5403 really isn't Logged- specific
5404 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
5405 header, since it's almost always going to be appended to an
5407 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
5408 update test to handle use of notifyOnDisconnect
5410 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
5411 don't clear .ETA and .currentBuild when going offline, let the
5412 current build clean up after itself
5414 * buildbot/process/builder.py (Builder.detached): wait a moment
5415 before doing things like stopping the current build, because the
5416 current step will probably notice the disconnect and cleanup the
5418 * buildbot/test/test_run.py (Status.tearDown): update test to
5419 handle asynchronous build-detachment
5421 * buildbot/process/base.py (Build.stopBuild): minor shuffles
5423 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
5424 hush a debug message
5426 2004-09-05 Brian Warner <warner@lothar.com>
5428 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
5429 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
5430 kernels do this: the fcntl module has the F_NOTIFY constant, but
5431 the kernel itself doesn't support the operation. Thanks to Olly
5432 Betts for spotting the problem.
5434 * buildbot/process/step.py (Darcs): new source-checkout command
5435 (Arch): new source-checkout command
5436 (todo_P4): fix constructor syntax, still just a placeholder
5437 * buildbot/test/test_vc.py (VC.testDarcs): test it
5438 (VC.testDarcsHTTP): same, via localhost HTTP
5440 (VC.testArchHTTP): same
5441 * NEWS: mention new features
5443 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
5444 which tells the step to stash stdout text locally (in .stdout).
5445 Slave-side Commands can use this to make decisions based upon the
5446 output of the the ShellCommand (not just the exit code).
5447 (Darcs): New source-checkout command
5448 (Arch): New source-checkout command, uses .keepStdout in one place
5449 where it needs to discover the archive's default name.
5451 * docs/steps.xhtml: Document options taken by Darcs and Arch.
5452 * docs/source.xhtml: add brief descriptions of Darcs and Arch
5453 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
5455 * buildbot/process/step.py (ShellCommand.describe): add an
5456 alternate .descriptionDone attribute which provides descriptive
5457 text when the step is complete. .description can be ["compiling"],
5458 for use while the step is running, then .descriptionDone can be
5459 ["compile"], used alone when the step succeeds or with "failed" when
5460 it does not. Updated other steps to use the new text.
5461 * buildbot/process/step_twisted.py: same
5462 * buildbot/test/test_run.py: update tests to match
5464 2004-08-30 Brian Warner <warner@lothar.com>
5466 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
5467 (CVS.__init__): send 'patch' argument to slave
5468 (CVS.start): don't create the LoggedRemoteCommand until start(),
5469 so we can catch a .patch added after __init__
5470 (SVN.__init__): add 'patch' to SVN too
5473 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
5474 argument, to let commands push data into the process' stdin pipe.
5475 Move usePTY to a per-instance attribute, and clear it if 'stdin'
5476 is in use, since closing a PTY doesn't really affect the process
5477 in the right way (in particular, I couldn't run /usr/bin/patch
5479 (SourceBase.doPatch): handle 'patch' argument
5481 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
5484 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
5485 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
5487 * buildbot/master.py (BotPerspective.got_commands): get command
5488 versions from slave, give to each builder
5489 * buildbot/process/builder.py (Builder.attached): stash slave
5490 command versions in .remoteCommands
5492 * docs/steps.xhtml: bring docs in-line with reality
5494 * buildbot/process/step.py (CVS.__init__): more brutal
5495 compatibility code removal
5496 (SVN.__init__): same
5498 * buildbot/slave/commands.py (SlaveShellCommand): update docs
5499 (SlaveShellCommand.start): require ['workdir'] argument, remove
5500 the ['dir'] fallback (compatibility will come later)
5501 (SourceBase): update docs
5502 (SourceBase.start): remove ['directory'] fallback
5505 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
5506 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5507 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
5509 * buildbot/process/step.py (RemoteShellCommand.__init__): add
5510 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
5511 code.. I will figure out 0.5.0-compatibility hooks later)
5513 2004-08-30 Brian Warner <warner@lothar.com>
5515 * buildbot/process/process_twisted.py: rewrite in terms of new
5516 BuildFactory base class. It got significantly shorter. Yay
5519 * buildbot/process/step_twisted.py (HLint.start): fix to make it
5520 work with the new "self.build isn't nailed down until we call
5521 step.start()" scheme: specifically, __init__ is called before the
5522 build has decided on which Changes are going in, so we don't scan
5523 build.allFiles() for .xhtml files until start()
5524 (HLint.commandComplete): use getText(), not getStdout()
5525 (RunUnitTests.start): same: don't use .build until start()
5526 (RunUnitTests.describe): oops, don't report (None) when using
5528 (RunUnitTests.commandComplete): use getText()
5529 (RunUnitTests.createSummary): same
5530 (BuildDebs.commandComplete): same
5532 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
5533 set args['command'] until start(), since our BuildStep is allowed
5534 to change their mind up until that point
5535 (TreeSize.commandComplete): use getText(), not getStdout()
5537 * docs/examples/twisted_master.cfg: update to current standards
5539 * docs/factories.xhtml: update
5540 * buildbot/process/factory.py: implement all the common factories
5541 described in the docs. The Trial factory doesn't work yet, and
5542 I've probably broken all the process_twisted.py factories in the
5543 process. There are compatibility classes left in for things like
5544 the old BasicBuildFactory, but subclasses of them are unlikely to
5546 * docs/examples/glib_master.cfg: use new BuildFactories
5547 * docs/examples/hello.cfg: same
5549 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
5550 explicit 'workdir' args
5552 * buildbot/process/base.py (BuildFactory): move factories to ..
5553 * buildbot/process/factory.py (BuildFactory): .. here
5554 * buildbot/process/process_twisted.py: handle move
5555 * buildbot/test/test_config.py: same
5556 * buildbot/test/test_run.py: same
5557 * buildbot/test/test_steps.py: same
5558 * buildbot/test/test_vc.py: same
5559 * docs/factories.xhtml: same
5561 * NEWS: mention config changes that require updating master.cfg
5563 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
5564 argument to all steps that weren't given one already, pointing at
5565 the "build/" directory.
5567 * docs/examples/hello.cfg: remove explicit 'workdir' args
5569 * docs/factories.xhtml: document standard BuildFactory clases,
5570 including a bunch which are have not yet been written
5572 2004-08-29 Brian Warner <warner@lothar.com>
5574 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
5575 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
5576 buildbot.status.builder so they aren't quite so internal
5577 * buildbot/process/base.py, buildbot/process/builder.py: same
5578 * buildbot/process/maxq.py, buildbot/process/step.py: same
5579 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
5580 * buildbot/status/mail.py, buildbot/test/test_run.py: same
5581 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
5583 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
5584 to handle new getLogs()-returns-list behavior
5585 (StatusResourceBuildStep.getChild): same
5586 (StepBox.getBox): same
5587 (WaterfallStatusResource.phase0): same
5589 * docs/source.xhtml: document how Buildbot uses version-control
5590 systems (output side: how we get source trees)
5591 * docs/changes.xhtml: rename from sources.xhtml, documents VC
5592 systems (input side: how we learn about Changes)
5594 * buildbot/master.py (Manhole): use ComparableMixin
5595 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
5596 * buildbot/changes/mail.py (MaildirSource): same
5597 * buildbot/status/client.py (PBListener): same
5598 * buildbot/status/html.py (Waterfall): same
5599 * buildbot/status/words.py (IRC): same
5601 * NEWS: start describing new features
5603 * buildbot/status/mail.py (MailNotifier): finish implementation.
5604 The message body is still a bit sparse.
5605 * buildbot/test/test_status.py (Mail): test it
5607 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
5608 and __hash__ methods I wind up adding everywhere. Specifically
5609 intended to support the buildbot config-file update scheme where
5610 we compare, say, the old list of IStatusTargets against the new
5611 one and don't touch something which shows up on both lists.
5612 * buildbot/test/test_util.py (Compare): test case for it
5614 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
5615 return a list instead of a dict
5616 (IBuildStepStatus.getLogs): same. The idea is that steps create
5617 logs with vaguely unique names (although their uniqueness is not
5618 guaranteed). Thus a compilation step should create its sole
5619 logfile with the name 'compile', and contribute it to the
5620 BuildStatus. If a step has two logfiles, try to create them with
5621 different names (like 'test.log' and 'test.summary'), and only
5622 contribute the important ones to the overall BuildStatus.
5623 * buildbot/status/builder.py (Event.getLogs): same
5624 (BuildStepStatus): fix default .text and .results
5625 (BuildStepStatus.addLog): switch to list-like .getLogs()
5626 (BuildStepStatus.stepFinished): same
5627 (BuildStatus.text): fix default .text
5628 (BuildStatus.getLogs): temporary hack to return all logs (from all
5629 child BuildStepStatus objects). Needs to be fixed to only report
5630 the significant ones (as contributed by the steps themselves)
5631 * buildbot/test/test_run.py: handle list-like .getLogs()
5632 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5634 2004-08-28 Brian Warner <warner@lothar.com>
5636 * buildbot/process/builder.py (Builder.attached): serialize the
5637 attachment process, so the attach-watcher isn't called until the
5638 slave is really available. Add detached watchers too, which makes
5641 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
5643 * buildbot/test/test_swap.py: remove dead code
5645 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
5646 (ShellCommand.start): treat errors in _startCommand/spawnProcess
5647 sort of as if the command being run exited with a -1. There may
5648 still be some holes in this scheme.
5649 (CVSCommand): add 'revision' tag to the VC commands, make sure the
5650 -r option appears before the module list
5651 * buildbot/process/step.py (CVS): add 'revision' argument
5653 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
5654 when sending updates or stepComplete messages to the master, since
5655 we don't currently care whether they arrive or not. When we revamp
5656 the master/slave protocol to really resume interrupted builds,
5657 this will need revisiting.
5658 (lostRemote): remove spurious print
5660 * buildbot/master.py (BotPerspective.attached): serialize the
5661 new-builder interrogation process, to make testing easier
5662 (BotMaster.waitUntilBuilderDetached): convenience function
5664 * buildbot/status/builder.py (BuilderStatus): prune old builds
5665 (BuildStatus.pruneSteps): .. and steps
5666 (BuildStepStatus.pruneLogs): .. and logs
5667 (BuilderStatus.getBuild): handle missing builds
5668 * buildbot/status/html.py (StatusResourceBuild.body): display build
5669 status in the per-build page
5670 (BuildBox.getBox): color finished builds in the per-build box
5672 2004-08-27 Brian Warner <warner@lothar.com>
5674 * buildbot/status/mail.py (MailNotifier): new notification class,
5677 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
5678 variants of a common base class which handles all the mode= logic
5680 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
5682 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
5684 2004-08-26 Brian Warner <warner@lothar.com>
5686 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
5689 * buildbot/test/test_run.py: update to new Logfile interface, new
5690 buildbot.slave modules
5691 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
5693 * MANIFEST.in: new sample config file
5694 * docs/examples/hello.cfg: same
5696 * buildbot/process/step_twisted.py: remove dead import
5698 * buildbot/process/step.py (RemoteCommand.run): catch errors
5700 (RemoteCommand.remote_update): ignore updates that arrive after
5702 (RemoteCommand.remote_complete): ignore duplicate complete msgs
5703 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
5704 the responsibilities of the subclass's methods
5705 (BuildStep.failed): catch errors during failure processing
5706 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
5707 (CVS): move to a mode= argument (described in docstring), rather
5708 than the ungainly clobber=/export=/copydir= combination.
5709 (SVN): add mode= functionality to SVN too
5710 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
5712 * buildbot/process/base.py (Build.startNextStep): catch errors
5713 during s.startStep()
5715 * buildbot/clients/base.py: update to new PB client interface.
5716 gtkPanes is still broken
5718 * buildbot/bot.py, buildbot/slavecommand.py: move to..
5719 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
5720 * setup.py: add buildbot.slave module
5721 * buildbot/bb_tap.py: handle move
5722 * buildbot/slave/registry.py: place to register commands, w/versions
5723 * buildbot/slave/bot.py: major simplifications
5724 (SlaveBuilder.remote_startCommand): use registry for slave commands,
5725 instead of a fixed table. Eventually this will make the slave more
5726 extensible. Use 'start' method on the command, not .startCommand.
5727 Fix unsafeTracebacks handling (I think).
5728 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
5729 helper class with a .start method that returns a Deferred.
5730 SlaveShellCommand is the form reached by the buildmaster. Commands
5731 which use multiple ShellCommands can just chain them as Deferreds,
5732 with some helper methods in Command (_abandonOnFailure and
5733 _checkAbandoned) to bail on rc!=0.
5734 (CVSCommand): prefer new mode= argument
5735 (SVNFetch): add mode= argument
5737 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
5738 put a useful reason string on the build
5740 * buildbot/status/builder.py (LogFile): do LogFile right: move the
5741 core functionality into an IStatusLog object
5742 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
5743 * buildbot/status/html.py (TextLog): HTML-rendering goes here
5744 (StatusResourceBuild.body): use proper accessor methods
5745 * buildbot/status/client.py (RemoteLog): PB-access goes here
5746 (StatusClientPerspective.perspective_subscribe): add "full" mode,
5747 which delivers log contents too
5748 (PBListener.__cmp__): make PBListeners comparable, thus removeable
5749 * buildbot/status/event.py: remove old Logfile completely
5751 * buildbot/interfaces.py (IStatusLog.subscribe): make the
5752 subscription interface for IStatusLog subscriptions just like all
5753 other the status subscriptions
5754 (IStatusReceiver.logChunk): method called on subscribers
5756 2004-08-24 Brian Warner <warner@lothar.com>
5758 * buildbot/process/builder.py (Builder._pong): oops, ping response
5759 includes a result (the implicit None returned by remote_print).
5760 Accept it so the _pong method handles the response correctly.
5762 2004-08-06 Brian Warner <warner@lothar.com>
5764 * buildbot/test/test_config.py: update IRC, PBListener tests
5766 * buildbot/status/client.py (StatusClientPerspective): total
5767 rewrite to match new IStatus interfaces. New subscription scheme.
5768 There are still a few optimizations to make (sending down extra
5769 information with event messages so the client doesn't have to do a
5770 round trip). The logfile-retrieval code is probably still broken.
5771 Moved the PB service into its own port, you can no longer share a
5772 TCP socket between a PBListener and, say, the slaveport (this
5773 should be fixed eventually).
5774 * buildbot/clients/base.py (Client): revamp to match. still needs
5775 a lot of work, but basic event reporting works fine. gtkPanes is
5778 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
5779 instance talks to a single irc server. Threw out all the old
5780 multi-server handling code. Still need to add back in
5781 builder-control (i.e. "force build")
5783 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
5784 more random text to the as-yet-unreachable per-step page
5786 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
5787 rename to stepETAUpdate
5788 (BuildStatus.subscribe): add build-wide ETA updates
5789 (BuilderStatus.getState): remove more cruft
5790 (BuilderStatus.getCurrentBuild): remove more cruft
5791 (BuilderStatus.buildStarted): really handle tuple-subscription
5792 * buildbot/test/test_run.py (Status.testSlave): handle the
5793 stepETAUpdate rename
5795 * buildbot/master.py (BuildMaster): don't add a default
5796 StatusClientService. Don't add a default IrcStatusFactory. Both
5797 are now added through c['status'] in the config file. c['irc'] is
5798 accepted for backwards compatibility, the only quirk is you cannot
5799 use c['irc'] to specify IRC servers on ports other than 6667.
5801 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
5802 (IStatusReceiver.buildStarted): allow update-interval on subscribe
5803 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
5804 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
5807 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
5808 the buildmaster to re-read its config file
5811 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
5812 find out the port our server is running on
5813 (WebTest.test_webPathname_port): same
5815 * buildbot/test/test_config.py (testWebPortnum): test it
5816 (testWebPathname): ditto
5818 * docs/config.xhtml: document new c['status'] configuration option
5820 * buildbot/status/html.py (Waterfall): new top-level class which
5821 can be added to c['status']. This creates the Site as well as the
5822 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
5823 reachable as .parent, for everything.
5825 * buildbot/master.py (Manhole): make it a normal service Child
5826 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
5827 webPathname. It will eventually replace c['irc'] and the implicit
5828 PB listener as well. c['webPortnum'] and c['webPathname'] are left
5829 in as (deprecated) backward compatibility hooks for now.
5832 * buildbot/process/builder.py (Builder.buildFinished): don't
5833 inform out builder_status about a finished build, as it finds out
5834 through its child BuildStatus object
5836 * buildbot/status/html.py: extensive revamp. Use adapters to make
5837 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
5838 have both starting and finishing times and adjust the waterfall
5839 display accordingly, using spacers if necessary. Use SlaveStatus
5840 to get buildslave info.
5841 (StatusResourceBuildStep): new just-one-step resource, used to get
5842 logfiles. No actual href to it yet.
5844 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
5845 the time being, until I get the file-naming scheme right
5847 * buildbot/status/builder.py (Event): clean started/finished names
5848 (BuildStatus.isFinished): .finished is not None is the right test
5849 (BuildStatus.buildStarted): track started/finished times ourselves
5850 (BuilderStatus.getSlave): provide access to SlaveStatus object
5851 (BuilderStatus.getLastFinishedBuild): all builds are now in
5852 .builds, even the currently-running one. Accomodate this change.
5853 (BuilderStatus.eventGenerator): new per-builder event generator.
5854 Returns BuildStepStatus and BuildStatus objects, since they can
5855 both be adapted as necessary.
5856 (BuilderStatus.addEvent): clean up started/finished attributes
5857 (BuilderStatus.startBuild,finishBuild): remove dead code
5858 (SlaveStatus): new object to provide ISlaveStatus
5860 * buildbot/process/step.py (ShellCommand.getColor): actually
5861 return the color instead of setting it ourselves
5862 (CVS.__init__): pull .timeout and .workdir options out of
5863 **kwargs, since BuildStep will ignore them. Without this neither
5864 will be sent to the slave correctly.
5865 (SVN.__init__): same
5867 * buildbot/process/builder.py (Builder): move flags to class-level
5869 (Builder.attached): remove .remoteInfo, let the BotPerspective and
5870 SlaveStatus handle that
5872 * buildbot/process/base.py (Build.firstEvent): remove dead code
5873 (Build.stopBuild): bugfix
5875 * buildbot/changes/pb.py (PBChangeSource.describe): add method
5877 * buildbot/changes/changes.py (Change): add IStatusEvent methods
5878 (ChangeMaster.eventGenerator): yield Changes, since there are now
5879 Adapters to turn them into HTML boxes
5881 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
5882 (BotPerspective.attached): feed a SlaveStatus object
5883 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
5884 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
5886 * buildbot/interfaces.py: API additions
5887 (ISlaveStatus): place to get slave status
5889 2004-08-04 Brian Warner <warner@lothar.com>
5891 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
5892 the delay finishes, so the step is marked as SUCCESS
5894 * buildbot/test/test_run.py (Status.testSlave): cover more of
5895 IBuildStatus and IBuildStepStatus
5897 * buildbot/status/progress.py (StepProgress): move some flags to
5898 class-level attributes
5899 (StepProgress.remaining): if there are no other progress metrics
5900 to go by, fall back to elapsed time
5901 (StepProgress.setExpectations): take a dict of metrics instead of
5903 (BuildProgress.setExpectationsFrom): pull expectations from the
5904 Expectations, instead of having it push them to the BuildProgress
5905 (Expectations): move some flags to class-level attributes
5906 (Expectations.__init__): copy per-step times from the
5908 (Expectations.expectedBuildTime): new method for per-build ETA
5910 * buildbot/status/event.py (Logfile): move some flags to
5911 class-level attributes
5912 (Logfile.logProgressTo): better method name, let step set the
5913 progress axis name (instead of always being "output")
5915 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
5916 times directly, rather than depending upon the (possibly missing)
5917 .progress object. Use 'None' to indicate "not started/finished
5919 (BuildStepStatus.getExpectations): oops, return the full list of
5921 (BuilderStatus._buildFinished): append finished builds to .builds
5923 * buildbot/process/step.py (BuildStep): add separate .useProgress
5924 flag, since empty .progressMetrics[] still implies that time is a
5926 (CVS): set up the cmd in __init__, instead of waiting for start()
5928 * buildbot/process/base.py (Build.startBuild): disable the 'when'
5929 calculation, this will eventually turn into a proper sourceStamp
5930 (Build.setupBuild): tell the Progress to load from the Expectations,
5931 instead of having the Expectations stuff things into the Progress
5932 (Build.buildException): add a build-level errback to make sure the
5933 build's Deferred fires even in case of exceptions
5935 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
5937 * buildbot/process/builder.py (Builder.forceBuild): convey the
5938 reason instead of creating a fake Change
5940 * docs/examples/twisted_master.cfg: update to match reality
5942 * buildbot/test/test_config.py, buildbot/test/test_process.py:
5943 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5944 fix or remove broken/breaking tests
5946 * buildbot/status/event.py (Logfile.__len__): remove evil method
5948 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5949 missing .build, for test convenience
5951 * buildbot/process/step_twisted.py: import fixes
5953 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5955 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5956 .statusbag reference
5958 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5959 connection at shutdown, and stop it from reconnecting
5961 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5962 chase down remote-execution bugs
5964 * buildbot/process/step.py: more fixes, remove
5965 BuildStep.setStatus()
5966 * buildbot/status/builder.py: move setStatus() functionality into
5968 * buildbot/status/event.py: minor fixes
5970 2004-08-03 Brian Warner <warner@lothar.com>
5972 * buildbot/process/base.py, buildbot/process/builder.py
5973 * buildbot/process/step.py, buildbot/status/builder.py
5974 * buildbot/status/event.py, buildbot/test/test_run.py:
5975 fix status delivery, get a basic test case working
5976 * buildbot/master.py: finish implementing basic status delivery,
5977 temporarily disable HTML/IRC/PB status sources
5979 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5981 * buildbot/status/progress.py (BuildProgress): remove dead code
5983 * buildbot/interfaces.py
5984 * buildbot/process/base.py, buildbot/process/builder.py
5985 * buildbot/process/step.py, buildbot/process/step_twisted.py
5986 * buildbot/status/builder.py: Complete overhaul of the all
5987 status-delivery code, unifying all types of status clients (HTML,
5988 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5989 look like. This commit is a checkpointing of the work-in-progress:
5990 the input side is mostly done (Builders/Builds sending status
5991 to the BuilderStatus/BuildStatus objects), but the output side has
5992 not yet been started (HTML resources querying BuilderStatus
5993 objects). Things are probably very broken right now and may remain
5994 so for several weeks, I apologize for the disruption.
5996 * buildbot/status/event.py: add a setHTML method to use pre-rendered
5997 HTML as the log's contents. Currently used for exception tracebacks.
5998 * buildbot/status/progress.py: minor spelling changes
6000 2004-08-02 Brian Warner <warner@lothar.com>
6002 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
6003 in mozilla. Also added stylesheets copied from Twisted's docs.
6004 Remember that these files are meant to be run through Lore first.
6005 Thanks to Philipp Frauenfelder for the fixes.
6006 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
6007 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
6008 * docs/template.tpl: added a Lore template
6010 2004-07-29 Brian Warner <warner@lothar.com>
6012 * buildbot/interfaces.py: revamp status delivery. This is the
6013 preview: these are the Interfaces that will be provided by new
6014 Builder code, and to which the current HTML/IRC/PB status
6015 displayers will be adapted.
6017 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
6018 on the SlaveBuilder, not the Bot.
6019 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
6021 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
6022 set .usePTY on the FakeSlaveBuilder
6024 2004-07-25 Brian Warner <warner@lothar.com>
6026 * buildbot/changes/freshcvs.py: add some debug log messages
6027 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
6028 disabled 'setFilter' syntax
6029 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
6030 don't end with a slash
6032 * buildbot/process/base.py (Builder._pong_failed): add TODO note
6034 * setup.py: bump to 0.5.0+ while between releases
6036 2004-07-23 Brian Warner <warner@lothar.com>
6038 * setup.py (version): Releasing buildbot-0.5.0
6040 2004-07-23 Brian Warner <warner@lothar.com>
6042 * README: update for 0.5.0 release
6044 * NEWS: update for 0.5.0 release
6046 2004-07-22 Brian Warner <warner@lothar.com>
6048 * buildbot/slavecommand.py (ShellCommand): make usePTY a
6049 mktap-time configuration flag (--usepty=1, --usepty=0)
6050 * buildbot/bot.py: same
6052 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
6053 an 'info' directory being unwanted
6055 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
6056 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
6057 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
6058 and earlier), use a FreshCVSSourceOldcred instead.
6059 (test): simple test routine: connect to server, print changes
6061 * buildbot/changes/changes.py (Change.getTime): make it possible
6062 to print un-timestamped changes
6064 * buildbot/master.py (makeApp): delete ancient dead code
6065 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
6066 * buildbot/test/test_config.py (testFindConfigFile): test it
6068 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
6069 instead of win32 one
6072 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
6073 now takes a dictionary instead of a tuple. See docs/config.xhtml for
6076 * buildbot/process/base.py (Builder.__init__): change constructor
6077 to accept a dictionary of config data, rather than discrete
6078 name/slave/builddir/factory arguments
6080 * docs/examples/twisted_master.cfg: update to new syntax
6081 * docs/examples/glib_master.cfg: same
6082 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
6083 rough tests of the new syntax
6086 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
6087 to be an int, which means "run a web.distrib sub-server on a TCP
6088 port". This lets you publish the buildbot status page to a remote
6089 twisted.web server (using distrib.ResourceSubscription). Also
6090 rename the local attributes used to hold these web things so
6091 they're more in touch with reality.
6092 * buildbot/test/test_web.py: test webPortnum and webPathname
6093 * docs/config.xhtml: document this new use of webPathname
6095 * docs/config.xhtml: new document, slightly ahead of reality
6097 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
6098 'prefix' handling: treat it as a simple string to check with
6099 .startswith, instead of treating it as a directory. This allows
6100 sub-directories to be used. If you use prefix=, you should give it
6101 a string that starts just below the CVSROOT and ends with a slash.
6102 This prefix will be stripped from all filenames, and filenames
6103 which do not start with it will be ignored.
6105 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
6107 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
6108 and --exclude (inverse of --include). SVN post-commit hooks
6109 now have total control over which changes get sent to buildbot and which
6112 2004-07-10 Brian Warner <warner@lothar.com>
6114 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
6115 test case to match new API
6117 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
6118 which crashed HTML display when self.entries=[] (needed to
6119 distinguish between [], which means "no entries yet", and None,
6120 which means "the entries have been swapped out to disk, go fetch
6123 2004-07-04 Brian Warner <warner@lothar.com>
6125 * buildbot/process/step_twisted.py (countFailedTests): Count
6126 skips, expectedFailures, and unexpectedSuccesses. Start scanning
6127 10kb from the end because any import errors are wedged there and
6128 they would make us think the test log was unparseable.
6129 (RunUnitTests.finishStatus): add skip/todo counts to the event box
6131 2004-06-26 Brian Warner <warner@lothar.com>
6133 * buildbot/process/step_twisted.py (RemovePYCs): turn the
6134 delete-*.pyc command into an actual BuildStep, so we can label it
6136 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6137 (FullTwistedBuildFactory): same
6139 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
6141 * contrib/fakechange.py: Add an errback when sending the fake
6142 change, so we know it didn't work.
6144 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
6146 * buildbot/process/step_twisted.py: Delete *.pyc files before
6147 calling trial, so it doesn't catch any old .pyc files whose .py
6148 files have been moved or deleted.
6150 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
6151 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
6152 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
6153 instead of ["twisted.test"], so that the end result is "trial -R
6156 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
6157 regular expression to match filenames that should be ignored when
6158 changed. Also add a --revision parameter that specifies the
6159 revision to examine, which is useful for debugging.
6161 2004-06-25 Brian Warner <warner@lothar.com>
6163 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
6164 summary of warnings (like DeprecationWarnings), next to the
6167 2004-05-13 Brian Warner <warner@lothar.com>
6169 * docs/examples/twisted_master.cfg: enable the win32 builder, as
6170 we now have a w32 build slave courtesy of Mike Taylor.
6172 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
6173 so broken. Fixed a race condition that tripped up interlocked
6174 builds and caused the status to be stuck at "Interlocked" forever.
6175 The twisted buildbot's one interlocked build just so happened to
6176 never hit this case until recently (the feeding builds both pass
6177 before the interlocked build is attempted.. usually it has to wait
6179 (Builder._pong_failed): fix method signature
6181 * setup.py: bump to 0.4.3+ while between releases
6183 2004-04-30 Brian Warner <warner@lothar.com>
6185 * setup.py (version): Releasing buildbot-0.4.3
6187 2004-04-30 Brian Warner <warner@lothar.com>
6189 * MANIFEST.in: add the doc fragments in docs/*.xhtml
6191 * README: update for 0.4.3 release
6193 * NEWS: update for 0.4.3 release
6195 * buildbot/master.py (BuildMaster.__getstate__): make sure
6196 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
6198 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
6199 .trial as a class attribute, for upgrade from 0.4.2
6201 * buildbot/changes/changes.py (Change.links): add .links for
6204 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
6205 .textWatchers and .htmlWatchers at save time, since they are both
6206 volatile, should allow smooth 0.4.2 upgrade
6208 * buildbot/process/step.py (CVS.finishStatus): catch failed
6209 CVS/SVN commands so we can make the status box red
6211 2004-04-29 Brian Warner <warner@lothar.com>
6213 * buildbot/changes/freshcvs.py
6214 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
6215 code to do setFilter(), which tells the freshcvs daemon to not
6216 send us stuff that we're not interested in. I will uncomment it
6217 when a new version of CVSToys is available in which setFilter()
6218 actually works, and I get a chance to test it better.
6220 * docs/examples/twisted_master.cfg: start using a PBChangeSource
6222 * buildbot/master.py (Dispatcher): use a registration scheme
6223 instead of hardwired service names
6224 (BuildMaster): keep track of the Dispatcher to support
6227 * buildbot/changes/changes.py (ChangeMaster): create a distinct
6228 PBChangeSource class instead of having it be an undocumented
6229 internal feature of the ChangeMaster. Split out the code into a
6231 * buildbot/changes/pb.py (PBChangeSource): same
6232 * buildbot/test/test_changes.py: a few tests for PBChangeSource
6234 * docs/{factories|sources|steps}.xhtml: document some pieces
6236 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
6237 using FCMaildirSource
6238 (f23osx): update OS-X builder to use python2.3, since the slave
6239 was updated to Panther (10.3.3)
6241 2004-03-21 Brian Warner <warner@lothar.com>
6243 * buildbot/process/process_twisted.py: factor out doCheckout, change
6244 to use SVN instead of CVS
6246 * buildbot/process/base.py (BasicBuildFactory): refactor to make
6247 an SVN subclass easier
6248 (BasicSVN): subclass which uses Subversion instead of CVS
6250 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
6252 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
6254 (CVSCommand.cvsComplete): don't assume chdir worked on win32
6256 2004-02-25 Brian Warner <warner@lothar.com>
6258 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
6259 is now either a list (which is passed to spawnProcess directly) or
6260 a string (which gets passed to /bin/sh -c). This removes the useSH
6261 flag and the ArgslistCommand class. Also send status header at the
6262 start and end of each command, instead of having the master-side
6264 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
6265 -r'. Update to use list-based arguments.
6266 (SVNFetch): use list-based arguments, use ['dir'] argument to
6268 * buildbot/test/test_steps.py (Commands): match changes
6270 * buildbot/process/step.py (InternalShellCommand.words): handle
6272 (SVN): inherit from CVS, cleanup
6274 * buildbot/status/event.py (Logfile.content): render in HTML, with
6275 stderr in red and headers (like the name of the command we're
6276 about to run) in blue. Add link to a second URL (url + "?text=1")
6277 to get just stdout/stderr in text/plain without markup. There is
6278 still a problem with .entries=None causing a crash, it seems to occur
6279 when the logfile is read before it is finished.
6281 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
6282 timeout to the keepalives, and use it to explicitly do a
6283 loseConnection instead of waiting for TCP to notice the loss. This
6284 ought to clear up the silent-lossage problem.
6285 (unsafeTracebacks): pass exception tracebacks back to the master,
6286 makes it much easier to debug problems
6288 2004-02-23 Brian Warner <warner@lothar.com>
6290 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
6291 the whole command to /bin/sh instead of execve [Johan Dahlin]
6292 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
6293 '-r HEAD' [Johan Dahlin]
6294 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
6296 * buildbot/changes/changes.py (Change): add links= argument, add
6297 asHTML method [Johan Dahlin]. Modified to make a bit more
6298 XHTMLish. Still not sure how to best use links= .
6300 * buildbot/status/html.py (StatusResourceCommits.getChild): use
6301 Change.asHTML to display the change, not asText
6303 * buildbot/status/html.py (StatusResourceBuilder): web button to
6306 * buildbot/test/test_run.py: test to actually start a buildmaster
6309 * MANIFEST.in: bring back accidentally-dropped test helper files
6311 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
6312 that require cvstoys if it is not installed
6314 * buildbot/process/step_twisted.py (RunUnitTests): allow other
6315 values of "bin/trial" [Dave Peticolas]
6316 (RunUnitTests.finishStatus): say "no tests run" instead of "0
6317 tests passed" when we didn't happen to run any tests
6319 * buildbot/process/step.py (Compile): use haltOnFailure instead of
6320 flunkOnFailure [Johan Dahlin]
6322 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
6323 multiple instances of the same Step class by suffixing "_2", etc,
6324 to the name until it is unique. This name needs to be unique
6325 because it is used as a key in the dictionary that tracks build
6327 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
6330 * buildbot/process/base.py (Builder.ping): add "ping slave" command
6332 2004-01-14 Brian Warner <warner@lothar.com>
6334 * buildbot/status/words.py (IrcStatusBot): when we leave or get
6335 kicked from a channel, log it
6337 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
6338 something over whatever IRC channels the buildmaster is currently
6339 connected to. Added to try and track down a problem in which the
6340 master thinks it is still connected but the IRCd doesn't see it. I
6341 used a styles.Versioned this time, so hopefully users won't have
6342 to rebuild their .tap files this time.
6343 * contrib/debug.glade: add a "Poke IRC" button
6344 * contrib/debugclient.py: same
6346 * setup.py: bump to 0.4.2+ while between releases
6348 2004-01-08 Brian Warner <warner@lothar.com>
6350 * setup.py (version): Releasing buildbot-0.4.2
6352 2004-01-08 Brian Warner <warner@lothar.com>
6354 * NEWS: update for 0.4.2 release
6356 * README: document how to run the tests, now that they all pass
6358 * buildbot/changes/maildir.py (Maildir.poll): minor comment
6360 * buildbot/process/step.py (CVS): add a global_options= argument,
6361 which lets you set CVS global options for the command like "-r"
6362 for read-only checkout, or "-R" to avoid writing in the
6364 * buildbot/slavecommand.py (CVSCommand): same
6366 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
6367 testing easier (it is turned off when testing, to avoid the
6370 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
6371 to make it easier to test: break generateStepID() out to a
6372 separate function, only update statusbag if it exists.
6373 (ShellCommands): create useful text for dict-based commands too.
6375 * test/*, buildbot/test/*: move unit tests under the buildbot/
6377 * setup.py (packages): install buildbot.test too
6379 * buildbot/test/test_slavecommand.py: fix it, tests pass now
6380 * buildbot/test/test_steps.py: fix it, tests pass now
6382 2004-01-06 Brian Warner <warner@lothar.com>
6384 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
6385 freshcvs mail uses a slightly different syntax for new
6386 directories. Update parser to handle either.
6387 * test/test_mailparse.py (Test1.testMsg9): test for same
6389 2003-12-21 Brian Warner <warner@lothar.com>
6391 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
6392 'warnOnWarnings' so that lintian errors mark the build orange
6394 2003-12-17 Brian Warner <warner@lothar.com>
6396 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
6397 messages emitted by Bonsai, contributed by Stephen Davis.
6399 * test/*: moved all tests to use trial instead of unittest. Some
6400 still fail (test_steps, test_slavecommand, and test_process).
6402 * setup.py (version): bump to 0.4.1+ while between releases
6404 2003-12-09 Brian Warner <warner@lothar.com>
6406 * setup.py (version): Releasing buildbot-0.4.1
6408 2003-12-09 Brian Warner <warner@lothar.com>
6410 * NEWS: update for 0.4.1 release
6412 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
6413 freebsd builder code a little bit
6415 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
6416 don't try to compare attributes of different classes
6417 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6418 (MaildirSource.messageReceived): fix Change delivery
6420 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
6421 into the config file's namespace before loading it, like the
6422 documentation claims it does
6423 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
6424 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
6425 daemon comes back online
6427 2003-12-08 Brian Warner <warner@lothar.com>
6429 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
6430 so the example will work with online=0 as well
6432 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
6433 fix the __implements__ line
6435 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
6436 class a twisted.application.service.Service, use startService to
6439 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
6440 directory fd instead of simple open(). I'm sure this used to work,
6441 but the current version of python refuses to open directories with
6444 2003-12-05 Brian Warner <warner@lothar.com>
6446 * setup.py (version): bump to 0.4.0+ while between releases
6448 2003-12-05 Brian Warner <warner@lothar.com>
6450 * setup.py (version): Releasing buildbot-0.4.0
6452 2003-12-05 Brian Warner <warner@lothar.com>
6454 * docs/examples/glib_master.cfg: replace old sample scripts with
6455 new-style config files
6456 * MANIFEST.in: include .cfg files in distribution tarball
6458 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
6459 implement a dummy method to avoid the exception that occurs when
6460 freshcvs sends this to us.
6462 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
6463 removed the method, as it broke reconnection. Apparently
6464 stopFactory is called each time the connection attempt fails. Must
6466 (ReconnectingPBClientFactory.__getstate__): squash the _callID
6467 attribute before serialization, since without stopFactory the
6468 reconnect timer may still be active and they aren't serializable.
6470 * test/test_mailparse.py (ParseTest): test with 'self' argument
6472 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
6473 argument, as these "functions" are invoked like methods from class
6474 attributes and therefore always get an instance as the first
6477 * buildbot/changes/maildir.py (Maildir.start): fix error in error
6478 message: thanks to Stephen Davis for the catch
6480 2003-12-04 Brian Warner <warner@lothar.com>
6482 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
6483 twisted's standard ReconnectingClientFactory. Handles both oldcred
6484 and newcred connections. Also has a bug-workaround for
6485 ReconnectingClientFactory serializing its connector when it
6488 * buildbot/bot.py (BotFactory): rewrite connection layer with new
6489 pbutil. Replace makeApp stuff with proper newcred/mktap
6490 makeService(). Don't serialize Ephemerals on shutdown.
6492 * buildbot/changes/changes.py (ChangeMaster): make it a
6493 MultiService and add the sources as children, to get startService
6494 and stopService for free. This also gets rid of the .running flag.
6496 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
6497 new pbutil, turn into a TCPClient at the same time (to get
6498 startService for free). Two variants exist: FreshCVSSourceOldcred
6499 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
6500 yet, but when it does, we'll be ready).
6501 (FreshCVSSource.notify): handle paths which are empty after the
6502 prefix is stripped. This only happens when the top-level (prefix)
6503 directory is added, at the very beginning of a Repository's life.
6505 * buildbot/clients/base.py: use new pbutil, clean up startup code.
6506 Now the only reconnecting code is in the factory where it belongs.
6507 (Builder.unsubscribe): unregister the disconnect callback when we
6508 delete the builder on command from the master (i.e. when the
6509 buildmaster is reconfigured and that builder goes away). This
6510 fixes a multiple-delete exception when the status client is shut
6512 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
6515 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
6516 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
6518 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
6520 * contrib/run_maxq.py: Accept a testdir as an argument rather than
6521 a list of globs (ugh). The testdir will be searched for files
6522 named *.tests and run the tests in the order specified in each of
6523 those files. This allows for "dependancies" between tests to be
6526 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
6527 argument to pass to run_maxq.py, instead of a glob.
6529 2003-10-17 Brian Warner <warner@lothar.com>
6531 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
6532 files that live in the sandbox
6534 2003-10-15 Brian Warner <warner@lothar.com>
6536 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
6537 spelling error in "docs" count-warnings output
6538 (HLint.start): stupid thinko meant .xhtml files were ignored
6540 * docs/examples/twisted_master.cfg (reactors): disable cReactor
6541 tests now that cReactor is banished to the sandbox
6543 2003-10-10 Brian Warner <warner@lothar.com>
6545 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
6546 scheme: now .xhtml are sources and .html are generated
6548 2003-10-08 Brian Warner <warner@lothar.com>
6550 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
6551 we were ignoring the 'randomly' parameter.
6553 2003-10-01 Brian Warner <warner@lothar.com>
6555 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
6556 posix, to kill sub-children of aborted slavecommands.
6558 * buildbot/status/builder.py: rename Builder to BuilderStatus.
6559 Clean up initialization: lastBuildStatus remains None until the
6560 first build has been completed.
6562 * buildbot/status/html.py (WaterfallStatusResource.body): handle
6563 None as a lastBuildStatus
6564 * buildbot/clients/gtkPanes.py: same
6566 * buildbot/status/client.py (StatusClientService): keep
6567 BuilderStatus objects in self.statusbags . These objects now live
6568 here in the StatusClientService and are referenced by the Builder
6569 object, rather than the other way around.
6570 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
6571 * buildbot/process/base.py (Builder): same
6572 * test/test_config.py (ConfigTest.testBuilders): same
6574 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
6575 an existing builder, leave the statusbag alone. This will preserve the
6578 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
6579 hook. This will probably go away in favor of a class in upcoming
6582 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
6583 serviceName from newcred FreshCVSNotifiee setup
6585 2003-09-29 Brian Warner <warner@lothar.com>
6587 * buildbot/process/process_twisted.py: switch to new reactor
6589 * docs/examples/twisted_master.cfg: same
6591 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
6593 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
6594 botmaster reference instead of the oldapp service lookup
6596 * buildbot/master.py (BuildMaster.__init__): give the
6597 StatusClientService a reference to the botmaster to make it easier to
6600 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6602 * buildbot/status/html.py (Box.td): escape hreffy things so you
6603 can have spaces in things like builder names
6604 (StatusResourceBuilder.body)
6605 (WaterfallStatusResource.body)
6606 (WaterfallStatusResource.body0): same
6608 2003-09-25 Brian Warner <warner@lothar.com>
6610 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
6611 rearrange the builder list when adding or removing builders: keep
6612 them in the order the user requested.
6613 * test/test_config.py (ConfigTest.testBuilders): verify it
6615 * contrib/debug.glade: give the debug window a name
6617 * buildbot/process/base.py (Builder.buildTimerFired): builders can
6618 now wait on multiple interlocks. Fix code relating to that.
6619 (Builder.checkInterlocks): same
6620 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
6622 * buildbot/master.py (BuildMaster.loadConfig): move from
6623 deprecated pb.BrokerFactory to new pb.PBServerFactory
6624 * test/test_config.py (ConfigTest.testWebPathname): same
6626 * docs/examples/twisted_master.cfg: fix interlock declaration
6628 * buildbot/master.py (BotMaster.addInterlock): move code to attach
6629 Interlocks to their Builders into interlock.py .
6630 (BuildMaster.loadConfig_Interlocks): fix interlock handling
6632 * test/test_config.py (ConfigTest.testInterlocks): validate
6635 * buildbot/process/base.py (Builder.__init__): better comments
6636 * buildbot/process/interlock.py (Interlock.__repr__): same
6637 (Interlock.deactivate): add .active flag, move the code that
6638 attaches/detaches builders into the Interlock
6640 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6642 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
6643 tests using the new run_maxq.py script, and reporting failures by
6646 * contrib/run_maxq.py: Hacky little script for running a set of maxq
6647 tests, reporting their success or failure in a buildbot-friendly
6650 2003-09-24 Brian Warner <warner@lothar.com>
6652 * docs/examples/twisted_master.cfg: example of a new-style config
6653 file. This lives in the buildmaster base directory as
6656 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
6657 button to make the master re-read its config file
6659 * buildbot/master.py (BuildMaster.loadConfig): new code to load
6660 buildmaster configuration from a file. This file can be re-read
6661 later, and the buildmaster will update itself to match the new
6662 desired configuration. Also use new Twisted Application class.
6663 * test/Makefile, test/test_config.py: unit tests for same
6665 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
6666 FreshCVSSources comparable, to support reload.
6667 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6669 * buildbot/process/base.py (Builder): make them comparable, make
6670 Interlocks easier to attach, to support reload. Handle
6671 re-attachment of remote slaves.
6672 * buildbot/process/interlock.py (Interlock): same
6674 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
6675 Twisted's new Application class. Requires Twisted >= 1.0.8 .
6676 buildmaster taps are now constructed with mktap.
6677 * buildbot/status/client.py (StatusClientService): same
6679 * buildbot/status/words.py: move to new Services, add support to
6680 connect to multiple networks, add reload support, allow nickname
6681 to be configured on a per-network basis
6683 2003-09-20 Brian Warner <warner@lothar.com>
6685 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
6686 the freebsd builder, now that the machine has been upgraded and no
6687 longer has python2.2
6689 * setup.py (version): bump to 0.3.5+ while between releases
6691 2003-09-19 Brian Warner <warner@lothar.com>
6693 * setup.py (version): Releasing buildbot-0.3.5
6695 2003-09-19 Brian Warner <warner@lothar.com>
6697 * NEWS: add post-0.3.4 notes
6699 * README (REQUIREMENTS): note twisted-1.0.7 requirement
6701 * MANIFEST.in: add contrib/*
6703 * docs/examples/twisted_master.py (twisted_app): all build slaves must
6704 use a remote root now: cvs.twistedmatrix.com
6706 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
6708 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
6709 compatibility with old servers
6710 (FreshCVSSource.start): and provide a way to use it
6711 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
6713 * docs/examples/twisted_master.py (twisted_app): update to new
6715 (twisted_app): listen on new ~buildbot socket
6716 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
6718 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
6719 to reduce cvs bandwidth (update instead of full checkout)
6721 2003-09-11 Brian Warner <warner@lothar.com>
6723 * contrib/fakechange.py: demo how to connect to the changemaster
6724 port. You can use this technique to submit changes to the
6725 buildmaster from source control systems that offer a hook to run a
6726 script when changes are committed.
6728 * contrib/debugclient.py: tool to connect to the debug port. You
6729 can use it to force builds, submit fake changes, and wiggle the
6732 * buildbot/master.py: the Big NewCred Reorganization. Use a single
6733 'Dispatcher' realm to handle all the different kinds of
6734 connections and Perspectives: buildslaves, the changemaster port,
6735 the debug port, and the status client port. NewCredPerspectives
6736 now have .attached/.detached methods called with the remote 'mind'
6737 reference, much like old perspectives did. All the pb.Services
6738 turned into ordinary app.ApplicationServices .
6739 (DebugService): went away, DebugPerspectives are now created
6740 directly by the Dispatcher.
6741 (makeApp): changed interface a little bit
6743 * buildbot/changes/changes.py: newcred
6744 * buildbot/status/client.py: newcred
6746 * buildbot/clients/base.py: newcred client side changes
6747 * buildbot/bot.py: ditto
6749 * docs/examples/glib_master.py: handle new makeApp() interface
6750 * docs/examples/twisted_master.py: ditto
6752 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
6753 base newcred Perspectives on. This should go away once Twisted
6754 itself provides something sensible.
6757 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
6759 * contrib/svn_buildbot.py: A program that you can call from your
6760 SVNREPO/hooks/post-commit file that will notify a BuildBot master
6761 when a change in an SVN repository has happened. See the top of
6762 the file for some minimal usage info.
6764 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6766 * buildbot/slavecommand.py (ArglistCommand): Add new
6767 ArglistCommand that takes an argument list rather than a string as
6768 a parameter. Using a st.split() for argv is very bad.
6770 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
6771 update to a particular revision rather than always checking out
6772 (still not very smart about it, there may be cases where the
6773 checkout becomes inconsistent).
6775 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6777 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
6778 SVN fetch support. It can checkout (not update!) a specified
6779 revision from a specified repository to a specified directory.
6781 * buildbot/status/progress.py (Expectations.update): Fix an
6782 obvious bug (apparently created by the change described in the
6783 previous ChangeLog message) by moving a check to *after* the
6784 variable it checks is defined.
6787 2003-09-08 Brian Warner <warner@lothar.com>
6789 * buildbot/status/progress.py (Expectations.update): hack to catch
6790 an exception TTimo sees: sometimes the update() method seems to
6791 get called before the step has actually finished, so the .stopTime
6792 is not set, so no totalTime() is available and we average None
6793 with the previous value. Catch this and just don't update the
6794 metrics, and emit a log message.
6796 2003-08-24 Brian Warner <warner@lothar.com>
6798 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
6799 parameter to set copydir='original' in CVS commands.
6801 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
6803 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
6804 which tells the command to maintain a separate original-source CVS
6805 workspace. For each build, this workspace will be updated, then
6806 the tree copied into a new workdir. This reduces CVS bandwidth
6807 (from a full checkout to a mere update) while doubling the local
6808 disk usage (to keep two copies of the tree).
6810 2003-08-21 Brian Warner <warner@lothar.com>
6812 * buildbot/status/event.py (Logfile.addEntry): if the master web
6813 server dies while we're serving a page, request.write raises
6814 pb.DeadReferenceError . Catch this and treat it like a
6815 notifyFinish event by dropping the request.
6817 2003-08-18 Brian Warner <warner@lothar.com>
6819 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
6820 (instead of blowing up) if a force-build command is given without
6823 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
6824 don't blow up if there aren't yet any Changes in the list
6826 2003-08-02 Brian Warner <warner@lothar.com>
6828 * buildbot/bot.py (updateApplication): don't set the .tap name,
6829 since we shouldn't assume we own the whole .tap file
6831 * buildbot/bb_tap.py (updateApplication): clean up code, detect
6832 'mktap buildbot' (without a subcommand) better
6834 2003-07-29 Brian Warner <warner@lothar.com>
6836 * buildbot/status/words.py
6837 (IrcStatusFactory.clientConnectionLost): when we lose the
6838 connection to the IRC server, schedule a reconnection attempt.
6840 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
6841 use shutil.rmtree instead of forking off an "rm -rf" command.
6842 rmtree may take a while and will block until it finishes, so we
6843 use "rm -rf" if available.
6845 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
6846 freebsd buildslave badly
6848 * setup.py (version): bump to 0.3.4+ while between releases
6850 2003-07-28 Brian Warner <warner@lothar.com>
6852 * setup.py (version): Releasing buildbot-0.3.4
6854 2003-07-28 Brian Warner <warner@lothar.com>
6856 * NEWS: update in preparation for release
6858 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
6859 process.signalProcess instead of os.kill, to improve w32
6862 * docs/examples/twisted_master.py (twisted_app): turn off
6863 win32eventreactor: the tests hang the buildslave badly
6865 * buildbot/process/base.py (Build.buildFinished): update ETA even on
6866 failed builds, since usually the failures are consistent
6868 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6869 add compileOpts/compileOpts2 to reactors build
6871 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
6872 (twisted_app): use both default and win32eventreactor on w32 build.
6873 Use both default and kqreactor on freebsd build.
6875 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6876 add compileOpts2, which is put after the build_ext argument. w32
6877 needs "-c mingw32" here.
6879 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
6880 touch .acqpath, it goes away in recent Twisted releases
6882 * docs/examples/twisted_master.py (twisted_app): use "python" for
6883 the w32 buildslave, not "python2.2"
6885 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
6886 the directory exists.. should hush an exception under w32
6888 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
6889 ProcessTerminated -provided values for signal and exitCode rather
6890 than parsing the unix status code directly. This should remove one
6891 more roadblock for a w32-hosted buildslave.
6893 * test/test_mailparse.py: add test cases for Syncmail parser
6895 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
6896 temporary compatibility import. Note! Start importing
6897 FCMaildirSource from changes.mail instead of changes.freshcvsmail
6899 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
6901 2003-07-27 Brian Warner <warner@lothar.com>
6903 * NEWS: started adding new features
6905 * buildbot/changes/mail.py: start work on Syncmail parser, move
6906 mail sources into their own file
6908 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
6909 as implementing IChangeSource
6910 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
6912 * buildbot/interfaces.py: define the IChangeSource interface
6914 2003-07-26 Brian Warner <warner@lothar.com>
6916 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
6918 2003-06-25 Brian Warner <warner@lothar.com>
6920 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
6923 2003-06-17 Brian Warner <warner@lothar.com>
6925 * buildbot/status/words.py: clean up method usage to avoid error
6926 in silly IRC command
6927 (IrcStatusBot.emit_status): round off seconds display
6929 * buildbot/process/base.py (Build): delete the timer when saving
6930 to the .tap file, and restore it (if it should still be running)
6931 upon restore. This should fix the "next build in -34 seconds"
6932 messages that result when the master is restarted while builds are
6933 sitting in the .waiting slot. If the time for the build has
6934 already passed, start it very soon (in 1 second).
6936 * buildbot/status/words.py: more silly commands
6938 * README (REQUIREMENTS): add URLs to all required software
6940 * buildbot/status/words.py ('last'): mention results of, and time
6943 2003-05-28 Brian Warner <warner@lothar.com>
6945 * buildbot/status/words.py: add 'last' command
6946 (IrcStatusBot.emit_status): add current-small text to 'status' output
6948 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6949 (twisted_app): remove spaces from OS-X builder name
6951 * buildbot/master.py (makeApp): add knob to turn on IRC bot
6952 * buildbot/status/words.py: IRC bot should actually be useful now
6954 2003-05-23 Brian Warner <warner@lothar.com>
6956 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6957 "slave information" from $(slavedir)/info/* . These files are
6958 maintained by the slave administrator, and describe the
6959 machine/environment that is hosting the slave. Information from
6960 them is put into the "Builder" HTML page. Still need to establish
6961 a set of well-known filenames and meanings for this data: at the
6962 moment, *all* info/* files are sent to the master, but only
6963 'admin' and 'host' are used on that end.
6964 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6965 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
6966 * buildbot/master.py (BotPerspective.got_info): ditto
6968 2003-05-22 Brian Warner <warner@lothar.com>
6970 * setup.py (version): bump version to 0.3.3+ while between releases
6972 2003-05-21 Brian Warner <warner@lothar.com>
6974 * setup.py: Releasing buildbot-0.3.3
6976 2003-05-21 Brian Warner <warner@lothar.com>
6978 * NEWS: 0.3.3 news items
6980 * README: describe --keepalive and life behind a NAT box
6982 * buildbot/bot.py (Bot.connected): implement application-level
6983 keepalives to deal with NAT timeouts, turn them on with
6984 --keepalive option or when SO_KEEPALIVE doesn't work.
6986 * buildbot/master.py (BotPerspective): accept keepalives silently
6988 * buildbot/process/base.py (Build.buildException): CopiedFailures
6989 don't carry as much information as local ones, so don't try to
6990 create a big HTMLized version of them.
6992 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6993 log file when step fails due to an exception, such as when the slave
6996 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6997 --testmodule argument instead of grepping for test-case-name tags
6998 ourselves. Remove FindUnitTests code.
6999 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
7001 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
7003 2003-05-16 Brian Warner <warner@lothar.com>
7005 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
7006 argument to allow things like CFLAGS=-O0 to be passed without relying
7007 upon /bin/sh processing on the slave.
7009 * buildbot/process/step.py (InternalShellCommand.start): send
7011 * buildbot/slavecommand.py (ShellCommand.start): create argv with
7012 'split' instead of letting /bin/sh do it. This should also remove
7013 the need for /bin/sh on the buildslave, making it more likely to
7016 * buildbot/status/html.py: html-escape text in blamelist.
7017 Add "force build" button to the Builder page.
7019 * buildbot/process/step_twisted.py (countFailedTests): look at
7020 last 1000 characters for status line, as import errors can put it
7021 before the -200 point.
7023 2003-05-15 Brian Warner <warner@lothar.com>
7025 * docs/examples/twisted_master.py: use clobber=0 for remote builds
7027 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7028 make 'clobber' a parameter, so it is possible to have builds which
7029 do full tests but do a cvs update instead of hammering the CVS
7030 server with a full checkout each build
7032 * buildbot/process/step.py (InternalShellCommand): bump default
7033 timeout to 20 minutes
7035 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
7036 the master to trigger a build. Run it via manhole.
7038 * buildbot/master.py (BotPerspective.perspective_forceBuild):
7039 allow slaves to trigger any build that they host, to make life
7040 easier for slave admins who are testing out new build processes
7042 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7043 don't flunk cReactor or qtreactor on failure, since they fail alot
7044 these days. Do warnOnFailure instead.
7046 * buildbot/process/base.py: change Builder.buildable from a list
7047 into a single slot. When we don't have a slave, new builds (once
7048 they make it past the timeout) are now merged into an existing
7049 buildable one instead of being queued. With this change, a slave
7050 which has been away for a while doesn't get pounded with all the
7051 builds it missed, but instead just does a single build.
7053 2003-05-07 Brian Warner <warner@lothar.com>
7055 * setup.py (version): bump version to 0.3.2+ while between releases
7057 2003-05-07 Brian Warner <warner@lothar.com>
7059 * setup.py: Releasing buildbot-0.3.2
7061 2003-05-07 Brian Warner <warner@lothar.com>
7063 * setup.py: fix major packaging error: include subdirectories!
7065 * NEWS: add changes since last release
7067 * README (REQUIREMENTS): update twisted/python dependencies
7069 * buildbot/status/builder.py (Builder.startBuild): change
7070 BuildProcess API: now they should call startBuild/finishBuild
7071 instead of pushing firstEvent / setLastBuildStatus. Moving towards
7072 keeping a list of builds in the statusbag, to support other kinds of
7074 (Builder.addClient): send current-activity-small to new clients
7075 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
7078 * buildbot/status/client.py: drop RemoteReferences at shutdown
7080 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
7082 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
7083 more debug messages for remote status client
7085 * buildbot/process/step.py (InternalBuildStep.stepComplete)
7086 (.stepFailed): only fire the Deferred once, even if both
7087 stepComplete and stepFailed are called. I think this can happen if
7088 an exception occurs at a weird time.
7090 * buildbot/status/words.py: work-in-progress: IRC status delivery
7092 2003-05-05 Brian Warner <warner@lothar.com>
7094 * docs/examples/twisted_master.py (twisted_app): hush internal
7095 python2.3 distutils deprecation warnings
7096 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7097 add compileOpts= argument which inserts extra args before the
7098 "setup.py build_ext" command. This can be used to give -Wignore
7099 warnings, to hush some internal python-2.3 deprecation messages.
7101 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
7102 the ['twisted.test'] default test case to make it easier to change
7105 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
7106 * buildbot/clients/gtkPanes.py: ditto
7108 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
7109 arg to collapse RunUnitTestsRandomly into RunUnitTests
7110 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7111 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
7113 * buildbot/status/html.py (StatusResource): shuffle Resources
7114 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
7115 would serve the waterfall display, but the internal links were
7116 only valid on the trailing-slash version. The correct behavior is
7117 for the non-slashed one to serve a Redirect to the slashed one.
7118 This only shows up when the buildbot page is hanging off another
7119 server, like a Twisted-Web distributed server.
7121 * buildbot/status/event.py (Event, RemoteEvent): make Events
7122 pb.Cacheable, with RemoteEvent as the cached version. This removes
7123 a lot of explicit send-an-update code.
7124 * buildbot/status/builder.py (Builder): remove send-update code
7125 * buildbot/status/client.py (ClientBuilder): remove send-update
7126 code, and log errors that occur during callRemote (mostly to catch
7127 InsecureJelly exceptions)
7129 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7130 run Lore with the same python used in the rest of the build
7132 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
7134 * buildbot/process/step_twisted.py (HLint): accept 'python'
7135 argument. Catch rc!=0 and mark the step as failed. This marks the
7136 build orange ("has warnings").
7137 (RunUnitTestsJelly): move out to step_twisted2.py
7139 * buildbot/util.py (ignoreStaleRefs): add utility function
7141 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
7142 don't fake ETA object, it's too hard to get right
7144 2003-05-02 Brian Warner <warner@lothar.com>
7146 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
7148 2003-05-01 Brian Warner <warner@lothar.com>
7150 * buildbot/status/html.py (StatusResource.body): oops, I was
7151 missing a <tr>, causing the waterfall page to be misrendered in
7152 everything except Galeon.
7154 2003-04-29 Brian Warner <warner@lothar.com>
7156 * docs/examples/twisted_master.py: make debuild use python-2.2
7157 explicitly, now that Twisted stopped supporting 2.1
7159 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
7160 handle tuple results too. I keep forgetting this, which suggests
7161 it needs to be rethought.
7163 * setup.py (setup): bump version to 0.3.1+ while between releases
7165 2003-04-29 Brian Warner <warner@lothar.com>
7167 * setup.py: Releasing buildbot-0.3.1
7169 2003-04-29 Brian Warner <warner@lothar.com>
7171 * README (SUPPORT): add plea to send questions to the mailing list
7173 * NEWS, MANIFEST.in: add description of recent changes
7175 * docs/examples/twisted_master.py: add the code used to create the
7176 Twisted buildmaster, with passwords and such removed out to a
7179 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
7180 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
7181 buildmasters to not require CVSToys be installed.
7182 * README, docs/examples/glib_master: update to match the change
7184 * buildbot/clients/base.py, buildbot/bot.py,
7185 buildbot/changes/changes.py, buildbot/pbutil.py: copy
7186 ReconnectingPB from CVSToys distribution to remove CVSToys
7187 dependency for build slaves and status clients. Buildmasters which
7188 use FreshCVSSources still require cvstoys be installed, of course.
7190 2003-04-25 Brian Warner <warner@lothar.com>
7192 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
7193 runTestsRandomly arg to turn on trial -z
7195 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
7196 experimental code to use trial's machine-parseable output to get
7197 more detailed test results. Still has some major issues.
7198 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
7201 * buildbot/status/builder.py (Builder.setCurrentBuild):
7202 anticipating moving build history into statusbag, not used yet
7204 * buildbot/status/tests.py: code to centralize test results,
7205 doesn't work quite yet
7207 * buildbot/status/event.py (Event): use hasattr("setName") instead
7208 of isinstance for now.. need better long-term solution
7210 * buildbot/status/html.py: Remove old imports
7212 2003-04-24 Brian Warner <warner@lothar.com>
7214 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
7215 ignore changes under doc/fun/ and sandbox/
7217 * buildbot/process/step_twisted.py: update pushEvent and friends.
7219 * buildbot/status/html.py (Box.td): replace event.buildername with
7220 event.parent.getSwappableName(). Needs more thought.
7222 * buildbot/status/builder.py (Builder): Replace pushEvent and
7223 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
7224 Tell events they are being pruned with event.delete().
7226 * buildbot/process/base.py (Build): Remove Builder status-handling
7227 methods. s/pushEvent/setCurrentActivity/.
7229 * buildbot/process/step.py (BuildStep): clean up status delivery.
7230 Gouse builder.statusbag methods instead of intermediate builder
7231 methods. s/updateLastEvent/updateCurrentActivity/.
7232 s/finalizeLastEvent/finishCurrentActivity/. Use
7233 addFileToCurrentActivity for summaryFunction.
7235 * buildbot/status/event.py (Logfile): put data in a Swappable when
7237 (Event): add more setter methods. Remove .buildername, use .parent
7238 and getSwappableName instead (needs more thought).
7240 * buildbot/util.py (Swappable):
7241 * test/test_swap.py: don't bother setting filename at __init__
7242 time, do it later. Change setFilename args to take parent first,
7243 since it provides the most significant part of the filename.
7245 2003-04-23 Brian Warner <warner@lothar.com>
7247 * buildbot/status/event.py (Logfile.addEntry): append to previous
7250 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
7251 anticipating Swappable
7252 (InternalShellCommand.remoteUpdate): split out various log-adding
7253 methods so subclasses can snarf stdout separately
7255 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
7256 in anticipation of Swappable build logs
7257 (Builder.testsFinished): anticipating TestResults, still disabled
7259 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
7262 * buildbot/status/event.py (Logfile): add (disabled) support for
7263 Swappable, not ready for use yet
7265 * buildbot/util.py (Swappable): object which is swapped out to
7266 disk after some period of no use.
7267 * test/test_swap.py: test buildbot.utils.Swappable
7269 2003-04-14 Brian Warner <warner@lothar.com>
7271 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
7272 periodic-build timer. Set the .periodicBuildTime on a builder
7273 instance to some number of seconds to activate it.
7275 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
7277 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
7278 a way that survives result tuples
7280 2003-04-12 Brian Warner <warner@lothar.com>
7282 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7283 return a dict instead of a tuple: allow summarizers to provide
7284 multiple summaries if they want
7285 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
7286 (debuildSummarizer): summarize lintian warnings/errors
7288 2003-04-10 Brian Warner <warner@lothar.com>
7290 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
7292 2003-04-09 Brian Warner <warner@lothar.com>
7294 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
7295 empty summaries: happens when the tests fail so hard they don't emit
7296 a parseable summary line.
7298 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
7299 Allow summaryFunction to return None to indicate no summary should
7302 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
7303 writing to stale HTTP requests: notice when they disconnect and
7304 remove the request from the list. Also add CacheToFile from
7305 moshez, will be used later.
7307 2003-04-08 Brian Warner <warner@lothar.com>
7309 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
7310 should be an int, not a list of strings
7312 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
7313 if we weren't actually connected
7315 * buildbot/process/step_twisted.py (trialTextSummarizer): function
7316 to show the tail end of the trial text output
7318 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
7319 hook to summarize the results of a ShellCommand
7321 2003-04-07 Brian Warner <warner@lothar.com>
7323 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
7324 twisted test suite code into a single class.
7325 * buildbot/process/process_twisted.py: same
7327 2003-04-04 Brian Warner <warner@lothar.com>
7329 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
7331 * README (SLAVE): document use of mktap to create slave .tap file
7332 (REQUIREMENTS): describe dependencies
7334 * buildbot/bb_tap.py, buildbot/plugins.tml:
7335 * buildbot/bot.py (updateApplication): Add mktap support for creating
7336 buildslave .tap files
7338 2003-03-28 Brian Warner <warner@lothar.com>
7340 * buildbot/process/step.py (InternalShellCommand.finished): handle
7341 new tuple result values (fix embarrasing bug that appeared during
7344 2003-03-27 Brian Warner <warner@lothar.com>
7346 * docs/examples/glib_master.py, README: add sample buildmaster.tap
7349 2003-03-25 Brian Warner <warner@lothar.com>
7351 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
7352 to overall build status
7353 * buildbot/clients/base.py (Builder): improve event printing
7354 * buildbot/process/base.py (BasicBuildFactory): use specific steps
7355 instead of generic ShellCommand
7356 (Build): Add .stopBuild, use it when slave is detached
7358 * buildbot/process/step.py (Configure,Test): give the steps their
7359 own names and status strings
7361 * buildbot/status/html.py (StatusResource): add "show" argument,
7362 lets you limit the set of Builders being displayed.
7364 2003-03-20 Brian Warner <warner@lothar.com>
7366 * buildbot/process/basic.py: removed
7368 2003-03-19 Brian Warner <warner@lothar.com>
7370 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7371 turn off process-docs by default
7373 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
7374 when displaying build information without anything in allBuilds[]
7376 * buildbot/bot.py (makeApp): really take password from sys.argv
7378 2003-03-18 Brian Warner <warner@lothar.com>
7380 * buildbot/bot.py (buildApp): take password from sys.argv
7382 * README: replace with more useful text
7384 * setup.py: add a real one
7385 * MANIFEST.in, .cvsignore: more distutils packaging stuff
7387 * docs/PyCon-2003/: added sources for PyCon paper.
7389 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
7390 now Build objects control the process and Builder only handles
7391 slave stuff and distribution of changes/status. A new BuildFactory
7392 class creates Build objects on demand.
7394 Created ConfigurableBuild which takes a list of steps to run. This
7395 makes it a lot easier to set up a new kind of build and moves us
7396 closer to being able to configure a build from a web page.
7398 * buildbot/process/step_twisted.py, process_twisted.py: move to
7399 new model. A lot of code went away.
7401 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
7402 send lots of empty progress messages to the client.
7404 * buildbot/master.py (makeApp): enforce builder-name uniqueness
7406 2003-02-20 Brian Warner <warner@lothar.com>
7408 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
7410 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
7411 Twisted bug that prevented non-pty processes from working just got
7412 fixed, and the bug that leaks ptys is still being investigated.
7414 * buildbot/process/step.py (CVS): send timeout arg to slave
7416 * buildbot/clients/gtkPanes.py: add connection-status row, handle
7417 builders coming and going
7418 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
7419 from CVSToys, handle lost-buildmaster
7421 * buildbot/status/client.py (StatusClientService.removeBuilder):
7422 Clean up status client protocol: send builders (with references)
7423 as they are created, rather than sending a list and requiring the
7424 client to figure out which ones are new.
7425 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
7426 attempts to force a build on an unknown builder
7428 2003-02-19 Brian Warner <warner@lothar.com>
7430 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
7431 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
7432 Twisted stops leaking them.
7433 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
7434 builder goes to an idle state.
7436 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
7437 I figure out why CVS commands hang without them, and/or I fix the
7438 hung-command timeout
7440 2003-02-16 Brian Warner <warner@lothar.com>
7442 * buildbot/process/step_twisted.py: bin/hlint went away, replace
7443 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
7444 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
7445 GenerateDocs now that they are prefixed with WARNING:.
7447 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
7448 use manual href target instead of request.childLink
7450 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
7451 display every second, but update the ETA every 5 seconds (or
7452 whenever) as remote_progress messages arrive.
7455 2003-02-12 Brian Warner <warner@lothar.com>
7457 * *: import current sources from home CVS repository
7461 # add-log-time-format: add-log-iso8601-time-string