1 2006-09-25 Brian Warner <warner@lothar.com>
3 * buildbot/steps/source.py (Monotone): initial Monotone support,
4 contributed by Nathaniel Smith. Still needs docs and tests, but
5 this code has been in use on the Monotone buildbot for a long
7 * buildbot/slave/commands.py (Monotone): slave-side support
8 * buildbot/changes/monotone.py (MonotoneSource): polling change
11 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
12 contributed a Change Source that polls a Bonsai server (a
13 kind of web-based viewcvs CGI script).
15 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
16 Hearsum contributed a status plugin which sends email in the same
17 format that Tinderbox does: this allows a number of tinderbox
18 tools to be driven by Buildbot instead. Thanks Ben!
20 2006-09-24 Brian Warner <warner@lothar.com>
22 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
23 Thanks to Robert Helmer for the patch.
25 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
26 BuildStatus about the buildslave name at the *beginning* of the
27 build, rather than at the end. Thanks to Alexander Lorenz for the
29 * buildbot/status/html.py (StatusResourceBuild.body): always
30 include the slavename in the build page, not just when the build
32 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
33 slavename in the email message
35 2006-09-21 Brian Warner <warner@lothar.com>
37 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
39 * docs/examples/glib_master.cfg: same
40 * docs/examples/hello.cfg: same
41 * docs/examples/twisted_master.cfg: same, update to current usage
43 2006-09-19 Brian Warner <warner@lothar.com>
45 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
46 (PyFlakes.createSummary): make it compatible with python-2.2
48 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
49 for at least the output-parsing parts of PyFlakes
51 2006-09-18 Brian Warner <warner@lothar.com>
53 * buildbot/steps/python.py: oops, fix import of StringIO
55 2006-09-17 Brian Warner <warner@lothar.com>
57 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
58 turns out that SVN-1.4.0 doesn't fail to update once you've
59 replaced a file with a directory, unlike older versions of SVN and
60 pretty much every other VC tool we support. Since what we really
61 care about is that the update succeeds anyway, stop checking that
62 the tree got clobbered and just assert that the build succeeded.
63 (VCBase.printLogs): add a utility function for debugging
65 * buildbot/process/step.py: oops, added extra imports by mistake
67 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
68 rstrip() on the first line coming out of the 'p4 describe'
69 process, to remove the stray ^M that Wade Brainerd reports seeing
70 in the 'when' field. Fixes SF#1555985.
72 * buildbot/master.py (BuildMaster.loadConfig): improve the error
73 message logged when c['schedulers'] is not right
74 * buildbot/scheduler.py (Scheduler.__init__): improve error
75 message when a Scheduler() is created with the wrong arguments
76 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
77 verify that these error messages are emitted
79 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
80 The idea is that all the base classes (like BuildStep and
81 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
82 will be a leftover backwards-compatibility file that only contains
83 aliases for the steps that were moved out to buildbot.steps.*
84 * lots: change imports to match
85 * buildbot/process/step.py: add a DeprecationWarning if it ever
88 2006-09-12 Brian Warner <warner@lothar.com>
90 * buildbot/scheduler.py (Scheduler.__init__): make sure that
91 builderNames= is actually a sequence, since if you happen to give
92 it a single builder-specification dictionary instead, it won't get
93 caught by the existing assert. Thanks to Brett Neely for the
96 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
98 * docs/buildbot.texinfo (Python BuildSteps): document them
99 (sendchange): include a link to PBChangeSource, since you need one
101 * buildbot/steps/shell.py: clean up test-case-name line, remove some
103 * buildbot/steps/dummy.py: same
105 2006-09-08 Brian Warner <warner@lothar.com>
107 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
108 BuildStep which lets you transfer files from the master to the
109 slave or vice versa. Thanks to Albert Hofkamp for the original
110 patch. Fixes SF#1504631.
111 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
113 (SlaveFileDownloadCommand): same
114 * docs/buildbot.texinfo (Transferring Files): document it
115 * buildbot/test/test_transfer.py: test it
116 * buildbot/test/runutils.py (StepTester): new utility class for
117 testing BuildSteps and RemoteCommands without Builds or Bots or PB
118 * buildbot/test/test_steps.py (CheckStepTester): validate that the
121 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
122 walk through StatusLogs one line at a time, mostly for the benefit
123 of ShellCommand.createSummary methods. You can either walk through
124 STDOUT or STDERR, but the default is STDOUT.
126 * buildbot/status/builder.py (LogFile.readlines): implement it.
127 Note that this is not yet memory-efficient, it just pulls the
128 whole file into RAM and then splits it up with a StringIO.
129 Eventually this should be a generator that only pulls chunks from
131 * buildbot/test/test_status.py (Log.testReadlines): test it
133 * docs/buildbot.texinfo: update to match changes
134 * buildbot/process/factory.py: stop using old definitions
135 * buildbot/process/process_twisted.py: same
136 * buildbot/test/test_*.py: same
138 * buildbot/process/step_twisted.py: move definition to..
139 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
140 relative-import mechanisms prevent this from being named 'twisted'
141 or 'python/twisted' as I would have preferred.
143 * buildbot/process/maxq.py: move definition to..
144 * buildbot/steps/maxq.py: .. here, leave a compatibility import
146 * buildbot/process/step.py: split the user-visible BuildSteps into
147 separate files, all under buildbot/steps/
148 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
149 * buildbot/steps/shell.py: this holds ShellCommand and friends
150 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
152 2006-09-05 Brian Warner <warner@lothar.com>
154 * lots: run pyflakes, removed a lot of unused imports, changed the
155 form of some conditional imports to remove false pyflakes
156 warnings. There are still a number of warnings left, mostly from
157 imports that are done for their side-effects.
158 * buildbot/test/test_vc.py: import twisted.python.failure, since it
161 2006-08-26 Brian Warner <warner@lothar.com>
163 * buildbot/test/test_locks.py (Unit.testLater): make the tests
164 compatible with twisted-1.3.0, for some reason I just can't seem
165 to let go of the past.
167 2006-08-25 Brian Warner <warner@lothar.com>
169 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
171 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
172 all logfiles= in startCommand(), rather than in start() . This
173 makes it easier to have the 'stdio' log come before any secondary
174 logfiles, which I feel makes the waterfall display more
176 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
177 from ShellCommand up into LoggingBuildStep
178 (LoggingBuildStep.__init__): move the handling of logfiles= from
179 ShellCommand up to LoggingBuildStep, because startCommand is
180 provided by LoggingBuildStep, whereas start() was specific to
181 subclasses like ShellCommand and Source. This removes code
182 duplication in those subclasses.
183 (ShellCommand.__init__): same
184 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
185 for a slave that's too old to understand logfiles= into a separate
186 method, so it can live in ShellCommand. The rest of
187 setupLogfiles() can live in LoggingBuildStep.
189 2006-08-24 Brian Warner <warner@lothar.com>
191 * buildbot/locks.py (BaseLock): you can now configure Locks to
192 allow multiple simultaneous owners. They still default to
193 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
195 * docs/buildbot.texinfo (Interlocks): document the new options
196 * buildbot/test/test_locks.py: add a bunch of new unit tests
197 * buildbot/process/base.py (Build.acquireLocks): locks now offer
198 waitUntilMaybeAvailable, not waitUntilAvailable
199 * buildbot/process/step.py (BuildStep.acquireLocks): same
200 * buildbot/master.py (BotMaster.getLockByID): real locks now use
201 the whole lockid in their constructor, not just the name. Also,
202 keep track of which real locks we've handed out by the full
203 lockid, not just class+name, otherwise changing just the maxCount=
204 in the master.cfg file would not actually cause a behavioral
207 2006-08-23 Brian Warner <warner@lothar.com>
209 * buildbot/__init__.py (version): bump to 0.7.4+ while between
211 * docs/buildbot.texinfo: same
213 2006-08-23 Brian Warner <warner@lothar.com>
215 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
216 * docs/buildbot.texinfo: set version to match
217 * NEWS: update for 0.7.4
218 * buildbot/slave/commands.py (command_version): mention that this
219 version (2.1) was released with buildbot-0.7.4
221 2006-08-22 Brian Warner <warner@lothar.com>
225 * CREDITS: new file, list of people who have helped. Thanks!
226 * MANIFEST.in: ship it
228 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
229 new diagrams, the user's manual is more informative than it was.
230 Start shipping the .html user's manual (and generated .png
232 * Makefile: update 'release' target to match
234 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
235 test.. I think the web-parts effort will render it pointless well
236 before it ever actually starts to work.
238 2006-08-20 Brian Warner <warner@lothar.com>
240 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
241 meaning of the prefix= argument. It is now just a string which is
242 stripped from the beginning of the filename. If prefix= is set but
243 not found on any given filename, that filename is ignored. If all
244 filenames in a Change are ignored, the Change is dropped. This is
245 much simpler than the previous sep= nonsense, and I should have
246 implemented it this way from the beginning. Effectively resolves
247 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
248 Gedminas for the catch and suggested fixes.
249 (ChangePerspective.perspective_addChange): implement the actual
251 * buildbot/test/test_changes.py (TestChangePerspective): test it
252 * docs/buildbot.texinfo (PBChangeSource): document it, explain
253 how to properly use prefix=
254 * docs/examples/twisted_master.cfg (source): update prefix= by
255 adding the trailing slash
258 * docs/examples/twisted_master.cfg: update to actual practice
260 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
261 update test case to match new link text.. the HREF has both a
262 class= setting and an enclosing [] pair that I didn't match in the
265 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
266 list of strings is preferred over a single string with embedded
268 (ShellCommand.description=): explain that either single strings or
269 a list of strings is acceptable, and why you might prefer one over
270 the other. Add an example. Fixes SF#1524659, thanks to Paul
271 Winkler for the catch.
272 (Build Steps): update to use f.addStep() rather than using s()
273 and the constructor list
275 * buildbot/process/step.py (ShellCommand): accept either a single
276 string or a list of strings in both description= and
278 * buildbot/test/test_steps.py (Steps.test_description): test it
279 * buildbot/test/runutils.py (makeBuildStep): support for that test
281 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
282 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
283 collecting the files and creating the patch.
285 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
286 per-step URLs that will be displayed on the waterfall display,
287 for things like the HTML output of code-coverage tools, when
288 the results are hosted elsewhere.
289 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
290 way to retrieve these URLs
291 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
292 the method to retrieve these URLs. Also provide backwards
293 compatibility for saved BuildStepStatus instances that didn't have
295 * buildbot/process/step.py (BuildStep.addURL): method to set these
296 URLs from within a BuildStep
297 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
298 (StepBox.getBox): give these external links a distinct CSS class
299 named "BuildStep external" so a .css file can display them
302 * buildbot/test/test_web.py (WaterfallSteps): test that we really
304 * buildbot/test/test_steps.py (Steps): test that we can all the
305 URLs. Also add a bunch of other tests on methods that can be
306 called from within BuildSteps
307 * buildbot/test/runutils.py (makeBuildStep): add utility function
309 2006-08-13 Brian Warner <warner@lothar.com>
311 * docs/buildbot.texinfo (BuildStep LogFiles): document them
313 2006-08-10 Brian Warner <warner@lothar.com>
315 * docs/buildbot.texinfo (Index of master.cfg keys): add another
316 index, this one of things like c['sources'] and c['schedulers']
317 (indices): it looks like my clever idea of putting the @fooindex
318 commands in between the @node and the @subsection (to make the
319 HREF anchor jump to slightly above the section title, which works
320 much better in html) confused texinfo horribly, so I'm moving the
321 index tags back to be just after the @subsection marker. I also
322 added extra lines between the @node/@section paragraph and the
323 index tags, since I think maybe texinfo wants to see these be
326 * docs/Makefile (images): make sure images get built when
328 * docs/images/Makefile: same
330 * buildbot/scripts/runner.py: rename 'buildbot master' to
331 'buildbot create-master', and 'buildbot slave' to 'buildbot
333 * docs/buildbot.texinfo: same
336 * docs/buildbot.texinfo: reimplement the "useful classes" index
337 with actual texinfo indices. The .info rendering is a bit
338 weird-looking but it works well, and the HTML rendering is quite
339 nice. This also puts the index targets in the regular flow of the
340 text, which is easier to maintain.
342 2006-08-06 Brian Warner <warner@lothar.com>
344 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
345 Kevin Turner to prefer the environ= argument be a list rather than
346 a string. If it is a list, it will be joined with a platform-local
347 os.pathsep delimiter, and then prepended to any existing
348 $PYTHONPATH value. This works better in cross-platform (i.e.
349 windows buildslaves) environments when you need to push multiple
350 directories onto the front of the path.
351 (SlaveShellCommand): documented the new magic
352 * docs/buildbot.texinfo (ShellCommand): documented the new magic
353 in a user-visible form
355 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
356 Turner to prefer lists over strings when creating/running VC
357 commands during unit tests. This is clearly necessary to survive
358 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
359 renamed the wq() function to qw() though, since that's how it's
360 spelled in perl. Eventually I'd prefer all commands to be
361 specified with lists.
363 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
364 which are deleted (or not yet created) correctly. Also add
365 failsafe code to not explode if the file-watching poller doesn't
366 get started. Thanks to JP Calderone for the catch and the poller
368 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
370 * buildbot/test/emitlogs.py: same
372 * NEWS: summarize recent changes
374 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
375 clause to avoid the "host key mismatch" warning
377 * buildbot/process/step_twisted.py (Trial.start): if the
378 buildslave is too old to understand logfiles=, fall back to
379 running 'cat _trial_temp/test.log' like before.
380 (Trial.commandComplete): same. this takes advantage of the
381 LoggingBuildStep refactoring to stall commandComplete long enough
382 to run a second RemoteShellCommand.
384 * buildbot/process/step.py (LoggingBuildStep.startCommand):
385 refactor command-completion handling, to allow methods like
386 commandComplete/createSummary/evaluateCommand to return Deferreds.
387 (LoggingBuildStep._commandComplete): delete the refactored method
388 (ShellCommand.setupLogfiles): if the buildslave is too old to
389 understand logfiles=, put a warning message both into twistd.log
390 and into the otherwise empty user-visible LogFiles.
392 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
393 callers to provide the slave-side logfile name, rather than
394 forcing it to come from the local name of the LogFile.
395 (BuildStep.getSlaveName): new method
397 * buildbot/process/base.py (Build.getSlaveName): new method, so
398 steps can find out which buildslave they're running on
400 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
401 to match the s/cvs_ver/command_version/ change
403 2006-08-05 Brian Warner <warner@lothar.com>
405 * buildbot/slave/commands.py (command_version): replace the CVS
406 auto-updated cvs_ver keyword with a manually-updated variable,
407 since CVS is no longer the master repository. Add a description of
408 the remote API change starting in this version (2.1), specifically
409 the fact that SlaveShellCommand now accepts 'initial_stdin',
410 'keep_stdin_open', and 'logfiles'.
412 2006-07-31 Brian Warner <warner@lothar.com>
414 * docs/buildbot.texinfo (System Architecture): Finally add lots of
415 diagrams to describe how the whole system fits together. The
416 images themselves are kept in SVG files, with ascii-art versions
417 in corresponding .txt files. Texinfo knows how to interpolate the
418 text version into .info files, reference the .png versions from
419 .html files, and include .eps versions in the .ps format.
420 * docs/images/Makefile: tools to create .png and .eps
421 * docs/images/*.svg: created pictures with Inkscape.
422 * .darcs-boring: ignore the generated .eps and .png files
424 2006-07-24 Brian Warner <warner@lothar.com>
426 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
427 Scheduler names, since they cause setServiceParent to explode
429 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
431 2006-07-20 Brian Warner <warner@lothar.com>
433 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
434 which runs the buildbot unit tests
436 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
437 classes that are useful in master.cfg
439 2006-07-15 Brian Warner <warner@lothar.com>
441 * Makefile (some-apidocs): new target to build only some epydocs
443 * setup.py: minor comment.. does the classifiers= argument prevent
444 the setup.py script from working on python2.2/2.3?
446 * buildbot/scripts/sample.cfg: update manhole example, arrange into
449 * buildbot/twcompat.py: fix minor typo in comments
451 * buildbot/manhole.py: move all Manhole-related code out to this
452 module. Implement SSH-based manholes (with TwistedConch), and move
453 to conch's nifty line-editing syntax-coloring REPL shell instead
454 of the boring non-editing monochromatic (and deprecated) old
456 * buildbot/master.py: remove all Manhole-related code
457 (BuildMaster.loadConfig._add): make sure the old manhole is
458 removed before we add the new one
459 * docs/buildbot.texinfo (Debug options): document new Manhole options
461 * buildbot/twcompat.py (_which): fix some epydoc issues
462 * buildbot/status/html.py (Waterfall.__init__): same
464 2006-06-29 Brian Warner <warner@lothar.com>
466 * buildbot/interfaces.py: get Interface from b.twcompat to hush
467 deprecation warnings under newer Twisteds (by using
468 zope.interface.Interface instead of old twisted.python.components
470 * buildbot/slave/interfaces.py: same
472 2006-06-28 Brian Warner <warner@lothar.com>
474 * buildbot/slave/commands.py (SVN): add --non-interactive to all
475 svn commands, so it will fail immediately instead of hanging while
476 it waits for a username/password to be typed in.
478 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
479 log message if the step was shut down
481 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
482 obsolete reference to mktap.
484 2006-06-20 Brian Warner <warner@lothar.com>
486 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
487 test to include new 'logfiles' argument sent from master to slave
489 2006-06-19 Brian Warner <warner@lothar.com>
491 * buildbot/process/step_twisted.py (Trial): track Progress from
492 _trial_temp/test.log too
494 * buildbot/process/step.py (OutputProgressObserver): generalize
495 the earlier StdioProgressObserver into an OutputProgressObserver
496 that can track LogFiles other than stdio.
497 (LoggingBuildStep.__init__): same
499 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
500 _trial_temp/test.log, not a separate 'cat' command. TODO: this
501 will fail under windows because of os.sep issues. It might have
502 worked before if 'cat' was doing cygwin path conversion.
504 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
505 creation of LogFileWatchers
506 (ShellCommand._startCommand): and record the files that were
507 watched in the 'headers' section of the ShellCommand output
509 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
510 need to actually pass it to the slave if you want it to work.
511 (ShellCommand): document it a bit
513 * buildbot/test/test_shell.py: new test to validate LogFiles
514 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
516 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
517 before printing the last batch of lines, to test that the polling
518 logic is working properly
520 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
521 handling, making it possible to track multiple logs for a single
522 RemoteCommand. The previous single logfile is now known as the
524 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
525 (RemoteShellCommand.__init__): accept logfiles=
526 (LoggingBuildStep.startCommand): stdio_log is now one of many
527 (ShellCommand): added logfiles= argument, as well as a class-level
528 .logfiles attribute, which will be merged together to figure out
529 which logfiles should be tracked. The latter maybe be useful for
530 subclasses of ShellCommand which know they will aways produce
531 secondary logfiles in the same location.
533 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
534 and closeStdin() methods, preparing to make it possible to write
535 to a ShellCommand's stdin at any time, not just at startup. These
536 writes are buffered if the child process hasn't started yet.
537 (LogFileWatcher): new helper class to watch arbitrary logfiles
538 while a ShellCommand runs. This class polls the file every two
539 seconds, and sends back 10k chunks to the buildmaster.
540 (ShellCommand): rename stdin= to initialStdin=, and add
541 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
543 (ShellCommand.addLogfile): LogFile text is sent in updates with a
544 key of "log" and a value of (logname, data).
545 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
546 'logfiles' to the master-visible args dictionary.
547 (SourceBase.doPatch): match s/stdin/initialStdin/ change
550 * buildbot/test/test_vc.py (Patch.testPatch): same
553 * buildbot/test/emit.py: write to a logfile in the current
554 directory. We use this to figure out what was used as a basedir
555 rather than looking to see which copy of emit.py gets run, so that
556 we can run the commands from inside _trial_temp rather than inside
558 * buildbot/test/subdir/emit.py: same
559 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
560 argument rather than running from buildbot/test/
561 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
562 rather than using an implicit setUp()
563 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
564 (ShellBase.testShell1, etc): use explicit path to emit.py instead
565 of assuming that we're running in buildbot/test/ (and that '.' is
568 * buildbot/slave/commands.py (Command.doStart): refactor Command
569 startup/completion a bit: now the SlaveBuilder calls doStart(),
570 which is not meant for overridding by subclasses, and doStart()
571 calls start(), which is. Likewise the SlaveBuilder calls
572 doInterrupt(), and subclasses override interrupt(). This also puts
573 responsibility for maintaining .running in Command rather than in
575 (Command.doInterrupt): same
576 (Command.commandComplete): same, this is called when the deferred
577 returned by start() completes.
578 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
579 (SlaveBuilder.remote_interruptCommand): same
580 (SlaveBuilder.stopCommand): same
582 2006-06-16 Brian Warner <warner@lothar.com>
584 * buildbot/test/test_shell.py: new test file to contain everything
585 relating to ShellCommand
586 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
587 multiple logfiles in realtime" feature, not yet implemented
588 * buildbot/test/emitlogs.py: support file for testLogFiles
589 * docs/buildbot.texinfo (ShellCommand): document the feature
591 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
593 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
594 for tests which exercise SlaveCommands in isolation.
596 * buildbot/test/test_slavecommand.py: Move some utilities like
597 SignalMixin and FakeSlaveBuilder from here ..
598 * buildbot/test/runutils.py: .. to here, so they can be used by
599 other test classes too
600 * buildbot/test/test_vc.py: more SignalMixin refactoring
601 * buildbot/test/test_control.py: same
602 * buildbot/test/test_run.py: and some rmtree refactoring
604 2006-06-15 Brian Warner <warner@lothar.com>
606 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
607 'testBranch' to match other VC tests and have the tests run in
608 roughly increasing order of dependency
610 * buildbot/test/test_steps.py (LogObserver): new test to verify
611 LogObservers can be created at various times and still get
612 connected up properly
614 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
615 to create BuildStepStatus instances that actually work.
617 * buildbot/process/step.py (LogObserver): add outReceived and
618 errReceived base methods, to be overridden
620 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
621 API to take a name instead of a step, reducing the coupling
622 somewhat. This returns the BuildStepStatus object so it can be
623 passed to the new Step, instead of jamming it directly into the
625 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
627 * buildbot/process/base.py (Build.setupBuild): use both methods
628 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
629 process a bit to match
631 2006-06-14 Brian Warner <warner@lothar.com>
633 * docs/buildbot.texinfo (Adding LogObservers): add some limited
634 docs on writing new LogObserver classes
635 (Writing New Status Plugins): brief docs on how Status Plugins fit
638 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
639 implement a LogObserver that counts how many unit tests have been
641 (Trial.__init__): wire it in
642 * buildbot/test/test_twisted.py (Counter): unit test for it
644 * buildbot/process/step_twisted.py (HLint.commandComplete): update
645 to new cmd.logs['stdio'] scheme
646 (Trial.commandComplete): same
647 (BuildDebs.commandComplete): same
649 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
650 LogFiles, instead of just a single one. The old single logfile is
651 now called "stdio". LoggedRemoteCommand no longer creates a
652 LogFile for you (the code to do that was broken anyway). If you
653 don't create a "stdio" LogFile, then stdout/stderr will be
655 (LogObserver): implement "LogObservers", which a BuildStep can add
656 to parse the output of a command in real-time. The primary use is
657 to provide more useful information to the Progress code, allowing
658 better ETA estimates.
659 (LogLineObserver): utility subclass which feeds complete lines to
660 the parser instead of bytes.
661 (BuildStep.progressMetrics): this is safer as a tuple
662 (BuildStep.setProgress): utility method, meant to be called by
664 (BuildStep.addLogObserver): new method, to be called at any time
665 during the BuildStep (even before any LogFiles have been created),
666 to attach (or schedule for eventual attachment) a LogObserver to a
668 (StdioProgressObserver): new LogObserver which replaces the old
669 "output" progress gatherer
670 (LoggingBuildStep.__init__): same
671 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
672 (LoggingBuildStep._commandComplete): must use logs['stdio']
673 instead of the old single ".log" attribute.
674 * buildbot/status/builder.py (LogFile): remove old logProgressTo
675 functionality, now subsumed into StdioProgressObserver
676 * buildbot/test/test_status.py (Subscription._testSlave_2): the
677 log name changed from "output" to "stdio".
680 * buildbot/interfaces.py (ILogFile): add the Interface used from
681 the BuildStep towards the LogFile
682 (ILogObserver): and the one provided by a LogObserver
683 * buildbot/status/builder.py (LogFile): implement it
685 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
686 HEADER constants here ..
687 * buildbot/status/builder.py (STDOUT): .. from here
689 2006-06-13 Brian Warner <warner@lothar.com>
691 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
692 compatibility with python2.2, which doesn't have the 'substr in
694 (TestP4Poller.makeTime): utility function to construct the
695 timestamp using the same strptime() approach as p4poller does. It
696 turns out that time.mktime() behaves slightly differently under
697 python2.2, probably something to do with the DST flag, and that
698 causes the test to fail under python2.2. (changing the mktime()
699 arguments to have dst=0 instead of -1 caused it to fail under
700 python2.3. Go figure.)
701 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
703 2006-06-12 Brian Warner <warner@lothar.com>
705 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
706 proper Perforce (P4) support. Many many thanks to Scott Lamb for
707 contributing such an excellent patch, including docs and unit
708 tests! This makes it *so* much easier to apply. I had to update
709 test_vc.py to handle some recent refactorings, but everything else
710 applied smoothly. The only remaining thing I'd like to fix would
711 be to remove the hard-wired port 1666 used by p4d, and allow it to
712 claim any unused port. This would allow two copies of the test
713 suite to run on the same host at the same time, as well as
714 allowing the test suite to run while a real (production) p4d was
715 running on the same host. Oh, and maybe we should add a warning to
716 step.P4 that gets emitted if the slave is too old to provide the
717 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
718 * buildbot/slave/commands.py (P4): same
719 (P4Sync): same, some minor updates
720 * buildbot/changes/p4poller.py: same
721 * docs/buildbot.texinfo: same
722 * buildbot/test/test_p4poller.py: same
723 * buildbot/test/test_vc.py (P4): same
725 * setup.py: add Trove classifiers for PyPI
727 2006-06-08 Brian Warner <warner@allmydata.com>
729 * buildbot/status/client.py
730 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
731 changing this from getCurrentBuild() to getCurrentBuilds(). Each
732 build needs to be IRemote'd separately, rather than IRemote'ing
733 the whole list at once. I can't wait until newpb's serialization
734 adapters make this unnecessary.
736 2006-06-06 Brian Warner <warner@lothar.com>
738 * buildbot/process/step.py (WithProperties): make this inherit
739 from ComparableMixin, so that reloading an unchanged config file
740 doesn't cause us to spuriously reload any Builders which use them.
741 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
744 2006-06-03 Brian Warner <warner@lothar.com>
746 * contrib/windows/{setup.py, buildbot_service.py}: add support for
747 running py2exe on windows, contributed by Mark Hammond. Addresses
748 SF#1401121, but I think we still need to include
749 buildbot/scripts/sample.cfg
750 * setup.py: include buildbot_service.py as a script under windows
751 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
752 a py2exe application), get the icon/css datafiles from a different
755 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
756 double-escape the build URL. Thanks to Olivier Bonnet for the
757 patch. Fixes SF#1452801.
759 2006-06-02 Brian Warner <warner@lothar.com>
761 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
762 first six columns of 'svnlook' output, not just the first column,
763 since property changes appear in the other five. Thanks to Olivier
764 Bonnet for the patch. Fixes SF#1398174.
766 2006-06-01 Brian Warner <warner@lothar.com>
768 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
769 the fake build, so that title= has something to be set to
771 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
772 attribute of the "Build #NN" link in the yellow start-the-build
773 box to the build's reason. This means that you get a little
774 tooltip explaining why the build was done when you hover over the
775 yellow box. Thanks to Zandr Milewski for the suggestion.
777 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
778 (Box.setETA): handle ETA=None (by stopping the timer)
779 (Box.update): make the [soon] text less different than the usual
780 text, so the rest of the text doesn't flop around so much. It
781 would be awfully nice to figure out how to center this stuff.
782 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
784 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
785 by default, so that any ShellCommand which fails marks the overall
786 build as a failure. I should have done this from the beginning.
787 Add flunkOnFailure=False to the arguments if you want to turn off
790 2006-05-30 Brian Warner <warner@lothar.com>
792 * buildbot/clients/gtkPanes.py: add a third row: now it shows
793 last-build/current-build/current-step. Show what step is currently
794 running. Show ETA for both the overall build and the current step.
795 Update GTK calls to modern non-deprecated forms. There's still a
796 lot of dead code and debug noise to remove.
798 * buildbot/process/step_twisted.py (Trial): set the step name, so it
799 shows up properly in status displays
801 2006-05-28 Brian Warner <warner@lothar.com>
803 * buildbot/test/test_properties.py (Run.testInterpolate): on the
804 build we use to verify that WithProperties works:
806 ** set flunkOnFailure=True so that build failures get noticed
807 ** set workdir='.' so that the build succeeds, otherwise it is trying
808 to touch 'build/something', and 'build/' doesn't exist because
809 usually that's created by a Source step
810 ** set timeout=10, because Twisted-1.3.0 has a race condition that
811 this test somehow triggers, in which the 'touch' process becomes
812 a zombie and we wait for th etimeout before giving up on it.
814 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
815 to log the Build results and step logs to the twisted log.
816 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
817 what went wrong if a build was expected to succeed but didn't.
819 * buildbot/process/step_twisted.py (Trial): set the default
820 trialMode to '--reporter=bwverbose', which specifies verbose
821 black-and-white text. Back in twisted-1.3/2.0 days we had to use
822 '-to', but those are completely missing in modern Twisteds.
824 * buildbot/scripts/sample.cfg: make the sample Manhole config use
825 a localhost-only port, to encourage better security
827 * docs/buildbot.texinfo (Change Sources): mention
830 * .darcs-boring: add a Darcs boringfile
832 * README (REQUIREMENTS): stop claiming compatibility with
835 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
838 2006-05-27 Brian Warner <warner@lothar.com>
840 * buildbot/__init__.py: bump to 0.7.3+ while between releases
841 * docs/buildbot.texinfo: same
843 2006-05-23 Brian Warner <warner@lothar.com>
845 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
846 * docs/buildbot.texinfo: set version to match
847 * NEWS: update for 0.7.3
849 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
850 give a quick mapping from VC system to possible ChangeSources
851 (Build Properties): add 'buildername'
853 * buildbot/process/base.py (Build.setupStatus): oops, set
854 'buildername' and 'buildnumber' properties
855 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
858 2006-05-22 Brian Warner <warner@lothar.com>
860 * docs/buildbot.texinfo (Build Properties): explain the syntax of
861 property interpolation better
863 * README (INSTALLATION): remove old '-v' argument from recommended
866 * docs/buildbot.texinfo (ShellCommand): add docs for description=
867 and descriptionDone= arguments. Thanks to Niklaus Giger for the
870 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
871 'svnversion' instead of grepping the output of 'svn info', much
872 simpler and avoids CR/LF problems on windows. Thanks to Olivier
873 Bonnet for the suggestion.
874 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
875 require the WC_PATH argument, so run 'svnversion .' instead.
877 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
878 aren't supposed to have 'self' in their argument list
880 2006-05-21 Brian Warner <warner@lothar.com>
882 * buildbot/process/step.py (ShellCommand.start): make
883 testInterpolate pass. I was passing the uninterpolated command to
884 the RemoteShellCommand constructor
885 (ShellCommand._interpolateProperties): oops, handle non-list
886 commands (i.e. strings with multiple words separated by spaces in
887 them) properly, instead of forgetting about them.
889 * buildbot/test/test_properties.py (Run.testInterpolate): new test
890 to actually try to use build properties in a real build. This test
892 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
893 to start and evaluate builds
895 * buildbot/test/test__versions.py: add a pseudo-test to record
896 what version of Twisted/Python/Buildbot are running. This should
897 show up at the beginning of _trial_tmp/test.log, and exists to help
898 debug other problems.
900 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
901 a filename to be served as 'robots.txt' to discourage web spiders.
902 Adapted from a patch by Tobi Vollebregt, thanks!
903 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
904 (Waterfall.test_waterfall): tweak the way that filenames are put
905 into the config file, to accomodate windows pathnames better.
907 * docs/buildbot.texinfo (HTML Waterfall): document it
909 * buildbot/process/process_twisted.py
910 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
911 changed the build process. The new setup.py no longer takes the
913 (FullTwistedBuildFactory.__init__): same
914 (TwistedReactorsBuildFactory.__init__): same
916 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
917 be placed in the [hooks] section of the central repository (the
918 one that everybody pushes changes to).
920 2006-05-20 Brian Warner <warner@lothar.com>
922 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
923 .darcs-context file, use binary mode. I think this was causing a
924 Darcs failure under windows.
926 2006-05-19 Brian Warner <warner@lothar.com>
928 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
929 use a timezone string of +0000 and gmtime, since this timestamp is
930 sent to a buildmaster and %z is broken.
932 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
933 string and localtime, since this timestamp will only be consumed
934 locally, and %z is broken.
936 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
937 gmtime, since this timestamp is returned to the buildmaster, and
940 2006-05-18 Brian Warner <warner@lothar.com>
942 * NEWS: update in preparation for next release
944 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
945 setup-repository and do-we-have-the-vc-tools code into a separate
946 "helper" class, which sticks around in a single module-level
947 object. This seems more likely to continue to work in the future
948 than having it hide in the TestCase and hope that TestCases stick
949 around for a long time.
951 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
952 addremove' has been deprecated in recent versions of mercurial, so
955 2006-05-07 Brian Warner <warner@lothar.com>
957 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
958 operating under windows, move the file before opening it, since
959 you can't rename a file that somebody has open.
961 * buildbot/process/base.py (Build.setupBuild): if something goes
962 wrong while creating a Step, log the name and arguments, since the
963 error message when you get the number of arguments wrong is really
966 2006-05-06 Brian Warner <warner@lothar.com>
968 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
969 bugs in twisted-specific code not covered by my unit tests, this
970 time use 'cmd' argument instead of self.cmd
972 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
973 fix stupid braino: either use startwith or find()==0, not both.
974 (TwistedReactorsBuildFactory.__init__): another dumb typo
976 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
977 mark this test as TODO under windows, since process-killing seems
978 dodgy there. We'll come back to this later and try to fix it
981 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
982 and don't include a timezone
983 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
984 This should avoid the windows-with-verbose-timezone-name problem
986 (Patch.testPatch): add a test which runs 'patch' with less
987 overhead than the full VCBase.do_patch sequence, to try to isolate
988 a windows test failure. This one uses slave.commands.ShellCommand
989 and 'patch', but none of the VC code.
991 * buildbot/slave/commands.py (getCommand): use which() to find the
992 executables for 'cvs', 'svn', etc. This ought to help under
995 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
996 working directory before starting. If an earlier test failed, the
997 leftover directory would mistakenly flunk a later test.
998 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
999 Make sure that we use the right commandlines if which("tla") picks
1000 up "tla.exe" (as it does under windows).
1001 (TlaSupport.do_get): factor out this tla-vs-baz difference
1002 (TlaSupport.vc_create): more tla-vs-baz differences
1004 * buildbot/test/test_slavecommand.py
1005 (ShellBase.testShellMissingCommand): stop trying to assert
1006 anything about the error message: different shells on different
1007 OSes with different languages makes it hard, and it really isn't
1008 that interesting of a thing to test anyway.
1010 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
1011 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
1012 "Panther"), because it has a bug which flunks a couple tests in
1013 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
1014 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
1015 able to test that yet.
1017 2006-04-30 Brian Warner <warner@lothar.com>
1019 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
1020 make sure child commands emit messages in english, so our regexps
1021 will match. Thanks to Nikaus Giger for identifying the problems.
1022 (VCBase._do_vctest_export_1): mode="export" is not responsible
1023 for setting the "got_revision" property, since in many cases it is
1024 not convenient to determine.
1025 (SVNSupport.capable): when running 'svn --version' to check for
1026 ra_local, we want error messages in english
1027 * buildbot/test/test_slavecommand.py
1028 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
1029 to emit the error message in english
1031 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
1032 the environment with $LC_ALL="C" so that Commands which need to
1033 parse the output of their child processes can obtain it in
1035 (SVN.parseGotRevision): call "svn info" afterwards instead of
1036 watching the output of the "svn update" or "svn checkout".
1037 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
1038 (Arch.parseGotRevision): same
1039 (Bazaar.parseGotRevision): same
1040 (Mercurial.parseGotRevision): same
1042 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
1043 $LC_ALL="C" when running commands under 'buildbot try', too
1045 * buildbot/test/__init__.py: remove the global os.environ()
1046 setting, instead we do it just for the tests that run commands and
1047 need to parse their output.
1049 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
1050 remove the overly-short .timeout on this test, because non-DNotify
1051 platforms must fall back to polling which happens at 10 second
1052 intervals, so a 5 second timeout would never succeed.
1054 2006-04-24 Brian Warner <warner@lothar.com>
1056 * docs/buildbot.texinfo (Installing the code): update trial
1057 invocation, SF#1469116 by Niklaus Giger.
1058 (Attributes of Changes): updated branch-name examples to be
1059 a bit more realistic, SF#1475240 by Stephen Davis.
1061 * contrib/windows/buildbot2.bat: utility wrapper for windows
1062 developers, contributed by Nick Trout (after a year of neglect..
1063 sorry!). SF#1194231.
1065 * buildbot/test/test_vc.py (*.capable): store the actual VC
1066 binary's pathname in VCS[vcname], so it can be retrieved later
1067 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
1068 strip out non-numeric timezone information, specifically the funky
1069 German string that his system produced that confuses CVS.
1070 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
1071 allow Darcs tests to work on windows
1072 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
1073 procutils.which() everywhere, to allow tryclient to work under
1074 windows. Also from Niklaus Giger, SF#1463394.
1076 * buildbot/twcompat.py (which): move the replacement for a missing
1077 twisted.python.procutils.which from test_vc.py to here, so it can
1078 be used in other places too (specifically tryclient.py)
1080 2006-04-23 Brian Warner <warner@lothar.com>
1082 * buildbot/status/html.py (StatusResourceBuild.body): replace the
1083 bare buildbotURL/projectName line with a proper DIV, along with a
1084 CSS class of "title", from Stefan Seefeld (SF#1461675).
1085 (WaterfallStatusResource.body0): remove the redundant 'table'
1086 class from the table
1087 (WaterfallStatusResource.body): same. Also add class="LastBuild"
1088 to the top-row TR, and class="Activity" to the second-row TR,
1089 rather than putting them in the individual TD nodes.
1091 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
1092 'got_revision' build property for all VC systems that implement
1093 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
1095 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
1096 to determine which revision we actually obtained
1097 (CVS.parseGotRevision): implement this for CVS, which just means
1098 to grab a timestamp. Not ideal, and it depends upon the buildslave
1099 having a clock that is reasonably well syncronized with the server,
1100 but it's better than nothing.
1101 (SVN.parseGotRevision): implement it for SVN, which is accurate
1102 (Darcs.parseGotRevision): same
1103 (Arch.parseGotRevision): same
1104 (Bazaar.parseGotRevision): same
1105 (Mercurial.parseGotRevision): same
1107 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
1108 keep a record of all non-stdout/stderr/header/rc status updates,
1109 for the benefit of RemoteCommands that send other useful things,
1111 (Source.commandComplete): put any 'got_revision' status values
1112 into a build property of the same name
1115 * buildbot/process/step_twisted.py (Trial): update to deal with
1116 new ShellCommand refactoring
1118 * docs/buildbot.texinfo (Build Properties): document new feature
1119 that allows BuildSteps to get/set Build-wide properties like which
1120 revision was requested and/or checked out.
1122 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
1123 * buildbot/status/builder.py (BuildStatus.getProperty): implement
1124 it. Note that this bumps the persistenceVersion of the saved Build
1125 object, so add the necessary upgrade-old-version logic to include
1126 an empty properties dict.
1128 * buildbot/process/base.py (Build.setProperty): implement it
1129 (Build.getProperty): same
1130 (Build.startBuild): change build startup to set 'branch',
1131 'revision', and 'slavename' properties at the right time
1133 * buildbot/process/step.py (BuildStep.__init__): change setup to
1134 require 'build' argument in a better way
1135 (LoggingBuildStep): split ShellCommand into two pieces, for better
1136 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
1137 a single RemoteCommand that sends stdout/stderr status text. It
1138 also provides the usual commandComplete / createSummary /
1139 evaluateCommand / getText methods to be overridden...
1140 (ShellCommand): .. whereas ShellCommand is specifically for
1141 running RemoteShellCommands. Other shell-like BuildSteps (like
1142 Source) can inherit from LoggingBuildStep instead of ShellCommand
1143 (WithProperties): marker class to do build-property interpolation
1144 (Source): inherit from LoggingBuildStep instead of ShellCommand
1147 * buildbot/test/test_properties.py: test new functionality
1149 2006-04-21 Brian Warner <warner@lothar.com>
1151 * buildbot/test/test_vc.py: rename testBranch to
1152 testCheckoutBranch to keep the tests in about the right
1155 2006-04-18 Brian Warner <warner@lothar.com>
1157 * docs/buildbot.texinfo (PBListener): improve cross-references
1158 between PBListener and 'buildbot statusgui', thanks to John Pye
1161 2006-04-17 Brian Warner <warner@lothar.com>
1163 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
1164 running under Twisted-1.3.0, otherwise skipped tests are reported
1167 * all: use isinstance() instead of 'type(x) is foo', suggested by
1170 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
1171 oops, fix a brain-fade from the other week, when making the
1172 addStep changes. I changed all the __init__ upcalls to use the
1173 wrong superclass name.
1174 (FullTwistedBuildFactory.__init__): same
1175 (TwistedDebsBuildFactory.__init__): same
1176 (TwistedReactorsBuildFactory.__init__): same
1177 (TwistedBuild.isFileImportant): use .startswith for clarity,
1178 thanks to Neal Norwitz for the suggestions.
1180 * contrib/viewcvspoll.py: script to poll a viewcvs database for
1181 changes, then deliver them over PB to a remote buildmaster.
1183 * contrib/svnpoller.py: added script by John Pye to poll a remote
1184 SVN repository (by running 'svn log') from a cronjob, and run
1185 'buildbot sendchange' to deliver the changes to a remote
1187 * contrib/svn_watcher.py: added script by Niklaus Giger (a
1188 modification of svnpoller.py), same purpose, but this one loops
1189 internally (rather than expecting to run from a cronjob) and works
1191 * contrib/README.txt: same
1193 2006-04-11 Brian Warner <warner@lothar.com>
1195 * all: fix a number of incorrect names and missing imports, thanks
1196 to Anthony Baxter for the patch.
1197 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
1198 remove unused buggy method.
1199 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
1200 comes from shutil, not "shutils"
1201 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
1202 (Arch.checkSlaveVersion): same
1203 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
1205 * buildbot/process/step_twisted2.py: add some missing imports
1206 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
1207 this code used to live in twisted.internet.defer
1209 2006-04-10 Brian Warner <warner@lothar.com>
1211 * buildbot/process/step.py (Mercurial): add Mercurial support
1212 * buildbot/slave/commands.py (Mercurial): same
1213 * buildbot/scripts/tryclient.py (MercurialExtractor): same
1214 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
1215 not yet tested, but 'try' support *is* covered
1216 * docs/buildbot.texinfo (Mercurial): document it
1218 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
1219 some debugging messages (turned off)
1220 * buildbot/test/test_vc.py: improve debug messages
1222 2006-04-07 Brian Warner <warner@lothar.com>
1224 * buildbot/test/test_vc.py (which): define our own which() in case
1225 we can't import twisted.python.procutils, because procutils doesn't
1226 exist in Twisted-1.3
1228 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
1229 of SlaveLocks for performance tests
1231 * docs/examples/twisted_master.cfg: update to match current usage
1233 * buildbot/changes/p4poller.py (P4Source): add new arguments:
1234 password, p4 binary, pollinterval, maximum history to check.
1235 Patch from an anonymous sf.net contributor, SF#1219384.
1236 * buildbot/process/step.py (P4Sync.__init__): add username,
1237 password, and client arguments.
1238 * buildbot/slave/commands.py (P4Sync): same
1240 2006-04-05 Brian Warner <warner@lothar.com>
1242 * buildbot/process/factory.py (BuildFactory.addStep): new method
1243 to add steps to a BuildFactory. Use it instead of f.steps.append,
1244 and you can probably avoid using the s() convenience function.
1245 Patch from Neal Norwitz, sf.net #1412605.
1246 (other): update all factories to use addStep
1247 * buildbot/process/process_twisted.py: update all factories to use
1250 2006-04-03 Brian Warner <warner@lothar.com>
1252 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
1253 work under windows too. Adapted from a patch by Niklaus Giger,
1254 addresses SF#1463399.
1256 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
1257 spawned commands emit parseable results in english and not some
1258 other language. Patch from Niklaus Giger, SF#1463395.
1260 * README (INSTALLATION): discourage users from running unit tests on
1261 a "network drive", patch from Niklaus Giger, SF#1463394.
1263 2006-03-22 Brian Warner <warner@lothar.com>
1265 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
1266 function to turn a repository-relative pathname into a (branch,
1267 branch-relative-filename) tuple. Change this function to handle
1268 the branch naming policy used by your Subversion repository.
1269 Thanks to AllMyData.com for sponsoring this work.
1271 2006-03-16 Brian Warner <warner@lothar.com>
1273 * buildbot/scripts/sample.cfg: add python-mode declaration for
1274 vim. Thanks to John Pye for the patch.
1276 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
1277 command line, mention the importance of running 'crontab' as the
1278 buildmaster/buildslave user. Thanks to John Pye for the catch.
1280 2006-03-13 Brian Warner <warner@lothar.com>
1282 * buildbot/status/words.py (IRC): add an optional password=
1283 argument, which will be sent to Nickserv in an IDENTIFY message at
1284 login, to claim the nickname. freenode requires this before the
1285 bot can sent (or reply to) private messages. Thanks to Clement
1286 Stenac for the patch.
1287 * docs/buildbot.texinfo (IRC Bot): document it
1289 * buildbot/status/builder.py (LogFile.merge): don't write chunks
1290 larger than chunkSize. Fixes SF#1349253.
1291 * buildbot/test/test_status.py (Log.testLargeSummary): test it
1292 (Log.testConsumer): update to match new internal chunking behavior
1294 2006-03-12 Brian Warner <warner@lothar.com>
1296 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
1298 * buildbot/test/test_maildir.py (MaildirTest): rename the
1299 'timeout' method, as it collides with trial's internals
1301 * buildbot/scripts/runner.py: add 'buildbot restart' command
1302 (stop): don't sys.exit() out of here, otherwise restart can't work
1303 * docs/buildbot.texinfo (Shutdown): document it
1305 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
1306 * buildbot/status/html.py (Waterfall.__init__): same
1307 * buildbot/process/builder.py (Builder.startBuild): same
1308 * buildbot/process/base.py (BuildRequest): same
1309 * buildbot/sourcestamp.py (SourceStamp): same
1310 * buildbot/scheduler.py (Nightly): same
1312 * buildbot/__init__.py (version): bump to 0.7.2+ while between
1314 * docs/buildbot.texinfo: same
1316 2006-02-17 Brian Warner <warner@lothar.com>
1318 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
1319 * docs/buildbot.texinfo: set version number to match
1320 * NEWS: update for 0.7.2
1322 2006-02-16 Brian Warner <warner@lothar.com>
1324 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
1326 2006-02-09 Brian Warner <warner@lothar.com>
1328 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1329 add text to explain per-build branch parameters
1330 * NEWS: mention --umask
1332 2006-02-08 Brian Warner <warner@lothar.com>
1334 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
1336 (SlaveOptions.optParameters): add --umask, to make it possible to
1337 make buildslave-generated files (including build products) be
1340 * buildbot/slave/bot.py (BuildSlave.startService): same
1342 2006-01-23 Brian Warner <warner@lothar.com>
1344 * buildbot/status/builder.py: urllib.quote() all URLs that include
1345 Builder names, so that builders can include characters like '/'
1346 and ' ' without completely breaking the resulting HTML. Thanks to
1347 Kevin Turner for the patch.
1348 * buildbot/status/html.py: same
1349 * buildbot/test/test_web.py (GetURL.testBuild): match changes
1351 * NEWS: update in preparation for upcoming release
1353 2006-01-18 Brian Warner <warner@lothar.com>
1355 * docs/examples/twisted_master.cfg: update to match the Twisted
1356 buildbot: remove python2.2, switch to exarkun's buildslaves,
1357 disable the .deb builder until we figure out how to build twisted
1358 .debs from SVN, add some ktrace debugging to the OS-X build
1359 process and remove the qt build, remove threadless builders,
1360 change freebsd builder to use landonf's buildslave.
1362 2006-01-12 Brian Warner <warner@lothar.com>
1364 * buildbot/master.py (Manhole.__init__): let port= be a strports
1365 specification string, but handle a regular int for backwards
1366 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
1367 used in master.cfg to limit connections to just the local host.
1368 (BuildMaster.loadConfig): same for c['slavePortnum']
1369 * buildbot/scheduler.py (Try_Userpass.__init__): same
1370 * buildbot/status/client.py (PBListener.__init__): same
1371 * buildbot/status/html.py (Waterfall.__init__): same, for both
1372 http_port and distrib_port. Include backwards-compatibility checks
1373 so distrib_port can be a filename string and still mean unix:/foo
1374 * docs/buildbot.texinfo (Setting the slaveport): document it
1375 (Debug options): same
1376 (HTML Waterfall): same
1379 * buildbot/test/test_config.py (ConfigTest): test it
1381 * buildbot/master.py (BuildMaster.loadConfig): wait for the
1382 slaveport's disownServiceParent deferred to fire before opening
1383 the new one. Fixes an annoying bug in the unit tests.
1385 2006-01-03 Brian Warner <warner@lothar.com>
1387 * buildbot/master.py (BuildMaster): remove the .schedulers
1388 attribute, replacing it with an allSchedulers() method that looks
1389 for all IService children that implement IScheduler. Having only
1390 one parent/child relationship means fewer opportunities for bugs.
1391 (BuildMaster.allSchedulers): new method
1392 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
1393 also fix ugly bug that caused any config-file reload to
1394 half-forget about the earlier Schedulers, causing an exception
1395 when a Change arrived and was handed to a half-connected
1396 Scheduler. The exception was in scheduler.py line 54ish:
1397 self.parent.submitBuildSet(bs)
1398 exceptions.AttributeError: 'NoneType' object has no attribute
1400 (BuildMaster.addChange): update to use allSchedulers()
1402 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
1403 to work properly with twisted-1.3.0, where you must explicitly
1404 include the __implements__ from parent classes
1405 (BaseScheduler.__repr__): make it easier to distinguish distinct
1407 (BaseUpstreamScheduler.__implements__): same
1409 * buildbot/status/builder.py (Status.getSchedulers): update to
1411 * buildbot/test/test_run.py (Run.testMaster): same
1412 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
1413 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
1414 make sure Scheduler instances are left alone when an identical
1415 config file is reloaded
1416 (ConfigElements.testSchedulers): make sure Schedulers are properly
1419 * Makefile (TRIALARGS): my local default Twisted version is now
1420 2.1.0, update the trial arguments accordingly
1422 2005-12-22 Brian Warner <warner@lothar.com>
1424 * docs/examples/twisted_master.cfg: merge changes from pyr: add
1427 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
1428 addChange in the parent class, although I suspect this should be
1429 fixed better in the future.
1431 2005-11-26 Brian Warner <warner@lothar.com>
1433 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
1434 explode when branch==None, thanks to Kevin Turner for the catch
1435 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
1438 * buildbot/__init__.py (version): bump to 0.7.1+ while between
1440 * docs/buildbot.texinfo: same
1442 2005-11-26 Brian Warner <warner@lothar.com>
1444 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
1445 * docs/buildbot.texinfo: set version number to match
1447 2005-11-26 Brian Warner <warner@lothar.com>
1449 * NEWS: update for 0.7.1
1451 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1452 sure that unsubscribe works even if we never sent an ETA update.
1453 Also, don't explode on duplicate unsubscribe.
1454 (BuildStepStatus.addLog): make the convenience "return self"-added
1455 watcher automatically unsubscribe when the Step finishes.
1456 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1457 (BuildStatus.stepStarted): same auto-unsubscribe
1458 (BuilderStatus.buildStarted): same auto-unsubscribe
1460 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1462 (IStatusReceiver.stepStarted): same
1463 (IStatusReceiver.logStarted): same
1465 * buildbot/test/test_run.py (Status): move the Status test..
1466 * buildbot/test/test_status.py (Subscription): .. to here
1468 2005-11-25 Brian Warner <warner@lothar.com>
1470 * NEWS: more updates
1472 * buildbot/locks.py: fix the problem in which loading a master.cfg
1473 file that changes some Builders (but not all of them) can result
1474 in having multiple copies of the same Lock. Now, the real Locks
1475 are kept in a table inside the BotMaster, and the Builders/Steps
1476 use "LockIDs", which are still instances of MasterLock and
1477 SlaveLock. The real Locks are instances of the new RealMasterLock
1478 and RealSlaveLock classes.
1479 * buildbot/master.py (BotMaster.getLockByID): new method to
1480 convert LockIDs into real Locks.
1481 * buildbot/process/base.py (Build.startBuild): convert LockIDs
1482 into real Locks before building
1483 * buildbot/process/step.py (BuildStep.startStep): same
1484 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1485 exercises the problem
1488 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1489 what Schedulers are available
1491 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1492 work by Dobes Vandermeer and hacked mercilessly by me. This offers
1493 'cron'-style build scheduling at certain times of day, week,
1495 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1497 * buildbot/scheduler.py (Scheduler): change fileIsImportant
1498 handling: treat self.fileIsImportant more as an attribute that
1499 contains a callable than as a method. If the attribute is None,
1500 don't call it and assume all filenames are important. It is still
1501 possible to provide a fileIsImportant method in a subclass,
1503 (AnyBranchScheduler): handle fileIsImportant=None, previously it
1505 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1506 test using AnyBranchScheduler with fileIsImportant=None
1508 2005-11-24 Brian Warner <warner@lothar.com>
1510 * buildbot/test/test_config.py (StartService): don't claim a fixed
1511 port number, instead set slavePort=0 on the first pass, figure out
1512 what port was allocated, then switch to a config file that uses
1515 * buildbot/master.py (BuildMaster.loadConfig): close the old
1516 slaveport before opening the new one, because unit tests might
1517 replace slavePort=0 with the same allocated portnumber, and if we
1518 don't wait for the old port to close first, we get a "port already
1519 in use" error. There is a tiny race condition here, but the only
1520 threat is from other programs that bind (statically) to the same
1521 port number we happened to be allocated, and only if those
1522 programs use SO_REUSEADDR, and only if they get control in between
1525 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
1527 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
1528 deleted ChangeSources before adding any new ones
1529 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
1530 compare_attrs, to make sure that a config-file reload does not
1531 unnecessarily replace an unmodified ChangeSource instance
1532 * buildbot/test/test_config.py (ConfigTest.testSources): update
1534 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
1535 mean "don't build anything", and add a warning if it gets used
1536 because it isn't actually useful.
1538 * contrib/svn_buildbot.py: update example usage to match the port
1539 number that gets used by the PBChangeSource
1540 * buildbot/scripts/sample.cfg: add example of PBChangeSource
1542 2005-11-22 Brian Warner <warner@lothar.com>
1544 * NEWS: start collecting items for next release
1546 * buildbot/process/step.py (SVN.computeSourceRevision): assume
1547 revisions are strings
1548 (P4Sync.computeSourceRevision): same
1550 * buildbot/status/html.py (StatusResourceBuild.body): add a link
1551 to the Buildbot's overall status page
1552 (StatusResourceBuilder.body): same
1554 2005-11-15 Brian Warner <warner@lothar.com>
1556 * buildbot/master.py (BuildMaster.loadConfig): serialize the
1557 config-file loading, specifically to make sure old StatusTargets
1558 are finished shutting down before new ones start up (thus
1559 resolving a bug in which changing the Waterfall object would fail
1560 because both new and old instances were claiming the same
1561 listening port). Also load new Schedulers after all the new
1562 Builders are set up, in case they fire off a new build right away.
1563 * buildbot/test/test_config.py (StartService): test it
1565 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
1566 the branch name to the mail body
1568 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
1569 Without it, a config-file reload fails to update an existing
1571 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
1572 username/passwd to compare_attrs, for the same reason
1573 * buildbot/status/html.py (Waterfall): add favicon to
1574 compare_attrs, same reason
1576 2005-11-05 Brian Warner <warner@lothar.com>
1578 * buildbot/scripts/tryclient.py (createJobfile): stringify the
1579 baserev before stuffing it in the jobfile. This resolves problems
1580 under SVN (and probably Arch) where revisions are expressed as
1581 numbers. I'm inclined to use string-based revisions everywhere in
1582 the future, but this fix should be safe for now. Thanks to Steven
1583 Walter for the patch.
1585 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
1586 binary mode when opening pickle files, to make windows work
1587 better. Thanks to Dobes Vandermeer for the catch.
1588 * buildbot/status/builder.py (BuildStatus.saveYourself): same
1589 (BuilderStatus.getBuildByNumber): same
1590 (Status.builderAdded): same
1591 * buildbot/master.py (BuildMaster.loadChanges): same
1593 * buildbot/util.py (Swappable): delete unused leftover code
1595 * buildbot/process/step.py (SVN): when building on a non-default
1596 branch, add the word "[branch]" to the VC step's description, so
1597 it is obvious that we're not building the usual stuff. Likewise,
1598 when we are building a specific revision, add the text "rNNN" to
1599 indicate what that revision number is. Thanks to Brad Hards and
1600 Nathaniel Smith for the suggestion.
1601 (Darcs.startVC): same
1602 (Arch.startVC): same
1603 (Bazaar.startVC): same
1605 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
1606 typo, caught by Mark Dillavou, closes SF#1216636.
1608 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
1609 about a test to add some day
1611 * docs/examples/twisted_master.cfg: update: bot1 can now handle
1612 the 'full-2.3' build, and the 'reactors' build is now run under
1613 python-2.4 because the buildslave no longer has gtk/etc bindings
1614 for earlier versions.
1616 2005-11-03 Brian Warner <warner@lothar.com>
1618 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
1619 method, takes an IBuildStatus and rebuilds it. It might make more
1620 sense to add this to IBuildControl instead, but that instance goes
1621 away completely once the build has finished, and resubmitting
1622 builds can take place weeks later.
1623 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1624 * buildbot/status/html.py (StatusResourceBuild): also stash an
1625 IBuilderControl so we can use resubmitBuild.
1626 (StatusResourceBuild.body): render "resubmit" button if we can.
1627 Also add hrefs for each BuildStep
1628 (StatusResourceBuild.rebuild): add action for "resubmit" button
1629 (StatusResourceBuilder.getChild): give it an IBuilderControl
1631 * buildbot/status/builder.py (Status.getURLForThing): change the
1632 URL for BuildSteps to have a "step-" prefix, so the magic URLs
1633 that live as targets of buttons like "stop" and "rebuild" can't
1635 * buildbot/status/builder.py (Status.getURLForThing): same
1636 * buildbot/status/html.py (StatusResourceBuild.getChild): same
1637 (StepBox.getBox): same
1638 * buildbot/test/test_web.py (GetURL): same
1641 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1642 exclusivity checks after Source.__init__ upcall, so misspelled
1643 arguments will be reported more usefully
1644 (Darcs.__init__): same
1646 2005-10-29 Brian Warner <warner@lothar.com>
1648 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1649 builder. Move the Try scheduler off to a separate port.
1651 2005-10-27 Brian Warner <warner@lothar.com>
1653 * buildbot/clients/gtkPanes.py
1654 (TwoRowClient.remote_builderRemoved): disappearing Builders used
1655 to cause the app to crash, now they don't.
1657 * buildbot/clients/debug.py: display the buildmaster's location
1658 in the window's title bar
1660 2005-10-26 Brian Warner <warner@lothar.com>
1662 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
1663 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
1664 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
1666 * buildbot/status/html.py (td): put a single non-breaking space
1667 inside otherwise empty <td> elements, as a workaround for buggy
1668 browsers which would optimize them away (along with any associated
1669 styles, like the kind that create the waterfall grid borders).
1670 Patch from Frerich Raabe.
1672 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
1673 argv-list as an argument, defaulting to ["-to"], which is
1674 appropriate for the Trial that comes with Twisted-2.1.0 and
1675 earlier. The Trial in current Twisted SVN wants
1676 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1677 defaults to an empty list.
1678 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1679 match it, now that trialMode= is a list instead of a single string
1681 * buildbot/__init__.py (version): bump to 0.7.0+ while between
1683 * docs/buildbot.texinfo: same
1685 2005-10-24 Brian Warner <warner@lothar.com>
1687 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1688 * docs/buildbot.texinfo: set version number to match
1690 2005-10-24 Brian Warner <warner@lothar.com>
1692 * README: update for 0.7.0
1694 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1696 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1697 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1698 send the branch= argument unless the user really provided one, to
1699 retain compatibility with older buildmasters that don't accept
1701 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1704 * docs/buildbot.texinfo: update lots of stuff
1706 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1707 to the 'buildbot sendchange' command
1708 * buildbot/clients/sendchange.py (Sender.send): same
1709 * buildbot/changes/pb.py (ChangePerspective): same
1710 * buildbot/test/test_changes.py (Sender.testSender): test it
1712 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1713 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1714 for consistency with other BuildStep arguments that use camelCase.
1715 Well, at least more of them use camelCase (like flunkOnWarnings)
1716 than don't.. I wish I'd picked one style and stuck with it
1717 earlier. Annoying, but it's best done before the release, since
1718 these arguments didn't exist at all in 0.6.6 .
1720 * buildbot/test/test_vc.py (SVN.testCheckout): same
1721 (Darcs.testPatch): same
1722 * docs/buildbot.texinfo (SVN): document the change
1723 (Darcs): same, add some build-on-branch docs
1724 * docs/examples/twisted_master.cfg: match change
1726 * buildbot/process/step.py (BuildStep): rename
1727 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1728 how it is normally used.
1729 * buildbot/test/test_steps.py (Version.checkCompare): same
1731 * buildbot/process/step.py (CVS.startVC): refuse to build
1732 update/copy -style builds on a non-default branch with an old
1733 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1734 concern is that it will do a VC 'update' in an existing tree when
1735 it is supposed to be switching branches (and therefore clobbering
1736 the tree to do a full checkout), thus building the wrong source.
1737 This used to be a warning, but I think the confusion it is likely
1738 to cause warrants making it an error.
1739 (SVN.startVC): same, also make mode=export on old slaves an error
1740 (Darcs.startVC): same
1741 (Git.startVC): improve error message for non-Git-enabled slaves
1742 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1743 specific revision is built on a slave that doesn't pay attention
1744 to args['revision'], because for slowly-changing trees it will
1745 probably do the right thing, and because we have no way to tell
1746 whether we're asking it to build the most recent version or not.
1747 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1749 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1750 that 'master' is in host:portnum format, to catch errors sooner
1752 2005-10-23 Brian Warner <warner@lothar.com>
1754 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1755 when creating the list of warning messages, include the line
1756 immediately after each WARNING: line, since that's usually where
1757 the file and line number wind up.
1759 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1764 2005-10-22 Brian Warner <warner@lothar.com>
1766 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1767 patch from Brad Hards
1768 * buildbot/status/classic.css: same
1769 * buildbot/test/test_web.py (Waterfall): match changes
1771 * buildbot/test/test_steps.py (BuildStep.setUp): set
1772 nextBuildNumber so the test passes
1773 * buildbot/test/test_status.py (MyBuilder): same
1775 * buildbot/status/html.py (StatusResourceBuild.body): revision
1776 might be numeric, so stringify it before html-escapifying it
1777 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1778 timer for the upcoming build
1779 * buildbot/status/classic.css: add background-color attributes for
1780 offline/waiting/building classes
1782 * buildbot/status/builder.py (BuildStatus): derive from
1783 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1784 the default (i.e. unknown) .slavename to "???" instead of None,
1785 since even unknown slavenames need to be printed eventually.
1786 (BuilderStatus): also derive from styles.Versioned . More
1787 importantly, determine .nextBuildNumber at creation/unpickling
1788 time by scanning the directory of saved BuildStatus instances and
1789 choosing one larger than the highest-numbered one found. This
1790 should fix the problem where random errors during upgrades cause
1791 the buildbot to forget about earlier builds. .nextBuildNumber is
1792 no longer stored in the pickle.
1793 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1794 at least log the error. Also call Builder.determineNextBuildNumber
1795 once the basedir is set.
1797 * buildbot/master.py (BuildMaster.loadChanges): do
1798 styles.doUpgrade afterwards, in case I decide to make Changes
1799 derived from styles.Versioned some day and forget to make this
1803 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1804 when running under older pythons (<2.3) in which the shlex module
1805 doesn't have a 'split' function.
1807 * buildbot/process/step.py (ShellCommand.start): make
1808 errorMessages= be a list of strings to stuff in the log before the
1809 command actually starts. This makes it easier to flag multiple
1810 warning messages, e.g. when the Source steps have to deal with an
1812 (CVS.startVC): handle slaves that don't handle multiple branches
1813 by switching into 'clobber' mode
1814 (SVN.startVC): same. Also reject branches without base_url
1815 (Darcs.startVC): same. Also reject revision= in older slaves
1816 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1817 (Bazaar.startVC): same, and test for baz separately than for arch
1819 * buildbot/slave/commands.py (cvs_ver): document new features
1821 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1822 (BuildStep.slaveVersionNewEnough): more useful utility method
1823 * buildbot/test/test_steps.py (Version): start testing it
1825 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1826 the 'force' command requires python2.3, for the shlex.split method
1828 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1829 since we don't use it anymore. The Twisted buildbot uses a
1832 2005-10-21 Brian Warner <warner@lothar.com>
1834 * buildbot/process/process_twisted.py: rework all BuildFactory
1835 classes to take a 'source' step as an argument, instead of
1836 building up the SVN instance in the factory.
1837 * docs/examples/twisted_master.cfg: enable build-on-branch by
1838 providing a base_url and default_branch
1840 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1841 control over --branch and --revision, not that they are always
1843 * buildbot/status/html.py (StatusResourceBuilder.force): same
1844 (StatusResourceBuild.body): display SourceStamp components
1846 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1847 IRC 'force' command, so it can be shared with an eventual
1848 command-line-tool 'buildbot force' mode.
1849 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1851 2005-10-20 Brian Warner <warner@lothar.com>
1853 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1855 * docs/examples/twisted_master.cfg: update to use Schedulers
1857 * buildbot/scripts/sample.cfg: update with Schedulers
1859 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1860 method specifically for use by HTML "force build" button and the
1861 IRC "force" command. Raises an immediate error if there are no
1863 (IBuilderControl.requestBuild): make this just submit a build, not
1864 try to check for existing slaves or set up any when-finished
1865 Deferreds or anything.
1866 * buildbot/process/builder.py (BuilderControl): same
1867 * buildbot/status/html.py (StatusResourceBuilder.force): same
1868 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1869 * buildbot/test/test_slaves.py: same
1870 * buildbot/test/test_web.py: same
1872 2005-10-19 Brian Warner <warner@lothar.com>
1874 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1875 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1877 2005-10-18 Brian Warner <warner@lothar.com>
1879 * buildbot/status/html.py: provide 'status' argument to most
1880 StatusResourceFOO objects
1881 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1882 and Logfiles" section to make the Build page into a more-or-less
1883 comprehensive source of status information about the build
1885 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1886 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1888 2005-10-17 Brian Warner <warner@lothar.com>
1890 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1891 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1892 out what to do about other projects: the correct options for
1893 recent Twisteds will not work for older ones.
1895 2005-10-15 Brian Warner <warner@lothar.com>
1897 * buildbot/status/builder.py (Status.getURLForThing): add method
1898 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1899 use this in email/IRC status clients to make them more useful, by
1900 providing the end user with hints on where to learn more about the
1901 object being reported on.
1902 * buildbot/test/test_web.py (GetURL): tests for it
1904 2005-10-14 Brian Warner <warner@lothar.com>
1906 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1907 fix bug resulting from deferredResult changes
1909 2005-10-13 Brian Warner <warner@lothar.com>
1911 * buildbot/test/test_changes.py: remove use of deferredResult
1912 * buildbot/test/test_config.py: same
1913 * buildbot/test/test_control.py: same
1914 * buildbot/test/test_status.py: same
1915 * buildbot/test/test_vc.py: this is the only remaining use, since
1916 it gets used at module level. This needs to be replaced by some
1917 sort of class-level run-once routine.
1919 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1921 * lots: implement multiple slaves per Builder, which means multiple
1922 current builds per Builder. Some highlights:
1923 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1924 of (state,currentBuilds) instead of (state,currentBuild)
1925 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1926 (IBuildStatus.getSlavename): new method, so you can tell which
1927 slave got used. This only gets set when the build completes.
1928 (IBuildRequestStatus.getBuilds): new method
1930 * buildbot/process/builder.py (SlaveBuilder): add a .state
1931 attribute to track things like ATTACHING and IDLE and BUILDING,
1933 (Builder): .. the .slaves attribute here, which has been turned
1934 into a simple list of available slaves. Added a separate
1935 attaching_slaves list to track ones that are not yet ready for
1937 (Builder.fireTestEvent): put off the test-event callback for a
1938 reactor turn, to make tests a bit more consistent.
1939 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1940 ping fails due to an exception. This needs work, I'm worried that
1941 a code error could lead to a constantly re-connecting slave.
1942 Especially since I'm trying to move to a distinct remote_ping
1943 method, separate from the remote_print that we currently use.
1944 (BuilderControl.requestBuild): return a convenience Deferred that
1945 provides an IBuildStatus when the build finishes.
1946 (BuilderControl.ping): ping all connected slaves, only return True
1947 if they all respond.
1949 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1950 reconnect when we shut down.
1952 * buildbot/status/builder.py: implement new methods, convert
1953 one-build-at-a-time methods to handle multiple builds
1954 * buildbot/status/*.py: do the same in all default status targets
1955 * buildbot/status/html.py: report the build's slavename in the
1956 per-Build page, report all buildslaves on the per-Builder page
1958 * buildbot/test/test_run.py: update/create tests
1959 * buildbot/test/test_slaves.py: same
1960 * buildbot/test/test_scheduler.py: remove stale test
1962 * docs/buildbot.texinfo: document the new builder-specification
1963 'slavenames' parameter
1965 2005-10-12 Brian Warner <warner@lothar.com>
1967 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1968 report failure correctly, causing Dependent builds to run when
1969 they shouldn't have.
1970 * buildbot/status/builder.py (BuildSetStatus): same
1971 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1972 (Set.testSuccess): test the both-pass case too
1973 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1974 fix this test: it was ending too early, masking the failure before
1975 (Logger): specialized StatusReceiver to make sure the dependent
1976 builds aren't even started, much less completed.
1978 2005-10-07 Brian Warner <warner@lothar.com>
1980 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1981 bot.SlaveBuilder being disowned in the middle of a build
1983 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1984 this inherit from StatusReceiver. Also upcall in __init__. This
1985 fixes the embarrasing crash when the new buildSetSubmitted method
1986 is invoked and Waterfall/etc don't implement their own.
1987 * buildbot/test/test_run.py: add a TODO note about a test to catch
1988 just this sort of thing.
1990 * buildbot/process/builder.py (Builder.attached): remove the
1991 already-attached warning, this situation is normal. Add some
1992 comments explaining it.
1994 2005-10-02 Brian Warner <warner@lothar.com>
1996 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1997 OverflowError when setting up dnotify, because some 64-bit systems
1998 have problems with signed-vs-unsigned constants and trip up on the
1999 DN_MULTISHOT flag. Patch from Brad Hards.
2001 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
2003 * buildbot/process/step.py (BuildStep, ShellCommand): Add
2004 progressMetrics, description, descriptionDone to the 'parms' list,
2005 and make use the 'parms' list from the implementation class
2006 instead of only BuildStep to initialize the parameters. This
2007 allows buildbot.process.factory.s() to initialize all the parms,
2008 not just those defined in directly by BuildStep.
2010 2005-09-03 Brian Warner <warner@lothar.com>
2012 * NEWS: start adding items for the next release
2014 * docs/examples/twisted_master.cfg: (sync with reality) turn off
2015 python2.2 tests, change 'Quick' builder to only use python2.3
2017 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
2019 * buildbot/status/html.py (StatusResourceBuilder.body): only show
2020 the "Ping Builder" button if the build control is available; the
2021 user sees an exception otherwise
2023 * docs/buildbot.texinfo (PBChangeSource): fix a typo
2025 2005-09-01 Brian Warner <warner@lothar.com>
2027 * buildbot/interfaces.py (IBuilderStatus.getState): update
2028 signature, point out that 'build' can be None
2029 (IBuildStatus.getETA): point out ETA can be none
2031 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
2033 * buildbot/status/words.py (IrcStatusBot.emit_status): same
2035 2005-08-31 Brian Warner <warner@lothar.com>
2037 * buildbot/status/base.py (StatusReceiver.builderChangedState):
2038 update to match correct signature: removed 'eta' argument
2039 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
2041 2005-08-30 Brian Warner <warner@lothar.com>
2043 * buildbot/status/builder.py (LogFile): remove the assertion that
2044 blows up when you try to overwrite an existing logfile, instead
2045 just emit a warning. This case gets hit when the buildmaster is
2046 killed and doesn't get a chance to write out the serialized
2047 BuilderStatus object, so the .nextBuildNumber attribute gets out
2050 * buildbot/scripts/runner.py (sendchange): add --revision_file to
2051 the 'buildbot sendchange' arguments, for the Darcs context file
2052 * docs/buildbot.texinfo (sendchange): document it
2054 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
2055 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
2056 (IStatus.getSchedulers): new method
2057 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
2058 (Status.getSchedulers): implement
2059 * buildbot/process/builder.py (Builder): maintain
2060 BuilderStatus.pendingBuilds
2061 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
2062 (TryBase.addChange): Try schedulers should ignore Changes
2064 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
2065 for 'try' on CVS/SVN
2066 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
2068 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
2069 report status properly.
2070 (Try.createJob): implement unique buildset IDs
2072 * buildbot/status/client.py (StatusClientPerspective): add a
2073 perspective_getBuildSets method for the benefit of jobdir-style
2075 * docs/buildbot.texinfo (try): more docs
2076 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
2079 2005-08-18 Brian Warner <warner@lothar.com>
2081 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
2082 actually work. It's functional but still kind of clunky. Also, it
2083 only works with the pb-style.. needs to be made to work with the
2086 * buildbot/status/client.py (RemoteBuildSet): new class
2087 (RemoteBuildRequest): same
2088 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
2089 object, not the internal BuildStatus object.
2090 (RemoteBuild.remote_subscribe): new method to subscribe to builds
2091 outside of the usual buildStarted() return value.
2092 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
2094 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
2095 (Try_Userpass_Perspective.perspective_try): return a remotely
2096 usable BuildSetStatus object
2098 * buildbot/interfaces.py (IBuildStatus): remove obsolete
2099 isStarted()/waitUntilStarted()
2101 2005-08-16 Brian Warner <warner@lothar.com>
2103 * buildbot/status/builder.py: implement IBuildSetStatus and
2104 IBuildRequestStatus, wire them into place.
2105 * buildbot/buildset.py: same. Add ID, move wait-until-finished
2106 methods into the BuildSetStatus object.
2107 * buildbot/interfaces.py: same
2108 (IStatus.getBuildSets): new method to get pending BuildSets
2109 (IStatusReceiver.buildsetSubmitted): new method which hears about
2111 * buildbot/master.py (BuildMaster.submitBuildSet): same
2112 * buildbot/process/base.py (BuildRequest): same, replace
2113 waitUntilStarted with subscribe/unsubscribe
2114 * buildbot/process/builder.py (BuilderControl.forceBuild): use
2115 subscribe instead of waitUntilStarted
2116 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
2118 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
2120 * buildbot/test/test_buildreq.py: update for new code
2121 * buildbot/test/test_control.py (Force.testRequest): same
2124 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
2125 for Darcs to not use the tempfile module, so it works under
2126 python-2.2 too. We really didn't need the full cleverness of that
2127 module, since the slave has exclusive control of its own builddir.
2129 2005-08-15 Brian Warner <warner@lothar.com>
2131 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
2132 for CVS trees. It doesn't work for non-trunk branches,
2134 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
2137 * Makefile: make it easier to test against python2.2
2139 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
2140 tearDown2, so things like Arch can unregister archives as they're
2141 shutting down. The previous subclass-override-tearDown technique
2142 resulted in a nested maybeWait() and test failures under
2145 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
2146 where we can (Arch), add a branch= argument to set the branch used
2148 (BazExtractor): extract the branch too
2149 (TlaExtractor): same
2150 * buildbot/scripts/runner.py (TryOptions): add --branch
2151 * docs/buildbot.texinfo (try): document --branch/try_branch
2153 * buildbot/slave/commands.py (Darcs): implement get-revision for
2154 Darcs, so that 'try' will work. This requires the tempfile module
2157 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
2158 of revisions, branches, and 'try' in the process.
2160 2005-08-11 Brian Warner <warner@lothar.com>
2162 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
2163 this, it got broken at some point in the last few releases
2164 * buildbot/status/words.py (IrcBuildRequest): reply was broken
2165 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
2166 specifically the removal of ETA information from the tuple
2168 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
2171 * docs/buildbot.texinfo (try): document both --builder and
2172 'try_builders' in .buildbot/options
2173 * buildbot/scripts/runner.py (TryOptions): add --builder,
2174 accumulate the values into opts['builders']
2175 * buildbot/scripts/tryclient.py (Try.__init__): set builders
2176 * buildbot/test/test_runner.py (Try): add some quick tests to make
2177 sure 'buildbot try --options' and .buildbot/options get parsed
2178 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2179 use --builder control
2181 * docs/buildbot.texinfo (try): add --port argument to PB style
2183 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
2184 actual SourceStamp. Still need to extract a branch name, somehow.
2185 (Try): finish implementing the try client side, still need a UI
2186 for specifying which builders to use
2187 (Try.getopt): factor our options/config-file reading
2188 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2190 * buildbot/test/test_vc.py: match SourceStampExtractor change
2192 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
2193 causes the twisted log to be sent to stderr
2195 * buildbot/scheduler.py (Try_Userpass): implement the PB style
2197 2005-08-10 Brian Warner <warner@lothar.com>
2199 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
2200 style is 90% done, still missing status reporting or waiting for
2201 the buildsets to finish, and it is completely untested.
2203 * buildbot/trybuild.py: delete file, move contents to ..
2204 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
2205 * buildbot/test/test_vc.py: match the move
2207 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
2208 of the TryScheduler, no buildsetID or status-tracking support yet
2209 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
2211 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
2212 possible to set the basedir after __init__ time, so it is easier
2213 to use as a Service-child of the BuildMaster instance
2215 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
2216 that delivers messages to its Service parent instead of requiring
2217 a subclass to be useful. This turns out to be much easier to build
2220 * buildbot/scripts/tryclient.py (createJob): utility code to
2221 create jobfiles, will eventually be used by 'buildbot try'
2223 2005-08-08 Brian Warner <warner@lothar.com>
2225 * docs/buildbot.texinfo (try): add docs on the
2226 as-yet-unimplemented Try scheduler
2228 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
2229 * buildbot/test/test_scheduler.py: .. here
2230 (Scheduling.testTryJobdir): add placeholder test for 'try'
2232 * buildbot/test/test_status.py (Log.testMerge3): update to match new
2233 addEntry merging (>=chunkSize) behavior
2234 (Log.testConsumer): update to handle new callLater(0) behavior
2236 * buildbot/test/test_web.py: rearrange tests a bit, add test for
2237 both the MAX_LENGTH bugfix and the resumeProducing hang.
2239 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
2240 put off the actual resumeProducing for a moment with
2241 reactor.callLater(0). This works around a twisted-1.3.0 bug which
2242 causes large logfiles to hang midway through.
2244 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
2245 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
2246 and to improve memory usage when streaming the file out to a web
2248 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
2249 make this work cleanly
2251 2005-08-03 Brian Warner <warner@lothar.com>
2253 * buildbot/trybuild.py: new file for 'try' utilities
2254 (getSourceStamp): run in a tree, find out the baserev+patch
2255 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
2256 implemented for SVN and Darcs, still working on Arch. I don't know
2257 how to make CVS work yet.
2259 * docs/buildbot.texinfo: document the 'buildbot' command-line
2260 tool, including the not-yet-implemented 'try' feature, and the
2261 in-flux .buildbot/ options directory.
2263 2005-07-20 Brian Warner <warner@lothar.com>
2265 * buildbot/locks.py: added temporary id() numbers to Lock
2266 descriptions, to track down a not-really-sharing-the-Lock bug
2268 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
2270 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
2271 needed for python2.2 compatibility
2272 * buildbot/test/test_vc.py: python2.2 compatibility: generators
2273 are from the __future__
2275 2005-07-19 Brian Warner <warner@lothar.com>
2277 * buildbot/master.py (BuildMaster.loadConfig): give a better error
2278 message when schedulers use unknown builders
2280 * buildbot/process/builder.py (Builder.compareToSetup): make sure
2281 SlaveLock('name') and MasterLock('name') are distinct
2283 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
2284 c['schedulers'] in such a way that we can actually accept
2286 * buildbot/test/test_config.py: check it
2288 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
2289 utility method to *all* the Schedulers
2290 (Periodic.listBuilderNames): same
2292 * docs/buildbot.texinfo (Interlocks): update chapter to match
2295 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
2296 to make sure that c['sources'], c['schedulers'], and c['status']
2297 are all lists of the appropriate objects, and that the Schedulers
2298 all point to real Builders
2299 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
2300 'listBuilderNames' utility method to support this
2301 * buildbot/scheduler.py: implement the utility method
2302 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
2304 * docs/buildbot.texinfo: add some @cindex entries
2306 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
2307 if it wasn't already set: most tla commands will fail unless one
2309 (Arch.createRepository): and disable bazaar's revision cache, since
2310 they cause test failures (the multiple repositories we create all
2311 interfere with each other through the cache)
2313 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
2314 bring it properly up to date with twisted-2.0 test guidelines
2316 * buildbot/master.py (BuildMaster): remove references to old
2317 'interlock' module, this caused a bunch of post-merge test
2319 * buildbot/test/test_config.py: same
2320 * buildbot/process/base.py (Build): same
2322 * buildbot/test/test_slaves.py: stubs for new test case
2324 * buildbot/scheduler.py: add test-case-name tag
2325 * buildbot/test/test_buildreq.py: same
2327 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
2328 unnecessary init code
2329 (Bot.remote_setBuilderList): match it
2331 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
2333 * buildbot/changes/mail.py (parseSyncmail): update comment
2335 * buildbot/test/test_slavecommand.py: disable Shell tests on
2336 platforms that don't suport IReactorProcess
2338 * buildbot/status/builder.py (LogFile): remove the 't' mode from
2339 all places where we open logfiles. It causes OS-X to open the file
2340 in some weird mode that that prevents us from mixing reads and
2341 writes to the same filehandle, which we depend upon to implement
2342 _generateChunks properly. This change doesn't appear to break
2343 win32, on which "b" and "t" are treated differently but a missing
2344 flag seems to be interpreted as "t".
2346 2005-07-18 Brian Warner <warner@lothar.com>
2348 * buildbot/slave/commands.py (ShellCommand): overhaul
2349 error-handling code, to try and make timeout/interrupt work
2350 properly, and make win32 happier
2351 * buildbot/test/test_slavecommand.py: clean up, stop using
2352 reactor.iterate, add tests for timeout and interrupt
2353 * buildbot/test/sleep.py: utility for a new timeout test
2355 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
2356 code from the local-usebranches branch
2358 2005-07-17 Brian Warner <warner@lothar.com>
2360 * buildbot/process/process_twisted.py
2361 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
2362 minutes, to match the other twisted BuildFactories, and don't
2363 excuse failures in c/qt/win32 reactors any more.
2365 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
2366 'freebsd' builders, since the buildslaves have been unavailable
2369 2005-07-13 Brian Warner <warner@lothar.com>
2371 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
2372 build-on-branch feature
2374 * buildbot/process/step.py (Darcs.__init__): add base_url and
2375 default_branch arguments, just like SVN
2376 (Arch.__init__): note that the version= argument is really the
2379 * buildbot/slave/commands.py (SourceBase): keep track of the
2380 repository+branch that was used for the last checkout in
2381 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
2382 match, we clobber the directory and perform a fresh checkout
2383 rather than trying to do an in-place update. This should protect
2384 us against trying to get to branch B by doing an update in a tree
2385 obtained from branch A.
2386 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
2387 (SVN.setup): same, just the svnurl
2388 (Darcs.setup): same, just the repourl
2389 (Arch.setup): same, arch coordinates (url), version, and
2390 buildconfig. Also pull the buildconfig from the args dictionary,
2391 which we weren't doing before, so the build-config was effectively
2393 (Arch.sourcedirIsUpdateable): don't try to update when we're
2394 moving to a specific revision: arch can't go backwards, so it is
2395 safer to just clobber the tree and checkout a new one at the
2397 (Bazaar.setup): same sourcedata as Arch
2399 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2400 use maybeWait, to work with twisted-1.3.0 and twcompat
2401 (Dependencies.testRun_Pass): same
2403 * buildbot/test/test_vc.py: rearrange, cleanup
2405 * buildbot/twcompat.py: add defer.waitForDeferred and
2406 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
2407 can work under twisted-1.3.0 .
2409 * buildbot/test/test_vc.py: rewrite. The sample repositories are
2410 now created at setUp time. This increases the runtime of the test
2411 suite considerably (from 91 seconds to 151), but it removes the
2412 need for an offline tarball, which should solve a problem I've
2413 seen where the test host has a different version of svn than the
2414 tarball build host. The new code also validates that mode=update
2415 really picks up recent commits. This approach will also make it
2416 easier to test out branches, because the code which creates the VC
2417 branches is next to the code which uses them. It will also make it
2418 possible to test some change-notification hooks, by actually
2419 performing a VC commit and watching to see the ChangeSource get
2422 2005-07-12 Brian Warner <warner@lothar.com>
2424 * docs/buildbot.texinfo (SVN): add branches example
2425 * docs/Makefile (buildbot.ps): add target for postscript manual
2427 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
2428 * buildbot/test/test_locks.py: same
2430 * buildbot/process/step.py (Darcs): comment about default branches
2432 * buildbot/master.py (BuildMaster.loadConfig): don't look for
2433 c['interlocks'] in the config file, complain if it is present.
2434 Scan all locks in c['builders'] to make sure the Locks they use
2436 * buildbot/test/test_config.py: remove old c['interlocks'] test,
2437 add some tests to check for non-uniquely-named Locks
2438 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
2439 since the unique-Lock validation code requires it now
2441 * buildbot/locks.py: fix test-case-name
2443 * buildbot/interlock.py: remove old file
2445 2005-07-11 Brian Warner <warner@lothar.com>
2447 * buildbot/test/test_interlock.py: rename to..
2448 * buildbot/test/test_locks.py: .. something shorter
2450 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2451 versions (after 2.0.1) changed internet.TCPClient to shut down the
2452 connection in stopService. Change the code to handle this
2455 * buildbot/process/base.py (Build): handle whole-Build locks
2456 * buildbot/process/builder.py (Builder.compareToSetup): same
2457 * buildbot/test/test_interlock.py: make tests work
2459 * buildbot/process/step.py (BuildStep.startStep): complain if a
2460 Step tries to claim a lock that's owned by its own Build
2461 (BuildStep.releaseLocks): typo
2463 * buildbot/locks.py (MasterLock): use ComparableMixin so config
2464 file reloads don't replace unchanged Builders
2466 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2467 rewrite to cover new Locks instead of old c['interlocks']
2468 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2472 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2473 start the master and connect the buildslave
2475 * buildbot/process/step.py (FailingDummy.done): finish with a
2476 FAILURE status rather than raising an exception
2478 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2479 stringify a BuildRequest.reason that is None
2481 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2483 * buildbot/status/builder.py (BuildSetStatus): implement enough to
2484 allow scheduler.Dependent to work
2485 * buildbot/buildset.py (BuildSet): set .reason and .results
2487 * buildbot/test/test_interlock.py (Locks.setUp): connect both
2488 slaves, to make the test stop hanging. It still fails, of course,
2489 because I haven't even started to implement Locks.
2491 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2493 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2494 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2495 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2496 (Dependent): new class for downstream build dependencies
2497 * buildbot/test/test_dependencies.py: tests (still failing)
2499 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2501 2005-07-07 Brian Warner <warner@lothar.com>
2503 * buildbot/test/runutils.py (RunMixin): factored this class out..
2504 * buildbot/test/test_run.py: .. from here
2505 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2506 added new buildbot.locks tests (which all hang right now)
2507 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2508 * buildbot/process/step.py: claim/release per-BuildStep locks
2510 * docs/Makefile: add 'buildbot.html' target
2512 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
2513 interpreted as "HEAD", so that all VC steps can accept branch=None
2514 and have it mean the "default branch".
2516 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
2518 2005-07-07 Brian Warner <warner@lothar.com>
2520 * docs/examples/twisted_master.cfg: update to match current usage
2522 * docs/buildbot.texinfo (System Architecture): comment out the
2523 image, it doesn't exist yet and just screws up the HTML manual.
2525 2005-07-05 Brian Warner <warner@lothar.com>
2527 * debian/.cvsignore: oops, missed one. Removing leftover file.
2529 2005-06-17 Brian Warner <warner@lothar.com>
2531 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
2532 changed its output in 1.2.0, don't mistakenly think that the
2533 subversion we find isn't capable of supporting our tests.
2535 * debian/*: remove the debian/ directory and its contents, to make
2536 life easier for the proper Debian maintainer
2538 * Makefile (release): same
2540 2005-06-07 Brian Warner <warner@lothar.com>
2542 * everything: create a distinct SourceStamp class to replace the
2543 ungainly 4-tuple, let it handle merging instead of BuildRequest.
2544 Changed the signature of Source.startVC to include the revision
2545 information (instead of passing it through self.args). Implement
2546 branches for SVN (now only Darcs/Git is missing support). Add more
2549 2005-06-06 Brian Warner <warner@lothar.com>
2551 * everything: rearrange build scheduling. Create a new Scheduler
2552 object (configured in c['schedulers'], which submit BuildSets to a
2553 set of Builders. Builders can now use multiple slaves. Builds can
2554 be run on alternate branches, either requested manually or driven
2555 by changes. This changed some of the Status classes. Interlocks
2556 are out of service until they've been properly split into Locks
2557 and Dependencies. treeStableTimer, isFileImportant, and
2558 periodicBuild have all been moved from the Builder to the
2560 (BuilderStatus.currentBigState): removed the 'waiting' and
2561 'interlocked' states, removed the 'ETA' argument.
2563 2005-05-24 Brian Warner <warner@lothar.com>
2565 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
2566 erroneously abandons the connection (in clientConnectionFailed)
2567 for non-UserErrors, which means that if we lose the connection due
2568 to a network problem or a timeout, we'll never try to reconnect.
2569 Fix this by not upcalling to the buggy parent method. Note:
2570 twisted-2.0 fixes this, but the function only has 3 lines so it
2571 makes more sense to copy it than to try and detect the buggyness
2572 of the parent class. Fixes SF#1207588.
2574 * buildbot/changes/changes.py (Change.branch): doh! Add a
2575 class-level attribute to accomodate old Change instances that were
2576 pickled before 0.6.5 (where .branch was added for new Changes).
2577 This fixes the exception that occurs when you try to look at an
2578 old Change (through asHTML).
2580 * buildbot/__init__.py (version): bump to 0.6.6+ while between
2583 2005-05-23 Brian Warner <warner@lothar.com>
2585 * buildbot/__init__.py (version): release 0.6.6
2587 2005-05-23 Brian Warner <warner@lothar.com>
2589 * NEWS: update for 0.6.6 release
2590 * debian/changelog: same
2592 * buildbot/scripts/runner.py (start): put the basedir in sys.path
2593 before starting: this was done by twistd back when we spawned it,
2594 now that we're importing the pieces and running them in the
2595 current process, we have to do it ourselves. This allows
2596 master.cfg to import files from the same directory without
2597 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
2598 Stichele for the catch.
2599 (Options.opt_version): Add a --version command (actually, just make
2600 the existing --version command emit Buildbot's version too)
2602 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
2603 fix to make this behave like other LogFiles, this time to handle
2604 existing LogFiles on disk. (add the missing .upgrade method)
2605 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
2607 2005-05-21 Brian Warner <warner@lothar.com>
2609 * buildbot/test/test_runner.py (Create.testMaster): match the
2610 rawstring change in runner.py:masterTAC
2612 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
2613 TwistedWords is installed
2614 * buildbot/test/test_status.py: same, with TwistedMail
2616 * buildbot/master.py: remove old IRC/Waterfall imports (used by
2617 some old, deprecated, and removed config keys). This should enable
2618 you to use the base buildbot functionality with Twisted-2.0.0 when
2619 you don't also have TwistedWeb and TwistedWords installed
2621 2005-05-20 Brian Warner <warner@lothar.com>
2623 * buildbot/scripts/runner.py (run): call sendchange(), not
2624 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
2625 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
2626 (stop): don't wait for process to die when sending SIGHUP
2627 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
2628 directory name gets interpreted, which you don't want
2631 * buildbot/__init__.py (version): bump to 0.6.5+ while between
2634 2005-05-18 Brian Warner <warner@lothar.com>
2636 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2638 2005-05-18 Brian Warner <warner@lothar.com>
2640 * README: update for 0.6.5
2641 * debian/changelog: same
2643 * buildbot/changes/changes.py: rename tag= to branch=, since
2644 that's how we're using it, and my design for the upcoming "build a
2645 specific branch" feature wants it. also, tag= was too CVS-centric
2646 * buildbot/changes/mail.py (parseSyncmail): same
2647 * buildbot/process/base.py (Build.isBranchImportant): same
2648 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2649 * docs/buildbot.texinfo (Attributes of Changes): same
2651 * NEWS: update tag=, update for upcoming release
2653 2005-05-17 Brian Warner <warner@lothar.com>
2655 * buildbot/scripts/runner.py (stop): actually poll once per
2656 second, instead of re-killing the poor daemon once per second.
2657 Sleep briefly (0.1s) before the first poll, since there's a good
2658 chance we can avoid waiting the full second if the daemon shuts
2659 down quickly. Also remove the sys.exit() at the end.
2660 (start): remove the unneighborly sys.exit()
2662 * Makefile: improve permission-setting to not kick Arch so badly
2664 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
2665 default --keepalive=600, since it doesn't hurt very much, and it's
2666 a hassle to discover that you need it.
2667 * buildbot/test/test_runner.py (Create.testSlave): test it
2669 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
2670 IRC bot about EXCEPTION
2672 * buildbot/status/client.py (PBListener): upcall more correctly
2674 * buildbot/process/base.py (Build.allStepsDone): if a step caused
2675 an exception mark the overall build with EXCEPTION, not SUCCESS
2677 * buildbot/scripts/runner.py (makefile_sample): remove the leading
2679 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2680 * Makefile: update some release-related stuff
2682 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2683 gets called when there isn't actually an active process, just end
2684 the Command instead of blowing up. I don't know how it gets into
2685 this state, but the twisted win32 buildslave will sometimes hang,
2686 and when it shakes its head and comes back, it thinks it's still
2687 running a Command. The next build causes this command to be
2688 interrupted, but the lack of self.process.pid breaks the interrupt
2691 * NEWS: document changes since the last release
2693 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2694 look for Makefile.buildbot instead of a bare Makefile . The
2695 'buildbot start' does not install this file, so you have to
2696 manually copy it if you want to customize startup behavior.
2697 (createMaster): change 'buildbot master' command to create
2698 Makefile.sample instead of Makefile, to create master.cfg.sample
2699 instead of master.cfg (requiring you to copy it before the
2700 buildmaster can be started). Both sample files are kept up to
2701 date, i.e. they are overwritten if they have been changed. The
2702 'buildbot.tac' file is *not* overwritten, but if the new contents
2703 don't match the old, a 'buildbot.tac.new' file is created and the
2704 user is warned. This seems to be a much more sane way to handle
2705 startup files. Also, don't sys.exit(0) when done, so we can run
2706 unit tests against it.
2707 (createSlave): same. Don't overwrite the sample info/ files.
2708 * buildbot/scripts/sample.mk: remove. the contents were pulled
2709 into runner.py, since they need to match the behavior of start()
2713 * docs/buildbot.texinfo (Launching the daemons): document it
2714 * buildbot/test/test_runner.py (Create): test it
2716 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2717 version that can handle string-in-string tests, because otherwise
2718 python-2.2 fails the tests. It'd be tremendous if Trial's test
2719 took two strings under 2.2 too.
2721 * everything: fixed all deprecation warnings when running against
2722 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2723 few that come from Twisted itself). This involved putting most of
2724 the Twisted-version specific code in the new buildbot.twcompat
2725 module, and creating some abstract base classes in
2726 buildbot.changes.base and buildbot.status.base (which might be
2727 useful anyway). __implements__ is a nuisance and requires an ugly
2728 'if' clause everywhere.
2730 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2731 delay before finishing the test: it seems that smtp.sendmail
2732 doesn't hang up on the server, so we must wait a moment so it can
2733 hang up on us. This removes the trial warning about an unclean
2736 2005-05-16 Brian Warner <warner@lothar.com>
2738 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2739 tuple of (delay, repeats).
2740 * buildbot/test/test_vc.py (Retry): test it
2741 * docs/buildbot.texinfo (Source Checkout): document it
2742 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2743 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2744 doVCFull() are handled by re-trying the checkout (after a delay)
2745 some number of times.
2746 (ShellCommand._startCommand): make header lines easier to read
2748 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2750 (WebTest.test_logfile): make sure master gets shut down, silences
2751 some "unclean reactor" test errors
2753 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2754 reactor once after shutdown, something in certain versions of
2755 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2756 fails, svn-trunk is ok.
2758 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2759 second win32 error message
2761 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2762 validating the ETA, so the tests don't fail on slow systems
2764 2005-05-15 Brian Warner <warner@lothar.com>
2766 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2767 the new LogFile class, so upgrading works properly
2768 (LogFileProducer.resumeProducing): survive resumeProducing after
2769 we've exhausted the chunkGenerator
2771 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2773 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2774 (Log.testUpgrade): same
2776 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2777 Builds and logs with a cron job.
2779 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2780 of the old non-offline LogFile, added code to upgrade these to
2781 new-style contents-live-on-disk instances at load time (in a way
2782 that doesn't invalidate the old Build pickles, so upgrading to
2783 0.6.5 is not a one-way operation). Got rid of everything related
2785 (LogFile.__init__): create LogFiles with the parent step status,
2786 the log's name, and a builder-relative filename where it can keep
2787 the contents on disk.
2788 (LogFile.hasContents): new method, clients are advised to call it
2789 before getText or getChunks and friends. If it returns False, the
2790 log's contents have been deleted and getText() will raise an
2792 (LogFile.getChunks): made it a generator
2793 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2794 Consumer (except one that takes chunks instead of strings). This
2795 enables streaming of very large logfiles without storing the whole
2797 (BuildStatus.generateLogfileName): create names like
2798 12-log-compile-output, with a _0 suffix if required to be unique
2799 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2800 or earlier) logfiles into new-style ones
2801 (BuilderStatus): remove everything related to 'stub' builds. There
2802 is now only one build cache, and we don't strip logs from old
2804 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2805 since we no longer fight to keep it in the cache
2807 * buildbot/status/html.py (TextLog.render_GET): use a
2808 ChunkConsumer to stream the log entries efficiently.
2809 (ChunkConsumer): wrapper which consumes chunks and writes
2812 * buildbot/test/test_twisted.py (Parse.testParse): use a
2813 LogFile-like object instead of a real one
2815 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2816 (Log.testMerge3): validate more merge behavior
2817 (Log.testChunks): validate LogFile.getChunks
2818 (Log.testUpgrade): validate old-style LogFile upgrading
2819 (Log.testSubscribe): validate LogFile.subscribe
2820 (Log.testConsumer): validate LogFile.subscribeConsumer
2822 * buildbot/interfaces.py (IStatusLogStub): remove
2823 (IStatusLog.subscribeConsumer): new method
2824 (IStatusLog.hasContents): new method
2825 (IStatusLogConsumer): describes things passed to subscribeConsumer
2827 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2828 the log contents if it does not have any contents.
2829 (StatusResourceBuildStep.body): same
2830 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2832 2005-05-14 Brian Warner <warner@lothar.com>
2834 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2835 timeouts to try and make the windows metabuildslave not hang
2837 2005-05-13 Mike Taylor <bear@code-bear.com>
2839 * buildbot/slave/commands.py (rmdirRecursive): added a check
2840 to ensure the path passed into rmdirRecursive actually exists.
2841 On win32 a non-existant path would generate an exception.
2843 2005-05-13 Brian Warner <warner@lothar.com>
2845 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2846 shutil.rmtree which behaves correctly on windows in the face of
2847 files that you have to chmod before deleting. Thanks to Bear at
2848 the OSAF for the routine.
2849 (SourceBase.doClobber): use rmdirRecursive
2851 2005-05-12 Brian Warner <warner@lothar.com>
2853 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2854 method generate chunks instead of returning a big list. This
2855 allows the same method to be used for both old LogFile and new
2857 (OfflineLogFile.getText): use the generator
2858 (OfflineLogFile.subscribe): same
2859 * buildbot/status/html.py (TextLog.resumeProducing): same
2860 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2862 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2863 point out that OfflineLogFile does not currently work with
2864 html.Waterfall . Fixing this is high-priority.
2866 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2867 apparently windows defaults to using stdout
2869 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2870 better message on failure so I can figure out the win32 problem
2872 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2873 log messages to include more useful copies of the command being
2874 run, the argv array, and the child command's environment.
2875 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2877 2005-05-11 Brian Warner <warner@lothar.com>
2879 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2881 * Makefile: update the deb-snapshot version
2883 * docs/buildbot.texinfo: move all .xhtml docs into a new
2884 .texinfo-format document, adding a lot of material in the process.
2885 This is starting to look like a real user's manual. Removed all
2886 the Lore-related files: *.xhtml, *.css, template.tpl .
2887 * docs/Makefile: simple makefile to run 'makeinfo'
2888 * buildbot/scripts/sample.cfg: rearrange slightly
2889 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2891 2005-05-10 Brian Warner <warner@lothar.com>
2893 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2894 different name for the internal twistw module, handle it.
2896 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2897 * setup.py: .. and stop trying to install it
2899 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2900 'git'), the new linux kernel VC system (http://kernel.org/git/).
2901 Thanks to Brandon Philips for the patch.
2902 * buildbot/slave/commands.py (Git): same
2904 2005-05-06 Brian Warner <warner@lothar.com>
2906 * buildbot/status/builder.py (OfflineLogFile): replace the default
2907 LogFile with a form that appends its new contents to a disk file
2908 as they arrive. The complete log data is never kept in RAM. This
2909 is the first step towards handling very large (100MB+) logfiles
2910 without choking quite so badly. (The other half is
2911 producer/consumer on the HTML pages).
2912 (BuildStepStatus.addLog): use OfflineLogFile by default
2913 (BuildStatus.getLogfileName): helper code to give the
2914 OfflineLogFile a filename to work with
2916 * buildbot/test/test_status.py (Results.testAddResults): update
2917 tests to handle new asserts
2918 * buildbot/test/test_vc.py (Patch.doPatch): same
2919 * buildbot/test/test_steps.py (BuildStep.setUp): same
2921 2005-05-05 Brian Warner <warner@lothar.com>
2923 * buildbot/scripts/runner.py (start): if there is no Makefile,
2924 launch the app by importing twistd's internals and calling run(),
2925 rather than spawning a new twistd process. This stands a much
2926 better chance of working under windows.
2927 (stop): kill the process with os.kill instead of spawning
2928 /bin/kill, again to reduce the number of external programs which
2929 windows might not have in the PATH. Also wait up to 5 seconds for
2930 the process to go away, allowing things like 'buildbot stop;
2931 buildbot start' to be reliable in the face of slow shutdowns.
2933 * buildbot/master.py (Dispatcher.__getstate__): remove old
2934 .tap-related methods
2935 (BuildMaster.__getstate__): same
2937 * buildbot/slave/bot.py (makeService): same
2938 (Options.longdesc): same
2939 * buildbot/scripts/runner.py: copy over some old mktap option text
2941 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2942 'buildbot master' now creates a buildbot.tac file, so there is no
2943 longer a create-instance/save/reload sequence. mktap is dead, long
2945 * buildbot/scripts/sample.mk: use twistd -y, not -f
2946 * buildbot/test/test_config.py: remove mktap-based test
2947 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2948 * README: don't reference mktap
2950 * docs/source.xhtml: document some of the attributes that Changes
2953 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2955 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2956 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2957 * buildbot/changes/changes.py (Change)
2958 * buildbot/changes/mail.py (parseSyncmail)
2959 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2961 * buildbot/process/base.py (Build.isTagImportant)
2965 2005-05-04 Brian Warner <warner@lothar.com>
2967 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2968 connection after sending the change, so that unit tests don't
2969 complain about sockets being left around
2971 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2972 exception in phase=0 rendering
2973 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2975 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2977 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2978 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2979 and configuring builders with tuples.
2980 * buildbot/test/test_config.py: stop testing compatibility with
2981 deprecated config keys
2982 * buildbot/test/test_run.py: same
2984 2005-05-03 Brian Warner <warner@lothar.com>
2986 * contrib/arch_buildbot.py: survive if there are no logfiles
2987 (username): just use a string, os.getlogin isn't reliable
2989 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2990 so 'buildbot sendchange' actually works. The earlier test only
2991 covered the internal (non-reactor-running) form.
2993 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2994 script to notify the buildmaster about changes
2996 * buildbot/scripts/runner.py (sendchange): new command to send a
2997 change to a buildbot.changes.pb.PBChangeSource receiver.
2998 * buildbot/test/test_changes.py (Sender): test it
3000 * buildbot/master.py (BuildMaster.startService): mark .readConfig
3001 after any reading of the config file, not just when we do it in
3002 startService. This makes some tests a bit cleaner.
3004 * buildbot/changes/pb.py: add some log messages
3006 * buildbot/process/base.py (Build.startBuild): fix a bug that
3007 caused an exception when the build terminated in the very first
3009 (Build.stepDone): let steps return a status of EXCEPTION. This
3010 terminates the build right away, and sets the build's overall
3011 status to EXCEPTION too.
3012 * buildbot/process/step.py (BuildStep.failed): return a status of
3013 EXCEPTION when that is what has happened.
3015 * buildbot/process/step.py (Arch.computeSourceRevision): finally
3016 implement this, allowing Arch-based projects to get precise
3017 checkouts instead of always using the latest code
3018 (Bazaar): create variant of Arch to let folks use baz instead of
3019 tla. Requires a new buildslave too.
3020 * buildbot/slave/commands.py (Arch): add 'revision' argument
3021 (Bazaar): create variant of Arch that uses baz instead of tla.
3022 Remove the code that extracts the archive name from the
3023 register-archive output, since baz doesn't provide it, and require
3024 the user provide both the archive name and its location.
3025 * buildbot/test/test_vc.py (VC.testBazaar): added tests
3027 2005-05-02 Brian Warner <warner@lothar.com>
3029 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
3030 thanks to Nick Trout.
3032 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
3033 deals better with source Makefile coming from a read-only CVS
3034 checkout. Thanks to Nick Trout for the catch.
3036 * buildbot/__init__.py (version): bump to 0.6.4+ while between
3039 2005-04-28 Brian Warner <warner@lothar.com>
3041 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
3043 * debian/changelog: update for 0.6.4
3045 2005-04-28 Brian Warner <warner@lothar.com>
3047 * README.w32: add a checklist of steps for getting buildbot
3049 * MANIFEST.in: include it in the tarball
3053 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
3054 broken .tap files from 0.6.3 by getting rid of .services,
3055 .namedServices, and .change_svc at load time.
3057 2005-04-27 Brian Warner <warner@lothar.com>
3059 * NEWS: update in preparation for new release
3061 * buildbot/test/test_config.py (Save.testSave): don't pull in
3062 twisted.scripts.twistd, we don't need it and it isn't for windows
3065 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
3066 accomodate win32 which can't do atomic-rename
3068 2005-04-27 Brian Warner <warner@lothar.com>
3070 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
3071 timeouts to help the slow metabuildbot not flunk them so much
3072 (Disconnect.testBuild3): same
3073 (Disconnect.testBuild4): same
3074 (Disconnect.testInterrupt): same
3076 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
3077 setup, it was completely broken for new buildmasters (those which
3078 did not have a 'change.pck' already saved. Thanks to Paul Warren
3079 for catching this (embarrassing!) bug.
3080 (Dispatcher.__getstate__): don't save our registered avatar
3081 factories, since they'll be re-populated when the config file is
3083 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
3084 tests (since the real mktap-generated BuildMaster doesn't save
3086 (BuildMaster.__getstate__): don't save any service children,
3087 they'll all be re-populated when the config file is re-read.
3088 * buildbot/test/test_config.py (Save.testSave): test for this
3090 2005-04-26 Brian Warner <warner@lothar.com>
3092 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
3093 rendered with Blender.. looks a bit nicer.
3094 * buildbot/docs/images/icon.blend: add the Blender file for it
3096 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
3097 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
3098 running under windows. This appears to be the best way to allow
3099 BuildSteps to do something normal like 'trial -v buildbot.test' or
3100 'make foo' and still expect it to work. The idea is to make the
3101 BuildSteps look as much like what a developer would type when
3102 compiling or testing the tree by hand. This approach probably has
3103 problems when there are spaces in the arguments, so if you've got
3104 windows buildslaves, you'll need to pay close attention to your
3107 * buildbot/status/html.py (WaterfallStatusResource.body): add the
3108 timezone to the timestamp column.
3109 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3111 * buildbot/scripts/runner.py (loadOptions): do something sane for
3112 windows, I think. We use %APPDATA%/buildbot instead of
3113 ~/.buildbot, but we still search everywhere from the current
3114 directory up to the root for a .buildbot/ subdir. The "is it under
3115 $HOME" security test was replaced with "is it owned by the current
3116 user", which is only performed under posix.
3117 * buildbot/test/test_runner.py (Options.testFindOptions): update
3118 tests to match. The "is it owned by the current user" check is
3119 untested. The test has been re-enabled for windows.
3121 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
3122 any "\n" in the expected output with the platform-specific line
3123 separator. Make this separator "\r\n" on PTYs under unix, they
3124 seem to do that and I don't know why
3126 * buildbot/test/test_runner.py (Options.optionsFile): disable on
3127 windows for now, I don't know what ~/.buildbot/ should mean there.
3129 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
3130 win32 compatibility, don't use "/tmp"
3131 (Basedir.testChangeBuilddir): remove more unixisms
3133 2005-04-26 Brian Warner <warner@lothar.com>
3135 * buildbot/test/test_control.py (Force.rmtree): python2.2
3136 compatibility, apparently its shutil.rmtree ignore_errors=
3137 argument is ignored.
3138 * buildbot/test/test_run.py (Run.rmtree): same
3139 (RunMixin.setUp): same
3141 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
3144 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
3145 'substring in string' operator, must use string.find(substr)!=-1
3146 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
3147 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
3149 * buildbot/scripts/runner.py (loadOptions): add code to search for
3150 ~/.buildbot/, a directory with things like 'options', containing
3151 defaults for various 'buildbot' subcommands. .buildbot/ can be in
3152 the current directory, your $HOME directory, or anywhere
3153 inbetween, as long as you're somewhere inside your home directory.
3154 (debugclient): look in ~/.buildbot/options for master and passwd
3155 (statuslog): look in ~/.buildbot/options for 'masterstatus'
3156 * buildbot/test/test_runner.py (Options.testFindOptions): test it
3158 * buildbot/status/client.py (makeRemote): new approach to making
3159 IRemote(None) be None, which works under Twisted-2.0
3160 * buildbot/test/test_status.py (Client.testAdaptation): test it
3162 * buildbot/status/builder.py (Status.builderAdded): when loading a
3163 pickled BuilderStatus in from disk, set its name after loading.
3164 The config file might have changed its name (but not its
3165 directory) while it wasn't looking.
3167 * buildbot/process/builder.py (Builder.attached): always return a
3168 Deferred, even if the builder was already attached
3169 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
3171 2005-04-25 Brian Warner <warner@lothar.com>
3173 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
3174 category-related exception when announcing a build has finished
3176 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
3177 reference no-longer-existent changemaster.sources
3178 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
3180 * buildbot/__init__.py (version): bump to 0.6.3+ while between
3183 2005-04-25 Brian Warner <warner@lothar.com>
3185 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
3187 * debian/changelog: update for 0.6.3
3189 2005-04-25 Brian Warner <warner@lothar.com>
3191 * MANIFEST.in: make sure debug.glade is in the tarball
3193 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
3195 * NEWS: update for the imminent 0.6.3 release
3197 * buildbot/status/html.py (HtmlResource.content): make the
3198 stylesheet <link> always point at "buildbot.css".
3199 (StatusResource.getChild): map "buildbot.css" to a static.File
3200 containing whatever css= argument was provided to Waterfall()
3201 (Waterfall): provide the "classic" css as the default.
3202 * docs/waterfall.classic.css: move default CSS from here ..
3203 * buildbot/status/classic.css: .. to here
3205 * MANIFEST.in: make sure classic.css is included in the tarball
3206 * setup.py: and that it is installed too, under buildbot/status/
3208 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
3209 the module level, because buildbot.tap files from 0.6.2 don't have
3210 it in their attribute dictionary.
3212 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
3213 really exists at startup, might save some confusion somewhere.
3215 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
3217 * docs/waterfall.classic.css:
3218 add a stylesheet that's almost the same as the "classic"
3221 * buildbot/status/builder.py:
3222 add EXCEPTION as a result - this is a problem for the bot
3223 maintainer, not a build problem for the changers
3224 * buildbot/process/step.py:
3225 use EXCEPTION instead of FAILURE for exceptions
3226 * buildbot/status/html.py:
3227 add build_get_class to get a class out of a build/buildstep
3228 finish naming the classes
3229 split out sourceNames to changeNames and builderNames so we
3230 can style them separately
3231 * docs/config.xhtml:
3232 finish documenting classes as they are right now
3234 * buildbot/status/html.py:
3235 name the classes as we agreed on IRC
3236 * docs/config.xhtml:
3239 * buildbot/status/html.py:
3240 same for cssclass->class_
3242 * buildbot/status/html.py:
3243 as decided on IRC, use class_ for the "class" attribute to not
3244 conflict with the class keyword, and clean up the messy **{} stuff.
3246 * buildbot/status/mail.py:
3247 put back "builders" argument, and fix docstring, because the
3248 code *ignores* builders listed in this argument
3250 * buildbot/process/builder.py:
3251 remove FIXME notes - category is now indeed a cvar of BuilderStatus
3253 * docs/config.xhtml:
3254 describe the category argument for builders
3256 * buildbot/status/builder.py:
3257 Fix a silly bug due to merging
3259 * buildbot/process/builder.py:
3260 remove category from the process Builder ...
3261 * buildbot/status/builder.py:
3262 ... and add it to BuilderStatus instead.
3263 Set category on unpickled builder statuses, they might not have it.
3264 * buildbot/master.py:
3265 include category when doing builderAdded
3266 * buildbot/status/mail.py:
3267 return None instead of self for builders we are not interested in.
3268 * buildbot/test/test_run.py:
3269 fix a bug due to only doing deferredResult on "dummy" waiting
3270 * buildbot/test/test_status.py:
3271 add checks for the Mail IStatusReceiver returning None or self
3273 * buildbot/status/html.py:
3274 fix testsuite by prefixing page title with BuildBot
3276 * buildbot/status/builder.py:
3277 have .category in builder status ...
3278 * buildbot/process/builder.py:
3279 ... and set it from Builder
3280 * buildbot/status/html.py:
3281 make .css a class variable
3282 * buildbot/test/test_status.py:
3283 write more tests to cover our categories stuff ...
3284 * buildbot/status/mail.py:
3285 ... and fix the bug that this uncovered
3287 * buildbot/changes/mail.py:
3288 * buildbot/changes/pb.py:
3289 * buildbot/master.py:
3290 * buildbot/process/base.py:
3291 * buildbot/process/factory.py:
3292 * buildbot/process/interlock.py:
3293 * buildbot/process/step.py:
3294 * buildbot/process/step_twisted.py:
3295 * buildbot/slave/commands.py:
3296 * buildbot/status/builder.py:
3297 * buildbot/status/client.py:
3298 * buildbot/status/html.py:
3299 * buildbot/status/mail.py:
3300 * buildbot/status/progress.py:
3301 * buildbot/test/test_changes.py:
3302 * buildbot/test/test_config.py:
3303 * buildbot/test/test_control.py:
3304 * buildbot/test/test_interlock.py:
3305 * buildbot/test/test_maildir.py:
3306 * buildbot/test/test_mailparse.py:
3307 * buildbot/test/test_run.py:
3308 * buildbot/test/test_slavecommand.py:
3309 * buildbot/test/test_status.py:
3310 * buildbot/test/test_steps.py:
3311 * buildbot/test/test_twisted.py:
3312 * buildbot/test/test_util.py:
3313 * buildbot/test/test_vc.py:
3314 * buildbot/test/test_web.py:
3316 add test-case-name at the top of a whole set of files
3318 * buildbot/status/builder.py:
3319 keep order of addition when getting builder names
3320 * buildbot/status/words.py:
3321 * buildbot/test/test_run.py:
3322 add test for getBuilderNames
3324 * buildbot/process/base.py:
3325 * buildbot/process/step.py:
3326 * buildbot/status/builder.py:
3327 * buildbot/status/html.py:
3328 make buildbot css-able
3329 replace the color code for purple with purple, don't understand
3330 why it wasn't purple to start with
3332 * buildbot/status/words.py:
3333 ok, so it doesn't look like BuilderStatus.remote is still valid.
3334 Use what waterfall uses instead.
3336 * buildbot/interfaces.py:
3337 * buildbot/status/builder.py:
3338 * buildbot/status/html.py:
3339 * buildbot/status/mail.py:
3340 * buildbot/status/words.py:
3341 * buildbot/test/test_run.py:
3342 use categories everywhere and make it be a list. More sensible
3343 for the future. Also make words actually respect this in
3346 * buildbot/interfaces.py:
3347 add category argument to getBuilderNames
3348 * buildbot/process/builder.py:
3349 * buildbot/status/builder.py:
3350 * buildbot/status/html.py:
3351 * buildbot/status/mail.py:
3352 * buildbot/status/words.py:
3353 * buildbot/test/test_run.py:
3354 move from specifying builders by name to specifying the category
3356 * buildbot/status/html.py:
3357 * buildbot/status/words.py:
3358 add "builders=" to __init__ of status clients so they can
3359 limit themselves to the given list of builders to report on
3361 * buildbot/status/html.py: set the title to the product name
3363 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
3365 * buildbot/interfaces.py:
3366 * buildbot/status/builder.py:
3367 more documentation. Hm, not sure if ChangeLog entries make sense
3370 2005-04-23 Brian Warner <warner@lothar.com>
3372 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
3374 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
3376 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
3377 the sub-commands that log buildmaster status to stdout and to a
3378 GUI window, respectively.
3380 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
3381 functionality is working again, but all the step-status and ETA
3382 stuff is missing. Commented out a lot of code pending more
3385 * buildbot/status/client.py: make sure that IRemote(None) is None
3387 * buildbot/changes/changes.py: import defer, oops
3388 (ChangeMaster): remove the .sources list, rely upon the fact that
3389 MultiServices can be treated as sequences of their children. This
3390 cleans up the add/remove ChangeSource routines a lot, as we keep
3391 exactly one list of the current sources instead of three.
3393 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
3394 up an empty ChangeMaster at init time.
3395 (BuildMaster.loadChanges): if there are changes to be had from
3396 disk, replace self.change_svc with the new ones. If not, keep
3397 using the empty ChangeMaster set up in __init__.
3398 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
3399 instead of a separate list, makes the code a bit cleaner.
3400 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
3401 (ConfigTest.testSources): same, also wait for loadConfig to finish.
3402 Extend the test to make sure we can get rid of the sources when
3405 2005-04-22 Brian Warner <warner@lothar.com>
3407 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
3408 and info/host files when making the slave directory
3410 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
3411 whendone= argument, just return the Deferred and let the caller do
3412 what they want with it.
3413 (Disconnect.testBuild1): wait for shutdownSlave
3414 (Basedir.testChangeBuilddir): new test to make sure changes to the
3415 builddir actually get propagated to the slave
3417 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
3418 explicit method, rather than passing the builddir in __init__ .
3419 Make sure to update self.basedir too, this was broken before.
3420 (Bot.remote_setBuilderList): use b.setBuilddir for both new
3421 builders and for ones that have just had their builddir changed.
3422 (BotFactory): add a class-level .perspective attribute, so
3423 BuildSlave.waitUntilDisconnected won't get upset when the
3424 connection hasn't yet been established
3425 (BuildSlave.__init__): keep track of the bot.Bot instance, so
3426 tests can reach through it to inspect the SlaveBuilders
3428 * buildbot/process/base.py (Build.buildException): explain the
3429 log.err with a log.msg
3430 * buildbot/process/builder.py (Builder.startBuild): same
3431 (Builder._startBuildFailed): improve error message
3433 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
3434 occurred because we lost the brand-new connection, retry instead
3435 of giving up. If not, it's probably an authorization failure, and
3436 it makes sense to stop trying. Make sure we log.msg the reason
3437 that we're log.err'ing the failure, otherwise test failures are
3438 really hard to figure out.
3440 * buildbot/master.py: change loadConfig() to return a Deferred
3441 that doesn't fire until the change has been fully implemented.
3442 This means any connected slaves have been updated with the new
3443 builddir. This change makes it easier to test the code which
3444 actually implements this builddir-updating.
3445 (BotPerspective.addBuilder): return Deferred
3446 (BotPerspective.removeBuilder): same
3447 (BotPerspective.attached): same
3448 (BotPerspective._attached): same. finish with remote_print before
3449 starting the getSlaveInfo, instead of doing them in parallel
3450 (BotPerspective.list_done): same
3451 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3452 actually calling slave.disconnect()
3453 (BotMaster.addBuilder): same
3454 (BotMaster.removeBuilder): same
3455 (BuildMaster.loadConfig): same
3456 (BuildMaster.loadConfig_Slaves): same
3457 (BuildMaster.loadConfig_Sources): same
3458 (BuildMaster.loadConfig_Builders): same
3459 (BuildMaster.loadConfig_status): same
3461 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3462 a Deferred that fires when the source is finally removed
3464 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3465 the previous tree on win32, where we have to do it synchronously,
3466 make sure we return a Deferred anyway.
3467 (SourceBase.doCopy): same
3469 * buildbot/scripts/runner.py (statusgui): use the text client for
3470 now, while I rewrite the Gtk one
3471 * buildbot/clients/base.py: strip out old code, leaving just the
3472 basic print-message-on-event functionality. I also remove the
3473 ReconnectingPBClientFactory, but it does at least quit when it
3474 loses the connection instead of going silent
3476 2005-04-21 Brian Warner <warner@lothar.com>
3478 * Makefile: minor tweaks
3480 * NEWS: point out deprecation warnings, new features for
3483 * buildbot/master.py (BuildMaster.loadConfig): emit
3484 DeprecationWarnings for Builders defined with tuples. Rearrange
3485 code to facility removal of deprecated configuration keys in the
3488 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3489 'buildbot' command to put a little Makefile in the target that
3490 helps you re-create the buildbot.tap file, start or stop the
3491 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3492 all the files 0600, since they contain passwords.
3493 (start): if there is a Makefile, and /usr/bin/make exists, use
3494 'make start' in preference to a raw twistd command. This lets
3495 slave admins put things like PYTHONPATH variables in their
3496 Makefiles and have them still work when the slave is started with
3497 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3498 be nice to first try the 'make' command and only fall back to
3499 twistd if it fails. TODO: the Makefile's "start" command does not
3500 add the --reactor=win32 argument when running under windows.
3501 (Options.debugclient, Options.statusgui): add sub-commands to launch
3502 the debug client (formerly in contrib/debugclient.py) and the
3503 Gtk status application (currently broken)
3504 * buildbot/clients/debug.py: move from contrib/debugclient.py
3505 * buildbot/clients/debug.glade: same
3507 * buildbot/test/test_trial.py: remove it. This requires some
3508 functionality out of Twisted that isn't there yet, and until then
3509 having it around just confuses things.
3511 * buildbot/test/test_slavecommand.py (Shell): test both with and
3512 without PTYs, and make sure that command output is properly
3513 interleaved in the with-PTY case. I think the without-PTY test
3514 should pass on windows, where we never use PTYs anyway.
3516 2005-04-20 Brian Warner <warner@lothar.com>
3518 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
3520 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
3522 * NEWS: start creating entries for the next release
3524 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
3526 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
3527 (WebTest.test_webPathname): same
3528 (WebTest.test_webPathname_port): same
3529 (WebTest.test_waterfall): use the default favicon rather than
3530 rooting around the filesystem for it. Open the expected-icon file
3531 in binary mode, to make win32 tests happier (thanks to Nick Trout
3533 * buildbot/status/html.py (buildbot_icon): win32 portability
3535 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
3536 win32-compatibility fixes from Nick Trout, the "file not found" message
3537 is different under windows
3538 (FakeSlaveBuilder.__init__): clean up setup a bit
3539 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
3541 2005-04-19 Brian Warner <warner@lothar.com>
3543 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
3544 skip-if-repositories-are-unavailable test to not kill the trial
3545 that comes with Twisted-1.3.0
3547 * setup.py: install buildbot.png icon file when installing code
3549 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
3550 environment used by the command, at least on the child side.
3552 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
3553 this method needs to be added and implemented because it gets
3554 called under heavy load. I don't quite understand the
3555 producer/consumer API enough to write it.
3556 (StatusResource.getChild): add a resource for /favicon.ico
3557 (Waterfall.__init__): add favicon= argument
3558 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3559 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
3560 (WebTest.test_webPathname): same
3561 (WebTest.test_webPathname_port): same
3562 * docs/config.xhtml: mention favicon=
3563 * buildbot/buildbot.png: add a default icon, dorky as it is
3565 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
3567 * buildbot/master.py:
3568 * buildbot/process/base.py:
3569 * buildbot/process/builder.py:
3570 * buildbot/process/interlock.py:
3571 * buildbot/status/builder.py:
3572 * buildbot/status/html.py:
3573 * buildbot/status/mail.py:
3574 * buildbot/status/words.py:
3575 new documentation while digging through the code
3577 2005-04-17 Brian Warner <warner@lothar.com>
3579 * general: try to fix file modes on all .py files: a+r, a-x,
3580 but let buildbot/clients/*.py be +x since they're tools
3582 * docs/epyrun (addMod): when an import fails, say why
3584 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
3586 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3588 * buildbot/process/base.py:
3589 * buildbot/process/builder.py:
3590 * buildbot/status/builder.py:
3591 new documentation while digging through the code
3593 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3595 * buildbot/changes/changes.py:
3596 * buildbot/changes/p4poller.py:
3597 * buildbot/interfaces.py:
3598 * buildbot/process/base.py:
3599 * buildbot/process/builder.py:
3600 * buildbot/process/step.py:
3601 * buildbot/process/step_twisted.py:
3602 * buildbot/slave/bot.py:
3603 * buildbot/slave/commands.py:
3604 * buildbot/status/builder.py:
3605 fix all docstrings to make epydoc happy. In the process of fixing
3606 some, I also moved pieces of docs, and removed some deprecated
3609 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3611 * buildbot/process/builder.py:
3612 * buildbot/process/interlock.py:
3613 * buildbot/process/process_twisted.py:
3614 * buildbot/process/step.py:
3615 BuildProcess -> Build, as it looks like that's what happened
3616 * buildbot/process/base.py:
3617 * buildbot/process/factory.py:
3620 2005-04-17 Brian Warner <warner@lothar.com>
3622 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3623 update compile command to accomodate the Twisted split.. now
3624 instead of './setup.py build_ext -i', you do './setup.py all
3625 build_ext -i', to run build_ext over all sub-projects.
3626 (FullTwistedBuildFactory): same
3627 (TwistedReactorsBuildFactory): same
3629 * buildbot/status/html.py (TextLog.finished): null out self.req
3630 when we're done, otherwise the reference cycle of TextLog to .req
3631 to .notifications to a Deferred to TextLog.stop keeps them from
3632 being collected, and consumes a huge (610MB on pyramid at last
3633 check) amount of memory.
3635 2005-04-11 Brian Warner <warner@lothar.com>
3637 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3638 normalize the VC-repository location.. makes SVN happier with
3639 certain test environments.
3641 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3642 RemoteShellCommand gets its own .env dictionary, so that code in
3643 start() doesn't mutate the original. I think this should fix the
3644 step_twisted.Trial problem where multiple identical components
3645 kept getting added to PYTHONPATH= over and over again.
3647 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3648 adding epydoc-format docstrings to many classes. Thanks to Thomas
3649 Vander Stichele for the patches.
3650 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
3651 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
3652 * buildbot/slave/bot.py, commands.py, registry.py: same
3654 2005-04-05 Brian Warner <warner@lothar.com>
3656 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
3657 preserve timestamps, helps incremental builds of large trees.
3658 Patch from Rene Rivera.
3660 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
3661 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
3664 2005-04-03 Brian Warner <warner@lothar.com>
3666 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
3667 with one dict, apparently exec has some scoping bugs when used
3668 with both global/local dicts. Thanks to Nathaniel Smith for the
3671 2005-04-02 Brian Warner <warner@lothar.com>
3673 * buildbot/process/step_twisted.py (countFailedTests): the new
3674 trial in Twisted-2.0 emits a slightly different status line than
3675 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
3676 mistakenly think the test count is unparseable.
3677 (Trial.start): note that for some reason each build causes another
3678 copy of self.testpath to be prepended to PYTHONPATH. This needs to
3679 be fixed but I'm not sure quite where the problem is.
3681 2005-04-01 Brian Warner <warner@lothar.com>
3683 * buildbot/test/test_run.py (Run.testMaster): change some uses of
3684 deferredResult to avoid hangs/warnings under twisted-2.0
3685 (RunMixin.tearDown): same
3686 (RunMixin.shutdownSlave): same
3687 (Disconnect.testIdle1): same
3688 (Disconnect.testBuild2): same: wait one second after the build
3689 finishes for test to really be done.. this should be cleaned up to
3690 avoid wasting that second. Builder.detach uses a callLater(0),
3691 either that should be done in-line (something else needed that
3692 behavior), or it should return a Deferred that fires when the
3693 builder is really offline.
3694 (Disconnect.testBuild3): same
3695 (Disconnect.testDisappear): same
3697 * buildbot/test/test_web.py: rearrange server-setup and teardown
3698 code to remove unclean-reactor warnings from twisted-2.0
3700 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3701 so the tests don't hang under twisted-2.0
3703 2005-03-31 Brian Warner <warner@lothar.com>
3705 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3706 caused a warning each time the master changed our set of builders
3708 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3709 w32, don't unlink the file unless it already exists. Thanks to
3710 Baptiste Lepilleur for the catch.
3711 (BuilderStatus.saveYourself): same
3713 2005-02-01 Brian Warner <warner@lothar.com>
3715 * buildbot/status/html.py (TextLog.getChild): use a /text child
3716 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3717 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3718 logfile as text/plain (no markup, no headers). This replaces the
3719 previous scheme (which used an ?text=1 argument), and gets us back
3720 to a relative link (which works better when the buildbot lives
3721 behind another web server, such as Apache configured as a reverse
3722 proxy). Thanks to Gerald Combs for spotting the problem.
3724 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3727 2004-12-13 Brian Warner <warner@lothar.com>
3729 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3731 * debian/changelog: update for 0.6.2
3732 * NEWS: finalize for 0.6.2
3734 2004-12-11 Brian Warner <warner@lothar.com>
3736 * NEWS: bring it up to date
3738 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3739 detection code. Require some sign of life from the buildmaster
3740 every BotFactory.keepaliveInterval seconds. Provoke this
3741 indication at BotFactory.keepaliveTimeout seconds before the
3742 deadline by sending a keepalive request. We don't actually care if
3743 that request is answered in a timely fashion, what we care about
3744 is that .activity() is called before the deadline. .activity() is
3745 triggered by any PB message from the master (including an ack to
3746 one of the slave's status-update messages). With this new scheme,
3747 large status messages over slow pipes are OK, as long as any given
3748 message can be sent (and thus acked) within .keepaliveTimeout
3749 seconds (which defaults to 30).
3750 (SlaveBuilder.remote_startCommand): record activity
3751 (SlaveBuilder.ackUpdate): same
3752 (SlaveBuilder.ackComplete): same
3753 (BotFactory.gotPerspective): same
3754 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3756 2004-12-09 Brian Warner <warner@lothar.com>
3758 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3761 * buildbot/process/step_twisted.py (Trial._commandComplete):
3762 update self.cmd when we start the 'cat test.log' transfer. Without
3763 this, we cannot interrupt the correct RemoteCommand when we lose
3766 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3767 trying to tell the slave to stop the command if we're already
3768 inactive, or if we no longer have a .remote
3770 * buildbot/process/builder.py (Builder._detached): don't let an
3771 exception in currentBuild.stopBuild() prevent the builder from
3772 being marked offline
3774 2004-12-07 Brian Warner <warner@lothar.com>
3776 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3777 KeyError that happens when you ask for a non-existent Builder, and
3778 translate it into a UsageError.
3780 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3781 losing the slave in the middle of a remote step is handled too
3783 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3784 be a Failure, so be sure to stringify it before using it as the
3785 contents of the 'interrupt' logfile
3786 (RemoteCommand.interrupt): use stringified 'why' in
3787 remote_interruptCommand too, just in case
3789 2004-12-06 Brian Warner <warner@lothar.com>
3791 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3792 instead of 'tla update', which is more efficient in case we've
3793 missed a couple of patches since the last update.
3795 * debian/changelog: update for previous (0.6.1) release. Obviously
3796 this needs to be handled better.
3798 2004-12-05 Brian Warner <warner@lothar.com>
3800 * NEWS: update for stuff since last release
3802 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3803 match the maybeDeferred change in Dispatcher.requestAvatar
3804 * buildbot/changes/pb.py (ChangePerspective.attached): same
3805 * buildbot/status/client.py (StatusClientPerspective.attached): same
3806 * buildbot/process/builder.py (Builder._attached3): same
3807 * buildbot/pbutil.py (NewCredPerspective.attached): same
3809 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3810 the date to the top-most box, if it is not the same as today's
3813 * docs/slave.xhtml: provide a buildslave setup checklist
3815 * docs/source.xhtml (Arch): correct terminology
3817 2004-12-04 Brian Warner <warner@lothar.com>
3819 * buildbot/test/test_slavecommand.py: use sys.executable instead
3820 of hard-coding 'python' for child commands, might help portability
3822 * docs/examples/twisted_master.cfg: update to current usage
3824 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3825 'stop build' command to the IRC bot
3827 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3828 message that broke PBChangeSource
3830 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3831 (SlaveBuilder): make some attributes class-level, remove the old
3832 "update queue" which existed to support resuming a build after the
3833 master connection was lost. Try to reimplement that feature later.
3834 (SlaveBuilder.stopCommand): clear self.command when the
3835 SlaveCommand finishes, so that we don't try to kill a leftover one
3837 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3840 * buildbot/slave/commands.py (SourceBase): set self.command for
3841 all VC commands, so they can be interrupted.
3843 2004-12-03 Brian Warner <warner@lothar.com>
3845 * buildbot/master.py: clean up slave-handling code, to handle
3846 slave-disconnect and multiple-connect better
3847 (BotPerspective): make these long-lasting, exactly one per bot
3848 listed in the config file.
3849 (BotPerspective.attached): if a slave connects while an existing
3850 one appears to still be connected, disconnect the old one first.
3851 (BotPerspective.disconnect): new method to forcibly disconnect a
3852 buildslave. Use some hacks to empty the transmit buffer quickly to
3853 avoid the long (20-min?) TCP timeout that could occur if the old
3854 slave has dropped off the net.
3855 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3856 own their own SlaveStatus objects. Remove .attached/.detached, add
3857 .addSlave/.removeSlave, treat slaves like Builders (config file
3858 parsing sends deltas to the BotMaster). Inform the slave
3859 instances, i.e. the BotPerspective, about addBuilder and
3861 (BotMaster.getPerspective): turns into a single dict lookup
3862 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3863 which gives BotPerspective.attached a chance to disconnect the old
3865 (BuildMaster.loadConfig): add code (disabled) to validate that all
3866 builders use known slaves (listed in c['bots']). The check won't
3867 work with tuple-specified builders, which are deprecated but not
3868 yet invalid, so the check is disabled for now.
3869 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3870 routine, do the add/changed/removed dance with them like we do
3872 (BuildMaster.loadConfig_Sources): move source-config into a
3873 separate routine too
3875 * buildbot/status/builder.py (Status.getSlave): get the
3876 SlaveStatus object from the BotPerspective, not the BotMaster.
3878 * buildbot/test/test_run.py: bunch of new tests for losing the
3879 buildslave at various points in the build, handling a slave that
3880 connects multiple times, and making sure we can interrupt a
3883 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3884 something other than 'Bot' for the Bot object, to make certain
3885 test cases easier to write.
3886 (BuildSlave.waitUntilDisconnected): utility method for testing
3888 2004-11-30 Brian Warner <warner@lothar.com>
3890 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3892 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3893 argument, return a Deferred that always fires with True or False.
3894 I don't use an errback to indicate 'ping failed' so that callers
3895 are free to ignore the deferred without causing spurious errors in
3897 * buildbot/process/builder.py (BuilderControl.ping): implement it
3899 * buildbot/test/test_run.py (Status.testDisappear): test ping
3900 (Status.disappearSlave): fix it
3902 2004-11-30 Brian Warner <warner@lothar.com>
3904 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3905 (IBuilderControl): add .getBuild(num), only works for the current
3906 build, of course, although it might be interesting to offer
3907 something for builds in the .waiting or .interlocked state.
3909 * buildbot/process/base.py (Build): have .stopBuild just do the
3910 interrupt, then let the build die by itself.
3911 (BuildControl): add .stopBuild, and add a point-event named
3912 'interrupt' just after the build so status viewers can tell that
3914 (BuilderControl): add .getBuild
3916 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3917 stops when you kill it, good for testing
3918 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3919 contains the 'reason' text.
3921 * buildbot/status/html.py: Add Stop Build button, if the build can
3922 still be stopped. Send a Redirect (to the top page) one second
3923 later, hopefully long enough for the interrupt to have an effect.
3924 Move make_row() up to top-level to share it between Stop Build and
3927 * buildbot/slave/commands.py: only kill the child process once
3929 * buildbot/test/test_run.py: add testInterrupt
3931 2004-11-29 Brian Warner <warner@lothar.com>
3933 * buildbot/process/base.py: Refactor command interruption. The
3934 Build is now responsible for noticing that the slave has gone
3935 away: Build.lostRemote() interrupts the current step and makes
3936 sure that no further ones will be started.
3938 * buildbot/process/builder.py: When the initial remote_startBuild
3939 message fails, log it: this usually indicates that the slave has
3940 gone away, but we don't really start paying attention until they
3941 fail to respond to the first step's command.
3943 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3944 slave disconnect. Now sports a new interrupt() method. Error
3945 handling was simplified a lot by chaining deferreds, so
3946 remoteFailed/remoteComplete were merged into a single
3947 remoteComplete method (which can now get a Failure object).
3948 Likewise failed/finished were merged into just _finished.
3949 (BuildStep): Add interrupt(why) method, and if why is a
3950 ConnectionLost Failure then the step is failed with some useful
3953 * buildbot/slave/bot.py: stop the current command when the remote
3954 Step reference is lost, and when the slave is shut down.
3955 (Bot): make it a MultiService, so it can have children. Use
3956 stopService to tell when the slave is shutting down.
3957 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3958 remote_interruptCommand (which asks the current SlaveCommand to
3959 stop but allows it to keep emitting status messages), and
3960 stopCommand (which tells it to shut up and die).
3962 * buildbot/slave/commands.py: make commands interruptible
3963 (ShellCommand.kill): factor out os.kill logic
3964 (Command): factor out setup()
3965 (Command.sendStatus): don't send status if .running is false, this
3966 happens when the command has been halted.
3967 (Command.interrupt): new method, used to tell the command to die
3968 (SlaveShellCommand): implement .interrupt
3969 (DummyCommand): implement .interrupt
3970 (SourceBase, etc): factor out setup(), don't continue substeps if
3973 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3974 so they can be called after finishing
3976 * buildbot/test/test_run.py: new tests for disconnect behavior,
3977 refactor slave-shutdown routines, add different kinds of
3980 2004-11-27 Brian Warner <warner@lothar.com>
3982 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3983 method to express ETA time like "2m45s" instead of "165 seconds"
3985 2004-11-24 Brian Warner <warner@lothar.com>
3987 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3988 archive after the test completes, to avoid cluttering the user's
3989 'tla archives' listing with a bogus entry. Arch doesn't happen to
3990 provide any way to override the use of ~/.arch-params/, so there
3991 isn't a convenient way to avoid touching the setup of the user who
3993 (VC_HTTP.testArchHTTP): same
3995 2004-11-23 Brian Warner <warner@lothar.com>
3997 * buildbot/status/html.py (TextLog): split render() up into
3998 render_HEAD and render_GET. Use a Producer when sending log
3999 chunks, to reduce memory requirements and avoid sending huge
4000 non-Banana-able strings over web.distrib connections. Requires
4001 peeking under the covers of IStatusLog.
4002 (TextLog.resumeProducing): fix the "as text" link, handle client
4003 disconnects that occur while we're still sending old chunks.
4005 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
4006 use defer.succeed, not the non-existent defer.success
4007 (LogFile.waitUntilFinished): same
4008 (LogFile.subscribe): don't add watchers to a finished logfile
4010 * buildbot/__init__.py (version): bump to 0.6.1+ while between
4013 2004-11-23 Brian Warner <warner@lothar.com>
4015 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
4017 2004-11-23 Brian Warner <warner@lothar.com>
4019 * NEWS: update for the 0.6.1 release
4020 * MANIFEST.in: add new files
4022 * README (INSTALLATION): explain how to enable the extra VC tests
4024 * buildbot/status/builder.py (LogFile): add .runEntries at the class
4025 level to, so old pickled builds can be displayed ok
4027 2004-11-22 Brian Warner <warner@lothar.com>
4029 * NEWS: summarize updates since last release
4031 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
4032 Yoz Grahame. Closes SF#1050138.
4034 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
4037 * buildbot/process/step_twisted.py (Trial): update docs a bit
4039 * docs/factories.xhtml: fix Trial factory docs to match reality.
4042 * buildbot/process/factory.py (Trial.__init__): add args for
4043 randomly= and recurse=, making them available to instantiators
4044 instead of only to subclassers. Closes: SF#1049759.
4046 2004-11-15 Brian Warner <warner@lothar.com>
4048 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4049 try to teach the Quick factory to use multiple versions of python
4051 2004-11-12 Brian Warner <warner@lothar.com>
4053 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
4054 safer w32-compatible approach, and only use it on windows
4055 (BuildStatus.saveYourself): same
4057 2004-11-11 Brian Warner <warner@lothar.com>
4059 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
4060 it: one string merge per chunk. There are now separate .entries
4061 and .runEntries lists: when enumerating over all chunks, make sure
4063 * buildbot/test/test_status.py (Log): more tests
4065 * buildbot/status/builder.py (LogFile.addEntry): Merge string
4066 chunks together, up to 10kb per chunk. This ought to cut down on
4067 the CPU-burning overhead of large log files. Thanks to Alexander
4068 Staubo for spotting the problem.
4069 * buildbot/test/test_status.py (Log): tests for same
4071 2004-11-10 Brian Warner <warner@lothar.com>
4073 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
4074 header to outbound mail
4075 * buildbot/test/test_status.py (Mail.testBuild1): test for same
4077 2004-11-08 Brian Warner <warner@lothar.com>
4079 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
4080 can't do os.rename() onto an existing file, so catch the exception
4081 and unlink the target file first. This introduces a slight window
4082 where the existing file could be lost, but the main failure case
4083 (disk full) should still be handled safely.
4084 (BuildStatus.saveYourself): same
4086 * buildbot/changes/pb.py (ChangePerspective): use a configurable
4087 separator character instead of os.sep, because the filenames being
4088 split here are coming from the VC system, which can have a
4089 different pathname convention than the local host. This should
4090 help a buildmaster running on windows that uses a CVS repository
4091 which runs under unix.
4092 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
4094 * buildbot/process/step_twisted.py (Trial.createSummary): survive
4095 when there are no test failures to be parsed
4097 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
4098 instead of the unix-specific os.system("cp"), thanks to Elliot
4099 Murphy for this and the other buildbot-vs-windows catches.
4100 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
4102 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
4103 echo the command as it is run
4105 * setup.py: install sample.mk too, not just sample.cfg
4106 (scripts): install contrib/windows/buildbot.bat on windows
4108 2004-11-07 Brian Warner <warner@lothar.com>
4110 * buildbot/process/builder.py (Builder._detached): clear the
4111 self.currentBuild reference, otherwise the next build will be
4112 skipped because we think the Builder is already in use.
4114 * docs/examples/twisted_master.cfg: update to match current usage
4115 on the Twisted buildbot
4117 2004-10-29 Brian Warner <warner@lothar.com>
4119 * buildbot/status/mail.py (MailNotifier): fix typo in docs
4121 2004-10-28 Brian Warner <warner@lothar.com>
4123 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
4124 have separate doVCUpdate/doVCFull methods. Catch an update failure
4125 and respond by clobbering the source directory and re-trying. This
4126 will handle local changes (like replacing a file with a directory)
4127 that will cause CVS and SVN updates to fail.
4128 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
4130 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
4133 2004-10-19 Brian Warner <warner@lothar.com>
4135 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
4137 * buildbot/status/html.py (StatusResourceTestResults): display any
4138 TestResults that the Build might have
4139 (StatusResourceTestResult): and the logs for each TestResult
4140 (StatusResourceBuild): add link from the per-build page
4142 2004-10-15 Brian Warner <warner@lothar.com>
4144 * buildbot/process/step_twisted.py (Trial.createSummary): parse
4145 the 'problems' portion of stdout, add TestResults to our build
4146 * buildbot/test/test_twisted.py (Parse.testParse): test it
4148 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
4149 to retrieve a dict of accumulated test results
4150 (ITestResult): define what a single test result can do
4151 * buildbot/status/builder.py (TestResult): implement ITestResult
4152 (BuildStatus.getTestResults): retrieve dict of TestResults
4153 (BuildStatus.addTestResult): add TestResults
4154 * buildbot/test/test_status.py (Results.testAddResults): test it
4156 2004-10-14 Brian Warner <warner@lothar.com>
4158 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
4159 instead of os.system("rm -rf") for win32 portability
4161 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
4162 SignalMixin instead of starting/stopping the reactor, which is
4163 likely to cause problems with other tests
4165 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
4166 self.copyComplete() call. Yoz Grahame makes the catch.
4168 * contrib/windows/buildbot.bat: helper script to deal with path
4169 issues. Thanks to Yoz Grahame.
4171 * buildbot/master.py (BuildMaster.startService): don't register a
4172 SIGHUP handler if the signal module has no SIGHUP attribute.
4173 Apparently win32 does this.
4175 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
4177 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
4178 test if the reactor can't offer UNIX sockets
4180 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
4181 error introduced in the last commit. We really need that
4184 2004-10-12 Brian Warner <warner@lothar.com>
4186 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
4187 when describing a maildir source. Thanks to Stephen Davis.
4189 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
4192 * buildbot/scripts/runner.py (createMaster): install Makefile too
4193 (start): add --no_save to 'start' command
4194 * buildbot/scripts/sample.mk: simple convenience Makefile with
4195 start/stop/reload targets
4197 * buildbot/__init__.py (version): bump to 0.6.0+ while between
4200 2004-09-30 Brian Warner <warner@lothar.com>
4202 * setup.py: Releasing buildbot-0.6.0
4204 2004-09-30 Brian Warner <warner@lothar.com>
4206 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
4207 test_trial.py from the source tarball until support is complete.
4209 * NEWS: update for 0.6.0 release
4210 * buildbot/__init__.py (version): same
4213 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
4214 'source' command to tell users where to get the Buildbot source
4216 * docs/examples/*.cfg: update to modern standards
4218 * NEWS: update for release
4220 * buildbot/scripts/runner.py (createMaster): remove the
4221 -shutdown.tap stuff now that it isn't necessary
4223 (start): launch buildbot.tap, not buildbot-shutdown.tap
4226 * buildbot/status/mail.py (Domain): shorten class name
4227 (MailNotifier): if lookup= is a string, pass it to Domain()
4228 * buildbot/test/test_status.py (Mail.testBuild1): new class name
4229 (Mail.testBuild2): test the string-to-Domain shortcut
4230 (Mail.testMail): fix test
4233 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
4236 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
4237 more attributes on load
4238 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
4239 to accomodate the whole waterfall page at once, and the thrashing
4240 results in a lot of unnecessary loads
4241 (BuildStatus.saveYourself): use binary pickles, not fluffy text
4242 (BuilderStatus.saveYourself): same
4243 (BuilderStatus.eventGenerator): stop generating on the first missing
4244 build. We assume that saved builds are deleted oldest-first.
4245 (BuildStepStatus.__getstate__): .progress might not exist
4247 * buildbot/changes/changes.py (ChangeMaster): make it
4248 serializable, in $masterdir/changes.pck
4249 (ChangeMaster.stopService): save on shutdown
4250 * buildbot/master.py (BuildMaster.loadChanges): load at startup
4251 * buildbot/test/test_config.py: load Changes before config file
4254 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
4255 "Oh my god, you killed the command" header on a separate line
4257 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
4258 skip over corrupted build pickles
4259 (BuilderStatus.getFullBuildByNumber): same
4260 (BuilderStatus.eventGenerator): skip over unavailable builds
4261 (BuildStatus.saveYourself): save builds to a .tmp file first, then
4262 do an atomic rename. This prevents a corrupted pickle when some
4263 internal serialization error occurs.
4264 (BuilderStatus.saveYourself): same
4266 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
4267 the timeout for shell commands, it got lost somehow
4269 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
4270 run out of build steps, return the rest of the builder events
4272 * buildbot/interfaces.py (IBuilderControl.ping): add method
4274 * buildbot/process/builder.py (BuilderControl.ping): move
4275 slave-ping to BuilderControl, and fix the failure case in the
4276 process (Event.finish() is the verb, Event.finished is the noun).
4278 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
4279 through the BuilderControl instead of the BuilderStatus
4280 (EventBox): add adapter for builder.Event, allowing builder events to
4281 be displayed in the waterfall display
4283 * buildbot/master.py (BotMaster.stopService): add a 'master
4284 shutdown' event to the builder's log
4285 (BuildMaster.startService): and a 'master started' on startup
4287 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
4288 builder events into the BuildStep event stream
4289 (Status.builderAdded): add a 'builder created' event
4292 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
4293 command to announce the completion of a running build
4294 (IrcStatusBot.command_FORCE): announce when the build finishes
4296 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
4297 don't evict unfinished builds from the cache: they must stay in
4298 the full-cache until their logfiles have stopped changing. Make
4299 sure the eviction loop terminates if an unfinished build was hit.
4300 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
4301 This lets exceptions be dumped in an email status message. Really
4302 we need LogFiles which contain both text and HTML, instead of two
4304 (BuildStatus.__getstate__): handle self.finished=False
4305 (Status.builderAdded): if the pickle is corrupted, abandon the
4306 history and create a new BuilderStatus object.
4308 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
4309 self.progress attribute, helped one test which doesn't fully set
4310 up the Build object.
4312 * buildbot/interfaces.py (IStatusLogStub): split out some of the
4313 IStatusLog methods into an Interface that is implemented by "stub"
4314 logs, for which all the actual text chunks are on disk (in the
4315 pickled Build instance). To show the log contents, you must first
4316 adapt the stub log to a full IStatusLog object.
4318 * buildbot/status/builder.py (LogFileStub): create separate stub
4319 log objects, which can be upgraded to a real one if necessary.
4320 (LogFile): make them persistable, and let them stubify themselves
4322 (BuildStepStatus): same
4324 (BuildStatus.saveYourself): save the whole build out to disk
4325 (BuilderStatus): make it persistable
4326 (BuilderStatus.saveYourself): save the builder to disk
4327 (BuilderStatus.addFullBuildToCache): implement two caches which
4328 hold Build objects: a small one which holds full Builds, and a
4329 larger one which holds "stubbed" Builds (ones with their LogFiles
4330 turned into LogFileStubs). This reduces memory usage by the
4331 buildmaster by not keeping more than a few (default is 2) whole
4332 build logs in RAM all the time.
4333 (BuilderStatus.getBuild): rewrite to pull from disk (through the
4335 (BuilderStatus.eventGenerator): rewrite since .builds went away
4336 (BuilderStatus.buildStarted): remove the .builds array. Add the
4337 build to the "full" cache when it starts.
4338 (BuilderStatus._buildFinished): save the build to disk when it
4340 (Status): give it a basedir (same as the BuildMaster's basedir)
4341 where the builder pickles can be saved
4342 (Status.builderAdded): create the BuilderStatus ourselves, by
4343 loading a pickle from disk (or creating a new instance if there
4344 was none on disk). Return the BuilderStatus so the master can glue
4345 it into the new Builder object.
4347 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
4348 all BuilderStatuses to save themselves out to disk. This is in
4349 lieu of saving anything important in the main Application pickle
4350 (the -shutdown.tap file).
4351 (BuildMaster.__init__): give Status() a basedir for its files
4352 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
4353 to get the BuilderStatus, then give it to the Builder (instead of
4354 doing it the other way around). It's ok if the status announces
4355 the new Builder before it's really ready, as the outside world can
4356 only see the BuilderStatus object anyway (and it is ready before
4357 builderAdded returns). Use the builder's "builddir" (which
4358 normally specifies where the slave will run the builder) as the
4359 master's basedir (for saving serialized builds).
4361 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
4362 coerce the logfile to IStatusLog before trying to get the text
4363 chunks out of it. This will pull the full (non-stubified) Build in
4364 from disk if necessary.
4365 (TextLog): fix the adapter registration
4367 * buildbot/test/test_control.py (Force.setUp): create the basedir
4368 * buildbot/test/test_web.py: same
4369 * buildbot/test/test_vc.py (SetupMixin.setUp): same
4370 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
4371 * buildbot/test/test_run.py (Run.testMaster): same
4372 (Status.setUp): same
4374 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
4376 * buildbot/status/html.py (Waterfall.__init__): store actual
4377 allowForce flag passed in rather than using True for everyone;
4378 make sure setting it to False doesn't cause a NameError
4380 (StatusResourceBuilder.__init__) add the builder name to the page
4382 (StatusResourceBuilder.body) move HTML generation for a name/value
4383 row into a helper method (StatusResourceBuilder.make_row); only
4384 generate the "Force Build" form if allowForce was True and the
4385 slave is connected. Use class attributes in the generated HTML to
4386 spread a little CSS-joy.
4388 2004-09-28 Brian Warner <warner@lothar.com>
4390 * buildbot/process/step_twisted.py (Trial.createSummary): fix
4391 warning-scanner to not ignore things like
4392 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
4394 * buildbot/status/html.py (StatusResource.control): add some
4395 class-level values for .control in an attempt to make upgrading
4398 * buildbot/util.py (ComparableMixin): survive missing attributes,
4399 such as when a class is modified and we're comparing old instances
4402 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
4403 failure handling, remove a redundant try/except block. Don't
4404 return the full traceback to the IRC channel.
4405 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
4406 error messages. Get ETA properly.
4408 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
4409 the reason, since (at least) IRC message will have <> in them.
4410 (StatusResourceBuilder.__init__): take an IBuilderControl
4411 (StatusResourceBuilder.force): use the IBuilderControl we get in
4412 the constructor instead of trying to make our own. Catch the
4413 new exceptions and ignore them for now (until we make an
4414 intermediate web page where we could show the error message)
4415 (StatusResource): create with an IControl, use it to give an
4416 IBuilderControl to all children
4417 (Waterfall): take an allowForce= option, pass an IControl object
4418 to StatusResource if it is True
4420 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
4422 * buildbot/master.py (BotPerspective.perspective_forceBuild):
4423 catch new exceptions and return string forms
4425 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
4426 * buildbot/process/builder.py (Builder.forceBuild): raise them
4427 * buildbot/test/test_control.py (Force.testNoSlave): new test
4428 (Force.testBuilderInUse): same
4431 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
4433 * buildbot/test/test_run.py: use IControl
4434 * buildbot/test/test_vc.py: same
4436 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
4437 to use IControl. Still offline.
4438 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
4440 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
4441 who=None so periodic builds don't send out status mail
4442 (Builder.forceBuild): include reason in the log message
4443 (BuilderControl.forceBuild): rename 'name' to 'who'
4445 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
4446 'who' parameter, but make it None by default so builds forced by
4447 slave admins don't cause status mail to be sent to anybody
4448 (BotMaster.forceBuild): same. this method is deprecated.
4449 (DebugPerspective.perspective_forceBuild): same, use IControl.
4450 (DebugPerspective.perspective_fakeChange): use IControl..
4451 (Dispatcher.requestAvatar): .. so don't set .changemaster
4453 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4454 parameter to avoid confusion with the name of the builder
4457 * buildbot/status/mail.py: refine comment about needing 2.3
4459 * buildbot/status/html.py: move all imports to the top
4461 * buildbot/test/test_control.py: test new interfaces
4462 * buildbot/test/test_run.py (Status): handle new interfaces
4463 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4465 * buildbot/process/base.py (BuildControl): implement IBuildControl
4466 and its lonely getStatus() method
4468 * buildbot/process/builder.py (BuilderControl): implement
4469 IBuilderControl, obtained by adapting the Builder instance
4470 (Builder.startBuild): return a BuilderControl instead of a
4471 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4472 accomplish the same thing.
4474 * buildbot/master.py: move all import statements to the top
4475 (Control): implement IControl, obtained by adapting the
4476 BuildMaster instance.
4478 * buildbot/interfaces.py: add IControl, IBuilderControl, and
4479 IBuildControl. These are used to force builds. Eventually they
4480 will provide ways to reconfigure the Builders, pause or abandon a
4481 Build, and perhaps control the BuildMaster itself.
4483 2004-09-26 Brian Warner <warner@lothar.com>
4485 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4486 ends up comparing us against something without a .__class__
4488 2004-09-24 Brian Warner <warner@lothar.com>
4490 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4493 * Makefile: add 'deb-snapshot' target, to create a timestamped
4496 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4498 2004-09-23 Brian Warner <warner@lothar.com>
4500 * buildbot/__init__.py (version): move version string here
4501 * setup.py: get version string from buildbot.version
4502 * buildbot/status/html.py (WaterfallStatusResource.body): add
4503 buildbot version to the page footer
4504 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4507 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4508 slaves, let the second know where the first one is coming from
4509 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
4510 see our exceptions. It would be nice if there were a way to just
4511 send them the exception type and value, not the full traceback.
4514 * buildbot/status/mail.py (MailNotifier): add a new argument
4515 sendToInterestedUsers=, which can be set to False to disable the
4516 usual send-to-blamelist behavior.
4517 (top): handle python-2.2 which has no email.MIMEMultipart
4518 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
4519 (MailNotifier.disownServiceParent): unsubscribe on removal
4521 * buildbot/test/test_status.py (Mail.testBuild2): test it
4524 * buildbot/status/progress.py (Expectations.wavg): tolerate
4525 current=None, which happens when steps start failing badly
4526 * buildbot/test/test_status.py (Progress.testWavg): test for it
4528 * buildbot/process/step.py (SVN.startVC): when the (old) slave
4529 doesn't understand args['revision'], emit a warning instead of
4530 bailing completely. Updating to -rHEAD is probably close enough.
4532 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
4534 * buildbot/test/test_status.py: at least import bb.status.client
4535 even if we don't have any test coverage for it yet
4537 * contrib/svn_buildbot.py: don't require python2.3
4538 (main): wait, do require it (for sets.py), but explain how to
4539 make it work under python2.2
4541 2004-09-23 Brian Warner <warner@lothar.com>
4543 * contrib/svn_buildbot.py: include the revision number in the Change
4545 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
4546 using util.now() because FreshCVS is a realtime service
4548 * buildbot/status/event.py: delete dead code
4549 * buildbot/process/step.py: don't import dead Event class
4550 * buildbot/process/step_twisted.py: same
4551 * buildbot/status/builder.py: same
4552 * buildbot/status/client.py: same
4554 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
4556 * buildbot/changes/changes.py (Change): set .when from an __init__
4557 argument (which defaults to now()), rather than having
4558 ChangeMaster.addChange set it later.
4559 (ChangeMaster.addChange): same
4561 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
4562 (parseSyncmail): same. Just use util.now() for now.
4563 (parseBonsaiMail): parse the timestamp field for when=
4565 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
4566 instead of setting .when after the fact
4570 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
4571 results when the target project uses retrial. Still under
4573 * buildbot/test/test_trial.py: same
4575 2004-09-21 Brian Warner <warner@lothar.com>
4577 * buildbot/status/mail.py (MailNotifier.__init__): include
4578 success/warnings/failure in the Subject line
4579 (MailNotifier.buildMessage): add the buildbot's URL to the body,
4580 use step.logname for the addLogs=True attachment filenames
4581 * buildbot/test/test_status.py (Mail): test Subject lines
4582 (Mail.testLogs): test attachment filenames
4584 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
4585 accept a 'who' argument from the debug tool
4586 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
4587 * contrib/debug.glade: add text box to set 'who'
4589 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
4590 .getBuilderName with .getBuilder().getName(), more flexible
4591 (IStatusLog.getName): logs have short names, but you can prefix
4592 them with log.getStep().getName() to make them more useful
4593 * buildbot/status/builder.py: same
4594 * buildbot/status/client.py: same
4595 * buildbot/status/html.py: same
4596 * buildbot/test/test_run.py (Status.testSlave): same
4597 * buildbot/process/step.py: tweak logfile names
4599 * buildbot/status/mail.py (MailNotifier): add lookup, change
4600 argument to extraRecipients. The notifier is now aimed at sending
4601 mail to the people involved in a particular build, with additional
4602 constant recipients as a secondary function.
4604 * buildbot/test/test_status.py: add coverage for IEmailLookup,
4605 including slow-lookup and failing-lookup. Make sure the blamelist
4606 members are included.
4608 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
4609 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
4610 (IBuildStatus.getInterestedUsers): new method
4611 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
4612 * buildbot/status/client.py (remote_getResponsibleUsers): same
4613 * buildbot/status/html.py (StatusResourceBuild.body): same
4614 * buildbot/test/test_run.py (Status.testSlave): same
4616 2004-09-20 Brian Warner <warner@lothar.com>
4618 * docs/users.xhtml: update concepts
4620 * Makefile: add a convenience makefile, for things like 'make
4621 test'. It is not included in the source tarball.
4623 2004-09-16 Brian Warner <warner@lothar.com>
4625 * NEWS: mention /usr/bin/buildbot, debian/*
4627 * debian/*: add preliminary debian packaging. Many thanks to
4628 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
4629 it considerably since it left their hands, I am responsible for
4630 all breakage that's resulted.
4632 * bin/buildbot: create a top-level 'buildbot' command, to be
4633 installed in /usr/bin/buildbot . For now it's just a simple
4634 frontend to mktap/twistd/kill, but eventually it will be the entry
4635 point to the 'try' command and also a status client. It is also
4636 intended to support the upcoming debian-packaging init.d scripts.
4637 * buildbot/scripts/runner.py: the real work is done here
4638 * buildbot/scripts/__init__.py: need this too
4639 * buildbot/scripts/sample.cfg: this is installed in new
4640 buildmaster directories
4641 * setup.py: install new stuff
4643 2004-09-15 Brian Warner <warner@lothar.com>
4645 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4646 'file:' schema (the version shipped with OS-X was built without the
4648 (SetupMixin.tearDown): stop the goofy twisted.web timer which
4649 updates the log-timestamp, to make sure it isn't still running after
4652 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
4653 values to the config file.
4654 * docs/examples/hello.cfg: add examples
4655 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
4656 * buildbot/status/builder.py (Status.getProjectURL): implement them
4657 * buildbot/master.py (BuildMaster.loadConfig): set them from config
4658 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
4659 * buildbot/status/html.py (WaterfallStatusResource): display them
4662 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
4663 certain error cases don't suffer a secondary exception.
4664 (top): Skip tests if the corresponding VC tool is not installed.
4666 * buildbot/process/factory.py (Trial): introduce separate
4667 'buildpython' and 'trialpython' lists, since trialpython=[] is
4668 what you want to invoke /usr/bin/python, whereas ./setup.py is
4669 less likely to be executable. Add env= parameter to pass options
4670 to test cases (which is how I usually write tests, I don't know if
4671 anyone else does it this way).
4673 * buildbot/process/step_twisted.py (Trial): handle python=None.
4674 Require 'testpath' be a string, not a list. Fix tests= typo.
4675 (Trial.start): sanity-check any PYTHONPATH value for stringness.
4677 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4678 way to deal with the possibility of removing the disconnect notify
4680 (CVS): add a 'login' parameter to give a password to 'cvs login',
4681 commonly used with pserver methods (where pw="" or pw="guest")
4683 * buildbot/slave/commands.py (SourceBase): move common args
4684 extraction and setup() to __init__, so everything is ready by the
4685 time setup() is called
4686 (CVS.start): call 'cvs login' if a password was supplied
4687 (ShellCommand): special-case PYTHONPATH: prepend the master's
4688 value to any existing slave-local value.
4690 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4691 don't have a remote, mark the builder as Offline. This whole
4692 function should probably go away and be replaced by individual
4694 (Builder.buildFinished): return the results to the build-finished
4695 deferred callback, helps with testing
4697 2004-09-14 Brian Warner <warner@lothar.com>
4699 * buildbot/test/test_vc.py: put all the repositories needed to run
4700 the complete tests into a single small (1.3MB) tarball, so I can
4701 make that tarball available on the buildbot web site. Test HTTP
4702 access (for Arch and Darcs) by spawning a temporary web server
4703 while the test runs.
4705 * docs/users.xhtml: new document, describe Buildbot's limited
4706 understanding of different human users
4708 * buildbot/test/test_vc.py: rearrange test cases a bit
4710 * buildbot/process/step_twisted.py (Trial): handle testpath=
4711 * buildbot/process/factory.py (Trial): update to use step.Trial
4713 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4715 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4716 the overall build text (which gives you 'failed 2 tests' rather
4718 (BuildStepStatus.text2): default to [], not None
4720 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4723 2004-09-12 Brian Warner <warner@lothar.com>
4725 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4726 log the whole exception if it's just an AttributeError (old slave)
4728 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4729 so (e.g.) sub-commands can be run in the right directory.
4730 (ShellCommand.start): accept an optional errorMessage= argument
4731 to make life easier for SVN.start
4732 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4734 (ShellCommand.start): move ['dir'] compatibility hack..
4735 (RemoteShellCommand.start): .. to here so everyone can use it
4737 * buildbot/process/step_twisted.py (Trial): use .workdir
4739 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4740 text displayed when debuild fails completely
4741 (Trial): snarf _trial_temp/test.log from the slave and display it
4743 2004-09-11 Brian Warner <warner@lothar.com>
4745 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4747 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4748 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4750 * buildbot/process/step.py (ShellCommand): call .createSummary
4751 before .evaluateCommand instead of the other way around. This
4752 makes it slightly easier to count warnings and then use that to
4753 set results=WARNINGS
4754 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4756 * buildbot/process/base.py (Build.buildFinished): update status
4757 before doing progress. It's embarrassing for the build to be stuck
4758 in the "building" state when an exceptions occurs elsewhere..
4760 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4761 python2.2 doesn't have 'sum'
4763 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4764 to prevent clients from accidentally sorting it
4766 * buildbot/master.py (Manhole): add username/password
4767 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4768 c['manholePort'], deprecate old usage
4769 * docs/config.xhtml: document c['manhole']
4770 * docs/examples/hello.cfg: show example of using a Manhole
4773 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4774 pretend the slave is up to date
4776 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4777 the module, overlaps with 'log', the local variable
4779 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4781 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4782 new method to let Steps find out the version of their
4783 corresponding SlaveCommand.
4784 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4785 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4786 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4788 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4789 (Arch.startVC): same
4790 (P4Sync.startVC): same
4792 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4793 Deferred so we can catch errors in remote_startCommand
4794 (RemoteShellCommand.start): same
4796 * docs/examples/twisted_master.cfg: update sample config file
4798 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4799 after connectionMade() is called, not before. Close stdin at that
4802 * buildbot/process/process_twisted.py: update to use Trial, clean
4803 up argument passing (move to argv arrays instead of string
4806 * buildbot/process/step_twisted.py (Trial): new step to replace
4807 RunUnitTests, usable by any trial-using project (not just
4808 Twisted). Arguments have changed, see the docstring for details.
4810 * buildbot/process/base.py (Build.startBuild): this now returns a
4811 Deferred. Exceptions that occur during setupBuild are now
4812 caught better and lead to fewer build_status weirdnesses, like
4813 finishing a build that was never started.
4814 (Build.buildFinished): fire the Deferred instead of calling
4815 builder.buildFinished directly. The callback argument is this
4816 Build, everything else can be extracted from it, including the
4817 new build.results attribute.
4818 * buildbot/process/builder.py (Builder.startBuild): same
4819 (Builder.buildFinished): same, extract results from build
4821 * buildbot/process/step.py (ShellCommands): remove dead code
4823 2004-09-08 Brian Warner <warner@lothar.com>
4825 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4826 doesn't try to use the leftover patched workdir
4827 (SourceStamp): test source-stamp computation for CVS and SVN
4829 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4830 patched workdir ('touch .buildbot-patched') so we don't try to
4832 (SourceBase.start): add ['revision'] for all Source steps
4833 (CVS): change args: use ['branch'] for -r, remove ['files']
4834 (CVS.buildVC): fix revision/branch stuff
4835 (SVN): add revision stuff
4837 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4838 kwargs (except 'workdir') to avoid silent spelling errors
4839 (ShellCommand.__init__): same
4840 (Source): new base class for CVS/SVN/etc. Factor out everything
4841 common, add revision computation (perform the checkout with a -D
4842 DATE or -r REVISION that gets exactly the sources described by the
4843 last Change), overridable with step.alwaysUseLatest. Add patch
4844 handling (build.getSourceStamp can trigger the use of a base
4845 revision and a patch).
4846 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4847 * docs/steps.xhtml: update docs
4848 * docs/source.xhtml: mention .checkoutDelay
4849 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4851 * buildbot/process/base.py (Build.setSourceStamp): add a
4852 .sourceStamp attribute to each Build. If set, this indicates that
4853 the build should be done with something other than the most
4854 recent source tree. This will be used to implement "try" builds.
4855 (Build.allChanges): new support method
4856 (Build.lastChangeTime): remove, functionality moved to Source steps
4857 (Build.setupBuild): copy the Step args before adding ['workdir'],
4858 to avoid modifying the BuildFactory (and thus triggering spurious
4862 * buildbot/status/html.py: rename s/commits/changes/
4863 (StatusResourceChanges): same
4864 (CommitBox.getBox): same, update URL
4865 (WaterfallStatusResource): same
4866 (StatusResource.getChild): same
4868 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4869 * contrib/debug.glade: add optional 'revision' to the fakeChange
4871 * buildbot/changes/changes.py (html_tmpl): display .revision
4872 (ChangeMaster.addChange): note .revision in log
4873 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4874 accept a ['revision'] attribute
4876 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4878 * buildbot/master.py (BotMaster.getPerspective): update the
4879 .connected flag in SlaveStatus when it connects
4880 (BotMaster.detach): and when it disconnects
4881 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4882 (BuildMaster.loadConfig_Builders): walk old list correctly
4884 * buildbot/test/test_config.py: fix prefix= usage
4886 2004-09-06 Brian Warner <warner@lothar.com>
4890 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4891 poll a P4 depot looking for recent changes. Thanks to Dave
4892 Peticolas for the contribution. Probably needs some testing after
4895 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4896 requires manual client setup for each buildslave. Rather
4897 experimental. Thanks again to Dave Peticolas.
4898 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4900 * buildbot/changes/changes.py (Change): add a .revision attribute,
4901 which will eventually be used to generate source-stamp values.
4903 * buildbot/process/step.py (RemoteCommand.start): use
4904 notifyOnDisconnect to notice when we lose the slave, then treat it
4905 like an exception. This allows LogFiles to be closed and the build
4906 to be wrapped up normally. Be sure to remove the disconnect
4907 notification when the step completes so we don't accumulate a
4908 bazillion such notifications which will fire weeks later (when the
4909 slave finally disconnects normally). Fixes SF#915807, thanks to
4910 spiv (Andrew Bennetts) for the report.
4911 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4912 really isn't Logged- specific
4913 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4914 header, since it's almost always going to be appended to an
4916 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4917 update test to handle use of notifyOnDisconnect
4919 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4920 don't clear .ETA and .currentBuild when going offline, let the
4921 current build clean up after itself
4923 * buildbot/process/builder.py (Builder.detached): wait a moment
4924 before doing things like stopping the current build, because the
4925 current step will probably notice the disconnect and cleanup the
4927 * buildbot/test/test_run.py (Status.tearDown): update test to
4928 handle asynchronous build-detachment
4930 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4932 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4933 hush a debug message
4935 2004-09-05 Brian Warner <warner@lothar.com>
4937 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4938 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4939 kernels do this: the fcntl module has the F_NOTIFY constant, but
4940 the kernel itself doesn't support the operation. Thanks to Olly
4941 Betts for spotting the problem.
4943 * buildbot/process/step.py (Darcs): new source-checkout command
4944 (Arch): new source-checkout command
4945 (todo_P4): fix constructor syntax, still just a placeholder
4946 * buildbot/test/test_vc.py (VC.testDarcs): test it
4947 (VC.testDarcsHTTP): same, via localhost HTTP
4949 (VC.testArchHTTP): same
4950 * NEWS: mention new features
4952 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4953 which tells the step to stash stdout text locally (in .stdout).
4954 Slave-side Commands can use this to make decisions based upon the
4955 output of the the ShellCommand (not just the exit code).
4956 (Darcs): New source-checkout command
4957 (Arch): New source-checkout command, uses .keepStdout in one place
4958 where it needs to discover the archive's default name.
4960 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4961 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4962 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4964 * buildbot/process/step.py (ShellCommand.describe): add an
4965 alternate .descriptionDone attribute which provides descriptive
4966 text when the step is complete. .description can be ["compiling"],
4967 for use while the step is running, then .descriptionDone can be
4968 ["compile"], used alone when the step succeeds or with "failed" when
4969 it does not. Updated other steps to use the new text.
4970 * buildbot/process/step_twisted.py: same
4971 * buildbot/test/test_run.py: update tests to match
4973 2004-08-30 Brian Warner <warner@lothar.com>
4975 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4976 (CVS.__init__): send 'patch' argument to slave
4977 (CVS.start): don't create the LoggedRemoteCommand until start(),
4978 so we can catch a .patch added after __init__
4979 (SVN.__init__): add 'patch' to SVN too
4982 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4983 argument, to let commands push data into the process' stdin pipe.
4984 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4985 is in use, since closing a PTY doesn't really affect the process
4986 in the right way (in particular, I couldn't run /usr/bin/patch
4988 (SourceBase.doPatch): handle 'patch' argument
4990 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4993 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4994 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4996 * buildbot/master.py (BotPerspective.got_commands): get command
4997 versions from slave, give to each builder
4998 * buildbot/process/builder.py (Builder.attached): stash slave
4999 command versions in .remoteCommands
5001 * docs/steps.xhtml: bring docs in-line with reality
5003 * buildbot/process/step.py (CVS.__init__): more brutal
5004 compatibility code removal
5005 (SVN.__init__): same
5007 * buildbot/slave/commands.py (SlaveShellCommand): update docs
5008 (SlaveShellCommand.start): require ['workdir'] argument, remove
5009 the ['dir'] fallback (compatibility will come later)
5010 (SourceBase): update docs
5011 (SourceBase.start): remove ['directory'] fallback
5014 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
5015 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5016 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
5018 * buildbot/process/step.py (RemoteShellCommand.__init__): add
5019 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
5020 code.. I will figure out 0.5.0-compatibility hooks later)
5022 2004-08-30 Brian Warner <warner@lothar.com>
5024 * buildbot/process/process_twisted.py: rewrite in terms of new
5025 BuildFactory base class. It got significantly shorter. Yay
5028 * buildbot/process/step_twisted.py (HLint.start): fix to make it
5029 work with the new "self.build isn't nailed down until we call
5030 step.start()" scheme: specifically, __init__ is called before the
5031 build has decided on which Changes are going in, so we don't scan
5032 build.allFiles() for .xhtml files until start()
5033 (HLint.commandComplete): use getText(), not getStdout()
5034 (RunUnitTests.start): same: don't use .build until start()
5035 (RunUnitTests.describe): oops, don't report (None) when using
5037 (RunUnitTests.commandComplete): use getText()
5038 (RunUnitTests.createSummary): same
5039 (BuildDebs.commandComplete): same
5041 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
5042 set args['command'] until start(), since our BuildStep is allowed
5043 to change their mind up until that point
5044 (TreeSize.commandComplete): use getText(), not getStdout()
5046 * docs/examples/twisted_master.cfg: update to current standards
5048 * docs/factories.xhtml: update
5049 * buildbot/process/factory.py: implement all the common factories
5050 described in the docs. The Trial factory doesn't work yet, and
5051 I've probably broken all the process_twisted.py factories in the
5052 process. There are compatibility classes left in for things like
5053 the old BasicBuildFactory, but subclasses of them are unlikely to
5055 * docs/examples/glib_master.cfg: use new BuildFactories
5056 * docs/examples/hello.cfg: same
5058 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
5059 explicit 'workdir' args
5061 * buildbot/process/base.py (BuildFactory): move factories to ..
5062 * buildbot/process/factory.py (BuildFactory): .. here
5063 * buildbot/process/process_twisted.py: handle move
5064 * buildbot/test/test_config.py: same
5065 * buildbot/test/test_run.py: same
5066 * buildbot/test/test_steps.py: same
5067 * buildbot/test/test_vc.py: same
5068 * docs/factories.xhtml: same
5070 * NEWS: mention config changes that require updating master.cfg
5072 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
5073 argument to all steps that weren't given one already, pointing at
5074 the "build/" directory.
5076 * docs/examples/hello.cfg: remove explicit 'workdir' args
5078 * docs/factories.xhtml: document standard BuildFactory clases,
5079 including a bunch which are have not yet been written
5081 2004-08-29 Brian Warner <warner@lothar.com>
5083 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
5084 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
5085 buildbot.status.builder so they aren't quite so internal
5086 * buildbot/process/base.py, buildbot/process/builder.py: same
5087 * buildbot/process/maxq.py, buildbot/process/step.py: same
5088 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
5089 * buildbot/status/mail.py, buildbot/test/test_run.py: same
5090 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
5092 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
5093 to handle new getLogs()-returns-list behavior
5094 (StatusResourceBuildStep.getChild): same
5095 (StepBox.getBox): same
5096 (WaterfallStatusResource.phase0): same
5098 * docs/source.xhtml: document how Buildbot uses version-control
5099 systems (output side: how we get source trees)
5100 * docs/changes.xhtml: rename from sources.xhtml, documents VC
5101 systems (input side: how we learn about Changes)
5103 * buildbot/master.py (Manhole): use ComparableMixin
5104 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
5105 * buildbot/changes/mail.py (MaildirSource): same
5106 * buildbot/status/client.py (PBListener): same
5107 * buildbot/status/html.py (Waterfall): same
5108 * buildbot/status/words.py (IRC): same
5110 * NEWS: start describing new features
5112 * buildbot/status/mail.py (MailNotifier): finish implementation.
5113 The message body is still a bit sparse.
5114 * buildbot/test/test_status.py (Mail): test it
5116 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
5117 and __hash__ methods I wind up adding everywhere. Specifically
5118 intended to support the buildbot config-file update scheme where
5119 we compare, say, the old list of IStatusTargets against the new
5120 one and don't touch something which shows up on both lists.
5121 * buildbot/test/test_util.py (Compare): test case for it
5123 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
5124 return a list instead of a dict
5125 (IBuildStepStatus.getLogs): same. The idea is that steps create
5126 logs with vaguely unique names (although their uniqueness is not
5127 guaranteed). Thus a compilation step should create its sole
5128 logfile with the name 'compile', and contribute it to the
5129 BuildStatus. If a step has two logfiles, try to create them with
5130 different names (like 'test.log' and 'test.summary'), and only
5131 contribute the important ones to the overall BuildStatus.
5132 * buildbot/status/builder.py (Event.getLogs): same
5133 (BuildStepStatus): fix default .text and .results
5134 (BuildStepStatus.addLog): switch to list-like .getLogs()
5135 (BuildStepStatus.stepFinished): same
5136 (BuildStatus.text): fix default .text
5137 (BuildStatus.getLogs): temporary hack to return all logs (from all
5138 child BuildStepStatus objects). Needs to be fixed to only report
5139 the significant ones (as contributed by the steps themselves)
5140 * buildbot/test/test_run.py: handle list-like .getLogs()
5141 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5143 2004-08-28 Brian Warner <warner@lothar.com>
5145 * buildbot/process/builder.py (Builder.attached): serialize the
5146 attachment process, so the attach-watcher isn't called until the
5147 slave is really available. Add detached watchers too, which makes
5150 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
5152 * buildbot/test/test_swap.py: remove dead code
5154 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
5155 (ShellCommand.start): treat errors in _startCommand/spawnProcess
5156 sort of as if the command being run exited with a -1. There may
5157 still be some holes in this scheme.
5158 (CVSCommand): add 'revision' tag to the VC commands, make sure the
5159 -r option appears before the module list
5160 * buildbot/process/step.py (CVS): add 'revision' argument
5162 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
5163 when sending updates or stepComplete messages to the master, since
5164 we don't currently care whether they arrive or not. When we revamp
5165 the master/slave protocol to really resume interrupted builds,
5166 this will need revisiting.
5167 (lostRemote): remove spurious print
5169 * buildbot/master.py (BotPerspective.attached): serialize the
5170 new-builder interrogation process, to make testing easier
5171 (BotMaster.waitUntilBuilderDetached): convenience function
5173 * buildbot/status/builder.py (BuilderStatus): prune old builds
5174 (BuildStatus.pruneSteps): .. and steps
5175 (BuildStepStatus.pruneLogs): .. and logs
5176 (BuilderStatus.getBuild): handle missing builds
5177 * buildbot/status/html.py (StatusResourceBuild.body): display build
5178 status in the per-build page
5179 (BuildBox.getBox): color finished builds in the per-build box
5181 2004-08-27 Brian Warner <warner@lothar.com>
5183 * buildbot/status/mail.py (MailNotifier): new notification class,
5186 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
5187 variants of a common base class which handles all the mode= logic
5189 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
5191 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
5193 2004-08-26 Brian Warner <warner@lothar.com>
5195 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
5198 * buildbot/test/test_run.py: update to new Logfile interface, new
5199 buildbot.slave modules
5200 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
5202 * MANIFEST.in: new sample config file
5203 * docs/examples/hello.cfg: same
5205 * buildbot/process/step_twisted.py: remove dead import
5207 * buildbot/process/step.py (RemoteCommand.run): catch errors
5209 (RemoteCommand.remote_update): ignore updates that arrive after
5211 (RemoteCommand.remote_complete): ignore duplicate complete msgs
5212 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
5213 the responsibilities of the subclass's methods
5214 (BuildStep.failed): catch errors during failure processing
5215 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
5216 (CVS): move to a mode= argument (described in docstring), rather
5217 than the ungainly clobber=/export=/copydir= combination.
5218 (SVN): add mode= functionality to SVN too
5219 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
5221 * buildbot/process/base.py (Build.startNextStep): catch errors
5222 during s.startStep()
5224 * buildbot/clients/base.py: update to new PB client interface.
5225 gtkPanes is still broken
5227 * buildbot/bot.py, buildbot/slavecommand.py: move to..
5228 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
5229 * setup.py: add buildbot.slave module
5230 * buildbot/bb_tap.py: handle move
5231 * buildbot/slave/registry.py: place to register commands, w/versions
5232 * buildbot/slave/bot.py: major simplifications
5233 (SlaveBuilder.remote_startCommand): use registry for slave commands,
5234 instead of a fixed table. Eventually this will make the slave more
5235 extensible. Use 'start' method on the command, not .startCommand.
5236 Fix unsafeTracebacks handling (I think).
5237 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
5238 helper class with a .start method that returns a Deferred.
5239 SlaveShellCommand is the form reached by the buildmaster. Commands
5240 which use multiple ShellCommands can just chain them as Deferreds,
5241 with some helper methods in Command (_abandonOnFailure and
5242 _checkAbandoned) to bail on rc!=0.
5243 (CVSCommand): prefer new mode= argument
5244 (SVNFetch): add mode= argument
5246 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
5247 put a useful reason string on the build
5249 * buildbot/status/builder.py (LogFile): do LogFile right: move the
5250 core functionality into an IStatusLog object
5251 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
5252 * buildbot/status/html.py (TextLog): HTML-rendering goes here
5253 (StatusResourceBuild.body): use proper accessor methods
5254 * buildbot/status/client.py (RemoteLog): PB-access goes here
5255 (StatusClientPerspective.perspective_subscribe): add "full" mode,
5256 which delivers log contents too
5257 (PBListener.__cmp__): make PBListeners comparable, thus removeable
5258 * buildbot/status/event.py: remove old Logfile completely
5260 * buildbot/interfaces.py (IStatusLog.subscribe): make the
5261 subscription interface for IStatusLog subscriptions just like all
5262 other the status subscriptions
5263 (IStatusReceiver.logChunk): method called on subscribers
5265 2004-08-24 Brian Warner <warner@lothar.com>
5267 * buildbot/process/builder.py (Builder._pong): oops, ping response
5268 includes a result (the implicit None returned by remote_print).
5269 Accept it so the _pong method handles the response correctly.
5271 2004-08-06 Brian Warner <warner@lothar.com>
5273 * buildbot/test/test_config.py: update IRC, PBListener tests
5275 * buildbot/status/client.py (StatusClientPerspective): total
5276 rewrite to match new IStatus interfaces. New subscription scheme.
5277 There are still a few optimizations to make (sending down extra
5278 information with event messages so the client doesn't have to do a
5279 round trip). The logfile-retrieval code is probably still broken.
5280 Moved the PB service into its own port, you can no longer share a
5281 TCP socket between a PBListener and, say, the slaveport (this
5282 should be fixed eventually).
5283 * buildbot/clients/base.py (Client): revamp to match. still needs
5284 a lot of work, but basic event reporting works fine. gtkPanes is
5287 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
5288 instance talks to a single irc server. Threw out all the old
5289 multi-server handling code. Still need to add back in
5290 builder-control (i.e. "force build")
5292 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
5293 more random text to the as-yet-unreachable per-step page
5295 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
5296 rename to stepETAUpdate
5297 (BuildStatus.subscribe): add build-wide ETA updates
5298 (BuilderStatus.getState): remove more cruft
5299 (BuilderStatus.getCurrentBuild): remove more cruft
5300 (BuilderStatus.buildStarted): really handle tuple-subscription
5301 * buildbot/test/test_run.py (Status.testSlave): handle the
5302 stepETAUpdate rename
5304 * buildbot/master.py (BuildMaster): don't add a default
5305 StatusClientService. Don't add a default IrcStatusFactory. Both
5306 are now added through c['status'] in the config file. c['irc'] is
5307 accepted for backwards compatibility, the only quirk is you cannot
5308 use c['irc'] to specify IRC servers on ports other than 6667.
5310 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
5311 (IStatusReceiver.buildStarted): allow update-interval on subscribe
5312 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
5313 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
5316 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
5317 the buildmaster to re-read its config file
5320 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
5321 find out the port our server is running on
5322 (WebTest.test_webPathname_port): same
5324 * buildbot/test/test_config.py (testWebPortnum): test it
5325 (testWebPathname): ditto
5327 * docs/config.xhtml: document new c['status'] configuration option
5329 * buildbot/status/html.py (Waterfall): new top-level class which
5330 can be added to c['status']. This creates the Site as well as the
5331 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
5332 reachable as .parent, for everything.
5334 * buildbot/master.py (Manhole): make it a normal service Child
5335 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
5336 webPathname. It will eventually replace c['irc'] and the implicit
5337 PB listener as well. c['webPortnum'] and c['webPathname'] are left
5338 in as (deprecated) backward compatibility hooks for now.
5341 * buildbot/process/builder.py (Builder.buildFinished): don't
5342 inform out builder_status about a finished build, as it finds out
5343 through its child BuildStatus object
5345 * buildbot/status/html.py: extensive revamp. Use adapters to make
5346 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
5347 have both starting and finishing times and adjust the waterfall
5348 display accordingly, using spacers if necessary. Use SlaveStatus
5349 to get buildslave info.
5350 (StatusResourceBuildStep): new just-one-step resource, used to get
5351 logfiles. No actual href to it yet.
5353 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
5354 the time being, until I get the file-naming scheme right
5356 * buildbot/status/builder.py (Event): clean started/finished names
5357 (BuildStatus.isFinished): .finished is not None is the right test
5358 (BuildStatus.buildStarted): track started/finished times ourselves
5359 (BuilderStatus.getSlave): provide access to SlaveStatus object
5360 (BuilderStatus.getLastFinishedBuild): all builds are now in
5361 .builds, even the currently-running one. Accomodate this change.
5362 (BuilderStatus.eventGenerator): new per-builder event generator.
5363 Returns BuildStepStatus and BuildStatus objects, since they can
5364 both be adapted as necessary.
5365 (BuilderStatus.addEvent): clean up started/finished attributes
5366 (BuilderStatus.startBuild,finishBuild): remove dead code
5367 (SlaveStatus): new object to provide ISlaveStatus
5369 * buildbot/process/step.py (ShellCommand.getColor): actually
5370 return the color instead of setting it ourselves
5371 (CVS.__init__): pull .timeout and .workdir options out of
5372 **kwargs, since BuildStep will ignore them. Without this neither
5373 will be sent to the slave correctly.
5374 (SVN.__init__): same
5376 * buildbot/process/builder.py (Builder): move flags to class-level
5378 (Builder.attached): remove .remoteInfo, let the BotPerspective and
5379 SlaveStatus handle that
5381 * buildbot/process/base.py (Build.firstEvent): remove dead code
5382 (Build.stopBuild): bugfix
5384 * buildbot/changes/pb.py (PBChangeSource.describe): add method
5386 * buildbot/changes/changes.py (Change): add IStatusEvent methods
5387 (ChangeMaster.eventGenerator): yield Changes, since there are now
5388 Adapters to turn them into HTML boxes
5390 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
5391 (BotPerspective.attached): feed a SlaveStatus object
5392 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
5393 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
5395 * buildbot/interfaces.py: API additions
5396 (ISlaveStatus): place to get slave status
5398 2004-08-04 Brian Warner <warner@lothar.com>
5400 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
5401 the delay finishes, so the step is marked as SUCCESS
5403 * buildbot/test/test_run.py (Status.testSlave): cover more of
5404 IBuildStatus and IBuildStepStatus
5406 * buildbot/status/progress.py (StepProgress): move some flags to
5407 class-level attributes
5408 (StepProgress.remaining): if there are no other progress metrics
5409 to go by, fall back to elapsed time
5410 (StepProgress.setExpectations): take a dict of metrics instead of
5412 (BuildProgress.setExpectationsFrom): pull expectations from the
5413 Expectations, instead of having it push them to the BuildProgress
5414 (Expectations): move some flags to class-level attributes
5415 (Expectations.__init__): copy per-step times from the
5417 (Expectations.expectedBuildTime): new method for per-build ETA
5419 * buildbot/status/event.py (Logfile): move some flags to
5420 class-level attributes
5421 (Logfile.logProgressTo): better method name, let step set the
5422 progress axis name (instead of always being "output")
5424 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
5425 times directly, rather than depending upon the (possibly missing)
5426 .progress object. Use 'None' to indicate "not started/finished
5428 (BuildStepStatus.getExpectations): oops, return the full list of
5430 (BuilderStatus._buildFinished): append finished builds to .builds
5432 * buildbot/process/step.py (BuildStep): add separate .useProgress
5433 flag, since empty .progressMetrics[] still implies that time is a
5435 (CVS): set up the cmd in __init__, instead of waiting for start()
5437 * buildbot/process/base.py (Build.startBuild): disable the 'when'
5438 calculation, this will eventually turn into a proper sourceStamp
5439 (Build.setupBuild): tell the Progress to load from the Expectations,
5440 instead of having the Expectations stuff things into the Progress
5441 (Build.buildException): add a build-level errback to make sure the
5442 build's Deferred fires even in case of exceptions
5444 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
5446 * buildbot/process/builder.py (Builder.forceBuild): convey the
5447 reason instead of creating a fake Change
5449 * docs/examples/twisted_master.cfg: update to match reality
5451 * buildbot/test/test_config.py, buildbot/test/test_process.py:
5452 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5453 fix or remove broken/breaking tests
5455 * buildbot/status/event.py (Logfile.__len__): remove evil method
5457 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5458 missing .build, for test convenience
5460 * buildbot/process/step_twisted.py: import fixes
5462 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5464 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5465 .statusbag reference
5467 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5468 connection at shutdown, and stop it from reconnecting
5470 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5471 chase down remote-execution bugs
5473 * buildbot/process/step.py: more fixes, remove
5474 BuildStep.setStatus()
5475 * buildbot/status/builder.py: move setStatus() functionality into
5477 * buildbot/status/event.py: minor fixes
5479 2004-08-03 Brian Warner <warner@lothar.com>
5481 * buildbot/process/base.py, buildbot/process/builder.py
5482 * buildbot/process/step.py, buildbot/status/builder.py
5483 * buildbot/status/event.py, buildbot/test/test_run.py:
5484 fix status delivery, get a basic test case working
5485 * buildbot/master.py: finish implementing basic status delivery,
5486 temporarily disable HTML/IRC/PB status sources
5488 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5490 * buildbot/status/progress.py (BuildProgress): remove dead code
5492 * buildbot/interfaces.py
5493 * buildbot/process/base.py, buildbot/process/builder.py
5494 * buildbot/process/step.py, buildbot/process/step_twisted.py
5495 * buildbot/status/builder.py: Complete overhaul of the all
5496 status-delivery code, unifying all types of status clients (HTML,
5497 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5498 look like. This commit is a checkpointing of the work-in-progress:
5499 the input side is mostly done (Builders/Builds sending status
5500 to the BuilderStatus/BuildStatus objects), but the output side has
5501 not yet been started (HTML resources querying BuilderStatus
5502 objects). Things are probably very broken right now and may remain
5503 so for several weeks, I apologize for the disruption.
5505 * buildbot/status/event.py: add a setHTML method to use pre-rendered
5506 HTML as the log's contents. Currently used for exception tracebacks.
5507 * buildbot/status/progress.py: minor spelling changes
5509 2004-08-02 Brian Warner <warner@lothar.com>
5511 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
5512 in mozilla. Also added stylesheets copied from Twisted's docs.
5513 Remember that these files are meant to be run through Lore first.
5514 Thanks to Philipp Frauenfelder for the fixes.
5515 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
5516 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
5517 * docs/template.tpl: added a Lore template
5519 2004-07-29 Brian Warner <warner@lothar.com>
5521 * buildbot/interfaces.py: revamp status delivery. This is the
5522 preview: these are the Interfaces that will be provided by new
5523 Builder code, and to which the current HTML/IRC/PB status
5524 displayers will be adapted.
5526 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
5527 on the SlaveBuilder, not the Bot.
5528 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
5530 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
5531 set .usePTY on the FakeSlaveBuilder
5533 2004-07-25 Brian Warner <warner@lothar.com>
5535 * buildbot/changes/freshcvs.py: add some debug log messages
5536 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
5537 disabled 'setFilter' syntax
5538 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
5539 don't end with a slash
5541 * buildbot/process/base.py (Builder._pong_failed): add TODO note
5543 * setup.py: bump to 0.5.0+ while between releases
5545 2004-07-23 Brian Warner <warner@lothar.com>
5547 * setup.py (version): Releasing buildbot-0.5.0
5549 2004-07-23 Brian Warner <warner@lothar.com>
5551 * README: update for 0.5.0 release
5553 * NEWS: update for 0.5.0 release
5555 2004-07-22 Brian Warner <warner@lothar.com>
5557 * buildbot/slavecommand.py (ShellCommand): make usePTY a
5558 mktap-time configuration flag (--usepty=1, --usepty=0)
5559 * buildbot/bot.py: same
5561 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
5562 an 'info' directory being unwanted
5564 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
5565 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
5566 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
5567 and earlier), use a FreshCVSSourceOldcred instead.
5568 (test): simple test routine: connect to server, print changes
5570 * buildbot/changes/changes.py (Change.getTime): make it possible
5571 to print un-timestamped changes
5573 * buildbot/master.py (makeApp): delete ancient dead code
5574 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
5575 * buildbot/test/test_config.py (testFindConfigFile): test it
5577 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
5578 instead of win32 one
5581 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
5582 now takes a dictionary instead of a tuple. See docs/config.xhtml for
5585 * buildbot/process/base.py (Builder.__init__): change constructor
5586 to accept a dictionary of config data, rather than discrete
5587 name/slave/builddir/factory arguments
5589 * docs/examples/twisted_master.cfg: update to new syntax
5590 * docs/examples/glib_master.cfg: same
5591 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
5592 rough tests of the new syntax
5595 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
5596 to be an int, which means "run a web.distrib sub-server on a TCP
5597 port". This lets you publish the buildbot status page to a remote
5598 twisted.web server (using distrib.ResourceSubscription). Also
5599 rename the local attributes used to hold these web things so
5600 they're more in touch with reality.
5601 * buildbot/test/test_web.py: test webPortnum and webPathname
5602 * docs/config.xhtml: document this new use of webPathname
5604 * docs/config.xhtml: new document, slightly ahead of reality
5606 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
5607 'prefix' handling: treat it as a simple string to check with
5608 .startswith, instead of treating it as a directory. This allows
5609 sub-directories to be used. If you use prefix=, you should give it
5610 a string that starts just below the CVSROOT and ends with a slash.
5611 This prefix will be stripped from all filenames, and filenames
5612 which do not start with it will be ignored.
5614 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
5616 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
5617 and --exclude (inverse of --include). SVN post-commit hooks
5618 now have total control over which changes get sent to buildbot and which
5621 2004-07-10 Brian Warner <warner@lothar.com>
5623 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
5624 test case to match new API
5626 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
5627 which crashed HTML display when self.entries=[] (needed to
5628 distinguish between [], which means "no entries yet", and None,
5629 which means "the entries have been swapped out to disk, go fetch
5632 2004-07-04 Brian Warner <warner@lothar.com>
5634 * buildbot/process/step_twisted.py (countFailedTests): Count
5635 skips, expectedFailures, and unexpectedSuccesses. Start scanning
5636 10kb from the end because any import errors are wedged there and
5637 they would make us think the test log was unparseable.
5638 (RunUnitTests.finishStatus): add skip/todo counts to the event box
5640 2004-06-26 Brian Warner <warner@lothar.com>
5642 * buildbot/process/step_twisted.py (RemovePYCs): turn the
5643 delete-*.pyc command into an actual BuildStep, so we can label it
5645 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5646 (FullTwistedBuildFactory): same
5648 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
5650 * contrib/fakechange.py: Add an errback when sending the fake
5651 change, so we know it didn't work.
5653 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
5655 * buildbot/process/step_twisted.py: Delete *.pyc files before
5656 calling trial, so it doesn't catch any old .pyc files whose .py
5657 files have been moved or deleted.
5659 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
5660 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
5661 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
5662 instead of ["twisted.test"], so that the end result is "trial -R
5665 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
5666 regular expression to match filenames that should be ignored when
5667 changed. Also add a --revision parameter that specifies the
5668 revision to examine, which is useful for debugging.
5670 2004-06-25 Brian Warner <warner@lothar.com>
5672 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
5673 summary of warnings (like DeprecationWarnings), next to the
5676 2004-05-13 Brian Warner <warner@lothar.com>
5678 * docs/examples/twisted_master.cfg: enable the win32 builder, as
5679 we now have a w32 build slave courtesy of Mike Taylor.
5681 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5682 so broken. Fixed a race condition that tripped up interlocked
5683 builds and caused the status to be stuck at "Interlocked" forever.
5684 The twisted buildbot's one interlocked build just so happened to
5685 never hit this case until recently (the feeding builds both pass
5686 before the interlocked build is attempted.. usually it has to wait
5688 (Builder._pong_failed): fix method signature
5690 * setup.py: bump to 0.4.3+ while between releases
5692 2004-04-30 Brian Warner <warner@lothar.com>
5694 * setup.py (version): Releasing buildbot-0.4.3
5696 2004-04-30 Brian Warner <warner@lothar.com>
5698 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5700 * README: update for 0.4.3 release
5702 * NEWS: update for 0.4.3 release
5704 * buildbot/master.py (BuildMaster.__getstate__): make sure
5705 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5707 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5708 .trial as a class attribute, for upgrade from 0.4.2
5710 * buildbot/changes/changes.py (Change.links): add .links for
5713 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5714 .textWatchers and .htmlWatchers at save time, since they are both
5715 volatile, should allow smooth 0.4.2 upgrade
5717 * buildbot/process/step.py (CVS.finishStatus): catch failed
5718 CVS/SVN commands so we can make the status box red
5720 2004-04-29 Brian Warner <warner@lothar.com>
5722 * buildbot/changes/freshcvs.py
5723 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5724 code to do setFilter(), which tells the freshcvs daemon to not
5725 send us stuff that we're not interested in. I will uncomment it
5726 when a new version of CVSToys is available in which setFilter()
5727 actually works, and I get a chance to test it better.
5729 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5731 * buildbot/master.py (Dispatcher): use a registration scheme
5732 instead of hardwired service names
5733 (BuildMaster): keep track of the Dispatcher to support
5736 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5737 PBChangeSource class instead of having it be an undocumented
5738 internal feature of the ChangeMaster. Split out the code into a
5740 * buildbot/changes/pb.py (PBChangeSource): same
5741 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5743 * docs/{factories|sources|steps}.xhtml: document some pieces
5745 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5746 using FCMaildirSource
5747 (f23osx): update OS-X builder to use python2.3, since the slave
5748 was updated to Panther (10.3.3)
5750 2004-03-21 Brian Warner <warner@lothar.com>
5752 * buildbot/process/process_twisted.py: factor out doCheckout, change
5753 to use SVN instead of CVS
5755 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5756 an SVN subclass easier
5757 (BasicSVN): subclass which uses Subversion instead of CVS
5759 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5761 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5763 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5765 2004-02-25 Brian Warner <warner@lothar.com>
5767 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5768 is now either a list (which is passed to spawnProcess directly) or
5769 a string (which gets passed to /bin/sh -c). This removes the useSH
5770 flag and the ArgslistCommand class. Also send status header at the
5771 start and end of each command, instead of having the master-side
5773 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5774 -r'. Update to use list-based arguments.
5775 (SVNFetch): use list-based arguments, use ['dir'] argument to
5777 * buildbot/test/test_steps.py (Commands): match changes
5779 * buildbot/process/step.py (InternalShellCommand.words): handle
5781 (SVN): inherit from CVS, cleanup
5783 * buildbot/status/event.py (Logfile.content): render in HTML, with
5784 stderr in red and headers (like the name of the command we're
5785 about to run) in blue. Add link to a second URL (url + "?text=1")
5786 to get just stdout/stderr in text/plain without markup. There is
5787 still a problem with .entries=None causing a crash, it seems to occur
5788 when the logfile is read before it is finished.
5790 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5791 timeout to the keepalives, and use it to explicitly do a
5792 loseConnection instead of waiting for TCP to notice the loss. This
5793 ought to clear up the silent-lossage problem.
5794 (unsafeTracebacks): pass exception tracebacks back to the master,
5795 makes it much easier to debug problems
5797 2004-02-23 Brian Warner <warner@lothar.com>
5799 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5800 the whole command to /bin/sh instead of execve [Johan Dahlin]
5801 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5802 '-r HEAD' [Johan Dahlin]
5803 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5805 * buildbot/changes/changes.py (Change): add links= argument, add
5806 asHTML method [Johan Dahlin]. Modified to make a bit more
5807 XHTMLish. Still not sure how to best use links= .
5809 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5810 Change.asHTML to display the change, not asText
5812 * buildbot/status/html.py (StatusResourceBuilder): web button to
5815 * buildbot/test/test_run.py: test to actually start a buildmaster
5818 * MANIFEST.in: bring back accidentally-dropped test helper files
5820 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5821 that require cvstoys if it is not installed
5823 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5824 values of "bin/trial" [Dave Peticolas]
5825 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5826 tests passed" when we didn't happen to run any tests
5828 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5829 flunkOnFailure [Johan Dahlin]
5831 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5832 multiple instances of the same Step class by suffixing "_2", etc,
5833 to the name until it is unique. This name needs to be unique
5834 because it is used as a key in the dictionary that tracks build
5836 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5839 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5841 2004-01-14 Brian Warner <warner@lothar.com>
5843 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5844 kicked from a channel, log it
5846 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5847 something over whatever IRC channels the buildmaster is currently
5848 connected to. Added to try and track down a problem in which the
5849 master thinks it is still connected but the IRCd doesn't see it. I
5850 used a styles.Versioned this time, so hopefully users won't have
5851 to rebuild their .tap files this time.
5852 * contrib/debug.glade: add a "Poke IRC" button
5853 * contrib/debugclient.py: same
5855 * setup.py: bump to 0.4.2+ while between releases
5857 2004-01-08 Brian Warner <warner@lothar.com>
5859 * setup.py (version): Releasing buildbot-0.4.2
5861 2004-01-08 Brian Warner <warner@lothar.com>
5863 * NEWS: update for 0.4.2 release
5865 * README: document how to run the tests, now that they all pass
5867 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5869 * buildbot/process/step.py (CVS): add a global_options= argument,
5870 which lets you set CVS global options for the command like "-r"
5871 for read-only checkout, or "-R" to avoid writing in the
5873 * buildbot/slavecommand.py (CVSCommand): same
5875 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5876 testing easier (it is turned off when testing, to avoid the
5879 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5880 to make it easier to test: break generateStepID() out to a
5881 separate function, only update statusbag if it exists.
5882 (ShellCommands): create useful text for dict-based commands too.
5884 * test/*, buildbot/test/*: move unit tests under the buildbot/
5886 * setup.py (packages): install buildbot.test too
5888 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5889 * buildbot/test/test_steps.py: fix it, tests pass now
5891 2004-01-06 Brian Warner <warner@lothar.com>
5893 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5894 freshcvs mail uses a slightly different syntax for new
5895 directories. Update parser to handle either.
5896 * test/test_mailparse.py (Test1.testMsg9): test for same
5898 2003-12-21 Brian Warner <warner@lothar.com>
5900 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5901 'warnOnWarnings' so that lintian errors mark the build orange
5903 2003-12-17 Brian Warner <warner@lothar.com>
5905 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5906 messages emitted by Bonsai, contributed by Stephen Davis.
5908 * test/*: moved all tests to use trial instead of unittest. Some
5909 still fail (test_steps, test_slavecommand, and test_process).
5911 * setup.py (version): bump to 0.4.1+ while between releases
5913 2003-12-09 Brian Warner <warner@lothar.com>
5915 * setup.py (version): Releasing buildbot-0.4.1
5917 2003-12-09 Brian Warner <warner@lothar.com>
5919 * NEWS: update for 0.4.1 release
5921 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5922 freebsd builder code a little bit
5924 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5925 don't try to compare attributes of different classes
5926 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5927 (MaildirSource.messageReceived): fix Change delivery
5929 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5930 into the config file's namespace before loading it, like the
5931 documentation claims it does
5932 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5933 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5934 daemon comes back online
5936 2003-12-08 Brian Warner <warner@lothar.com>
5938 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5939 so the example will work with online=0 as well
5941 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5942 fix the __implements__ line
5944 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5945 class a twisted.application.service.Service, use startService to
5948 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5949 directory fd instead of simple open(). I'm sure this used to work,
5950 but the current version of python refuses to open directories with
5953 2003-12-05 Brian Warner <warner@lothar.com>
5955 * setup.py (version): bump to 0.4.0+ while between releases
5957 2003-12-05 Brian Warner <warner@lothar.com>
5959 * setup.py (version): Releasing buildbot-0.4.0
5961 2003-12-05 Brian Warner <warner@lothar.com>
5963 * docs/examples/glib_master.cfg: replace old sample scripts with
5964 new-style config files
5965 * MANIFEST.in: include .cfg files in distribution tarball
5967 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5968 implement a dummy method to avoid the exception that occurs when
5969 freshcvs sends this to us.
5971 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5972 removed the method, as it broke reconnection. Apparently
5973 stopFactory is called each time the connection attempt fails. Must
5975 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5976 attribute before serialization, since without stopFactory the
5977 reconnect timer may still be active and they aren't serializable.
5979 * test/test_mailparse.py (ParseTest): test with 'self' argument
5981 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5982 argument, as these "functions" are invoked like methods from class
5983 attributes and therefore always get an instance as the first
5986 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5987 message: thanks to Stephen Davis for the catch
5989 2003-12-04 Brian Warner <warner@lothar.com>
5991 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5992 twisted's standard ReconnectingClientFactory. Handles both oldcred
5993 and newcred connections. Also has a bug-workaround for
5994 ReconnectingClientFactory serializing its connector when it
5997 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5998 pbutil. Replace makeApp stuff with proper newcred/mktap
5999 makeService(). Don't serialize Ephemerals on shutdown.
6001 * buildbot/changes/changes.py (ChangeMaster): make it a
6002 MultiService and add the sources as children, to get startService
6003 and stopService for free. This also gets rid of the .running flag.
6005 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
6006 new pbutil, turn into a TCPClient at the same time (to get
6007 startService for free). Two variants exist: FreshCVSSourceOldcred
6008 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
6009 yet, but when it does, we'll be ready).
6010 (FreshCVSSource.notify): handle paths which are empty after the
6011 prefix is stripped. This only happens when the top-level (prefix)
6012 directory is added, at the very beginning of a Repository's life.
6014 * buildbot/clients/base.py: use new pbutil, clean up startup code.
6015 Now the only reconnecting code is in the factory where it belongs.
6016 (Builder.unsubscribe): unregister the disconnect callback when we
6017 delete the builder on command from the master (i.e. when the
6018 buildmaster is reconfigured and that builder goes away). This
6019 fixes a multiple-delete exception when the status client is shut
6021 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
6024 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
6025 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
6027 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
6029 * contrib/run_maxq.py: Accept a testdir as an argument rather than
6030 a list of globs (ugh). The testdir will be searched for files
6031 named *.tests and run the tests in the order specified in each of
6032 those files. This allows for "dependancies" between tests to be
6035 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
6036 argument to pass to run_maxq.py, instead of a glob.
6038 2003-10-17 Brian Warner <warner@lothar.com>
6040 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
6041 files that live in the sandbox
6043 2003-10-15 Brian Warner <warner@lothar.com>
6045 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
6046 spelling error in "docs" count-warnings output
6047 (HLint.start): stupid thinko meant .xhtml files were ignored
6049 * docs/examples/twisted_master.cfg (reactors): disable cReactor
6050 tests now that cReactor is banished to the sandbox
6052 2003-10-10 Brian Warner <warner@lothar.com>
6054 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
6055 scheme: now .xhtml are sources and .html are generated
6057 2003-10-08 Brian Warner <warner@lothar.com>
6059 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
6060 we were ignoring the 'randomly' parameter.
6062 2003-10-01 Brian Warner <warner@lothar.com>
6064 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
6065 posix, to kill sub-children of aborted slavecommands.
6067 * buildbot/status/builder.py: rename Builder to BuilderStatus.
6068 Clean up initialization: lastBuildStatus remains None until the
6069 first build has been completed.
6071 * buildbot/status/html.py (WaterfallStatusResource.body): handle
6072 None as a lastBuildStatus
6073 * buildbot/clients/gtkPanes.py: same
6075 * buildbot/status/client.py (StatusClientService): keep
6076 BuilderStatus objects in self.statusbags . These objects now live
6077 here in the StatusClientService and are referenced by the Builder
6078 object, rather than the other way around.
6079 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
6080 * buildbot/process/base.py (Builder): same
6081 * test/test_config.py (ConfigTest.testBuilders): same
6083 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
6084 an existing builder, leave the statusbag alone. This will preserve the
6087 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
6088 hook. This will probably go away in favor of a class in upcoming
6091 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
6092 serviceName from newcred FreshCVSNotifiee setup
6094 2003-09-29 Brian Warner <warner@lothar.com>
6096 * buildbot/process/process_twisted.py: switch to new reactor
6098 * docs/examples/twisted_master.cfg: same
6100 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
6102 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
6103 botmaster reference instead of the oldapp service lookup
6105 * buildbot/master.py (BuildMaster.__init__): give the
6106 StatusClientService a reference to the botmaster to make it easier to
6109 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6111 * buildbot/status/html.py (Box.td): escape hreffy things so you
6112 can have spaces in things like builder names
6113 (StatusResourceBuilder.body)
6114 (WaterfallStatusResource.body)
6115 (WaterfallStatusResource.body0): same
6117 2003-09-25 Brian Warner <warner@lothar.com>
6119 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
6120 rearrange the builder list when adding or removing builders: keep
6121 them in the order the user requested.
6122 * test/test_config.py (ConfigTest.testBuilders): verify it
6124 * contrib/debug.glade: give the debug window a name
6126 * buildbot/process/base.py (Builder.buildTimerFired): builders can
6127 now wait on multiple interlocks. Fix code relating to that.
6128 (Builder.checkInterlocks): same
6129 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
6131 * buildbot/master.py (BuildMaster.loadConfig): move from
6132 deprecated pb.BrokerFactory to new pb.PBServerFactory
6133 * test/test_config.py (ConfigTest.testWebPathname): same
6135 * docs/examples/twisted_master.cfg: fix interlock declaration
6137 * buildbot/master.py (BotMaster.addInterlock): move code to attach
6138 Interlocks to their Builders into interlock.py .
6139 (BuildMaster.loadConfig_Interlocks): fix interlock handling
6141 * test/test_config.py (ConfigTest.testInterlocks): validate
6144 * buildbot/process/base.py (Builder.__init__): better comments
6145 * buildbot/process/interlock.py (Interlock.__repr__): same
6146 (Interlock.deactivate): add .active flag, move the code that
6147 attaches/detaches builders into the Interlock
6149 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6151 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
6152 tests using the new run_maxq.py script, and reporting failures by
6155 * contrib/run_maxq.py: Hacky little script for running a set of maxq
6156 tests, reporting their success or failure in a buildbot-friendly
6159 2003-09-24 Brian Warner <warner@lothar.com>
6161 * docs/examples/twisted_master.cfg: example of a new-style config
6162 file. This lives in the buildmaster base directory as
6165 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
6166 button to make the master re-read its config file
6168 * buildbot/master.py (BuildMaster.loadConfig): new code to load
6169 buildmaster configuration from a file. This file can be re-read
6170 later, and the buildmaster will update itself to match the new
6171 desired configuration. Also use new Twisted Application class.
6172 * test/Makefile, test/test_config.py: unit tests for same
6174 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
6175 FreshCVSSources comparable, to support reload.
6176 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6178 * buildbot/process/base.py (Builder): make them comparable, make
6179 Interlocks easier to attach, to support reload. Handle
6180 re-attachment of remote slaves.
6181 * buildbot/process/interlock.py (Interlock): same
6183 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
6184 Twisted's new Application class. Requires Twisted >= 1.0.8 .
6185 buildmaster taps are now constructed with mktap.
6186 * buildbot/status/client.py (StatusClientService): same
6188 * buildbot/status/words.py: move to new Services, add support to
6189 connect to multiple networks, add reload support, allow nickname
6190 to be configured on a per-network basis
6192 2003-09-20 Brian Warner <warner@lothar.com>
6194 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
6195 the freebsd builder, now that the machine has been upgraded and no
6196 longer has python2.2
6198 * setup.py (version): bump to 0.3.5+ while between releases
6200 2003-09-19 Brian Warner <warner@lothar.com>
6202 * setup.py (version): Releasing buildbot-0.3.5
6204 2003-09-19 Brian Warner <warner@lothar.com>
6206 * NEWS: add post-0.3.4 notes
6208 * README (REQUIREMENTS): note twisted-1.0.7 requirement
6210 * MANIFEST.in: add contrib/*
6212 * docs/examples/twisted_master.py (twisted_app): all build slaves must
6213 use a remote root now: cvs.twistedmatrix.com
6215 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
6217 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
6218 compatibility with old servers
6219 (FreshCVSSource.start): and provide a way to use it
6220 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
6222 * docs/examples/twisted_master.py (twisted_app): update to new
6224 (twisted_app): listen on new ~buildbot socket
6225 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
6227 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
6228 to reduce cvs bandwidth (update instead of full checkout)
6230 2003-09-11 Brian Warner <warner@lothar.com>
6232 * contrib/fakechange.py: demo how to connect to the changemaster
6233 port. You can use this technique to submit changes to the
6234 buildmaster from source control systems that offer a hook to run a
6235 script when changes are committed.
6237 * contrib/debugclient.py: tool to connect to the debug port. You
6238 can use it to force builds, submit fake changes, and wiggle the
6241 * buildbot/master.py: the Big NewCred Reorganization. Use a single
6242 'Dispatcher' realm to handle all the different kinds of
6243 connections and Perspectives: buildslaves, the changemaster port,
6244 the debug port, and the status client port. NewCredPerspectives
6245 now have .attached/.detached methods called with the remote 'mind'
6246 reference, much like old perspectives did. All the pb.Services
6247 turned into ordinary app.ApplicationServices .
6248 (DebugService): went away, DebugPerspectives are now created
6249 directly by the Dispatcher.
6250 (makeApp): changed interface a little bit
6252 * buildbot/changes/changes.py: newcred
6253 * buildbot/status/client.py: newcred
6255 * buildbot/clients/base.py: newcred client side changes
6256 * buildbot/bot.py: ditto
6258 * docs/examples/glib_master.py: handle new makeApp() interface
6259 * docs/examples/twisted_master.py: ditto
6261 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
6262 base newcred Perspectives on. This should go away once Twisted
6263 itself provides something sensible.
6266 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
6268 * contrib/svn_buildbot.py: A program that you can call from your
6269 SVNREPO/hooks/post-commit file that will notify a BuildBot master
6270 when a change in an SVN repository has happened. See the top of
6271 the file for some minimal usage info.
6273 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6275 * buildbot/slavecommand.py (ArglistCommand): Add new
6276 ArglistCommand that takes an argument list rather than a string as
6277 a parameter. Using a st.split() for argv is very bad.
6279 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
6280 update to a particular revision rather than always checking out
6281 (still not very smart about it, there may be cases where the
6282 checkout becomes inconsistent).
6284 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6286 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
6287 SVN fetch support. It can checkout (not update!) a specified
6288 revision from a specified repository to a specified directory.
6290 * buildbot/status/progress.py (Expectations.update): Fix an
6291 obvious bug (apparently created by the change described in the
6292 previous ChangeLog message) by moving a check to *after* the
6293 variable it checks is defined.
6296 2003-09-08 Brian Warner <warner@lothar.com>
6298 * buildbot/status/progress.py (Expectations.update): hack to catch
6299 an exception TTimo sees: sometimes the update() method seems to
6300 get called before the step has actually finished, so the .stopTime
6301 is not set, so no totalTime() is available and we average None
6302 with the previous value. Catch this and just don't update the
6303 metrics, and emit a log message.
6305 2003-08-24 Brian Warner <warner@lothar.com>
6307 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
6308 parameter to set copydir='original' in CVS commands.
6310 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
6312 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
6313 which tells the command to maintain a separate original-source CVS
6314 workspace. For each build, this workspace will be updated, then
6315 the tree copied into a new workdir. This reduces CVS bandwidth
6316 (from a full checkout to a mere update) while doubling the local
6317 disk usage (to keep two copies of the tree).
6319 2003-08-21 Brian Warner <warner@lothar.com>
6321 * buildbot/status/event.py (Logfile.addEntry): if the master web
6322 server dies while we're serving a page, request.write raises
6323 pb.DeadReferenceError . Catch this and treat it like a
6324 notifyFinish event by dropping the request.
6326 2003-08-18 Brian Warner <warner@lothar.com>
6328 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
6329 (instead of blowing up) if a force-build command is given without
6332 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
6333 don't blow up if there aren't yet any Changes in the list
6335 2003-08-02 Brian Warner <warner@lothar.com>
6337 * buildbot/bot.py (updateApplication): don't set the .tap name,
6338 since we shouldn't assume we own the whole .tap file
6340 * buildbot/bb_tap.py (updateApplication): clean up code, detect
6341 'mktap buildbot' (without a subcommand) better
6343 2003-07-29 Brian Warner <warner@lothar.com>
6345 * buildbot/status/words.py
6346 (IrcStatusFactory.clientConnectionLost): when we lose the
6347 connection to the IRC server, schedule a reconnection attempt.
6349 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
6350 use shutil.rmtree instead of forking off an "rm -rf" command.
6351 rmtree may take a while and will block until it finishes, so we
6352 use "rm -rf" if available.
6354 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
6355 freebsd buildslave badly
6357 * setup.py (version): bump to 0.3.4+ while between releases
6359 2003-07-28 Brian Warner <warner@lothar.com>
6361 * setup.py (version): Releasing buildbot-0.3.4
6363 2003-07-28 Brian Warner <warner@lothar.com>
6365 * NEWS: update in preparation for release
6367 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
6368 process.signalProcess instead of os.kill, to improve w32
6371 * docs/examples/twisted_master.py (twisted_app): turn off
6372 win32eventreactor: the tests hang the buildslave badly
6374 * buildbot/process/base.py (Build.buildFinished): update ETA even on
6375 failed builds, since usually the failures are consistent
6377 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6378 add compileOpts/compileOpts2 to reactors build
6380 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
6381 (twisted_app): use both default and win32eventreactor on w32 build.
6382 Use both default and kqreactor on freebsd build.
6384 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6385 add compileOpts2, which is put after the build_ext argument. w32
6386 needs "-c mingw32" here.
6388 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
6389 touch .acqpath, it goes away in recent Twisted releases
6391 * docs/examples/twisted_master.py (twisted_app): use "python" for
6392 the w32 buildslave, not "python2.2"
6394 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
6395 the directory exists.. should hush an exception under w32
6397 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
6398 ProcessTerminated -provided values for signal and exitCode rather
6399 than parsing the unix status code directly. This should remove one
6400 more roadblock for a w32-hosted buildslave.
6402 * test/test_mailparse.py: add test cases for Syncmail parser
6404 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
6405 temporary compatibility import. Note! Start importing
6406 FCMaildirSource from changes.mail instead of changes.freshcvsmail
6408 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
6410 2003-07-27 Brian Warner <warner@lothar.com>
6412 * NEWS: started adding new features
6414 * buildbot/changes/mail.py: start work on Syncmail parser, move
6415 mail sources into their own file
6417 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
6418 as implementing IChangeSource
6419 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
6421 * buildbot/interfaces.py: define the IChangeSource interface
6423 2003-07-26 Brian Warner <warner@lothar.com>
6425 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
6427 2003-06-25 Brian Warner <warner@lothar.com>
6429 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
6432 2003-06-17 Brian Warner <warner@lothar.com>
6434 * buildbot/status/words.py: clean up method usage to avoid error
6435 in silly IRC command
6436 (IrcStatusBot.emit_status): round off seconds display
6438 * buildbot/process/base.py (Build): delete the timer when saving
6439 to the .tap file, and restore it (if it should still be running)
6440 upon restore. This should fix the "next build in -34 seconds"
6441 messages that result when the master is restarted while builds are
6442 sitting in the .waiting slot. If the time for the build has
6443 already passed, start it very soon (in 1 second).
6445 * buildbot/status/words.py: more silly commands
6447 * README (REQUIREMENTS): add URLs to all required software
6449 * buildbot/status/words.py ('last'): mention results of, and time
6452 2003-05-28 Brian Warner <warner@lothar.com>
6454 * buildbot/status/words.py: add 'last' command
6455 (IrcStatusBot.emit_status): add current-small text to 'status' output
6457 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6458 (twisted_app): remove spaces from OS-X builder name
6460 * buildbot/master.py (makeApp): add knob to turn on IRC bot
6461 * buildbot/status/words.py: IRC bot should actually be useful now
6463 2003-05-23 Brian Warner <warner@lothar.com>
6465 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6466 "slave information" from $(slavedir)/info/* . These files are
6467 maintained by the slave administrator, and describe the
6468 machine/environment that is hosting the slave. Information from
6469 them is put into the "Builder" HTML page. Still need to establish
6470 a set of well-known filenames and meanings for this data: at the
6471 moment, *all* info/* files are sent to the master, but only
6472 'admin' and 'host' are used on that end.
6473 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6474 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
6475 * buildbot/master.py (BotPerspective.got_info): ditto
6477 2003-05-22 Brian Warner <warner@lothar.com>
6479 * setup.py (version): bump version to 0.3.3+ while between releases
6481 2003-05-21 Brian Warner <warner@lothar.com>
6483 * setup.py: Releasing buildbot-0.3.3
6485 2003-05-21 Brian Warner <warner@lothar.com>
6487 * NEWS: 0.3.3 news items
6489 * README: describe --keepalive and life behind a NAT box
6491 * buildbot/bot.py (Bot.connected): implement application-level
6492 keepalives to deal with NAT timeouts, turn them on with
6493 --keepalive option or when SO_KEEPALIVE doesn't work.
6495 * buildbot/master.py (BotPerspective): accept keepalives silently
6497 * buildbot/process/base.py (Build.buildException): CopiedFailures
6498 don't carry as much information as local ones, so don't try to
6499 create a big HTMLized version of them.
6501 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6502 log file when step fails due to an exception, such as when the slave
6505 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6506 --testmodule argument instead of grepping for test-case-name tags
6507 ourselves. Remove FindUnitTests code.
6508 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
6510 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
6512 2003-05-16 Brian Warner <warner@lothar.com>
6514 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
6515 argument to allow things like CFLAGS=-O0 to be passed without relying
6516 upon /bin/sh processing on the slave.
6518 * buildbot/process/step.py (InternalShellCommand.start): send
6520 * buildbot/slavecommand.py (ShellCommand.start): create argv with
6521 'split' instead of letting /bin/sh do it. This should also remove
6522 the need for /bin/sh on the buildslave, making it more likely to
6525 * buildbot/status/html.py: html-escape text in blamelist.
6526 Add "force build" button to the Builder page.
6528 * buildbot/process/step_twisted.py (countFailedTests): look at
6529 last 1000 characters for status line, as import errors can put it
6530 before the -200 point.
6532 2003-05-15 Brian Warner <warner@lothar.com>
6534 * docs/examples/twisted_master.py: use clobber=0 for remote builds
6536 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6537 make 'clobber' a parameter, so it is possible to have builds which
6538 do full tests but do a cvs update instead of hammering the CVS
6539 server with a full checkout each build
6541 * buildbot/process/step.py (InternalShellCommand): bump default
6542 timeout to 20 minutes
6544 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
6545 the master to trigger a build. Run it via manhole.
6547 * buildbot/master.py (BotPerspective.perspective_forceBuild):
6548 allow slaves to trigger any build that they host, to make life
6549 easier for slave admins who are testing out new build processes
6551 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6552 don't flunk cReactor or qtreactor on failure, since they fail alot
6553 these days. Do warnOnFailure instead.
6555 * buildbot/process/base.py: change Builder.buildable from a list
6556 into a single slot. When we don't have a slave, new builds (once
6557 they make it past the timeout) are now merged into an existing
6558 buildable one instead of being queued. With this change, a slave
6559 which has been away for a while doesn't get pounded with all the
6560 builds it missed, but instead just does a single build.
6562 2003-05-07 Brian Warner <warner@lothar.com>
6564 * setup.py (version): bump version to 0.3.2+ while between releases
6566 2003-05-07 Brian Warner <warner@lothar.com>
6568 * setup.py: Releasing buildbot-0.3.2
6570 2003-05-07 Brian Warner <warner@lothar.com>
6572 * setup.py: fix major packaging error: include subdirectories!
6574 * NEWS: add changes since last release
6576 * README (REQUIREMENTS): update twisted/python dependencies
6578 * buildbot/status/builder.py (Builder.startBuild): change
6579 BuildProcess API: now they should call startBuild/finishBuild
6580 instead of pushing firstEvent / setLastBuildStatus. Moving towards
6581 keeping a list of builds in the statusbag, to support other kinds of
6583 (Builder.addClient): send current-activity-small to new clients
6584 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
6587 * buildbot/status/client.py: drop RemoteReferences at shutdown
6589 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
6591 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
6592 more debug messages for remote status client
6594 * buildbot/process/step.py (InternalBuildStep.stepComplete)
6595 (.stepFailed): only fire the Deferred once, even if both
6596 stepComplete and stepFailed are called. I think this can happen if
6597 an exception occurs at a weird time.
6599 * buildbot/status/words.py: work-in-progress: IRC status delivery
6601 2003-05-05 Brian Warner <warner@lothar.com>
6603 * docs/examples/twisted_master.py (twisted_app): hush internal
6604 python2.3 distutils deprecation warnings
6605 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6606 add compileOpts= argument which inserts extra args before the
6607 "setup.py build_ext" command. This can be used to give -Wignore
6608 warnings, to hush some internal python-2.3 deprecation messages.
6610 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
6611 the ['twisted.test'] default test case to make it easier to change
6614 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
6615 * buildbot/clients/gtkPanes.py: ditto
6617 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
6618 arg to collapse RunUnitTestsRandomly into RunUnitTests
6619 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6620 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
6622 * buildbot/status/html.py (StatusResource): shuffle Resources
6623 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
6624 would serve the waterfall display, but the internal links were
6625 only valid on the trailing-slash version. The correct behavior is
6626 for the non-slashed one to serve a Redirect to the slashed one.
6627 This only shows up when the buildbot page is hanging off another
6628 server, like a Twisted-Web distributed server.
6630 * buildbot/status/event.py (Event, RemoteEvent): make Events
6631 pb.Cacheable, with RemoteEvent as the cached version. This removes
6632 a lot of explicit send-an-update code.
6633 * buildbot/status/builder.py (Builder): remove send-update code
6634 * buildbot/status/client.py (ClientBuilder): remove send-update
6635 code, and log errors that occur during callRemote (mostly to catch
6636 InsecureJelly exceptions)
6638 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6639 run Lore with the same python used in the rest of the build
6641 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6643 * buildbot/process/step_twisted.py (HLint): accept 'python'
6644 argument. Catch rc!=0 and mark the step as failed. This marks the
6645 build orange ("has warnings").
6646 (RunUnitTestsJelly): move out to step_twisted2.py
6648 * buildbot/util.py (ignoreStaleRefs): add utility function
6650 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
6651 don't fake ETA object, it's too hard to get right
6653 2003-05-02 Brian Warner <warner@lothar.com>
6655 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
6657 2003-05-01 Brian Warner <warner@lothar.com>
6659 * buildbot/status/html.py (StatusResource.body): oops, I was
6660 missing a <tr>, causing the waterfall page to be misrendered in
6661 everything except Galeon.
6663 2003-04-29 Brian Warner <warner@lothar.com>
6665 * docs/examples/twisted_master.py: make debuild use python-2.2
6666 explicitly, now that Twisted stopped supporting 2.1
6668 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
6669 handle tuple results too. I keep forgetting this, which suggests
6670 it needs to be rethought.
6672 * setup.py (setup): bump version to 0.3.1+ while between releases
6674 2003-04-29 Brian Warner <warner@lothar.com>
6676 * setup.py: Releasing buildbot-0.3.1
6678 2003-04-29 Brian Warner <warner@lothar.com>
6680 * README (SUPPORT): add plea to send questions to the mailing list
6682 * NEWS, MANIFEST.in: add description of recent changes
6684 * docs/examples/twisted_master.py: add the code used to create the
6685 Twisted buildmaster, with passwords and such removed out to a
6688 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6689 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6690 buildmasters to not require CVSToys be installed.
6691 * README, docs/examples/glib_master: update to match the change
6693 * buildbot/clients/base.py, buildbot/bot.py,
6694 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6695 ReconnectingPB from CVSToys distribution to remove CVSToys
6696 dependency for build slaves and status clients. Buildmasters which
6697 use FreshCVSSources still require cvstoys be installed, of course.
6699 2003-04-25 Brian Warner <warner@lothar.com>
6701 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6702 runTestsRandomly arg to turn on trial -z
6704 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6705 experimental code to use trial's machine-parseable output to get
6706 more detailed test results. Still has some major issues.
6707 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6710 * buildbot/status/builder.py (Builder.setCurrentBuild):
6711 anticipating moving build history into statusbag, not used yet
6713 * buildbot/status/tests.py: code to centralize test results,
6714 doesn't work quite yet
6716 * buildbot/status/event.py (Event): use hasattr("setName") instead
6717 of isinstance for now.. need better long-term solution
6719 * buildbot/status/html.py: Remove old imports
6721 2003-04-24 Brian Warner <warner@lothar.com>
6723 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6724 ignore changes under doc/fun/ and sandbox/
6726 * buildbot/process/step_twisted.py: update pushEvent and friends.
6728 * buildbot/status/html.py (Box.td): replace event.buildername with
6729 event.parent.getSwappableName(). Needs more thought.
6731 * buildbot/status/builder.py (Builder): Replace pushEvent and
6732 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6733 Tell events they are being pruned with event.delete().
6735 * buildbot/process/base.py (Build): Remove Builder status-handling
6736 methods. s/pushEvent/setCurrentActivity/.
6738 * buildbot/process/step.py (BuildStep): clean up status delivery.
6739 Gouse builder.statusbag methods instead of intermediate builder
6740 methods. s/updateLastEvent/updateCurrentActivity/.
6741 s/finalizeLastEvent/finishCurrentActivity/. Use
6742 addFileToCurrentActivity for summaryFunction.
6744 * buildbot/status/event.py (Logfile): put data in a Swappable when
6746 (Event): add more setter methods. Remove .buildername, use .parent
6747 and getSwappableName instead (needs more thought).
6749 * buildbot/util.py (Swappable):
6750 * test/test_swap.py: don't bother setting filename at __init__
6751 time, do it later. Change setFilename args to take parent first,
6752 since it provides the most significant part of the filename.
6754 2003-04-23 Brian Warner <warner@lothar.com>
6756 * buildbot/status/event.py (Logfile.addEntry): append to previous
6759 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6760 anticipating Swappable
6761 (InternalShellCommand.remoteUpdate): split out various log-adding
6762 methods so subclasses can snarf stdout separately
6764 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6765 in anticipation of Swappable build logs
6766 (Builder.testsFinished): anticipating TestResults, still disabled
6768 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6771 * buildbot/status/event.py (Logfile): add (disabled) support for
6772 Swappable, not ready for use yet
6774 * buildbot/util.py (Swappable): object which is swapped out to
6775 disk after some period of no use.
6776 * test/test_swap.py: test buildbot.utils.Swappable
6778 2003-04-14 Brian Warner <warner@lothar.com>
6780 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6781 periodic-build timer. Set the .periodicBuildTime on a builder
6782 instance to some number of seconds to activate it.
6784 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6786 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6787 a way that survives result tuples
6789 2003-04-12 Brian Warner <warner@lothar.com>
6791 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6792 return a dict instead of a tuple: allow summarizers to provide
6793 multiple summaries if they want
6794 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6795 (debuildSummarizer): summarize lintian warnings/errors
6797 2003-04-10 Brian Warner <warner@lothar.com>
6799 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6801 2003-04-09 Brian Warner <warner@lothar.com>
6803 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6804 empty summaries: happens when the tests fail so hard they don't emit
6805 a parseable summary line.
6807 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6808 Allow summaryFunction to return None to indicate no summary should
6811 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6812 writing to stale HTTP requests: notice when they disconnect and
6813 remove the request from the list. Also add CacheToFile from
6814 moshez, will be used later.
6816 2003-04-08 Brian Warner <warner@lothar.com>
6818 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6819 should be an int, not a list of strings
6821 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6822 if we weren't actually connected
6824 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6825 to show the tail end of the trial text output
6827 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6828 hook to summarize the results of a ShellCommand
6830 2003-04-07 Brian Warner <warner@lothar.com>
6832 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6833 twisted test suite code into a single class.
6834 * buildbot/process/process_twisted.py: same
6836 2003-04-04 Brian Warner <warner@lothar.com>
6838 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6840 * README (SLAVE): document use of mktap to create slave .tap file
6841 (REQUIREMENTS): describe dependencies
6843 * buildbot/bb_tap.py, buildbot/plugins.tml:
6844 * buildbot/bot.py (updateApplication): Add mktap support for creating
6845 buildslave .tap files
6847 2003-03-28 Brian Warner <warner@lothar.com>
6849 * buildbot/process/step.py (InternalShellCommand.finished): handle
6850 new tuple result values (fix embarrasing bug that appeared during
6853 2003-03-27 Brian Warner <warner@lothar.com>
6855 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6858 2003-03-25 Brian Warner <warner@lothar.com>
6860 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6861 to overall build status
6862 * buildbot/clients/base.py (Builder): improve event printing
6863 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6864 instead of generic ShellCommand
6865 (Build): Add .stopBuild, use it when slave is detached
6867 * buildbot/process/step.py (Configure,Test): give the steps their
6868 own names and status strings
6870 * buildbot/status/html.py (StatusResource): add "show" argument,
6871 lets you limit the set of Builders being displayed.
6873 2003-03-20 Brian Warner <warner@lothar.com>
6875 * buildbot/process/basic.py: removed
6877 2003-03-19 Brian Warner <warner@lothar.com>
6879 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6880 turn off process-docs by default
6882 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6883 when displaying build information without anything in allBuilds[]
6885 * buildbot/bot.py (makeApp): really take password from sys.argv
6887 2003-03-18 Brian Warner <warner@lothar.com>
6889 * buildbot/bot.py (buildApp): take password from sys.argv
6891 * README: replace with more useful text
6893 * setup.py: add a real one
6894 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6896 * docs/PyCon-2003/: added sources for PyCon paper.
6898 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6899 now Build objects control the process and Builder only handles
6900 slave stuff and distribution of changes/status. A new BuildFactory
6901 class creates Build objects on demand.
6903 Created ConfigurableBuild which takes a list of steps to run. This
6904 makes it a lot easier to set up a new kind of build and moves us
6905 closer to being able to configure a build from a web page.
6907 * buildbot/process/step_twisted.py, process_twisted.py: move to
6908 new model. A lot of code went away.
6910 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6911 send lots of empty progress messages to the client.
6913 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6915 2003-02-20 Brian Warner <warner@lothar.com>
6917 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6919 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6920 Twisted bug that prevented non-pty processes from working just got
6921 fixed, and the bug that leaks ptys is still being investigated.
6923 * buildbot/process/step.py (CVS): send timeout arg to slave
6925 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6926 builders coming and going
6927 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6928 from CVSToys, handle lost-buildmaster
6930 * buildbot/status/client.py (StatusClientService.removeBuilder):
6931 Clean up status client protocol: send builders (with references)
6932 as they are created, rather than sending a list and requiring the
6933 client to figure out which ones are new.
6934 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6935 attempts to force a build on an unknown builder
6937 2003-02-19 Brian Warner <warner@lothar.com>
6939 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6940 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6941 Twisted stops leaking them.
6942 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6943 builder goes to an idle state.
6945 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6946 I figure out why CVS commands hang without them, and/or I fix the
6947 hung-command timeout
6949 2003-02-16 Brian Warner <warner@lothar.com>
6951 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6952 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6953 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6954 GenerateDocs now that they are prefixed with WARNING:.
6956 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6957 use manual href target instead of request.childLink
6959 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6960 display every second, but update the ETA every 5 seconds (or
6961 whenever) as remote_progress messages arrive.
6964 2003-02-12 Brian Warner <warner@lothar.com>
6966 * *: import current sources from home CVS repository
6970 # add-log-time-format: add-log-iso8601-time-string