1 2006-09-21 Brian Warner <warner@lothar.com>
3 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
5 * docs/examples/glib_master.cfg: same
6 * docs/examples/hello.cfg: same
7 * docs/examples/twisted_master.cfg: same, update to current usage
9 2006-09-19 Brian Warner <warner@lothar.com>
11 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
12 (PyFlakes.createSummary): make it compatible with python-2.2
14 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
15 for at least the output-parsing parts of PyFlakes
17 2006-09-18 Brian Warner <warner@lothar.com>
19 * buildbot/steps/python.py: oops, fix import of StringIO
21 2006-09-17 Brian Warner <warner@lothar.com>
23 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
24 turns out that SVN-1.4.0 doesn't fail to update once you've
25 replaced a file with a directory, unlike older versions of SVN and
26 pretty much every other VC tool we support. Since what we really
27 care about is that the update succeeds anyway, stop checking that
28 the tree got clobbered and just assert that the build succeeded.
29 (VCBase.printLogs): add a utility function for debugging
31 * buildbot/process/step.py: oops, added extra imports by mistake
33 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
34 rstrip() on the first line coming out of the 'p4 describe'
35 process, to remove the stray ^M that Wade Brainerd reports seeing
36 in the 'when' field. Fixes SF#1555985.
38 * buildbot/master.py (BuildMaster.loadConfig): improve the error
39 message logged when c['schedulers'] is not right
40 * buildbot/scheduler.py (Scheduler.__init__): improve error
41 message when a Scheduler() is created with the wrong arguments
42 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
43 verify that these error messages are emitted
45 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
46 The idea is that all the base classes (like BuildStep and
47 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
48 will be a leftover backwards-compatibility file that only contains
49 aliases for the steps that were moved out to buildbot.steps.*
50 * lots: change imports to match
51 * buildbot/process/step.py: add a DeprecationWarning if it ever
54 2006-09-12 Brian Warner <warner@lothar.com>
56 * buildbot/scheduler.py (Scheduler.__init__): make sure that
57 builderNames= is actually a sequence, since if you happen to give
58 it a single builder-specification dictionary instead, it won't get
59 caught by the existing assert. Thanks to Brett Neely for the
62 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
64 * docs/buildbot.texinfo (Python BuildSteps): document them
65 (sendchange): include a link to PBChangeSource, since you need one
67 * buildbot/steps/shell.py: clean up test-case-name line, remove some
69 * buildbot/steps/dummy.py: same
71 2006-09-08 Brian Warner <warner@lothar.com>
73 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
74 BuildStep which lets you transfer files from the master to the
75 slave or vice versa. Thanks to Albert Hofkamp for the original
76 patch. Fixes SF#1504631.
77 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
79 (SlaveFileDownloadCommand): same
80 * docs/buildbot.texinfo (Transferring Files): document it
81 * buildbot/test/test_transfer.py: test it
82 * buildbot/test/runutils.py (StepTester): new utility class for
83 testing BuildSteps and RemoteCommands without Builds or Bots or PB
84 * buildbot/test/test_steps.py (CheckStepTester): validate that the
87 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
88 walk through StatusLogs one line at a time, mostly for the benefit
89 of ShellCommand.createSummary methods. You can either walk through
90 STDOUT or STDERR, but the default is STDOUT.
92 * buildbot/status/builder.py (LogFile.readlines): implement it.
93 Note that this is not yet memory-efficient, it just pulls the
94 whole file into RAM and then splits it up with a StringIO.
95 Eventually this should be a generator that only pulls chunks from
97 * buildbot/test/test_status.py (Log.testReadlines): test it
99 * docs/buildbot.texinfo: update to match changes
100 * buildbot/process/factory.py: stop using old definitions
101 * buildbot/process/process_twisted.py: same
102 * buildbot/test/test_*.py: same
104 * buildbot/process/step_twisted.py: move definition to..
105 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
106 relative-import mechanisms prevent this from being named 'twisted'
107 or 'python/twisted' as I would have preferred.
109 * buildbot/process/maxq.py: move definition to..
110 * buildbot/steps/maxq.py: .. here, leave a compatibility import
112 * buildbot/process/step.py: split the user-visible BuildSteps into
113 separate files, all under buildbot/steps/
114 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
115 * buildbot/steps/shell.py: this holds ShellCommand and friends
116 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
118 2006-09-05 Brian Warner <warner@lothar.com>
120 * lots: run pyflakes, removed a lot of unused imports, changed the
121 form of some conditional imports to remove false pyflakes
122 warnings. There are still a number of warnings left, mostly from
123 imports that are done for their side-effects.
124 * buildbot/test/test_vc.py: import twisted.python.failure, since it
127 2006-08-26 Brian Warner <warner@lothar.com>
129 * buildbot/test/test_locks.py (Unit.testLater): make the tests
130 compatible with twisted-1.3.0, for some reason I just can't seem
131 to let go of the past.
133 2006-08-25 Brian Warner <warner@lothar.com>
135 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
137 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
138 all logfiles= in startCommand(), rather than in start() . This
139 makes it easier to have the 'stdio' log come before any secondary
140 logfiles, which I feel makes the waterfall display more
142 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
143 from ShellCommand up into LoggingBuildStep
144 (LoggingBuildStep.__init__): move the handling of logfiles= from
145 ShellCommand up to LoggingBuildStep, because startCommand is
146 provided by LoggingBuildStep, whereas start() was specific to
147 subclasses like ShellCommand and Source. This removes code
148 duplication in those subclasses.
149 (ShellCommand.__init__): same
150 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
151 for a slave that's too old to understand logfiles= into a separate
152 method, so it can live in ShellCommand. The rest of
153 setupLogfiles() can live in LoggingBuildStep.
155 2006-08-24 Brian Warner <warner@lothar.com>
157 * buildbot/locks.py (BaseLock): you can now configure Locks to
158 allow multiple simultaneous owners. They still default to
159 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
161 * docs/buildbot.texinfo (Interlocks): document the new options
162 * buildbot/test/test_locks.py: add a bunch of new unit tests
163 * buildbot/process/base.py (Build.acquireLocks): locks now offer
164 waitUntilMaybeAvailable, not waitUntilAvailable
165 * buildbot/process/step.py (BuildStep.acquireLocks): same
166 * buildbot/master.py (BotMaster.getLockByID): real locks now use
167 the whole lockid in their constructor, not just the name. Also,
168 keep track of which real locks we've handed out by the full
169 lockid, not just class+name, otherwise changing just the maxCount=
170 in the master.cfg file would not actually cause a behavioral
173 2006-08-23 Brian Warner <warner@lothar.com>
175 * buildbot/__init__.py (version): bump to 0.7.4+ while between
177 * docs/buildbot.texinfo: same
179 2006-08-23 Brian Warner <warner@lothar.com>
181 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
182 * docs/buildbot.texinfo: set version to match
183 * NEWS: update for 0.7.4
184 * buildbot/slave/commands.py (command_version): mention that this
185 version (2.1) was released with buildbot-0.7.4
187 2006-08-22 Brian Warner <warner@lothar.com>
191 * CREDITS: new file, list of people who have helped. Thanks!
192 * MANIFEST.in: ship it
194 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
195 new diagrams, the user's manual is more informative than it was.
196 Start shipping the .html user's manual (and generated .png
198 * Makefile: update 'release' target to match
200 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
201 test.. I think the web-parts effort will render it pointless well
202 before it ever actually starts to work.
204 2006-08-20 Brian Warner <warner@lothar.com>
206 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
207 meaning of the prefix= argument. It is now just a string which is
208 stripped from the beginning of the filename. If prefix= is set but
209 not found on any given filename, that filename is ignored. If all
210 filenames in a Change are ignored, the Change is dropped. This is
211 much simpler than the previous sep= nonsense, and I should have
212 implemented it this way from the beginning. Effectively resolves
213 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
214 Gedminas for the catch and suggested fixes.
215 (ChangePerspective.perspective_addChange): implement the actual
217 * buildbot/test/test_changes.py (TestChangePerspective): test it
218 * docs/buildbot.texinfo (PBChangeSource): document it, explain
219 how to properly use prefix=
220 * docs/examples/twisted_master.cfg (source): update prefix= by
221 adding the trailing slash
224 * docs/examples/twisted_master.cfg: update to actual practice
226 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
227 update test case to match new link text.. the HREF has both a
228 class= setting and an enclosing [] pair that I didn't match in the
231 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
232 list of strings is preferred over a single string with embedded
234 (ShellCommand.description=): explain that either single strings or
235 a list of strings is acceptable, and why you might prefer one over
236 the other. Add an example. Fixes SF#1524659, thanks to Paul
237 Winkler for the catch.
238 (Build Steps): update to use f.addStep() rather than using s()
239 and the constructor list
241 * buildbot/process/step.py (ShellCommand): accept either a single
242 string or a list of strings in both description= and
244 * buildbot/test/test_steps.py (Steps.test_description): test it
245 * buildbot/test/runutils.py (makeBuildStep): support for that test
247 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
248 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
249 collecting the files and creating the patch.
251 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
252 per-step URLs that will be displayed on the waterfall display,
253 for things like the HTML output of code-coverage tools, when
254 the results are hosted elsewhere.
255 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
256 way to retrieve these URLs
257 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
258 the method to retrieve these URLs. Also provide backwards
259 compatibility for saved BuildStepStatus instances that didn't have
261 * buildbot/process/step.py (BuildStep.addURL): method to set these
262 URLs from within a BuildStep
263 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
264 (StepBox.getBox): give these external links a distinct CSS class
265 named "BuildStep external" so a .css file can display them
268 * buildbot/test/test_web.py (WaterfallSteps): test that we really
270 * buildbot/test/test_steps.py (Steps): test that we can all the
271 URLs. Also add a bunch of other tests on methods that can be
272 called from within BuildSteps
273 * buildbot/test/runutils.py (makeBuildStep): add utility function
275 2006-08-13 Brian Warner <warner@lothar.com>
277 * docs/buildbot.texinfo (BuildStep LogFiles): document them
279 2006-08-10 Brian Warner <warner@lothar.com>
281 * docs/buildbot.texinfo (Index of master.cfg keys): add another
282 index, this one of things like c['sources'] and c['schedulers']
283 (indices): it looks like my clever idea of putting the @fooindex
284 commands in between the @node and the @subsection (to make the
285 HREF anchor jump to slightly above the section title, which works
286 much better in html) confused texinfo horribly, so I'm moving the
287 index tags back to be just after the @subsection marker. I also
288 added extra lines between the @node/@section paragraph and the
289 index tags, since I think maybe texinfo wants to see these be
292 * docs/Makefile (images): make sure images get built when
294 * docs/images/Makefile: same
296 * buildbot/scripts/runner.py: rename 'buildbot master' to
297 'buildbot create-master', and 'buildbot slave' to 'buildbot
299 * docs/buildbot.texinfo: same
302 * docs/buildbot.texinfo: reimplement the "useful classes" index
303 with actual texinfo indices. The .info rendering is a bit
304 weird-looking but it works well, and the HTML rendering is quite
305 nice. This also puts the index targets in the regular flow of the
306 text, which is easier to maintain.
308 2006-08-06 Brian Warner <warner@lothar.com>
310 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
311 Kevin Turner to prefer the environ= argument be a list rather than
312 a string. If it is a list, it will be joined with a platform-local
313 os.pathsep delimiter, and then prepended to any existing
314 $PYTHONPATH value. This works better in cross-platform (i.e.
315 windows buildslaves) environments when you need to push multiple
316 directories onto the front of the path.
317 (SlaveShellCommand): documented the new magic
318 * docs/buildbot.texinfo (ShellCommand): documented the new magic
319 in a user-visible form
321 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
322 Turner to prefer lists over strings when creating/running VC
323 commands during unit tests. This is clearly necessary to survive
324 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
325 renamed the wq() function to qw() though, since that's how it's
326 spelled in perl. Eventually I'd prefer all commands to be
327 specified with lists.
329 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
330 which are deleted (or not yet created) correctly. Also add
331 failsafe code to not explode if the file-watching poller doesn't
332 get started. Thanks to JP Calderone for the catch and the poller
334 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
336 * buildbot/test/emitlogs.py: same
338 * NEWS: summarize recent changes
340 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
341 clause to avoid the "host key mismatch" warning
343 * buildbot/process/step_twisted.py (Trial.start): if the
344 buildslave is too old to understand logfiles=, fall back to
345 running 'cat _trial_temp/test.log' like before.
346 (Trial.commandComplete): same. this takes advantage of the
347 LoggingBuildStep refactoring to stall commandComplete long enough
348 to run a second RemoteShellCommand.
350 * buildbot/process/step.py (LoggingBuildStep.startCommand):
351 refactor command-completion handling, to allow methods like
352 commandComplete/createSummary/evaluateCommand to return Deferreds.
353 (LoggingBuildStep._commandComplete): delete the refactored method
354 (ShellCommand.setupLogfiles): if the buildslave is too old to
355 understand logfiles=, put a warning message both into twistd.log
356 and into the otherwise empty user-visible LogFiles.
358 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
359 callers to provide the slave-side logfile name, rather than
360 forcing it to come from the local name of the LogFile.
361 (BuildStep.getSlaveName): new method
363 * buildbot/process/base.py (Build.getSlaveName): new method, so
364 steps can find out which buildslave they're running on
366 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
367 to match the s/cvs_ver/command_version/ change
369 2006-08-05 Brian Warner <warner@lothar.com>
371 * buildbot/slave/commands.py (command_version): replace the CVS
372 auto-updated cvs_ver keyword with a manually-updated variable,
373 since CVS is no longer the master repository. Add a description of
374 the remote API change starting in this version (2.1), specifically
375 the fact that SlaveShellCommand now accepts 'initial_stdin',
376 'keep_stdin_open', and 'logfiles'.
378 2006-07-31 Brian Warner <warner@lothar.com>
380 * docs/buildbot.texinfo (System Architecture): Finally add lots of
381 diagrams to describe how the whole system fits together. The
382 images themselves are kept in SVG files, with ascii-art versions
383 in corresponding .txt files. Texinfo knows how to interpolate the
384 text version into .info files, reference the .png versions from
385 .html files, and include .eps versions in the .ps format.
386 * docs/images/Makefile: tools to create .png and .eps
387 * docs/images/*.svg: created pictures with Inkscape.
388 * .darcs-boring: ignore the generated .eps and .png files
390 2006-07-24 Brian Warner <warner@lothar.com>
392 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
393 Scheduler names, since they cause setServiceParent to explode
395 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
397 2006-07-20 Brian Warner <warner@lothar.com>
399 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
400 which runs the buildbot unit tests
402 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
403 classes that are useful in master.cfg
405 2006-07-15 Brian Warner <warner@lothar.com>
407 * Makefile (some-apidocs): new target to build only some epydocs
409 * setup.py: minor comment.. does the classifiers= argument prevent
410 the setup.py script from working on python2.2/2.3?
412 * buildbot/scripts/sample.cfg: update manhole example, arrange into
415 * buildbot/twcompat.py: fix minor typo in comments
417 * buildbot/manhole.py: move all Manhole-related code out to this
418 module. Implement SSH-based manholes (with TwistedConch), and move
419 to conch's nifty line-editing syntax-coloring REPL shell instead
420 of the boring non-editing monochromatic (and deprecated) old
422 * buildbot/master.py: remove all Manhole-related code
423 (BuildMaster.loadConfig._add): make sure the old manhole is
424 removed before we add the new one
425 * docs/buildbot.texinfo (Debug options): document new Manhole options
427 * buildbot/twcompat.py (_which): fix some epydoc issues
428 * buildbot/status/html.py (Waterfall.__init__): same
430 2006-06-29 Brian Warner <warner@lothar.com>
432 * buildbot/interfaces.py: get Interface from b.twcompat to hush
433 deprecation warnings under newer Twisteds (by using
434 zope.interface.Interface instead of old twisted.python.components
436 * buildbot/slave/interfaces.py: same
438 2006-06-28 Brian Warner <warner@lothar.com>
440 * buildbot/slave/commands.py (SVN): add --non-interactive to all
441 svn commands, so it will fail immediately instead of hanging while
442 it waits for a username/password to be typed in.
444 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
445 log message if the step was shut down
447 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
448 obsolete reference to mktap.
450 2006-06-20 Brian Warner <warner@lothar.com>
452 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
453 test to include new 'logfiles' argument sent from master to slave
455 2006-06-19 Brian Warner <warner@lothar.com>
457 * buildbot/process/step_twisted.py (Trial): track Progress from
458 _trial_temp/test.log too
460 * buildbot/process/step.py (OutputProgressObserver): generalize
461 the earlier StdioProgressObserver into an OutputProgressObserver
462 that can track LogFiles other than stdio.
463 (LoggingBuildStep.__init__): same
465 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
466 _trial_temp/test.log, not a separate 'cat' command. TODO: this
467 will fail under windows because of os.sep issues. It might have
468 worked before if 'cat' was doing cygwin path conversion.
470 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
471 creation of LogFileWatchers
472 (ShellCommand._startCommand): and record the files that were
473 watched in the 'headers' section of the ShellCommand output
475 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
476 need to actually pass it to the slave if you want it to work.
477 (ShellCommand): document it a bit
479 * buildbot/test/test_shell.py: new test to validate LogFiles
480 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
482 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
483 before printing the last batch of lines, to test that the polling
484 logic is working properly
486 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
487 handling, making it possible to track multiple logs for a single
488 RemoteCommand. The previous single logfile is now known as the
490 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
491 (RemoteShellCommand.__init__): accept logfiles=
492 (LoggingBuildStep.startCommand): stdio_log is now one of many
493 (ShellCommand): added logfiles= argument, as well as a class-level
494 .logfiles attribute, which will be merged together to figure out
495 which logfiles should be tracked. The latter maybe be useful for
496 subclasses of ShellCommand which know they will aways produce
497 secondary logfiles in the same location.
499 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
500 and closeStdin() methods, preparing to make it possible to write
501 to a ShellCommand's stdin at any time, not just at startup. These
502 writes are buffered if the child process hasn't started yet.
503 (LogFileWatcher): new helper class to watch arbitrary logfiles
504 while a ShellCommand runs. This class polls the file every two
505 seconds, and sends back 10k chunks to the buildmaster.
506 (ShellCommand): rename stdin= to initialStdin=, and add
507 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
509 (ShellCommand.addLogfile): LogFile text is sent in updates with a
510 key of "log" and a value of (logname, data).
511 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
512 'logfiles' to the master-visible args dictionary.
513 (SourceBase.doPatch): match s/stdin/initialStdin/ change
516 * buildbot/test/test_vc.py (Patch.testPatch): same
519 * buildbot/test/emit.py: write to a logfile in the current
520 directory. We use this to figure out what was used as a basedir
521 rather than looking to see which copy of emit.py gets run, so that
522 we can run the commands from inside _trial_temp rather than inside
524 * buildbot/test/subdir/emit.py: same
525 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
526 argument rather than running from buildbot/test/
527 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
528 rather than using an implicit setUp()
529 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
530 (ShellBase.testShell1, etc): use explicit path to emit.py instead
531 of assuming that we're running in buildbot/test/ (and that '.' is
534 * buildbot/slave/commands.py (Command.doStart): refactor Command
535 startup/completion a bit: now the SlaveBuilder calls doStart(),
536 which is not meant for overridding by subclasses, and doStart()
537 calls start(), which is. Likewise the SlaveBuilder calls
538 doInterrupt(), and subclasses override interrupt(). This also puts
539 responsibility for maintaining .running in Command rather than in
541 (Command.doInterrupt): same
542 (Command.commandComplete): same, this is called when the deferred
543 returned by start() completes.
544 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
545 (SlaveBuilder.remote_interruptCommand): same
546 (SlaveBuilder.stopCommand): same
548 2006-06-16 Brian Warner <warner@lothar.com>
550 * buildbot/test/test_shell.py: new test file to contain everything
551 relating to ShellCommand
552 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
553 multiple logfiles in realtime" feature, not yet implemented
554 * buildbot/test/emitlogs.py: support file for testLogFiles
555 * docs/buildbot.texinfo (ShellCommand): document the feature
557 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
559 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
560 for tests which exercise SlaveCommands in isolation.
562 * buildbot/test/test_slavecommand.py: Move some utilities like
563 SignalMixin and FakeSlaveBuilder from here ..
564 * buildbot/test/runutils.py: .. to here, so they can be used by
565 other test classes too
566 * buildbot/test/test_vc.py: more SignalMixin refactoring
567 * buildbot/test/test_control.py: same
568 * buildbot/test/test_run.py: and some rmtree refactoring
570 2006-06-15 Brian Warner <warner@lothar.com>
572 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
573 'testBranch' to match other VC tests and have the tests run in
574 roughly increasing order of dependency
576 * buildbot/test/test_steps.py (LogObserver): new test to verify
577 LogObservers can be created at various times and still get
578 connected up properly
580 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
581 to create BuildStepStatus instances that actually work.
583 * buildbot/process/step.py (LogObserver): add outReceived and
584 errReceived base methods, to be overridden
586 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
587 API to take a name instead of a step, reducing the coupling
588 somewhat. This returns the BuildStepStatus object so it can be
589 passed to the new Step, instead of jamming it directly into the
591 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
593 * buildbot/process/base.py (Build.setupBuild): use both methods
594 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
595 process a bit to match
597 2006-06-14 Brian Warner <warner@lothar.com>
599 * docs/buildbot.texinfo (Adding LogObservers): add some limited
600 docs on writing new LogObserver classes
601 (Writing New Status Plugins): brief docs on how Status Plugins fit
604 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
605 implement a LogObserver that counts how many unit tests have been
607 (Trial.__init__): wire it in
608 * buildbot/test/test_twisted.py (Counter): unit test for it
610 * buildbot/process/step_twisted.py (HLint.commandComplete): update
611 to new cmd.logs['stdio'] scheme
612 (Trial.commandComplete): same
613 (BuildDebs.commandComplete): same
615 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
616 LogFiles, instead of just a single one. The old single logfile is
617 now called "stdio". LoggedRemoteCommand no longer creates a
618 LogFile for you (the code to do that was broken anyway). If you
619 don't create a "stdio" LogFile, then stdout/stderr will be
621 (LogObserver): implement "LogObservers", which a BuildStep can add
622 to parse the output of a command in real-time. The primary use is
623 to provide more useful information to the Progress code, allowing
624 better ETA estimates.
625 (LogLineObserver): utility subclass which feeds complete lines to
626 the parser instead of bytes.
627 (BuildStep.progressMetrics): this is safer as a tuple
628 (BuildStep.setProgress): utility method, meant to be called by
630 (BuildStep.addLogObserver): new method, to be called at any time
631 during the BuildStep (even before any LogFiles have been created),
632 to attach (or schedule for eventual attachment) a LogObserver to a
634 (StdioProgressObserver): new LogObserver which replaces the old
635 "output" progress gatherer
636 (LoggingBuildStep.__init__): same
637 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
638 (LoggingBuildStep._commandComplete): must use logs['stdio']
639 instead of the old single ".log" attribute.
640 * buildbot/status/builder.py (LogFile): remove old logProgressTo
641 functionality, now subsumed into StdioProgressObserver
642 * buildbot/test/test_status.py (Subscription._testSlave_2): the
643 log name changed from "output" to "stdio".
646 * buildbot/interfaces.py (ILogFile): add the Interface used from
647 the BuildStep towards the LogFile
648 (ILogObserver): and the one provided by a LogObserver
649 * buildbot/status/builder.py (LogFile): implement it
651 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
652 HEADER constants here ..
653 * buildbot/status/builder.py (STDOUT): .. from here
655 2006-06-13 Brian Warner <warner@lothar.com>
657 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
658 compatibility with python2.2, which doesn't have the 'substr in
660 (TestP4Poller.makeTime): utility function to construct the
661 timestamp using the same strptime() approach as p4poller does. It
662 turns out that time.mktime() behaves slightly differently under
663 python2.2, probably something to do with the DST flag, and that
664 causes the test to fail under python2.2. (changing the mktime()
665 arguments to have dst=0 instead of -1 caused it to fail under
666 python2.3. Go figure.)
667 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
669 2006-06-12 Brian Warner <warner@lothar.com>
671 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
672 proper Perforce (P4) support. Many many thanks to Scott Lamb for
673 contributing such an excellent patch, including docs and unit
674 tests! This makes it *so* much easier to apply. I had to update
675 test_vc.py to handle some recent refactorings, but everything else
676 applied smoothly. The only remaining thing I'd like to fix would
677 be to remove the hard-wired port 1666 used by p4d, and allow it to
678 claim any unused port. This would allow two copies of the test
679 suite to run on the same host at the same time, as well as
680 allowing the test suite to run while a real (production) p4d was
681 running on the same host. Oh, and maybe we should add a warning to
682 step.P4 that gets emitted if the slave is too old to provide the
683 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
684 * buildbot/slave/commands.py (P4): same
685 (P4Sync): same, some minor updates
686 * buildbot/changes/p4poller.py: same
687 * docs/buildbot.texinfo: same
688 * buildbot/test/test_p4poller.py: same
689 * buildbot/test/test_vc.py (P4): same
691 * setup.py: add Trove classifiers for PyPI
693 2006-06-08 Brian Warner <warner@allmydata.com>
695 * buildbot/status/client.py
696 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
697 changing this from getCurrentBuild() to getCurrentBuilds(). Each
698 build needs to be IRemote'd separately, rather than IRemote'ing
699 the whole list at once. I can't wait until newpb's serialization
700 adapters make this unnecessary.
702 2006-06-06 Brian Warner <warner@lothar.com>
704 * buildbot/process/step.py (WithProperties): make this inherit
705 from ComparableMixin, so that reloading an unchanged config file
706 doesn't cause us to spuriously reload any Builders which use them.
707 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
710 2006-06-03 Brian Warner <warner@lothar.com>
712 * contrib/windows/{setup.py, buildbot_service.py}: add support for
713 running py2exe on windows, contributed by Mark Hammond. Addresses
714 SF#1401121, but I think we still need to include
715 buildbot/scripts/sample.cfg
716 * setup.py: include buildbot_service.py as a script under windows
717 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
718 a py2exe application), get the icon/css datafiles from a different
721 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
722 double-escape the build URL. Thanks to Olivier Bonnet for the
723 patch. Fixes SF#1452801.
725 2006-06-02 Brian Warner <warner@lothar.com>
727 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
728 first six columns of 'svnlook' output, not just the first column,
729 since property changes appear in the other five. Thanks to Olivier
730 Bonnet for the patch. Fixes SF#1398174.
732 2006-06-01 Brian Warner <warner@lothar.com>
734 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
735 the fake build, so that title= has something to be set to
737 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
738 attribute of the "Build #NN" link in the yellow start-the-build
739 box to the build's reason. This means that you get a little
740 tooltip explaining why the build was done when you hover over the
741 yellow box. Thanks to Zandr Milewski for the suggestion.
743 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
744 (Box.setETA): handle ETA=None (by stopping the timer)
745 (Box.update): make the [soon] text less different than the usual
746 text, so the rest of the text doesn't flop around so much. It
747 would be awfully nice to figure out how to center this stuff.
748 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
750 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
751 by default, so that any ShellCommand which fails marks the overall
752 build as a failure. I should have done this from the beginning.
753 Add flunkOnFailure=False to the arguments if you want to turn off
756 2006-05-30 Brian Warner <warner@lothar.com>
758 * buildbot/clients/gtkPanes.py: add a third row: now it shows
759 last-build/current-build/current-step. Show what step is currently
760 running. Show ETA for both the overall build and the current step.
761 Update GTK calls to modern non-deprecated forms. There's still a
762 lot of dead code and debug noise to remove.
764 * buildbot/process/step_twisted.py (Trial): set the step name, so it
765 shows up properly in status displays
767 2006-05-28 Brian Warner <warner@lothar.com>
769 * buildbot/test/test_properties.py (Run.testInterpolate): on the
770 build we use to verify that WithProperties works:
772 ** set flunkOnFailure=True so that build failures get noticed
773 ** set workdir='.' so that the build succeeds, otherwise it is trying
774 to touch 'build/something', and 'build/' doesn't exist because
775 usually that's created by a Source step
776 ** set timeout=10, because Twisted-1.3.0 has a race condition that
777 this test somehow triggers, in which the 'touch' process becomes
778 a zombie and we wait for th etimeout before giving up on it.
780 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
781 to log the Build results and step logs to the twisted log.
782 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
783 what went wrong if a build was expected to succeed but didn't.
785 * buildbot/process/step_twisted.py (Trial): set the default
786 trialMode to '--reporter=bwverbose', which specifies verbose
787 black-and-white text. Back in twisted-1.3/2.0 days we had to use
788 '-to', but those are completely missing in modern Twisteds.
790 * buildbot/scripts/sample.cfg: make the sample Manhole config use
791 a localhost-only port, to encourage better security
793 * docs/buildbot.texinfo (Change Sources): mention
796 * .darcs-boring: add a Darcs boringfile
798 * README (REQUIREMENTS): stop claiming compatibility with
801 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
804 2006-05-27 Brian Warner <warner@lothar.com>
806 * buildbot/__init__.py: bump to 0.7.3+ while between releases
807 * docs/buildbot.texinfo: same
809 2006-05-23 Brian Warner <warner@lothar.com>
811 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
812 * docs/buildbot.texinfo: set version to match
813 * NEWS: update for 0.7.3
815 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
816 give a quick mapping from VC system to possible ChangeSources
817 (Build Properties): add 'buildername'
819 * buildbot/process/base.py (Build.setupStatus): oops, set
820 'buildername' and 'buildnumber' properties
821 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
824 2006-05-22 Brian Warner <warner@lothar.com>
826 * docs/buildbot.texinfo (Build Properties): explain the syntax of
827 property interpolation better
829 * README (INSTALLATION): remove old '-v' argument from recommended
832 * docs/buildbot.texinfo (ShellCommand): add docs for description=
833 and descriptionDone= arguments. Thanks to Niklaus Giger for the
836 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
837 'svnversion' instead of grepping the output of 'svn info', much
838 simpler and avoids CR/LF problems on windows. Thanks to Olivier
839 Bonnet for the suggestion.
840 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
841 require the WC_PATH argument, so run 'svnversion .' instead.
843 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
844 aren't supposed to have 'self' in their argument list
846 2006-05-21 Brian Warner <warner@lothar.com>
848 * buildbot/process/step.py (ShellCommand.start): make
849 testInterpolate pass. I was passing the uninterpolated command to
850 the RemoteShellCommand constructor
851 (ShellCommand._interpolateProperties): oops, handle non-list
852 commands (i.e. strings with multiple words separated by spaces in
853 them) properly, instead of forgetting about them.
855 * buildbot/test/test_properties.py (Run.testInterpolate): new test
856 to actually try to use build properties in a real build. This test
858 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
859 to start and evaluate builds
861 * buildbot/test/test__versions.py: add a pseudo-test to record
862 what version of Twisted/Python/Buildbot are running. This should
863 show up at the beginning of _trial_tmp/test.log, and exists to help
864 debug other problems.
866 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
867 a filename to be served as 'robots.txt' to discourage web spiders.
868 Adapted from a patch by Tobi Vollebregt, thanks!
869 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
870 (Waterfall.test_waterfall): tweak the way that filenames are put
871 into the config file, to accomodate windows pathnames better.
873 * docs/buildbot.texinfo (HTML Waterfall): document it
875 * buildbot/process/process_twisted.py
876 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
877 changed the build process. The new setup.py no longer takes the
879 (FullTwistedBuildFactory.__init__): same
880 (TwistedReactorsBuildFactory.__init__): same
882 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
883 be placed in the [hooks] section of the central repository (the
884 one that everybody pushes changes to).
886 2006-05-20 Brian Warner <warner@lothar.com>
888 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
889 .darcs-context file, use binary mode. I think this was causing a
890 Darcs failure under windows.
892 2006-05-19 Brian Warner <warner@lothar.com>
894 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
895 use a timezone string of +0000 and gmtime, since this timestamp is
896 sent to a buildmaster and %z is broken.
898 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
899 string and localtime, since this timestamp will only be consumed
900 locally, and %z is broken.
902 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
903 gmtime, since this timestamp is returned to the buildmaster, and
906 2006-05-18 Brian Warner <warner@lothar.com>
908 * NEWS: update in preparation for next release
910 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
911 setup-repository and do-we-have-the-vc-tools code into a separate
912 "helper" class, which sticks around in a single module-level
913 object. This seems more likely to continue to work in the future
914 than having it hide in the TestCase and hope that TestCases stick
915 around for a long time.
917 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
918 addremove' has been deprecated in recent versions of mercurial, so
921 2006-05-07 Brian Warner <warner@lothar.com>
923 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
924 operating under windows, move the file before opening it, since
925 you can't rename a file that somebody has open.
927 * buildbot/process/base.py (Build.setupBuild): if something goes
928 wrong while creating a Step, log the name and arguments, since the
929 error message when you get the number of arguments wrong is really
932 2006-05-06 Brian Warner <warner@lothar.com>
934 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
935 bugs in twisted-specific code not covered by my unit tests, this
936 time use 'cmd' argument instead of self.cmd
938 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
939 fix stupid braino: either use startwith or find()==0, not both.
940 (TwistedReactorsBuildFactory.__init__): another dumb typo
942 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
943 mark this test as TODO under windows, since process-killing seems
944 dodgy there. We'll come back to this later and try to fix it
947 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
948 and don't include a timezone
949 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
950 This should avoid the windows-with-verbose-timezone-name problem
952 (Patch.testPatch): add a test which runs 'patch' with less
953 overhead than the full VCBase.do_patch sequence, to try to isolate
954 a windows test failure. This one uses slave.commands.ShellCommand
955 and 'patch', but none of the VC code.
957 * buildbot/slave/commands.py (getCommand): use which() to find the
958 executables for 'cvs', 'svn', etc. This ought to help under
961 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
962 working directory before starting. If an earlier test failed, the
963 leftover directory would mistakenly flunk a later test.
964 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
965 Make sure that we use the right commandlines if which("tla") picks
966 up "tla.exe" (as it does under windows).
967 (TlaSupport.do_get): factor out this tla-vs-baz difference
968 (TlaSupport.vc_create): more tla-vs-baz differences
970 * buildbot/test/test_slavecommand.py
971 (ShellBase.testShellMissingCommand): stop trying to assert
972 anything about the error message: different shells on different
973 OSes with different languages makes it hard, and it really isn't
974 that interesting of a thing to test anyway.
976 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
977 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
978 "Panther"), because it has a bug which flunks a couple tests in
979 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
980 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
981 able to test that yet.
983 2006-04-30 Brian Warner <warner@lothar.com>
985 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
986 make sure child commands emit messages in english, so our regexps
987 will match. Thanks to Nikaus Giger for identifying the problems.
988 (VCBase._do_vctest_export_1): mode="export" is not responsible
989 for setting the "got_revision" property, since in many cases it is
990 not convenient to determine.
991 (SVNSupport.capable): when running 'svn --version' to check for
992 ra_local, we want error messages in english
993 * buildbot/test/test_slavecommand.py
994 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
995 to emit the error message in english
997 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
998 the environment with $LC_ALL="C" so that Commands which need to
999 parse the output of their child processes can obtain it in
1001 (SVN.parseGotRevision): call "svn info" afterwards instead of
1002 watching the output of the "svn update" or "svn checkout".
1003 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
1004 (Arch.parseGotRevision): same
1005 (Bazaar.parseGotRevision): same
1006 (Mercurial.parseGotRevision): same
1008 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
1009 $LC_ALL="C" when running commands under 'buildbot try', too
1011 * buildbot/test/__init__.py: remove the global os.environ()
1012 setting, instead we do it just for the tests that run commands and
1013 need to parse their output.
1015 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
1016 remove the overly-short .timeout on this test, because non-DNotify
1017 platforms must fall back to polling which happens at 10 second
1018 intervals, so a 5 second timeout would never succeed.
1020 2006-04-24 Brian Warner <warner@lothar.com>
1022 * docs/buildbot.texinfo (Installing the code): update trial
1023 invocation, SF#1469116 by Niklaus Giger.
1024 (Attributes of Changes): updated branch-name examples to be
1025 a bit more realistic, SF#1475240 by Stephen Davis.
1027 * contrib/windows/buildbot2.bat: utility wrapper for windows
1028 developers, contributed by Nick Trout (after a year of neglect..
1029 sorry!). SF#1194231.
1031 * buildbot/test/test_vc.py (*.capable): store the actual VC
1032 binary's pathname in VCS[vcname], so it can be retrieved later
1033 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
1034 strip out non-numeric timezone information, specifically the funky
1035 German string that his system produced that confuses CVS.
1036 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
1037 allow Darcs tests to work on windows
1038 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
1039 procutils.which() everywhere, to allow tryclient to work under
1040 windows. Also from Niklaus Giger, SF#1463394.
1042 * buildbot/twcompat.py (which): move the replacement for a missing
1043 twisted.python.procutils.which from test_vc.py to here, so it can
1044 be used in other places too (specifically tryclient.py)
1046 2006-04-23 Brian Warner <warner@lothar.com>
1048 * buildbot/status/html.py (StatusResourceBuild.body): replace the
1049 bare buildbotURL/projectName line with a proper DIV, along with a
1050 CSS class of "title", from Stefan Seefeld (SF#1461675).
1051 (WaterfallStatusResource.body0): remove the redundant 'table'
1052 class from the table
1053 (WaterfallStatusResource.body): same. Also add class="LastBuild"
1054 to the top-row TR, and class="Activity" to the second-row TR,
1055 rather than putting them in the individual TD nodes.
1057 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
1058 'got_revision' build property for all VC systems that implement
1059 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
1061 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
1062 to determine which revision we actually obtained
1063 (CVS.parseGotRevision): implement this for CVS, which just means
1064 to grab a timestamp. Not ideal, and it depends upon the buildslave
1065 having a clock that is reasonably well syncronized with the server,
1066 but it's better than nothing.
1067 (SVN.parseGotRevision): implement it for SVN, which is accurate
1068 (Darcs.parseGotRevision): same
1069 (Arch.parseGotRevision): same
1070 (Bazaar.parseGotRevision): same
1071 (Mercurial.parseGotRevision): same
1073 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
1074 keep a record of all non-stdout/stderr/header/rc status updates,
1075 for the benefit of RemoteCommands that send other useful things,
1077 (Source.commandComplete): put any 'got_revision' status values
1078 into a build property of the same name
1081 * buildbot/process/step_twisted.py (Trial): update to deal with
1082 new ShellCommand refactoring
1084 * docs/buildbot.texinfo (Build Properties): document new feature
1085 that allows BuildSteps to get/set Build-wide properties like which
1086 revision was requested and/or checked out.
1088 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
1089 * buildbot/status/builder.py (BuildStatus.getProperty): implement
1090 it. Note that this bumps the persistenceVersion of the saved Build
1091 object, so add the necessary upgrade-old-version logic to include
1092 an empty properties dict.
1094 * buildbot/process/base.py (Build.setProperty): implement it
1095 (Build.getProperty): same
1096 (Build.startBuild): change build startup to set 'branch',
1097 'revision', and 'slavename' properties at the right time
1099 * buildbot/process/step.py (BuildStep.__init__): change setup to
1100 require 'build' argument in a better way
1101 (LoggingBuildStep): split ShellCommand into two pieces, for better
1102 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
1103 a single RemoteCommand that sends stdout/stderr status text. It
1104 also provides the usual commandComplete / createSummary /
1105 evaluateCommand / getText methods to be overridden...
1106 (ShellCommand): .. whereas ShellCommand is specifically for
1107 running RemoteShellCommands. Other shell-like BuildSteps (like
1108 Source) can inherit from LoggingBuildStep instead of ShellCommand
1109 (WithProperties): marker class to do build-property interpolation
1110 (Source): inherit from LoggingBuildStep instead of ShellCommand
1113 * buildbot/test/test_properties.py: test new functionality
1115 2006-04-21 Brian Warner <warner@lothar.com>
1117 * buildbot/test/test_vc.py: rename testBranch to
1118 testCheckoutBranch to keep the tests in about the right
1121 2006-04-18 Brian Warner <warner@lothar.com>
1123 * docs/buildbot.texinfo (PBListener): improve cross-references
1124 between PBListener and 'buildbot statusgui', thanks to John Pye
1127 2006-04-17 Brian Warner <warner@lothar.com>
1129 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
1130 running under Twisted-1.3.0, otherwise skipped tests are reported
1133 * all: use isinstance() instead of 'type(x) is foo', suggested by
1136 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
1137 oops, fix a brain-fade from the other week, when making the
1138 addStep changes. I changed all the __init__ upcalls to use the
1139 wrong superclass name.
1140 (FullTwistedBuildFactory.__init__): same
1141 (TwistedDebsBuildFactory.__init__): same
1142 (TwistedReactorsBuildFactory.__init__): same
1143 (TwistedBuild.isFileImportant): use .startswith for clarity,
1144 thanks to Neal Norwitz for the suggestions.
1146 * contrib/viewcvspoll.py: script to poll a viewcvs database for
1147 changes, then deliver them over PB to a remote buildmaster.
1149 * contrib/svnpoller.py: added script by John Pye to poll a remote
1150 SVN repository (by running 'svn log') from a cronjob, and run
1151 'buildbot sendchange' to deliver the changes to a remote
1153 * contrib/svn_watcher.py: added script by Niklaus Giger (a
1154 modification of svnpoller.py), same purpose, but this one loops
1155 internally (rather than expecting to run from a cronjob) and works
1157 * contrib/README.txt: same
1159 2006-04-11 Brian Warner <warner@lothar.com>
1161 * all: fix a number of incorrect names and missing imports, thanks
1162 to Anthony Baxter for the patch.
1163 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
1164 remove unused buggy method.
1165 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
1166 comes from shutil, not "shutils"
1167 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
1168 (Arch.checkSlaveVersion): same
1169 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
1171 * buildbot/process/step_twisted2.py: add some missing imports
1172 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
1173 this code used to live in twisted.internet.defer
1175 2006-04-10 Brian Warner <warner@lothar.com>
1177 * buildbot/process/step.py (Mercurial): add Mercurial support
1178 * buildbot/slave/commands.py (Mercurial): same
1179 * buildbot/scripts/tryclient.py (MercurialExtractor): same
1180 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
1181 not yet tested, but 'try' support *is* covered
1182 * docs/buildbot.texinfo (Mercurial): document it
1184 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
1185 some debugging messages (turned off)
1186 * buildbot/test/test_vc.py: improve debug messages
1188 2006-04-07 Brian Warner <warner@lothar.com>
1190 * buildbot/test/test_vc.py (which): define our own which() in case
1191 we can't import twisted.python.procutils, because procutils doesn't
1192 exist in Twisted-1.3
1194 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
1195 of SlaveLocks for performance tests
1197 * docs/examples/twisted_master.cfg: update to match current usage
1199 * buildbot/changes/p4poller.py (P4Source): add new arguments:
1200 password, p4 binary, pollinterval, maximum history to check.
1201 Patch from an anonymous sf.net contributor, SF#1219384.
1202 * buildbot/process/step.py (P4Sync.__init__): add username,
1203 password, and client arguments.
1204 * buildbot/slave/commands.py (P4Sync): same
1206 2006-04-05 Brian Warner <warner@lothar.com>
1208 * buildbot/process/factory.py (BuildFactory.addStep): new method
1209 to add steps to a BuildFactory. Use it instead of f.steps.append,
1210 and you can probably avoid using the s() convenience function.
1211 Patch from Neal Norwitz, sf.net #1412605.
1212 (other): update all factories to use addStep
1213 * buildbot/process/process_twisted.py: update all factories to use
1216 2006-04-03 Brian Warner <warner@lothar.com>
1218 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
1219 work under windows too. Adapted from a patch by Niklaus Giger,
1220 addresses SF#1463399.
1222 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
1223 spawned commands emit parseable results in english and not some
1224 other language. Patch from Niklaus Giger, SF#1463395.
1226 * README (INSTALLATION): discourage users from running unit tests on
1227 a "network drive", patch from Niklaus Giger, SF#1463394.
1229 2006-03-22 Brian Warner <warner@lothar.com>
1231 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
1232 function to turn a repository-relative pathname into a (branch,
1233 branch-relative-filename) tuple. Change this function to handle
1234 the branch naming policy used by your Subversion repository.
1235 Thanks to AllMyData.com for sponsoring this work.
1237 2006-03-16 Brian Warner <warner@lothar.com>
1239 * buildbot/scripts/sample.cfg: add python-mode declaration for
1240 vim. Thanks to John Pye for the patch.
1242 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
1243 command line, mention the importance of running 'crontab' as the
1244 buildmaster/buildslave user. Thanks to John Pye for the catch.
1246 2006-03-13 Brian Warner <warner@lothar.com>
1248 * buildbot/status/words.py (IRC): add an optional password=
1249 argument, which will be sent to Nickserv in an IDENTIFY message at
1250 login, to claim the nickname. freenode requires this before the
1251 bot can sent (or reply to) private messages. Thanks to Clement
1252 Stenac for the patch.
1253 * docs/buildbot.texinfo (IRC Bot): document it
1255 * buildbot/status/builder.py (LogFile.merge): don't write chunks
1256 larger than chunkSize. Fixes SF#1349253.
1257 * buildbot/test/test_status.py (Log.testLargeSummary): test it
1258 (Log.testConsumer): update to match new internal chunking behavior
1260 2006-03-12 Brian Warner <warner@lothar.com>
1262 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
1264 * buildbot/test/test_maildir.py (MaildirTest): rename the
1265 'timeout' method, as it collides with trial's internals
1267 * buildbot/scripts/runner.py: add 'buildbot restart' command
1268 (stop): don't sys.exit() out of here, otherwise restart can't work
1269 * docs/buildbot.texinfo (Shutdown): document it
1271 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
1272 * buildbot/status/html.py (Waterfall.__init__): same
1273 * buildbot/process/builder.py (Builder.startBuild): same
1274 * buildbot/process/base.py (BuildRequest): same
1275 * buildbot/sourcestamp.py (SourceStamp): same
1276 * buildbot/scheduler.py (Nightly): same
1278 * buildbot/__init__.py (version): bump to 0.7.2+ while between
1280 * docs/buildbot.texinfo: same
1282 2006-02-17 Brian Warner <warner@lothar.com>
1284 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
1285 * docs/buildbot.texinfo: set version number to match
1286 * NEWS: update for 0.7.2
1288 2006-02-16 Brian Warner <warner@lothar.com>
1290 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
1292 2006-02-09 Brian Warner <warner@lothar.com>
1294 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1295 add text to explain per-build branch parameters
1296 * NEWS: mention --umask
1298 2006-02-08 Brian Warner <warner@lothar.com>
1300 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
1302 (SlaveOptions.optParameters): add --umask, to make it possible to
1303 make buildslave-generated files (including build products) be
1306 * buildbot/slave/bot.py (BuildSlave.startService): same
1308 2006-01-23 Brian Warner <warner@lothar.com>
1310 * buildbot/status/builder.py: urllib.quote() all URLs that include
1311 Builder names, so that builders can include characters like '/'
1312 and ' ' without completely breaking the resulting HTML. Thanks to
1313 Kevin Turner for the patch.
1314 * buildbot/status/html.py: same
1315 * buildbot/test/test_web.py (GetURL.testBuild): match changes
1317 * NEWS: update in preparation for upcoming release
1319 2006-01-18 Brian Warner <warner@lothar.com>
1321 * docs/examples/twisted_master.cfg: update to match the Twisted
1322 buildbot: remove python2.2, switch to exarkun's buildslaves,
1323 disable the .deb builder until we figure out how to build twisted
1324 .debs from SVN, add some ktrace debugging to the OS-X build
1325 process and remove the qt build, remove threadless builders,
1326 change freebsd builder to use landonf's buildslave.
1328 2006-01-12 Brian Warner <warner@lothar.com>
1330 * buildbot/master.py (Manhole.__init__): let port= be a strports
1331 specification string, but handle a regular int for backwards
1332 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
1333 used in master.cfg to limit connections to just the local host.
1334 (BuildMaster.loadConfig): same for c['slavePortnum']
1335 * buildbot/scheduler.py (Try_Userpass.__init__): same
1336 * buildbot/status/client.py (PBListener.__init__): same
1337 * buildbot/status/html.py (Waterfall.__init__): same, for both
1338 http_port and distrib_port. Include backwards-compatibility checks
1339 so distrib_port can be a filename string and still mean unix:/foo
1340 * docs/buildbot.texinfo (Setting the slaveport): document it
1341 (Debug options): same
1342 (HTML Waterfall): same
1345 * buildbot/test/test_config.py (ConfigTest): test it
1347 * buildbot/master.py (BuildMaster.loadConfig): wait for the
1348 slaveport's disownServiceParent deferred to fire before opening
1349 the new one. Fixes an annoying bug in the unit tests.
1351 2006-01-03 Brian Warner <warner@lothar.com>
1353 * buildbot/master.py (BuildMaster): remove the .schedulers
1354 attribute, replacing it with an allSchedulers() method that looks
1355 for all IService children that implement IScheduler. Having only
1356 one parent/child relationship means fewer opportunities for bugs.
1357 (BuildMaster.allSchedulers): new method
1358 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
1359 also fix ugly bug that caused any config-file reload to
1360 half-forget about the earlier Schedulers, causing an exception
1361 when a Change arrived and was handed to a half-connected
1362 Scheduler. The exception was in scheduler.py line 54ish:
1363 self.parent.submitBuildSet(bs)
1364 exceptions.AttributeError: 'NoneType' object has no attribute
1366 (BuildMaster.addChange): update to use allSchedulers()
1368 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
1369 to work properly with twisted-1.3.0, where you must explicitly
1370 include the __implements__ from parent classes
1371 (BaseScheduler.__repr__): make it easier to distinguish distinct
1373 (BaseUpstreamScheduler.__implements__): same
1375 * buildbot/status/builder.py (Status.getSchedulers): update to
1377 * buildbot/test/test_run.py (Run.testMaster): same
1378 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
1379 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
1380 make sure Scheduler instances are left alone when an identical
1381 config file is reloaded
1382 (ConfigElements.testSchedulers): make sure Schedulers are properly
1385 * Makefile (TRIALARGS): my local default Twisted version is now
1386 2.1.0, update the trial arguments accordingly
1388 2005-12-22 Brian Warner <warner@lothar.com>
1390 * docs/examples/twisted_master.cfg: merge changes from pyr: add
1393 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
1394 addChange in the parent class, although I suspect this should be
1395 fixed better in the future.
1397 2005-11-26 Brian Warner <warner@lothar.com>
1399 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
1400 explode when branch==None, thanks to Kevin Turner for the catch
1401 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
1404 * buildbot/__init__.py (version): bump to 0.7.1+ while between
1406 * docs/buildbot.texinfo: same
1408 2005-11-26 Brian Warner <warner@lothar.com>
1410 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
1411 * docs/buildbot.texinfo: set version number to match
1413 2005-11-26 Brian Warner <warner@lothar.com>
1415 * NEWS: update for 0.7.1
1417 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1418 sure that unsubscribe works even if we never sent an ETA update.
1419 Also, don't explode on duplicate unsubscribe.
1420 (BuildStepStatus.addLog): make the convenience "return self"-added
1421 watcher automatically unsubscribe when the Step finishes.
1422 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1423 (BuildStatus.stepStarted): same auto-unsubscribe
1424 (BuilderStatus.buildStarted): same auto-unsubscribe
1426 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1428 (IStatusReceiver.stepStarted): same
1429 (IStatusReceiver.logStarted): same
1431 * buildbot/test/test_run.py (Status): move the Status test..
1432 * buildbot/test/test_status.py (Subscription): .. to here
1434 2005-11-25 Brian Warner <warner@lothar.com>
1436 * NEWS: more updates
1438 * buildbot/locks.py: fix the problem in which loading a master.cfg
1439 file that changes some Builders (but not all of them) can result
1440 in having multiple copies of the same Lock. Now, the real Locks
1441 are kept in a table inside the BotMaster, and the Builders/Steps
1442 use "LockIDs", which are still instances of MasterLock and
1443 SlaveLock. The real Locks are instances of the new RealMasterLock
1444 and RealSlaveLock classes.
1445 * buildbot/master.py (BotMaster.getLockByID): new method to
1446 convert LockIDs into real Locks.
1447 * buildbot/process/base.py (Build.startBuild): convert LockIDs
1448 into real Locks before building
1449 * buildbot/process/step.py (BuildStep.startStep): same
1450 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1451 exercises the problem
1454 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1455 what Schedulers are available
1457 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1458 work by Dobes Vandermeer and hacked mercilessly by me. This offers
1459 'cron'-style build scheduling at certain times of day, week,
1461 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1463 * buildbot/scheduler.py (Scheduler): change fileIsImportant
1464 handling: treat self.fileIsImportant more as an attribute that
1465 contains a callable than as a method. If the attribute is None,
1466 don't call it and assume all filenames are important. It is still
1467 possible to provide a fileIsImportant method in a subclass,
1469 (AnyBranchScheduler): handle fileIsImportant=None, previously it
1471 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1472 test using AnyBranchScheduler with fileIsImportant=None
1474 2005-11-24 Brian Warner <warner@lothar.com>
1476 * buildbot/test/test_config.py (StartService): don't claim a fixed
1477 port number, instead set slavePort=0 on the first pass, figure out
1478 what port was allocated, then switch to a config file that uses
1481 * buildbot/master.py (BuildMaster.loadConfig): close the old
1482 slaveport before opening the new one, because unit tests might
1483 replace slavePort=0 with the same allocated portnumber, and if we
1484 don't wait for the old port to close first, we get a "port already
1485 in use" error. There is a tiny race condition here, but the only
1486 threat is from other programs that bind (statically) to the same
1487 port number we happened to be allocated, and only if those
1488 programs use SO_REUSEADDR, and only if they get control in between
1491 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
1493 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
1494 deleted ChangeSources before adding any new ones
1495 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
1496 compare_attrs, to make sure that a config-file reload does not
1497 unnecessarily replace an unmodified ChangeSource instance
1498 * buildbot/test/test_config.py (ConfigTest.testSources): update
1500 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
1501 mean "don't build anything", and add a warning if it gets used
1502 because it isn't actually useful.
1504 * contrib/svn_buildbot.py: update example usage to match the port
1505 number that gets used by the PBChangeSource
1506 * buildbot/scripts/sample.cfg: add example of PBChangeSource
1508 2005-11-22 Brian Warner <warner@lothar.com>
1510 * NEWS: start collecting items for next release
1512 * buildbot/process/step.py (SVN.computeSourceRevision): assume
1513 revisions are strings
1514 (P4Sync.computeSourceRevision): same
1516 * buildbot/status/html.py (StatusResourceBuild.body): add a link
1517 to the Buildbot's overall status page
1518 (StatusResourceBuilder.body): same
1520 2005-11-15 Brian Warner <warner@lothar.com>
1522 * buildbot/master.py (BuildMaster.loadConfig): serialize the
1523 config-file loading, specifically to make sure old StatusTargets
1524 are finished shutting down before new ones start up (thus
1525 resolving a bug in which changing the Waterfall object would fail
1526 because both new and old instances were claiming the same
1527 listening port). Also load new Schedulers after all the new
1528 Builders are set up, in case they fire off a new build right away.
1529 * buildbot/test/test_config.py (StartService): test it
1531 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
1532 the branch name to the mail body
1534 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
1535 Without it, a config-file reload fails to update an existing
1537 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
1538 username/passwd to compare_attrs, for the same reason
1539 * buildbot/status/html.py (Waterfall): add favicon to
1540 compare_attrs, same reason
1542 2005-11-05 Brian Warner <warner@lothar.com>
1544 * buildbot/scripts/tryclient.py (createJobfile): stringify the
1545 baserev before stuffing it in the jobfile. This resolves problems
1546 under SVN (and probably Arch) where revisions are expressed as
1547 numbers. I'm inclined to use string-based revisions everywhere in
1548 the future, but this fix should be safe for now. Thanks to Steven
1549 Walter for the patch.
1551 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
1552 binary mode when opening pickle files, to make windows work
1553 better. Thanks to Dobes Vandermeer for the catch.
1554 * buildbot/status/builder.py (BuildStatus.saveYourself): same
1555 (BuilderStatus.getBuildByNumber): same
1556 (Status.builderAdded): same
1557 * buildbot/master.py (BuildMaster.loadChanges): same
1559 * buildbot/util.py (Swappable): delete unused leftover code
1561 * buildbot/process/step.py (SVN): when building on a non-default
1562 branch, add the word "[branch]" to the VC step's description, so
1563 it is obvious that we're not building the usual stuff. Likewise,
1564 when we are building a specific revision, add the text "rNNN" to
1565 indicate what that revision number is. Thanks to Brad Hards and
1566 Nathaniel Smith for the suggestion.
1567 (Darcs.startVC): same
1568 (Arch.startVC): same
1569 (Bazaar.startVC): same
1571 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
1572 typo, caught by Mark Dillavou, closes SF#1216636.
1574 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
1575 about a test to add some day
1577 * docs/examples/twisted_master.cfg: update: bot1 can now handle
1578 the 'full-2.3' build, and the 'reactors' build is now run under
1579 python-2.4 because the buildslave no longer has gtk/etc bindings
1580 for earlier versions.
1582 2005-11-03 Brian Warner <warner@lothar.com>
1584 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
1585 method, takes an IBuildStatus and rebuilds it. It might make more
1586 sense to add this to IBuildControl instead, but that instance goes
1587 away completely once the build has finished, and resubmitting
1588 builds can take place weeks later.
1589 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1590 * buildbot/status/html.py (StatusResourceBuild): also stash an
1591 IBuilderControl so we can use resubmitBuild.
1592 (StatusResourceBuild.body): render "resubmit" button if we can.
1593 Also add hrefs for each BuildStep
1594 (StatusResourceBuild.rebuild): add action for "resubmit" button
1595 (StatusResourceBuilder.getChild): give it an IBuilderControl
1597 * buildbot/status/builder.py (Status.getURLForThing): change the
1598 URL for BuildSteps to have a "step-" prefix, so the magic URLs
1599 that live as targets of buttons like "stop" and "rebuild" can't
1601 * buildbot/status/builder.py (Status.getURLForThing): same
1602 * buildbot/status/html.py (StatusResourceBuild.getChild): same
1603 (StepBox.getBox): same
1604 * buildbot/test/test_web.py (GetURL): same
1607 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1608 exclusivity checks after Source.__init__ upcall, so misspelled
1609 arguments will be reported more usefully
1610 (Darcs.__init__): same
1612 2005-10-29 Brian Warner <warner@lothar.com>
1614 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1615 builder. Move the Try scheduler off to a separate port.
1617 2005-10-27 Brian Warner <warner@lothar.com>
1619 * buildbot/clients/gtkPanes.py
1620 (TwoRowClient.remote_builderRemoved): disappearing Builders used
1621 to cause the app to crash, now they don't.
1623 * buildbot/clients/debug.py: display the buildmaster's location
1624 in the window's title bar
1626 2005-10-26 Brian Warner <warner@lothar.com>
1628 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
1629 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
1630 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
1632 * buildbot/status/html.py (td): put a single non-breaking space
1633 inside otherwise empty <td> elements, as a workaround for buggy
1634 browsers which would optimize them away (along with any associated
1635 styles, like the kind that create the waterfall grid borders).
1636 Patch from Frerich Raabe.
1638 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
1639 argv-list as an argument, defaulting to ["-to"], which is
1640 appropriate for the Trial that comes with Twisted-2.1.0 and
1641 earlier. The Trial in current Twisted SVN wants
1642 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1643 defaults to an empty list.
1644 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1645 match it, now that trialMode= is a list instead of a single string
1647 * buildbot/__init__.py (version): bump to 0.7.0+ while between
1649 * docs/buildbot.texinfo: same
1651 2005-10-24 Brian Warner <warner@lothar.com>
1653 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1654 * docs/buildbot.texinfo: set version number to match
1656 2005-10-24 Brian Warner <warner@lothar.com>
1658 * README: update for 0.7.0
1660 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1662 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1663 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1664 send the branch= argument unless the user really provided one, to
1665 retain compatibility with older buildmasters that don't accept
1667 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1670 * docs/buildbot.texinfo: update lots of stuff
1672 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1673 to the 'buildbot sendchange' command
1674 * buildbot/clients/sendchange.py (Sender.send): same
1675 * buildbot/changes/pb.py (ChangePerspective): same
1676 * buildbot/test/test_changes.py (Sender.testSender): test it
1678 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1679 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1680 for consistency with other BuildStep arguments that use camelCase.
1681 Well, at least more of them use camelCase (like flunkOnWarnings)
1682 than don't.. I wish I'd picked one style and stuck with it
1683 earlier. Annoying, but it's best done before the release, since
1684 these arguments didn't exist at all in 0.6.6 .
1686 * buildbot/test/test_vc.py (SVN.testCheckout): same
1687 (Darcs.testPatch): same
1688 * docs/buildbot.texinfo (SVN): document the change
1689 (Darcs): same, add some build-on-branch docs
1690 * docs/examples/twisted_master.cfg: match change
1692 * buildbot/process/step.py (BuildStep): rename
1693 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1694 how it is normally used.
1695 * buildbot/test/test_steps.py (Version.checkCompare): same
1697 * buildbot/process/step.py (CVS.startVC): refuse to build
1698 update/copy -style builds on a non-default branch with an old
1699 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1700 concern is that it will do a VC 'update' in an existing tree when
1701 it is supposed to be switching branches (and therefore clobbering
1702 the tree to do a full checkout), thus building the wrong source.
1703 This used to be a warning, but I think the confusion it is likely
1704 to cause warrants making it an error.
1705 (SVN.startVC): same, also make mode=export on old slaves an error
1706 (Darcs.startVC): same
1707 (Git.startVC): improve error message for non-Git-enabled slaves
1708 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1709 specific revision is built on a slave that doesn't pay attention
1710 to args['revision'], because for slowly-changing trees it will
1711 probably do the right thing, and because we have no way to tell
1712 whether we're asking it to build the most recent version or not.
1713 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1715 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1716 that 'master' is in host:portnum format, to catch errors sooner
1718 2005-10-23 Brian Warner <warner@lothar.com>
1720 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1721 when creating the list of warning messages, include the line
1722 immediately after each WARNING: line, since that's usually where
1723 the file and line number wind up.
1725 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1730 2005-10-22 Brian Warner <warner@lothar.com>
1732 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1733 patch from Brad Hards
1734 * buildbot/status/classic.css: same
1735 * buildbot/test/test_web.py (Waterfall): match changes
1737 * buildbot/test/test_steps.py (BuildStep.setUp): set
1738 nextBuildNumber so the test passes
1739 * buildbot/test/test_status.py (MyBuilder): same
1741 * buildbot/status/html.py (StatusResourceBuild.body): revision
1742 might be numeric, so stringify it before html-escapifying it
1743 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1744 timer for the upcoming build
1745 * buildbot/status/classic.css: add background-color attributes for
1746 offline/waiting/building classes
1748 * buildbot/status/builder.py (BuildStatus): derive from
1749 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1750 the default (i.e. unknown) .slavename to "???" instead of None,
1751 since even unknown slavenames need to be printed eventually.
1752 (BuilderStatus): also derive from styles.Versioned . More
1753 importantly, determine .nextBuildNumber at creation/unpickling
1754 time by scanning the directory of saved BuildStatus instances and
1755 choosing one larger than the highest-numbered one found. This
1756 should fix the problem where random errors during upgrades cause
1757 the buildbot to forget about earlier builds. .nextBuildNumber is
1758 no longer stored in the pickle.
1759 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1760 at least log the error. Also call Builder.determineNextBuildNumber
1761 once the basedir is set.
1763 * buildbot/master.py (BuildMaster.loadChanges): do
1764 styles.doUpgrade afterwards, in case I decide to make Changes
1765 derived from styles.Versioned some day and forget to make this
1769 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1770 when running under older pythons (<2.3) in which the shlex module
1771 doesn't have a 'split' function.
1773 * buildbot/process/step.py (ShellCommand.start): make
1774 errorMessages= be a list of strings to stuff in the log before the
1775 command actually starts. This makes it easier to flag multiple
1776 warning messages, e.g. when the Source steps have to deal with an
1778 (CVS.startVC): handle slaves that don't handle multiple branches
1779 by switching into 'clobber' mode
1780 (SVN.startVC): same. Also reject branches without base_url
1781 (Darcs.startVC): same. Also reject revision= in older slaves
1782 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1783 (Bazaar.startVC): same, and test for baz separately than for arch
1785 * buildbot/slave/commands.py (cvs_ver): document new features
1787 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1788 (BuildStep.slaveVersionNewEnough): more useful utility method
1789 * buildbot/test/test_steps.py (Version): start testing it
1791 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1792 the 'force' command requires python2.3, for the shlex.split method
1794 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1795 since we don't use it anymore. The Twisted buildbot uses a
1798 2005-10-21 Brian Warner <warner@lothar.com>
1800 * buildbot/process/process_twisted.py: rework all BuildFactory
1801 classes to take a 'source' step as an argument, instead of
1802 building up the SVN instance in the factory.
1803 * docs/examples/twisted_master.cfg: enable build-on-branch by
1804 providing a base_url and default_branch
1806 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1807 control over --branch and --revision, not that they are always
1809 * buildbot/status/html.py (StatusResourceBuilder.force): same
1810 (StatusResourceBuild.body): display SourceStamp components
1812 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1813 IRC 'force' command, so it can be shared with an eventual
1814 command-line-tool 'buildbot force' mode.
1815 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1817 2005-10-20 Brian Warner <warner@lothar.com>
1819 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1821 * docs/examples/twisted_master.cfg: update to use Schedulers
1823 * buildbot/scripts/sample.cfg: update with Schedulers
1825 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1826 method specifically for use by HTML "force build" button and the
1827 IRC "force" command. Raises an immediate error if there are no
1829 (IBuilderControl.requestBuild): make this just submit a build, not
1830 try to check for existing slaves or set up any when-finished
1831 Deferreds or anything.
1832 * buildbot/process/builder.py (BuilderControl): same
1833 * buildbot/status/html.py (StatusResourceBuilder.force): same
1834 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1835 * buildbot/test/test_slaves.py: same
1836 * buildbot/test/test_web.py: same
1838 2005-10-19 Brian Warner <warner@lothar.com>
1840 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1841 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1843 2005-10-18 Brian Warner <warner@lothar.com>
1845 * buildbot/status/html.py: provide 'status' argument to most
1846 StatusResourceFOO objects
1847 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1848 and Logfiles" section to make the Build page into a more-or-less
1849 comprehensive source of status information about the build
1851 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1852 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1854 2005-10-17 Brian Warner <warner@lothar.com>
1856 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1857 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1858 out what to do about other projects: the correct options for
1859 recent Twisteds will not work for older ones.
1861 2005-10-15 Brian Warner <warner@lothar.com>
1863 * buildbot/status/builder.py (Status.getURLForThing): add method
1864 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1865 use this in email/IRC status clients to make them more useful, by
1866 providing the end user with hints on where to learn more about the
1867 object being reported on.
1868 * buildbot/test/test_web.py (GetURL): tests for it
1870 2005-10-14 Brian Warner <warner@lothar.com>
1872 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1873 fix bug resulting from deferredResult changes
1875 2005-10-13 Brian Warner <warner@lothar.com>
1877 * buildbot/test/test_changes.py: remove use of deferredResult
1878 * buildbot/test/test_config.py: same
1879 * buildbot/test/test_control.py: same
1880 * buildbot/test/test_status.py: same
1881 * buildbot/test/test_vc.py: this is the only remaining use, since
1882 it gets used at module level. This needs to be replaced by some
1883 sort of class-level run-once routine.
1885 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1887 * lots: implement multiple slaves per Builder, which means multiple
1888 current builds per Builder. Some highlights:
1889 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1890 of (state,currentBuilds) instead of (state,currentBuild)
1891 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1892 (IBuildStatus.getSlavename): new method, so you can tell which
1893 slave got used. This only gets set when the build completes.
1894 (IBuildRequestStatus.getBuilds): new method
1896 * buildbot/process/builder.py (SlaveBuilder): add a .state
1897 attribute to track things like ATTACHING and IDLE and BUILDING,
1899 (Builder): .. the .slaves attribute here, which has been turned
1900 into a simple list of available slaves. Added a separate
1901 attaching_slaves list to track ones that are not yet ready for
1903 (Builder.fireTestEvent): put off the test-event callback for a
1904 reactor turn, to make tests a bit more consistent.
1905 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1906 ping fails due to an exception. This needs work, I'm worried that
1907 a code error could lead to a constantly re-connecting slave.
1908 Especially since I'm trying to move to a distinct remote_ping
1909 method, separate from the remote_print that we currently use.
1910 (BuilderControl.requestBuild): return a convenience Deferred that
1911 provides an IBuildStatus when the build finishes.
1912 (BuilderControl.ping): ping all connected slaves, only return True
1913 if they all respond.
1915 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1916 reconnect when we shut down.
1918 * buildbot/status/builder.py: implement new methods, convert
1919 one-build-at-a-time methods to handle multiple builds
1920 * buildbot/status/*.py: do the same in all default status targets
1921 * buildbot/status/html.py: report the build's slavename in the
1922 per-Build page, report all buildslaves on the per-Builder page
1924 * buildbot/test/test_run.py: update/create tests
1925 * buildbot/test/test_slaves.py: same
1926 * buildbot/test/test_scheduler.py: remove stale test
1928 * docs/buildbot.texinfo: document the new builder-specification
1929 'slavenames' parameter
1931 2005-10-12 Brian Warner <warner@lothar.com>
1933 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1934 report failure correctly, causing Dependent builds to run when
1935 they shouldn't have.
1936 * buildbot/status/builder.py (BuildSetStatus): same
1937 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1938 (Set.testSuccess): test the both-pass case too
1939 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1940 fix this test: it was ending too early, masking the failure before
1941 (Logger): specialized StatusReceiver to make sure the dependent
1942 builds aren't even started, much less completed.
1944 2005-10-07 Brian Warner <warner@lothar.com>
1946 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1947 bot.SlaveBuilder being disowned in the middle of a build
1949 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1950 this inherit from StatusReceiver. Also upcall in __init__. This
1951 fixes the embarrasing crash when the new buildSetSubmitted method
1952 is invoked and Waterfall/etc don't implement their own.
1953 * buildbot/test/test_run.py: add a TODO note about a test to catch
1954 just this sort of thing.
1956 * buildbot/process/builder.py (Builder.attached): remove the
1957 already-attached warning, this situation is normal. Add some
1958 comments explaining it.
1960 2005-10-02 Brian Warner <warner@lothar.com>
1962 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1963 OverflowError when setting up dnotify, because some 64-bit systems
1964 have problems with signed-vs-unsigned constants and trip up on the
1965 DN_MULTISHOT flag. Patch from Brad Hards.
1967 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1969 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1970 progressMetrics, description, descriptionDone to the 'parms' list,
1971 and make use the 'parms' list from the implementation class
1972 instead of only BuildStep to initialize the parameters. This
1973 allows buildbot.process.factory.s() to initialize all the parms,
1974 not just those defined in directly by BuildStep.
1976 2005-09-03 Brian Warner <warner@lothar.com>
1978 * NEWS: start adding items for the next release
1980 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1981 python2.2 tests, change 'Quick' builder to only use python2.3
1983 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1985 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1986 the "Ping Builder" button if the build control is available; the
1987 user sees an exception otherwise
1989 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1991 2005-09-01 Brian Warner <warner@lothar.com>
1993 * buildbot/interfaces.py (IBuilderStatus.getState): update
1994 signature, point out that 'build' can be None
1995 (IBuildStatus.getETA): point out ETA can be none
1997 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1999 * buildbot/status/words.py (IrcStatusBot.emit_status): same
2001 2005-08-31 Brian Warner <warner@lothar.com>
2003 * buildbot/status/base.py (StatusReceiver.builderChangedState):
2004 update to match correct signature: removed 'eta' argument
2005 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
2007 2005-08-30 Brian Warner <warner@lothar.com>
2009 * buildbot/status/builder.py (LogFile): remove the assertion that
2010 blows up when you try to overwrite an existing logfile, instead
2011 just emit a warning. This case gets hit when the buildmaster is
2012 killed and doesn't get a chance to write out the serialized
2013 BuilderStatus object, so the .nextBuildNumber attribute gets out
2016 * buildbot/scripts/runner.py (sendchange): add --revision_file to
2017 the 'buildbot sendchange' arguments, for the Darcs context file
2018 * docs/buildbot.texinfo (sendchange): document it
2020 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
2021 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
2022 (IStatus.getSchedulers): new method
2023 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
2024 (Status.getSchedulers): implement
2025 * buildbot/process/builder.py (Builder): maintain
2026 BuilderStatus.pendingBuilds
2027 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
2028 (TryBase.addChange): Try schedulers should ignore Changes
2030 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
2031 for 'try' on CVS/SVN
2032 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
2034 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
2035 report status properly.
2036 (Try.createJob): implement unique buildset IDs
2038 * buildbot/status/client.py (StatusClientPerspective): add a
2039 perspective_getBuildSets method for the benefit of jobdir-style
2041 * docs/buildbot.texinfo (try): more docs
2042 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
2045 2005-08-18 Brian Warner <warner@lothar.com>
2047 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
2048 actually work. It's functional but still kind of clunky. Also, it
2049 only works with the pb-style.. needs to be made to work with the
2052 * buildbot/status/client.py (RemoteBuildSet): new class
2053 (RemoteBuildRequest): same
2054 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
2055 object, not the internal BuildStatus object.
2056 (RemoteBuild.remote_subscribe): new method to subscribe to builds
2057 outside of the usual buildStarted() return value.
2058 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
2060 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
2061 (Try_Userpass_Perspective.perspective_try): return a remotely
2062 usable BuildSetStatus object
2064 * buildbot/interfaces.py (IBuildStatus): remove obsolete
2065 isStarted()/waitUntilStarted()
2067 2005-08-16 Brian Warner <warner@lothar.com>
2069 * buildbot/status/builder.py: implement IBuildSetStatus and
2070 IBuildRequestStatus, wire them into place.
2071 * buildbot/buildset.py: same. Add ID, move wait-until-finished
2072 methods into the BuildSetStatus object.
2073 * buildbot/interfaces.py: same
2074 (IStatus.getBuildSets): new method to get pending BuildSets
2075 (IStatusReceiver.buildsetSubmitted): new method which hears about
2077 * buildbot/master.py (BuildMaster.submitBuildSet): same
2078 * buildbot/process/base.py (BuildRequest): same, replace
2079 waitUntilStarted with subscribe/unsubscribe
2080 * buildbot/process/builder.py (BuilderControl.forceBuild): use
2081 subscribe instead of waitUntilStarted
2082 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
2084 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
2086 * buildbot/test/test_buildreq.py: update for new code
2087 * buildbot/test/test_control.py (Force.testRequest): same
2090 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
2091 for Darcs to not use the tempfile module, so it works under
2092 python-2.2 too. We really didn't need the full cleverness of that
2093 module, since the slave has exclusive control of its own builddir.
2095 2005-08-15 Brian Warner <warner@lothar.com>
2097 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
2098 for CVS trees. It doesn't work for non-trunk branches,
2100 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
2103 * Makefile: make it easier to test against python2.2
2105 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
2106 tearDown2, so things like Arch can unregister archives as they're
2107 shutting down. The previous subclass-override-tearDown technique
2108 resulted in a nested maybeWait() and test failures under
2111 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
2112 where we can (Arch), add a branch= argument to set the branch used
2114 (BazExtractor): extract the branch too
2115 (TlaExtractor): same
2116 * buildbot/scripts/runner.py (TryOptions): add --branch
2117 * docs/buildbot.texinfo (try): document --branch/try_branch
2119 * buildbot/slave/commands.py (Darcs): implement get-revision for
2120 Darcs, so that 'try' will work. This requires the tempfile module
2123 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
2124 of revisions, branches, and 'try' in the process.
2126 2005-08-11 Brian Warner <warner@lothar.com>
2128 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
2129 this, it got broken at some point in the last few releases
2130 * buildbot/status/words.py (IrcBuildRequest): reply was broken
2131 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
2132 specifically the removal of ETA information from the tuple
2134 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
2137 * docs/buildbot.texinfo (try): document both --builder and
2138 'try_builders' in .buildbot/options
2139 * buildbot/scripts/runner.py (TryOptions): add --builder,
2140 accumulate the values into opts['builders']
2141 * buildbot/scripts/tryclient.py (Try.__init__): set builders
2142 * buildbot/test/test_runner.py (Try): add some quick tests to make
2143 sure 'buildbot try --options' and .buildbot/options get parsed
2144 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2145 use --builder control
2147 * docs/buildbot.texinfo (try): add --port argument to PB style
2149 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
2150 actual SourceStamp. Still need to extract a branch name, somehow.
2151 (Try): finish implementing the try client side, still need a UI
2152 for specifying which builders to use
2153 (Try.getopt): factor our options/config-file reading
2154 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
2156 * buildbot/test/test_vc.py: match SourceStampExtractor change
2158 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
2159 causes the twisted log to be sent to stderr
2161 * buildbot/scheduler.py (Try_Userpass): implement the PB style
2163 2005-08-10 Brian Warner <warner@lothar.com>
2165 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
2166 style is 90% done, still missing status reporting or waiting for
2167 the buildsets to finish, and it is completely untested.
2169 * buildbot/trybuild.py: delete file, move contents to ..
2170 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
2171 * buildbot/test/test_vc.py: match the move
2173 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
2174 of the TryScheduler, no buildsetID or status-tracking support yet
2175 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
2177 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
2178 possible to set the basedir after __init__ time, so it is easier
2179 to use as a Service-child of the BuildMaster instance
2181 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
2182 that delivers messages to its Service parent instead of requiring
2183 a subclass to be useful. This turns out to be much easier to build
2186 * buildbot/scripts/tryclient.py (createJob): utility code to
2187 create jobfiles, will eventually be used by 'buildbot try'
2189 2005-08-08 Brian Warner <warner@lothar.com>
2191 * docs/buildbot.texinfo (try): add docs on the
2192 as-yet-unimplemented Try scheduler
2194 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
2195 * buildbot/test/test_scheduler.py: .. here
2196 (Scheduling.testTryJobdir): add placeholder test for 'try'
2198 * buildbot/test/test_status.py (Log.testMerge3): update to match new
2199 addEntry merging (>=chunkSize) behavior
2200 (Log.testConsumer): update to handle new callLater(0) behavior
2202 * buildbot/test/test_web.py: rearrange tests a bit, add test for
2203 both the MAX_LENGTH bugfix and the resumeProducing hang.
2205 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
2206 put off the actual resumeProducing for a moment with
2207 reactor.callLater(0). This works around a twisted-1.3.0 bug which
2208 causes large logfiles to hang midway through.
2210 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
2211 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
2212 and to improve memory usage when streaming the file out to a web
2214 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
2215 make this work cleanly
2217 2005-08-03 Brian Warner <warner@lothar.com>
2219 * buildbot/trybuild.py: new file for 'try' utilities
2220 (getSourceStamp): run in a tree, find out the baserev+patch
2221 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
2222 implemented for SVN and Darcs, still working on Arch. I don't know
2223 how to make CVS work yet.
2225 * docs/buildbot.texinfo: document the 'buildbot' command-line
2226 tool, including the not-yet-implemented 'try' feature, and the
2227 in-flux .buildbot/ options directory.
2229 2005-07-20 Brian Warner <warner@lothar.com>
2231 * buildbot/locks.py: added temporary id() numbers to Lock
2232 descriptions, to track down a not-really-sharing-the-Lock bug
2234 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
2236 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
2237 needed for python2.2 compatibility
2238 * buildbot/test/test_vc.py: python2.2 compatibility: generators
2239 are from the __future__
2241 2005-07-19 Brian Warner <warner@lothar.com>
2243 * buildbot/master.py (BuildMaster.loadConfig): give a better error
2244 message when schedulers use unknown builders
2246 * buildbot/process/builder.py (Builder.compareToSetup): make sure
2247 SlaveLock('name') and MasterLock('name') are distinct
2249 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
2250 c['schedulers'] in such a way that we can actually accept
2252 * buildbot/test/test_config.py: check it
2254 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
2255 utility method to *all* the Schedulers
2256 (Periodic.listBuilderNames): same
2258 * docs/buildbot.texinfo (Interlocks): update chapter to match
2261 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
2262 to make sure that c['sources'], c['schedulers'], and c['status']
2263 are all lists of the appropriate objects, and that the Schedulers
2264 all point to real Builders
2265 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
2266 'listBuilderNames' utility method to support this
2267 * buildbot/scheduler.py: implement the utility method
2268 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
2270 * docs/buildbot.texinfo: add some @cindex entries
2272 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
2273 if it wasn't already set: most tla commands will fail unless one
2275 (Arch.createRepository): and disable bazaar's revision cache, since
2276 they cause test failures (the multiple repositories we create all
2277 interfere with each other through the cache)
2279 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
2280 bring it properly up to date with twisted-2.0 test guidelines
2282 * buildbot/master.py (BuildMaster): remove references to old
2283 'interlock' module, this caused a bunch of post-merge test
2285 * buildbot/test/test_config.py: same
2286 * buildbot/process/base.py (Build): same
2288 * buildbot/test/test_slaves.py: stubs for new test case
2290 * buildbot/scheduler.py: add test-case-name tag
2291 * buildbot/test/test_buildreq.py: same
2293 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
2294 unnecessary init code
2295 (Bot.remote_setBuilderList): match it
2297 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
2299 * buildbot/changes/mail.py (parseSyncmail): update comment
2301 * buildbot/test/test_slavecommand.py: disable Shell tests on
2302 platforms that don't suport IReactorProcess
2304 * buildbot/status/builder.py (LogFile): remove the 't' mode from
2305 all places where we open logfiles. It causes OS-X to open the file
2306 in some weird mode that that prevents us from mixing reads and
2307 writes to the same filehandle, which we depend upon to implement
2308 _generateChunks properly. This change doesn't appear to break
2309 win32, on which "b" and "t" are treated differently but a missing
2310 flag seems to be interpreted as "t".
2312 2005-07-18 Brian Warner <warner@lothar.com>
2314 * buildbot/slave/commands.py (ShellCommand): overhaul
2315 error-handling code, to try and make timeout/interrupt work
2316 properly, and make win32 happier
2317 * buildbot/test/test_slavecommand.py: clean up, stop using
2318 reactor.iterate, add tests for timeout and interrupt
2319 * buildbot/test/sleep.py: utility for a new timeout test
2321 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
2322 code from the local-usebranches branch
2324 2005-07-17 Brian Warner <warner@lothar.com>
2326 * buildbot/process/process_twisted.py
2327 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
2328 minutes, to match the other twisted BuildFactories, and don't
2329 excuse failures in c/qt/win32 reactors any more.
2331 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
2332 'freebsd' builders, since the buildslaves have been unavailable
2335 2005-07-13 Brian Warner <warner@lothar.com>
2337 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
2338 build-on-branch feature
2340 * buildbot/process/step.py (Darcs.__init__): add base_url and
2341 default_branch arguments, just like SVN
2342 (Arch.__init__): note that the version= argument is really the
2345 * buildbot/slave/commands.py (SourceBase): keep track of the
2346 repository+branch that was used for the last checkout in
2347 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
2348 match, we clobber the directory and perform a fresh checkout
2349 rather than trying to do an in-place update. This should protect
2350 us against trying to get to branch B by doing an update in a tree
2351 obtained from branch A.
2352 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
2353 (SVN.setup): same, just the svnurl
2354 (Darcs.setup): same, just the repourl
2355 (Arch.setup): same, arch coordinates (url), version, and
2356 buildconfig. Also pull the buildconfig from the args dictionary,
2357 which we weren't doing before, so the build-config was effectively
2359 (Arch.sourcedirIsUpdateable): don't try to update when we're
2360 moving to a specific revision: arch can't go backwards, so it is
2361 safer to just clobber the tree and checkout a new one at the
2363 (Bazaar.setup): same sourcedata as Arch
2365 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2366 use maybeWait, to work with twisted-1.3.0 and twcompat
2367 (Dependencies.testRun_Pass): same
2369 * buildbot/test/test_vc.py: rearrange, cleanup
2371 * buildbot/twcompat.py: add defer.waitForDeferred and
2372 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
2373 can work under twisted-1.3.0 .
2375 * buildbot/test/test_vc.py: rewrite. The sample repositories are
2376 now created at setUp time. This increases the runtime of the test
2377 suite considerably (from 91 seconds to 151), but it removes the
2378 need for an offline tarball, which should solve a problem I've
2379 seen where the test host has a different version of svn than the
2380 tarball build host. The new code also validates that mode=update
2381 really picks up recent commits. This approach will also make it
2382 easier to test out branches, because the code which creates the VC
2383 branches is next to the code which uses them. It will also make it
2384 possible to test some change-notification hooks, by actually
2385 performing a VC commit and watching to see the ChangeSource get
2388 2005-07-12 Brian Warner <warner@lothar.com>
2390 * docs/buildbot.texinfo (SVN): add branches example
2391 * docs/Makefile (buildbot.ps): add target for postscript manual
2393 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
2394 * buildbot/test/test_locks.py: same
2396 * buildbot/process/step.py (Darcs): comment about default branches
2398 * buildbot/master.py (BuildMaster.loadConfig): don't look for
2399 c['interlocks'] in the config file, complain if it is present.
2400 Scan all locks in c['builders'] to make sure the Locks they use
2402 * buildbot/test/test_config.py: remove old c['interlocks'] test,
2403 add some tests to check for non-uniquely-named Locks
2404 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
2405 since the unique-Lock validation code requires it now
2407 * buildbot/locks.py: fix test-case-name
2409 * buildbot/interlock.py: remove old file
2411 2005-07-11 Brian Warner <warner@lothar.com>
2413 * buildbot/test/test_interlock.py: rename to..
2414 * buildbot/test/test_locks.py: .. something shorter
2416 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2417 versions (after 2.0.1) changed internet.TCPClient to shut down the
2418 connection in stopService. Change the code to handle this
2421 * buildbot/process/base.py (Build): handle whole-Build locks
2422 * buildbot/process/builder.py (Builder.compareToSetup): same
2423 * buildbot/test/test_interlock.py: make tests work
2425 * buildbot/process/step.py (BuildStep.startStep): complain if a
2426 Step tries to claim a lock that's owned by its own Build
2427 (BuildStep.releaseLocks): typo
2429 * buildbot/locks.py (MasterLock): use ComparableMixin so config
2430 file reloads don't replace unchanged Builders
2432 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2433 rewrite to cover new Locks instead of old c['interlocks']
2434 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2438 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2439 start the master and connect the buildslave
2441 * buildbot/process/step.py (FailingDummy.done): finish with a
2442 FAILURE status rather than raising an exception
2444 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2445 stringify a BuildRequest.reason that is None
2447 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2449 * buildbot/status/builder.py (BuildSetStatus): implement enough to
2450 allow scheduler.Dependent to work
2451 * buildbot/buildset.py (BuildSet): set .reason and .results
2453 * buildbot/test/test_interlock.py (Locks.setUp): connect both
2454 slaves, to make the test stop hanging. It still fails, of course,
2455 because I haven't even started to implement Locks.
2457 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2459 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2460 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2461 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2462 (Dependent): new class for downstream build dependencies
2463 * buildbot/test/test_dependencies.py: tests (still failing)
2465 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2467 2005-07-07 Brian Warner <warner@lothar.com>
2469 * buildbot/test/runutils.py (RunMixin): factored this class out..
2470 * buildbot/test/test_run.py: .. from here
2471 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2472 added new buildbot.locks tests (which all hang right now)
2473 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2474 * buildbot/process/step.py: claim/release per-BuildStep locks
2476 * docs/Makefile: add 'buildbot.html' target
2478 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
2479 interpreted as "HEAD", so that all VC steps can accept branch=None
2480 and have it mean the "default branch".
2482 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
2484 2005-07-07 Brian Warner <warner@lothar.com>
2486 * docs/examples/twisted_master.cfg: update to match current usage
2488 * docs/buildbot.texinfo (System Architecture): comment out the
2489 image, it doesn't exist yet and just screws up the HTML manual.
2491 2005-07-05 Brian Warner <warner@lothar.com>
2493 * debian/.cvsignore: oops, missed one. Removing leftover file.
2495 2005-06-17 Brian Warner <warner@lothar.com>
2497 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
2498 changed its output in 1.2.0, don't mistakenly think that the
2499 subversion we find isn't capable of supporting our tests.
2501 * debian/*: remove the debian/ directory and its contents, to make
2502 life easier for the proper Debian maintainer
2504 * Makefile (release): same
2506 2005-06-07 Brian Warner <warner@lothar.com>
2508 * everything: create a distinct SourceStamp class to replace the
2509 ungainly 4-tuple, let it handle merging instead of BuildRequest.
2510 Changed the signature of Source.startVC to include the revision
2511 information (instead of passing it through self.args). Implement
2512 branches for SVN (now only Darcs/Git is missing support). Add more
2515 2005-06-06 Brian Warner <warner@lothar.com>
2517 * everything: rearrange build scheduling. Create a new Scheduler
2518 object (configured in c['schedulers'], which submit BuildSets to a
2519 set of Builders. Builders can now use multiple slaves. Builds can
2520 be run on alternate branches, either requested manually or driven
2521 by changes. This changed some of the Status classes. Interlocks
2522 are out of service until they've been properly split into Locks
2523 and Dependencies. treeStableTimer, isFileImportant, and
2524 periodicBuild have all been moved from the Builder to the
2526 (BuilderStatus.currentBigState): removed the 'waiting' and
2527 'interlocked' states, removed the 'ETA' argument.
2529 2005-05-24 Brian Warner <warner@lothar.com>
2531 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
2532 erroneously abandons the connection (in clientConnectionFailed)
2533 for non-UserErrors, which means that if we lose the connection due
2534 to a network problem or a timeout, we'll never try to reconnect.
2535 Fix this by not upcalling to the buggy parent method. Note:
2536 twisted-2.0 fixes this, but the function only has 3 lines so it
2537 makes more sense to copy it than to try and detect the buggyness
2538 of the parent class. Fixes SF#1207588.
2540 * buildbot/changes/changes.py (Change.branch): doh! Add a
2541 class-level attribute to accomodate old Change instances that were
2542 pickled before 0.6.5 (where .branch was added for new Changes).
2543 This fixes the exception that occurs when you try to look at an
2544 old Change (through asHTML).
2546 * buildbot/__init__.py (version): bump to 0.6.6+ while between
2549 2005-05-23 Brian Warner <warner@lothar.com>
2551 * buildbot/__init__.py (version): release 0.6.6
2553 2005-05-23 Brian Warner <warner@lothar.com>
2555 * NEWS: update for 0.6.6 release
2556 * debian/changelog: same
2558 * buildbot/scripts/runner.py (start): put the basedir in sys.path
2559 before starting: this was done by twistd back when we spawned it,
2560 now that we're importing the pieces and running them in the
2561 current process, we have to do it ourselves. This allows
2562 master.cfg to import files from the same directory without
2563 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
2564 Stichele for the catch.
2565 (Options.opt_version): Add a --version command (actually, just make
2566 the existing --version command emit Buildbot's version too)
2568 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
2569 fix to make this behave like other LogFiles, this time to handle
2570 existing LogFiles on disk. (add the missing .upgrade method)
2571 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
2573 2005-05-21 Brian Warner <warner@lothar.com>
2575 * buildbot/test/test_runner.py (Create.testMaster): match the
2576 rawstring change in runner.py:masterTAC
2578 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
2579 TwistedWords is installed
2580 * buildbot/test/test_status.py: same, with TwistedMail
2582 * buildbot/master.py: remove old IRC/Waterfall imports (used by
2583 some old, deprecated, and removed config keys). This should enable
2584 you to use the base buildbot functionality with Twisted-2.0.0 when
2585 you don't also have TwistedWeb and TwistedWords installed
2587 2005-05-20 Brian Warner <warner@lothar.com>
2589 * buildbot/scripts/runner.py (run): call sendchange(), not
2590 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
2591 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
2592 (stop): don't wait for process to die when sending SIGHUP
2593 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
2594 directory name gets interpreted, which you don't want
2597 * buildbot/__init__.py (version): bump to 0.6.5+ while between
2600 2005-05-18 Brian Warner <warner@lothar.com>
2602 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2604 2005-05-18 Brian Warner <warner@lothar.com>
2606 * README: update for 0.6.5
2607 * debian/changelog: same
2609 * buildbot/changes/changes.py: rename tag= to branch=, since
2610 that's how we're using it, and my design for the upcoming "build a
2611 specific branch" feature wants it. also, tag= was too CVS-centric
2612 * buildbot/changes/mail.py (parseSyncmail): same
2613 * buildbot/process/base.py (Build.isBranchImportant): same
2614 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2615 * docs/buildbot.texinfo (Attributes of Changes): same
2617 * NEWS: update tag=, update for upcoming release
2619 2005-05-17 Brian Warner <warner@lothar.com>
2621 * buildbot/scripts/runner.py (stop): actually poll once per
2622 second, instead of re-killing the poor daemon once per second.
2623 Sleep briefly (0.1s) before the first poll, since there's a good
2624 chance we can avoid waiting the full second if the daemon shuts
2625 down quickly. Also remove the sys.exit() at the end.
2626 (start): remove the unneighborly sys.exit()
2628 * Makefile: improve permission-setting to not kick Arch so badly
2630 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
2631 default --keepalive=600, since it doesn't hurt very much, and it's
2632 a hassle to discover that you need it.
2633 * buildbot/test/test_runner.py (Create.testSlave): test it
2635 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
2636 IRC bot about EXCEPTION
2638 * buildbot/status/client.py (PBListener): upcall more correctly
2640 * buildbot/process/base.py (Build.allStepsDone): if a step caused
2641 an exception mark the overall build with EXCEPTION, not SUCCESS
2643 * buildbot/scripts/runner.py (makefile_sample): remove the leading
2645 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2646 * Makefile: update some release-related stuff
2648 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2649 gets called when there isn't actually an active process, just end
2650 the Command instead of blowing up. I don't know how it gets into
2651 this state, but the twisted win32 buildslave will sometimes hang,
2652 and when it shakes its head and comes back, it thinks it's still
2653 running a Command. The next build causes this command to be
2654 interrupted, but the lack of self.process.pid breaks the interrupt
2657 * NEWS: document changes since the last release
2659 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2660 look for Makefile.buildbot instead of a bare Makefile . The
2661 'buildbot start' does not install this file, so you have to
2662 manually copy it if you want to customize startup behavior.
2663 (createMaster): change 'buildbot master' command to create
2664 Makefile.sample instead of Makefile, to create master.cfg.sample
2665 instead of master.cfg (requiring you to copy it before the
2666 buildmaster can be started). Both sample files are kept up to
2667 date, i.e. they are overwritten if they have been changed. The
2668 'buildbot.tac' file is *not* overwritten, but if the new contents
2669 don't match the old, a 'buildbot.tac.new' file is created and the
2670 user is warned. This seems to be a much more sane way to handle
2671 startup files. Also, don't sys.exit(0) when done, so we can run
2672 unit tests against it.
2673 (createSlave): same. Don't overwrite the sample info/ files.
2674 * buildbot/scripts/sample.mk: remove. the contents were pulled
2675 into runner.py, since they need to match the behavior of start()
2679 * docs/buildbot.texinfo (Launching the daemons): document it
2680 * buildbot/test/test_runner.py (Create): test it
2682 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2683 version that can handle string-in-string tests, because otherwise
2684 python-2.2 fails the tests. It'd be tremendous if Trial's test
2685 took two strings under 2.2 too.
2687 * everything: fixed all deprecation warnings when running against
2688 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2689 few that come from Twisted itself). This involved putting most of
2690 the Twisted-version specific code in the new buildbot.twcompat
2691 module, and creating some abstract base classes in
2692 buildbot.changes.base and buildbot.status.base (which might be
2693 useful anyway). __implements__ is a nuisance and requires an ugly
2694 'if' clause everywhere.
2696 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2697 delay before finishing the test: it seems that smtp.sendmail
2698 doesn't hang up on the server, so we must wait a moment so it can
2699 hang up on us. This removes the trial warning about an unclean
2702 2005-05-16 Brian Warner <warner@lothar.com>
2704 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2705 tuple of (delay, repeats).
2706 * buildbot/test/test_vc.py (Retry): test it
2707 * docs/buildbot.texinfo (Source Checkout): document it
2708 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2709 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2710 doVCFull() are handled by re-trying the checkout (after a delay)
2711 some number of times.
2712 (ShellCommand._startCommand): make header lines easier to read
2714 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2716 (WebTest.test_logfile): make sure master gets shut down, silences
2717 some "unclean reactor" test errors
2719 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2720 reactor once after shutdown, something in certain versions of
2721 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2722 fails, svn-trunk is ok.
2724 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2725 second win32 error message
2727 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2728 validating the ETA, so the tests don't fail on slow systems
2730 2005-05-15 Brian Warner <warner@lothar.com>
2732 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2733 the new LogFile class, so upgrading works properly
2734 (LogFileProducer.resumeProducing): survive resumeProducing after
2735 we've exhausted the chunkGenerator
2737 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2739 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2740 (Log.testUpgrade): same
2742 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2743 Builds and logs with a cron job.
2745 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2746 of the old non-offline LogFile, added code to upgrade these to
2747 new-style contents-live-on-disk instances at load time (in a way
2748 that doesn't invalidate the old Build pickles, so upgrading to
2749 0.6.5 is not a one-way operation). Got rid of everything related
2751 (LogFile.__init__): create LogFiles with the parent step status,
2752 the log's name, and a builder-relative filename where it can keep
2753 the contents on disk.
2754 (LogFile.hasContents): new method, clients are advised to call it
2755 before getText or getChunks and friends. If it returns False, the
2756 log's contents have been deleted and getText() will raise an
2758 (LogFile.getChunks): made it a generator
2759 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2760 Consumer (except one that takes chunks instead of strings). This
2761 enables streaming of very large logfiles without storing the whole
2763 (BuildStatus.generateLogfileName): create names like
2764 12-log-compile-output, with a _0 suffix if required to be unique
2765 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2766 or earlier) logfiles into new-style ones
2767 (BuilderStatus): remove everything related to 'stub' builds. There
2768 is now only one build cache, and we don't strip logs from old
2770 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2771 since we no longer fight to keep it in the cache
2773 * buildbot/status/html.py (TextLog.render_GET): use a
2774 ChunkConsumer to stream the log entries efficiently.
2775 (ChunkConsumer): wrapper which consumes chunks and writes
2778 * buildbot/test/test_twisted.py (Parse.testParse): use a
2779 LogFile-like object instead of a real one
2781 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2782 (Log.testMerge3): validate more merge behavior
2783 (Log.testChunks): validate LogFile.getChunks
2784 (Log.testUpgrade): validate old-style LogFile upgrading
2785 (Log.testSubscribe): validate LogFile.subscribe
2786 (Log.testConsumer): validate LogFile.subscribeConsumer
2788 * buildbot/interfaces.py (IStatusLogStub): remove
2789 (IStatusLog.subscribeConsumer): new method
2790 (IStatusLog.hasContents): new method
2791 (IStatusLogConsumer): describes things passed to subscribeConsumer
2793 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2794 the log contents if it does not have any contents.
2795 (StatusResourceBuildStep.body): same
2796 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2798 2005-05-14 Brian Warner <warner@lothar.com>
2800 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2801 timeouts to try and make the windows metabuildslave not hang
2803 2005-05-13 Mike Taylor <bear@code-bear.com>
2805 * buildbot/slave/commands.py (rmdirRecursive): added a check
2806 to ensure the path passed into rmdirRecursive actually exists.
2807 On win32 a non-existant path would generate an exception.
2809 2005-05-13 Brian Warner <warner@lothar.com>
2811 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2812 shutil.rmtree which behaves correctly on windows in the face of
2813 files that you have to chmod before deleting. Thanks to Bear at
2814 the OSAF for the routine.
2815 (SourceBase.doClobber): use rmdirRecursive
2817 2005-05-12 Brian Warner <warner@lothar.com>
2819 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2820 method generate chunks instead of returning a big list. This
2821 allows the same method to be used for both old LogFile and new
2823 (OfflineLogFile.getText): use the generator
2824 (OfflineLogFile.subscribe): same
2825 * buildbot/status/html.py (TextLog.resumeProducing): same
2826 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2828 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2829 point out that OfflineLogFile does not currently work with
2830 html.Waterfall . Fixing this is high-priority.
2832 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2833 apparently windows defaults to using stdout
2835 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2836 better message on failure so I can figure out the win32 problem
2838 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2839 log messages to include more useful copies of the command being
2840 run, the argv array, and the child command's environment.
2841 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2843 2005-05-11 Brian Warner <warner@lothar.com>
2845 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2847 * Makefile: update the deb-snapshot version
2849 * docs/buildbot.texinfo: move all .xhtml docs into a new
2850 .texinfo-format document, adding a lot of material in the process.
2851 This is starting to look like a real user's manual. Removed all
2852 the Lore-related files: *.xhtml, *.css, template.tpl .
2853 * docs/Makefile: simple makefile to run 'makeinfo'
2854 * buildbot/scripts/sample.cfg: rearrange slightly
2855 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2857 2005-05-10 Brian Warner <warner@lothar.com>
2859 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2860 different name for the internal twistw module, handle it.
2862 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2863 * setup.py: .. and stop trying to install it
2865 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2866 'git'), the new linux kernel VC system (http://kernel.org/git/).
2867 Thanks to Brandon Philips for the patch.
2868 * buildbot/slave/commands.py (Git): same
2870 2005-05-06 Brian Warner <warner@lothar.com>
2872 * buildbot/status/builder.py (OfflineLogFile): replace the default
2873 LogFile with a form that appends its new contents to a disk file
2874 as they arrive. The complete log data is never kept in RAM. This
2875 is the first step towards handling very large (100MB+) logfiles
2876 without choking quite so badly. (The other half is
2877 producer/consumer on the HTML pages).
2878 (BuildStepStatus.addLog): use OfflineLogFile by default
2879 (BuildStatus.getLogfileName): helper code to give the
2880 OfflineLogFile a filename to work with
2882 * buildbot/test/test_status.py (Results.testAddResults): update
2883 tests to handle new asserts
2884 * buildbot/test/test_vc.py (Patch.doPatch): same
2885 * buildbot/test/test_steps.py (BuildStep.setUp): same
2887 2005-05-05 Brian Warner <warner@lothar.com>
2889 * buildbot/scripts/runner.py (start): if there is no Makefile,
2890 launch the app by importing twistd's internals and calling run(),
2891 rather than spawning a new twistd process. This stands a much
2892 better chance of working under windows.
2893 (stop): kill the process with os.kill instead of spawning
2894 /bin/kill, again to reduce the number of external programs which
2895 windows might not have in the PATH. Also wait up to 5 seconds for
2896 the process to go away, allowing things like 'buildbot stop;
2897 buildbot start' to be reliable in the face of slow shutdowns.
2899 * buildbot/master.py (Dispatcher.__getstate__): remove old
2900 .tap-related methods
2901 (BuildMaster.__getstate__): same
2903 * buildbot/slave/bot.py (makeService): same
2904 (Options.longdesc): same
2905 * buildbot/scripts/runner.py: copy over some old mktap option text
2907 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2908 'buildbot master' now creates a buildbot.tac file, so there is no
2909 longer a create-instance/save/reload sequence. mktap is dead, long
2911 * buildbot/scripts/sample.mk: use twistd -y, not -f
2912 * buildbot/test/test_config.py: remove mktap-based test
2913 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2914 * README: don't reference mktap
2916 * docs/source.xhtml: document some of the attributes that Changes
2919 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2921 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2922 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2923 * buildbot/changes/changes.py (Change)
2924 * buildbot/changes/mail.py (parseSyncmail)
2925 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2927 * buildbot/process/base.py (Build.isTagImportant)
2931 2005-05-04 Brian Warner <warner@lothar.com>
2933 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2934 connection after sending the change, so that unit tests don't
2935 complain about sockets being left around
2937 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2938 exception in phase=0 rendering
2939 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2941 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2943 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2944 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2945 and configuring builders with tuples.
2946 * buildbot/test/test_config.py: stop testing compatibility with
2947 deprecated config keys
2948 * buildbot/test/test_run.py: same
2950 2005-05-03 Brian Warner <warner@lothar.com>
2952 * contrib/arch_buildbot.py: survive if there are no logfiles
2953 (username): just use a string, os.getlogin isn't reliable
2955 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2956 so 'buildbot sendchange' actually works. The earlier test only
2957 covered the internal (non-reactor-running) form.
2959 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2960 script to notify the buildmaster about changes
2962 * buildbot/scripts/runner.py (sendchange): new command to send a
2963 change to a buildbot.changes.pb.PBChangeSource receiver.
2964 * buildbot/test/test_changes.py (Sender): test it
2966 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2967 after any reading of the config file, not just when we do it in
2968 startService. This makes some tests a bit cleaner.
2970 * buildbot/changes/pb.py: add some log messages
2972 * buildbot/process/base.py (Build.startBuild): fix a bug that
2973 caused an exception when the build terminated in the very first
2975 (Build.stepDone): let steps return a status of EXCEPTION. This
2976 terminates the build right away, and sets the build's overall
2977 status to EXCEPTION too.
2978 * buildbot/process/step.py (BuildStep.failed): return a status of
2979 EXCEPTION when that is what has happened.
2981 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2982 implement this, allowing Arch-based projects to get precise
2983 checkouts instead of always using the latest code
2984 (Bazaar): create variant of Arch to let folks use baz instead of
2985 tla. Requires a new buildslave too.
2986 * buildbot/slave/commands.py (Arch): add 'revision' argument
2987 (Bazaar): create variant of Arch that uses baz instead of tla.
2988 Remove the code that extracts the archive name from the
2989 register-archive output, since baz doesn't provide it, and require
2990 the user provide both the archive name and its location.
2991 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2993 2005-05-02 Brian Warner <warner@lothar.com>
2995 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2996 thanks to Nick Trout.
2998 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2999 deals better with source Makefile coming from a read-only CVS
3000 checkout. Thanks to Nick Trout for the catch.
3002 * buildbot/__init__.py (version): bump to 0.6.4+ while between
3005 2005-04-28 Brian Warner <warner@lothar.com>
3007 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
3009 * debian/changelog: update for 0.6.4
3011 2005-04-28 Brian Warner <warner@lothar.com>
3013 * README.w32: add a checklist of steps for getting buildbot
3015 * MANIFEST.in: include it in the tarball
3019 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
3020 broken .tap files from 0.6.3 by getting rid of .services,
3021 .namedServices, and .change_svc at load time.
3023 2005-04-27 Brian Warner <warner@lothar.com>
3025 * NEWS: update in preparation for new release
3027 * buildbot/test/test_config.py (Save.testSave): don't pull in
3028 twisted.scripts.twistd, we don't need it and it isn't for windows
3031 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
3032 accomodate win32 which can't do atomic-rename
3034 2005-04-27 Brian Warner <warner@lothar.com>
3036 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
3037 timeouts to help the slow metabuildbot not flunk them so much
3038 (Disconnect.testBuild3): same
3039 (Disconnect.testBuild4): same
3040 (Disconnect.testInterrupt): same
3042 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
3043 setup, it was completely broken for new buildmasters (those which
3044 did not have a 'change.pck' already saved. Thanks to Paul Warren
3045 for catching this (embarrassing!) bug.
3046 (Dispatcher.__getstate__): don't save our registered avatar
3047 factories, since they'll be re-populated when the config file is
3049 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
3050 tests (since the real mktap-generated BuildMaster doesn't save
3052 (BuildMaster.__getstate__): don't save any service children,
3053 they'll all be re-populated when the config file is re-read.
3054 * buildbot/test/test_config.py (Save.testSave): test for this
3056 2005-04-26 Brian Warner <warner@lothar.com>
3058 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
3059 rendered with Blender.. looks a bit nicer.
3060 * buildbot/docs/images/icon.blend: add the Blender file for it
3062 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
3063 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
3064 running under windows. This appears to be the best way to allow
3065 BuildSteps to do something normal like 'trial -v buildbot.test' or
3066 'make foo' and still expect it to work. The idea is to make the
3067 BuildSteps look as much like what a developer would type when
3068 compiling or testing the tree by hand. This approach probably has
3069 problems when there are spaces in the arguments, so if you've got
3070 windows buildslaves, you'll need to pay close attention to your
3073 * buildbot/status/html.py (WaterfallStatusResource.body): add the
3074 timezone to the timestamp column.
3075 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3077 * buildbot/scripts/runner.py (loadOptions): do something sane for
3078 windows, I think. We use %APPDATA%/buildbot instead of
3079 ~/.buildbot, but we still search everywhere from the current
3080 directory up to the root for a .buildbot/ subdir. The "is it under
3081 $HOME" security test was replaced with "is it owned by the current
3082 user", which is only performed under posix.
3083 * buildbot/test/test_runner.py (Options.testFindOptions): update
3084 tests to match. The "is it owned by the current user" check is
3085 untested. The test has been re-enabled for windows.
3087 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
3088 any "\n" in the expected output with the platform-specific line
3089 separator. Make this separator "\r\n" on PTYs under unix, they
3090 seem to do that and I don't know why
3092 * buildbot/test/test_runner.py (Options.optionsFile): disable on
3093 windows for now, I don't know what ~/.buildbot/ should mean there.
3095 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
3096 win32 compatibility, don't use "/tmp"
3097 (Basedir.testChangeBuilddir): remove more unixisms
3099 2005-04-26 Brian Warner <warner@lothar.com>
3101 * buildbot/test/test_control.py (Force.rmtree): python2.2
3102 compatibility, apparently its shutil.rmtree ignore_errors=
3103 argument is ignored.
3104 * buildbot/test/test_run.py (Run.rmtree): same
3105 (RunMixin.setUp): same
3107 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
3110 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
3111 'substring in string' operator, must use string.find(substr)!=-1
3112 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
3113 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
3115 * buildbot/scripts/runner.py (loadOptions): add code to search for
3116 ~/.buildbot/, a directory with things like 'options', containing
3117 defaults for various 'buildbot' subcommands. .buildbot/ can be in
3118 the current directory, your $HOME directory, or anywhere
3119 inbetween, as long as you're somewhere inside your home directory.
3120 (debugclient): look in ~/.buildbot/options for master and passwd
3121 (statuslog): look in ~/.buildbot/options for 'masterstatus'
3122 * buildbot/test/test_runner.py (Options.testFindOptions): test it
3124 * buildbot/status/client.py (makeRemote): new approach to making
3125 IRemote(None) be None, which works under Twisted-2.0
3126 * buildbot/test/test_status.py (Client.testAdaptation): test it
3128 * buildbot/status/builder.py (Status.builderAdded): when loading a
3129 pickled BuilderStatus in from disk, set its name after loading.
3130 The config file might have changed its name (but not its
3131 directory) while it wasn't looking.
3133 * buildbot/process/builder.py (Builder.attached): always return a
3134 Deferred, even if the builder was already attached
3135 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
3137 2005-04-25 Brian Warner <warner@lothar.com>
3139 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
3140 category-related exception when announcing a build has finished
3142 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
3143 reference no-longer-existent changemaster.sources
3144 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
3146 * buildbot/__init__.py (version): bump to 0.6.3+ while between
3149 2005-04-25 Brian Warner <warner@lothar.com>
3151 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
3153 * debian/changelog: update for 0.6.3
3155 2005-04-25 Brian Warner <warner@lothar.com>
3157 * MANIFEST.in: make sure debug.glade is in the tarball
3159 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
3161 * NEWS: update for the imminent 0.6.3 release
3163 * buildbot/status/html.py (HtmlResource.content): make the
3164 stylesheet <link> always point at "buildbot.css".
3165 (StatusResource.getChild): map "buildbot.css" to a static.File
3166 containing whatever css= argument was provided to Waterfall()
3167 (Waterfall): provide the "classic" css as the default.
3168 * docs/waterfall.classic.css: move default CSS from here ..
3169 * buildbot/status/classic.css: .. to here
3171 * MANIFEST.in: make sure classic.css is included in the tarball
3172 * setup.py: and that it is installed too, under buildbot/status/
3174 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
3175 the module level, because buildbot.tap files from 0.6.2 don't have
3176 it in their attribute dictionary.
3178 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
3179 really exists at startup, might save some confusion somewhere.
3181 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
3183 * docs/waterfall.classic.css:
3184 add a stylesheet that's almost the same as the "classic"
3187 * buildbot/status/builder.py:
3188 add EXCEPTION as a result - this is a problem for the bot
3189 maintainer, not a build problem for the changers
3190 * buildbot/process/step.py:
3191 use EXCEPTION instead of FAILURE for exceptions
3192 * buildbot/status/html.py:
3193 add build_get_class to get a class out of a build/buildstep
3194 finish naming the classes
3195 split out sourceNames to changeNames and builderNames so we
3196 can style them separately
3197 * docs/config.xhtml:
3198 finish documenting classes as they are right now
3200 * buildbot/status/html.py:
3201 name the classes as we agreed on IRC
3202 * docs/config.xhtml:
3205 * buildbot/status/html.py:
3206 same for cssclass->class_
3208 * buildbot/status/html.py:
3209 as decided on IRC, use class_ for the "class" attribute to not
3210 conflict with the class keyword, and clean up the messy **{} stuff.
3212 * buildbot/status/mail.py:
3213 put back "builders" argument, and fix docstring, because the
3214 code *ignores* builders listed in this argument
3216 * buildbot/process/builder.py:
3217 remove FIXME notes - category is now indeed a cvar of BuilderStatus
3219 * docs/config.xhtml:
3220 describe the category argument for builders
3222 * buildbot/status/builder.py:
3223 Fix a silly bug due to merging
3225 * buildbot/process/builder.py:
3226 remove category from the process Builder ...
3227 * buildbot/status/builder.py:
3228 ... and add it to BuilderStatus instead.
3229 Set category on unpickled builder statuses, they might not have it.
3230 * buildbot/master.py:
3231 include category when doing builderAdded
3232 * buildbot/status/mail.py:
3233 return None instead of self for builders we are not interested in.
3234 * buildbot/test/test_run.py:
3235 fix a bug due to only doing deferredResult on "dummy" waiting
3236 * buildbot/test/test_status.py:
3237 add checks for the Mail IStatusReceiver returning None or self
3239 * buildbot/status/html.py:
3240 fix testsuite by prefixing page title with BuildBot
3242 * buildbot/status/builder.py:
3243 have .category in builder status ...
3244 * buildbot/process/builder.py:
3245 ... and set it from Builder
3246 * buildbot/status/html.py:
3247 make .css a class variable
3248 * buildbot/test/test_status.py:
3249 write more tests to cover our categories stuff ...
3250 * buildbot/status/mail.py:
3251 ... and fix the bug that this uncovered
3253 * buildbot/changes/mail.py:
3254 * buildbot/changes/pb.py:
3255 * buildbot/master.py:
3256 * buildbot/process/base.py:
3257 * buildbot/process/factory.py:
3258 * buildbot/process/interlock.py:
3259 * buildbot/process/step.py:
3260 * buildbot/process/step_twisted.py:
3261 * buildbot/slave/commands.py:
3262 * buildbot/status/builder.py:
3263 * buildbot/status/client.py:
3264 * buildbot/status/html.py:
3265 * buildbot/status/mail.py:
3266 * buildbot/status/progress.py:
3267 * buildbot/test/test_changes.py:
3268 * buildbot/test/test_config.py:
3269 * buildbot/test/test_control.py:
3270 * buildbot/test/test_interlock.py:
3271 * buildbot/test/test_maildir.py:
3272 * buildbot/test/test_mailparse.py:
3273 * buildbot/test/test_run.py:
3274 * buildbot/test/test_slavecommand.py:
3275 * buildbot/test/test_status.py:
3276 * buildbot/test/test_steps.py:
3277 * buildbot/test/test_twisted.py:
3278 * buildbot/test/test_util.py:
3279 * buildbot/test/test_vc.py:
3280 * buildbot/test/test_web.py:
3282 add test-case-name at the top of a whole set of files
3284 * buildbot/status/builder.py:
3285 keep order of addition when getting builder names
3286 * buildbot/status/words.py:
3287 * buildbot/test/test_run.py:
3288 add test for getBuilderNames
3290 * buildbot/process/base.py:
3291 * buildbot/process/step.py:
3292 * buildbot/status/builder.py:
3293 * buildbot/status/html.py:
3294 make buildbot css-able
3295 replace the color code for purple with purple, don't understand
3296 why it wasn't purple to start with
3298 * buildbot/status/words.py:
3299 ok, so it doesn't look like BuilderStatus.remote is still valid.
3300 Use what waterfall uses instead.
3302 * buildbot/interfaces.py:
3303 * buildbot/status/builder.py:
3304 * buildbot/status/html.py:
3305 * buildbot/status/mail.py:
3306 * buildbot/status/words.py:
3307 * buildbot/test/test_run.py:
3308 use categories everywhere and make it be a list. More sensible
3309 for the future. Also make words actually respect this in
3312 * buildbot/interfaces.py:
3313 add category argument to getBuilderNames
3314 * buildbot/process/builder.py:
3315 * buildbot/status/builder.py:
3316 * buildbot/status/html.py:
3317 * buildbot/status/mail.py:
3318 * buildbot/status/words.py:
3319 * buildbot/test/test_run.py:
3320 move from specifying builders by name to specifying the category
3322 * buildbot/status/html.py:
3323 * buildbot/status/words.py:
3324 add "builders=" to __init__ of status clients so they can
3325 limit themselves to the given list of builders to report on
3327 * buildbot/status/html.py: set the title to the product name
3329 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
3331 * buildbot/interfaces.py:
3332 * buildbot/status/builder.py:
3333 more documentation. Hm, not sure if ChangeLog entries make sense
3336 2005-04-23 Brian Warner <warner@lothar.com>
3338 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
3340 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
3342 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
3343 the sub-commands that log buildmaster status to stdout and to a
3344 GUI window, respectively.
3346 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
3347 functionality is working again, but all the step-status and ETA
3348 stuff is missing. Commented out a lot of code pending more
3351 * buildbot/status/client.py: make sure that IRemote(None) is None
3353 * buildbot/changes/changes.py: import defer, oops
3354 (ChangeMaster): remove the .sources list, rely upon the fact that
3355 MultiServices can be treated as sequences of their children. This
3356 cleans up the add/remove ChangeSource routines a lot, as we keep
3357 exactly one list of the current sources instead of three.
3359 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
3360 up an empty ChangeMaster at init time.
3361 (BuildMaster.loadChanges): if there are changes to be had from
3362 disk, replace self.change_svc with the new ones. If not, keep
3363 using the empty ChangeMaster set up in __init__.
3364 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
3365 instead of a separate list, makes the code a bit cleaner.
3366 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
3367 (ConfigTest.testSources): same, also wait for loadConfig to finish.
3368 Extend the test to make sure we can get rid of the sources when
3371 2005-04-22 Brian Warner <warner@lothar.com>
3373 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
3374 and info/host files when making the slave directory
3376 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
3377 whendone= argument, just return the Deferred and let the caller do
3378 what they want with it.
3379 (Disconnect.testBuild1): wait for shutdownSlave
3380 (Basedir.testChangeBuilddir): new test to make sure changes to the
3381 builddir actually get propagated to the slave
3383 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
3384 explicit method, rather than passing the builddir in __init__ .
3385 Make sure to update self.basedir too, this was broken before.
3386 (Bot.remote_setBuilderList): use b.setBuilddir for both new
3387 builders and for ones that have just had their builddir changed.
3388 (BotFactory): add a class-level .perspective attribute, so
3389 BuildSlave.waitUntilDisconnected won't get upset when the
3390 connection hasn't yet been established
3391 (BuildSlave.__init__): keep track of the bot.Bot instance, so
3392 tests can reach through it to inspect the SlaveBuilders
3394 * buildbot/process/base.py (Build.buildException): explain the
3395 log.err with a log.msg
3396 * buildbot/process/builder.py (Builder.startBuild): same
3397 (Builder._startBuildFailed): improve error message
3399 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
3400 occurred because we lost the brand-new connection, retry instead
3401 of giving up. If not, it's probably an authorization failure, and
3402 it makes sense to stop trying. Make sure we log.msg the reason
3403 that we're log.err'ing the failure, otherwise test failures are
3404 really hard to figure out.
3406 * buildbot/master.py: change loadConfig() to return a Deferred
3407 that doesn't fire until the change has been fully implemented.
3408 This means any connected slaves have been updated with the new
3409 builddir. This change makes it easier to test the code which
3410 actually implements this builddir-updating.
3411 (BotPerspective.addBuilder): return Deferred
3412 (BotPerspective.removeBuilder): same
3413 (BotPerspective.attached): same
3414 (BotPerspective._attached): same. finish with remote_print before
3415 starting the getSlaveInfo, instead of doing them in parallel
3416 (BotPerspective.list_done): same
3417 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3418 actually calling slave.disconnect()
3419 (BotMaster.addBuilder): same
3420 (BotMaster.removeBuilder): same
3421 (BuildMaster.loadConfig): same
3422 (BuildMaster.loadConfig_Slaves): same
3423 (BuildMaster.loadConfig_Sources): same
3424 (BuildMaster.loadConfig_Builders): same
3425 (BuildMaster.loadConfig_status): same
3427 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3428 a Deferred that fires when the source is finally removed
3430 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3431 the previous tree on win32, where we have to do it synchronously,
3432 make sure we return a Deferred anyway.
3433 (SourceBase.doCopy): same
3435 * buildbot/scripts/runner.py (statusgui): use the text client for
3436 now, while I rewrite the Gtk one
3437 * buildbot/clients/base.py: strip out old code, leaving just the
3438 basic print-message-on-event functionality. I also remove the
3439 ReconnectingPBClientFactory, but it does at least quit when it
3440 loses the connection instead of going silent
3442 2005-04-21 Brian Warner <warner@lothar.com>
3444 * Makefile: minor tweaks
3446 * NEWS: point out deprecation warnings, new features for
3449 * buildbot/master.py (BuildMaster.loadConfig): emit
3450 DeprecationWarnings for Builders defined with tuples. Rearrange
3451 code to facility removal of deprecated configuration keys in the
3454 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3455 'buildbot' command to put a little Makefile in the target that
3456 helps you re-create the buildbot.tap file, start or stop the
3457 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3458 all the files 0600, since they contain passwords.
3459 (start): if there is a Makefile, and /usr/bin/make exists, use
3460 'make start' in preference to a raw twistd command. This lets
3461 slave admins put things like PYTHONPATH variables in their
3462 Makefiles and have them still work when the slave is started with
3463 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3464 be nice to first try the 'make' command and only fall back to
3465 twistd if it fails. TODO: the Makefile's "start" command does not
3466 add the --reactor=win32 argument when running under windows.
3467 (Options.debugclient, Options.statusgui): add sub-commands to launch
3468 the debug client (formerly in contrib/debugclient.py) and the
3469 Gtk status application (currently broken)
3470 * buildbot/clients/debug.py: move from contrib/debugclient.py
3471 * buildbot/clients/debug.glade: same
3473 * buildbot/test/test_trial.py: remove it. This requires some
3474 functionality out of Twisted that isn't there yet, and until then
3475 having it around just confuses things.
3477 * buildbot/test/test_slavecommand.py (Shell): test both with and
3478 without PTYs, and make sure that command output is properly
3479 interleaved in the with-PTY case. I think the without-PTY test
3480 should pass on windows, where we never use PTYs anyway.
3482 2005-04-20 Brian Warner <warner@lothar.com>
3484 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
3486 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
3488 * NEWS: start creating entries for the next release
3490 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
3492 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
3493 (WebTest.test_webPathname): same
3494 (WebTest.test_webPathname_port): same
3495 (WebTest.test_waterfall): use the default favicon rather than
3496 rooting around the filesystem for it. Open the expected-icon file
3497 in binary mode, to make win32 tests happier (thanks to Nick Trout
3499 * buildbot/status/html.py (buildbot_icon): win32 portability
3501 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
3502 win32-compatibility fixes from Nick Trout, the "file not found" message
3503 is different under windows
3504 (FakeSlaveBuilder.__init__): clean up setup a bit
3505 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
3507 2005-04-19 Brian Warner <warner@lothar.com>
3509 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
3510 skip-if-repositories-are-unavailable test to not kill the trial
3511 that comes with Twisted-1.3.0
3513 * setup.py: install buildbot.png icon file when installing code
3515 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
3516 environment used by the command, at least on the child side.
3518 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
3519 this method needs to be added and implemented because it gets
3520 called under heavy load. I don't quite understand the
3521 producer/consumer API enough to write it.
3522 (StatusResource.getChild): add a resource for /favicon.ico
3523 (Waterfall.__init__): add favicon= argument
3524 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3525 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
3526 (WebTest.test_webPathname): same
3527 (WebTest.test_webPathname_port): same
3528 * docs/config.xhtml: mention favicon=
3529 * buildbot/buildbot.png: add a default icon, dorky as it is
3531 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
3533 * buildbot/master.py:
3534 * buildbot/process/base.py:
3535 * buildbot/process/builder.py:
3536 * buildbot/process/interlock.py:
3537 * buildbot/status/builder.py:
3538 * buildbot/status/html.py:
3539 * buildbot/status/mail.py:
3540 * buildbot/status/words.py:
3541 new documentation while digging through the code
3543 2005-04-17 Brian Warner <warner@lothar.com>
3545 * general: try to fix file modes on all .py files: a+r, a-x,
3546 but let buildbot/clients/*.py be +x since they're tools
3548 * docs/epyrun (addMod): when an import fails, say why
3550 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
3552 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3554 * buildbot/process/base.py:
3555 * buildbot/process/builder.py:
3556 * buildbot/status/builder.py:
3557 new documentation while digging through the code
3559 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3561 * buildbot/changes/changes.py:
3562 * buildbot/changes/p4poller.py:
3563 * buildbot/interfaces.py:
3564 * buildbot/process/base.py:
3565 * buildbot/process/builder.py:
3566 * buildbot/process/step.py:
3567 * buildbot/process/step_twisted.py:
3568 * buildbot/slave/bot.py:
3569 * buildbot/slave/commands.py:
3570 * buildbot/status/builder.py:
3571 fix all docstrings to make epydoc happy. In the process of fixing
3572 some, I also moved pieces of docs, and removed some deprecated
3575 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3577 * buildbot/process/builder.py:
3578 * buildbot/process/interlock.py:
3579 * buildbot/process/process_twisted.py:
3580 * buildbot/process/step.py:
3581 BuildProcess -> Build, as it looks like that's what happened
3582 * buildbot/process/base.py:
3583 * buildbot/process/factory.py:
3586 2005-04-17 Brian Warner <warner@lothar.com>
3588 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3589 update compile command to accomodate the Twisted split.. now
3590 instead of './setup.py build_ext -i', you do './setup.py all
3591 build_ext -i', to run build_ext over all sub-projects.
3592 (FullTwistedBuildFactory): same
3593 (TwistedReactorsBuildFactory): same
3595 * buildbot/status/html.py (TextLog.finished): null out self.req
3596 when we're done, otherwise the reference cycle of TextLog to .req
3597 to .notifications to a Deferred to TextLog.stop keeps them from
3598 being collected, and consumes a huge (610MB on pyramid at last
3599 check) amount of memory.
3601 2005-04-11 Brian Warner <warner@lothar.com>
3603 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3604 normalize the VC-repository location.. makes SVN happier with
3605 certain test environments.
3607 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3608 RemoteShellCommand gets its own .env dictionary, so that code in
3609 start() doesn't mutate the original. I think this should fix the
3610 step_twisted.Trial problem where multiple identical components
3611 kept getting added to PYTHONPATH= over and over again.
3613 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3614 adding epydoc-format docstrings to many classes. Thanks to Thomas
3615 Vander Stichele for the patches.
3616 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
3617 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
3618 * buildbot/slave/bot.py, commands.py, registry.py: same
3620 2005-04-05 Brian Warner <warner@lothar.com>
3622 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
3623 preserve timestamps, helps incremental builds of large trees.
3624 Patch from Rene Rivera.
3626 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
3627 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
3630 2005-04-03 Brian Warner <warner@lothar.com>
3632 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
3633 with one dict, apparently exec has some scoping bugs when used
3634 with both global/local dicts. Thanks to Nathaniel Smith for the
3637 2005-04-02 Brian Warner <warner@lothar.com>
3639 * buildbot/process/step_twisted.py (countFailedTests): the new
3640 trial in Twisted-2.0 emits a slightly different status line than
3641 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
3642 mistakenly think the test count is unparseable.
3643 (Trial.start): note that for some reason each build causes another
3644 copy of self.testpath to be prepended to PYTHONPATH. This needs to
3645 be fixed but I'm not sure quite where the problem is.
3647 2005-04-01 Brian Warner <warner@lothar.com>
3649 * buildbot/test/test_run.py (Run.testMaster): change some uses of
3650 deferredResult to avoid hangs/warnings under twisted-2.0
3651 (RunMixin.tearDown): same
3652 (RunMixin.shutdownSlave): same
3653 (Disconnect.testIdle1): same
3654 (Disconnect.testBuild2): same: wait one second after the build
3655 finishes for test to really be done.. this should be cleaned up to
3656 avoid wasting that second. Builder.detach uses a callLater(0),
3657 either that should be done in-line (something else needed that
3658 behavior), or it should return a Deferred that fires when the
3659 builder is really offline.
3660 (Disconnect.testBuild3): same
3661 (Disconnect.testDisappear): same
3663 * buildbot/test/test_web.py: rearrange server-setup and teardown
3664 code to remove unclean-reactor warnings from twisted-2.0
3666 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3667 so the tests don't hang under twisted-2.0
3669 2005-03-31 Brian Warner <warner@lothar.com>
3671 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3672 caused a warning each time the master changed our set of builders
3674 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3675 w32, don't unlink the file unless it already exists. Thanks to
3676 Baptiste Lepilleur for the catch.
3677 (BuilderStatus.saveYourself): same
3679 2005-02-01 Brian Warner <warner@lothar.com>
3681 * buildbot/status/html.py (TextLog.getChild): use a /text child
3682 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3683 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3684 logfile as text/plain (no markup, no headers). This replaces the
3685 previous scheme (which used an ?text=1 argument), and gets us back
3686 to a relative link (which works better when the buildbot lives
3687 behind another web server, such as Apache configured as a reverse
3688 proxy). Thanks to Gerald Combs for spotting the problem.
3690 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3693 2004-12-13 Brian Warner <warner@lothar.com>
3695 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3697 * debian/changelog: update for 0.6.2
3698 * NEWS: finalize for 0.6.2
3700 2004-12-11 Brian Warner <warner@lothar.com>
3702 * NEWS: bring it up to date
3704 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3705 detection code. Require some sign of life from the buildmaster
3706 every BotFactory.keepaliveInterval seconds. Provoke this
3707 indication at BotFactory.keepaliveTimeout seconds before the
3708 deadline by sending a keepalive request. We don't actually care if
3709 that request is answered in a timely fashion, what we care about
3710 is that .activity() is called before the deadline. .activity() is
3711 triggered by any PB message from the master (including an ack to
3712 one of the slave's status-update messages). With this new scheme,
3713 large status messages over slow pipes are OK, as long as any given
3714 message can be sent (and thus acked) within .keepaliveTimeout
3715 seconds (which defaults to 30).
3716 (SlaveBuilder.remote_startCommand): record activity
3717 (SlaveBuilder.ackUpdate): same
3718 (SlaveBuilder.ackComplete): same
3719 (BotFactory.gotPerspective): same
3720 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3722 2004-12-09 Brian Warner <warner@lothar.com>
3724 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3727 * buildbot/process/step_twisted.py (Trial._commandComplete):
3728 update self.cmd when we start the 'cat test.log' transfer. Without
3729 this, we cannot interrupt the correct RemoteCommand when we lose
3732 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3733 trying to tell the slave to stop the command if we're already
3734 inactive, or if we no longer have a .remote
3736 * buildbot/process/builder.py (Builder._detached): don't let an
3737 exception in currentBuild.stopBuild() prevent the builder from
3738 being marked offline
3740 2004-12-07 Brian Warner <warner@lothar.com>
3742 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3743 KeyError that happens when you ask for a non-existent Builder, and
3744 translate it into a UsageError.
3746 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3747 losing the slave in the middle of a remote step is handled too
3749 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3750 be a Failure, so be sure to stringify it before using it as the
3751 contents of the 'interrupt' logfile
3752 (RemoteCommand.interrupt): use stringified 'why' in
3753 remote_interruptCommand too, just in case
3755 2004-12-06 Brian Warner <warner@lothar.com>
3757 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3758 instead of 'tla update', which is more efficient in case we've
3759 missed a couple of patches since the last update.
3761 * debian/changelog: update for previous (0.6.1) release. Obviously
3762 this needs to be handled better.
3764 2004-12-05 Brian Warner <warner@lothar.com>
3766 * NEWS: update for stuff since last release
3768 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3769 match the maybeDeferred change in Dispatcher.requestAvatar
3770 * buildbot/changes/pb.py (ChangePerspective.attached): same
3771 * buildbot/status/client.py (StatusClientPerspective.attached): same
3772 * buildbot/process/builder.py (Builder._attached3): same
3773 * buildbot/pbutil.py (NewCredPerspective.attached): same
3775 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3776 the date to the top-most box, if it is not the same as today's
3779 * docs/slave.xhtml: provide a buildslave setup checklist
3781 * docs/source.xhtml (Arch): correct terminology
3783 2004-12-04 Brian Warner <warner@lothar.com>
3785 * buildbot/test/test_slavecommand.py: use sys.executable instead
3786 of hard-coding 'python' for child commands, might help portability
3788 * docs/examples/twisted_master.cfg: update to current usage
3790 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3791 'stop build' command to the IRC bot
3793 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3794 message that broke PBChangeSource
3796 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3797 (SlaveBuilder): make some attributes class-level, remove the old
3798 "update queue" which existed to support resuming a build after the
3799 master connection was lost. Try to reimplement that feature later.
3800 (SlaveBuilder.stopCommand): clear self.command when the
3801 SlaveCommand finishes, so that we don't try to kill a leftover one
3803 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3806 * buildbot/slave/commands.py (SourceBase): set self.command for
3807 all VC commands, so they can be interrupted.
3809 2004-12-03 Brian Warner <warner@lothar.com>
3811 * buildbot/master.py: clean up slave-handling code, to handle
3812 slave-disconnect and multiple-connect better
3813 (BotPerspective): make these long-lasting, exactly one per bot
3814 listed in the config file.
3815 (BotPerspective.attached): if a slave connects while an existing
3816 one appears to still be connected, disconnect the old one first.
3817 (BotPerspective.disconnect): new method to forcibly disconnect a
3818 buildslave. Use some hacks to empty the transmit buffer quickly to
3819 avoid the long (20-min?) TCP timeout that could occur if the old
3820 slave has dropped off the net.
3821 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3822 own their own SlaveStatus objects. Remove .attached/.detached, add
3823 .addSlave/.removeSlave, treat slaves like Builders (config file
3824 parsing sends deltas to the BotMaster). Inform the slave
3825 instances, i.e. the BotPerspective, about addBuilder and
3827 (BotMaster.getPerspective): turns into a single dict lookup
3828 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3829 which gives BotPerspective.attached a chance to disconnect the old
3831 (BuildMaster.loadConfig): add code (disabled) to validate that all
3832 builders use known slaves (listed in c['bots']). The check won't
3833 work with tuple-specified builders, which are deprecated but not
3834 yet invalid, so the check is disabled for now.
3835 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3836 routine, do the add/changed/removed dance with them like we do
3838 (BuildMaster.loadConfig_Sources): move source-config into a
3839 separate routine too
3841 * buildbot/status/builder.py (Status.getSlave): get the
3842 SlaveStatus object from the BotPerspective, not the BotMaster.
3844 * buildbot/test/test_run.py: bunch of new tests for losing the
3845 buildslave at various points in the build, handling a slave that
3846 connects multiple times, and making sure we can interrupt a
3849 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3850 something other than 'Bot' for the Bot object, to make certain
3851 test cases easier to write.
3852 (BuildSlave.waitUntilDisconnected): utility method for testing
3854 2004-11-30 Brian Warner <warner@lothar.com>
3856 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3858 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3859 argument, return a Deferred that always fires with True or False.
3860 I don't use an errback to indicate 'ping failed' so that callers
3861 are free to ignore the deferred without causing spurious errors in
3863 * buildbot/process/builder.py (BuilderControl.ping): implement it
3865 * buildbot/test/test_run.py (Status.testDisappear): test ping
3866 (Status.disappearSlave): fix it
3868 2004-11-30 Brian Warner <warner@lothar.com>
3870 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3871 (IBuilderControl): add .getBuild(num), only works for the current
3872 build, of course, although it might be interesting to offer
3873 something for builds in the .waiting or .interlocked state.
3875 * buildbot/process/base.py (Build): have .stopBuild just do the
3876 interrupt, then let the build die by itself.
3877 (BuildControl): add .stopBuild, and add a point-event named
3878 'interrupt' just after the build so status viewers can tell that
3880 (BuilderControl): add .getBuild
3882 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3883 stops when you kill it, good for testing
3884 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3885 contains the 'reason' text.
3887 * buildbot/status/html.py: Add Stop Build button, if the build can
3888 still be stopped. Send a Redirect (to the top page) one second
3889 later, hopefully long enough for the interrupt to have an effect.
3890 Move make_row() up to top-level to share it between Stop Build and
3893 * buildbot/slave/commands.py: only kill the child process once
3895 * buildbot/test/test_run.py: add testInterrupt
3897 2004-11-29 Brian Warner <warner@lothar.com>
3899 * buildbot/process/base.py: Refactor command interruption. The
3900 Build is now responsible for noticing that the slave has gone
3901 away: Build.lostRemote() interrupts the current step and makes
3902 sure that no further ones will be started.
3904 * buildbot/process/builder.py: When the initial remote_startBuild
3905 message fails, log it: this usually indicates that the slave has
3906 gone away, but we don't really start paying attention until they
3907 fail to respond to the first step's command.
3909 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3910 slave disconnect. Now sports a new interrupt() method. Error
3911 handling was simplified a lot by chaining deferreds, so
3912 remoteFailed/remoteComplete were merged into a single
3913 remoteComplete method (which can now get a Failure object).
3914 Likewise failed/finished were merged into just _finished.
3915 (BuildStep): Add interrupt(why) method, and if why is a
3916 ConnectionLost Failure then the step is failed with some useful
3919 * buildbot/slave/bot.py: stop the current command when the remote
3920 Step reference is lost, and when the slave is shut down.
3921 (Bot): make it a MultiService, so it can have children. Use
3922 stopService to tell when the slave is shutting down.
3923 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3924 remote_interruptCommand (which asks the current SlaveCommand to
3925 stop but allows it to keep emitting status messages), and
3926 stopCommand (which tells it to shut up and die).
3928 * buildbot/slave/commands.py: make commands interruptible
3929 (ShellCommand.kill): factor out os.kill logic
3930 (Command): factor out setup()
3931 (Command.sendStatus): don't send status if .running is false, this
3932 happens when the command has been halted.
3933 (Command.interrupt): new method, used to tell the command to die
3934 (SlaveShellCommand): implement .interrupt
3935 (DummyCommand): implement .interrupt
3936 (SourceBase, etc): factor out setup(), don't continue substeps if
3939 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3940 so they can be called after finishing
3942 * buildbot/test/test_run.py: new tests for disconnect behavior,
3943 refactor slave-shutdown routines, add different kinds of
3946 2004-11-27 Brian Warner <warner@lothar.com>
3948 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3949 method to express ETA time like "2m45s" instead of "165 seconds"
3951 2004-11-24 Brian Warner <warner@lothar.com>
3953 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3954 archive after the test completes, to avoid cluttering the user's
3955 'tla archives' listing with a bogus entry. Arch doesn't happen to
3956 provide any way to override the use of ~/.arch-params/, so there
3957 isn't a convenient way to avoid touching the setup of the user who
3959 (VC_HTTP.testArchHTTP): same
3961 2004-11-23 Brian Warner <warner@lothar.com>
3963 * buildbot/status/html.py (TextLog): split render() up into
3964 render_HEAD and render_GET. Use a Producer when sending log
3965 chunks, to reduce memory requirements and avoid sending huge
3966 non-Banana-able strings over web.distrib connections. Requires
3967 peeking under the covers of IStatusLog.
3968 (TextLog.resumeProducing): fix the "as text" link, handle client
3969 disconnects that occur while we're still sending old chunks.
3971 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3972 use defer.succeed, not the non-existent defer.success
3973 (LogFile.waitUntilFinished): same
3974 (LogFile.subscribe): don't add watchers to a finished logfile
3976 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3979 2004-11-23 Brian Warner <warner@lothar.com>
3981 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3983 2004-11-23 Brian Warner <warner@lothar.com>
3985 * NEWS: update for the 0.6.1 release
3986 * MANIFEST.in: add new files
3988 * README (INSTALLATION): explain how to enable the extra VC tests
3990 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3991 level to, so old pickled builds can be displayed ok
3993 2004-11-22 Brian Warner <warner@lothar.com>
3995 * NEWS: summarize updates since last release
3997 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3998 Yoz Grahame. Closes SF#1050138.
4000 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
4003 * buildbot/process/step_twisted.py (Trial): update docs a bit
4005 * docs/factories.xhtml: fix Trial factory docs to match reality.
4008 * buildbot/process/factory.py (Trial.__init__): add args for
4009 randomly= and recurse=, making them available to instantiators
4010 instead of only to subclassers. Closes: SF#1049759.
4012 2004-11-15 Brian Warner <warner@lothar.com>
4014 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4015 try to teach the Quick factory to use multiple versions of python
4017 2004-11-12 Brian Warner <warner@lothar.com>
4019 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
4020 safer w32-compatible approach, and only use it on windows
4021 (BuildStatus.saveYourself): same
4023 2004-11-11 Brian Warner <warner@lothar.com>
4025 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
4026 it: one string merge per chunk. There are now separate .entries
4027 and .runEntries lists: when enumerating over all chunks, make sure
4029 * buildbot/test/test_status.py (Log): more tests
4031 * buildbot/status/builder.py (LogFile.addEntry): Merge string
4032 chunks together, up to 10kb per chunk. This ought to cut down on
4033 the CPU-burning overhead of large log files. Thanks to Alexander
4034 Staubo for spotting the problem.
4035 * buildbot/test/test_status.py (Log): tests for same
4037 2004-11-10 Brian Warner <warner@lothar.com>
4039 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
4040 header to outbound mail
4041 * buildbot/test/test_status.py (Mail.testBuild1): test for same
4043 2004-11-08 Brian Warner <warner@lothar.com>
4045 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
4046 can't do os.rename() onto an existing file, so catch the exception
4047 and unlink the target file first. This introduces a slight window
4048 where the existing file could be lost, but the main failure case
4049 (disk full) should still be handled safely.
4050 (BuildStatus.saveYourself): same
4052 * buildbot/changes/pb.py (ChangePerspective): use a configurable
4053 separator character instead of os.sep, because the filenames being
4054 split here are coming from the VC system, which can have a
4055 different pathname convention than the local host. This should
4056 help a buildmaster running on windows that uses a CVS repository
4057 which runs under unix.
4058 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
4060 * buildbot/process/step_twisted.py (Trial.createSummary): survive
4061 when there are no test failures to be parsed
4063 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
4064 instead of the unix-specific os.system("cp"), thanks to Elliot
4065 Murphy for this and the other buildbot-vs-windows catches.
4066 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
4068 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
4069 echo the command as it is run
4071 * setup.py: install sample.mk too, not just sample.cfg
4072 (scripts): install contrib/windows/buildbot.bat on windows
4074 2004-11-07 Brian Warner <warner@lothar.com>
4076 * buildbot/process/builder.py (Builder._detached): clear the
4077 self.currentBuild reference, otherwise the next build will be
4078 skipped because we think the Builder is already in use.
4080 * docs/examples/twisted_master.cfg: update to match current usage
4081 on the Twisted buildbot
4083 2004-10-29 Brian Warner <warner@lothar.com>
4085 * buildbot/status/mail.py (MailNotifier): fix typo in docs
4087 2004-10-28 Brian Warner <warner@lothar.com>
4089 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
4090 have separate doVCUpdate/doVCFull methods. Catch an update failure
4091 and respond by clobbering the source directory and re-trying. This
4092 will handle local changes (like replacing a file with a directory)
4093 that will cause CVS and SVN updates to fail.
4094 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
4096 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
4099 2004-10-19 Brian Warner <warner@lothar.com>
4101 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
4103 * buildbot/status/html.py (StatusResourceTestResults): display any
4104 TestResults that the Build might have
4105 (StatusResourceTestResult): and the logs for each TestResult
4106 (StatusResourceBuild): add link from the per-build page
4108 2004-10-15 Brian Warner <warner@lothar.com>
4110 * buildbot/process/step_twisted.py (Trial.createSummary): parse
4111 the 'problems' portion of stdout, add TestResults to our build
4112 * buildbot/test/test_twisted.py (Parse.testParse): test it
4114 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
4115 to retrieve a dict of accumulated test results
4116 (ITestResult): define what a single test result can do
4117 * buildbot/status/builder.py (TestResult): implement ITestResult
4118 (BuildStatus.getTestResults): retrieve dict of TestResults
4119 (BuildStatus.addTestResult): add TestResults
4120 * buildbot/test/test_status.py (Results.testAddResults): test it
4122 2004-10-14 Brian Warner <warner@lothar.com>
4124 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
4125 instead of os.system("rm -rf") for win32 portability
4127 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
4128 SignalMixin instead of starting/stopping the reactor, which is
4129 likely to cause problems with other tests
4131 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
4132 self.copyComplete() call. Yoz Grahame makes the catch.
4134 * contrib/windows/buildbot.bat: helper script to deal with path
4135 issues. Thanks to Yoz Grahame.
4137 * buildbot/master.py (BuildMaster.startService): don't register a
4138 SIGHUP handler if the signal module has no SIGHUP attribute.
4139 Apparently win32 does this.
4141 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
4143 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
4144 test if the reactor can't offer UNIX sockets
4146 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
4147 error introduced in the last commit. We really need that
4150 2004-10-12 Brian Warner <warner@lothar.com>
4152 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
4153 when describing a maildir source. Thanks to Stephen Davis.
4155 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
4158 * buildbot/scripts/runner.py (createMaster): install Makefile too
4159 (start): add --no_save to 'start' command
4160 * buildbot/scripts/sample.mk: simple convenience Makefile with
4161 start/stop/reload targets
4163 * buildbot/__init__.py (version): bump to 0.6.0+ while between
4166 2004-09-30 Brian Warner <warner@lothar.com>
4168 * setup.py: Releasing buildbot-0.6.0
4170 2004-09-30 Brian Warner <warner@lothar.com>
4172 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
4173 test_trial.py from the source tarball until support is complete.
4175 * NEWS: update for 0.6.0 release
4176 * buildbot/__init__.py (version): same
4179 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
4180 'source' command to tell users where to get the Buildbot source
4182 * docs/examples/*.cfg: update to modern standards
4184 * NEWS: update for release
4186 * buildbot/scripts/runner.py (createMaster): remove the
4187 -shutdown.tap stuff now that it isn't necessary
4189 (start): launch buildbot.tap, not buildbot-shutdown.tap
4192 * buildbot/status/mail.py (Domain): shorten class name
4193 (MailNotifier): if lookup= is a string, pass it to Domain()
4194 * buildbot/test/test_status.py (Mail.testBuild1): new class name
4195 (Mail.testBuild2): test the string-to-Domain shortcut
4196 (Mail.testMail): fix test
4199 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
4202 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
4203 more attributes on load
4204 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
4205 to accomodate the whole waterfall page at once, and the thrashing
4206 results in a lot of unnecessary loads
4207 (BuildStatus.saveYourself): use binary pickles, not fluffy text
4208 (BuilderStatus.saveYourself): same
4209 (BuilderStatus.eventGenerator): stop generating on the first missing
4210 build. We assume that saved builds are deleted oldest-first.
4211 (BuildStepStatus.__getstate__): .progress might not exist
4213 * buildbot/changes/changes.py (ChangeMaster): make it
4214 serializable, in $masterdir/changes.pck
4215 (ChangeMaster.stopService): save on shutdown
4216 * buildbot/master.py (BuildMaster.loadChanges): load at startup
4217 * buildbot/test/test_config.py: load Changes before config file
4220 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
4221 "Oh my god, you killed the command" header on a separate line
4223 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
4224 skip over corrupted build pickles
4225 (BuilderStatus.getFullBuildByNumber): same
4226 (BuilderStatus.eventGenerator): skip over unavailable builds
4227 (BuildStatus.saveYourself): save builds to a .tmp file first, then
4228 do an atomic rename. This prevents a corrupted pickle when some
4229 internal serialization error occurs.
4230 (BuilderStatus.saveYourself): same
4232 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
4233 the timeout for shell commands, it got lost somehow
4235 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
4236 run out of build steps, return the rest of the builder events
4238 * buildbot/interfaces.py (IBuilderControl.ping): add method
4240 * buildbot/process/builder.py (BuilderControl.ping): move
4241 slave-ping to BuilderControl, and fix the failure case in the
4242 process (Event.finish() is the verb, Event.finished is the noun).
4244 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
4245 through the BuilderControl instead of the BuilderStatus
4246 (EventBox): add adapter for builder.Event, allowing builder events to
4247 be displayed in the waterfall display
4249 * buildbot/master.py (BotMaster.stopService): add a 'master
4250 shutdown' event to the builder's log
4251 (BuildMaster.startService): and a 'master started' on startup
4253 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
4254 builder events into the BuildStep event stream
4255 (Status.builderAdded): add a 'builder created' event
4258 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
4259 command to announce the completion of a running build
4260 (IrcStatusBot.command_FORCE): announce when the build finishes
4262 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
4263 don't evict unfinished builds from the cache: they must stay in
4264 the full-cache until their logfiles have stopped changing. Make
4265 sure the eviction loop terminates if an unfinished build was hit.
4266 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
4267 This lets exceptions be dumped in an email status message. Really
4268 we need LogFiles which contain both text and HTML, instead of two
4270 (BuildStatus.__getstate__): handle self.finished=False
4271 (Status.builderAdded): if the pickle is corrupted, abandon the
4272 history and create a new BuilderStatus object.
4274 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
4275 self.progress attribute, helped one test which doesn't fully set
4276 up the Build object.
4278 * buildbot/interfaces.py (IStatusLogStub): split out some of the
4279 IStatusLog methods into an Interface that is implemented by "stub"
4280 logs, for which all the actual text chunks are on disk (in the
4281 pickled Build instance). To show the log contents, you must first
4282 adapt the stub log to a full IStatusLog object.
4284 * buildbot/status/builder.py (LogFileStub): create separate stub
4285 log objects, which can be upgraded to a real one if necessary.
4286 (LogFile): make them persistable, and let them stubify themselves
4288 (BuildStepStatus): same
4290 (BuildStatus.saveYourself): save the whole build out to disk
4291 (BuilderStatus): make it persistable
4292 (BuilderStatus.saveYourself): save the builder to disk
4293 (BuilderStatus.addFullBuildToCache): implement two caches which
4294 hold Build objects: a small one which holds full Builds, and a
4295 larger one which holds "stubbed" Builds (ones with their LogFiles
4296 turned into LogFileStubs). This reduces memory usage by the
4297 buildmaster by not keeping more than a few (default is 2) whole
4298 build logs in RAM all the time.
4299 (BuilderStatus.getBuild): rewrite to pull from disk (through the
4301 (BuilderStatus.eventGenerator): rewrite since .builds went away
4302 (BuilderStatus.buildStarted): remove the .builds array. Add the
4303 build to the "full" cache when it starts.
4304 (BuilderStatus._buildFinished): save the build to disk when it
4306 (Status): give it a basedir (same as the BuildMaster's basedir)
4307 where the builder pickles can be saved
4308 (Status.builderAdded): create the BuilderStatus ourselves, by
4309 loading a pickle from disk (or creating a new instance if there
4310 was none on disk). Return the BuilderStatus so the master can glue
4311 it into the new Builder object.
4313 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
4314 all BuilderStatuses to save themselves out to disk. This is in
4315 lieu of saving anything important in the main Application pickle
4316 (the -shutdown.tap file).
4317 (BuildMaster.__init__): give Status() a basedir for its files
4318 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
4319 to get the BuilderStatus, then give it to the Builder (instead of
4320 doing it the other way around). It's ok if the status announces
4321 the new Builder before it's really ready, as the outside world can
4322 only see the BuilderStatus object anyway (and it is ready before
4323 builderAdded returns). Use the builder's "builddir" (which
4324 normally specifies where the slave will run the builder) as the
4325 master's basedir (for saving serialized builds).
4327 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
4328 coerce the logfile to IStatusLog before trying to get the text
4329 chunks out of it. This will pull the full (non-stubified) Build in
4330 from disk if necessary.
4331 (TextLog): fix the adapter registration
4333 * buildbot/test/test_control.py (Force.setUp): create the basedir
4334 * buildbot/test/test_web.py: same
4335 * buildbot/test/test_vc.py (SetupMixin.setUp): same
4336 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
4337 * buildbot/test/test_run.py (Run.testMaster): same
4338 (Status.setUp): same
4340 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
4342 * buildbot/status/html.py (Waterfall.__init__): store actual
4343 allowForce flag passed in rather than using True for everyone;
4344 make sure setting it to False doesn't cause a NameError
4346 (StatusResourceBuilder.__init__) add the builder name to the page
4348 (StatusResourceBuilder.body) move HTML generation for a name/value
4349 row into a helper method (StatusResourceBuilder.make_row); only
4350 generate the "Force Build" form if allowForce was True and the
4351 slave is connected. Use class attributes in the generated HTML to
4352 spread a little CSS-joy.
4354 2004-09-28 Brian Warner <warner@lothar.com>
4356 * buildbot/process/step_twisted.py (Trial.createSummary): fix
4357 warning-scanner to not ignore things like
4358 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
4360 * buildbot/status/html.py (StatusResource.control): add some
4361 class-level values for .control in an attempt to make upgrading
4364 * buildbot/util.py (ComparableMixin): survive missing attributes,
4365 such as when a class is modified and we're comparing old instances
4368 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
4369 failure handling, remove a redundant try/except block. Don't
4370 return the full traceback to the IRC channel.
4371 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
4372 error messages. Get ETA properly.
4374 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
4375 the reason, since (at least) IRC message will have <> in them.
4376 (StatusResourceBuilder.__init__): take an IBuilderControl
4377 (StatusResourceBuilder.force): use the IBuilderControl we get in
4378 the constructor instead of trying to make our own. Catch the
4379 new exceptions and ignore them for now (until we make an
4380 intermediate web page where we could show the error message)
4381 (StatusResource): create with an IControl, use it to give an
4382 IBuilderControl to all children
4383 (Waterfall): take an allowForce= option, pass an IControl object
4384 to StatusResource if it is True
4386 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
4388 * buildbot/master.py (BotPerspective.perspective_forceBuild):
4389 catch new exceptions and return string forms
4391 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
4392 * buildbot/process/builder.py (Builder.forceBuild): raise them
4393 * buildbot/test/test_control.py (Force.testNoSlave): new test
4394 (Force.testBuilderInUse): same
4397 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
4399 * buildbot/test/test_run.py: use IControl
4400 * buildbot/test/test_vc.py: same
4402 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
4403 to use IControl. Still offline.
4404 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
4406 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
4407 who=None so periodic builds don't send out status mail
4408 (Builder.forceBuild): include reason in the log message
4409 (BuilderControl.forceBuild): rename 'name' to 'who'
4411 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
4412 'who' parameter, but make it None by default so builds forced by
4413 slave admins don't cause status mail to be sent to anybody
4414 (BotMaster.forceBuild): same. this method is deprecated.
4415 (DebugPerspective.perspective_forceBuild): same, use IControl.
4416 (DebugPerspective.perspective_fakeChange): use IControl..
4417 (Dispatcher.requestAvatar): .. so don't set .changemaster
4419 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4420 parameter to avoid confusion with the name of the builder
4423 * buildbot/status/mail.py: refine comment about needing 2.3
4425 * buildbot/status/html.py: move all imports to the top
4427 * buildbot/test/test_control.py: test new interfaces
4428 * buildbot/test/test_run.py (Status): handle new interfaces
4429 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4431 * buildbot/process/base.py (BuildControl): implement IBuildControl
4432 and its lonely getStatus() method
4434 * buildbot/process/builder.py (BuilderControl): implement
4435 IBuilderControl, obtained by adapting the Builder instance
4436 (Builder.startBuild): return a BuilderControl instead of a
4437 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4438 accomplish the same thing.
4440 * buildbot/master.py: move all import statements to the top
4441 (Control): implement IControl, obtained by adapting the
4442 BuildMaster instance.
4444 * buildbot/interfaces.py: add IControl, IBuilderControl, and
4445 IBuildControl. These are used to force builds. Eventually they
4446 will provide ways to reconfigure the Builders, pause or abandon a
4447 Build, and perhaps control the BuildMaster itself.
4449 2004-09-26 Brian Warner <warner@lothar.com>
4451 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4452 ends up comparing us against something without a .__class__
4454 2004-09-24 Brian Warner <warner@lothar.com>
4456 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4459 * Makefile: add 'deb-snapshot' target, to create a timestamped
4462 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4464 2004-09-23 Brian Warner <warner@lothar.com>
4466 * buildbot/__init__.py (version): move version string here
4467 * setup.py: get version string from buildbot.version
4468 * buildbot/status/html.py (WaterfallStatusResource.body): add
4469 buildbot version to the page footer
4470 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4473 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4474 slaves, let the second know where the first one is coming from
4475 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
4476 see our exceptions. It would be nice if there were a way to just
4477 send them the exception type and value, not the full traceback.
4480 * buildbot/status/mail.py (MailNotifier): add a new argument
4481 sendToInterestedUsers=, which can be set to False to disable the
4482 usual send-to-blamelist behavior.
4483 (top): handle python-2.2 which has no email.MIMEMultipart
4484 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
4485 (MailNotifier.disownServiceParent): unsubscribe on removal
4487 * buildbot/test/test_status.py (Mail.testBuild2): test it
4490 * buildbot/status/progress.py (Expectations.wavg): tolerate
4491 current=None, which happens when steps start failing badly
4492 * buildbot/test/test_status.py (Progress.testWavg): test for it
4494 * buildbot/process/step.py (SVN.startVC): when the (old) slave
4495 doesn't understand args['revision'], emit a warning instead of
4496 bailing completely. Updating to -rHEAD is probably close enough.
4498 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
4500 * buildbot/test/test_status.py: at least import bb.status.client
4501 even if we don't have any test coverage for it yet
4503 * contrib/svn_buildbot.py: don't require python2.3
4504 (main): wait, do require it (for sets.py), but explain how to
4505 make it work under python2.2
4507 2004-09-23 Brian Warner <warner@lothar.com>
4509 * contrib/svn_buildbot.py: include the revision number in the Change
4511 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
4512 using util.now() because FreshCVS is a realtime service
4514 * buildbot/status/event.py: delete dead code
4515 * buildbot/process/step.py: don't import dead Event class
4516 * buildbot/process/step_twisted.py: same
4517 * buildbot/status/builder.py: same
4518 * buildbot/status/client.py: same
4520 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
4522 * buildbot/changes/changes.py (Change): set .when from an __init__
4523 argument (which defaults to now()), rather than having
4524 ChangeMaster.addChange set it later.
4525 (ChangeMaster.addChange): same
4527 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
4528 (parseSyncmail): same. Just use util.now() for now.
4529 (parseBonsaiMail): parse the timestamp field for when=
4531 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
4532 instead of setting .when after the fact
4536 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
4537 results when the target project uses retrial. Still under
4539 * buildbot/test/test_trial.py: same
4541 2004-09-21 Brian Warner <warner@lothar.com>
4543 * buildbot/status/mail.py (MailNotifier.__init__): include
4544 success/warnings/failure in the Subject line
4545 (MailNotifier.buildMessage): add the buildbot's URL to the body,
4546 use step.logname for the addLogs=True attachment filenames
4547 * buildbot/test/test_status.py (Mail): test Subject lines
4548 (Mail.testLogs): test attachment filenames
4550 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
4551 accept a 'who' argument from the debug tool
4552 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
4553 * contrib/debug.glade: add text box to set 'who'
4555 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
4556 .getBuilderName with .getBuilder().getName(), more flexible
4557 (IStatusLog.getName): logs have short names, but you can prefix
4558 them with log.getStep().getName() to make them more useful
4559 * buildbot/status/builder.py: same
4560 * buildbot/status/client.py: same
4561 * buildbot/status/html.py: same
4562 * buildbot/test/test_run.py (Status.testSlave): same
4563 * buildbot/process/step.py: tweak logfile names
4565 * buildbot/status/mail.py (MailNotifier): add lookup, change
4566 argument to extraRecipients. The notifier is now aimed at sending
4567 mail to the people involved in a particular build, with additional
4568 constant recipients as a secondary function.
4570 * buildbot/test/test_status.py: add coverage for IEmailLookup,
4571 including slow-lookup and failing-lookup. Make sure the blamelist
4572 members are included.
4574 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
4575 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
4576 (IBuildStatus.getInterestedUsers): new method
4577 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
4578 * buildbot/status/client.py (remote_getResponsibleUsers): same
4579 * buildbot/status/html.py (StatusResourceBuild.body): same
4580 * buildbot/test/test_run.py (Status.testSlave): same
4582 2004-09-20 Brian Warner <warner@lothar.com>
4584 * docs/users.xhtml: update concepts
4586 * Makefile: add a convenience makefile, for things like 'make
4587 test'. It is not included in the source tarball.
4589 2004-09-16 Brian Warner <warner@lothar.com>
4591 * NEWS: mention /usr/bin/buildbot, debian/*
4593 * debian/*: add preliminary debian packaging. Many thanks to
4594 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
4595 it considerably since it left their hands, I am responsible for
4596 all breakage that's resulted.
4598 * bin/buildbot: create a top-level 'buildbot' command, to be
4599 installed in /usr/bin/buildbot . For now it's just a simple
4600 frontend to mktap/twistd/kill, but eventually it will be the entry
4601 point to the 'try' command and also a status client. It is also
4602 intended to support the upcoming debian-packaging init.d scripts.
4603 * buildbot/scripts/runner.py: the real work is done here
4604 * buildbot/scripts/__init__.py: need this too
4605 * buildbot/scripts/sample.cfg: this is installed in new
4606 buildmaster directories
4607 * setup.py: install new stuff
4609 2004-09-15 Brian Warner <warner@lothar.com>
4611 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4612 'file:' schema (the version shipped with OS-X was built without the
4614 (SetupMixin.tearDown): stop the goofy twisted.web timer which
4615 updates the log-timestamp, to make sure it isn't still running after
4618 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
4619 values to the config file.
4620 * docs/examples/hello.cfg: add examples
4621 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
4622 * buildbot/status/builder.py (Status.getProjectURL): implement them
4623 * buildbot/master.py (BuildMaster.loadConfig): set them from config
4624 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
4625 * buildbot/status/html.py (WaterfallStatusResource): display them
4628 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
4629 certain error cases don't suffer a secondary exception.
4630 (top): Skip tests if the corresponding VC tool is not installed.
4632 * buildbot/process/factory.py (Trial): introduce separate
4633 'buildpython' and 'trialpython' lists, since trialpython=[] is
4634 what you want to invoke /usr/bin/python, whereas ./setup.py is
4635 less likely to be executable. Add env= parameter to pass options
4636 to test cases (which is how I usually write tests, I don't know if
4637 anyone else does it this way).
4639 * buildbot/process/step_twisted.py (Trial): handle python=None.
4640 Require 'testpath' be a string, not a list. Fix tests= typo.
4641 (Trial.start): sanity-check any PYTHONPATH value for stringness.
4643 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4644 way to deal with the possibility of removing the disconnect notify
4646 (CVS): add a 'login' parameter to give a password to 'cvs login',
4647 commonly used with pserver methods (where pw="" or pw="guest")
4649 * buildbot/slave/commands.py (SourceBase): move common args
4650 extraction and setup() to __init__, so everything is ready by the
4651 time setup() is called
4652 (CVS.start): call 'cvs login' if a password was supplied
4653 (ShellCommand): special-case PYTHONPATH: prepend the master's
4654 value to any existing slave-local value.
4656 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4657 don't have a remote, mark the builder as Offline. This whole
4658 function should probably go away and be replaced by individual
4660 (Builder.buildFinished): return the results to the build-finished
4661 deferred callback, helps with testing
4663 2004-09-14 Brian Warner <warner@lothar.com>
4665 * buildbot/test/test_vc.py: put all the repositories needed to run
4666 the complete tests into a single small (1.3MB) tarball, so I can
4667 make that tarball available on the buildbot web site. Test HTTP
4668 access (for Arch and Darcs) by spawning a temporary web server
4669 while the test runs.
4671 * docs/users.xhtml: new document, describe Buildbot's limited
4672 understanding of different human users
4674 * buildbot/test/test_vc.py: rearrange test cases a bit
4676 * buildbot/process/step_twisted.py (Trial): handle testpath=
4677 * buildbot/process/factory.py (Trial): update to use step.Trial
4679 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4681 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4682 the overall build text (which gives you 'failed 2 tests' rather
4684 (BuildStepStatus.text2): default to [], not None
4686 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4689 2004-09-12 Brian Warner <warner@lothar.com>
4691 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4692 log the whole exception if it's just an AttributeError (old slave)
4694 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4695 so (e.g.) sub-commands can be run in the right directory.
4696 (ShellCommand.start): accept an optional errorMessage= argument
4697 to make life easier for SVN.start
4698 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4700 (ShellCommand.start): move ['dir'] compatibility hack..
4701 (RemoteShellCommand.start): .. to here so everyone can use it
4703 * buildbot/process/step_twisted.py (Trial): use .workdir
4705 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4706 text displayed when debuild fails completely
4707 (Trial): snarf _trial_temp/test.log from the slave and display it
4709 2004-09-11 Brian Warner <warner@lothar.com>
4711 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4713 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4714 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4716 * buildbot/process/step.py (ShellCommand): call .createSummary
4717 before .evaluateCommand instead of the other way around. This
4718 makes it slightly easier to count warnings and then use that to
4719 set results=WARNINGS
4720 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4722 * buildbot/process/base.py (Build.buildFinished): update status
4723 before doing progress. It's embarrassing for the build to be stuck
4724 in the "building" state when an exceptions occurs elsewhere..
4726 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4727 python2.2 doesn't have 'sum'
4729 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4730 to prevent clients from accidentally sorting it
4732 * buildbot/master.py (Manhole): add username/password
4733 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4734 c['manholePort'], deprecate old usage
4735 * docs/config.xhtml: document c['manhole']
4736 * docs/examples/hello.cfg: show example of using a Manhole
4739 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4740 pretend the slave is up to date
4742 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4743 the module, overlaps with 'log', the local variable
4745 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4747 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4748 new method to let Steps find out the version of their
4749 corresponding SlaveCommand.
4750 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4751 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4752 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4754 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4755 (Arch.startVC): same
4756 (P4Sync.startVC): same
4758 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4759 Deferred so we can catch errors in remote_startCommand
4760 (RemoteShellCommand.start): same
4762 * docs/examples/twisted_master.cfg: update sample config file
4764 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4765 after connectionMade() is called, not before. Close stdin at that
4768 * buildbot/process/process_twisted.py: update to use Trial, clean
4769 up argument passing (move to argv arrays instead of string
4772 * buildbot/process/step_twisted.py (Trial): new step to replace
4773 RunUnitTests, usable by any trial-using project (not just
4774 Twisted). Arguments have changed, see the docstring for details.
4776 * buildbot/process/base.py (Build.startBuild): this now returns a
4777 Deferred. Exceptions that occur during setupBuild are now
4778 caught better and lead to fewer build_status weirdnesses, like
4779 finishing a build that was never started.
4780 (Build.buildFinished): fire the Deferred instead of calling
4781 builder.buildFinished directly. The callback argument is this
4782 Build, everything else can be extracted from it, including the
4783 new build.results attribute.
4784 * buildbot/process/builder.py (Builder.startBuild): same
4785 (Builder.buildFinished): same, extract results from build
4787 * buildbot/process/step.py (ShellCommands): remove dead code
4789 2004-09-08 Brian Warner <warner@lothar.com>
4791 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4792 doesn't try to use the leftover patched workdir
4793 (SourceStamp): test source-stamp computation for CVS and SVN
4795 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4796 patched workdir ('touch .buildbot-patched') so we don't try to
4798 (SourceBase.start): add ['revision'] for all Source steps
4799 (CVS): change args: use ['branch'] for -r, remove ['files']
4800 (CVS.buildVC): fix revision/branch stuff
4801 (SVN): add revision stuff
4803 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4804 kwargs (except 'workdir') to avoid silent spelling errors
4805 (ShellCommand.__init__): same
4806 (Source): new base class for CVS/SVN/etc. Factor out everything
4807 common, add revision computation (perform the checkout with a -D
4808 DATE or -r REVISION that gets exactly the sources described by the
4809 last Change), overridable with step.alwaysUseLatest. Add patch
4810 handling (build.getSourceStamp can trigger the use of a base
4811 revision and a patch).
4812 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4813 * docs/steps.xhtml: update docs
4814 * docs/source.xhtml: mention .checkoutDelay
4815 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4817 * buildbot/process/base.py (Build.setSourceStamp): add a
4818 .sourceStamp attribute to each Build. If set, this indicates that
4819 the build should be done with something other than the most
4820 recent source tree. This will be used to implement "try" builds.
4821 (Build.allChanges): new support method
4822 (Build.lastChangeTime): remove, functionality moved to Source steps
4823 (Build.setupBuild): copy the Step args before adding ['workdir'],
4824 to avoid modifying the BuildFactory (and thus triggering spurious
4828 * buildbot/status/html.py: rename s/commits/changes/
4829 (StatusResourceChanges): same
4830 (CommitBox.getBox): same, update URL
4831 (WaterfallStatusResource): same
4832 (StatusResource.getChild): same
4834 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4835 * contrib/debug.glade: add optional 'revision' to the fakeChange
4837 * buildbot/changes/changes.py (html_tmpl): display .revision
4838 (ChangeMaster.addChange): note .revision in log
4839 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4840 accept a ['revision'] attribute
4842 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4844 * buildbot/master.py (BotMaster.getPerspective): update the
4845 .connected flag in SlaveStatus when it connects
4846 (BotMaster.detach): and when it disconnects
4847 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4848 (BuildMaster.loadConfig_Builders): walk old list correctly
4850 * buildbot/test/test_config.py: fix prefix= usage
4852 2004-09-06 Brian Warner <warner@lothar.com>
4856 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4857 poll a P4 depot looking for recent changes. Thanks to Dave
4858 Peticolas for the contribution. Probably needs some testing after
4861 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4862 requires manual client setup for each buildslave. Rather
4863 experimental. Thanks again to Dave Peticolas.
4864 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4866 * buildbot/changes/changes.py (Change): add a .revision attribute,
4867 which will eventually be used to generate source-stamp values.
4869 * buildbot/process/step.py (RemoteCommand.start): use
4870 notifyOnDisconnect to notice when we lose the slave, then treat it
4871 like an exception. This allows LogFiles to be closed and the build
4872 to be wrapped up normally. Be sure to remove the disconnect
4873 notification when the step completes so we don't accumulate a
4874 bazillion such notifications which will fire weeks later (when the
4875 slave finally disconnects normally). Fixes SF#915807, thanks to
4876 spiv (Andrew Bennetts) for the report.
4877 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4878 really isn't Logged- specific
4879 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4880 header, since it's almost always going to be appended to an
4882 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4883 update test to handle use of notifyOnDisconnect
4885 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4886 don't clear .ETA and .currentBuild when going offline, let the
4887 current build clean up after itself
4889 * buildbot/process/builder.py (Builder.detached): wait a moment
4890 before doing things like stopping the current build, because the
4891 current step will probably notice the disconnect and cleanup the
4893 * buildbot/test/test_run.py (Status.tearDown): update test to
4894 handle asynchronous build-detachment
4896 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4898 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4899 hush a debug message
4901 2004-09-05 Brian Warner <warner@lothar.com>
4903 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4904 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4905 kernels do this: the fcntl module has the F_NOTIFY constant, but
4906 the kernel itself doesn't support the operation. Thanks to Olly
4907 Betts for spotting the problem.
4909 * buildbot/process/step.py (Darcs): new source-checkout command
4910 (Arch): new source-checkout command
4911 (todo_P4): fix constructor syntax, still just a placeholder
4912 * buildbot/test/test_vc.py (VC.testDarcs): test it
4913 (VC.testDarcsHTTP): same, via localhost HTTP
4915 (VC.testArchHTTP): same
4916 * NEWS: mention new features
4918 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4919 which tells the step to stash stdout text locally (in .stdout).
4920 Slave-side Commands can use this to make decisions based upon the
4921 output of the the ShellCommand (not just the exit code).
4922 (Darcs): New source-checkout command
4923 (Arch): New source-checkout command, uses .keepStdout in one place
4924 where it needs to discover the archive's default name.
4926 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4927 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4928 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4930 * buildbot/process/step.py (ShellCommand.describe): add an
4931 alternate .descriptionDone attribute which provides descriptive
4932 text when the step is complete. .description can be ["compiling"],
4933 for use while the step is running, then .descriptionDone can be
4934 ["compile"], used alone when the step succeeds or with "failed" when
4935 it does not. Updated other steps to use the new text.
4936 * buildbot/process/step_twisted.py: same
4937 * buildbot/test/test_run.py: update tests to match
4939 2004-08-30 Brian Warner <warner@lothar.com>
4941 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4942 (CVS.__init__): send 'patch' argument to slave
4943 (CVS.start): don't create the LoggedRemoteCommand until start(),
4944 so we can catch a .patch added after __init__
4945 (SVN.__init__): add 'patch' to SVN too
4948 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4949 argument, to let commands push data into the process' stdin pipe.
4950 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4951 is in use, since closing a PTY doesn't really affect the process
4952 in the right way (in particular, I couldn't run /usr/bin/patch
4954 (SourceBase.doPatch): handle 'patch' argument
4956 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4959 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4960 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4962 * buildbot/master.py (BotPerspective.got_commands): get command
4963 versions from slave, give to each builder
4964 * buildbot/process/builder.py (Builder.attached): stash slave
4965 command versions in .remoteCommands
4967 * docs/steps.xhtml: bring docs in-line with reality
4969 * buildbot/process/step.py (CVS.__init__): more brutal
4970 compatibility code removal
4971 (SVN.__init__): same
4973 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4974 (SlaveShellCommand.start): require ['workdir'] argument, remove
4975 the ['dir'] fallback (compatibility will come later)
4976 (SourceBase): update docs
4977 (SourceBase.start): remove ['directory'] fallback
4980 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4981 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4982 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4984 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4985 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4986 code.. I will figure out 0.5.0-compatibility hooks later)
4988 2004-08-30 Brian Warner <warner@lothar.com>
4990 * buildbot/process/process_twisted.py: rewrite in terms of new
4991 BuildFactory base class. It got significantly shorter. Yay
4994 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4995 work with the new "self.build isn't nailed down until we call
4996 step.start()" scheme: specifically, __init__ is called before the
4997 build has decided on which Changes are going in, so we don't scan
4998 build.allFiles() for .xhtml files until start()
4999 (HLint.commandComplete): use getText(), not getStdout()
5000 (RunUnitTests.start): same: don't use .build until start()
5001 (RunUnitTests.describe): oops, don't report (None) when using
5003 (RunUnitTests.commandComplete): use getText()
5004 (RunUnitTests.createSummary): same
5005 (BuildDebs.commandComplete): same
5007 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
5008 set args['command'] until start(), since our BuildStep is allowed
5009 to change their mind up until that point
5010 (TreeSize.commandComplete): use getText(), not getStdout()
5012 * docs/examples/twisted_master.cfg: update to current standards
5014 * docs/factories.xhtml: update
5015 * buildbot/process/factory.py: implement all the common factories
5016 described in the docs. The Trial factory doesn't work yet, and
5017 I've probably broken all the process_twisted.py factories in the
5018 process. There are compatibility classes left in for things like
5019 the old BasicBuildFactory, but subclasses of them are unlikely to
5021 * docs/examples/glib_master.cfg: use new BuildFactories
5022 * docs/examples/hello.cfg: same
5024 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
5025 explicit 'workdir' args
5027 * buildbot/process/base.py (BuildFactory): move factories to ..
5028 * buildbot/process/factory.py (BuildFactory): .. here
5029 * buildbot/process/process_twisted.py: handle move
5030 * buildbot/test/test_config.py: same
5031 * buildbot/test/test_run.py: same
5032 * buildbot/test/test_steps.py: same
5033 * buildbot/test/test_vc.py: same
5034 * docs/factories.xhtml: same
5036 * NEWS: mention config changes that require updating master.cfg
5038 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
5039 argument to all steps that weren't given one already, pointing at
5040 the "build/" directory.
5042 * docs/examples/hello.cfg: remove explicit 'workdir' args
5044 * docs/factories.xhtml: document standard BuildFactory clases,
5045 including a bunch which are have not yet been written
5047 2004-08-29 Brian Warner <warner@lothar.com>
5049 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
5050 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
5051 buildbot.status.builder so they aren't quite so internal
5052 * buildbot/process/base.py, buildbot/process/builder.py: same
5053 * buildbot/process/maxq.py, buildbot/process/step.py: same
5054 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
5055 * buildbot/status/mail.py, buildbot/test/test_run.py: same
5056 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
5058 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
5059 to handle new getLogs()-returns-list behavior
5060 (StatusResourceBuildStep.getChild): same
5061 (StepBox.getBox): same
5062 (WaterfallStatusResource.phase0): same
5064 * docs/source.xhtml: document how Buildbot uses version-control
5065 systems (output side: how we get source trees)
5066 * docs/changes.xhtml: rename from sources.xhtml, documents VC
5067 systems (input side: how we learn about Changes)
5069 * buildbot/master.py (Manhole): use ComparableMixin
5070 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
5071 * buildbot/changes/mail.py (MaildirSource): same
5072 * buildbot/status/client.py (PBListener): same
5073 * buildbot/status/html.py (Waterfall): same
5074 * buildbot/status/words.py (IRC): same
5076 * NEWS: start describing new features
5078 * buildbot/status/mail.py (MailNotifier): finish implementation.
5079 The message body is still a bit sparse.
5080 * buildbot/test/test_status.py (Mail): test it
5082 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
5083 and __hash__ methods I wind up adding everywhere. Specifically
5084 intended to support the buildbot config-file update scheme where
5085 we compare, say, the old list of IStatusTargets against the new
5086 one and don't touch something which shows up on both lists.
5087 * buildbot/test/test_util.py (Compare): test case for it
5089 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
5090 return a list instead of a dict
5091 (IBuildStepStatus.getLogs): same. The idea is that steps create
5092 logs with vaguely unique names (although their uniqueness is not
5093 guaranteed). Thus a compilation step should create its sole
5094 logfile with the name 'compile', and contribute it to the
5095 BuildStatus. If a step has two logfiles, try to create them with
5096 different names (like 'test.log' and 'test.summary'), and only
5097 contribute the important ones to the overall BuildStatus.
5098 * buildbot/status/builder.py (Event.getLogs): same
5099 (BuildStepStatus): fix default .text and .results
5100 (BuildStepStatus.addLog): switch to list-like .getLogs()
5101 (BuildStepStatus.stepFinished): same
5102 (BuildStatus.text): fix default .text
5103 (BuildStatus.getLogs): temporary hack to return all logs (from all
5104 child BuildStepStatus objects). Needs to be fixed to only report
5105 the significant ones (as contributed by the steps themselves)
5106 * buildbot/test/test_run.py: handle list-like .getLogs()
5107 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
5109 2004-08-28 Brian Warner <warner@lothar.com>
5111 * buildbot/process/builder.py (Builder.attached): serialize the
5112 attachment process, so the attach-watcher isn't called until the
5113 slave is really available. Add detached watchers too, which makes
5116 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
5118 * buildbot/test/test_swap.py: remove dead code
5120 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
5121 (ShellCommand.start): treat errors in _startCommand/spawnProcess
5122 sort of as if the command being run exited with a -1. There may
5123 still be some holes in this scheme.
5124 (CVSCommand): add 'revision' tag to the VC commands, make sure the
5125 -r option appears before the module list
5126 * buildbot/process/step.py (CVS): add 'revision' argument
5128 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
5129 when sending updates or stepComplete messages to the master, since
5130 we don't currently care whether they arrive or not. When we revamp
5131 the master/slave protocol to really resume interrupted builds,
5132 this will need revisiting.
5133 (lostRemote): remove spurious print
5135 * buildbot/master.py (BotPerspective.attached): serialize the
5136 new-builder interrogation process, to make testing easier
5137 (BotMaster.waitUntilBuilderDetached): convenience function
5139 * buildbot/status/builder.py (BuilderStatus): prune old builds
5140 (BuildStatus.pruneSteps): .. and steps
5141 (BuildStepStatus.pruneLogs): .. and logs
5142 (BuilderStatus.getBuild): handle missing builds
5143 * buildbot/status/html.py (StatusResourceBuild.body): display build
5144 status in the per-build page
5145 (BuildBox.getBox): color finished builds in the per-build box
5147 2004-08-27 Brian Warner <warner@lothar.com>
5149 * buildbot/status/mail.py (MailNotifier): new notification class,
5152 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
5153 variants of a common base class which handles all the mode= logic
5155 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
5157 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
5159 2004-08-26 Brian Warner <warner@lothar.com>
5161 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
5164 * buildbot/test/test_run.py: update to new Logfile interface, new
5165 buildbot.slave modules
5166 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
5168 * MANIFEST.in: new sample config file
5169 * docs/examples/hello.cfg: same
5171 * buildbot/process/step_twisted.py: remove dead import
5173 * buildbot/process/step.py (RemoteCommand.run): catch errors
5175 (RemoteCommand.remote_update): ignore updates that arrive after
5177 (RemoteCommand.remote_complete): ignore duplicate complete msgs
5178 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
5179 the responsibilities of the subclass's methods
5180 (BuildStep.failed): catch errors during failure processing
5181 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
5182 (CVS): move to a mode= argument (described in docstring), rather
5183 than the ungainly clobber=/export=/copydir= combination.
5184 (SVN): add mode= functionality to SVN too
5185 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
5187 * buildbot/process/base.py (Build.startNextStep): catch errors
5188 during s.startStep()
5190 * buildbot/clients/base.py: update to new PB client interface.
5191 gtkPanes is still broken
5193 * buildbot/bot.py, buildbot/slavecommand.py: move to..
5194 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
5195 * setup.py: add buildbot.slave module
5196 * buildbot/bb_tap.py: handle move
5197 * buildbot/slave/registry.py: place to register commands, w/versions
5198 * buildbot/slave/bot.py: major simplifications
5199 (SlaveBuilder.remote_startCommand): use registry for slave commands,
5200 instead of a fixed table. Eventually this will make the slave more
5201 extensible. Use 'start' method on the command, not .startCommand.
5202 Fix unsafeTracebacks handling (I think).
5203 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
5204 helper class with a .start method that returns a Deferred.
5205 SlaveShellCommand is the form reached by the buildmaster. Commands
5206 which use multiple ShellCommands can just chain them as Deferreds,
5207 with some helper methods in Command (_abandonOnFailure and
5208 _checkAbandoned) to bail on rc!=0.
5209 (CVSCommand): prefer new mode= argument
5210 (SVNFetch): add mode= argument
5212 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
5213 put a useful reason string on the build
5215 * buildbot/status/builder.py (LogFile): do LogFile right: move the
5216 core functionality into an IStatusLog object
5217 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
5218 * buildbot/status/html.py (TextLog): HTML-rendering goes here
5219 (StatusResourceBuild.body): use proper accessor methods
5220 * buildbot/status/client.py (RemoteLog): PB-access goes here
5221 (StatusClientPerspective.perspective_subscribe): add "full" mode,
5222 which delivers log contents too
5223 (PBListener.__cmp__): make PBListeners comparable, thus removeable
5224 * buildbot/status/event.py: remove old Logfile completely
5226 * buildbot/interfaces.py (IStatusLog.subscribe): make the
5227 subscription interface for IStatusLog subscriptions just like all
5228 other the status subscriptions
5229 (IStatusReceiver.logChunk): method called on subscribers
5231 2004-08-24 Brian Warner <warner@lothar.com>
5233 * buildbot/process/builder.py (Builder._pong): oops, ping response
5234 includes a result (the implicit None returned by remote_print).
5235 Accept it so the _pong method handles the response correctly.
5237 2004-08-06 Brian Warner <warner@lothar.com>
5239 * buildbot/test/test_config.py: update IRC, PBListener tests
5241 * buildbot/status/client.py (StatusClientPerspective): total
5242 rewrite to match new IStatus interfaces. New subscription scheme.
5243 There are still a few optimizations to make (sending down extra
5244 information with event messages so the client doesn't have to do a
5245 round trip). The logfile-retrieval code is probably still broken.
5246 Moved the PB service into its own port, you can no longer share a
5247 TCP socket between a PBListener and, say, the slaveport (this
5248 should be fixed eventually).
5249 * buildbot/clients/base.py (Client): revamp to match. still needs
5250 a lot of work, but basic event reporting works fine. gtkPanes is
5253 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
5254 instance talks to a single irc server. Threw out all the old
5255 multi-server handling code. Still need to add back in
5256 builder-control (i.e. "force build")
5258 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
5259 more random text to the as-yet-unreachable per-step page
5261 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
5262 rename to stepETAUpdate
5263 (BuildStatus.subscribe): add build-wide ETA updates
5264 (BuilderStatus.getState): remove more cruft
5265 (BuilderStatus.getCurrentBuild): remove more cruft
5266 (BuilderStatus.buildStarted): really handle tuple-subscription
5267 * buildbot/test/test_run.py (Status.testSlave): handle the
5268 stepETAUpdate rename
5270 * buildbot/master.py (BuildMaster): don't add a default
5271 StatusClientService. Don't add a default IrcStatusFactory. Both
5272 are now added through c['status'] in the config file. c['irc'] is
5273 accepted for backwards compatibility, the only quirk is you cannot
5274 use c['irc'] to specify IRC servers on ports other than 6667.
5276 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
5277 (IStatusReceiver.buildStarted): allow update-interval on subscribe
5278 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
5279 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
5282 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
5283 the buildmaster to re-read its config file
5286 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
5287 find out the port our server is running on
5288 (WebTest.test_webPathname_port): same
5290 * buildbot/test/test_config.py (testWebPortnum): test it
5291 (testWebPathname): ditto
5293 * docs/config.xhtml: document new c['status'] configuration option
5295 * buildbot/status/html.py (Waterfall): new top-level class which
5296 can be added to c['status']. This creates the Site as well as the
5297 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
5298 reachable as .parent, for everything.
5300 * buildbot/master.py (Manhole): make it a normal service Child
5301 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
5302 webPathname. It will eventually replace c['irc'] and the implicit
5303 PB listener as well. c['webPortnum'] and c['webPathname'] are left
5304 in as (deprecated) backward compatibility hooks for now.
5307 * buildbot/process/builder.py (Builder.buildFinished): don't
5308 inform out builder_status about a finished build, as it finds out
5309 through its child BuildStatus object
5311 * buildbot/status/html.py: extensive revamp. Use adapters to make
5312 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
5313 have both starting and finishing times and adjust the waterfall
5314 display accordingly, using spacers if necessary. Use SlaveStatus
5315 to get buildslave info.
5316 (StatusResourceBuildStep): new just-one-step resource, used to get
5317 logfiles. No actual href to it yet.
5319 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
5320 the time being, until I get the file-naming scheme right
5322 * buildbot/status/builder.py (Event): clean started/finished names
5323 (BuildStatus.isFinished): .finished is not None is the right test
5324 (BuildStatus.buildStarted): track started/finished times ourselves
5325 (BuilderStatus.getSlave): provide access to SlaveStatus object
5326 (BuilderStatus.getLastFinishedBuild): all builds are now in
5327 .builds, even the currently-running one. Accomodate this change.
5328 (BuilderStatus.eventGenerator): new per-builder event generator.
5329 Returns BuildStepStatus and BuildStatus objects, since they can
5330 both be adapted as necessary.
5331 (BuilderStatus.addEvent): clean up started/finished attributes
5332 (BuilderStatus.startBuild,finishBuild): remove dead code
5333 (SlaveStatus): new object to provide ISlaveStatus
5335 * buildbot/process/step.py (ShellCommand.getColor): actually
5336 return the color instead of setting it ourselves
5337 (CVS.__init__): pull .timeout and .workdir options out of
5338 **kwargs, since BuildStep will ignore them. Without this neither
5339 will be sent to the slave correctly.
5340 (SVN.__init__): same
5342 * buildbot/process/builder.py (Builder): move flags to class-level
5344 (Builder.attached): remove .remoteInfo, let the BotPerspective and
5345 SlaveStatus handle that
5347 * buildbot/process/base.py (Build.firstEvent): remove dead code
5348 (Build.stopBuild): bugfix
5350 * buildbot/changes/pb.py (PBChangeSource.describe): add method
5352 * buildbot/changes/changes.py (Change): add IStatusEvent methods
5353 (ChangeMaster.eventGenerator): yield Changes, since there are now
5354 Adapters to turn them into HTML boxes
5356 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
5357 (BotPerspective.attached): feed a SlaveStatus object
5358 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
5359 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
5361 * buildbot/interfaces.py: API additions
5362 (ISlaveStatus): place to get slave status
5364 2004-08-04 Brian Warner <warner@lothar.com>
5366 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
5367 the delay finishes, so the step is marked as SUCCESS
5369 * buildbot/test/test_run.py (Status.testSlave): cover more of
5370 IBuildStatus and IBuildStepStatus
5372 * buildbot/status/progress.py (StepProgress): move some flags to
5373 class-level attributes
5374 (StepProgress.remaining): if there are no other progress metrics
5375 to go by, fall back to elapsed time
5376 (StepProgress.setExpectations): take a dict of metrics instead of
5378 (BuildProgress.setExpectationsFrom): pull expectations from the
5379 Expectations, instead of having it push them to the BuildProgress
5380 (Expectations): move some flags to class-level attributes
5381 (Expectations.__init__): copy per-step times from the
5383 (Expectations.expectedBuildTime): new method for per-build ETA
5385 * buildbot/status/event.py (Logfile): move some flags to
5386 class-level attributes
5387 (Logfile.logProgressTo): better method name, let step set the
5388 progress axis name (instead of always being "output")
5390 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
5391 times directly, rather than depending upon the (possibly missing)
5392 .progress object. Use 'None' to indicate "not started/finished
5394 (BuildStepStatus.getExpectations): oops, return the full list of
5396 (BuilderStatus._buildFinished): append finished builds to .builds
5398 * buildbot/process/step.py (BuildStep): add separate .useProgress
5399 flag, since empty .progressMetrics[] still implies that time is a
5401 (CVS): set up the cmd in __init__, instead of waiting for start()
5403 * buildbot/process/base.py (Build.startBuild): disable the 'when'
5404 calculation, this will eventually turn into a proper sourceStamp
5405 (Build.setupBuild): tell the Progress to load from the Expectations,
5406 instead of having the Expectations stuff things into the Progress
5407 (Build.buildException): add a build-level errback to make sure the
5408 build's Deferred fires even in case of exceptions
5410 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
5412 * buildbot/process/builder.py (Builder.forceBuild): convey the
5413 reason instead of creating a fake Change
5415 * docs/examples/twisted_master.cfg: update to match reality
5417 * buildbot/test/test_config.py, buildbot/test/test_process.py:
5418 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5419 fix or remove broken/breaking tests
5421 * buildbot/status/event.py (Logfile.__len__): remove evil method
5423 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5424 missing .build, for test convenience
5426 * buildbot/process/step_twisted.py: import fixes
5428 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5430 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5431 .statusbag reference
5433 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5434 connection at shutdown, and stop it from reconnecting
5436 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5437 chase down remote-execution bugs
5439 * buildbot/process/step.py: more fixes, remove
5440 BuildStep.setStatus()
5441 * buildbot/status/builder.py: move setStatus() functionality into
5443 * buildbot/status/event.py: minor fixes
5445 2004-08-03 Brian Warner <warner@lothar.com>
5447 * buildbot/process/base.py, buildbot/process/builder.py
5448 * buildbot/process/step.py, buildbot/status/builder.py
5449 * buildbot/status/event.py, buildbot/test/test_run.py:
5450 fix status delivery, get a basic test case working
5451 * buildbot/master.py: finish implementing basic status delivery,
5452 temporarily disable HTML/IRC/PB status sources
5454 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5456 * buildbot/status/progress.py (BuildProgress): remove dead code
5458 * buildbot/interfaces.py
5459 * buildbot/process/base.py, buildbot/process/builder.py
5460 * buildbot/process/step.py, buildbot/process/step_twisted.py
5461 * buildbot/status/builder.py: Complete overhaul of the all
5462 status-delivery code, unifying all types of status clients (HTML,
5463 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5464 look like. This commit is a checkpointing of the work-in-progress:
5465 the input side is mostly done (Builders/Builds sending status
5466 to the BuilderStatus/BuildStatus objects), but the output side has
5467 not yet been started (HTML resources querying BuilderStatus
5468 objects). Things are probably very broken right now and may remain
5469 so for several weeks, I apologize for the disruption.
5471 * buildbot/status/event.py: add a setHTML method to use pre-rendered
5472 HTML as the log's contents. Currently used for exception tracebacks.
5473 * buildbot/status/progress.py: minor spelling changes
5475 2004-08-02 Brian Warner <warner@lothar.com>
5477 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
5478 in mozilla. Also added stylesheets copied from Twisted's docs.
5479 Remember that these files are meant to be run through Lore first.
5480 Thanks to Philipp Frauenfelder for the fixes.
5481 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
5482 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
5483 * docs/template.tpl: added a Lore template
5485 2004-07-29 Brian Warner <warner@lothar.com>
5487 * buildbot/interfaces.py: revamp status delivery. This is the
5488 preview: these are the Interfaces that will be provided by new
5489 Builder code, and to which the current HTML/IRC/PB status
5490 displayers will be adapted.
5492 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
5493 on the SlaveBuilder, not the Bot.
5494 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
5496 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
5497 set .usePTY on the FakeSlaveBuilder
5499 2004-07-25 Brian Warner <warner@lothar.com>
5501 * buildbot/changes/freshcvs.py: add some debug log messages
5502 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
5503 disabled 'setFilter' syntax
5504 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
5505 don't end with a slash
5507 * buildbot/process/base.py (Builder._pong_failed): add TODO note
5509 * setup.py: bump to 0.5.0+ while between releases
5511 2004-07-23 Brian Warner <warner@lothar.com>
5513 * setup.py (version): Releasing buildbot-0.5.0
5515 2004-07-23 Brian Warner <warner@lothar.com>
5517 * README: update for 0.5.0 release
5519 * NEWS: update for 0.5.0 release
5521 2004-07-22 Brian Warner <warner@lothar.com>
5523 * buildbot/slavecommand.py (ShellCommand): make usePTY a
5524 mktap-time configuration flag (--usepty=1, --usepty=0)
5525 * buildbot/bot.py: same
5527 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
5528 an 'info' directory being unwanted
5530 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
5531 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
5532 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
5533 and earlier), use a FreshCVSSourceOldcred instead.
5534 (test): simple test routine: connect to server, print changes
5536 * buildbot/changes/changes.py (Change.getTime): make it possible
5537 to print un-timestamped changes
5539 * buildbot/master.py (makeApp): delete ancient dead code
5540 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
5541 * buildbot/test/test_config.py (testFindConfigFile): test it
5543 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
5544 instead of win32 one
5547 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
5548 now takes a dictionary instead of a tuple. See docs/config.xhtml for
5551 * buildbot/process/base.py (Builder.__init__): change constructor
5552 to accept a dictionary of config data, rather than discrete
5553 name/slave/builddir/factory arguments
5555 * docs/examples/twisted_master.cfg: update to new syntax
5556 * docs/examples/glib_master.cfg: same
5557 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
5558 rough tests of the new syntax
5561 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
5562 to be an int, which means "run a web.distrib sub-server on a TCP
5563 port". This lets you publish the buildbot status page to a remote
5564 twisted.web server (using distrib.ResourceSubscription). Also
5565 rename the local attributes used to hold these web things so
5566 they're more in touch with reality.
5567 * buildbot/test/test_web.py: test webPortnum and webPathname
5568 * docs/config.xhtml: document this new use of webPathname
5570 * docs/config.xhtml: new document, slightly ahead of reality
5572 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
5573 'prefix' handling: treat it as a simple string to check with
5574 .startswith, instead of treating it as a directory. This allows
5575 sub-directories to be used. If you use prefix=, you should give it
5576 a string that starts just below the CVSROOT and ends with a slash.
5577 This prefix will be stripped from all filenames, and filenames
5578 which do not start with it will be ignored.
5580 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
5582 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
5583 and --exclude (inverse of --include). SVN post-commit hooks
5584 now have total control over which changes get sent to buildbot and which
5587 2004-07-10 Brian Warner <warner@lothar.com>
5589 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
5590 test case to match new API
5592 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
5593 which crashed HTML display when self.entries=[] (needed to
5594 distinguish between [], which means "no entries yet", and None,
5595 which means "the entries have been swapped out to disk, go fetch
5598 2004-07-04 Brian Warner <warner@lothar.com>
5600 * buildbot/process/step_twisted.py (countFailedTests): Count
5601 skips, expectedFailures, and unexpectedSuccesses. Start scanning
5602 10kb from the end because any import errors are wedged there and
5603 they would make us think the test log was unparseable.
5604 (RunUnitTests.finishStatus): add skip/todo counts to the event box
5606 2004-06-26 Brian Warner <warner@lothar.com>
5608 * buildbot/process/step_twisted.py (RemovePYCs): turn the
5609 delete-*.pyc command into an actual BuildStep, so we can label it
5611 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5612 (FullTwistedBuildFactory): same
5614 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
5616 * contrib/fakechange.py: Add an errback when sending the fake
5617 change, so we know it didn't work.
5619 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
5621 * buildbot/process/step_twisted.py: Delete *.pyc files before
5622 calling trial, so it doesn't catch any old .pyc files whose .py
5623 files have been moved or deleted.
5625 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
5626 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
5627 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
5628 instead of ["twisted.test"], so that the end result is "trial -R
5631 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
5632 regular expression to match filenames that should be ignored when
5633 changed. Also add a --revision parameter that specifies the
5634 revision to examine, which is useful for debugging.
5636 2004-06-25 Brian Warner <warner@lothar.com>
5638 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
5639 summary of warnings (like DeprecationWarnings), next to the
5642 2004-05-13 Brian Warner <warner@lothar.com>
5644 * docs/examples/twisted_master.cfg: enable the win32 builder, as
5645 we now have a w32 build slave courtesy of Mike Taylor.
5647 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5648 so broken. Fixed a race condition that tripped up interlocked
5649 builds and caused the status to be stuck at "Interlocked" forever.
5650 The twisted buildbot's one interlocked build just so happened to
5651 never hit this case until recently (the feeding builds both pass
5652 before the interlocked build is attempted.. usually it has to wait
5654 (Builder._pong_failed): fix method signature
5656 * setup.py: bump to 0.4.3+ while between releases
5658 2004-04-30 Brian Warner <warner@lothar.com>
5660 * setup.py (version): Releasing buildbot-0.4.3
5662 2004-04-30 Brian Warner <warner@lothar.com>
5664 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5666 * README: update for 0.4.3 release
5668 * NEWS: update for 0.4.3 release
5670 * buildbot/master.py (BuildMaster.__getstate__): make sure
5671 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5673 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5674 .trial as a class attribute, for upgrade from 0.4.2
5676 * buildbot/changes/changes.py (Change.links): add .links for
5679 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5680 .textWatchers and .htmlWatchers at save time, since they are both
5681 volatile, should allow smooth 0.4.2 upgrade
5683 * buildbot/process/step.py (CVS.finishStatus): catch failed
5684 CVS/SVN commands so we can make the status box red
5686 2004-04-29 Brian Warner <warner@lothar.com>
5688 * buildbot/changes/freshcvs.py
5689 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5690 code to do setFilter(), which tells the freshcvs daemon to not
5691 send us stuff that we're not interested in. I will uncomment it
5692 when a new version of CVSToys is available in which setFilter()
5693 actually works, and I get a chance to test it better.
5695 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5697 * buildbot/master.py (Dispatcher): use a registration scheme
5698 instead of hardwired service names
5699 (BuildMaster): keep track of the Dispatcher to support
5702 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5703 PBChangeSource class instead of having it be an undocumented
5704 internal feature of the ChangeMaster. Split out the code into a
5706 * buildbot/changes/pb.py (PBChangeSource): same
5707 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5709 * docs/{factories|sources|steps}.xhtml: document some pieces
5711 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5712 using FCMaildirSource
5713 (f23osx): update OS-X builder to use python2.3, since the slave
5714 was updated to Panther (10.3.3)
5716 2004-03-21 Brian Warner <warner@lothar.com>
5718 * buildbot/process/process_twisted.py: factor out doCheckout, change
5719 to use SVN instead of CVS
5721 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5722 an SVN subclass easier
5723 (BasicSVN): subclass which uses Subversion instead of CVS
5725 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5727 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5729 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5731 2004-02-25 Brian Warner <warner@lothar.com>
5733 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5734 is now either a list (which is passed to spawnProcess directly) or
5735 a string (which gets passed to /bin/sh -c). This removes the useSH
5736 flag and the ArgslistCommand class. Also send status header at the
5737 start and end of each command, instead of having the master-side
5739 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5740 -r'. Update to use list-based arguments.
5741 (SVNFetch): use list-based arguments, use ['dir'] argument to
5743 * buildbot/test/test_steps.py (Commands): match changes
5745 * buildbot/process/step.py (InternalShellCommand.words): handle
5747 (SVN): inherit from CVS, cleanup
5749 * buildbot/status/event.py (Logfile.content): render in HTML, with
5750 stderr in red and headers (like the name of the command we're
5751 about to run) in blue. Add link to a second URL (url + "?text=1")
5752 to get just stdout/stderr in text/plain without markup. There is
5753 still a problem with .entries=None causing a crash, it seems to occur
5754 when the logfile is read before it is finished.
5756 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5757 timeout to the keepalives, and use it to explicitly do a
5758 loseConnection instead of waiting for TCP to notice the loss. This
5759 ought to clear up the silent-lossage problem.
5760 (unsafeTracebacks): pass exception tracebacks back to the master,
5761 makes it much easier to debug problems
5763 2004-02-23 Brian Warner <warner@lothar.com>
5765 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5766 the whole command to /bin/sh instead of execve [Johan Dahlin]
5767 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5768 '-r HEAD' [Johan Dahlin]
5769 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5771 * buildbot/changes/changes.py (Change): add links= argument, add
5772 asHTML method [Johan Dahlin]. Modified to make a bit more
5773 XHTMLish. Still not sure how to best use links= .
5775 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5776 Change.asHTML to display the change, not asText
5778 * buildbot/status/html.py (StatusResourceBuilder): web button to
5781 * buildbot/test/test_run.py: test to actually start a buildmaster
5784 * MANIFEST.in: bring back accidentally-dropped test helper files
5786 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5787 that require cvstoys if it is not installed
5789 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5790 values of "bin/trial" [Dave Peticolas]
5791 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5792 tests passed" when we didn't happen to run any tests
5794 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5795 flunkOnFailure [Johan Dahlin]
5797 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5798 multiple instances of the same Step class by suffixing "_2", etc,
5799 to the name until it is unique. This name needs to be unique
5800 because it is used as a key in the dictionary that tracks build
5802 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5805 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5807 2004-01-14 Brian Warner <warner@lothar.com>
5809 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5810 kicked from a channel, log it
5812 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5813 something over whatever IRC channels the buildmaster is currently
5814 connected to. Added to try and track down a problem in which the
5815 master thinks it is still connected but the IRCd doesn't see it. I
5816 used a styles.Versioned this time, so hopefully users won't have
5817 to rebuild their .tap files this time.
5818 * contrib/debug.glade: add a "Poke IRC" button
5819 * contrib/debugclient.py: same
5821 * setup.py: bump to 0.4.2+ while between releases
5823 2004-01-08 Brian Warner <warner@lothar.com>
5825 * setup.py (version): Releasing buildbot-0.4.2
5827 2004-01-08 Brian Warner <warner@lothar.com>
5829 * NEWS: update for 0.4.2 release
5831 * README: document how to run the tests, now that they all pass
5833 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5835 * buildbot/process/step.py (CVS): add a global_options= argument,
5836 which lets you set CVS global options for the command like "-r"
5837 for read-only checkout, or "-R" to avoid writing in the
5839 * buildbot/slavecommand.py (CVSCommand): same
5841 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5842 testing easier (it is turned off when testing, to avoid the
5845 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5846 to make it easier to test: break generateStepID() out to a
5847 separate function, only update statusbag if it exists.
5848 (ShellCommands): create useful text for dict-based commands too.
5850 * test/*, buildbot/test/*: move unit tests under the buildbot/
5852 * setup.py (packages): install buildbot.test too
5854 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5855 * buildbot/test/test_steps.py: fix it, tests pass now
5857 2004-01-06 Brian Warner <warner@lothar.com>
5859 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5860 freshcvs mail uses a slightly different syntax for new
5861 directories. Update parser to handle either.
5862 * test/test_mailparse.py (Test1.testMsg9): test for same
5864 2003-12-21 Brian Warner <warner@lothar.com>
5866 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5867 'warnOnWarnings' so that lintian errors mark the build orange
5869 2003-12-17 Brian Warner <warner@lothar.com>
5871 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5872 messages emitted by Bonsai, contributed by Stephen Davis.
5874 * test/*: moved all tests to use trial instead of unittest. Some
5875 still fail (test_steps, test_slavecommand, and test_process).
5877 * setup.py (version): bump to 0.4.1+ while between releases
5879 2003-12-09 Brian Warner <warner@lothar.com>
5881 * setup.py (version): Releasing buildbot-0.4.1
5883 2003-12-09 Brian Warner <warner@lothar.com>
5885 * NEWS: update for 0.4.1 release
5887 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5888 freebsd builder code a little bit
5890 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5891 don't try to compare attributes of different classes
5892 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5893 (MaildirSource.messageReceived): fix Change delivery
5895 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5896 into the config file's namespace before loading it, like the
5897 documentation claims it does
5898 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5899 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5900 daemon comes back online
5902 2003-12-08 Brian Warner <warner@lothar.com>
5904 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5905 so the example will work with online=0 as well
5907 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5908 fix the __implements__ line
5910 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5911 class a twisted.application.service.Service, use startService to
5914 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5915 directory fd instead of simple open(). I'm sure this used to work,
5916 but the current version of python refuses to open directories with
5919 2003-12-05 Brian Warner <warner@lothar.com>
5921 * setup.py (version): bump to 0.4.0+ while between releases
5923 2003-12-05 Brian Warner <warner@lothar.com>
5925 * setup.py (version): Releasing buildbot-0.4.0
5927 2003-12-05 Brian Warner <warner@lothar.com>
5929 * docs/examples/glib_master.cfg: replace old sample scripts with
5930 new-style config files
5931 * MANIFEST.in: include .cfg files in distribution tarball
5933 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5934 implement a dummy method to avoid the exception that occurs when
5935 freshcvs sends this to us.
5937 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5938 removed the method, as it broke reconnection. Apparently
5939 stopFactory is called each time the connection attempt fails. Must
5941 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5942 attribute before serialization, since without stopFactory the
5943 reconnect timer may still be active and they aren't serializable.
5945 * test/test_mailparse.py (ParseTest): test with 'self' argument
5947 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5948 argument, as these "functions" are invoked like methods from class
5949 attributes and therefore always get an instance as the first
5952 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5953 message: thanks to Stephen Davis for the catch
5955 2003-12-04 Brian Warner <warner@lothar.com>
5957 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5958 twisted's standard ReconnectingClientFactory. Handles both oldcred
5959 and newcred connections. Also has a bug-workaround for
5960 ReconnectingClientFactory serializing its connector when it
5963 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5964 pbutil. Replace makeApp stuff with proper newcred/mktap
5965 makeService(). Don't serialize Ephemerals on shutdown.
5967 * buildbot/changes/changes.py (ChangeMaster): make it a
5968 MultiService and add the sources as children, to get startService
5969 and stopService for free. This also gets rid of the .running flag.
5971 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5972 new pbutil, turn into a TCPClient at the same time (to get
5973 startService for free). Two variants exist: FreshCVSSourceOldcred
5974 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5975 yet, but when it does, we'll be ready).
5976 (FreshCVSSource.notify): handle paths which are empty after the
5977 prefix is stripped. This only happens when the top-level (prefix)
5978 directory is added, at the very beginning of a Repository's life.
5980 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5981 Now the only reconnecting code is in the factory where it belongs.
5982 (Builder.unsubscribe): unregister the disconnect callback when we
5983 delete the builder on command from the master (i.e. when the
5984 buildmaster is reconfigured and that builder goes away). This
5985 fixes a multiple-delete exception when the status client is shut
5987 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5990 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5991 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5993 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5995 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5996 a list of globs (ugh). The testdir will be searched for files
5997 named *.tests and run the tests in the order specified in each of
5998 those files. This allows for "dependancies" between tests to be
6001 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
6002 argument to pass to run_maxq.py, instead of a glob.
6004 2003-10-17 Brian Warner <warner@lothar.com>
6006 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
6007 files that live in the sandbox
6009 2003-10-15 Brian Warner <warner@lothar.com>
6011 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
6012 spelling error in "docs" count-warnings output
6013 (HLint.start): stupid thinko meant .xhtml files were ignored
6015 * docs/examples/twisted_master.cfg (reactors): disable cReactor
6016 tests now that cReactor is banished to the sandbox
6018 2003-10-10 Brian Warner <warner@lothar.com>
6020 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
6021 scheme: now .xhtml are sources and .html are generated
6023 2003-10-08 Brian Warner <warner@lothar.com>
6025 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
6026 we were ignoring the 'randomly' parameter.
6028 2003-10-01 Brian Warner <warner@lothar.com>
6030 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
6031 posix, to kill sub-children of aborted slavecommands.
6033 * buildbot/status/builder.py: rename Builder to BuilderStatus.
6034 Clean up initialization: lastBuildStatus remains None until the
6035 first build has been completed.
6037 * buildbot/status/html.py (WaterfallStatusResource.body): handle
6038 None as a lastBuildStatus
6039 * buildbot/clients/gtkPanes.py: same
6041 * buildbot/status/client.py (StatusClientService): keep
6042 BuilderStatus objects in self.statusbags . These objects now live
6043 here in the StatusClientService and are referenced by the Builder
6044 object, rather than the other way around.
6045 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
6046 * buildbot/process/base.py (Builder): same
6047 * test/test_config.py (ConfigTest.testBuilders): same
6049 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
6050 an existing builder, leave the statusbag alone. This will preserve the
6053 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
6054 hook. This will probably go away in favor of a class in upcoming
6057 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
6058 serviceName from newcred FreshCVSNotifiee setup
6060 2003-09-29 Brian Warner <warner@lothar.com>
6062 * buildbot/process/process_twisted.py: switch to new reactor
6064 * docs/examples/twisted_master.cfg: same
6066 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
6068 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
6069 botmaster reference instead of the oldapp service lookup
6071 * buildbot/master.py (BuildMaster.__init__): give the
6072 StatusClientService a reference to the botmaster to make it easier to
6075 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6077 * buildbot/status/html.py (Box.td): escape hreffy things so you
6078 can have spaces in things like builder names
6079 (StatusResourceBuilder.body)
6080 (WaterfallStatusResource.body)
6081 (WaterfallStatusResource.body0): same
6083 2003-09-25 Brian Warner <warner@lothar.com>
6085 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
6086 rearrange the builder list when adding or removing builders: keep
6087 them in the order the user requested.
6088 * test/test_config.py (ConfigTest.testBuilders): verify it
6090 * contrib/debug.glade: give the debug window a name
6092 * buildbot/process/base.py (Builder.buildTimerFired): builders can
6093 now wait on multiple interlocks. Fix code relating to that.
6094 (Builder.checkInterlocks): same
6095 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
6097 * buildbot/master.py (BuildMaster.loadConfig): move from
6098 deprecated pb.BrokerFactory to new pb.PBServerFactory
6099 * test/test_config.py (ConfigTest.testWebPathname): same
6101 * docs/examples/twisted_master.cfg: fix interlock declaration
6103 * buildbot/master.py (BotMaster.addInterlock): move code to attach
6104 Interlocks to their Builders into interlock.py .
6105 (BuildMaster.loadConfig_Interlocks): fix interlock handling
6107 * test/test_config.py (ConfigTest.testInterlocks): validate
6110 * buildbot/process/base.py (Builder.__init__): better comments
6111 * buildbot/process/interlock.py (Interlock.__repr__): same
6112 (Interlock.deactivate): add .active flag, move the code that
6113 attaches/detaches builders into the Interlock
6115 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
6117 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
6118 tests using the new run_maxq.py script, and reporting failures by
6121 * contrib/run_maxq.py: Hacky little script for running a set of maxq
6122 tests, reporting their success or failure in a buildbot-friendly
6125 2003-09-24 Brian Warner <warner@lothar.com>
6127 * docs/examples/twisted_master.cfg: example of a new-style config
6128 file. This lives in the buildmaster base directory as
6131 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
6132 button to make the master re-read its config file
6134 * buildbot/master.py (BuildMaster.loadConfig): new code to load
6135 buildmaster configuration from a file. This file can be re-read
6136 later, and the buildmaster will update itself to match the new
6137 desired configuration. Also use new Twisted Application class.
6138 * test/Makefile, test/test_config.py: unit tests for same
6140 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
6141 FreshCVSSources comparable, to support reload.
6142 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
6144 * buildbot/process/base.py (Builder): make them comparable, make
6145 Interlocks easier to attach, to support reload. Handle
6146 re-attachment of remote slaves.
6147 * buildbot/process/interlock.py (Interlock): same
6149 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
6150 Twisted's new Application class. Requires Twisted >= 1.0.8 .
6151 buildmaster taps are now constructed with mktap.
6152 * buildbot/status/client.py (StatusClientService): same
6154 * buildbot/status/words.py: move to new Services, add support to
6155 connect to multiple networks, add reload support, allow nickname
6156 to be configured on a per-network basis
6158 2003-09-20 Brian Warner <warner@lothar.com>
6160 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
6161 the freebsd builder, now that the machine has been upgraded and no
6162 longer has python2.2
6164 * setup.py (version): bump to 0.3.5+ while between releases
6166 2003-09-19 Brian Warner <warner@lothar.com>
6168 * setup.py (version): Releasing buildbot-0.3.5
6170 2003-09-19 Brian Warner <warner@lothar.com>
6172 * NEWS: add post-0.3.4 notes
6174 * README (REQUIREMENTS): note twisted-1.0.7 requirement
6176 * MANIFEST.in: add contrib/*
6178 * docs/examples/twisted_master.py (twisted_app): all build slaves must
6179 use a remote root now: cvs.twistedmatrix.com
6181 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
6183 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
6184 compatibility with old servers
6185 (FreshCVSSource.start): and provide a way to use it
6186 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
6188 * docs/examples/twisted_master.py (twisted_app): update to new
6190 (twisted_app): listen on new ~buildbot socket
6191 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
6193 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
6194 to reduce cvs bandwidth (update instead of full checkout)
6196 2003-09-11 Brian Warner <warner@lothar.com>
6198 * contrib/fakechange.py: demo how to connect to the changemaster
6199 port. You can use this technique to submit changes to the
6200 buildmaster from source control systems that offer a hook to run a
6201 script when changes are committed.
6203 * contrib/debugclient.py: tool to connect to the debug port. You
6204 can use it to force builds, submit fake changes, and wiggle the
6207 * buildbot/master.py: the Big NewCred Reorganization. Use a single
6208 'Dispatcher' realm to handle all the different kinds of
6209 connections and Perspectives: buildslaves, the changemaster port,
6210 the debug port, and the status client port. NewCredPerspectives
6211 now have .attached/.detached methods called with the remote 'mind'
6212 reference, much like old perspectives did. All the pb.Services
6213 turned into ordinary app.ApplicationServices .
6214 (DebugService): went away, DebugPerspectives are now created
6215 directly by the Dispatcher.
6216 (makeApp): changed interface a little bit
6218 * buildbot/changes/changes.py: newcred
6219 * buildbot/status/client.py: newcred
6221 * buildbot/clients/base.py: newcred client side changes
6222 * buildbot/bot.py: ditto
6224 * docs/examples/glib_master.py: handle new makeApp() interface
6225 * docs/examples/twisted_master.py: ditto
6227 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
6228 base newcred Perspectives on. This should go away once Twisted
6229 itself provides something sensible.
6232 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
6234 * contrib/svn_buildbot.py: A program that you can call from your
6235 SVNREPO/hooks/post-commit file that will notify a BuildBot master
6236 when a change in an SVN repository has happened. See the top of
6237 the file for some minimal usage info.
6239 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6241 * buildbot/slavecommand.py (ArglistCommand): Add new
6242 ArglistCommand that takes an argument list rather than a string as
6243 a parameter. Using a st.split() for argv is very bad.
6245 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
6246 update to a particular revision rather than always checking out
6247 (still not very smart about it, there may be cases where the
6248 checkout becomes inconsistent).
6250 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
6252 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
6253 SVN fetch support. It can checkout (not update!) a specified
6254 revision from a specified repository to a specified directory.
6256 * buildbot/status/progress.py (Expectations.update): Fix an
6257 obvious bug (apparently created by the change described in the
6258 previous ChangeLog message) by moving a check to *after* the
6259 variable it checks is defined.
6262 2003-09-08 Brian Warner <warner@lothar.com>
6264 * buildbot/status/progress.py (Expectations.update): hack to catch
6265 an exception TTimo sees: sometimes the update() method seems to
6266 get called before the step has actually finished, so the .stopTime
6267 is not set, so no totalTime() is available and we average None
6268 with the previous value. Catch this and just don't update the
6269 metrics, and emit a log message.
6271 2003-08-24 Brian Warner <warner@lothar.com>
6273 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
6274 parameter to set copydir='original' in CVS commands.
6276 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
6278 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
6279 which tells the command to maintain a separate original-source CVS
6280 workspace. For each build, this workspace will be updated, then
6281 the tree copied into a new workdir. This reduces CVS bandwidth
6282 (from a full checkout to a mere update) while doubling the local
6283 disk usage (to keep two copies of the tree).
6285 2003-08-21 Brian Warner <warner@lothar.com>
6287 * buildbot/status/event.py (Logfile.addEntry): if the master web
6288 server dies while we're serving a page, request.write raises
6289 pb.DeadReferenceError . Catch this and treat it like a
6290 notifyFinish event by dropping the request.
6292 2003-08-18 Brian Warner <warner@lothar.com>
6294 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
6295 (instead of blowing up) if a force-build command is given without
6298 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
6299 don't blow up if there aren't yet any Changes in the list
6301 2003-08-02 Brian Warner <warner@lothar.com>
6303 * buildbot/bot.py (updateApplication): don't set the .tap name,
6304 since we shouldn't assume we own the whole .tap file
6306 * buildbot/bb_tap.py (updateApplication): clean up code, detect
6307 'mktap buildbot' (without a subcommand) better
6309 2003-07-29 Brian Warner <warner@lothar.com>
6311 * buildbot/status/words.py
6312 (IrcStatusFactory.clientConnectionLost): when we lose the
6313 connection to the IRC server, schedule a reconnection attempt.
6315 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
6316 use shutil.rmtree instead of forking off an "rm -rf" command.
6317 rmtree may take a while and will block until it finishes, so we
6318 use "rm -rf" if available.
6320 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
6321 freebsd buildslave badly
6323 * setup.py (version): bump to 0.3.4+ while between releases
6325 2003-07-28 Brian Warner <warner@lothar.com>
6327 * setup.py (version): Releasing buildbot-0.3.4
6329 2003-07-28 Brian Warner <warner@lothar.com>
6331 * NEWS: update in preparation for release
6333 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
6334 process.signalProcess instead of os.kill, to improve w32
6337 * docs/examples/twisted_master.py (twisted_app): turn off
6338 win32eventreactor: the tests hang the buildslave badly
6340 * buildbot/process/base.py (Build.buildFinished): update ETA even on
6341 failed builds, since usually the failures are consistent
6343 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6344 add compileOpts/compileOpts2 to reactors build
6346 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
6347 (twisted_app): use both default and win32eventreactor on w32 build.
6348 Use both default and kqreactor on freebsd build.
6350 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6351 add compileOpts2, which is put after the build_ext argument. w32
6352 needs "-c mingw32" here.
6354 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
6355 touch .acqpath, it goes away in recent Twisted releases
6357 * docs/examples/twisted_master.py (twisted_app): use "python" for
6358 the w32 buildslave, not "python2.2"
6360 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
6361 the directory exists.. should hush an exception under w32
6363 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
6364 ProcessTerminated -provided values for signal and exitCode rather
6365 than parsing the unix status code directly. This should remove one
6366 more roadblock for a w32-hosted buildslave.
6368 * test/test_mailparse.py: add test cases for Syncmail parser
6370 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
6371 temporary compatibility import. Note! Start importing
6372 FCMaildirSource from changes.mail instead of changes.freshcvsmail
6374 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
6376 2003-07-27 Brian Warner <warner@lothar.com>
6378 * NEWS: started adding new features
6380 * buildbot/changes/mail.py: start work on Syncmail parser, move
6381 mail sources into their own file
6383 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
6384 as implementing IChangeSource
6385 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
6387 * buildbot/interfaces.py: define the IChangeSource interface
6389 2003-07-26 Brian Warner <warner@lothar.com>
6391 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
6393 2003-06-25 Brian Warner <warner@lothar.com>
6395 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
6398 2003-06-17 Brian Warner <warner@lothar.com>
6400 * buildbot/status/words.py: clean up method usage to avoid error
6401 in silly IRC command
6402 (IrcStatusBot.emit_status): round off seconds display
6404 * buildbot/process/base.py (Build): delete the timer when saving
6405 to the .tap file, and restore it (if it should still be running)
6406 upon restore. This should fix the "next build in -34 seconds"
6407 messages that result when the master is restarted while builds are
6408 sitting in the .waiting slot. If the time for the build has
6409 already passed, start it very soon (in 1 second).
6411 * buildbot/status/words.py: more silly commands
6413 * README (REQUIREMENTS): add URLs to all required software
6415 * buildbot/status/words.py ('last'): mention results of, and time
6418 2003-05-28 Brian Warner <warner@lothar.com>
6420 * buildbot/status/words.py: add 'last' command
6421 (IrcStatusBot.emit_status): add current-small text to 'status' output
6423 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6424 (twisted_app): remove spaces from OS-X builder name
6426 * buildbot/master.py (makeApp): add knob to turn on IRC bot
6427 * buildbot/status/words.py: IRC bot should actually be useful now
6429 2003-05-23 Brian Warner <warner@lothar.com>
6431 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6432 "slave information" from $(slavedir)/info/* . These files are
6433 maintained by the slave administrator, and describe the
6434 machine/environment that is hosting the slave. Information from
6435 them is put into the "Builder" HTML page. Still need to establish
6436 a set of well-known filenames and meanings for this data: at the
6437 moment, *all* info/* files are sent to the master, but only
6438 'admin' and 'host' are used on that end.
6439 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6440 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
6441 * buildbot/master.py (BotPerspective.got_info): ditto
6443 2003-05-22 Brian Warner <warner@lothar.com>
6445 * setup.py (version): bump version to 0.3.3+ while between releases
6447 2003-05-21 Brian Warner <warner@lothar.com>
6449 * setup.py: Releasing buildbot-0.3.3
6451 2003-05-21 Brian Warner <warner@lothar.com>
6453 * NEWS: 0.3.3 news items
6455 * README: describe --keepalive and life behind a NAT box
6457 * buildbot/bot.py (Bot.connected): implement application-level
6458 keepalives to deal with NAT timeouts, turn them on with
6459 --keepalive option or when SO_KEEPALIVE doesn't work.
6461 * buildbot/master.py (BotPerspective): accept keepalives silently
6463 * buildbot/process/base.py (Build.buildException): CopiedFailures
6464 don't carry as much information as local ones, so don't try to
6465 create a big HTMLized version of them.
6467 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6468 log file when step fails due to an exception, such as when the slave
6471 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6472 --testmodule argument instead of grepping for test-case-name tags
6473 ourselves. Remove FindUnitTests code.
6474 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
6476 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
6478 2003-05-16 Brian Warner <warner@lothar.com>
6480 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
6481 argument to allow things like CFLAGS=-O0 to be passed without relying
6482 upon /bin/sh processing on the slave.
6484 * buildbot/process/step.py (InternalShellCommand.start): send
6486 * buildbot/slavecommand.py (ShellCommand.start): create argv with
6487 'split' instead of letting /bin/sh do it. This should also remove
6488 the need for /bin/sh on the buildslave, making it more likely to
6491 * buildbot/status/html.py: html-escape text in blamelist.
6492 Add "force build" button to the Builder page.
6494 * buildbot/process/step_twisted.py (countFailedTests): look at
6495 last 1000 characters for status line, as import errors can put it
6496 before the -200 point.
6498 2003-05-15 Brian Warner <warner@lothar.com>
6500 * docs/examples/twisted_master.py: use clobber=0 for remote builds
6502 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6503 make 'clobber' a parameter, so it is possible to have builds which
6504 do full tests but do a cvs update instead of hammering the CVS
6505 server with a full checkout each build
6507 * buildbot/process/step.py (InternalShellCommand): bump default
6508 timeout to 20 minutes
6510 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
6511 the master to trigger a build. Run it via manhole.
6513 * buildbot/master.py (BotPerspective.perspective_forceBuild):
6514 allow slaves to trigger any build that they host, to make life
6515 easier for slave admins who are testing out new build processes
6517 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6518 don't flunk cReactor or qtreactor on failure, since they fail alot
6519 these days. Do warnOnFailure instead.
6521 * buildbot/process/base.py: change Builder.buildable from a list
6522 into a single slot. When we don't have a slave, new builds (once
6523 they make it past the timeout) are now merged into an existing
6524 buildable one instead of being queued. With this change, a slave
6525 which has been away for a while doesn't get pounded with all the
6526 builds it missed, but instead just does a single build.
6528 2003-05-07 Brian Warner <warner@lothar.com>
6530 * setup.py (version): bump version to 0.3.2+ while between releases
6532 2003-05-07 Brian Warner <warner@lothar.com>
6534 * setup.py: Releasing buildbot-0.3.2
6536 2003-05-07 Brian Warner <warner@lothar.com>
6538 * setup.py: fix major packaging error: include subdirectories!
6540 * NEWS: add changes since last release
6542 * README (REQUIREMENTS): update twisted/python dependencies
6544 * buildbot/status/builder.py (Builder.startBuild): change
6545 BuildProcess API: now they should call startBuild/finishBuild
6546 instead of pushing firstEvent / setLastBuildStatus. Moving towards
6547 keeping a list of builds in the statusbag, to support other kinds of
6549 (Builder.addClient): send current-activity-small to new clients
6550 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
6553 * buildbot/status/client.py: drop RemoteReferences at shutdown
6555 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
6557 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
6558 more debug messages for remote status client
6560 * buildbot/process/step.py (InternalBuildStep.stepComplete)
6561 (.stepFailed): only fire the Deferred once, even if both
6562 stepComplete and stepFailed are called. I think this can happen if
6563 an exception occurs at a weird time.
6565 * buildbot/status/words.py: work-in-progress: IRC status delivery
6567 2003-05-05 Brian Warner <warner@lothar.com>
6569 * docs/examples/twisted_master.py (twisted_app): hush internal
6570 python2.3 distutils deprecation warnings
6571 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6572 add compileOpts= argument which inserts extra args before the
6573 "setup.py build_ext" command. This can be used to give -Wignore
6574 warnings, to hush some internal python-2.3 deprecation messages.
6576 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
6577 the ['twisted.test'] default test case to make it easier to change
6580 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
6581 * buildbot/clients/gtkPanes.py: ditto
6583 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
6584 arg to collapse RunUnitTestsRandomly into RunUnitTests
6585 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6586 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
6588 * buildbot/status/html.py (StatusResource): shuffle Resources
6589 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
6590 would serve the waterfall display, but the internal links were
6591 only valid on the trailing-slash version. The correct behavior is
6592 for the non-slashed one to serve a Redirect to the slashed one.
6593 This only shows up when the buildbot page is hanging off another
6594 server, like a Twisted-Web distributed server.
6596 * buildbot/status/event.py (Event, RemoteEvent): make Events
6597 pb.Cacheable, with RemoteEvent as the cached version. This removes
6598 a lot of explicit send-an-update code.
6599 * buildbot/status/builder.py (Builder): remove send-update code
6600 * buildbot/status/client.py (ClientBuilder): remove send-update
6601 code, and log errors that occur during callRemote (mostly to catch
6602 InsecureJelly exceptions)
6604 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6605 run Lore with the same python used in the rest of the build
6607 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6609 * buildbot/process/step_twisted.py (HLint): accept 'python'
6610 argument. Catch rc!=0 and mark the step as failed. This marks the
6611 build orange ("has warnings").
6612 (RunUnitTestsJelly): move out to step_twisted2.py
6614 * buildbot/util.py (ignoreStaleRefs): add utility function
6616 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
6617 don't fake ETA object, it's too hard to get right
6619 2003-05-02 Brian Warner <warner@lothar.com>
6621 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
6623 2003-05-01 Brian Warner <warner@lothar.com>
6625 * buildbot/status/html.py (StatusResource.body): oops, I was
6626 missing a <tr>, causing the waterfall page to be misrendered in
6627 everything except Galeon.
6629 2003-04-29 Brian Warner <warner@lothar.com>
6631 * docs/examples/twisted_master.py: make debuild use python-2.2
6632 explicitly, now that Twisted stopped supporting 2.1
6634 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
6635 handle tuple results too. I keep forgetting this, which suggests
6636 it needs to be rethought.
6638 * setup.py (setup): bump version to 0.3.1+ while between releases
6640 2003-04-29 Brian Warner <warner@lothar.com>
6642 * setup.py: Releasing buildbot-0.3.1
6644 2003-04-29 Brian Warner <warner@lothar.com>
6646 * README (SUPPORT): add plea to send questions to the mailing list
6648 * NEWS, MANIFEST.in: add description of recent changes
6650 * docs/examples/twisted_master.py: add the code used to create the
6651 Twisted buildmaster, with passwords and such removed out to a
6654 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6655 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6656 buildmasters to not require CVSToys be installed.
6657 * README, docs/examples/glib_master: update to match the change
6659 * buildbot/clients/base.py, buildbot/bot.py,
6660 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6661 ReconnectingPB from CVSToys distribution to remove CVSToys
6662 dependency for build slaves and status clients. Buildmasters which
6663 use FreshCVSSources still require cvstoys be installed, of course.
6665 2003-04-25 Brian Warner <warner@lothar.com>
6667 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6668 runTestsRandomly arg to turn on trial -z
6670 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6671 experimental code to use trial's machine-parseable output to get
6672 more detailed test results. Still has some major issues.
6673 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6676 * buildbot/status/builder.py (Builder.setCurrentBuild):
6677 anticipating moving build history into statusbag, not used yet
6679 * buildbot/status/tests.py: code to centralize test results,
6680 doesn't work quite yet
6682 * buildbot/status/event.py (Event): use hasattr("setName") instead
6683 of isinstance for now.. need better long-term solution
6685 * buildbot/status/html.py: Remove old imports
6687 2003-04-24 Brian Warner <warner@lothar.com>
6689 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6690 ignore changes under doc/fun/ and sandbox/
6692 * buildbot/process/step_twisted.py: update pushEvent and friends.
6694 * buildbot/status/html.py (Box.td): replace event.buildername with
6695 event.parent.getSwappableName(). Needs more thought.
6697 * buildbot/status/builder.py (Builder): Replace pushEvent and
6698 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6699 Tell events they are being pruned with event.delete().
6701 * buildbot/process/base.py (Build): Remove Builder status-handling
6702 methods. s/pushEvent/setCurrentActivity/.
6704 * buildbot/process/step.py (BuildStep): clean up status delivery.
6705 Gouse builder.statusbag methods instead of intermediate builder
6706 methods. s/updateLastEvent/updateCurrentActivity/.
6707 s/finalizeLastEvent/finishCurrentActivity/. Use
6708 addFileToCurrentActivity for summaryFunction.
6710 * buildbot/status/event.py (Logfile): put data in a Swappable when
6712 (Event): add more setter methods. Remove .buildername, use .parent
6713 and getSwappableName instead (needs more thought).
6715 * buildbot/util.py (Swappable):
6716 * test/test_swap.py: don't bother setting filename at __init__
6717 time, do it later. Change setFilename args to take parent first,
6718 since it provides the most significant part of the filename.
6720 2003-04-23 Brian Warner <warner@lothar.com>
6722 * buildbot/status/event.py (Logfile.addEntry): append to previous
6725 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6726 anticipating Swappable
6727 (InternalShellCommand.remoteUpdate): split out various log-adding
6728 methods so subclasses can snarf stdout separately
6730 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6731 in anticipation of Swappable build logs
6732 (Builder.testsFinished): anticipating TestResults, still disabled
6734 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6737 * buildbot/status/event.py (Logfile): add (disabled) support for
6738 Swappable, not ready for use yet
6740 * buildbot/util.py (Swappable): object which is swapped out to
6741 disk after some period of no use.
6742 * test/test_swap.py: test buildbot.utils.Swappable
6744 2003-04-14 Brian Warner <warner@lothar.com>
6746 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6747 periodic-build timer. Set the .periodicBuildTime on a builder
6748 instance to some number of seconds to activate it.
6750 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6752 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6753 a way that survives result tuples
6755 2003-04-12 Brian Warner <warner@lothar.com>
6757 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6758 return a dict instead of a tuple: allow summarizers to provide
6759 multiple summaries if they want
6760 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6761 (debuildSummarizer): summarize lintian warnings/errors
6763 2003-04-10 Brian Warner <warner@lothar.com>
6765 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6767 2003-04-09 Brian Warner <warner@lothar.com>
6769 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6770 empty summaries: happens when the tests fail so hard they don't emit
6771 a parseable summary line.
6773 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6774 Allow summaryFunction to return None to indicate no summary should
6777 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6778 writing to stale HTTP requests: notice when they disconnect and
6779 remove the request from the list. Also add CacheToFile from
6780 moshez, will be used later.
6782 2003-04-08 Brian Warner <warner@lothar.com>
6784 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6785 should be an int, not a list of strings
6787 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6788 if we weren't actually connected
6790 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6791 to show the tail end of the trial text output
6793 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6794 hook to summarize the results of a ShellCommand
6796 2003-04-07 Brian Warner <warner@lothar.com>
6798 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6799 twisted test suite code into a single class.
6800 * buildbot/process/process_twisted.py: same
6802 2003-04-04 Brian Warner <warner@lothar.com>
6804 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6806 * README (SLAVE): document use of mktap to create slave .tap file
6807 (REQUIREMENTS): describe dependencies
6809 * buildbot/bb_tap.py, buildbot/plugins.tml:
6810 * buildbot/bot.py (updateApplication): Add mktap support for creating
6811 buildslave .tap files
6813 2003-03-28 Brian Warner <warner@lothar.com>
6815 * buildbot/process/step.py (InternalShellCommand.finished): handle
6816 new tuple result values (fix embarrasing bug that appeared during
6819 2003-03-27 Brian Warner <warner@lothar.com>
6821 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6824 2003-03-25 Brian Warner <warner@lothar.com>
6826 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6827 to overall build status
6828 * buildbot/clients/base.py (Builder): improve event printing
6829 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6830 instead of generic ShellCommand
6831 (Build): Add .stopBuild, use it when slave is detached
6833 * buildbot/process/step.py (Configure,Test): give the steps their
6834 own names and status strings
6836 * buildbot/status/html.py (StatusResource): add "show" argument,
6837 lets you limit the set of Builders being displayed.
6839 2003-03-20 Brian Warner <warner@lothar.com>
6841 * buildbot/process/basic.py: removed
6843 2003-03-19 Brian Warner <warner@lothar.com>
6845 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6846 turn off process-docs by default
6848 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6849 when displaying build information without anything in allBuilds[]
6851 * buildbot/bot.py (makeApp): really take password from sys.argv
6853 2003-03-18 Brian Warner <warner@lothar.com>
6855 * buildbot/bot.py (buildApp): take password from sys.argv
6857 * README: replace with more useful text
6859 * setup.py: add a real one
6860 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6862 * docs/PyCon-2003/: added sources for PyCon paper.
6864 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6865 now Build objects control the process and Builder only handles
6866 slave stuff and distribution of changes/status. A new BuildFactory
6867 class creates Build objects on demand.
6869 Created ConfigurableBuild which takes a list of steps to run. This
6870 makes it a lot easier to set up a new kind of build and moves us
6871 closer to being able to configure a build from a web page.
6873 * buildbot/process/step_twisted.py, process_twisted.py: move to
6874 new model. A lot of code went away.
6876 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6877 send lots of empty progress messages to the client.
6879 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6881 2003-02-20 Brian Warner <warner@lothar.com>
6883 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6885 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6886 Twisted bug that prevented non-pty processes from working just got
6887 fixed, and the bug that leaks ptys is still being investigated.
6889 * buildbot/process/step.py (CVS): send timeout arg to slave
6891 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6892 builders coming and going
6893 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6894 from CVSToys, handle lost-buildmaster
6896 * buildbot/status/client.py (StatusClientService.removeBuilder):
6897 Clean up status client protocol: send builders (with references)
6898 as they are created, rather than sending a list and requiring the
6899 client to figure out which ones are new.
6900 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6901 attempts to force a build on an unknown builder
6903 2003-02-19 Brian Warner <warner@lothar.com>
6905 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6906 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6907 Twisted stops leaking them.
6908 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6909 builder goes to an idle state.
6911 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6912 I figure out why CVS commands hang without them, and/or I fix the
6913 hung-command timeout
6915 2003-02-16 Brian Warner <warner@lothar.com>
6917 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6918 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6919 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6920 GenerateDocs now that they are prefixed with WARNING:.
6922 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6923 use manual href target instead of request.childLink
6925 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6926 display every second, but update the ETA every 5 seconds (or
6927 whenever) as remote_progress messages arrive.
6930 2003-02-12 Brian Warner <warner@lothar.com>
6932 * *: import current sources from home CVS repository
6936 # add-log-time-format: add-log-iso8601-time-string