1 2006-06-01 Brian Warner <warner@lothar.com>
3 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
4 (Box.setETA): handle ETA=None (by stopping the timer)
5 (Box.update): make the [soon] text less different than the usual
6 text, so the rest of the text doesn't flop around so much. It
7 would be awfully nice to figure out how to center this stuff.
8 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
10 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
11 by default, so that any ShellCommand which fails marks the overall
12 build as a failure. I should have done this from the beginning.
13 Add flunkOnFailure=False to the arguments if you want to turn off
16 2006-05-30 Brian Warner <warner@lothar.com>
18 * buildbot/clients/gtkPanes.py: add a third row: now it shows
19 last-build/current-build/current-step. Show what step is currently
20 running. Show ETA for both the overall build and the current step.
21 Update GTK calls to modern non-deprecated forms. There's still a
22 lot of dead code and debug noise to remove.
24 * buildbot/process/step_twisted.py (Trial): set the step name, so it
25 shows up properly in status displays
27 2006-05-28 Brian Warner <warner@lothar.com>
29 * buildbot/test/test_properties.py (Run.testInterpolate): on the
30 build we use to verify that WithProperties works:
32 ** set flunkOnFailure=True so that build failures get noticed
33 ** set workdir='.' so that the build succeeds, otherwise it is trying
34 to touch 'build/something', and 'build/' doesn't exist because
35 usually that's created by a Source step
36 ** set timeout=10, because Twisted-1.3.0 has a race condition that
37 this test somehow triggers, in which the 'touch' process becomes
38 a zombie and we wait for th etimeout before giving up on it.
40 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
41 to log the Build results and step logs to the twisted log.
42 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
43 what went wrong if a build was expected to succeed but didn't.
45 * buildbot/process/step_twisted.py (Trial): set the default
46 trialMode to '--reporter=bwverbose', which specifies verbose
47 black-and-white text. Back in twisted-1.3/2.0 days we had to use
48 '-to', but those are completely missing in modern Twisteds.
50 * buildbot/scripts/sample.cfg: make the sample Manhole config use
51 a localhost-only port, to encourage better security
53 * docs/buildbot.texinfo (Change Sources): mention
56 * .darcs-boring: add a Darcs boringfile
58 * README (REQUIREMENTS): stop claiming compatibility with
61 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
64 2006-05-27 Brian Warner <warner@lothar.com>
66 * buildbot/__init__.py: bump to 0.7.3+ while between releases
67 * docs/buildbot.texinfo: same
69 2006-05-23 Brian Warner <warner@lothar.com>
71 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
72 * docs/buildbot.texinfo: set version to match
73 * NEWS: update for 0.7.3
75 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
76 give a quick mapping from VC system to possible ChangeSources
77 (Build Properties): add 'buildername'
79 * buildbot/process/base.py (Build.setupStatus): oops, set
80 'buildername' and 'buildnumber' properties
81 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
84 2006-05-22 Brian Warner <warner@lothar.com>
86 * docs/buildbot.texinfo (Build Properties): explain the syntax of
87 property interpolation better
89 * README (INSTALLATION): remove old '-v' argument from recommended
92 * docs/buildbot.texinfo (ShellCommand): add docs for description=
93 and descriptionDone= arguments. Thanks to Niklaus Giger for the
96 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
97 'svnversion' instead of grepping the output of 'svn info', much
98 simpler and avoids CR/LF problems on windows. Thanks to Olivier
99 Bonnet for the suggestion.
100 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
101 require the WC_PATH argument, so run 'svnversion .' instead.
103 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
104 aren't supposed to have 'self' in their argument list
106 2006-05-21 Brian Warner <warner@lothar.com>
108 * buildbot/process/step.py (ShellCommand.start): make
109 testInterpolate pass. I was passing the uninterpolated command to
110 the RemoteShellCommand constructor
111 (ShellCommand._interpolateProperties): oops, handle non-list
112 commands (i.e. strings with multiple words separated by spaces in
113 them) properly, instead of forgetting about them.
115 * buildbot/test/test_properties.py (Run.testInterpolate): new test
116 to actually try to use build properties in a real build. This test
118 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
119 to start and evaluate builds
121 * buildbot/test/test__versions.py: add a pseudo-test to record
122 what version of Twisted/Python/Buildbot are running. This should
123 show up at the beginning of _trial_tmp/test.log, and exists to help
124 debug other problems.
126 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
127 a filename to be served as 'robots.txt' to discourage web spiders.
128 Adapted from a patch by Tobi Vollebregt, thanks!
129 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
130 (Waterfall.test_waterfall): tweak the way that filenames are put
131 into the config file, to accomodate windows pathnames better.
133 * docs/buildbot.texinfo (HTML Waterfall): document it
135 * buildbot/process/process_twisted.py
136 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
137 changed the build process. The new setup.py no longer takes the
139 (FullTwistedBuildFactory.__init__): same
140 (TwistedReactorsBuildFactory.__init__): same
142 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
143 be placed in the [hooks] section of the central repository (the
144 one that everybody pushes changes to).
146 2006-05-20 Brian Warner <warner@lothar.com>
148 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
149 .darcs-context file, use binary mode. I think this was causing a
150 Darcs failure under windows.
152 2006-05-19 Brian Warner <warner@lothar.com>
154 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
155 use a timezone string of +0000 and gmtime, since this timestamp is
156 sent to a buildmaster and %z is broken.
158 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
159 string and localtime, since this timestamp will only be consumed
160 locally, and %z is broken.
162 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
163 gmtime, since this timestamp is returned to the buildmaster, and
166 2006-05-18 Brian Warner <warner@lothar.com>
168 * NEWS: update in preparation for next release
170 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
171 setup-repository and do-we-have-the-vc-tools code into a separate
172 "helper" class, which sticks around in a single module-level
173 object. This seems more likely to continue to work in the future
174 than having it hide in the TestCase and hope that TestCases stick
175 around for a long time.
177 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
178 addremove' has been deprecated in recent versions of mercurial, so
181 2006-05-07 Brian Warner <warner@lothar.com>
183 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
184 operating under windows, move the file before opening it, since
185 you can't rename a file that somebody has open.
187 * buildbot/process/base.py (Build.setupBuild): if something goes
188 wrong while creating a Step, log the name and arguments, since the
189 error message when you get the number of arguments wrong is really
192 2006-05-06 Brian Warner <warner@lothar.com>
194 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
195 bugs in twisted-specific code not covered by my unit tests, this
196 time use 'cmd' argument instead of self.cmd
198 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
199 fix stupid braino: either use startwith or find()==0, not both.
200 (TwistedReactorsBuildFactory.__init__): another dumb typo
202 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
203 mark this test as TODO under windows, since process-killing seems
204 dodgy there. We'll come back to this later and try to fix it
207 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
208 and don't include a timezone
209 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
210 This should avoid the windows-with-verbose-timezone-name problem
212 (Patch.testPatch): add a test which runs 'patch' with less
213 overhead than the full VCBase.do_patch sequence, to try to isolate
214 a windows test failure. This one uses slave.commands.ShellCommand
215 and 'patch', but none of the VC code.
217 * buildbot/slave/commands.py (getCommand): use which() to find the
218 executables for 'cvs', 'svn', etc. This ought to help under
221 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
222 working directory before starting. If an earlier test failed, the
223 leftover directory would mistakenly flunk a later test.
224 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
225 Make sure that we use the right commandlines if which("tla") picks
226 up "tla.exe" (as it does under windows).
227 (TlaSupport.do_get): factor out this tla-vs-baz difference
228 (TlaSupport.vc_create): more tla-vs-baz differences
230 * buildbot/test/test_slavecommand.py
231 (ShellBase.testShellMissingCommand): stop trying to assert
232 anything about the error message: different shells on different
233 OSes with different languages makes it hard, and it really isn't
234 that interesting of a thing to test anyway.
236 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
237 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
238 "Panther"), because it has a bug which flunks a couple tests in
239 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
240 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
241 able to test that yet.
243 2006-04-30 Brian Warner <warner@lothar.com>
245 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
246 make sure child commands emit messages in english, so our regexps
247 will match. Thanks to Nikaus Giger for identifying the problems.
248 (VCBase._do_vctest_export_1): mode="export" is not responsible
249 for setting the "got_revision" property, since in many cases it is
250 not convenient to determine.
251 (SVNSupport.capable): when running 'svn --version' to check for
252 ra_local, we want error messages in english
253 * buildbot/test/test_slavecommand.py
254 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
255 to emit the error message in english
257 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
258 the environment with $LC_ALL="C" so that Commands which need to
259 parse the output of their child processes can obtain it in
261 (SVN.parseGotRevision): call "svn info" afterwards instead of
262 watching the output of the "svn update" or "svn checkout".
263 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
264 (Arch.parseGotRevision): same
265 (Bazaar.parseGotRevision): same
266 (Mercurial.parseGotRevision): same
268 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
269 $LC_ALL="C" when running commands under 'buildbot try', too
271 * buildbot/test/__init__.py: remove the global os.environ()
272 setting, instead we do it just for the tests that run commands and
273 need to parse their output.
275 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
276 remove the overly-short .timeout on this test, because non-DNotify
277 platforms must fall back to polling which happens at 10 second
278 intervals, so a 5 second timeout would never succeed.
280 2006-04-24 Brian Warner <warner@lothar.com>
282 * docs/buildbot.texinfo (Installing the code): update trial
283 invocation, SF#1469116 by Niklaus Giger.
284 (Attributes of Changes): updated branch-name examples to be
285 a bit more realistic, SF#1475240 by Stephen Davis.
287 * contrib/windows/buildbot2.bat: utility wrapper for windows
288 developers, contributed by Nick Trout (after a year of neglect..
291 * buildbot/test/test_vc.py (*.capable): store the actual VC
292 binary's pathname in VCS[vcname], so it can be retrieved later
293 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
294 strip out non-numeric timezone information, specifically the funky
295 German string that his system produced that confuses CVS.
296 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
297 allow Darcs tests to work on windows
298 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
299 procutils.which() everywhere, to allow tryclient to work under
300 windows. Also from Niklaus Giger, SF#1463394.
302 * buildbot/twcompat.py (which): move the replacement for a missing
303 twisted.python.procutils.which from test_vc.py to here, so it can
304 be used in other places too (specifically tryclient.py)
306 2006-04-23 Brian Warner <warner@lothar.com>
308 * buildbot/status/html.py (StatusResourceBuild.body): replace the
309 bare buildbotURL/projectName line with a proper DIV, along with a
310 CSS class of "title", from Stefan Seefeld (SF#1461675).
311 (WaterfallStatusResource.body0): remove the redundant 'table'
313 (WaterfallStatusResource.body): same. Also add class="LastBuild"
314 to the top-row TR, and class="Activity" to the second-row TR,
315 rather than putting them in the individual TD nodes.
317 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
318 'got_revision' build property for all VC systems that implement
319 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
321 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
322 to determine which revision we actually obtained
323 (CVS.parseGotRevision): implement this for CVS, which just means
324 to grab a timestamp. Not ideal, and it depends upon the buildslave
325 having a clock that is reasonably well syncronized with the server,
326 but it's better than nothing.
327 (SVN.parseGotRevision): implement it for SVN, which is accurate
328 (Darcs.parseGotRevision): same
329 (Arch.parseGotRevision): same
330 (Bazaar.parseGotRevision): same
331 (Mercurial.parseGotRevision): same
333 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
334 keep a record of all non-stdout/stderr/header/rc status updates,
335 for the benefit of RemoteCommands that send other useful things,
337 (Source.commandComplete): put any 'got_revision' status values
338 into a build property of the same name
341 * buildbot/process/step_twisted.py (Trial): update to deal with
342 new ShellCommand refactoring
344 * docs/buildbot.texinfo (Build Properties): document new feature
345 that allows BuildSteps to get/set Build-wide properties like which
346 revision was requested and/or checked out.
348 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
349 * buildbot/status/builder.py (BuildStatus.getProperty): implement
350 it. Note that this bumps the persistenceVersion of the saved Build
351 object, so add the necessary upgrade-old-version logic to include
352 an empty properties dict.
354 * buildbot/process/base.py (Build.setProperty): implement it
355 (Build.getProperty): same
356 (Build.startBuild): change build startup to set 'branch',
357 'revision', and 'slavename' properties at the right time
359 * buildbot/process/step.py (BuildStep.__init__): change setup to
360 require 'build' argument in a better way
361 (LoggingBuildStep): split ShellCommand into two pieces, for better
362 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
363 a single RemoteCommand that sends stdout/stderr status text. It
364 also provides the usual commandComplete / createSummary /
365 evaluateCommand / getText methods to be overridden...
366 (ShellCommand): .. whereas ShellCommand is specifically for
367 running RemoteShellCommands. Other shell-like BuildSteps (like
368 Source) can inherit from LoggingBuildStep instead of ShellCommand
369 (WithProperties): marker class to do build-property interpolation
370 (Source): inherit from LoggingBuildStep instead of ShellCommand
373 * buildbot/test/test_properties.py: test new functionality
375 2006-04-21 Brian Warner <warner@lothar.com>
377 * buildbot/test/test_vc.py: rename testBranch to
378 testCheckoutBranch to keep the tests in about the right
381 2006-04-18 Brian Warner <warner@lothar.com>
383 * docs/buildbot.texinfo (PBListener): improve cross-references
384 between PBListener and 'buildbot statusgui', thanks to John Pye
387 2006-04-17 Brian Warner <warner@lothar.com>
389 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
390 running under Twisted-1.3.0, otherwise skipped tests are reported
393 * all: use isinstance() instead of 'type(x) is foo', suggested by
396 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
397 oops, fix a brain-fade from the other week, when making the
398 addStep changes. I changed all the __init__ upcalls to use the
399 wrong superclass name.
400 (FullTwistedBuildFactory.__init__): same
401 (TwistedDebsBuildFactory.__init__): same
402 (TwistedReactorsBuildFactory.__init__): same
403 (TwistedBuild.isFileImportant): use .startswith for clarity,
404 thanks to Neal Norwitz for the suggestions.
406 * contrib/viewcvspoll.py: script to poll a viewcvs database for
407 changes, then deliver them over PB to a remote buildmaster.
409 * contrib/svnpoller.py: added script by John Pye to poll a remote
410 SVN repository (by running 'svn log') from a cronjob, and run
411 'buildbot sendchange' to deliver the changes to a remote
413 * contrib/svn_watcher.py: added script by Niklaus Giger (a
414 modification of svnpoller.py), same purpose, but this one loops
415 internally (rather than expecting to run from a cronjob) and works
417 * contrib/README.txt: same
419 2006-04-11 Brian Warner <warner@lothar.com>
421 * all: fix a number of incorrect names and missing imports, thanks
422 to Anthony Baxter for the patch.
423 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
424 remove unused buggy method.
425 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
426 comes from shutil, not "shutils"
427 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
428 (Arch.checkSlaveVersion): same
429 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
431 * buildbot/process/step_twisted2.py: add some missing imports
432 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
433 this code used to live in twisted.internet.defer
435 2006-04-10 Brian Warner <warner@lothar.com>
437 * buildbot/process/step.py (Mercurial): add Mercurial support
438 * buildbot/slave/commands.py (Mercurial): same
439 * buildbot/scripts/tryclient.py (MercurialExtractor): same
440 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
441 not yet tested, but 'try' support *is* covered
442 * docs/buildbot.texinfo (Mercurial): document it
444 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
445 some debugging messages (turned off)
446 * buildbot/test/test_vc.py: improve debug messages
448 2006-04-07 Brian Warner <warner@lothar.com>
450 * buildbot/test/test_vc.py (which): define our own which() in case
451 we can't import twisted.python.procutils, because procutils doesn't
454 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
455 of SlaveLocks for performance tests
457 * docs/examples/twisted_master.cfg: update to match current usage
459 * buildbot/changes/p4poller.py (P4Source): add new arguments:
460 password, p4 binary, pollinterval, maximum history to check.
461 Patch from an anonymous sf.net contributor, SF#1219384.
462 * buildbot/process/step.py (P4Sync.__init__): add username,
463 password, and client arguments.
464 * buildbot/slave/commands.py (P4Sync): same
466 2006-04-05 Brian Warner <warner@lothar.com>
468 * buildbot/process/factory.py (BuildFactory.addStep): new method
469 to add steps to a BuildFactory. Use it instead of f.steps.append,
470 and you can probably avoid using the s() convenience function.
471 Patch from Neal Norwitz, sf.net #1412605.
472 (other): update all factories to use addStep
473 * buildbot/process/process_twisted.py: update all factories to use
476 2006-04-03 Brian Warner <warner@lothar.com>
478 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
479 work under windows too. Adapted from a patch by Niklaus Giger,
480 addresses SF#1463399.
482 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
483 spawned commands emit parseable results in english and not some
484 other language. Patch from Niklaus Giger, SF#1463395.
486 * README (INSTALLATION): discourage users from running unit tests on
487 a "network drive", patch from Niklaus Giger, SF#1463394.
489 2006-03-22 Brian Warner <warner@lothar.com>
491 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
492 function to turn a repository-relative pathname into a (branch,
493 branch-relative-filename) tuple. Change this function to handle
494 the branch naming policy used by your Subversion repository.
495 Thanks to AllMyData.com for sponsoring this work.
497 2006-03-16 Brian Warner <warner@lothar.com>
499 * buildbot/scripts/sample.cfg: add python-mode declaration for
500 vim. Thanks to John Pye for the patch.
502 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
503 command line, mention the importance of running 'crontab' as the
504 buildmaster/buildslave user. Thanks to John Pye for the catch.
506 2006-03-13 Brian Warner <warner@lothar.com>
508 * buildbot/status/words.py (IRC): add an optional password=
509 argument, which will be sent to Nickserv in an IDENTIFY message at
510 login, to claim the nickname. freenode requires this before the
511 bot can sent (or reply to) private messages. Thanks to Clement
512 Stenac for the patch.
513 * docs/buildbot.texinfo (IRC Bot): document it
515 * buildbot/status/builder.py (LogFile.merge): don't write chunks
516 larger than chunkSize. Fixes SF#1349253.
517 * buildbot/test/test_status.py (Log.testLargeSummary): test it
518 (Log.testConsumer): update to match new internal chunking behavior
520 2006-03-12 Brian Warner <warner@lothar.com>
522 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
524 * buildbot/test/test_maildir.py (MaildirTest): rename the
525 'timeout' method, as it collides with trial's internals
527 * buildbot/scripts/runner.py: add 'buildbot restart' command
528 (stop): don't sys.exit() out of here, otherwise restart can't work
529 * docs/buildbot.texinfo (Shutdown): document it
531 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
532 * buildbot/status/html.py (Waterfall.__init__): same
533 * buildbot/process/builder.py (Builder.startBuild): same
534 * buildbot/process/base.py (BuildRequest): same
535 * buildbot/sourcestamp.py (SourceStamp): same
536 * buildbot/scheduler.py (Nightly): same
538 * buildbot/__init__.py (version): bump to 0.7.2+ while between
540 * docs/buildbot.texinfo: same
542 2006-02-17 Brian Warner <warner@lothar.com>
544 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
545 * docs/buildbot.texinfo: set version number to match
546 * NEWS: update for 0.7.2
548 2006-02-16 Brian Warner <warner@lothar.com>
550 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
552 2006-02-09 Brian Warner <warner@lothar.com>
554 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
555 add text to explain per-build branch parameters
556 * NEWS: mention --umask
558 2006-02-08 Brian Warner <warner@lothar.com>
560 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
562 (SlaveOptions.optParameters): add --umask, to make it possible to
563 make buildslave-generated files (including build products) be
566 * buildbot/slave/bot.py (BuildSlave.startService): same
568 2006-01-23 Brian Warner <warner@lothar.com>
570 * buildbot/status/builder.py: urllib.quote() all URLs that include
571 Builder names, so that builders can include characters like '/'
572 and ' ' without completely breaking the resulting HTML. Thanks to
573 Kevin Turner for the patch.
574 * buildbot/status/html.py: same
575 * buildbot/test/test_web.py (GetURL.testBuild): match changes
577 * NEWS: update in preparation for upcoming release
579 2006-01-18 Brian Warner <warner@lothar.com>
581 * docs/examples/twisted_master.cfg: update to match the Twisted
582 buildbot: remove python2.2, switch to exarkun's buildslaves,
583 disable the .deb builder until we figure out how to build twisted
584 .debs from SVN, add some ktrace debugging to the OS-X build
585 process and remove the qt build, remove threadless builders,
586 change freebsd builder to use landonf's buildslave.
588 2006-01-12 Brian Warner <warner@lothar.com>
590 * buildbot/master.py (Manhole.__init__): let port= be a strports
591 specification string, but handle a regular int for backwards
592 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
593 used in master.cfg to limit connections to just the local host.
594 (BuildMaster.loadConfig): same for c['slavePortnum']
595 * buildbot/scheduler.py (Try_Userpass.__init__): same
596 * buildbot/status/client.py (PBListener.__init__): same
597 * buildbot/status/html.py (Waterfall.__init__): same, for both
598 http_port and distrib_port. Include backwards-compatibility checks
599 so distrib_port can be a filename string and still mean unix:/foo
600 * docs/buildbot.texinfo (Setting the slaveport): document it
601 (Debug options): same
602 (HTML Waterfall): same
605 * buildbot/test/test_config.py (ConfigTest): test it
607 * buildbot/master.py (BuildMaster.loadConfig): wait for the
608 slaveport's disownServiceParent deferred to fire before opening
609 the new one. Fixes an annoying bug in the unit tests.
611 2006-01-03 Brian Warner <warner@lothar.com>
613 * buildbot/master.py (BuildMaster): remove the .schedulers
614 attribute, replacing it with an allSchedulers() method that looks
615 for all IService children that implement IScheduler. Having only
616 one parent/child relationship means fewer opportunities for bugs.
617 (BuildMaster.allSchedulers): new method
618 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
619 also fix ugly bug that caused any config-file reload to
620 half-forget about the earlier Schedulers, causing an exception
621 when a Change arrived and was handed to a half-connected
622 Scheduler. The exception was in scheduler.py line 54ish:
623 self.parent.submitBuildSet(bs)
624 exceptions.AttributeError: 'NoneType' object has no attribute
626 (BuildMaster.addChange): update to use allSchedulers()
628 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
629 to work properly with twisted-1.3.0, where you must explicitly
630 include the __implements__ from parent classes
631 (BaseScheduler.__repr__): make it easier to distinguish distinct
633 (BaseUpstreamScheduler.__implements__): same
635 * buildbot/status/builder.py (Status.getSchedulers): update to
637 * buildbot/test/test_run.py (Run.testMaster): same
638 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
639 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
640 make sure Scheduler instances are left alone when an identical
641 config file is reloaded
642 (ConfigElements.testSchedulers): make sure Schedulers are properly
645 * Makefile (TRIALARGS): my local default Twisted version is now
646 2.1.0, update the trial arguments accordingly
648 2005-12-22 Brian Warner <warner@lothar.com>
650 * docs/examples/twisted_master.cfg: merge changes from pyr: add
653 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
654 addChange in the parent class, although I suspect this should be
655 fixed better in the future.
657 2005-11-26 Brian Warner <warner@lothar.com>
659 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
660 explode when branch==None, thanks to Kevin Turner for the catch
661 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
664 * buildbot/__init__.py (version): bump to 0.7.1+ while between
666 * docs/buildbot.texinfo: same
668 2005-11-26 Brian Warner <warner@lothar.com>
670 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
671 * docs/buildbot.texinfo: set version number to match
673 2005-11-26 Brian Warner <warner@lothar.com>
675 * NEWS: update for 0.7.1
677 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
678 sure that unsubscribe works even if we never sent an ETA update.
679 Also, don't explode on duplicate unsubscribe.
680 (BuildStepStatus.addLog): make the convenience "return self"-added
681 watcher automatically unsubscribe when the Step finishes.
682 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
683 (BuildStatus.stepStarted): same auto-unsubscribe
684 (BuilderStatus.buildStarted): same auto-unsubscribe
686 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
688 (IStatusReceiver.stepStarted): same
689 (IStatusReceiver.logStarted): same
691 * buildbot/test/test_run.py (Status): move the Status test..
692 * buildbot/test/test_status.py (Subscription): .. to here
694 2005-11-25 Brian Warner <warner@lothar.com>
698 * buildbot/locks.py: fix the problem in which loading a master.cfg
699 file that changes some Builders (but not all of them) can result
700 in having multiple copies of the same Lock. Now, the real Locks
701 are kept in a table inside the BotMaster, and the Builders/Steps
702 use "LockIDs", which are still instances of MasterLock and
703 SlaveLock. The real Locks are instances of the new RealMasterLock
704 and RealSlaveLock classes.
705 * buildbot/master.py (BotMaster.getLockByID): new method to
706 convert LockIDs into real Locks.
707 * buildbot/process/base.py (Build.startBuild): convert LockIDs
708 into real Locks before building
709 * buildbot/process/step.py (BuildStep.startStep): same
710 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
711 exercises the problem
714 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
715 what Schedulers are available
717 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
718 work by Dobes Vandermeer and hacked mercilessly by me. This offers
719 'cron'-style build scheduling at certain times of day, week,
721 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
723 * buildbot/scheduler.py (Scheduler): change fileIsImportant
724 handling: treat self.fileIsImportant more as an attribute that
725 contains a callable than as a method. If the attribute is None,
726 don't call it and assume all filenames are important. It is still
727 possible to provide a fileIsImportant method in a subclass,
729 (AnyBranchScheduler): handle fileIsImportant=None, previously it
731 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
732 test using AnyBranchScheduler with fileIsImportant=None
734 2005-11-24 Brian Warner <warner@lothar.com>
736 * buildbot/test/test_config.py (StartService): don't claim a fixed
737 port number, instead set slavePort=0 on the first pass, figure out
738 what port was allocated, then switch to a config file that uses
741 * buildbot/master.py (BuildMaster.loadConfig): close the old
742 slaveport before opening the new one, because unit tests might
743 replace slavePort=0 with the same allocated portnumber, and if we
744 don't wait for the old port to close first, we get a "port already
745 in use" error. There is a tiny race condition here, but the only
746 threat is from other programs that bind (statically) to the same
747 port number we happened to be allocated, and only if those
748 programs use SO_REUSEADDR, and only if they get control in between
751 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
753 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
754 deleted ChangeSources before adding any new ones
755 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
756 compare_attrs, to make sure that a config-file reload does not
757 unnecessarily replace an unmodified ChangeSource instance
758 * buildbot/test/test_config.py (ConfigTest.testSources): update
760 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
761 mean "don't build anything", and add a warning if it gets used
762 because it isn't actually useful.
764 * contrib/svn_buildbot.py: update example usage to match the port
765 number that gets used by the PBChangeSource
766 * buildbot/scripts/sample.cfg: add example of PBChangeSource
768 2005-11-22 Brian Warner <warner@lothar.com>
770 * NEWS: start collecting items for next release
772 * buildbot/process/step.py (SVN.computeSourceRevision): assume
773 revisions are strings
774 (P4Sync.computeSourceRevision): same
776 * buildbot/status/html.py (StatusResourceBuild.body): add a link
777 to the Buildbot's overall status page
778 (StatusResourceBuilder.body): same
780 2005-11-15 Brian Warner <warner@lothar.com>
782 * buildbot/master.py (BuildMaster.loadConfig): serialize the
783 config-file loading, specifically to make sure old StatusTargets
784 are finished shutting down before new ones start up (thus
785 resolving a bug in which changing the Waterfall object would fail
786 because both new and old instances were claiming the same
787 listening port). Also load new Schedulers after all the new
788 Builders are set up, in case they fire off a new build right away.
789 * buildbot/test/test_config.py (StartService): test it
791 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
792 the branch name to the mail body
794 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
795 Without it, a config-file reload fails to update an existing
797 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
798 username/passwd to compare_attrs, for the same reason
799 * buildbot/status/html.py (Waterfall): add favicon to
800 compare_attrs, same reason
802 2005-11-05 Brian Warner <warner@lothar.com>
804 * buildbot/scripts/tryclient.py (createJobfile): stringify the
805 baserev before stuffing it in the jobfile. This resolves problems
806 under SVN (and probably Arch) where revisions are expressed as
807 numbers. I'm inclined to use string-based revisions everywhere in
808 the future, but this fix should be safe for now. Thanks to Steven
809 Walter for the patch.
811 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
812 binary mode when opening pickle files, to make windows work
813 better. Thanks to Dobes Vandermeer for the catch.
814 * buildbot/status/builder.py (BuildStatus.saveYourself): same
815 (BuilderStatus.getBuildByNumber): same
816 (Status.builderAdded): same
817 * buildbot/master.py (BuildMaster.loadChanges): same
819 * buildbot/util.py (Swappable): delete unused leftover code
821 * buildbot/process/step.py (SVN): when building on a non-default
822 branch, add the word "[branch]" to the VC step's description, so
823 it is obvious that we're not building the usual stuff. Likewise,
824 when we are building a specific revision, add the text "rNNN" to
825 indicate what that revision number is. Thanks to Brad Hards and
826 Nathaniel Smith for the suggestion.
827 (Darcs.startVC): same
829 (Bazaar.startVC): same
831 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
832 typo, caught by Mark Dillavou, closes SF#1216636.
834 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
835 about a test to add some day
837 * docs/examples/twisted_master.cfg: update: bot1 can now handle
838 the 'full-2.3' build, and the 'reactors' build is now run under
839 python-2.4 because the buildslave no longer has gtk/etc bindings
840 for earlier versions.
842 2005-11-03 Brian Warner <warner@lothar.com>
844 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
845 method, takes an IBuildStatus and rebuilds it. It might make more
846 sense to add this to IBuildControl instead, but that instance goes
847 away completely once the build has finished, and resubmitting
848 builds can take place weeks later.
849 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
850 * buildbot/status/html.py (StatusResourceBuild): also stash an
851 IBuilderControl so we can use resubmitBuild.
852 (StatusResourceBuild.body): render "resubmit" button if we can.
853 Also add hrefs for each BuildStep
854 (StatusResourceBuild.rebuild): add action for "resubmit" button
855 (StatusResourceBuilder.getChild): give it an IBuilderControl
857 * buildbot/status/builder.py (Status.getURLForThing): change the
858 URL for BuildSteps to have a "step-" prefix, so the magic URLs
859 that live as targets of buttons like "stop" and "rebuild" can't
861 * buildbot/status/builder.py (Status.getURLForThing): same
862 * buildbot/status/html.py (StatusResourceBuild.getChild): same
863 (StepBox.getBox): same
864 * buildbot/test/test_web.py (GetURL): same
867 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
868 exclusivity checks after Source.__init__ upcall, so misspelled
869 arguments will be reported more usefully
870 (Darcs.__init__): same
872 2005-10-29 Brian Warner <warner@lothar.com>
874 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
875 builder. Move the Try scheduler off to a separate port.
877 2005-10-27 Brian Warner <warner@lothar.com>
879 * buildbot/clients/gtkPanes.py
880 (TwoRowClient.remote_builderRemoved): disappearing Builders used
881 to cause the app to crash, now they don't.
883 * buildbot/clients/debug.py: display the buildmaster's location
884 in the window's title bar
886 2005-10-26 Brian Warner <warner@lothar.com>
888 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
889 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
890 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
892 * buildbot/status/html.py (td): put a single non-breaking space
893 inside otherwise empty <td> elements, as a workaround for buggy
894 browsers which would optimize them away (along with any associated
895 styles, like the kind that create the waterfall grid borders).
896 Patch from Frerich Raabe.
898 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
899 argv-list as an argument, defaulting to ["-to"], which is
900 appropriate for the Trial that comes with Twisted-2.1.0 and
901 earlier. The Trial in current Twisted SVN wants
902 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
903 defaults to an empty list.
904 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
905 match it, now that trialMode= is a list instead of a single string
907 * buildbot/__init__.py (version): bump to 0.7.0+ while between
909 * docs/buildbot.texinfo: same
911 2005-10-24 Brian Warner <warner@lothar.com>
913 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
914 * docs/buildbot.texinfo: set version number to match
916 2005-10-24 Brian Warner <warner@lothar.com>
918 * README: update for 0.7.0
920 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
922 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
923 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
924 send the branch= argument unless the user really provided one, to
925 retain compatibility with older buildmasters that don't accept
927 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
930 * docs/buildbot.texinfo: update lots of stuff
932 * buildbot/scripts/runner.py (sendchange): add a --branch argument
933 to the 'buildbot sendchange' command
934 * buildbot/clients/sendchange.py (Sender.send): same
935 * buildbot/changes/pb.py (ChangePerspective): same
936 * buildbot/test/test_changes.py (Sender.testSender): test it
938 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
939 'default_branch' argument names to 'baseURL' and 'defaultBranch',
940 for consistency with other BuildStep arguments that use camelCase.
941 Well, at least more of them use camelCase (like flunkOnWarnings)
942 than don't.. I wish I'd picked one style and stuck with it
943 earlier. Annoying, but it's best done before the release, since
944 these arguments didn't exist at all in 0.6.6 .
946 * buildbot/test/test_vc.py (SVN.testCheckout): same
947 (Darcs.testPatch): same
948 * docs/buildbot.texinfo (SVN): document the change
949 (Darcs): same, add some build-on-branch docs
950 * docs/examples/twisted_master.cfg: match change
952 * buildbot/process/step.py (BuildStep): rename
953 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
954 how it is normally used.
955 * buildbot/test/test_steps.py (Version.checkCompare): same
957 * buildbot/process/step.py (CVS.startVC): refuse to build
958 update/copy -style builds on a non-default branch with an old
959 buildslave (<=0.6.6) that doesn't know how to do it properly. The
960 concern is that it will do a VC 'update' in an existing tree when
961 it is supposed to be switching branches (and therefore clobbering
962 the tree to do a full checkout), thus building the wrong source.
963 This used to be a warning, but I think the confusion it is likely
964 to cause warrants making it an error.
965 (SVN.startVC): same, also make mode=export on old slaves an error
966 (Darcs.startVC): same
967 (Git.startVC): improve error message for non-Git-enabled slaves
968 (Arch.checkSlaveVersion): same. continue to emit a warning when a
969 specific revision is built on a slave that doesn't pay attention
970 to args['revision'], because for slowly-changing trees it will
971 probably do the right thing, and because we have no way to tell
972 whether we're asking it to build the most recent version or not.
973 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
975 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
976 that 'master' is in host:portnum format, to catch errors sooner
978 2005-10-23 Brian Warner <warner@lothar.com>
980 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
981 when creating the list of warning messages, include the line
982 immediately after each WARNING: line, since that's usually where
983 the file and line number wind up.
985 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
990 2005-10-22 Brian Warner <warner@lothar.com>
992 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
993 patch from Brad Hards
994 * buildbot/status/classic.css: same
995 * buildbot/test/test_web.py (Waterfall): match changes
997 * buildbot/test/test_steps.py (BuildStep.setUp): set
998 nextBuildNumber so the test passes
999 * buildbot/test/test_status.py (MyBuilder): same
1001 * buildbot/status/html.py (StatusResourceBuild.body): revision
1002 might be numeric, so stringify it before html-escapifying it
1003 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1004 timer for the upcoming build
1005 * buildbot/status/classic.css: add background-color attributes for
1006 offline/waiting/building classes
1008 * buildbot/status/builder.py (BuildStatus): derive from
1009 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1010 the default (i.e. unknown) .slavename to "???" instead of None,
1011 since even unknown slavenames need to be printed eventually.
1012 (BuilderStatus): also derive from styles.Versioned . More
1013 importantly, determine .nextBuildNumber at creation/unpickling
1014 time by scanning the directory of saved BuildStatus instances and
1015 choosing one larger than the highest-numbered one found. This
1016 should fix the problem where random errors during upgrades cause
1017 the buildbot to forget about earlier builds. .nextBuildNumber is
1018 no longer stored in the pickle.
1019 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1020 at least log the error. Also call Builder.determineNextBuildNumber
1021 once the basedir is set.
1023 * buildbot/master.py (BuildMaster.loadChanges): do
1024 styles.doUpgrade afterwards, in case I decide to make Changes
1025 derived from styles.Versioned some day and forget to make this
1029 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1030 when running under older pythons (<2.3) in which the shlex module
1031 doesn't have a 'split' function.
1033 * buildbot/process/step.py (ShellCommand.start): make
1034 errorMessages= be a list of strings to stuff in the log before the
1035 command actually starts. This makes it easier to flag multiple
1036 warning messages, e.g. when the Source steps have to deal with an
1038 (CVS.startVC): handle slaves that don't handle multiple branches
1039 by switching into 'clobber' mode
1040 (SVN.startVC): same. Also reject branches without base_url
1041 (Darcs.startVC): same. Also reject revision= in older slaves
1042 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1043 (Bazaar.startVC): same, and test for baz separately than for arch
1045 * buildbot/slave/commands.py (cvs_ver): document new features
1047 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1048 (BuildStep.slaveVersionNewEnough): more useful utility method
1049 * buildbot/test/test_steps.py (Version): start testing it
1051 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1052 the 'force' command requires python2.3, for the shlex.split method
1054 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1055 since we don't use it anymore. The Twisted buildbot uses a
1058 2005-10-21 Brian Warner <warner@lothar.com>
1060 * buildbot/process/process_twisted.py: rework all BuildFactory
1061 classes to take a 'source' step as an argument, instead of
1062 building up the SVN instance in the factory.
1063 * docs/examples/twisted_master.cfg: enable build-on-branch by
1064 providing a base_url and default_branch
1066 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1067 control over --branch and --revision, not that they are always
1069 * buildbot/status/html.py (StatusResourceBuilder.force): same
1070 (StatusResourceBuild.body): display SourceStamp components
1072 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1073 IRC 'force' command, so it can be shared with an eventual
1074 command-line-tool 'buildbot force' mode.
1075 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1077 2005-10-20 Brian Warner <warner@lothar.com>
1079 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1081 * docs/examples/twisted_master.cfg: update to use Schedulers
1083 * buildbot/scripts/sample.cfg: update with Schedulers
1085 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1086 method specifically for use by HTML "force build" button and the
1087 IRC "force" command. Raises an immediate error if there are no
1089 (IBuilderControl.requestBuild): make this just submit a build, not
1090 try to check for existing slaves or set up any when-finished
1091 Deferreds or anything.
1092 * buildbot/process/builder.py (BuilderControl): same
1093 * buildbot/status/html.py (StatusResourceBuilder.force): same
1094 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1095 * buildbot/test/test_slaves.py: same
1096 * buildbot/test/test_web.py: same
1098 2005-10-19 Brian Warner <warner@lothar.com>
1100 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1101 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1103 2005-10-18 Brian Warner <warner@lothar.com>
1105 * buildbot/status/html.py: provide 'status' argument to most
1106 StatusResourceFOO objects
1107 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1108 and Logfiles" section to make the Build page into a more-or-less
1109 comprehensive source of status information about the build
1111 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1112 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1114 2005-10-17 Brian Warner <warner@lothar.com>
1116 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1117 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1118 out what to do about other projects: the correct options for
1119 recent Twisteds will not work for older ones.
1121 2005-10-15 Brian Warner <warner@lothar.com>
1123 * buildbot/status/builder.py (Status.getURLForThing): add method
1124 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1125 use this in email/IRC status clients to make them more useful, by
1126 providing the end user with hints on where to learn more about the
1127 object being reported on.
1128 * buildbot/test/test_web.py (GetURL): tests for it
1130 2005-10-14 Brian Warner <warner@lothar.com>
1132 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1133 fix bug resulting from deferredResult changes
1135 2005-10-13 Brian Warner <warner@lothar.com>
1137 * buildbot/test/test_changes.py: remove use of deferredResult
1138 * buildbot/test/test_config.py: same
1139 * buildbot/test/test_control.py: same
1140 * buildbot/test/test_status.py: same
1141 * buildbot/test/test_vc.py: this is the only remaining use, since
1142 it gets used at module level. This needs to be replaced by some
1143 sort of class-level run-once routine.
1145 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1147 * lots: implement multiple slaves per Builder, which means multiple
1148 current builds per Builder. Some highlights:
1149 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1150 of (state,currentBuilds) instead of (state,currentBuild)
1151 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1152 (IBuildStatus.getSlavename): new method, so you can tell which
1153 slave got used. This only gets set when the build completes.
1154 (IBuildRequestStatus.getBuilds): new method
1156 * buildbot/process/builder.py (SlaveBuilder): add a .state
1157 attribute to track things like ATTACHING and IDLE and BUILDING,
1159 (Builder): .. the .slaves attribute here, which has been turned
1160 into a simple list of available slaves. Added a separate
1161 attaching_slaves list to track ones that are not yet ready for
1163 (Builder.fireTestEvent): put off the test-event callback for a
1164 reactor turn, to make tests a bit more consistent.
1165 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1166 ping fails due to an exception. This needs work, I'm worried that
1167 a code error could lead to a constantly re-connecting slave.
1168 Especially since I'm trying to move to a distinct remote_ping
1169 method, separate from the remote_print that we currently use.
1170 (BuilderControl.requestBuild): return a convenience Deferred that
1171 provides an IBuildStatus when the build finishes.
1172 (BuilderControl.ping): ping all connected slaves, only return True
1173 if they all respond.
1175 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1176 reconnect when we shut down.
1178 * buildbot/status/builder.py: implement new methods, convert
1179 one-build-at-a-time methods to handle multiple builds
1180 * buildbot/status/*.py: do the same in all default status targets
1181 * buildbot/status/html.py: report the build's slavename in the
1182 per-Build page, report all buildslaves on the per-Builder page
1184 * buildbot/test/test_run.py: update/create tests
1185 * buildbot/test/test_slaves.py: same
1186 * buildbot/test/test_scheduler.py: remove stale test
1188 * docs/buildbot.texinfo: document the new builder-specification
1189 'slavenames' parameter
1191 2005-10-12 Brian Warner <warner@lothar.com>
1193 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1194 report failure correctly, causing Dependent builds to run when
1195 they shouldn't have.
1196 * buildbot/status/builder.py (BuildSetStatus): same
1197 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1198 (Set.testSuccess): test the both-pass case too
1199 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1200 fix this test: it was ending too early, masking the failure before
1201 (Logger): specialized StatusReceiver to make sure the dependent
1202 builds aren't even started, much less completed.
1204 2005-10-07 Brian Warner <warner@lothar.com>
1206 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1207 bot.SlaveBuilder being disowned in the middle of a build
1209 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1210 this inherit from StatusReceiver. Also upcall in __init__. This
1211 fixes the embarrasing crash when the new buildSetSubmitted method
1212 is invoked and Waterfall/etc don't implement their own.
1213 * buildbot/test/test_run.py: add a TODO note about a test to catch
1214 just this sort of thing.
1216 * buildbot/process/builder.py (Builder.attached): remove the
1217 already-attached warning, this situation is normal. Add some
1218 comments explaining it.
1220 2005-10-02 Brian Warner <warner@lothar.com>
1222 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1223 OverflowError when setting up dnotify, because some 64-bit systems
1224 have problems with signed-vs-unsigned constants and trip up on the
1225 DN_MULTISHOT flag. Patch from Brad Hards.
1227 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1229 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1230 progressMetrics, description, descriptionDone to the 'parms' list,
1231 and make use the 'parms' list from the implementation class
1232 instead of only BuildStep to initialize the parameters. This
1233 allows buildbot.process.factory.s() to initialize all the parms,
1234 not just those defined in directly by BuildStep.
1236 2005-09-03 Brian Warner <warner@lothar.com>
1238 * NEWS: start adding items for the next release
1240 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1241 python2.2 tests, change 'Quick' builder to only use python2.3
1243 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1245 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1246 the "Ping Builder" button if the build control is available; the
1247 user sees an exception otherwise
1249 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1251 2005-09-01 Brian Warner <warner@lothar.com>
1253 * buildbot/interfaces.py (IBuilderStatus.getState): update
1254 signature, point out that 'build' can be None
1255 (IBuildStatus.getETA): point out ETA can be none
1257 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1259 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1261 2005-08-31 Brian Warner <warner@lothar.com>
1263 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1264 update to match correct signature: removed 'eta' argument
1265 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1267 2005-08-30 Brian Warner <warner@lothar.com>
1269 * buildbot/status/builder.py (LogFile): remove the assertion that
1270 blows up when you try to overwrite an existing logfile, instead
1271 just emit a warning. This case gets hit when the buildmaster is
1272 killed and doesn't get a chance to write out the serialized
1273 BuilderStatus object, so the .nextBuildNumber attribute gets out
1276 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1277 the 'buildbot sendchange' arguments, for the Darcs context file
1278 * docs/buildbot.texinfo (sendchange): document it
1280 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1281 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1282 (IStatus.getSchedulers): new method
1283 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1284 (Status.getSchedulers): implement
1285 * buildbot/process/builder.py (Builder): maintain
1286 BuilderStatus.pendingBuilds
1287 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1288 (TryBase.addChange): Try schedulers should ignore Changes
1290 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1291 for 'try' on CVS/SVN
1292 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1294 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1295 report status properly.
1296 (Try.createJob): implement unique buildset IDs
1298 * buildbot/status/client.py (StatusClientPerspective): add a
1299 perspective_getBuildSets method for the benefit of jobdir-style
1301 * docs/buildbot.texinfo (try): more docs
1302 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1305 2005-08-18 Brian Warner <warner@lothar.com>
1307 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1308 actually work. It's functional but still kind of clunky. Also, it
1309 only works with the pb-style.. needs to be made to work with the
1312 * buildbot/status/client.py (RemoteBuildSet): new class
1313 (RemoteBuildRequest): same
1314 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1315 object, not the internal BuildStatus object.
1316 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1317 outside of the usual buildStarted() return value.
1318 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1320 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1321 (Try_Userpass_Perspective.perspective_try): return a remotely
1322 usable BuildSetStatus object
1324 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1325 isStarted()/waitUntilStarted()
1327 2005-08-16 Brian Warner <warner@lothar.com>
1329 * buildbot/status/builder.py: implement IBuildSetStatus and
1330 IBuildRequestStatus, wire them into place.
1331 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1332 methods into the BuildSetStatus object.
1333 * buildbot/interfaces.py: same
1334 (IStatus.getBuildSets): new method to get pending BuildSets
1335 (IStatusReceiver.buildsetSubmitted): new method which hears about
1337 * buildbot/master.py (BuildMaster.submitBuildSet): same
1338 * buildbot/process/base.py (BuildRequest): same, replace
1339 waitUntilStarted with subscribe/unsubscribe
1340 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1341 subscribe instead of waitUntilStarted
1342 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1344 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1346 * buildbot/test/test_buildreq.py: update for new code
1347 * buildbot/test/test_control.py (Force.testRequest): same
1350 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1351 for Darcs to not use the tempfile module, so it works under
1352 python-2.2 too. We really didn't need the full cleverness of that
1353 module, since the slave has exclusive control of its own builddir.
1355 2005-08-15 Brian Warner <warner@lothar.com>
1357 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1358 for CVS trees. It doesn't work for non-trunk branches,
1360 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1363 * Makefile: make it easier to test against python2.2
1365 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1366 tearDown2, so things like Arch can unregister archives as they're
1367 shutting down. The previous subclass-override-tearDown technique
1368 resulted in a nested maybeWait() and test failures under
1371 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1372 where we can (Arch), add a branch= argument to set the branch used
1374 (BazExtractor): extract the branch too
1375 (TlaExtractor): same
1376 * buildbot/scripts/runner.py (TryOptions): add --branch
1377 * docs/buildbot.texinfo (try): document --branch/try_branch
1379 * buildbot/slave/commands.py (Darcs): implement get-revision for
1380 Darcs, so that 'try' will work. This requires the tempfile module
1383 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1384 of revisions, branches, and 'try' in the process.
1386 2005-08-11 Brian Warner <warner@lothar.com>
1388 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1389 this, it got broken at some point in the last few releases
1390 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1391 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1392 specifically the removal of ETA information from the tuple
1394 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1397 * docs/buildbot.texinfo (try): document both --builder and
1398 'try_builders' in .buildbot/options
1399 * buildbot/scripts/runner.py (TryOptions): add --builder,
1400 accumulate the values into opts['builders']
1401 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1402 * buildbot/test/test_runner.py (Try): add some quick tests to make
1403 sure 'buildbot try --options' and .buildbot/options get parsed
1404 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1405 use --builder control
1407 * docs/buildbot.texinfo (try): add --port argument to PB style
1409 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1410 actual SourceStamp. Still need to extract a branch name, somehow.
1411 (Try): finish implementing the try client side, still need a UI
1412 for specifying which builders to use
1413 (Try.getopt): factor our options/config-file reading
1414 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1416 * buildbot/test/test_vc.py: match SourceStampExtractor change
1418 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1419 causes the twisted log to be sent to stderr
1421 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1423 2005-08-10 Brian Warner <warner@lothar.com>
1425 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1426 style is 90% done, still missing status reporting or waiting for
1427 the buildsets to finish, and it is completely untested.
1429 * buildbot/trybuild.py: delete file, move contents to ..
1430 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1431 * buildbot/test/test_vc.py: match the move
1433 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1434 of the TryScheduler, no buildsetID or status-tracking support yet
1435 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1437 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1438 possible to set the basedir after __init__ time, so it is easier
1439 to use as a Service-child of the BuildMaster instance
1441 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1442 that delivers messages to its Service parent instead of requiring
1443 a subclass to be useful. This turns out to be much easier to build
1446 * buildbot/scripts/tryclient.py (createJob): utility code to
1447 create jobfiles, will eventually be used by 'buildbot try'
1449 2005-08-08 Brian Warner <warner@lothar.com>
1451 * docs/buildbot.texinfo (try): add docs on the
1452 as-yet-unimplemented Try scheduler
1454 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1455 * buildbot/test/test_scheduler.py: .. here
1456 (Scheduling.testTryJobdir): add placeholder test for 'try'
1458 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1459 addEntry merging (>=chunkSize) behavior
1460 (Log.testConsumer): update to handle new callLater(0) behavior
1462 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1463 both the MAX_LENGTH bugfix and the resumeProducing hang.
1465 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1466 put off the actual resumeProducing for a moment with
1467 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1468 causes large logfiles to hang midway through.
1470 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1471 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1472 and to improve memory usage when streaming the file out to a web
1474 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1475 make this work cleanly
1477 2005-08-03 Brian Warner <warner@lothar.com>
1479 * buildbot/trybuild.py: new file for 'try' utilities
1480 (getSourceStamp): run in a tree, find out the baserev+patch
1481 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1482 implemented for SVN and Darcs, still working on Arch. I don't know
1483 how to make CVS work yet.
1485 * docs/buildbot.texinfo: document the 'buildbot' command-line
1486 tool, including the not-yet-implemented 'try' feature, and the
1487 in-flux .buildbot/ options directory.
1489 2005-07-20 Brian Warner <warner@lothar.com>
1491 * buildbot/locks.py: added temporary id() numbers to Lock
1492 descriptions, to track down a not-really-sharing-the-Lock bug
1494 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1496 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1497 needed for python2.2 compatibility
1498 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1499 are from the __future__
1501 2005-07-19 Brian Warner <warner@lothar.com>
1503 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1504 message when schedulers use unknown builders
1506 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1507 SlaveLock('name') and MasterLock('name') are distinct
1509 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1510 c['schedulers'] in such a way that we can actually accept
1512 * buildbot/test/test_config.py: check it
1514 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1515 utility method to *all* the Schedulers
1516 (Periodic.listBuilderNames): same
1518 * docs/buildbot.texinfo (Interlocks): update chapter to match
1521 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1522 to make sure that c['sources'], c['schedulers'], and c['status']
1523 are all lists of the appropriate objects, and that the Schedulers
1524 all point to real Builders
1525 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1526 'listBuilderNames' utility method to support this
1527 * buildbot/scheduler.py: implement the utility method
1528 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1530 * docs/buildbot.texinfo: add some @cindex entries
1532 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1533 if it wasn't already set: most tla commands will fail unless one
1535 (Arch.createRepository): and disable bazaar's revision cache, since
1536 they cause test failures (the multiple repositories we create all
1537 interfere with each other through the cache)
1539 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1540 bring it properly up to date with twisted-2.0 test guidelines
1542 * buildbot/master.py (BuildMaster): remove references to old
1543 'interlock' module, this caused a bunch of post-merge test
1545 * buildbot/test/test_config.py: same
1546 * buildbot/process/base.py (Build): same
1548 * buildbot/test/test_slaves.py: stubs for new test case
1550 * buildbot/scheduler.py: add test-case-name tag
1551 * buildbot/test/test_buildreq.py: same
1553 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1554 unnecessary init code
1555 (Bot.remote_setBuilderList): match it
1557 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1559 * buildbot/changes/mail.py (parseSyncmail): update comment
1561 * buildbot/test/test_slavecommand.py: disable Shell tests on
1562 platforms that don't suport IReactorProcess
1564 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1565 all places where we open logfiles. It causes OS-X to open the file
1566 in some weird mode that that prevents us from mixing reads and
1567 writes to the same filehandle, which we depend upon to implement
1568 _generateChunks properly. This change doesn't appear to break
1569 win32, on which "b" and "t" are treated differently but a missing
1570 flag seems to be interpreted as "t".
1572 2005-07-18 Brian Warner <warner@lothar.com>
1574 * buildbot/slave/commands.py (ShellCommand): overhaul
1575 error-handling code, to try and make timeout/interrupt work
1576 properly, and make win32 happier
1577 * buildbot/test/test_slavecommand.py: clean up, stop using
1578 reactor.iterate, add tests for timeout and interrupt
1579 * buildbot/test/sleep.py: utility for a new timeout test
1581 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1582 code from the local-usebranches branch
1584 2005-07-17 Brian Warner <warner@lothar.com>
1586 * buildbot/process/process_twisted.py
1587 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1588 minutes, to match the other twisted BuildFactories, and don't
1589 excuse failures in c/qt/win32 reactors any more.
1591 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1592 'freebsd' builders, since the buildslaves have been unavailable
1595 2005-07-13 Brian Warner <warner@lothar.com>
1597 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1598 build-on-branch feature
1600 * buildbot/process/step.py (Darcs.__init__): add base_url and
1601 default_branch arguments, just like SVN
1602 (Arch.__init__): note that the version= argument is really the
1605 * buildbot/slave/commands.py (SourceBase): keep track of the
1606 repository+branch that was used for the last checkout in
1607 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1608 match, we clobber the directory and perform a fresh checkout
1609 rather than trying to do an in-place update. This should protect
1610 us against trying to get to branch B by doing an update in a tree
1611 obtained from branch A.
1612 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1613 (SVN.setup): same, just the svnurl
1614 (Darcs.setup): same, just the repourl
1615 (Arch.setup): same, arch coordinates (url), version, and
1616 buildconfig. Also pull the buildconfig from the args dictionary,
1617 which we weren't doing before, so the build-config was effectively
1619 (Arch.sourcedirIsUpdateable): don't try to update when we're
1620 moving to a specific revision: arch can't go backwards, so it is
1621 safer to just clobber the tree and checkout a new one at the
1623 (Bazaar.setup): same sourcedata as Arch
1625 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1626 use maybeWait, to work with twisted-1.3.0 and twcompat
1627 (Dependencies.testRun_Pass): same
1629 * buildbot/test/test_vc.py: rearrange, cleanup
1631 * buildbot/twcompat.py: add defer.waitForDeferred and
1632 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1633 can work under twisted-1.3.0 .
1635 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1636 now created at setUp time. This increases the runtime of the test
1637 suite considerably (from 91 seconds to 151), but it removes the
1638 need for an offline tarball, which should solve a problem I've
1639 seen where the test host has a different version of svn than the
1640 tarball build host. The new code also validates that mode=update
1641 really picks up recent commits. This approach will also make it
1642 easier to test out branches, because the code which creates the VC
1643 branches is next to the code which uses them. It will also make it
1644 possible to test some change-notification hooks, by actually
1645 performing a VC commit and watching to see the ChangeSource get
1648 2005-07-12 Brian Warner <warner@lothar.com>
1650 * docs/buildbot.texinfo (SVN): add branches example
1651 * docs/Makefile (buildbot.ps): add target for postscript manual
1653 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1654 * buildbot/test/test_locks.py: same
1656 * buildbot/process/step.py (Darcs): comment about default branches
1658 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1659 c['interlocks'] in the config file, complain if it is present.
1660 Scan all locks in c['builders'] to make sure the Locks they use
1662 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1663 add some tests to check for non-uniquely-named Locks
1664 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1665 since the unique-Lock validation code requires it now
1667 * buildbot/locks.py: fix test-case-name
1669 * buildbot/interlock.py: remove old file
1671 2005-07-11 Brian Warner <warner@lothar.com>
1673 * buildbot/test/test_interlock.py: rename to..
1674 * buildbot/test/test_locks.py: .. something shorter
1676 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1677 versions (after 2.0.1) changed internet.TCPClient to shut down the
1678 connection in stopService. Change the code to handle this
1681 * buildbot/process/base.py (Build): handle whole-Build locks
1682 * buildbot/process/builder.py (Builder.compareToSetup): same
1683 * buildbot/test/test_interlock.py: make tests work
1685 * buildbot/process/step.py (BuildStep.startStep): complain if a
1686 Step tries to claim a lock that's owned by its own Build
1687 (BuildStep.releaseLocks): typo
1689 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1690 file reloads don't replace unchanged Builders
1692 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1693 rewrite to cover new Locks instead of old c['interlocks']
1694 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1698 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1699 start the master and connect the buildslave
1701 * buildbot/process/step.py (FailingDummy.done): finish with a
1702 FAILURE status rather than raising an exception
1704 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1705 stringify a BuildRequest.reason that is None
1707 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1709 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1710 allow scheduler.Dependent to work
1711 * buildbot/buildset.py (BuildSet): set .reason and .results
1713 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1714 slaves, to make the test stop hanging. It still fails, of course,
1715 because I haven't even started to implement Locks.
1717 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1719 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1720 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1721 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1722 (Dependent): new class for downstream build dependencies
1723 * buildbot/test/test_dependencies.py: tests (still failing)
1725 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1727 2005-07-07 Brian Warner <warner@lothar.com>
1729 * buildbot/test/runutils.py (RunMixin): factored this class out..
1730 * buildbot/test/test_run.py: .. from here
1731 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1732 added new buildbot.locks tests (which all hang right now)
1733 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1734 * buildbot/process/step.py: claim/release per-BuildStep locks
1736 * docs/Makefile: add 'buildbot.html' target
1738 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1739 interpreted as "HEAD", so that all VC steps can accept branch=None
1740 and have it mean the "default branch".
1742 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1744 2005-07-07 Brian Warner <warner@lothar.com>
1746 * docs/examples/twisted_master.cfg: update to match current usage
1748 * docs/buildbot.texinfo (System Architecture): comment out the
1749 image, it doesn't exist yet and just screws up the HTML manual.
1751 2005-07-05 Brian Warner <warner@lothar.com>
1753 * debian/.cvsignore: oops, missed one. Removing leftover file.
1755 2005-06-17 Brian Warner <warner@lothar.com>
1757 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1758 changed its output in 1.2.0, don't mistakenly think that the
1759 subversion we find isn't capable of supporting our tests.
1761 * debian/*: remove the debian/ directory and its contents, to make
1762 life easier for the proper Debian maintainer
1764 * Makefile (release): same
1766 2005-06-07 Brian Warner <warner@lothar.com>
1768 * everything: create a distinct SourceStamp class to replace the
1769 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1770 Changed the signature of Source.startVC to include the revision
1771 information (instead of passing it through self.args). Implement
1772 branches for SVN (now only Darcs/Git is missing support). Add more
1775 2005-06-06 Brian Warner <warner@lothar.com>
1777 * everything: rearrange build scheduling. Create a new Scheduler
1778 object (configured in c['schedulers'], which submit BuildSets to a
1779 set of Builders. Builders can now use multiple slaves. Builds can
1780 be run on alternate branches, either requested manually or driven
1781 by changes. This changed some of the Status classes. Interlocks
1782 are out of service until they've been properly split into Locks
1783 and Dependencies. treeStableTimer, isFileImportant, and
1784 periodicBuild have all been moved from the Builder to the
1786 (BuilderStatus.currentBigState): removed the 'waiting' and
1787 'interlocked' states, removed the 'ETA' argument.
1789 2005-05-24 Brian Warner <warner@lothar.com>
1791 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1792 erroneously abandons the connection (in clientConnectionFailed)
1793 for non-UserErrors, which means that if we lose the connection due
1794 to a network problem or a timeout, we'll never try to reconnect.
1795 Fix this by not upcalling to the buggy parent method. Note:
1796 twisted-2.0 fixes this, but the function only has 3 lines so it
1797 makes more sense to copy it than to try and detect the buggyness
1798 of the parent class. Fixes SF#1207588.
1800 * buildbot/changes/changes.py (Change.branch): doh! Add a
1801 class-level attribute to accomodate old Change instances that were
1802 pickled before 0.6.5 (where .branch was added for new Changes).
1803 This fixes the exception that occurs when you try to look at an
1804 old Change (through asHTML).
1806 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1809 2005-05-23 Brian Warner <warner@lothar.com>
1811 * buildbot/__init__.py (version): release 0.6.6
1813 2005-05-23 Brian Warner <warner@lothar.com>
1815 * NEWS: update for 0.6.6 release
1816 * debian/changelog: same
1818 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1819 before starting: this was done by twistd back when we spawned it,
1820 now that we're importing the pieces and running them in the
1821 current process, we have to do it ourselves. This allows
1822 master.cfg to import files from the same directory without
1823 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1824 Stichele for the catch.
1825 (Options.opt_version): Add a --version command (actually, just make
1826 the existing --version command emit Buildbot's version too)
1828 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1829 fix to make this behave like other LogFiles, this time to handle
1830 existing LogFiles on disk. (add the missing .upgrade method)
1831 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1833 2005-05-21 Brian Warner <warner@lothar.com>
1835 * buildbot/test/test_runner.py (Create.testMaster): match the
1836 rawstring change in runner.py:masterTAC
1838 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1839 TwistedWords is installed
1840 * buildbot/test/test_status.py: same, with TwistedMail
1842 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1843 some old, deprecated, and removed config keys). This should enable
1844 you to use the base buildbot functionality with Twisted-2.0.0 when
1845 you don't also have TwistedWeb and TwistedWords installed
1847 2005-05-20 Brian Warner <warner@lothar.com>
1849 * buildbot/scripts/runner.py (run): call sendchange(), not
1850 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1851 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1852 (stop): don't wait for process to die when sending SIGHUP
1853 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1854 directory name gets interpreted, which you don't want
1857 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1860 2005-05-18 Brian Warner <warner@lothar.com>
1862 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1864 2005-05-18 Brian Warner <warner@lothar.com>
1866 * README: update for 0.6.5
1867 * debian/changelog: same
1869 * buildbot/changes/changes.py: rename tag= to branch=, since
1870 that's how we're using it, and my design for the upcoming "build a
1871 specific branch" feature wants it. also, tag= was too CVS-centric
1872 * buildbot/changes/mail.py (parseSyncmail): same
1873 * buildbot/process/base.py (Build.isBranchImportant): same
1874 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1875 * docs/buildbot.texinfo (Attributes of Changes): same
1877 * NEWS: update tag=, update for upcoming release
1879 2005-05-17 Brian Warner <warner@lothar.com>
1881 * buildbot/scripts/runner.py (stop): actually poll once per
1882 second, instead of re-killing the poor daemon once per second.
1883 Sleep briefly (0.1s) before the first poll, since there's a good
1884 chance we can avoid waiting the full second if the daemon shuts
1885 down quickly. Also remove the sys.exit() at the end.
1886 (start): remove the unneighborly sys.exit()
1888 * Makefile: improve permission-setting to not kick Arch so badly
1890 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1891 default --keepalive=600, since it doesn't hurt very much, and it's
1892 a hassle to discover that you need it.
1893 * buildbot/test/test_runner.py (Create.testSlave): test it
1895 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1896 IRC bot about EXCEPTION
1898 * buildbot/status/client.py (PBListener): upcall more correctly
1900 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1901 an exception mark the overall build with EXCEPTION, not SUCCESS
1903 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1905 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1906 * Makefile: update some release-related stuff
1908 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1909 gets called when there isn't actually an active process, just end
1910 the Command instead of blowing up. I don't know how it gets into
1911 this state, but the twisted win32 buildslave will sometimes hang,
1912 and when it shakes its head and comes back, it thinks it's still
1913 running a Command. The next build causes this command to be
1914 interrupted, but the lack of self.process.pid breaks the interrupt
1917 * NEWS: document changes since the last release
1919 * buildbot/scripts/runner.py (start): change 'buildbot start' to
1920 look for Makefile.buildbot instead of a bare Makefile . The
1921 'buildbot start' does not install this file, so you have to
1922 manually copy it if you want to customize startup behavior.
1923 (createMaster): change 'buildbot master' command to create
1924 Makefile.sample instead of Makefile, to create master.cfg.sample
1925 instead of master.cfg (requiring you to copy it before the
1926 buildmaster can be started). Both sample files are kept up to
1927 date, i.e. they are overwritten if they have been changed. The
1928 'buildbot.tac' file is *not* overwritten, but if the new contents
1929 don't match the old, a 'buildbot.tac.new' file is created and the
1930 user is warned. This seems to be a much more sane way to handle
1931 startup files. Also, don't sys.exit(0) when done, so we can run
1932 unit tests against it.
1933 (createSlave): same. Don't overwrite the sample info/ files.
1934 * buildbot/scripts/sample.mk: remove. the contents were pulled
1935 into runner.py, since they need to match the behavior of start()
1939 * docs/buildbot.texinfo (Launching the daemons): document it
1940 * buildbot/test/test_runner.py (Create): test it
1942 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1943 version that can handle string-in-string tests, because otherwise
1944 python-2.2 fails the tests. It'd be tremendous if Trial's test
1945 took two strings under 2.2 too.
1947 * everything: fixed all deprecation warnings when running against
1948 Twisted-2.0 . (at least all the ones in buildbot code, there are a
1949 few that come from Twisted itself). This involved putting most of
1950 the Twisted-version specific code in the new buildbot.twcompat
1951 module, and creating some abstract base classes in
1952 buildbot.changes.base and buildbot.status.base (which might be
1953 useful anyway). __implements__ is a nuisance and requires an ugly
1954 'if' clause everywhere.
1956 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1957 delay before finishing the test: it seems that smtp.sendmail
1958 doesn't hang up on the server, so we must wait a moment so it can
1959 hang up on us. This removes the trial warning about an unclean
1962 2005-05-16 Brian Warner <warner@lothar.com>
1964 * buildbot/process/step.py (Source): add 'retry' argument. It is a
1965 tuple of (delay, repeats).
1966 * buildbot/test/test_vc.py (Retry): test it
1967 * docs/buildbot.texinfo (Source Checkout): document it
1968 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1969 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1970 doVCFull() are handled by re-trying the checkout (after a delay)
1971 some number of times.
1972 (ShellCommand._startCommand): make header lines easier to read
1974 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1976 (WebTest.test_logfile): make sure master gets shut down, silences
1977 some "unclean reactor" test errors
1979 * buildbot/test/test_changes.py (Sender.tearDown): spin the
1980 reactor once after shutdown, something in certain versions of
1981 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1982 fails, svn-trunk is ok.
1984 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
1985 second win32 error message
1987 * buildbot/test/test_run.py (Status.testSlave): be smarter about
1988 validating the ETA, so the tests don't fail on slow systems
1990 2005-05-15 Brian Warner <warner@lothar.com>
1992 * buildbot/status/builder.py (HTMLLogFile): make this behave like
1993 the new LogFile class, so upgrading works properly
1994 (LogFileProducer.resumeProducing): survive resumeProducing after
1995 we've exhausted the chunkGenerator
1997 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
1999 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2000 (Log.testUpgrade): same
2002 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2003 Builds and logs with a cron job.
2005 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2006 of the old non-offline LogFile, added code to upgrade these to
2007 new-style contents-live-on-disk instances at load time (in a way
2008 that doesn't invalidate the old Build pickles, so upgrading to
2009 0.6.5 is not a one-way operation). Got rid of everything related
2011 (LogFile.__init__): create LogFiles with the parent step status,
2012 the log's name, and a builder-relative filename where it can keep
2013 the contents on disk.
2014 (LogFile.hasContents): new method, clients are advised to call it
2015 before getText or getChunks and friends. If it returns False, the
2016 log's contents have been deleted and getText() will raise an
2018 (LogFile.getChunks): made it a generator
2019 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2020 Consumer (except one that takes chunks instead of strings). This
2021 enables streaming of very large logfiles without storing the whole
2023 (BuildStatus.generateLogfileName): create names like
2024 12-log-compile-output, with a _0 suffix if required to be unique
2025 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2026 or earlier) logfiles into new-style ones
2027 (BuilderStatus): remove everything related to 'stub' builds. There
2028 is now only one build cache, and we don't strip logs from old
2030 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2031 since we no longer fight to keep it in the cache
2033 * buildbot/status/html.py (TextLog.render_GET): use a
2034 ChunkConsumer to stream the log entries efficiently.
2035 (ChunkConsumer): wrapper which consumes chunks and writes
2038 * buildbot/test/test_twisted.py (Parse.testParse): use a
2039 LogFile-like object instead of a real one
2041 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2042 (Log.testMerge3): validate more merge behavior
2043 (Log.testChunks): validate LogFile.getChunks
2044 (Log.testUpgrade): validate old-style LogFile upgrading
2045 (Log.testSubscribe): validate LogFile.subscribe
2046 (Log.testConsumer): validate LogFile.subscribeConsumer
2048 * buildbot/interfaces.py (IStatusLogStub): remove
2049 (IStatusLog.subscribeConsumer): new method
2050 (IStatusLog.hasContents): new method
2051 (IStatusLogConsumer): describes things passed to subscribeConsumer
2053 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2054 the log contents if it does not have any contents.
2055 (StatusResourceBuildStep.body): same
2056 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2058 2005-05-14 Brian Warner <warner@lothar.com>
2060 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2061 timeouts to try and make the windows metabuildslave not hang
2063 2005-05-13 Mike Taylor <bear@code-bear.com>
2065 * buildbot/slave/commands.py (rmdirRecursive): added a check
2066 to ensure the path passed into rmdirRecursive actually exists.
2067 On win32 a non-existant path would generate an exception.
2069 2005-05-13 Brian Warner <warner@lothar.com>
2071 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2072 shutil.rmtree which behaves correctly on windows in the face of
2073 files that you have to chmod before deleting. Thanks to Bear at
2074 the OSAF for the routine.
2075 (SourceBase.doClobber): use rmdirRecursive
2077 2005-05-12 Brian Warner <warner@lothar.com>
2079 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2080 method generate chunks instead of returning a big list. This
2081 allows the same method to be used for both old LogFile and new
2083 (OfflineLogFile.getText): use the generator
2084 (OfflineLogFile.subscribe): same
2085 * buildbot/status/html.py (TextLog.resumeProducing): same
2086 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2088 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2089 point out that OfflineLogFile does not currently work with
2090 html.Waterfall . Fixing this is high-priority.
2092 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2093 apparently windows defaults to using stdout
2095 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2096 better message on failure so I can figure out the win32 problem
2098 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2099 log messages to include more useful copies of the command being
2100 run, the argv array, and the child command's environment.
2101 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2103 2005-05-11 Brian Warner <warner@lothar.com>
2105 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2107 * Makefile: update the deb-snapshot version
2109 * docs/buildbot.texinfo: move all .xhtml docs into a new
2110 .texinfo-format document, adding a lot of material in the process.
2111 This is starting to look like a real user's manual. Removed all
2112 the Lore-related files: *.xhtml, *.css, template.tpl .
2113 * docs/Makefile: simple makefile to run 'makeinfo'
2114 * buildbot/scripts/sample.cfg: rearrange slightly
2115 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2117 2005-05-10 Brian Warner <warner@lothar.com>
2119 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2120 different name for the internal twistw module, handle it.
2122 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2123 * setup.py: .. and stop trying to install it
2125 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2126 'git'), the new linux kernel VC system (http://kernel.org/git/).
2127 Thanks to Brandon Philips for the patch.
2128 * buildbot/slave/commands.py (Git): same
2130 2005-05-06 Brian Warner <warner@lothar.com>
2132 * buildbot/status/builder.py (OfflineLogFile): replace the default
2133 LogFile with a form that appends its new contents to a disk file
2134 as they arrive. The complete log data is never kept in RAM. This
2135 is the first step towards handling very large (100MB+) logfiles
2136 without choking quite so badly. (The other half is
2137 producer/consumer on the HTML pages).
2138 (BuildStepStatus.addLog): use OfflineLogFile by default
2139 (BuildStatus.getLogfileName): helper code to give the
2140 OfflineLogFile a filename to work with
2142 * buildbot/test/test_status.py (Results.testAddResults): update
2143 tests to handle new asserts
2144 * buildbot/test/test_vc.py (Patch.doPatch): same
2145 * buildbot/test/test_steps.py (BuildStep.setUp): same
2147 2005-05-05 Brian Warner <warner@lothar.com>
2149 * buildbot/scripts/runner.py (start): if there is no Makefile,
2150 launch the app by importing twistd's internals and calling run(),
2151 rather than spawning a new twistd process. This stands a much
2152 better chance of working under windows.
2153 (stop): kill the process with os.kill instead of spawning
2154 /bin/kill, again to reduce the number of external programs which
2155 windows might not have in the PATH. Also wait up to 5 seconds for
2156 the process to go away, allowing things like 'buildbot stop;
2157 buildbot start' to be reliable in the face of slow shutdowns.
2159 * buildbot/master.py (Dispatcher.__getstate__): remove old
2160 .tap-related methods
2161 (BuildMaster.__getstate__): same
2163 * buildbot/slave/bot.py (makeService): same
2164 (Options.longdesc): same
2165 * buildbot/scripts/runner.py: copy over some old mktap option text
2167 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2168 'buildbot master' now creates a buildbot.tac file, so there is no
2169 longer a create-instance/save/reload sequence. mktap is dead, long
2171 * buildbot/scripts/sample.mk: use twistd -y, not -f
2172 * buildbot/test/test_config.py: remove mktap-based test
2173 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2174 * README: don't reference mktap
2176 * docs/source.xhtml: document some of the attributes that Changes
2179 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2181 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2182 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2183 * buildbot/changes/changes.py (Change)
2184 * buildbot/changes/mail.py (parseSyncmail)
2185 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2187 * buildbot/process/base.py (Build.isTagImportant)
2191 2005-05-04 Brian Warner <warner@lothar.com>
2193 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2194 connection after sending the change, so that unit tests don't
2195 complain about sockets being left around
2197 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2198 exception in phase=0 rendering
2199 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2201 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2203 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2204 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2205 and configuring builders with tuples.
2206 * buildbot/test/test_config.py: stop testing compatibility with
2207 deprecated config keys
2208 * buildbot/test/test_run.py: same
2210 2005-05-03 Brian Warner <warner@lothar.com>
2212 * contrib/arch_buildbot.py: survive if there are no logfiles
2213 (username): just use a string, os.getlogin isn't reliable
2215 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2216 so 'buildbot sendchange' actually works. The earlier test only
2217 covered the internal (non-reactor-running) form.
2219 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2220 script to notify the buildmaster about changes
2222 * buildbot/scripts/runner.py (sendchange): new command to send a
2223 change to a buildbot.changes.pb.PBChangeSource receiver.
2224 * buildbot/test/test_changes.py (Sender): test it
2226 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2227 after any reading of the config file, not just when we do it in
2228 startService. This makes some tests a bit cleaner.
2230 * buildbot/changes/pb.py: add some log messages
2232 * buildbot/process/base.py (Build.startBuild): fix a bug that
2233 caused an exception when the build terminated in the very first
2235 (Build.stepDone): let steps return a status of EXCEPTION. This
2236 terminates the build right away, and sets the build's overall
2237 status to EXCEPTION too.
2238 * buildbot/process/step.py (BuildStep.failed): return a status of
2239 EXCEPTION when that is what has happened.
2241 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2242 implement this, allowing Arch-based projects to get precise
2243 checkouts instead of always using the latest code
2244 (Bazaar): create variant of Arch to let folks use baz instead of
2245 tla. Requires a new buildslave too.
2246 * buildbot/slave/commands.py (Arch): add 'revision' argument
2247 (Bazaar): create variant of Arch that uses baz instead of tla.
2248 Remove the code that extracts the archive name from the
2249 register-archive output, since baz doesn't provide it, and require
2250 the user provide both the archive name and its location.
2251 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2253 2005-05-02 Brian Warner <warner@lothar.com>
2255 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2256 thanks to Nick Trout.
2258 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2259 deals better with source Makefile coming from a read-only CVS
2260 checkout. Thanks to Nick Trout for the catch.
2262 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2265 2005-04-28 Brian Warner <warner@lothar.com>
2267 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2269 * debian/changelog: update for 0.6.4
2271 2005-04-28 Brian Warner <warner@lothar.com>
2273 * README.w32: add a checklist of steps for getting buildbot
2275 * MANIFEST.in: include it in the tarball
2279 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2280 broken .tap files from 0.6.3 by getting rid of .services,
2281 .namedServices, and .change_svc at load time.
2283 2005-04-27 Brian Warner <warner@lothar.com>
2285 * NEWS: update in preparation for new release
2287 * buildbot/test/test_config.py (Save.testSave): don't pull in
2288 twisted.scripts.twistd, we don't need it and it isn't for windows
2291 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2292 accomodate win32 which can't do atomic-rename
2294 2005-04-27 Brian Warner <warner@lothar.com>
2296 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2297 timeouts to help the slow metabuildbot not flunk them so much
2298 (Disconnect.testBuild3): same
2299 (Disconnect.testBuild4): same
2300 (Disconnect.testInterrupt): same
2302 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2303 setup, it was completely broken for new buildmasters (those which
2304 did not have a 'change.pck' already saved. Thanks to Paul Warren
2305 for catching this (embarrassing!) bug.
2306 (Dispatcher.__getstate__): don't save our registered avatar
2307 factories, since they'll be re-populated when the config file is
2309 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2310 tests (since the real mktap-generated BuildMaster doesn't save
2312 (BuildMaster.__getstate__): don't save any service children,
2313 they'll all be re-populated when the config file is re-read.
2314 * buildbot/test/test_config.py (Save.testSave): test for this
2316 2005-04-26 Brian Warner <warner@lothar.com>
2318 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2319 rendered with Blender.. looks a bit nicer.
2320 * buildbot/docs/images/icon.blend: add the Blender file for it
2322 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2323 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2324 running under windows. This appears to be the best way to allow
2325 BuildSteps to do something normal like 'trial -v buildbot.test' or
2326 'make foo' and still expect it to work. The idea is to make the
2327 BuildSteps look as much like what a developer would type when
2328 compiling or testing the tree by hand. This approach probably has
2329 problems when there are spaces in the arguments, so if you've got
2330 windows buildslaves, you'll need to pay close attention to your
2333 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2334 timezone to the timestamp column.
2335 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2337 * buildbot/scripts/runner.py (loadOptions): do something sane for
2338 windows, I think. We use %APPDATA%/buildbot instead of
2339 ~/.buildbot, but we still search everywhere from the current
2340 directory up to the root for a .buildbot/ subdir. The "is it under
2341 $HOME" security test was replaced with "is it owned by the current
2342 user", which is only performed under posix.
2343 * buildbot/test/test_runner.py (Options.testFindOptions): update
2344 tests to match. The "is it owned by the current user" check is
2345 untested. The test has been re-enabled for windows.
2347 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2348 any "\n" in the expected output with the platform-specific line
2349 separator. Make this separator "\r\n" on PTYs under unix, they
2350 seem to do that and I don't know why
2352 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2353 windows for now, I don't know what ~/.buildbot/ should mean there.
2355 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2356 win32 compatibility, don't use "/tmp"
2357 (Basedir.testChangeBuilddir): remove more unixisms
2359 2005-04-26 Brian Warner <warner@lothar.com>
2361 * buildbot/test/test_control.py (Force.rmtree): python2.2
2362 compatibility, apparently its shutil.rmtree ignore_errors=
2363 argument is ignored.
2364 * buildbot/test/test_run.py (Run.rmtree): same
2365 (RunMixin.setUp): same
2367 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2370 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2371 'substring in string' operator, must use string.find(substr)!=-1
2372 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2373 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2375 * buildbot/scripts/runner.py (loadOptions): add code to search for
2376 ~/.buildbot/, a directory with things like 'options', containing
2377 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2378 the current directory, your $HOME directory, or anywhere
2379 inbetween, as long as you're somewhere inside your home directory.
2380 (debugclient): look in ~/.buildbot/options for master and passwd
2381 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2382 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2384 * buildbot/status/client.py (makeRemote): new approach to making
2385 IRemote(None) be None, which works under Twisted-2.0
2386 * buildbot/test/test_status.py (Client.testAdaptation): test it
2388 * buildbot/status/builder.py (Status.builderAdded): when loading a
2389 pickled BuilderStatus in from disk, set its name after loading.
2390 The config file might have changed its name (but not its
2391 directory) while it wasn't looking.
2393 * buildbot/process/builder.py (Builder.attached): always return a
2394 Deferred, even if the builder was already attached
2395 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2397 2005-04-25 Brian Warner <warner@lothar.com>
2399 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2400 category-related exception when announcing a build has finished
2402 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2403 reference no-longer-existent changemaster.sources
2404 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2406 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2409 2005-04-25 Brian Warner <warner@lothar.com>
2411 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2413 * debian/changelog: update for 0.6.3
2415 2005-04-25 Brian Warner <warner@lothar.com>
2417 * MANIFEST.in: make sure debug.glade is in the tarball
2419 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2421 * NEWS: update for the imminent 0.6.3 release
2423 * buildbot/status/html.py (HtmlResource.content): make the
2424 stylesheet <link> always point at "buildbot.css".
2425 (StatusResource.getChild): map "buildbot.css" to a static.File
2426 containing whatever css= argument was provided to Waterfall()
2427 (Waterfall): provide the "classic" css as the default.
2428 * docs/waterfall.classic.css: move default CSS from here ..
2429 * buildbot/status/classic.css: .. to here
2431 * MANIFEST.in: make sure classic.css is included in the tarball
2432 * setup.py: and that it is installed too, under buildbot/status/
2434 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2435 the module level, because buildbot.tap files from 0.6.2 don't have
2436 it in their attribute dictionary.
2438 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2439 really exists at startup, might save some confusion somewhere.
2441 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2443 * docs/waterfall.classic.css:
2444 add a stylesheet that's almost the same as the "classic"
2447 * buildbot/status/builder.py:
2448 add EXCEPTION as a result - this is a problem for the bot
2449 maintainer, not a build problem for the changers
2450 * buildbot/process/step.py:
2451 use EXCEPTION instead of FAILURE for exceptions
2452 * buildbot/status/html.py:
2453 add build_get_class to get a class out of a build/buildstep
2454 finish naming the classes
2455 split out sourceNames to changeNames and builderNames so we
2456 can style them separately
2457 * docs/config.xhtml:
2458 finish documenting classes as they are right now
2460 * buildbot/status/html.py:
2461 name the classes as we agreed on IRC
2462 * docs/config.xhtml:
2465 * buildbot/status/html.py:
2466 same for cssclass->class_
2468 * buildbot/status/html.py:
2469 as decided on IRC, use class_ for the "class" attribute to not
2470 conflict with the class keyword, and clean up the messy **{} stuff.
2472 * buildbot/status/mail.py:
2473 put back "builders" argument, and fix docstring, because the
2474 code *ignores* builders listed in this argument
2476 * buildbot/process/builder.py:
2477 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2479 * docs/config.xhtml:
2480 describe the category argument for builders
2482 * buildbot/status/builder.py:
2483 Fix a silly bug due to merging
2485 * buildbot/process/builder.py:
2486 remove category from the process Builder ...
2487 * buildbot/status/builder.py:
2488 ... and add it to BuilderStatus instead.
2489 Set category on unpickled builder statuses, they might not have it.
2490 * buildbot/master.py:
2491 include category when doing builderAdded
2492 * buildbot/status/mail.py:
2493 return None instead of self for builders we are not interested in.
2494 * buildbot/test/test_run.py:
2495 fix a bug due to only doing deferredResult on "dummy" waiting
2496 * buildbot/test/test_status.py:
2497 add checks for the Mail IStatusReceiver returning None or self
2499 * buildbot/status/html.py:
2500 fix testsuite by prefixing page title with BuildBot
2502 * buildbot/status/builder.py:
2503 have .category in builder status ...
2504 * buildbot/process/builder.py:
2505 ... and set it from Builder
2506 * buildbot/status/html.py:
2507 make .css a class variable
2508 * buildbot/test/test_status.py:
2509 write more tests to cover our categories stuff ...
2510 * buildbot/status/mail.py:
2511 ... and fix the bug that this uncovered
2513 * buildbot/changes/mail.py:
2514 * buildbot/changes/pb.py:
2515 * buildbot/master.py:
2516 * buildbot/process/base.py:
2517 * buildbot/process/factory.py:
2518 * buildbot/process/interlock.py:
2519 * buildbot/process/step.py:
2520 * buildbot/process/step_twisted.py:
2521 * buildbot/slave/commands.py:
2522 * buildbot/status/builder.py:
2523 * buildbot/status/client.py:
2524 * buildbot/status/html.py:
2525 * buildbot/status/mail.py:
2526 * buildbot/status/progress.py:
2527 * buildbot/test/test_changes.py:
2528 * buildbot/test/test_config.py:
2529 * buildbot/test/test_control.py:
2530 * buildbot/test/test_interlock.py:
2531 * buildbot/test/test_maildir.py:
2532 * buildbot/test/test_mailparse.py:
2533 * buildbot/test/test_run.py:
2534 * buildbot/test/test_slavecommand.py:
2535 * buildbot/test/test_status.py:
2536 * buildbot/test/test_steps.py:
2537 * buildbot/test/test_twisted.py:
2538 * buildbot/test/test_util.py:
2539 * buildbot/test/test_vc.py:
2540 * buildbot/test/test_web.py:
2542 add test-case-name at the top of a whole set of files
2544 * buildbot/status/builder.py:
2545 keep order of addition when getting builder names
2546 * buildbot/status/words.py:
2547 * buildbot/test/test_run.py:
2548 add test for getBuilderNames
2550 * buildbot/process/base.py:
2551 * buildbot/process/step.py:
2552 * buildbot/status/builder.py:
2553 * buildbot/status/html.py:
2554 make buildbot css-able
2555 replace the color code for purple with purple, don't understand
2556 why it wasn't purple to start with
2558 * buildbot/status/words.py:
2559 ok, so it doesn't look like BuilderStatus.remote is still valid.
2560 Use what waterfall uses instead.
2562 * buildbot/interfaces.py:
2563 * buildbot/status/builder.py:
2564 * buildbot/status/html.py:
2565 * buildbot/status/mail.py:
2566 * buildbot/status/words.py:
2567 * buildbot/test/test_run.py:
2568 use categories everywhere and make it be a list. More sensible
2569 for the future. Also make words actually respect this in
2572 * buildbot/interfaces.py:
2573 add category argument to getBuilderNames
2574 * buildbot/process/builder.py:
2575 * buildbot/status/builder.py:
2576 * buildbot/status/html.py:
2577 * buildbot/status/mail.py:
2578 * buildbot/status/words.py:
2579 * buildbot/test/test_run.py:
2580 move from specifying builders by name to specifying the category
2582 * buildbot/status/html.py:
2583 * buildbot/status/words.py:
2584 add "builders=" to __init__ of status clients so they can
2585 limit themselves to the given list of builders to report on
2587 * buildbot/status/html.py: set the title to the product name
2589 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2591 * buildbot/interfaces.py:
2592 * buildbot/status/builder.py:
2593 more documentation. Hm, not sure if ChangeLog entries make sense
2596 2005-04-23 Brian Warner <warner@lothar.com>
2598 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2600 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2602 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2603 the sub-commands that log buildmaster status to stdout and to a
2604 GUI window, respectively.
2606 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2607 functionality is working again, but all the step-status and ETA
2608 stuff is missing. Commented out a lot of code pending more
2611 * buildbot/status/client.py: make sure that IRemote(None) is None
2613 * buildbot/changes/changes.py: import defer, oops
2614 (ChangeMaster): remove the .sources list, rely upon the fact that
2615 MultiServices can be treated as sequences of their children. This
2616 cleans up the add/remove ChangeSource routines a lot, as we keep
2617 exactly one list of the current sources instead of three.
2619 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2620 up an empty ChangeMaster at init time.
2621 (BuildMaster.loadChanges): if there are changes to be had from
2622 disk, replace self.change_svc with the new ones. If not, keep
2623 using the empty ChangeMaster set up in __init__.
2624 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2625 instead of a separate list, makes the code a bit cleaner.
2626 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2627 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2628 Extend the test to make sure we can get rid of the sources when
2631 2005-04-22 Brian Warner <warner@lothar.com>
2633 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2634 and info/host files when making the slave directory
2636 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2637 whendone= argument, just return the Deferred and let the caller do
2638 what they want with it.
2639 (Disconnect.testBuild1): wait for shutdownSlave
2640 (Basedir.testChangeBuilddir): new test to make sure changes to the
2641 builddir actually get propagated to the slave
2643 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2644 explicit method, rather than passing the builddir in __init__ .
2645 Make sure to update self.basedir too, this was broken before.
2646 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2647 builders and for ones that have just had their builddir changed.
2648 (BotFactory): add a class-level .perspective attribute, so
2649 BuildSlave.waitUntilDisconnected won't get upset when the
2650 connection hasn't yet been established
2651 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2652 tests can reach through it to inspect the SlaveBuilders
2654 * buildbot/process/base.py (Build.buildException): explain the
2655 log.err with a log.msg
2656 * buildbot/process/builder.py (Builder.startBuild): same
2657 (Builder._startBuildFailed): improve error message
2659 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2660 occurred because we lost the brand-new connection, retry instead
2661 of giving up. If not, it's probably an authorization failure, and
2662 it makes sense to stop trying. Make sure we log.msg the reason
2663 that we're log.err'ing the failure, otherwise test failures are
2664 really hard to figure out.
2666 * buildbot/master.py: change loadConfig() to return a Deferred
2667 that doesn't fire until the change has been fully implemented.
2668 This means any connected slaves have been updated with the new
2669 builddir. This change makes it easier to test the code which
2670 actually implements this builddir-updating.
2671 (BotPerspective.addBuilder): return Deferred
2672 (BotPerspective.removeBuilder): same
2673 (BotPerspective.attached): same
2674 (BotPerspective._attached): same. finish with remote_print before
2675 starting the getSlaveInfo, instead of doing them in parallel
2676 (BotPerspective.list_done): same
2677 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2678 actually calling slave.disconnect()
2679 (BotMaster.addBuilder): same
2680 (BotMaster.removeBuilder): same
2681 (BuildMaster.loadConfig): same
2682 (BuildMaster.loadConfig_Slaves): same
2683 (BuildMaster.loadConfig_Sources): same
2684 (BuildMaster.loadConfig_Builders): same
2685 (BuildMaster.loadConfig_status): same
2687 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2688 a Deferred that fires when the source is finally removed
2690 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2691 the previous tree on win32, where we have to do it synchronously,
2692 make sure we return a Deferred anyway.
2693 (SourceBase.doCopy): same
2695 * buildbot/scripts/runner.py (statusgui): use the text client for
2696 now, while I rewrite the Gtk one
2697 * buildbot/clients/base.py: strip out old code, leaving just the
2698 basic print-message-on-event functionality. I also remove the
2699 ReconnectingPBClientFactory, but it does at least quit when it
2700 loses the connection instead of going silent
2702 2005-04-21 Brian Warner <warner@lothar.com>
2704 * Makefile: minor tweaks
2706 * NEWS: point out deprecation warnings, new features for
2709 * buildbot/master.py (BuildMaster.loadConfig): emit
2710 DeprecationWarnings for Builders defined with tuples. Rearrange
2711 code to facility removal of deprecated configuration keys in the
2714 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2715 'buildbot' command to put a little Makefile in the target that
2716 helps you re-create the buildbot.tap file, start or stop the
2717 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2718 all the files 0600, since they contain passwords.
2719 (start): if there is a Makefile, and /usr/bin/make exists, use
2720 'make start' in preference to a raw twistd command. This lets
2721 slave admins put things like PYTHONPATH variables in their
2722 Makefiles and have them still work when the slave is started with
2723 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2724 be nice to first try the 'make' command and only fall back to
2725 twistd if it fails. TODO: the Makefile's "start" command does not
2726 add the --reactor=win32 argument when running under windows.
2727 (Options.debugclient, Options.statusgui): add sub-commands to launch
2728 the debug client (formerly in contrib/debugclient.py) and the
2729 Gtk status application (currently broken)
2730 * buildbot/clients/debug.py: move from contrib/debugclient.py
2731 * buildbot/clients/debug.glade: same
2733 * buildbot/test/test_trial.py: remove it. This requires some
2734 functionality out of Twisted that isn't there yet, and until then
2735 having it around just confuses things.
2737 * buildbot/test/test_slavecommand.py (Shell): test both with and
2738 without PTYs, and make sure that command output is properly
2739 interleaved in the with-PTY case. I think the without-PTY test
2740 should pass on windows, where we never use PTYs anyway.
2742 2005-04-20 Brian Warner <warner@lothar.com>
2744 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2746 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2748 * NEWS: start creating entries for the next release
2750 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2752 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2753 (WebTest.test_webPathname): same
2754 (WebTest.test_webPathname_port): same
2755 (WebTest.test_waterfall): use the default favicon rather than
2756 rooting around the filesystem for it. Open the expected-icon file
2757 in binary mode, to make win32 tests happier (thanks to Nick Trout
2759 * buildbot/status/html.py (buildbot_icon): win32 portability
2761 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2762 win32-compatibility fixes from Nick Trout, the "file not found" message
2763 is different under windows
2764 (FakeSlaveBuilder.__init__): clean up setup a bit
2765 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2767 2005-04-19 Brian Warner <warner@lothar.com>
2769 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2770 skip-if-repositories-are-unavailable test to not kill the trial
2771 that comes with Twisted-1.3.0
2773 * setup.py: install buildbot.png icon file when installing code
2775 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2776 environment used by the command, at least on the child side.
2778 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2779 this method needs to be added and implemented because it gets
2780 called under heavy load. I don't quite understand the
2781 producer/consumer API enough to write it.
2782 (StatusResource.getChild): add a resource for /favicon.ico
2783 (Waterfall.__init__): add favicon= argument
2784 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2785 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2786 (WebTest.test_webPathname): same
2787 (WebTest.test_webPathname_port): same
2788 * docs/config.xhtml: mention favicon=
2789 * buildbot/buildbot.png: add a default icon, dorky as it is
2791 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2793 * buildbot/master.py:
2794 * buildbot/process/base.py:
2795 * buildbot/process/builder.py:
2796 * buildbot/process/interlock.py:
2797 * buildbot/status/builder.py:
2798 * buildbot/status/html.py:
2799 * buildbot/status/mail.py:
2800 * buildbot/status/words.py:
2801 new documentation while digging through the code
2803 2005-04-17 Brian Warner <warner@lothar.com>
2805 * general: try to fix file modes on all .py files: a+r, a-x,
2806 but let buildbot/clients/*.py be +x since they're tools
2808 * docs/epyrun (addMod): when an import fails, say why
2810 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2812 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2814 * buildbot/process/base.py:
2815 * buildbot/process/builder.py:
2816 * buildbot/status/builder.py:
2817 new documentation while digging through the code
2819 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2821 * buildbot/changes/changes.py:
2822 * buildbot/changes/p4poller.py:
2823 * buildbot/interfaces.py:
2824 * buildbot/process/base.py:
2825 * buildbot/process/builder.py:
2826 * buildbot/process/step.py:
2827 * buildbot/process/step_twisted.py:
2828 * buildbot/slave/bot.py:
2829 * buildbot/slave/commands.py:
2830 * buildbot/status/builder.py:
2831 fix all docstrings to make epydoc happy. In the process of fixing
2832 some, I also moved pieces of docs, and removed some deprecated
2835 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2837 * buildbot/process/builder.py:
2838 * buildbot/process/interlock.py:
2839 * buildbot/process/process_twisted.py:
2840 * buildbot/process/step.py:
2841 BuildProcess -> Build, as it looks like that's what happened
2842 * buildbot/process/base.py:
2843 * buildbot/process/factory.py:
2846 2005-04-17 Brian Warner <warner@lothar.com>
2848 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2849 update compile command to accomodate the Twisted split.. now
2850 instead of './setup.py build_ext -i', you do './setup.py all
2851 build_ext -i', to run build_ext over all sub-projects.
2852 (FullTwistedBuildFactory): same
2853 (TwistedReactorsBuildFactory): same
2855 * buildbot/status/html.py (TextLog.finished): null out self.req
2856 when we're done, otherwise the reference cycle of TextLog to .req
2857 to .notifications to a Deferred to TextLog.stop keeps them from
2858 being collected, and consumes a huge (610MB on pyramid at last
2859 check) amount of memory.
2861 2005-04-11 Brian Warner <warner@lothar.com>
2863 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2864 normalize the VC-repository location.. makes SVN happier with
2865 certain test environments.
2867 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2868 RemoteShellCommand gets its own .env dictionary, so that code in
2869 start() doesn't mutate the original. I think this should fix the
2870 step_twisted.Trial problem where multiple identical components
2871 kept getting added to PYTHONPATH= over and over again.
2873 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2874 adding epydoc-format docstrings to many classes. Thanks to Thomas
2875 Vander Stichele for the patches.
2876 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2877 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2878 * buildbot/slave/bot.py, commands.py, registry.py: same
2880 2005-04-05 Brian Warner <warner@lothar.com>
2882 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2883 preserve timestamps, helps incremental builds of large trees.
2884 Patch from Rene Rivera.
2886 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2887 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2890 2005-04-03 Brian Warner <warner@lothar.com>
2892 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2893 with one dict, apparently exec has some scoping bugs when used
2894 with both global/local dicts. Thanks to Nathaniel Smith for the
2897 2005-04-02 Brian Warner <warner@lothar.com>
2899 * buildbot/process/step_twisted.py (countFailedTests): the new
2900 trial in Twisted-2.0 emits a slightly different status line than
2901 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2902 mistakenly think the test count is unparseable.
2903 (Trial.start): note that for some reason each build causes another
2904 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2905 be fixed but I'm not sure quite where the problem is.
2907 2005-04-01 Brian Warner <warner@lothar.com>
2909 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2910 deferredResult to avoid hangs/warnings under twisted-2.0
2911 (RunMixin.tearDown): same
2912 (RunMixin.shutdownSlave): same
2913 (Disconnect.testIdle1): same
2914 (Disconnect.testBuild2): same: wait one second after the build
2915 finishes for test to really be done.. this should be cleaned up to
2916 avoid wasting that second. Builder.detach uses a callLater(0),
2917 either that should be done in-line (something else needed that
2918 behavior), or it should return a Deferred that fires when the
2919 builder is really offline.
2920 (Disconnect.testBuild3): same
2921 (Disconnect.testDisappear): same
2923 * buildbot/test/test_web.py: rearrange server-setup and teardown
2924 code to remove unclean-reactor warnings from twisted-2.0
2926 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2927 so the tests don't hang under twisted-2.0
2929 2005-03-31 Brian Warner <warner@lothar.com>
2931 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2932 caused a warning each time the master changed our set of builders
2934 * buildbot/status/builder.py (BuildStatus.saveYourself): under
2935 w32, don't unlink the file unless it already exists. Thanks to
2936 Baptiste Lepilleur for the catch.
2937 (BuilderStatus.saveYourself): same
2939 2005-02-01 Brian Warner <warner@lothar.com>
2941 * buildbot/status/html.py (TextLog.getChild): use a /text child
2942 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2943 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2944 logfile as text/plain (no markup, no headers). This replaces the
2945 previous scheme (which used an ?text=1 argument), and gets us back
2946 to a relative link (which works better when the buildbot lives
2947 behind another web server, such as Apache configured as a reverse
2948 proxy). Thanks to Gerald Combs for spotting the problem.
2950 * buildbot/__init__.py (version): bump to 0.6.2+ while between
2953 2004-12-13 Brian Warner <warner@lothar.com>
2955 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2957 * debian/changelog: update for 0.6.2
2958 * NEWS: finalize for 0.6.2
2960 2004-12-11 Brian Warner <warner@lothar.com>
2962 * NEWS: bring it up to date
2964 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2965 detection code. Require some sign of life from the buildmaster
2966 every BotFactory.keepaliveInterval seconds. Provoke this
2967 indication at BotFactory.keepaliveTimeout seconds before the
2968 deadline by sending a keepalive request. We don't actually care if
2969 that request is answered in a timely fashion, what we care about
2970 is that .activity() is called before the deadline. .activity() is
2971 triggered by any PB message from the master (including an ack to
2972 one of the slave's status-update messages). With this new scheme,
2973 large status messages over slow pipes are OK, as long as any given
2974 message can be sent (and thus acked) within .keepaliveTimeout
2975 seconds (which defaults to 30).
2976 (SlaveBuilder.remote_startCommand): record activity
2977 (SlaveBuilder.ackUpdate): same
2978 (SlaveBuilder.ackComplete): same
2979 (BotFactory.gotPerspective): same
2980 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2982 2004-12-09 Brian Warner <warner@lothar.com>
2984 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
2987 * buildbot/process/step_twisted.py (Trial._commandComplete):
2988 update self.cmd when we start the 'cat test.log' transfer. Without
2989 this, we cannot interrupt the correct RemoteCommand when we lose
2992 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
2993 trying to tell the slave to stop the command if we're already
2994 inactive, or if we no longer have a .remote
2996 * buildbot/process/builder.py (Builder._detached): don't let an
2997 exception in currentBuild.stopBuild() prevent the builder from
2998 being marked offline
3000 2004-12-07 Brian Warner <warner@lothar.com>
3002 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3003 KeyError that happens when you ask for a non-existent Builder, and
3004 translate it into a UsageError.
3006 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3007 losing the slave in the middle of a remote step is handled too
3009 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3010 be a Failure, so be sure to stringify it before using it as the
3011 contents of the 'interrupt' logfile
3012 (RemoteCommand.interrupt): use stringified 'why' in
3013 remote_interruptCommand too, just in case
3015 2004-12-06 Brian Warner <warner@lothar.com>
3017 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3018 instead of 'tla update', which is more efficient in case we've
3019 missed a couple of patches since the last update.
3021 * debian/changelog: update for previous (0.6.1) release. Obviously
3022 this needs to be handled better.
3024 2004-12-05 Brian Warner <warner@lothar.com>
3026 * NEWS: update for stuff since last release
3028 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3029 match the maybeDeferred change in Dispatcher.requestAvatar
3030 * buildbot/changes/pb.py (ChangePerspective.attached): same
3031 * buildbot/status/client.py (StatusClientPerspective.attached): same
3032 * buildbot/process/builder.py (Builder._attached3): same
3033 * buildbot/pbutil.py (NewCredPerspective.attached): same
3035 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3036 the date to the top-most box, if it is not the same as today's
3039 * docs/slave.xhtml: provide a buildslave setup checklist
3041 * docs/source.xhtml (Arch): correct terminology
3043 2004-12-04 Brian Warner <warner@lothar.com>
3045 * buildbot/test/test_slavecommand.py: use sys.executable instead
3046 of hard-coding 'python' for child commands, might help portability
3048 * docs/examples/twisted_master.cfg: update to current usage
3050 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3051 'stop build' command to the IRC bot
3053 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3054 message that broke PBChangeSource
3056 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3057 (SlaveBuilder): make some attributes class-level, remove the old
3058 "update queue" which existed to support resuming a build after the
3059 master connection was lost. Try to reimplement that feature later.
3060 (SlaveBuilder.stopCommand): clear self.command when the
3061 SlaveCommand finishes, so that we don't try to kill a leftover one
3063 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3066 * buildbot/slave/commands.py (SourceBase): set self.command for
3067 all VC commands, so they can be interrupted.
3069 2004-12-03 Brian Warner <warner@lothar.com>
3071 * buildbot/master.py: clean up slave-handling code, to handle
3072 slave-disconnect and multiple-connect better
3073 (BotPerspective): make these long-lasting, exactly one per bot
3074 listed in the config file.
3075 (BotPerspective.attached): if a slave connects while an existing
3076 one appears to still be connected, disconnect the old one first.
3077 (BotPerspective.disconnect): new method to forcibly disconnect a
3078 buildslave. Use some hacks to empty the transmit buffer quickly to
3079 avoid the long (20-min?) TCP timeout that could occur if the old
3080 slave has dropped off the net.
3081 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3082 own their own SlaveStatus objects. Remove .attached/.detached, add
3083 .addSlave/.removeSlave, treat slaves like Builders (config file
3084 parsing sends deltas to the BotMaster). Inform the slave
3085 instances, i.e. the BotPerspective, about addBuilder and
3087 (BotMaster.getPerspective): turns into a single dict lookup
3088 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3089 which gives BotPerspective.attached a chance to disconnect the old
3091 (BuildMaster.loadConfig): add code (disabled) to validate that all
3092 builders use known slaves (listed in c['bots']). The check won't
3093 work with tuple-specified builders, which are deprecated but not
3094 yet invalid, so the check is disabled for now.
3095 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3096 routine, do the add/changed/removed dance with them like we do
3098 (BuildMaster.loadConfig_Sources): move source-config into a
3099 separate routine too
3101 * buildbot/status/builder.py (Status.getSlave): get the
3102 SlaveStatus object from the BotPerspective, not the BotMaster.
3104 * buildbot/test/test_run.py: bunch of new tests for losing the
3105 buildslave at various points in the build, handling a slave that
3106 connects multiple times, and making sure we can interrupt a
3109 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3110 something other than 'Bot' for the Bot object, to make certain
3111 test cases easier to write.
3112 (BuildSlave.waitUntilDisconnected): utility method for testing
3114 2004-11-30 Brian Warner <warner@lothar.com>
3116 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3118 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3119 argument, return a Deferred that always fires with True or False.
3120 I don't use an errback to indicate 'ping failed' so that callers
3121 are free to ignore the deferred without causing spurious errors in
3123 * buildbot/process/builder.py (BuilderControl.ping): implement it
3125 * buildbot/test/test_run.py (Status.testDisappear): test ping
3126 (Status.disappearSlave): fix it
3128 2004-11-30 Brian Warner <warner@lothar.com>
3130 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3131 (IBuilderControl): add .getBuild(num), only works for the current
3132 build, of course, although it might be interesting to offer
3133 something for builds in the .waiting or .interlocked state.
3135 * buildbot/process/base.py (Build): have .stopBuild just do the
3136 interrupt, then let the build die by itself.
3137 (BuildControl): add .stopBuild, and add a point-event named
3138 'interrupt' just after the build so status viewers can tell that
3140 (BuilderControl): add .getBuild
3142 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3143 stops when you kill it, good for testing
3144 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3145 contains the 'reason' text.
3147 * buildbot/status/html.py: Add Stop Build button, if the build can
3148 still be stopped. Send a Redirect (to the top page) one second
3149 later, hopefully long enough for the interrupt to have an effect.
3150 Move make_row() up to top-level to share it between Stop Build and
3153 * buildbot/slave/commands.py: only kill the child process once
3155 * buildbot/test/test_run.py: add testInterrupt
3157 2004-11-29 Brian Warner <warner@lothar.com>
3159 * buildbot/process/base.py: Refactor command interruption. The
3160 Build is now responsible for noticing that the slave has gone
3161 away: Build.lostRemote() interrupts the current step and makes
3162 sure that no further ones will be started.
3164 * buildbot/process/builder.py: When the initial remote_startBuild
3165 message fails, log it: this usually indicates that the slave has
3166 gone away, but we don't really start paying attention until they
3167 fail to respond to the first step's command.
3169 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3170 slave disconnect. Now sports a new interrupt() method. Error
3171 handling was simplified a lot by chaining deferreds, so
3172 remoteFailed/remoteComplete were merged into a single
3173 remoteComplete method (which can now get a Failure object).
3174 Likewise failed/finished were merged into just _finished.
3175 (BuildStep): Add interrupt(why) method, and if why is a
3176 ConnectionLost Failure then the step is failed with some useful
3179 * buildbot/slave/bot.py: stop the current command when the remote
3180 Step reference is lost, and when the slave is shut down.
3181 (Bot): make it a MultiService, so it can have children. Use
3182 stopService to tell when the slave is shutting down.
3183 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3184 remote_interruptCommand (which asks the current SlaveCommand to
3185 stop but allows it to keep emitting status messages), and
3186 stopCommand (which tells it to shut up and die).
3188 * buildbot/slave/commands.py: make commands interruptible
3189 (ShellCommand.kill): factor out os.kill logic
3190 (Command): factor out setup()
3191 (Command.sendStatus): don't send status if .running is false, this
3192 happens when the command has been halted.
3193 (Command.interrupt): new method, used to tell the command to die
3194 (SlaveShellCommand): implement .interrupt
3195 (DummyCommand): implement .interrupt
3196 (SourceBase, etc): factor out setup(), don't continue substeps if
3199 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3200 so they can be called after finishing
3202 * buildbot/test/test_run.py: new tests for disconnect behavior,
3203 refactor slave-shutdown routines, add different kinds of
3206 2004-11-27 Brian Warner <warner@lothar.com>
3208 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3209 method to express ETA time like "2m45s" instead of "165 seconds"
3211 2004-11-24 Brian Warner <warner@lothar.com>
3213 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3214 archive after the test completes, to avoid cluttering the user's
3215 'tla archives' listing with a bogus entry. Arch doesn't happen to
3216 provide any way to override the use of ~/.arch-params/, so there
3217 isn't a convenient way to avoid touching the setup of the user who
3219 (VC_HTTP.testArchHTTP): same
3221 2004-11-23 Brian Warner <warner@lothar.com>
3223 * buildbot/status/html.py (TextLog): split render() up into
3224 render_HEAD and render_GET. Use a Producer when sending log
3225 chunks, to reduce memory requirements and avoid sending huge
3226 non-Banana-able strings over web.distrib connections. Requires
3227 peeking under the covers of IStatusLog.
3228 (TextLog.resumeProducing): fix the "as text" link, handle client
3229 disconnects that occur while we're still sending old chunks.
3231 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3232 use defer.succeed, not the non-existent defer.success
3233 (LogFile.waitUntilFinished): same
3234 (LogFile.subscribe): don't add watchers to a finished logfile
3236 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3239 2004-11-23 Brian Warner <warner@lothar.com>
3241 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3243 2004-11-23 Brian Warner <warner@lothar.com>
3245 * NEWS: update for the 0.6.1 release
3246 * MANIFEST.in: add new files
3248 * README (INSTALLATION): explain how to enable the extra VC tests
3250 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3251 level to, so old pickled builds can be displayed ok
3253 2004-11-22 Brian Warner <warner@lothar.com>
3255 * NEWS: summarize updates since last release
3257 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3258 Yoz Grahame. Closes SF#1050138.
3260 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3263 * buildbot/process/step_twisted.py (Trial): update docs a bit
3265 * docs/factories.xhtml: fix Trial factory docs to match reality.
3268 * buildbot/process/factory.py (Trial.__init__): add args for
3269 randomly= and recurse=, making them available to instantiators
3270 instead of only to subclassers. Closes: SF#1049759.
3272 2004-11-15 Brian Warner <warner@lothar.com>
3274 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3275 try to teach the Quick factory to use multiple versions of python
3277 2004-11-12 Brian Warner <warner@lothar.com>
3279 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3280 safer w32-compatible approach, and only use it on windows
3281 (BuildStatus.saveYourself): same
3283 2004-11-11 Brian Warner <warner@lothar.com>
3285 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3286 it: one string merge per chunk. There are now separate .entries
3287 and .runEntries lists: when enumerating over all chunks, make sure
3289 * buildbot/test/test_status.py (Log): more tests
3291 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3292 chunks together, up to 10kb per chunk. This ought to cut down on
3293 the CPU-burning overhead of large log files. Thanks to Alexander
3294 Staubo for spotting the problem.
3295 * buildbot/test/test_status.py (Log): tests for same
3297 2004-11-10 Brian Warner <warner@lothar.com>
3299 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3300 header to outbound mail
3301 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3303 2004-11-08 Brian Warner <warner@lothar.com>
3305 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3306 can't do os.rename() onto an existing file, so catch the exception
3307 and unlink the target file first. This introduces a slight window
3308 where the existing file could be lost, but the main failure case
3309 (disk full) should still be handled safely.
3310 (BuildStatus.saveYourself): same
3312 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3313 separator character instead of os.sep, because the filenames being
3314 split here are coming from the VC system, which can have a
3315 different pathname convention than the local host. This should
3316 help a buildmaster running on windows that uses a CVS repository
3317 which runs under unix.
3318 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3320 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3321 when there are no test failures to be parsed
3323 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3324 instead of the unix-specific os.system("cp"), thanks to Elliot
3325 Murphy for this and the other buildbot-vs-windows catches.
3326 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3328 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3329 echo the command as it is run
3331 * setup.py: install sample.mk too, not just sample.cfg
3332 (scripts): install contrib/windows/buildbot.bat on windows
3334 2004-11-07 Brian Warner <warner@lothar.com>
3336 * buildbot/process/builder.py (Builder._detached): clear the
3337 self.currentBuild reference, otherwise the next build will be
3338 skipped because we think the Builder is already in use.
3340 * docs/examples/twisted_master.cfg: update to match current usage
3341 on the Twisted buildbot
3343 2004-10-29 Brian Warner <warner@lothar.com>
3345 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3347 2004-10-28 Brian Warner <warner@lothar.com>
3349 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3350 have separate doVCUpdate/doVCFull methods. Catch an update failure
3351 and respond by clobbering the source directory and re-trying. This
3352 will handle local changes (like replacing a file with a directory)
3353 that will cause CVS and SVN updates to fail.
3354 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3356 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3359 2004-10-19 Brian Warner <warner@lothar.com>
3361 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3363 * buildbot/status/html.py (StatusResourceTestResults): display any
3364 TestResults that the Build might have
3365 (StatusResourceTestResult): and the logs for each TestResult
3366 (StatusResourceBuild): add link from the per-build page
3368 2004-10-15 Brian Warner <warner@lothar.com>
3370 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3371 the 'problems' portion of stdout, add TestResults to our build
3372 * buildbot/test/test_twisted.py (Parse.testParse): test it
3374 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3375 to retrieve a dict of accumulated test results
3376 (ITestResult): define what a single test result can do
3377 * buildbot/status/builder.py (TestResult): implement ITestResult
3378 (BuildStatus.getTestResults): retrieve dict of TestResults
3379 (BuildStatus.addTestResult): add TestResults
3380 * buildbot/test/test_status.py (Results.testAddResults): test it
3382 2004-10-14 Brian Warner <warner@lothar.com>
3384 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3385 instead of os.system("rm -rf") for win32 portability
3387 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3388 SignalMixin instead of starting/stopping the reactor, which is
3389 likely to cause problems with other tests
3391 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3392 self.copyComplete() call. Yoz Grahame makes the catch.
3394 * contrib/windows/buildbot.bat: helper script to deal with path
3395 issues. Thanks to Yoz Grahame.
3397 * buildbot/master.py (BuildMaster.startService): don't register a
3398 SIGHUP handler if the signal module has no SIGHUP attribute.
3399 Apparently win32 does this.
3401 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3403 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3404 test if the reactor can't offer UNIX sockets
3406 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3407 error introduced in the last commit. We really need that
3410 2004-10-12 Brian Warner <warner@lothar.com>
3412 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3413 when describing a maildir source. Thanks to Stephen Davis.
3415 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3418 * buildbot/scripts/runner.py (createMaster): install Makefile too
3419 (start): add --no_save to 'start' command
3420 * buildbot/scripts/sample.mk: simple convenience Makefile with
3421 start/stop/reload targets
3423 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3426 2004-09-30 Brian Warner <warner@lothar.com>
3428 * setup.py: Releasing buildbot-0.6.0
3430 2004-09-30 Brian Warner <warner@lothar.com>
3432 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3433 test_trial.py from the source tarball until support is complete.
3435 * NEWS: update for 0.6.0 release
3436 * buildbot/__init__.py (version): same
3439 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3440 'source' command to tell users where to get the Buildbot source
3442 * docs/examples/*.cfg: update to modern standards
3444 * NEWS: update for release
3446 * buildbot/scripts/runner.py (createMaster): remove the
3447 -shutdown.tap stuff now that it isn't necessary
3449 (start): launch buildbot.tap, not buildbot-shutdown.tap
3452 * buildbot/status/mail.py (Domain): shorten class name
3453 (MailNotifier): if lookup= is a string, pass it to Domain()
3454 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3455 (Mail.testBuild2): test the string-to-Domain shortcut
3456 (Mail.testMail): fix test
3459 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3462 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3463 more attributes on load
3464 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3465 to accomodate the whole waterfall page at once, and the thrashing
3466 results in a lot of unnecessary loads
3467 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3468 (BuilderStatus.saveYourself): same
3469 (BuilderStatus.eventGenerator): stop generating on the first missing
3470 build. We assume that saved builds are deleted oldest-first.
3471 (BuildStepStatus.__getstate__): .progress might not exist
3473 * buildbot/changes/changes.py (ChangeMaster): make it
3474 serializable, in $masterdir/changes.pck
3475 (ChangeMaster.stopService): save on shutdown
3476 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3477 * buildbot/test/test_config.py: load Changes before config file
3480 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3481 "Oh my god, you killed the command" header on a separate line
3483 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3484 skip over corrupted build pickles
3485 (BuilderStatus.getFullBuildByNumber): same
3486 (BuilderStatus.eventGenerator): skip over unavailable builds
3487 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3488 do an atomic rename. This prevents a corrupted pickle when some
3489 internal serialization error occurs.
3490 (BuilderStatus.saveYourself): same
3492 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3493 the timeout for shell commands, it got lost somehow
3495 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3496 run out of build steps, return the rest of the builder events
3498 * buildbot/interfaces.py (IBuilderControl.ping): add method
3500 * buildbot/process/builder.py (BuilderControl.ping): move
3501 slave-ping to BuilderControl, and fix the failure case in the
3502 process (Event.finish() is the verb, Event.finished is the noun).
3504 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3505 through the BuilderControl instead of the BuilderStatus
3506 (EventBox): add adapter for builder.Event, allowing builder events to
3507 be displayed in the waterfall display
3509 * buildbot/master.py (BotMaster.stopService): add a 'master
3510 shutdown' event to the builder's log
3511 (BuildMaster.startService): and a 'master started' on startup
3513 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3514 builder events into the BuildStep event stream
3515 (Status.builderAdded): add a 'builder created' event
3518 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3519 command to announce the completion of a running build
3520 (IrcStatusBot.command_FORCE): announce when the build finishes
3522 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3523 don't evict unfinished builds from the cache: they must stay in
3524 the full-cache until their logfiles have stopped changing. Make
3525 sure the eviction loop terminates if an unfinished build was hit.
3526 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3527 This lets exceptions be dumped in an email status message. Really
3528 we need LogFiles which contain both text and HTML, instead of two
3530 (BuildStatus.__getstate__): handle self.finished=False
3531 (Status.builderAdded): if the pickle is corrupted, abandon the
3532 history and create a new BuilderStatus object.
3534 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3535 self.progress attribute, helped one test which doesn't fully set
3536 up the Build object.
3538 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3539 IStatusLog methods into an Interface that is implemented by "stub"
3540 logs, for which all the actual text chunks are on disk (in the
3541 pickled Build instance). To show the log contents, you must first
3542 adapt the stub log to a full IStatusLog object.
3544 * buildbot/status/builder.py (LogFileStub): create separate stub
3545 log objects, which can be upgraded to a real one if necessary.
3546 (LogFile): make them persistable, and let them stubify themselves
3548 (BuildStepStatus): same
3550 (BuildStatus.saveYourself): save the whole build out to disk
3551 (BuilderStatus): make it persistable
3552 (BuilderStatus.saveYourself): save the builder to disk
3553 (BuilderStatus.addFullBuildToCache): implement two caches which
3554 hold Build objects: a small one which holds full Builds, and a
3555 larger one which holds "stubbed" Builds (ones with their LogFiles
3556 turned into LogFileStubs). This reduces memory usage by the
3557 buildmaster by not keeping more than a few (default is 2) whole
3558 build logs in RAM all the time.
3559 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3561 (BuilderStatus.eventGenerator): rewrite since .builds went away
3562 (BuilderStatus.buildStarted): remove the .builds array. Add the
3563 build to the "full" cache when it starts.
3564 (BuilderStatus._buildFinished): save the build to disk when it
3566 (Status): give it a basedir (same as the BuildMaster's basedir)
3567 where the builder pickles can be saved
3568 (Status.builderAdded): create the BuilderStatus ourselves, by
3569 loading a pickle from disk (or creating a new instance if there
3570 was none on disk). Return the BuilderStatus so the master can glue
3571 it into the new Builder object.
3573 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3574 all BuilderStatuses to save themselves out to disk. This is in
3575 lieu of saving anything important in the main Application pickle
3576 (the -shutdown.tap file).
3577 (BuildMaster.__init__): give Status() a basedir for its files
3578 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3579 to get the BuilderStatus, then give it to the Builder (instead of
3580 doing it the other way around). It's ok if the status announces
3581 the new Builder before it's really ready, as the outside world can
3582 only see the BuilderStatus object anyway (and it is ready before
3583 builderAdded returns). Use the builder's "builddir" (which
3584 normally specifies where the slave will run the builder) as the
3585 master's basedir (for saving serialized builds).
3587 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3588 coerce the logfile to IStatusLog before trying to get the text
3589 chunks out of it. This will pull the full (non-stubified) Build in
3590 from disk if necessary.
3591 (TextLog): fix the adapter registration
3593 * buildbot/test/test_control.py (Force.setUp): create the basedir
3594 * buildbot/test/test_web.py: same
3595 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3596 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3597 * buildbot/test/test_run.py (Run.testMaster): same
3598 (Status.setUp): same
3600 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3602 * buildbot/status/html.py (Waterfall.__init__): store actual
3603 allowForce flag passed in rather than using True for everyone;
3604 make sure setting it to False doesn't cause a NameError
3606 (StatusResourceBuilder.__init__) add the builder name to the page
3608 (StatusResourceBuilder.body) move HTML generation for a name/value
3609 row into a helper method (StatusResourceBuilder.make_row); only
3610 generate the "Force Build" form if allowForce was True and the
3611 slave is connected. Use class attributes in the generated HTML to
3612 spread a little CSS-joy.
3614 2004-09-28 Brian Warner <warner@lothar.com>
3616 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3617 warning-scanner to not ignore things like
3618 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3620 * buildbot/status/html.py (StatusResource.control): add some
3621 class-level values for .control in an attempt to make upgrading
3624 * buildbot/util.py (ComparableMixin): survive missing attributes,
3625 such as when a class is modified and we're comparing old instances
3628 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3629 failure handling, remove a redundant try/except block. Don't
3630 return the full traceback to the IRC channel.
3631 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3632 error messages. Get ETA properly.
3634 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3635 the reason, since (at least) IRC message will have <> in them.
3636 (StatusResourceBuilder.__init__): take an IBuilderControl
3637 (StatusResourceBuilder.force): use the IBuilderControl we get in
3638 the constructor instead of trying to make our own. Catch the
3639 new exceptions and ignore them for now (until we make an
3640 intermediate web page where we could show the error message)
3641 (StatusResource): create with an IControl, use it to give an
3642 IBuilderControl to all children
3643 (Waterfall): take an allowForce= option, pass an IControl object
3644 to StatusResource if it is True
3646 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3648 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3649 catch new exceptions and return string forms
3651 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3652 * buildbot/process/builder.py (Builder.forceBuild): raise them
3653 * buildbot/test/test_control.py (Force.testNoSlave): new test
3654 (Force.testBuilderInUse): same
3657 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3659 * buildbot/test/test_run.py: use IControl
3660 * buildbot/test/test_vc.py: same
3662 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3663 to use IControl. Still offline.
3664 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3666 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3667 who=None so periodic builds don't send out status mail
3668 (Builder.forceBuild): include reason in the log message
3669 (BuilderControl.forceBuild): rename 'name' to 'who'
3671 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3672 'who' parameter, but make it None by default so builds forced by
3673 slave admins don't cause status mail to be sent to anybody
3674 (BotMaster.forceBuild): same. this method is deprecated.
3675 (DebugPerspective.perspective_forceBuild): same, use IControl.
3676 (DebugPerspective.perspective_fakeChange): use IControl..
3677 (Dispatcher.requestAvatar): .. so don't set .changemaster
3679 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3680 parameter to avoid confusion with the name of the builder
3683 * buildbot/status/mail.py: refine comment about needing 2.3
3685 * buildbot/status/html.py: move all imports to the top
3687 * buildbot/test/test_control.py: test new interfaces
3688 * buildbot/test/test_run.py (Status): handle new interfaces
3689 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3691 * buildbot/process/base.py (BuildControl): implement IBuildControl
3692 and its lonely getStatus() method
3694 * buildbot/process/builder.py (BuilderControl): implement
3695 IBuilderControl, obtained by adapting the Builder instance
3696 (Builder.startBuild): return a BuilderControl instead of a
3697 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3698 accomplish the same thing.
3700 * buildbot/master.py: move all import statements to the top
3701 (Control): implement IControl, obtained by adapting the
3702 BuildMaster instance.
3704 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3705 IBuildControl. These are used to force builds. Eventually they
3706 will provide ways to reconfigure the Builders, pause or abandon a
3707 Build, and perhaps control the BuildMaster itself.
3709 2004-09-26 Brian Warner <warner@lothar.com>
3711 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3712 ends up comparing us against something without a .__class__
3714 2004-09-24 Brian Warner <warner@lothar.com>
3716 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3719 * Makefile: add 'deb-snapshot' target, to create a timestamped
3722 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3724 2004-09-23 Brian Warner <warner@lothar.com>
3726 * buildbot/__init__.py (version): move version string here
3727 * setup.py: get version string from buildbot.version
3728 * buildbot/status/html.py (WaterfallStatusResource.body): add
3729 buildbot version to the page footer
3730 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3733 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3734 slaves, let the second know where the first one is coming from
3735 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3736 see our exceptions. It would be nice if there were a way to just
3737 send them the exception type and value, not the full traceback.
3740 * buildbot/status/mail.py (MailNotifier): add a new argument
3741 sendToInterestedUsers=, which can be set to False to disable the
3742 usual send-to-blamelist behavior.
3743 (top): handle python-2.2 which has no email.MIMEMultipart
3744 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3745 (MailNotifier.disownServiceParent): unsubscribe on removal
3747 * buildbot/test/test_status.py (Mail.testBuild2): test it
3750 * buildbot/status/progress.py (Expectations.wavg): tolerate
3751 current=None, which happens when steps start failing badly
3752 * buildbot/test/test_status.py (Progress.testWavg): test for it
3754 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3755 doesn't understand args['revision'], emit a warning instead of
3756 bailing completely. Updating to -rHEAD is probably close enough.
3758 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3760 * buildbot/test/test_status.py: at least import bb.status.client
3761 even if we don't have any test coverage for it yet
3763 * contrib/svn_buildbot.py: don't require python2.3
3764 (main): wait, do require it (for sets.py), but explain how to
3765 make it work under python2.2
3767 2004-09-23 Brian Warner <warner@lothar.com>
3769 * contrib/svn_buildbot.py: include the revision number in the Change
3771 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3772 using util.now() because FreshCVS is a realtime service
3774 * buildbot/status/event.py: delete dead code
3775 * buildbot/process/step.py: don't import dead Event class
3776 * buildbot/process/step_twisted.py: same
3777 * buildbot/status/builder.py: same
3778 * buildbot/status/client.py: same
3780 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3782 * buildbot/changes/changes.py (Change): set .when from an __init__
3783 argument (which defaults to now()), rather than having
3784 ChangeMaster.addChange set it later.
3785 (ChangeMaster.addChange): same
3787 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3788 (parseSyncmail): same. Just use util.now() for now.
3789 (parseBonsaiMail): parse the timestamp field for when=
3791 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3792 instead of setting .when after the fact
3796 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3797 results when the target project uses retrial. Still under
3799 * buildbot/test/test_trial.py: same
3801 2004-09-21 Brian Warner <warner@lothar.com>
3803 * buildbot/status/mail.py (MailNotifier.__init__): include
3804 success/warnings/failure in the Subject line
3805 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3806 use step.logname for the addLogs=True attachment filenames
3807 * buildbot/test/test_status.py (Mail): test Subject lines
3808 (Mail.testLogs): test attachment filenames
3810 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3811 accept a 'who' argument from the debug tool
3812 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3813 * contrib/debug.glade: add text box to set 'who'
3815 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3816 .getBuilderName with .getBuilder().getName(), more flexible
3817 (IStatusLog.getName): logs have short names, but you can prefix
3818 them with log.getStep().getName() to make them more useful
3819 * buildbot/status/builder.py: same
3820 * buildbot/status/client.py: same
3821 * buildbot/status/html.py: same
3822 * buildbot/test/test_run.py (Status.testSlave): same
3823 * buildbot/process/step.py: tweak logfile names
3825 * buildbot/status/mail.py (MailNotifier): add lookup, change
3826 argument to extraRecipients. The notifier is now aimed at sending
3827 mail to the people involved in a particular build, with additional
3828 constant recipients as a secondary function.
3830 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3831 including slow-lookup and failing-lookup. Make sure the blamelist
3832 members are included.
3834 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3835 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3836 (IBuildStatus.getInterestedUsers): new method
3837 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3838 * buildbot/status/client.py (remote_getResponsibleUsers): same
3839 * buildbot/status/html.py (StatusResourceBuild.body): same
3840 * buildbot/test/test_run.py (Status.testSlave): same
3842 2004-09-20 Brian Warner <warner@lothar.com>
3844 * docs/users.xhtml: update concepts
3846 * Makefile: add a convenience makefile, for things like 'make
3847 test'. It is not included in the source tarball.
3849 2004-09-16 Brian Warner <warner@lothar.com>
3851 * NEWS: mention /usr/bin/buildbot, debian/*
3853 * debian/*: add preliminary debian packaging. Many thanks to
3854 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3855 it considerably since it left their hands, I am responsible for
3856 all breakage that's resulted.
3858 * bin/buildbot: create a top-level 'buildbot' command, to be
3859 installed in /usr/bin/buildbot . For now it's just a simple
3860 frontend to mktap/twistd/kill, but eventually it will be the entry
3861 point to the 'try' command and also a status client. It is also
3862 intended to support the upcoming debian-packaging init.d scripts.
3863 * buildbot/scripts/runner.py: the real work is done here
3864 * buildbot/scripts/__init__.py: need this too
3865 * buildbot/scripts/sample.cfg: this is installed in new
3866 buildmaster directories
3867 * setup.py: install new stuff
3869 2004-09-15 Brian Warner <warner@lothar.com>
3871 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3872 'file:' schema (the version shipped with OS-X was built without the
3874 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3875 updates the log-timestamp, to make sure it isn't still running after
3878 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3879 values to the config file.
3880 * docs/examples/hello.cfg: add examples
3881 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3882 * buildbot/status/builder.py (Status.getProjectURL): implement them
3883 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3884 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3885 * buildbot/status/html.py (WaterfallStatusResource): display them
3888 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3889 certain error cases don't suffer a secondary exception.
3890 (top): Skip tests if the corresponding VC tool is not installed.
3892 * buildbot/process/factory.py (Trial): introduce separate
3893 'buildpython' and 'trialpython' lists, since trialpython=[] is
3894 what you want to invoke /usr/bin/python, whereas ./setup.py is
3895 less likely to be executable. Add env= parameter to pass options
3896 to test cases (which is how I usually write tests, I don't know if
3897 anyone else does it this way).
3899 * buildbot/process/step_twisted.py (Trial): handle python=None.
3900 Require 'testpath' be a string, not a list. Fix tests= typo.
3901 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3903 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3904 way to deal with the possibility of removing the disconnect notify
3906 (CVS): add a 'login' parameter to give a password to 'cvs login',
3907 commonly used with pserver methods (where pw="" or pw="guest")
3909 * buildbot/slave/commands.py (SourceBase): move common args
3910 extraction and setup() to __init__, so everything is ready by the
3911 time setup() is called
3912 (CVS.start): call 'cvs login' if a password was supplied
3913 (ShellCommand): special-case PYTHONPATH: prepend the master's
3914 value to any existing slave-local value.
3916 * buildbot/process/builder.py (Builder.updateBigStatus): if we
3917 don't have a remote, mark the builder as Offline. This whole
3918 function should probably go away and be replaced by individual
3920 (Builder.buildFinished): return the results to the build-finished
3921 deferred callback, helps with testing
3923 2004-09-14 Brian Warner <warner@lothar.com>
3925 * buildbot/test/test_vc.py: put all the repositories needed to run
3926 the complete tests into a single small (1.3MB) tarball, so I can
3927 make that tarball available on the buildbot web site. Test HTTP
3928 access (for Arch and Darcs) by spawning a temporary web server
3929 while the test runs.
3931 * docs/users.xhtml: new document, describe Buildbot's limited
3932 understanding of different human users
3934 * buildbot/test/test_vc.py: rearrange test cases a bit
3936 * buildbot/process/step_twisted.py (Trial): handle testpath=
3937 * buildbot/process/factory.py (Trial): update to use step.Trial
3939 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3941 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3942 the overall build text (which gives you 'failed 2 tests' rather
3944 (BuildStepStatus.text2): default to [], not None
3946 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3949 2004-09-12 Brian Warner <warner@lothar.com>
3951 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3952 log the whole exception if it's just an AttributeError (old slave)
3954 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3955 so (e.g.) sub-commands can be run in the right directory.
3956 (ShellCommand.start): accept an optional errorMessage= argument
3957 to make life easier for SVN.start
3958 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3960 (ShellCommand.start): move ['dir'] compatibility hack..
3961 (RemoteShellCommand.start): .. to here so everyone can use it
3963 * buildbot/process/step_twisted.py (Trial): use .workdir
3965 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3966 text displayed when debuild fails completely
3967 (Trial): snarf _trial_temp/test.log from the slave and display it
3969 2004-09-11 Brian Warner <warner@lothar.com>
3971 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3973 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3974 set to 'twisted', so --recurse can find twisted/web/test/*, etc
3976 * buildbot/process/step.py (ShellCommand): call .createSummary
3977 before .evaluateCommand instead of the other way around. This
3978 makes it slightly easier to count warnings and then use that to
3979 set results=WARNINGS
3980 * buildbot/process/step_twisted.py: cosmetic, swap the methods
3982 * buildbot/process/base.py (Build.buildFinished): update status
3983 before doing progress. It's embarrassing for the build to be stuck
3984 in the "building" state when an exceptions occurs elsewhere..
3986 * buildbot/status/progress.py (Expectations.expectedBuildTime):
3987 python2.2 doesn't have 'sum'
3989 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
3990 to prevent clients from accidentally sorting it
3992 * buildbot/master.py (Manhole): add username/password
3993 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
3994 c['manholePort'], deprecate old usage
3995 * docs/config.xhtml: document c['manhole']
3996 * docs/examples/hello.cfg: show example of using a Manhole
3999 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4000 pretend the slave is up to date
4002 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4003 the module, overlaps with 'log', the local variable
4005 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4007 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4008 new method to let Steps find out the version of their
4009 corresponding SlaveCommand.
4010 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4011 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4012 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4014 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4015 (Arch.startVC): same
4016 (P4Sync.startVC): same
4018 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4019 Deferred so we can catch errors in remote_startCommand
4020 (RemoteShellCommand.start): same
4022 * docs/examples/twisted_master.cfg: update sample config file
4024 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4025 after connectionMade() is called, not before. Close stdin at that
4028 * buildbot/process/process_twisted.py: update to use Trial, clean
4029 up argument passing (move to argv arrays instead of string
4032 * buildbot/process/step_twisted.py (Trial): new step to replace
4033 RunUnitTests, usable by any trial-using project (not just
4034 Twisted). Arguments have changed, see the docstring for details.
4036 * buildbot/process/base.py (Build.startBuild): this now returns a
4037 Deferred. Exceptions that occur during setupBuild are now
4038 caught better and lead to fewer build_status weirdnesses, like
4039 finishing a build that was never started.
4040 (Build.buildFinished): fire the Deferred instead of calling
4041 builder.buildFinished directly. The callback argument is this
4042 Build, everything else can be extracted from it, including the
4043 new build.results attribute.
4044 * buildbot/process/builder.py (Builder.startBuild): same
4045 (Builder.buildFinished): same, extract results from build
4047 * buildbot/process/step.py (ShellCommands): remove dead code
4049 2004-09-08 Brian Warner <warner@lothar.com>
4051 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4052 doesn't try to use the leftover patched workdir
4053 (SourceStamp): test source-stamp computation for CVS and SVN
4055 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4056 patched workdir ('touch .buildbot-patched') so we don't try to
4058 (SourceBase.start): add ['revision'] for all Source steps
4059 (CVS): change args: use ['branch'] for -r, remove ['files']
4060 (CVS.buildVC): fix revision/branch stuff
4061 (SVN): add revision stuff
4063 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4064 kwargs (except 'workdir') to avoid silent spelling errors
4065 (ShellCommand.__init__): same
4066 (Source): new base class for CVS/SVN/etc. Factor out everything
4067 common, add revision computation (perform the checkout with a -D
4068 DATE or -r REVISION that gets exactly the sources described by the
4069 last Change), overridable with step.alwaysUseLatest. Add patch
4070 handling (build.getSourceStamp can trigger the use of a base
4071 revision and a patch).
4072 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4073 * docs/steps.xhtml: update docs
4074 * docs/source.xhtml: mention .checkoutDelay
4075 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4077 * buildbot/process/base.py (Build.setSourceStamp): add a
4078 .sourceStamp attribute to each Build. If set, this indicates that
4079 the build should be done with something other than the most
4080 recent source tree. This will be used to implement "try" builds.
4081 (Build.allChanges): new support method
4082 (Build.lastChangeTime): remove, functionality moved to Source steps
4083 (Build.setupBuild): copy the Step args before adding ['workdir'],
4084 to avoid modifying the BuildFactory (and thus triggering spurious
4088 * buildbot/status/html.py: rename s/commits/changes/
4089 (StatusResourceChanges): same
4090 (CommitBox.getBox): same, update URL
4091 (WaterfallStatusResource): same
4092 (StatusResource.getChild): same
4094 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4095 * contrib/debug.glade: add optional 'revision' to the fakeChange
4097 * buildbot/changes/changes.py (html_tmpl): display .revision
4098 (ChangeMaster.addChange): note .revision in log
4099 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4100 accept a ['revision'] attribute
4102 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4104 * buildbot/master.py (BotMaster.getPerspective): update the
4105 .connected flag in SlaveStatus when it connects
4106 (BotMaster.detach): and when it disconnects
4107 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4108 (BuildMaster.loadConfig_Builders): walk old list correctly
4110 * buildbot/test/test_config.py: fix prefix= usage
4112 2004-09-06 Brian Warner <warner@lothar.com>
4116 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4117 poll a P4 depot looking for recent changes. Thanks to Dave
4118 Peticolas for the contribution. Probably needs some testing after
4121 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4122 requires manual client setup for each buildslave. Rather
4123 experimental. Thanks again to Dave Peticolas.
4124 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4126 * buildbot/changes/changes.py (Change): add a .revision attribute,
4127 which will eventually be used to generate source-stamp values.
4129 * buildbot/process/step.py (RemoteCommand.start): use
4130 notifyOnDisconnect to notice when we lose the slave, then treat it
4131 like an exception. This allows LogFiles to be closed and the build
4132 to be wrapped up normally. Be sure to remove the disconnect
4133 notification when the step completes so we don't accumulate a
4134 bazillion such notifications which will fire weeks later (when the
4135 slave finally disconnects normally). Fixes SF#915807, thanks to
4136 spiv (Andrew Bennetts) for the report.
4137 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4138 really isn't Logged- specific
4139 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4140 header, since it's almost always going to be appended to an
4142 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4143 update test to handle use of notifyOnDisconnect
4145 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4146 don't clear .ETA and .currentBuild when going offline, let the
4147 current build clean up after itself
4149 * buildbot/process/builder.py (Builder.detached): wait a moment
4150 before doing things like stopping the current build, because the
4151 current step will probably notice the disconnect and cleanup the
4153 * buildbot/test/test_run.py (Status.tearDown): update test to
4154 handle asynchronous build-detachment
4156 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4158 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4159 hush a debug message
4161 2004-09-05 Brian Warner <warner@lothar.com>
4163 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4164 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4165 kernels do this: the fcntl module has the F_NOTIFY constant, but
4166 the kernel itself doesn't support the operation. Thanks to Olly
4167 Betts for spotting the problem.
4169 * buildbot/process/step.py (Darcs): new source-checkout command
4170 (Arch): new source-checkout command
4171 (todo_P4): fix constructor syntax, still just a placeholder
4172 * buildbot/test/test_vc.py (VC.testDarcs): test it
4173 (VC.testDarcsHTTP): same, via localhost HTTP
4175 (VC.testArchHTTP): same
4176 * NEWS: mention new features
4178 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4179 which tells the step to stash stdout text locally (in .stdout).
4180 Slave-side Commands can use this to make decisions based upon the
4181 output of the the ShellCommand (not just the exit code).
4182 (Darcs): New source-checkout command
4183 (Arch): New source-checkout command, uses .keepStdout in one place
4184 where it needs to discover the archive's default name.
4186 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4187 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4188 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4190 * buildbot/process/step.py (ShellCommand.describe): add an
4191 alternate .descriptionDone attribute which provides descriptive
4192 text when the step is complete. .description can be ["compiling"],
4193 for use while the step is running, then .descriptionDone can be
4194 ["compile"], used alone when the step succeeds or with "failed" when
4195 it does not. Updated other steps to use the new text.
4196 * buildbot/process/step_twisted.py: same
4197 * buildbot/test/test_run.py: update tests to match
4199 2004-08-30 Brian Warner <warner@lothar.com>
4201 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4202 (CVS.__init__): send 'patch' argument to slave
4203 (CVS.start): don't create the LoggedRemoteCommand until start(),
4204 so we can catch a .patch added after __init__
4205 (SVN.__init__): add 'patch' to SVN too
4208 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4209 argument, to let commands push data into the process' stdin pipe.
4210 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4211 is in use, since closing a PTY doesn't really affect the process
4212 in the right way (in particular, I couldn't run /usr/bin/patch
4214 (SourceBase.doPatch): handle 'patch' argument
4216 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4219 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4220 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4222 * buildbot/master.py (BotPerspective.got_commands): get command
4223 versions from slave, give to each builder
4224 * buildbot/process/builder.py (Builder.attached): stash slave
4225 command versions in .remoteCommands
4227 * docs/steps.xhtml: bring docs in-line with reality
4229 * buildbot/process/step.py (CVS.__init__): more brutal
4230 compatibility code removal
4231 (SVN.__init__): same
4233 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4234 (SlaveShellCommand.start): require ['workdir'] argument, remove
4235 the ['dir'] fallback (compatibility will come later)
4236 (SourceBase): update docs
4237 (SourceBase.start): remove ['directory'] fallback
4240 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4241 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4242 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4244 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4245 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4246 code.. I will figure out 0.5.0-compatibility hooks later)
4248 2004-08-30 Brian Warner <warner@lothar.com>
4250 * buildbot/process/process_twisted.py: rewrite in terms of new
4251 BuildFactory base class. It got significantly shorter. Yay
4254 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4255 work with the new "self.build isn't nailed down until we call
4256 step.start()" scheme: specifically, __init__ is called before the
4257 build has decided on which Changes are going in, so we don't scan
4258 build.allFiles() for .xhtml files until start()
4259 (HLint.commandComplete): use getText(), not getStdout()
4260 (RunUnitTests.start): same: don't use .build until start()
4261 (RunUnitTests.describe): oops, don't report (None) when using
4263 (RunUnitTests.commandComplete): use getText()
4264 (RunUnitTests.createSummary): same
4265 (BuildDebs.commandComplete): same
4267 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4268 set args['command'] until start(), since our BuildStep is allowed
4269 to change their mind up until that point
4270 (TreeSize.commandComplete): use getText(), not getStdout()
4272 * docs/examples/twisted_master.cfg: update to current standards
4274 * docs/factories.xhtml: update
4275 * buildbot/process/factory.py: implement all the common factories
4276 described in the docs. The Trial factory doesn't work yet, and
4277 I've probably broken all the process_twisted.py factories in the
4278 process. There are compatibility classes left in for things like
4279 the old BasicBuildFactory, but subclasses of them are unlikely to
4281 * docs/examples/glib_master.cfg: use new BuildFactories
4282 * docs/examples/hello.cfg: same
4284 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4285 explicit 'workdir' args
4287 * buildbot/process/base.py (BuildFactory): move factories to ..
4288 * buildbot/process/factory.py (BuildFactory): .. here
4289 * buildbot/process/process_twisted.py: handle move
4290 * buildbot/test/test_config.py: same
4291 * buildbot/test/test_run.py: same
4292 * buildbot/test/test_steps.py: same
4293 * buildbot/test/test_vc.py: same
4294 * docs/factories.xhtml: same
4296 * NEWS: mention config changes that require updating master.cfg
4298 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4299 argument to all steps that weren't given one already, pointing at
4300 the "build/" directory.
4302 * docs/examples/hello.cfg: remove explicit 'workdir' args
4304 * docs/factories.xhtml: document standard BuildFactory clases,
4305 including a bunch which are have not yet been written
4307 2004-08-29 Brian Warner <warner@lothar.com>
4309 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4310 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4311 buildbot.status.builder so they aren't quite so internal
4312 * buildbot/process/base.py, buildbot/process/builder.py: same
4313 * buildbot/process/maxq.py, buildbot/process/step.py: same
4314 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4315 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4316 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4318 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4319 to handle new getLogs()-returns-list behavior
4320 (StatusResourceBuildStep.getChild): same
4321 (StepBox.getBox): same
4322 (WaterfallStatusResource.phase0): same
4324 * docs/source.xhtml: document how Buildbot uses version-control
4325 systems (output side: how we get source trees)
4326 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4327 systems (input side: how we learn about Changes)
4329 * buildbot/master.py (Manhole): use ComparableMixin
4330 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4331 * buildbot/changes/mail.py (MaildirSource): same
4332 * buildbot/status/client.py (PBListener): same
4333 * buildbot/status/html.py (Waterfall): same
4334 * buildbot/status/words.py (IRC): same
4336 * NEWS: start describing new features
4338 * buildbot/status/mail.py (MailNotifier): finish implementation.
4339 The message body is still a bit sparse.
4340 * buildbot/test/test_status.py (Mail): test it
4342 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4343 and __hash__ methods I wind up adding everywhere. Specifically
4344 intended to support the buildbot config-file update scheme where
4345 we compare, say, the old list of IStatusTargets against the new
4346 one and don't touch something which shows up on both lists.
4347 * buildbot/test/test_util.py (Compare): test case for it
4349 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4350 return a list instead of a dict
4351 (IBuildStepStatus.getLogs): same. The idea is that steps create
4352 logs with vaguely unique names (although their uniqueness is not
4353 guaranteed). Thus a compilation step should create its sole
4354 logfile with the name 'compile', and contribute it to the
4355 BuildStatus. If a step has two logfiles, try to create them with
4356 different names (like 'test.log' and 'test.summary'), and only
4357 contribute the important ones to the overall BuildStatus.
4358 * buildbot/status/builder.py (Event.getLogs): same
4359 (BuildStepStatus): fix default .text and .results
4360 (BuildStepStatus.addLog): switch to list-like .getLogs()
4361 (BuildStepStatus.stepFinished): same
4362 (BuildStatus.text): fix default .text
4363 (BuildStatus.getLogs): temporary hack to return all logs (from all
4364 child BuildStepStatus objects). Needs to be fixed to only report
4365 the significant ones (as contributed by the steps themselves)
4366 * buildbot/test/test_run.py: handle list-like .getLogs()
4367 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4369 2004-08-28 Brian Warner <warner@lothar.com>
4371 * buildbot/process/builder.py (Builder.attached): serialize the
4372 attachment process, so the attach-watcher isn't called until the
4373 slave is really available. Add detached watchers too, which makes
4376 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4378 * buildbot/test/test_swap.py: remove dead code
4380 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4381 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4382 sort of as if the command being run exited with a -1. There may
4383 still be some holes in this scheme.
4384 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4385 -r option appears before the module list
4386 * buildbot/process/step.py (CVS): add 'revision' argument
4388 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4389 when sending updates or stepComplete messages to the master, since
4390 we don't currently care whether they arrive or not. When we revamp
4391 the master/slave protocol to really resume interrupted builds,
4392 this will need revisiting.
4393 (lostRemote): remove spurious print
4395 * buildbot/master.py (BotPerspective.attached): serialize the
4396 new-builder interrogation process, to make testing easier
4397 (BotMaster.waitUntilBuilderDetached): convenience function
4399 * buildbot/status/builder.py (BuilderStatus): prune old builds
4400 (BuildStatus.pruneSteps): .. and steps
4401 (BuildStepStatus.pruneLogs): .. and logs
4402 (BuilderStatus.getBuild): handle missing builds
4403 * buildbot/status/html.py (StatusResourceBuild.body): display build
4404 status in the per-build page
4405 (BuildBox.getBox): color finished builds in the per-build box
4407 2004-08-27 Brian Warner <warner@lothar.com>
4409 * buildbot/status/mail.py (MailNotifier): new notification class,
4412 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4413 variants of a common base class which handles all the mode= logic
4415 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4417 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4419 2004-08-26 Brian Warner <warner@lothar.com>
4421 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4424 * buildbot/test/test_run.py: update to new Logfile interface, new
4425 buildbot.slave modules
4426 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4428 * MANIFEST.in: new sample config file
4429 * docs/examples/hello.cfg: same
4431 * buildbot/process/step_twisted.py: remove dead import
4433 * buildbot/process/step.py (RemoteCommand.run): catch errors
4435 (RemoteCommand.remote_update): ignore updates that arrive after
4437 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4438 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4439 the responsibilities of the subclass's methods
4440 (BuildStep.failed): catch errors during failure processing
4441 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4442 (CVS): move to a mode= argument (described in docstring), rather
4443 than the ungainly clobber=/export=/copydir= combination.
4444 (SVN): add mode= functionality to SVN too
4445 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4447 * buildbot/process/base.py (Build.startNextStep): catch errors
4448 during s.startStep()
4450 * buildbot/clients/base.py: update to new PB client interface.
4451 gtkPanes is still broken
4453 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4454 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4455 * setup.py: add buildbot.slave module
4456 * buildbot/bb_tap.py: handle move
4457 * buildbot/slave/registry.py: place to register commands, w/versions
4458 * buildbot/slave/bot.py: major simplifications
4459 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4460 instead of a fixed table. Eventually this will make the slave more
4461 extensible. Use 'start' method on the command, not .startCommand.
4462 Fix unsafeTracebacks handling (I think).
4463 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4464 helper class with a .start method that returns a Deferred.
4465 SlaveShellCommand is the form reached by the buildmaster. Commands
4466 which use multiple ShellCommands can just chain them as Deferreds,
4467 with some helper methods in Command (_abandonOnFailure and
4468 _checkAbandoned) to bail on rc!=0.
4469 (CVSCommand): prefer new mode= argument
4470 (SVNFetch): add mode= argument
4472 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4473 put a useful reason string on the build
4475 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4476 core functionality into an IStatusLog object
4477 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4478 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4479 (StatusResourceBuild.body): use proper accessor methods
4480 * buildbot/status/client.py (RemoteLog): PB-access goes here
4481 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4482 which delivers log contents too
4483 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4484 * buildbot/status/event.py: remove old Logfile completely
4486 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4487 subscription interface for IStatusLog subscriptions just like all
4488 other the status subscriptions
4489 (IStatusReceiver.logChunk): method called on subscribers
4491 2004-08-24 Brian Warner <warner@lothar.com>
4493 * buildbot/process/builder.py (Builder._pong): oops, ping response
4494 includes a result (the implicit None returned by remote_print).
4495 Accept it so the _pong method handles the response correctly.
4497 2004-08-06 Brian Warner <warner@lothar.com>
4499 * buildbot/test/test_config.py: update IRC, PBListener tests
4501 * buildbot/status/client.py (StatusClientPerspective): total
4502 rewrite to match new IStatus interfaces. New subscription scheme.
4503 There are still a few optimizations to make (sending down extra
4504 information with event messages so the client doesn't have to do a
4505 round trip). The logfile-retrieval code is probably still broken.
4506 Moved the PB service into its own port, you can no longer share a
4507 TCP socket between a PBListener and, say, the slaveport (this
4508 should be fixed eventually).
4509 * buildbot/clients/base.py (Client): revamp to match. still needs
4510 a lot of work, but basic event reporting works fine. gtkPanes is
4513 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4514 instance talks to a single irc server. Threw out all the old
4515 multi-server handling code. Still need to add back in
4516 builder-control (i.e. "force build")
4518 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4519 more random text to the as-yet-unreachable per-step page
4521 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4522 rename to stepETAUpdate
4523 (BuildStatus.subscribe): add build-wide ETA updates
4524 (BuilderStatus.getState): remove more cruft
4525 (BuilderStatus.getCurrentBuild): remove more cruft
4526 (BuilderStatus.buildStarted): really handle tuple-subscription
4527 * buildbot/test/test_run.py (Status.testSlave): handle the
4528 stepETAUpdate rename
4530 * buildbot/master.py (BuildMaster): don't add a default
4531 StatusClientService. Don't add a default IrcStatusFactory. Both
4532 are now added through c['status'] in the config file. c['irc'] is
4533 accepted for backwards compatibility, the only quirk is you cannot
4534 use c['irc'] to specify IRC servers on ports other than 6667.
4536 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4537 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4538 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4539 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4542 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4543 the buildmaster to re-read its config file
4546 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4547 find out the port our server is running on
4548 (WebTest.test_webPathname_port): same
4550 * buildbot/test/test_config.py (testWebPortnum): test it
4551 (testWebPathname): ditto
4553 * docs/config.xhtml: document new c['status'] configuration option
4555 * buildbot/status/html.py (Waterfall): new top-level class which
4556 can be added to c['status']. This creates the Site as well as the
4557 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4558 reachable as .parent, for everything.
4560 * buildbot/master.py (Manhole): make it a normal service Child
4561 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4562 webPathname. It will eventually replace c['irc'] and the implicit
4563 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4564 in as (deprecated) backward compatibility hooks for now.
4567 * buildbot/process/builder.py (Builder.buildFinished): don't
4568 inform out builder_status about a finished build, as it finds out
4569 through its child BuildStatus object
4571 * buildbot/status/html.py: extensive revamp. Use adapters to make
4572 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4573 have both starting and finishing times and adjust the waterfall
4574 display accordingly, using spacers if necessary. Use SlaveStatus
4575 to get buildslave info.
4576 (StatusResourceBuildStep): new just-one-step resource, used to get
4577 logfiles. No actual href to it yet.
4579 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4580 the time being, until I get the file-naming scheme right
4582 * buildbot/status/builder.py (Event): clean started/finished names
4583 (BuildStatus.isFinished): .finished is not None is the right test
4584 (BuildStatus.buildStarted): track started/finished times ourselves
4585 (BuilderStatus.getSlave): provide access to SlaveStatus object
4586 (BuilderStatus.getLastFinishedBuild): all builds are now in
4587 .builds, even the currently-running one. Accomodate this change.
4588 (BuilderStatus.eventGenerator): new per-builder event generator.
4589 Returns BuildStepStatus and BuildStatus objects, since they can
4590 both be adapted as necessary.
4591 (BuilderStatus.addEvent): clean up started/finished attributes
4592 (BuilderStatus.startBuild,finishBuild): remove dead code
4593 (SlaveStatus): new object to provide ISlaveStatus
4595 * buildbot/process/step.py (ShellCommand.getColor): actually
4596 return the color instead of setting it ourselves
4597 (CVS.__init__): pull .timeout and .workdir options out of
4598 **kwargs, since BuildStep will ignore them. Without this neither
4599 will be sent to the slave correctly.
4600 (SVN.__init__): same
4602 * buildbot/process/builder.py (Builder): move flags to class-level
4604 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4605 SlaveStatus handle that
4607 * buildbot/process/base.py (Build.firstEvent): remove dead code
4608 (Build.stopBuild): bugfix
4610 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4612 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4613 (ChangeMaster.eventGenerator): yield Changes, since there are now
4614 Adapters to turn them into HTML boxes
4616 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4617 (BotPerspective.attached): feed a SlaveStatus object
4618 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4619 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4621 * buildbot/interfaces.py: API additions
4622 (ISlaveStatus): place to get slave status
4624 2004-08-04 Brian Warner <warner@lothar.com>
4626 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4627 the delay finishes, so the step is marked as SUCCESS
4629 * buildbot/test/test_run.py (Status.testSlave): cover more of
4630 IBuildStatus and IBuildStepStatus
4632 * buildbot/status/progress.py (StepProgress): move some flags to
4633 class-level attributes
4634 (StepProgress.remaining): if there are no other progress metrics
4635 to go by, fall back to elapsed time
4636 (StepProgress.setExpectations): take a dict of metrics instead of
4638 (BuildProgress.setExpectationsFrom): pull expectations from the
4639 Expectations, instead of having it push them to the BuildProgress
4640 (Expectations): move some flags to class-level attributes
4641 (Expectations.__init__): copy per-step times from the
4643 (Expectations.expectedBuildTime): new method for per-build ETA
4645 * buildbot/status/event.py (Logfile): move some flags to
4646 class-level attributes
4647 (Logfile.logProgressTo): better method name, let step set the
4648 progress axis name (instead of always being "output")
4650 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4651 times directly, rather than depending upon the (possibly missing)
4652 .progress object. Use 'None' to indicate "not started/finished
4654 (BuildStepStatus.getExpectations): oops, return the full list of
4656 (BuilderStatus._buildFinished): append finished builds to .builds
4658 * buildbot/process/step.py (BuildStep): add separate .useProgress
4659 flag, since empty .progressMetrics[] still implies that time is a
4661 (CVS): set up the cmd in __init__, instead of waiting for start()
4663 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4664 calculation, this will eventually turn into a proper sourceStamp
4665 (Build.setupBuild): tell the Progress to load from the Expectations,
4666 instead of having the Expectations stuff things into the Progress
4667 (Build.buildException): add a build-level errback to make sure the
4668 build's Deferred fires even in case of exceptions
4670 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4672 * buildbot/process/builder.py (Builder.forceBuild): convey the
4673 reason instead of creating a fake Change
4675 * docs/examples/twisted_master.cfg: update to match reality
4677 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4678 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4679 fix or remove broken/breaking tests
4681 * buildbot/status/event.py (Logfile.__len__): remove evil method
4683 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4684 missing .build, for test convenience
4686 * buildbot/process/step_twisted.py: import fixes
4688 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4690 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4691 .statusbag reference
4693 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4694 connection at shutdown, and stop it from reconnecting
4696 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4697 chase down remote-execution bugs
4699 * buildbot/process/step.py: more fixes, remove
4700 BuildStep.setStatus()
4701 * buildbot/status/builder.py: move setStatus() functionality into
4703 * buildbot/status/event.py: minor fixes
4705 2004-08-03 Brian Warner <warner@lothar.com>
4707 * buildbot/process/base.py, buildbot/process/builder.py
4708 * buildbot/process/step.py, buildbot/status/builder.py
4709 * buildbot/status/event.py, buildbot/test/test_run.py:
4710 fix status delivery, get a basic test case working
4711 * buildbot/master.py: finish implementing basic status delivery,
4712 temporarily disable HTML/IRC/PB status sources
4714 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4716 * buildbot/status/progress.py (BuildProgress): remove dead code
4718 * buildbot/interfaces.py
4719 * buildbot/process/base.py, buildbot/process/builder.py
4720 * buildbot/process/step.py, buildbot/process/step_twisted.py
4721 * buildbot/status/builder.py: Complete overhaul of the all
4722 status-delivery code, unifying all types of status clients (HTML,
4723 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4724 look like. This commit is a checkpointing of the work-in-progress:
4725 the input side is mostly done (Builders/Builds sending status
4726 to the BuilderStatus/BuildStatus objects), but the output side has
4727 not yet been started (HTML resources querying BuilderStatus
4728 objects). Things are probably very broken right now and may remain
4729 so for several weeks, I apologize for the disruption.
4731 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4732 HTML as the log's contents. Currently used for exception tracebacks.
4733 * buildbot/status/progress.py: minor spelling changes
4735 2004-08-02 Brian Warner <warner@lothar.com>
4737 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4738 in mozilla. Also added stylesheets copied from Twisted's docs.
4739 Remember that these files are meant to be run through Lore first.
4740 Thanks to Philipp Frauenfelder for the fixes.
4741 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4742 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4743 * docs/template.tpl: added a Lore template
4745 2004-07-29 Brian Warner <warner@lothar.com>
4747 * buildbot/interfaces.py: revamp status delivery. This is the
4748 preview: these are the Interfaces that will be provided by new
4749 Builder code, and to which the current HTML/IRC/PB status
4750 displayers will be adapted.
4752 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4753 on the SlaveBuilder, not the Bot.
4754 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4756 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4757 set .usePTY on the FakeSlaveBuilder
4759 2004-07-25 Brian Warner <warner@lothar.com>
4761 * buildbot/changes/freshcvs.py: add some debug log messages
4762 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4763 disabled 'setFilter' syntax
4764 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4765 don't end with a slash
4767 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4769 * setup.py: bump to 0.5.0+ while between releases
4771 2004-07-23 Brian Warner <warner@lothar.com>
4773 * setup.py (version): Releasing buildbot-0.5.0
4775 2004-07-23 Brian Warner <warner@lothar.com>
4777 * README: update for 0.5.0 release
4779 * NEWS: update for 0.5.0 release
4781 2004-07-22 Brian Warner <warner@lothar.com>
4783 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4784 mktap-time configuration flag (--usepty=1, --usepty=0)
4785 * buildbot/bot.py: same
4787 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4788 an 'info' directory being unwanted
4790 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4791 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4792 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4793 and earlier), use a FreshCVSSourceOldcred instead.
4794 (test): simple test routine: connect to server, print changes
4796 * buildbot/changes/changes.py (Change.getTime): make it possible
4797 to print un-timestamped changes
4799 * buildbot/master.py (makeApp): delete ancient dead code
4800 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4801 * buildbot/test/test_config.py (testFindConfigFile): test it
4803 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4804 instead of win32 one
4807 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4808 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4811 * buildbot/process/base.py (Builder.__init__): change constructor
4812 to accept a dictionary of config data, rather than discrete
4813 name/slave/builddir/factory arguments
4815 * docs/examples/twisted_master.cfg: update to new syntax
4816 * docs/examples/glib_master.cfg: same
4817 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4818 rough tests of the new syntax
4821 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4822 to be an int, which means "run a web.distrib sub-server on a TCP
4823 port". This lets you publish the buildbot status page to a remote
4824 twisted.web server (using distrib.ResourceSubscription). Also
4825 rename the local attributes used to hold these web things so
4826 they're more in touch with reality.
4827 * buildbot/test/test_web.py: test webPortnum and webPathname
4828 * docs/config.xhtml: document this new use of webPathname
4830 * docs/config.xhtml: new document, slightly ahead of reality
4832 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4833 'prefix' handling: treat it as a simple string to check with
4834 .startswith, instead of treating it as a directory. This allows
4835 sub-directories to be used. If you use prefix=, you should give it
4836 a string that starts just below the CVSROOT and ends with a slash.
4837 This prefix will be stripped from all filenames, and filenames
4838 which do not start with it will be ignored.
4840 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4842 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4843 and --exclude (inverse of --include). SVN post-commit hooks
4844 now have total control over which changes get sent to buildbot and which
4847 2004-07-10 Brian Warner <warner@lothar.com>
4849 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4850 test case to match new API
4852 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4853 which crashed HTML display when self.entries=[] (needed to
4854 distinguish between [], which means "no entries yet", and None,
4855 which means "the entries have been swapped out to disk, go fetch
4858 2004-07-04 Brian Warner <warner@lothar.com>
4860 * buildbot/process/step_twisted.py (countFailedTests): Count
4861 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4862 10kb from the end because any import errors are wedged there and
4863 they would make us think the test log was unparseable.
4864 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4866 2004-06-26 Brian Warner <warner@lothar.com>
4868 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4869 delete-*.pyc command into an actual BuildStep, so we can label it
4871 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4872 (FullTwistedBuildFactory): same
4874 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4876 * contrib/fakechange.py: Add an errback when sending the fake
4877 change, so we know it didn't work.
4879 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4881 * buildbot/process/step_twisted.py: Delete *.pyc files before
4882 calling trial, so it doesn't catch any old .pyc files whose .py
4883 files have been moved or deleted.
4885 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4886 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4887 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4888 instead of ["twisted.test"], so that the end result is "trial -R
4891 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4892 regular expression to match filenames that should be ignored when
4893 changed. Also add a --revision parameter that specifies the
4894 revision to examine, which is useful for debugging.
4896 2004-06-25 Brian Warner <warner@lothar.com>
4898 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4899 summary of warnings (like DeprecationWarnings), next to the
4902 2004-05-13 Brian Warner <warner@lothar.com>
4904 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4905 we now have a w32 build slave courtesy of Mike Taylor.
4907 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4908 so broken. Fixed a race condition that tripped up interlocked
4909 builds and caused the status to be stuck at "Interlocked" forever.
4910 The twisted buildbot's one interlocked build just so happened to
4911 never hit this case until recently (the feeding builds both pass
4912 before the interlocked build is attempted.. usually it has to wait
4914 (Builder._pong_failed): fix method signature
4916 * setup.py: bump to 0.4.3+ while between releases
4918 2004-04-30 Brian Warner <warner@lothar.com>
4920 * setup.py (version): Releasing buildbot-0.4.3
4922 2004-04-30 Brian Warner <warner@lothar.com>
4924 * MANIFEST.in: add the doc fragments in docs/*.xhtml
4926 * README: update for 0.4.3 release
4928 * NEWS: update for 0.4.3 release
4930 * buildbot/master.py (BuildMaster.__getstate__): make sure
4931 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4933 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4934 .trial as a class attribute, for upgrade from 0.4.2
4936 * buildbot/changes/changes.py (Change.links): add .links for
4939 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4940 .textWatchers and .htmlWatchers at save time, since they are both
4941 volatile, should allow smooth 0.4.2 upgrade
4943 * buildbot/process/step.py (CVS.finishStatus): catch failed
4944 CVS/SVN commands so we can make the status box red
4946 2004-04-29 Brian Warner <warner@lothar.com>
4948 * buildbot/changes/freshcvs.py
4949 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4950 code to do setFilter(), which tells the freshcvs daemon to not
4951 send us stuff that we're not interested in. I will uncomment it
4952 when a new version of CVSToys is available in which setFilter()
4953 actually works, and I get a chance to test it better.
4955 * docs/examples/twisted_master.cfg: start using a PBChangeSource
4957 * buildbot/master.py (Dispatcher): use a registration scheme
4958 instead of hardwired service names
4959 (BuildMaster): keep track of the Dispatcher to support
4962 * buildbot/changes/changes.py (ChangeMaster): create a distinct
4963 PBChangeSource class instead of having it be an undocumented
4964 internal feature of the ChangeMaster. Split out the code into a
4966 * buildbot/changes/pb.py (PBChangeSource): same
4967 * buildbot/test/test_changes.py: a few tests for PBChangeSource
4969 * docs/{factories|sources|steps}.xhtml: document some pieces
4971 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4972 using FCMaildirSource
4973 (f23osx): update OS-X builder to use python2.3, since the slave
4974 was updated to Panther (10.3.3)
4976 2004-03-21 Brian Warner <warner@lothar.com>
4978 * buildbot/process/process_twisted.py: factor out doCheckout, change
4979 to use SVN instead of CVS
4981 * buildbot/process/base.py (BasicBuildFactory): refactor to make
4982 an SVN subclass easier
4983 (BasicSVN): subclass which uses Subversion instead of CVS
4985 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
4987 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
4989 (CVSCommand.cvsComplete): don't assume chdir worked on win32
4991 2004-02-25 Brian Warner <warner@lothar.com>
4993 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
4994 is now either a list (which is passed to spawnProcess directly) or
4995 a string (which gets passed to /bin/sh -c). This removes the useSH
4996 flag and the ArgslistCommand class. Also send status header at the
4997 start and end of each command, instead of having the master-side
4999 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5000 -r'. Update to use list-based arguments.
5001 (SVNFetch): use list-based arguments, use ['dir'] argument to
5003 * buildbot/test/test_steps.py (Commands): match changes
5005 * buildbot/process/step.py (InternalShellCommand.words): handle
5007 (SVN): inherit from CVS, cleanup
5009 * buildbot/status/event.py (Logfile.content): render in HTML, with
5010 stderr in red and headers (like the name of the command we're
5011 about to run) in blue. Add link to a second URL (url + "?text=1")
5012 to get just stdout/stderr in text/plain without markup. There is
5013 still a problem with .entries=None causing a crash, it seems to occur
5014 when the logfile is read before it is finished.
5016 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5017 timeout to the keepalives, and use it to explicitly do a
5018 loseConnection instead of waiting for TCP to notice the loss. This
5019 ought to clear up the silent-lossage problem.
5020 (unsafeTracebacks): pass exception tracebacks back to the master,
5021 makes it much easier to debug problems
5023 2004-02-23 Brian Warner <warner@lothar.com>
5025 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5026 the whole command to /bin/sh instead of execve [Johan Dahlin]
5027 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5028 '-r HEAD' [Johan Dahlin]
5029 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5031 * buildbot/changes/changes.py (Change): add links= argument, add
5032 asHTML method [Johan Dahlin]. Modified to make a bit more
5033 XHTMLish. Still not sure how to best use links= .
5035 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5036 Change.asHTML to display the change, not asText
5038 * buildbot/status/html.py (StatusResourceBuilder): web button to
5041 * buildbot/test/test_run.py: test to actually start a buildmaster
5044 * MANIFEST.in: bring back accidentally-dropped test helper files
5046 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5047 that require cvstoys if it is not installed
5049 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5050 values of "bin/trial" [Dave Peticolas]
5051 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5052 tests passed" when we didn't happen to run any tests
5054 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5055 flunkOnFailure [Johan Dahlin]
5057 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5058 multiple instances of the same Step class by suffixing "_2", etc,
5059 to the name until it is unique. This name needs to be unique
5060 because it is used as a key in the dictionary that tracks build
5062 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5065 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5067 2004-01-14 Brian Warner <warner@lothar.com>
5069 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5070 kicked from a channel, log it
5072 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5073 something over whatever IRC channels the buildmaster is currently
5074 connected to. Added to try and track down a problem in which the
5075 master thinks it is still connected but the IRCd doesn't see it. I
5076 used a styles.Versioned this time, so hopefully users won't have
5077 to rebuild their .tap files this time.
5078 * contrib/debug.glade: add a "Poke IRC" button
5079 * contrib/debugclient.py: same
5081 * setup.py: bump to 0.4.2+ while between releases
5083 2004-01-08 Brian Warner <warner@lothar.com>
5085 * setup.py (version): Releasing buildbot-0.4.2
5087 2004-01-08 Brian Warner <warner@lothar.com>
5089 * NEWS: update for 0.4.2 release
5091 * README: document how to run the tests, now that they all pass
5093 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5095 * buildbot/process/step.py (CVS): add a global_options= argument,
5096 which lets you set CVS global options for the command like "-r"
5097 for read-only checkout, or "-R" to avoid writing in the
5099 * buildbot/slavecommand.py (CVSCommand): same
5101 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5102 testing easier (it is turned off when testing, to avoid the
5105 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5106 to make it easier to test: break generateStepID() out to a
5107 separate function, only update statusbag if it exists.
5108 (ShellCommands): create useful text for dict-based commands too.
5110 * test/*, buildbot/test/*: move unit tests under the buildbot/
5112 * setup.py (packages): install buildbot.test too
5114 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5115 * buildbot/test/test_steps.py: fix it, tests pass now
5117 2004-01-06 Brian Warner <warner@lothar.com>
5119 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5120 freshcvs mail uses a slightly different syntax for new
5121 directories. Update parser to handle either.
5122 * test/test_mailparse.py (Test1.testMsg9): test for same
5124 2003-12-21 Brian Warner <warner@lothar.com>
5126 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5127 'warnOnWarnings' so that lintian errors mark the build orange
5129 2003-12-17 Brian Warner <warner@lothar.com>
5131 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5132 messages emitted by Bonsai, contributed by Stephen Davis.
5134 * test/*: moved all tests to use trial instead of unittest. Some
5135 still fail (test_steps, test_slavecommand, and test_process).
5137 * setup.py (version): bump to 0.4.1+ while between releases
5139 2003-12-09 Brian Warner <warner@lothar.com>
5141 * setup.py (version): Releasing buildbot-0.4.1
5143 2003-12-09 Brian Warner <warner@lothar.com>
5145 * NEWS: update for 0.4.1 release
5147 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5148 freebsd builder code a little bit
5150 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5151 don't try to compare attributes of different classes
5152 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5153 (MaildirSource.messageReceived): fix Change delivery
5155 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5156 into the config file's namespace before loading it, like the
5157 documentation claims it does
5158 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5159 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5160 daemon comes back online
5162 2003-12-08 Brian Warner <warner@lothar.com>
5164 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5165 so the example will work with online=0 as well
5167 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5168 fix the __implements__ line
5170 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5171 class a twisted.application.service.Service, use startService to
5174 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5175 directory fd instead of simple open(). I'm sure this used to work,
5176 but the current version of python refuses to open directories with
5179 2003-12-05 Brian Warner <warner@lothar.com>
5181 * setup.py (version): bump to 0.4.0+ while between releases
5183 2003-12-05 Brian Warner <warner@lothar.com>
5185 * setup.py (version): Releasing buildbot-0.4.0
5187 2003-12-05 Brian Warner <warner@lothar.com>
5189 * docs/examples/glib_master.cfg: replace old sample scripts with
5190 new-style config files
5191 * MANIFEST.in: include .cfg files in distribution tarball
5193 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5194 implement a dummy method to avoid the exception that occurs when
5195 freshcvs sends this to us.
5197 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5198 removed the method, as it broke reconnection. Apparently
5199 stopFactory is called each time the connection attempt fails. Must
5201 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5202 attribute before serialization, since without stopFactory the
5203 reconnect timer may still be active and they aren't serializable.
5205 * test/test_mailparse.py (ParseTest): test with 'self' argument
5207 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5208 argument, as these "functions" are invoked like methods from class
5209 attributes and therefore always get an instance as the first
5212 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5213 message: thanks to Stephen Davis for the catch
5215 2003-12-04 Brian Warner <warner@lothar.com>
5217 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5218 twisted's standard ReconnectingClientFactory. Handles both oldcred
5219 and newcred connections. Also has a bug-workaround for
5220 ReconnectingClientFactory serializing its connector when it
5223 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5224 pbutil. Replace makeApp stuff with proper newcred/mktap
5225 makeService(). Don't serialize Ephemerals on shutdown.
5227 * buildbot/changes/changes.py (ChangeMaster): make it a
5228 MultiService and add the sources as children, to get startService
5229 and stopService for free. This also gets rid of the .running flag.
5231 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5232 new pbutil, turn into a TCPClient at the same time (to get
5233 startService for free). Two variants exist: FreshCVSSourceOldcred
5234 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5235 yet, but when it does, we'll be ready).
5236 (FreshCVSSource.notify): handle paths which are empty after the
5237 prefix is stripped. This only happens when the top-level (prefix)
5238 directory is added, at the very beginning of a Repository's life.
5240 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5241 Now the only reconnecting code is in the factory where it belongs.
5242 (Builder.unsubscribe): unregister the disconnect callback when we
5243 delete the builder on command from the master (i.e. when the
5244 buildmaster is reconfigured and that builder goes away). This
5245 fixes a multiple-delete exception when the status client is shut
5247 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5250 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5251 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5253 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5255 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5256 a list of globs (ugh). The testdir will be searched for files
5257 named *.tests and run the tests in the order specified in each of
5258 those files. This allows for "dependancies" between tests to be
5261 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5262 argument to pass to run_maxq.py, instead of a glob.
5264 2003-10-17 Brian Warner <warner@lothar.com>
5266 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5267 files that live in the sandbox
5269 2003-10-15 Brian Warner <warner@lothar.com>
5271 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5272 spelling error in "docs" count-warnings output
5273 (HLint.start): stupid thinko meant .xhtml files were ignored
5275 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5276 tests now that cReactor is banished to the sandbox
5278 2003-10-10 Brian Warner <warner@lothar.com>
5280 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5281 scheme: now .xhtml are sources and .html are generated
5283 2003-10-08 Brian Warner <warner@lothar.com>
5285 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5286 we were ignoring the 'randomly' parameter.
5288 2003-10-01 Brian Warner <warner@lothar.com>
5290 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5291 posix, to kill sub-children of aborted slavecommands.
5293 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5294 Clean up initialization: lastBuildStatus remains None until the
5295 first build has been completed.
5297 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5298 None as a lastBuildStatus
5299 * buildbot/clients/gtkPanes.py: same
5301 * buildbot/status/client.py (StatusClientService): keep
5302 BuilderStatus objects in self.statusbags . These objects now live
5303 here in the StatusClientService and are referenced by the Builder
5304 object, rather than the other way around.
5305 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5306 * buildbot/process/base.py (Builder): same
5307 * test/test_config.py (ConfigTest.testBuilders): same
5309 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5310 an existing builder, leave the statusbag alone. This will preserve the
5313 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5314 hook. This will probably go away in favor of a class in upcoming
5317 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5318 serviceName from newcred FreshCVSNotifiee setup
5320 2003-09-29 Brian Warner <warner@lothar.com>
5322 * buildbot/process/process_twisted.py: switch to new reactor
5324 * docs/examples/twisted_master.cfg: same
5326 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5328 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5329 botmaster reference instead of the oldapp service lookup
5331 * buildbot/master.py (BuildMaster.__init__): give the
5332 StatusClientService a reference to the botmaster to make it easier to
5335 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5337 * buildbot/status/html.py (Box.td): escape hreffy things so you
5338 can have spaces in things like builder names
5339 (StatusResourceBuilder.body)
5340 (WaterfallStatusResource.body)
5341 (WaterfallStatusResource.body0): same
5343 2003-09-25 Brian Warner <warner@lothar.com>
5345 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5346 rearrange the builder list when adding or removing builders: keep
5347 them in the order the user requested.
5348 * test/test_config.py (ConfigTest.testBuilders): verify it
5350 * contrib/debug.glade: give the debug window a name
5352 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5353 now wait on multiple interlocks. Fix code relating to that.
5354 (Builder.checkInterlocks): same
5355 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5357 * buildbot/master.py (BuildMaster.loadConfig): move from
5358 deprecated pb.BrokerFactory to new pb.PBServerFactory
5359 * test/test_config.py (ConfigTest.testWebPathname): same
5361 * docs/examples/twisted_master.cfg: fix interlock declaration
5363 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5364 Interlocks to their Builders into interlock.py .
5365 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5367 * test/test_config.py (ConfigTest.testInterlocks): validate
5370 * buildbot/process/base.py (Builder.__init__): better comments
5371 * buildbot/process/interlock.py (Interlock.__repr__): same
5372 (Interlock.deactivate): add .active flag, move the code that
5373 attaches/detaches builders into the Interlock
5375 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5377 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5378 tests using the new run_maxq.py script, and reporting failures by
5381 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5382 tests, reporting their success or failure in a buildbot-friendly
5385 2003-09-24 Brian Warner <warner@lothar.com>
5387 * docs/examples/twisted_master.cfg: example of a new-style config
5388 file. This lives in the buildmaster base directory as
5391 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5392 button to make the master re-read its config file
5394 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5395 buildmaster configuration from a file. This file can be re-read
5396 later, and the buildmaster will update itself to match the new
5397 desired configuration. Also use new Twisted Application class.
5398 * test/Makefile, test/test_config.py: unit tests for same
5400 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5401 FreshCVSSources comparable, to support reload.
5402 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5404 * buildbot/process/base.py (Builder): make them comparable, make
5405 Interlocks easier to attach, to support reload. Handle
5406 re-attachment of remote slaves.
5407 * buildbot/process/interlock.py (Interlock): same
5409 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5410 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5411 buildmaster taps are now constructed with mktap.
5412 * buildbot/status/client.py (StatusClientService): same
5414 * buildbot/status/words.py: move to new Services, add support to
5415 connect to multiple networks, add reload support, allow nickname
5416 to be configured on a per-network basis
5418 2003-09-20 Brian Warner <warner@lothar.com>
5420 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5421 the freebsd builder, now that the machine has been upgraded and no
5422 longer has python2.2
5424 * setup.py (version): bump to 0.3.5+ while between releases
5426 2003-09-19 Brian Warner <warner@lothar.com>
5428 * setup.py (version): Releasing buildbot-0.3.5
5430 2003-09-19 Brian Warner <warner@lothar.com>
5432 * NEWS: add post-0.3.4 notes
5434 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5436 * MANIFEST.in: add contrib/*
5438 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5439 use a remote root now: cvs.twistedmatrix.com
5441 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5443 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5444 compatibility with old servers
5445 (FreshCVSSource.start): and provide a way to use it
5446 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5448 * docs/examples/twisted_master.py (twisted_app): update to new
5450 (twisted_app): listen on new ~buildbot socket
5451 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5453 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5454 to reduce cvs bandwidth (update instead of full checkout)
5456 2003-09-11 Brian Warner <warner@lothar.com>
5458 * contrib/fakechange.py: demo how to connect to the changemaster
5459 port. You can use this technique to submit changes to the
5460 buildmaster from source control systems that offer a hook to run a
5461 script when changes are committed.
5463 * contrib/debugclient.py: tool to connect to the debug port. You
5464 can use it to force builds, submit fake changes, and wiggle the
5467 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5468 'Dispatcher' realm to handle all the different kinds of
5469 connections and Perspectives: buildslaves, the changemaster port,
5470 the debug port, and the status client port. NewCredPerspectives
5471 now have .attached/.detached methods called with the remote 'mind'
5472 reference, much like old perspectives did. All the pb.Services
5473 turned into ordinary app.ApplicationServices .
5474 (DebugService): went away, DebugPerspectives are now created
5475 directly by the Dispatcher.
5476 (makeApp): changed interface a little bit
5478 * buildbot/changes/changes.py: newcred
5479 * buildbot/status/client.py: newcred
5481 * buildbot/clients/base.py: newcred client side changes
5482 * buildbot/bot.py: ditto
5484 * docs/examples/glib_master.py: handle new makeApp() interface
5485 * docs/examples/twisted_master.py: ditto
5487 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5488 base newcred Perspectives on. This should go away once Twisted
5489 itself provides something sensible.
5492 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5494 * contrib/svn_buildbot.py: A program that you can call from your
5495 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5496 when a change in an SVN repository has happened. See the top of
5497 the file for some minimal usage info.
5499 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5501 * buildbot/slavecommand.py (ArglistCommand): Add new
5502 ArglistCommand that takes an argument list rather than a string as
5503 a parameter. Using a st.split() for argv is very bad.
5505 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5506 update to a particular revision rather than always checking out
5507 (still not very smart about it, there may be cases where the
5508 checkout becomes inconsistent).
5510 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5512 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5513 SVN fetch support. It can checkout (not update!) a specified
5514 revision from a specified repository to a specified directory.
5516 * buildbot/status/progress.py (Expectations.update): Fix an
5517 obvious bug (apparently created by the change described in the
5518 previous ChangeLog message) by moving a check to *after* the
5519 variable it checks is defined.
5522 2003-09-08 Brian Warner <warner@lothar.com>
5524 * buildbot/status/progress.py (Expectations.update): hack to catch
5525 an exception TTimo sees: sometimes the update() method seems to
5526 get called before the step has actually finished, so the .stopTime
5527 is not set, so no totalTime() is available and we average None
5528 with the previous value. Catch this and just don't update the
5529 metrics, and emit a log message.
5531 2003-08-24 Brian Warner <warner@lothar.com>
5533 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5534 parameter to set copydir='original' in CVS commands.
5536 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5538 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5539 which tells the command to maintain a separate original-source CVS
5540 workspace. For each build, this workspace will be updated, then
5541 the tree copied into a new workdir. This reduces CVS bandwidth
5542 (from a full checkout to a mere update) while doubling the local
5543 disk usage (to keep two copies of the tree).
5545 2003-08-21 Brian Warner <warner@lothar.com>
5547 * buildbot/status/event.py (Logfile.addEntry): if the master web
5548 server dies while we're serving a page, request.write raises
5549 pb.DeadReferenceError . Catch this and treat it like a
5550 notifyFinish event by dropping the request.
5552 2003-08-18 Brian Warner <warner@lothar.com>
5554 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5555 (instead of blowing up) if a force-build command is given without
5558 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5559 don't blow up if there aren't yet any Changes in the list
5561 2003-08-02 Brian Warner <warner@lothar.com>
5563 * buildbot/bot.py (updateApplication): don't set the .tap name,
5564 since we shouldn't assume we own the whole .tap file
5566 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5567 'mktap buildbot' (without a subcommand) better
5569 2003-07-29 Brian Warner <warner@lothar.com>
5571 * buildbot/status/words.py
5572 (IrcStatusFactory.clientConnectionLost): when we lose the
5573 connection to the IRC server, schedule a reconnection attempt.
5575 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5576 use shutil.rmtree instead of forking off an "rm -rf" command.
5577 rmtree may take a while and will block until it finishes, so we
5578 use "rm -rf" if available.
5580 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5581 freebsd buildslave badly
5583 * setup.py (version): bump to 0.3.4+ while between releases
5585 2003-07-28 Brian Warner <warner@lothar.com>
5587 * setup.py (version): Releasing buildbot-0.3.4
5589 2003-07-28 Brian Warner <warner@lothar.com>
5591 * NEWS: update in preparation for release
5593 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5594 process.signalProcess instead of os.kill, to improve w32
5597 * docs/examples/twisted_master.py (twisted_app): turn off
5598 win32eventreactor: the tests hang the buildslave badly
5600 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5601 failed builds, since usually the failures are consistent
5603 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5604 add compileOpts/compileOpts2 to reactors build
5606 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5607 (twisted_app): use both default and win32eventreactor on w32 build.
5608 Use both default and kqreactor on freebsd build.
5610 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5611 add compileOpts2, which is put after the build_ext argument. w32
5612 needs "-c mingw32" here.
5614 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5615 touch .acqpath, it goes away in recent Twisted releases
5617 * docs/examples/twisted_master.py (twisted_app): use "python" for
5618 the w32 buildslave, not "python2.2"
5620 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5621 the directory exists.. should hush an exception under w32
5623 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5624 ProcessTerminated -provided values for signal and exitCode rather
5625 than parsing the unix status code directly. This should remove one
5626 more roadblock for a w32-hosted buildslave.
5628 * test/test_mailparse.py: add test cases for Syncmail parser
5630 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5631 temporary compatibility import. Note! Start importing
5632 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5634 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5636 2003-07-27 Brian Warner <warner@lothar.com>
5638 * NEWS: started adding new features
5640 * buildbot/changes/mail.py: start work on Syncmail parser, move
5641 mail sources into their own file
5643 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5644 as implementing IChangeSource
5645 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5647 * buildbot/interfaces.py: define the IChangeSource interface
5649 2003-07-26 Brian Warner <warner@lothar.com>
5651 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5653 2003-06-25 Brian Warner <warner@lothar.com>
5655 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5658 2003-06-17 Brian Warner <warner@lothar.com>
5660 * buildbot/status/words.py: clean up method usage to avoid error
5661 in silly IRC command
5662 (IrcStatusBot.emit_status): round off seconds display
5664 * buildbot/process/base.py (Build): delete the timer when saving
5665 to the .tap file, and restore it (if it should still be running)
5666 upon restore. This should fix the "next build in -34 seconds"
5667 messages that result when the master is restarted while builds are
5668 sitting in the .waiting slot. If the time for the build has
5669 already passed, start it very soon (in 1 second).
5671 * buildbot/status/words.py: more silly commands
5673 * README (REQUIREMENTS): add URLs to all required software
5675 * buildbot/status/words.py ('last'): mention results of, and time
5678 2003-05-28 Brian Warner <warner@lothar.com>
5680 * buildbot/status/words.py: add 'last' command
5681 (IrcStatusBot.emit_status): add current-small text to 'status' output
5683 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5684 (twisted_app): remove spaces from OS-X builder name
5686 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5687 * buildbot/status/words.py: IRC bot should actually be useful now
5689 2003-05-23 Brian Warner <warner@lothar.com>
5691 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5692 "slave information" from $(slavedir)/info/* . These files are
5693 maintained by the slave administrator, and describe the
5694 machine/environment that is hosting the slave. Information from
5695 them is put into the "Builder" HTML page. Still need to establish
5696 a set of well-known filenames and meanings for this data: at the
5697 moment, *all* info/* files are sent to the master, but only
5698 'admin' and 'host' are used on that end.
5699 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5700 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5701 * buildbot/master.py (BotPerspective.got_info): ditto
5703 2003-05-22 Brian Warner <warner@lothar.com>
5705 * setup.py (version): bump version to 0.3.3+ while between releases
5707 2003-05-21 Brian Warner <warner@lothar.com>
5709 * setup.py: Releasing buildbot-0.3.3
5711 2003-05-21 Brian Warner <warner@lothar.com>
5713 * NEWS: 0.3.3 news items
5715 * README: describe --keepalive and life behind a NAT box
5717 * buildbot/bot.py (Bot.connected): implement application-level
5718 keepalives to deal with NAT timeouts, turn them on with
5719 --keepalive option or when SO_KEEPALIVE doesn't work.
5721 * buildbot/master.py (BotPerspective): accept keepalives silently
5723 * buildbot/process/base.py (Build.buildException): CopiedFailures
5724 don't carry as much information as local ones, so don't try to
5725 create a big HTMLized version of them.
5727 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5728 log file when step fails due to an exception, such as when the slave
5731 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5732 --testmodule argument instead of grepping for test-case-name tags
5733 ourselves. Remove FindUnitTests code.
5734 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5736 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5738 2003-05-16 Brian Warner <warner@lothar.com>
5740 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5741 argument to allow things like CFLAGS=-O0 to be passed without relying
5742 upon /bin/sh processing on the slave.
5744 * buildbot/process/step.py (InternalShellCommand.start): send
5746 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5747 'split' instead of letting /bin/sh do it. This should also remove
5748 the need for /bin/sh on the buildslave, making it more likely to
5751 * buildbot/status/html.py: html-escape text in blamelist.
5752 Add "force build" button to the Builder page.
5754 * buildbot/process/step_twisted.py (countFailedTests): look at
5755 last 1000 characters for status line, as import errors can put it
5756 before the -200 point.
5758 2003-05-15 Brian Warner <warner@lothar.com>
5760 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5762 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5763 make 'clobber' a parameter, so it is possible to have builds which
5764 do full tests but do a cvs update instead of hammering the CVS
5765 server with a full checkout each build
5767 * buildbot/process/step.py (InternalShellCommand): bump default
5768 timeout to 20 minutes
5770 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5771 the master to trigger a build. Run it via manhole.
5773 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5774 allow slaves to trigger any build that they host, to make life
5775 easier for slave admins who are testing out new build processes
5777 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5778 don't flunk cReactor or qtreactor on failure, since they fail alot
5779 these days. Do warnOnFailure instead.
5781 * buildbot/process/base.py: change Builder.buildable from a list
5782 into a single slot. When we don't have a slave, new builds (once
5783 they make it past the timeout) are now merged into an existing
5784 buildable one instead of being queued. With this change, a slave
5785 which has been away for a while doesn't get pounded with all the
5786 builds it missed, but instead just does a single build.
5788 2003-05-07 Brian Warner <warner@lothar.com>
5790 * setup.py (version): bump version to 0.3.2+ while between releases
5792 2003-05-07 Brian Warner <warner@lothar.com>
5794 * setup.py: Releasing buildbot-0.3.2
5796 2003-05-07 Brian Warner <warner@lothar.com>
5798 * setup.py: fix major packaging error: include subdirectories!
5800 * NEWS: add changes since last release
5802 * README (REQUIREMENTS): update twisted/python dependencies
5804 * buildbot/status/builder.py (Builder.startBuild): change
5805 BuildProcess API: now they should call startBuild/finishBuild
5806 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5807 keeping a list of builds in the statusbag, to support other kinds of
5809 (Builder.addClient): send current-activity-small to new clients
5810 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5813 * buildbot/status/client.py: drop RemoteReferences at shutdown
5815 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5817 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5818 more debug messages for remote status client
5820 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5821 (.stepFailed): only fire the Deferred once, even if both
5822 stepComplete and stepFailed are called. I think this can happen if
5823 an exception occurs at a weird time.
5825 * buildbot/status/words.py: work-in-progress: IRC status delivery
5827 2003-05-05 Brian Warner <warner@lothar.com>
5829 * docs/examples/twisted_master.py (twisted_app): hush internal
5830 python2.3 distutils deprecation warnings
5831 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5832 add compileOpts= argument which inserts extra args before the
5833 "setup.py build_ext" command. This can be used to give -Wignore
5834 warnings, to hush some internal python-2.3 deprecation messages.
5836 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5837 the ['twisted.test'] default test case to make it easier to change
5840 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5841 * buildbot/clients/gtkPanes.py: ditto
5843 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5844 arg to collapse RunUnitTestsRandomly into RunUnitTests
5845 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5846 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5848 * buildbot/status/html.py (StatusResource): shuffle Resources
5849 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5850 would serve the waterfall display, but the internal links were
5851 only valid on the trailing-slash version. The correct behavior is
5852 for the non-slashed one to serve a Redirect to the slashed one.
5853 This only shows up when the buildbot page is hanging off another
5854 server, like a Twisted-Web distributed server.
5856 * buildbot/status/event.py (Event, RemoteEvent): make Events
5857 pb.Cacheable, with RemoteEvent as the cached version. This removes
5858 a lot of explicit send-an-update code.
5859 * buildbot/status/builder.py (Builder): remove send-update code
5860 * buildbot/status/client.py (ClientBuilder): remove send-update
5861 code, and log errors that occur during callRemote (mostly to catch
5862 InsecureJelly exceptions)
5864 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5865 run Lore with the same python used in the rest of the build
5867 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5869 * buildbot/process/step_twisted.py (HLint): accept 'python'
5870 argument. Catch rc!=0 and mark the step as failed. This marks the
5871 build orange ("has warnings").
5872 (RunUnitTestsJelly): move out to step_twisted2.py
5874 * buildbot/util.py (ignoreStaleRefs): add utility function
5876 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5877 don't fake ETA object, it's too hard to get right
5879 2003-05-02 Brian Warner <warner@lothar.com>
5881 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5883 2003-05-01 Brian Warner <warner@lothar.com>
5885 * buildbot/status/html.py (StatusResource.body): oops, I was
5886 missing a <tr>, causing the waterfall page to be misrendered in
5887 everything except Galeon.
5889 2003-04-29 Brian Warner <warner@lothar.com>
5891 * docs/examples/twisted_master.py: make debuild use python-2.2
5892 explicitly, now that Twisted stopped supporting 2.1
5894 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5895 handle tuple results too. I keep forgetting this, which suggests
5896 it needs to be rethought.
5898 * setup.py (setup): bump version to 0.3.1+ while between releases
5900 2003-04-29 Brian Warner <warner@lothar.com>
5902 * setup.py: Releasing buildbot-0.3.1
5904 2003-04-29 Brian Warner <warner@lothar.com>
5906 * README (SUPPORT): add plea to send questions to the mailing list
5908 * NEWS, MANIFEST.in: add description of recent changes
5910 * docs/examples/twisted_master.py: add the code used to create the
5911 Twisted buildmaster, with passwords and such removed out to a
5914 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5915 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5916 buildmasters to not require CVSToys be installed.
5917 * README, docs/examples/glib_master: update to match the change
5919 * buildbot/clients/base.py, buildbot/bot.py,
5920 buildbot/changes/changes.py, buildbot/pbutil.py: copy
5921 ReconnectingPB from CVSToys distribution to remove CVSToys
5922 dependency for build slaves and status clients. Buildmasters which
5923 use FreshCVSSources still require cvstoys be installed, of course.
5925 2003-04-25 Brian Warner <warner@lothar.com>
5927 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5928 runTestsRandomly arg to turn on trial -z
5930 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5931 experimental code to use trial's machine-parseable output to get
5932 more detailed test results. Still has some major issues.
5933 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5936 * buildbot/status/builder.py (Builder.setCurrentBuild):
5937 anticipating moving build history into statusbag, not used yet
5939 * buildbot/status/tests.py: code to centralize test results,
5940 doesn't work quite yet
5942 * buildbot/status/event.py (Event): use hasattr("setName") instead
5943 of isinstance for now.. need better long-term solution
5945 * buildbot/status/html.py: Remove old imports
5947 2003-04-24 Brian Warner <warner@lothar.com>
5949 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5950 ignore changes under doc/fun/ and sandbox/
5952 * buildbot/process/step_twisted.py: update pushEvent and friends.
5954 * buildbot/status/html.py (Box.td): replace event.buildername with
5955 event.parent.getSwappableName(). Needs more thought.
5957 * buildbot/status/builder.py (Builder): Replace pushEvent and
5958 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5959 Tell events they are being pruned with event.delete().
5961 * buildbot/process/base.py (Build): Remove Builder status-handling
5962 methods. s/pushEvent/setCurrentActivity/.
5964 * buildbot/process/step.py (BuildStep): clean up status delivery.
5965 Gouse builder.statusbag methods instead of intermediate builder
5966 methods. s/updateLastEvent/updateCurrentActivity/.
5967 s/finalizeLastEvent/finishCurrentActivity/. Use
5968 addFileToCurrentActivity for summaryFunction.
5970 * buildbot/status/event.py (Logfile): put data in a Swappable when
5972 (Event): add more setter methods. Remove .buildername, use .parent
5973 and getSwappableName instead (needs more thought).
5975 * buildbot/util.py (Swappable):
5976 * test/test_swap.py: don't bother setting filename at __init__
5977 time, do it later. Change setFilename args to take parent first,
5978 since it provides the most significant part of the filename.
5980 2003-04-23 Brian Warner <warner@lothar.com>
5982 * buildbot/status/event.py (Logfile.addEntry): append to previous
5985 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
5986 anticipating Swappable
5987 (InternalShellCommand.remoteUpdate): split out various log-adding
5988 methods so subclasses can snarf stdout separately
5990 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
5991 in anticipation of Swappable build logs
5992 (Builder.testsFinished): anticipating TestResults, still disabled
5994 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
5997 * buildbot/status/event.py (Logfile): add (disabled) support for
5998 Swappable, not ready for use yet
6000 * buildbot/util.py (Swappable): object which is swapped out to
6001 disk after some period of no use.
6002 * test/test_swap.py: test buildbot.utils.Swappable
6004 2003-04-14 Brian Warner <warner@lothar.com>
6006 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6007 periodic-build timer. Set the .periodicBuildTime on a builder
6008 instance to some number of seconds to activate it.
6010 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6012 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6013 a way that survives result tuples
6015 2003-04-12 Brian Warner <warner@lothar.com>
6017 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6018 return a dict instead of a tuple: allow summarizers to provide
6019 multiple summaries if they want
6020 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6021 (debuildSummarizer): summarize lintian warnings/errors
6023 2003-04-10 Brian Warner <warner@lothar.com>
6025 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6027 2003-04-09 Brian Warner <warner@lothar.com>
6029 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6030 empty summaries: happens when the tests fail so hard they don't emit
6031 a parseable summary line.
6033 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6034 Allow summaryFunction to return None to indicate no summary should
6037 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6038 writing to stale HTTP requests: notice when they disconnect and
6039 remove the request from the list. Also add CacheToFile from
6040 moshez, will be used later.
6042 2003-04-08 Brian Warner <warner@lothar.com>
6044 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6045 should be an int, not a list of strings
6047 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6048 if we weren't actually connected
6050 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6051 to show the tail end of the trial text output
6053 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6054 hook to summarize the results of a ShellCommand
6056 2003-04-07 Brian Warner <warner@lothar.com>
6058 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6059 twisted test suite code into a single class.
6060 * buildbot/process/process_twisted.py: same
6062 2003-04-04 Brian Warner <warner@lothar.com>
6064 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6066 * README (SLAVE): document use of mktap to create slave .tap file
6067 (REQUIREMENTS): describe dependencies
6069 * buildbot/bb_tap.py, buildbot/plugins.tml:
6070 * buildbot/bot.py (updateApplication): Add mktap support for creating
6071 buildslave .tap files
6073 2003-03-28 Brian Warner <warner@lothar.com>
6075 * buildbot/process/step.py (InternalShellCommand.finished): handle
6076 new tuple result values (fix embarrasing bug that appeared during
6079 2003-03-27 Brian Warner <warner@lothar.com>
6081 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6084 2003-03-25 Brian Warner <warner@lothar.com>
6086 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6087 to overall build status
6088 * buildbot/clients/base.py (Builder): improve event printing
6089 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6090 instead of generic ShellCommand
6091 (Build): Add .stopBuild, use it when slave is detached
6093 * buildbot/process/step.py (Configure,Test): give the steps their
6094 own names and status strings
6096 * buildbot/status/html.py (StatusResource): add "show" argument,
6097 lets you limit the set of Builders being displayed.
6099 2003-03-20 Brian Warner <warner@lothar.com>
6101 * buildbot/process/basic.py: removed
6103 2003-03-19 Brian Warner <warner@lothar.com>
6105 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6106 turn off process-docs by default
6108 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6109 when displaying build information without anything in allBuilds[]
6111 * buildbot/bot.py (makeApp): really take password from sys.argv
6113 2003-03-18 Brian Warner <warner@lothar.com>
6115 * buildbot/bot.py (buildApp): take password from sys.argv
6117 * README: replace with more useful text
6119 * setup.py: add a real one
6120 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6122 * docs/PyCon-2003/: added sources for PyCon paper.
6124 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6125 now Build objects control the process and Builder only handles
6126 slave stuff and distribution of changes/status. A new BuildFactory
6127 class creates Build objects on demand.
6129 Created ConfigurableBuild which takes a list of steps to run. This
6130 makes it a lot easier to set up a new kind of build and moves us
6131 closer to being able to configure a build from a web page.
6133 * buildbot/process/step_twisted.py, process_twisted.py: move to
6134 new model. A lot of code went away.
6136 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6137 send lots of empty progress messages to the client.
6139 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6141 2003-02-20 Brian Warner <warner@lothar.com>
6143 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6145 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6146 Twisted bug that prevented non-pty processes from working just got
6147 fixed, and the bug that leaks ptys is still being investigated.
6149 * buildbot/process/step.py (CVS): send timeout arg to slave
6151 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6152 builders coming and going
6153 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6154 from CVSToys, handle lost-buildmaster
6156 * buildbot/status/client.py (StatusClientService.removeBuilder):
6157 Clean up status client protocol: send builders (with references)
6158 as they are created, rather than sending a list and requiring the
6159 client to figure out which ones are new.
6160 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6161 attempts to force a build on an unknown builder
6163 2003-02-19 Brian Warner <warner@lothar.com>
6165 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6166 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6167 Twisted stops leaking them.
6168 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6169 builder goes to an idle state.
6171 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6172 I figure out why CVS commands hang without them, and/or I fix the
6173 hung-command timeout
6175 2003-02-16 Brian Warner <warner@lothar.com>
6177 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6178 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6179 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6180 GenerateDocs now that they are prefixed with WARNING:.
6182 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6183 use manual href target instead of request.childLink
6185 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6186 display every second, but update the ETA every 5 seconds (or
6187 whenever) as remote_progress messages arrive.
6190 2003-02-12 Brian Warner <warner@lothar.com>
6192 * *: import current sources from home CVS repository
6196 # add-log-time-format: add-log-iso8601-time-string