1 2006-06-02 Brian Warner <warner@lothar.com>
3 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
4 first six columns of 'svnlook' output, not just the first column,
5 since property changes appear in the other five. Thanks to Olivier
8 2006-06-01 Brian Warner <warner@lothar.com>
10 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
11 the fake build, so that title= has something to be set to
13 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
14 attribute of the "Build #NN" link in the yellow start-the-build
15 box to the build's reason. This means that you get a little
16 tooltip explaining why the build was done when you hover over the
17 yellow box. Thanks to Zandr Milewski for the suggestion.
19 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
20 (Box.setETA): handle ETA=None (by stopping the timer)
21 (Box.update): make the [soon] text less different than the usual
22 text, so the rest of the text doesn't flop around so much. It
23 would be awfully nice to figure out how to center this stuff.
24 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
26 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
27 by default, so that any ShellCommand which fails marks the overall
28 build as a failure. I should have done this from the beginning.
29 Add flunkOnFailure=False to the arguments if you want to turn off
32 2006-05-30 Brian Warner <warner@lothar.com>
34 * buildbot/clients/gtkPanes.py: add a third row: now it shows
35 last-build/current-build/current-step. Show what step is currently
36 running. Show ETA for both the overall build and the current step.
37 Update GTK calls to modern non-deprecated forms. There's still a
38 lot of dead code and debug noise to remove.
40 * buildbot/process/step_twisted.py (Trial): set the step name, so it
41 shows up properly in status displays
43 2006-05-28 Brian Warner <warner@lothar.com>
45 * buildbot/test/test_properties.py (Run.testInterpolate): on the
46 build we use to verify that WithProperties works:
48 ** set flunkOnFailure=True so that build failures get noticed
49 ** set workdir='.' so that the build succeeds, otherwise it is trying
50 to touch 'build/something', and 'build/' doesn't exist because
51 usually that's created by a Source step
52 ** set timeout=10, because Twisted-1.3.0 has a race condition that
53 this test somehow triggers, in which the 'touch' process becomes
54 a zombie and we wait for th etimeout before giving up on it.
56 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
57 to log the Build results and step logs to the twisted log.
58 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
59 what went wrong if a build was expected to succeed but didn't.
61 * buildbot/process/step_twisted.py (Trial): set the default
62 trialMode to '--reporter=bwverbose', which specifies verbose
63 black-and-white text. Back in twisted-1.3/2.0 days we had to use
64 '-to', but those are completely missing in modern Twisteds.
66 * buildbot/scripts/sample.cfg: make the sample Manhole config use
67 a localhost-only port, to encourage better security
69 * docs/buildbot.texinfo (Change Sources): mention
72 * .darcs-boring: add a Darcs boringfile
74 * README (REQUIREMENTS): stop claiming compatibility with
77 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
80 2006-05-27 Brian Warner <warner@lothar.com>
82 * buildbot/__init__.py: bump to 0.7.3+ while between releases
83 * docs/buildbot.texinfo: same
85 2006-05-23 Brian Warner <warner@lothar.com>
87 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
88 * docs/buildbot.texinfo: set version to match
89 * NEWS: update for 0.7.3
91 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
92 give a quick mapping from VC system to possible ChangeSources
93 (Build Properties): add 'buildername'
95 * buildbot/process/base.py (Build.setupStatus): oops, set
96 'buildername' and 'buildnumber' properties
97 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
100 2006-05-22 Brian Warner <warner@lothar.com>
102 * docs/buildbot.texinfo (Build Properties): explain the syntax of
103 property interpolation better
105 * README (INSTALLATION): remove old '-v' argument from recommended
108 * docs/buildbot.texinfo (ShellCommand): add docs for description=
109 and descriptionDone= arguments. Thanks to Niklaus Giger for the
112 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
113 'svnversion' instead of grepping the output of 'svn info', much
114 simpler and avoids CR/LF problems on windows. Thanks to Olivier
115 Bonnet for the suggestion.
116 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
117 require the WC_PATH argument, so run 'svnversion .' instead.
119 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
120 aren't supposed to have 'self' in their argument list
122 2006-05-21 Brian Warner <warner@lothar.com>
124 * buildbot/process/step.py (ShellCommand.start): make
125 testInterpolate pass. I was passing the uninterpolated command to
126 the RemoteShellCommand constructor
127 (ShellCommand._interpolateProperties): oops, handle non-list
128 commands (i.e. strings with multiple words separated by spaces in
129 them) properly, instead of forgetting about them.
131 * buildbot/test/test_properties.py (Run.testInterpolate): new test
132 to actually try to use build properties in a real build. This test
134 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
135 to start and evaluate builds
137 * buildbot/test/test__versions.py: add a pseudo-test to record
138 what version of Twisted/Python/Buildbot are running. This should
139 show up at the beginning of _trial_tmp/test.log, and exists to help
140 debug other problems.
142 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
143 a filename to be served as 'robots.txt' to discourage web spiders.
144 Adapted from a patch by Tobi Vollebregt, thanks!
145 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
146 (Waterfall.test_waterfall): tweak the way that filenames are put
147 into the config file, to accomodate windows pathnames better.
149 * docs/buildbot.texinfo (HTML Waterfall): document it
151 * buildbot/process/process_twisted.py
152 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
153 changed the build process. The new setup.py no longer takes the
155 (FullTwistedBuildFactory.__init__): same
156 (TwistedReactorsBuildFactory.__init__): same
158 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
159 be placed in the [hooks] section of the central repository (the
160 one that everybody pushes changes to).
162 2006-05-20 Brian Warner <warner@lothar.com>
164 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
165 .darcs-context file, use binary mode. I think this was causing a
166 Darcs failure under windows.
168 2006-05-19 Brian Warner <warner@lothar.com>
170 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
171 use a timezone string of +0000 and gmtime, since this timestamp is
172 sent to a buildmaster and %z is broken.
174 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
175 string and localtime, since this timestamp will only be consumed
176 locally, and %z is broken.
178 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
179 gmtime, since this timestamp is returned to the buildmaster, and
182 2006-05-18 Brian Warner <warner@lothar.com>
184 * NEWS: update in preparation for next release
186 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
187 setup-repository and do-we-have-the-vc-tools code into a separate
188 "helper" class, which sticks around in a single module-level
189 object. This seems more likely to continue to work in the future
190 than having it hide in the TestCase and hope that TestCases stick
191 around for a long time.
193 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
194 addremove' has been deprecated in recent versions of mercurial, so
197 2006-05-07 Brian Warner <warner@lothar.com>
199 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
200 operating under windows, move the file before opening it, since
201 you can't rename a file that somebody has open.
203 * buildbot/process/base.py (Build.setupBuild): if something goes
204 wrong while creating a Step, log the name and arguments, since the
205 error message when you get the number of arguments wrong is really
208 2006-05-06 Brian Warner <warner@lothar.com>
210 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
211 bugs in twisted-specific code not covered by my unit tests, this
212 time use 'cmd' argument instead of self.cmd
214 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
215 fix stupid braino: either use startwith or find()==0, not both.
216 (TwistedReactorsBuildFactory.__init__): another dumb typo
218 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
219 mark this test as TODO under windows, since process-killing seems
220 dodgy there. We'll come back to this later and try to fix it
223 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
224 and don't include a timezone
225 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
226 This should avoid the windows-with-verbose-timezone-name problem
228 (Patch.testPatch): add a test which runs 'patch' with less
229 overhead than the full VCBase.do_patch sequence, to try to isolate
230 a windows test failure. This one uses slave.commands.ShellCommand
231 and 'patch', but none of the VC code.
233 * buildbot/slave/commands.py (getCommand): use which() to find the
234 executables for 'cvs', 'svn', etc. This ought to help under
237 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
238 working directory before starting. If an earlier test failed, the
239 leftover directory would mistakenly flunk a later test.
240 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
241 Make sure that we use the right commandlines if which("tla") picks
242 up "tla.exe" (as it does under windows).
243 (TlaSupport.do_get): factor out this tla-vs-baz difference
244 (TlaSupport.vc_create): more tla-vs-baz differences
246 * buildbot/test/test_slavecommand.py
247 (ShellBase.testShellMissingCommand): stop trying to assert
248 anything about the error message: different shells on different
249 OSes with different languages makes it hard, and it really isn't
250 that interesting of a thing to test anyway.
252 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
253 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
254 "Panther"), because it has a bug which flunks a couple tests in
255 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
256 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
257 able to test that yet.
259 2006-04-30 Brian Warner <warner@lothar.com>
261 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
262 make sure child commands emit messages in english, so our regexps
263 will match. Thanks to Nikaus Giger for identifying the problems.
264 (VCBase._do_vctest_export_1): mode="export" is not responsible
265 for setting the "got_revision" property, since in many cases it is
266 not convenient to determine.
267 (SVNSupport.capable): when running 'svn --version' to check for
268 ra_local, we want error messages in english
269 * buildbot/test/test_slavecommand.py
270 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
271 to emit the error message in english
273 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
274 the environment with $LC_ALL="C" so that Commands which need to
275 parse the output of their child processes can obtain it in
277 (SVN.parseGotRevision): call "svn info" afterwards instead of
278 watching the output of the "svn update" or "svn checkout".
279 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
280 (Arch.parseGotRevision): same
281 (Bazaar.parseGotRevision): same
282 (Mercurial.parseGotRevision): same
284 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
285 $LC_ALL="C" when running commands under 'buildbot try', too
287 * buildbot/test/__init__.py: remove the global os.environ()
288 setting, instead we do it just for the tests that run commands and
289 need to parse their output.
291 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
292 remove the overly-short .timeout on this test, because non-DNotify
293 platforms must fall back to polling which happens at 10 second
294 intervals, so a 5 second timeout would never succeed.
296 2006-04-24 Brian Warner <warner@lothar.com>
298 * docs/buildbot.texinfo (Installing the code): update trial
299 invocation, SF#1469116 by Niklaus Giger.
300 (Attributes of Changes): updated branch-name examples to be
301 a bit more realistic, SF#1475240 by Stephen Davis.
303 * contrib/windows/buildbot2.bat: utility wrapper for windows
304 developers, contributed by Nick Trout (after a year of neglect..
307 * buildbot/test/test_vc.py (*.capable): store the actual VC
308 binary's pathname in VCS[vcname], so it can be retrieved later
309 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
310 strip out non-numeric timezone information, specifically the funky
311 German string that his system produced that confuses CVS.
312 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
313 allow Darcs tests to work on windows
314 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
315 procutils.which() everywhere, to allow tryclient to work under
316 windows. Also from Niklaus Giger, SF#1463394.
318 * buildbot/twcompat.py (which): move the replacement for a missing
319 twisted.python.procutils.which from test_vc.py to here, so it can
320 be used in other places too (specifically tryclient.py)
322 2006-04-23 Brian Warner <warner@lothar.com>
324 * buildbot/status/html.py (StatusResourceBuild.body): replace the
325 bare buildbotURL/projectName line with a proper DIV, along with a
326 CSS class of "title", from Stefan Seefeld (SF#1461675).
327 (WaterfallStatusResource.body0): remove the redundant 'table'
329 (WaterfallStatusResource.body): same. Also add class="LastBuild"
330 to the top-row TR, and class="Activity" to the second-row TR,
331 rather than putting them in the individual TD nodes.
333 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
334 'got_revision' build property for all VC systems that implement
335 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
337 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
338 to determine which revision we actually obtained
339 (CVS.parseGotRevision): implement this for CVS, which just means
340 to grab a timestamp. Not ideal, and it depends upon the buildslave
341 having a clock that is reasonably well syncronized with the server,
342 but it's better than nothing.
343 (SVN.parseGotRevision): implement it for SVN, which is accurate
344 (Darcs.parseGotRevision): same
345 (Arch.parseGotRevision): same
346 (Bazaar.parseGotRevision): same
347 (Mercurial.parseGotRevision): same
349 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
350 keep a record of all non-stdout/stderr/header/rc status updates,
351 for the benefit of RemoteCommands that send other useful things,
353 (Source.commandComplete): put any 'got_revision' status values
354 into a build property of the same name
357 * buildbot/process/step_twisted.py (Trial): update to deal with
358 new ShellCommand refactoring
360 * docs/buildbot.texinfo (Build Properties): document new feature
361 that allows BuildSteps to get/set Build-wide properties like which
362 revision was requested and/or checked out.
364 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
365 * buildbot/status/builder.py (BuildStatus.getProperty): implement
366 it. Note that this bumps the persistenceVersion of the saved Build
367 object, so add the necessary upgrade-old-version logic to include
368 an empty properties dict.
370 * buildbot/process/base.py (Build.setProperty): implement it
371 (Build.getProperty): same
372 (Build.startBuild): change build startup to set 'branch',
373 'revision', and 'slavename' properties at the right time
375 * buildbot/process/step.py (BuildStep.__init__): change setup to
376 require 'build' argument in a better way
377 (LoggingBuildStep): split ShellCommand into two pieces, for better
378 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
379 a single RemoteCommand that sends stdout/stderr status text. It
380 also provides the usual commandComplete / createSummary /
381 evaluateCommand / getText methods to be overridden...
382 (ShellCommand): .. whereas ShellCommand is specifically for
383 running RemoteShellCommands. Other shell-like BuildSteps (like
384 Source) can inherit from LoggingBuildStep instead of ShellCommand
385 (WithProperties): marker class to do build-property interpolation
386 (Source): inherit from LoggingBuildStep instead of ShellCommand
389 * buildbot/test/test_properties.py: test new functionality
391 2006-04-21 Brian Warner <warner@lothar.com>
393 * buildbot/test/test_vc.py: rename testBranch to
394 testCheckoutBranch to keep the tests in about the right
397 2006-04-18 Brian Warner <warner@lothar.com>
399 * docs/buildbot.texinfo (PBListener): improve cross-references
400 between PBListener and 'buildbot statusgui', thanks to John Pye
403 2006-04-17 Brian Warner <warner@lothar.com>
405 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
406 running under Twisted-1.3.0, otherwise skipped tests are reported
409 * all: use isinstance() instead of 'type(x) is foo', suggested by
412 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
413 oops, fix a brain-fade from the other week, when making the
414 addStep changes. I changed all the __init__ upcalls to use the
415 wrong superclass name.
416 (FullTwistedBuildFactory.__init__): same
417 (TwistedDebsBuildFactory.__init__): same
418 (TwistedReactorsBuildFactory.__init__): same
419 (TwistedBuild.isFileImportant): use .startswith for clarity,
420 thanks to Neal Norwitz for the suggestions.
422 * contrib/viewcvspoll.py: script to poll a viewcvs database for
423 changes, then deliver them over PB to a remote buildmaster.
425 * contrib/svnpoller.py: added script by John Pye to poll a remote
426 SVN repository (by running 'svn log') from a cronjob, and run
427 'buildbot sendchange' to deliver the changes to a remote
429 * contrib/svn_watcher.py: added script by Niklaus Giger (a
430 modification of svnpoller.py), same purpose, but this one loops
431 internally (rather than expecting to run from a cronjob) and works
433 * contrib/README.txt: same
435 2006-04-11 Brian Warner <warner@lothar.com>
437 * all: fix a number of incorrect names and missing imports, thanks
438 to Anthony Baxter for the patch.
439 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
440 remove unused buggy method.
441 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
442 comes from shutil, not "shutils"
443 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
444 (Arch.checkSlaveVersion): same
445 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
447 * buildbot/process/step_twisted2.py: add some missing imports
448 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
449 this code used to live in twisted.internet.defer
451 2006-04-10 Brian Warner <warner@lothar.com>
453 * buildbot/process/step.py (Mercurial): add Mercurial support
454 * buildbot/slave/commands.py (Mercurial): same
455 * buildbot/scripts/tryclient.py (MercurialExtractor): same
456 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
457 not yet tested, but 'try' support *is* covered
458 * docs/buildbot.texinfo (Mercurial): document it
460 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
461 some debugging messages (turned off)
462 * buildbot/test/test_vc.py: improve debug messages
464 2006-04-07 Brian Warner <warner@lothar.com>
466 * buildbot/test/test_vc.py (which): define our own which() in case
467 we can't import twisted.python.procutils, because procutils doesn't
470 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
471 of SlaveLocks for performance tests
473 * docs/examples/twisted_master.cfg: update to match current usage
475 * buildbot/changes/p4poller.py (P4Source): add new arguments:
476 password, p4 binary, pollinterval, maximum history to check.
477 Patch from an anonymous sf.net contributor, SF#1219384.
478 * buildbot/process/step.py (P4Sync.__init__): add username,
479 password, and client arguments.
480 * buildbot/slave/commands.py (P4Sync): same
482 2006-04-05 Brian Warner <warner@lothar.com>
484 * buildbot/process/factory.py (BuildFactory.addStep): new method
485 to add steps to a BuildFactory. Use it instead of f.steps.append,
486 and you can probably avoid using the s() convenience function.
487 Patch from Neal Norwitz, sf.net #1412605.
488 (other): update all factories to use addStep
489 * buildbot/process/process_twisted.py: update all factories to use
492 2006-04-03 Brian Warner <warner@lothar.com>
494 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
495 work under windows too. Adapted from a patch by Niklaus Giger,
496 addresses SF#1463399.
498 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
499 spawned commands emit parseable results in english and not some
500 other language. Patch from Niklaus Giger, SF#1463395.
502 * README (INSTALLATION): discourage users from running unit tests on
503 a "network drive", patch from Niklaus Giger, SF#1463394.
505 2006-03-22 Brian Warner <warner@lothar.com>
507 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
508 function to turn a repository-relative pathname into a (branch,
509 branch-relative-filename) tuple. Change this function to handle
510 the branch naming policy used by your Subversion repository.
511 Thanks to AllMyData.com for sponsoring this work.
513 2006-03-16 Brian Warner <warner@lothar.com>
515 * buildbot/scripts/sample.cfg: add python-mode declaration for
516 vim. Thanks to John Pye for the patch.
518 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
519 command line, mention the importance of running 'crontab' as the
520 buildmaster/buildslave user. Thanks to John Pye for the catch.
522 2006-03-13 Brian Warner <warner@lothar.com>
524 * buildbot/status/words.py (IRC): add an optional password=
525 argument, which will be sent to Nickserv in an IDENTIFY message at
526 login, to claim the nickname. freenode requires this before the
527 bot can sent (or reply to) private messages. Thanks to Clement
528 Stenac for the patch.
529 * docs/buildbot.texinfo (IRC Bot): document it
531 * buildbot/status/builder.py (LogFile.merge): don't write chunks
532 larger than chunkSize. Fixes SF#1349253.
533 * buildbot/test/test_status.py (Log.testLargeSummary): test it
534 (Log.testConsumer): update to match new internal chunking behavior
536 2006-03-12 Brian Warner <warner@lothar.com>
538 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
540 * buildbot/test/test_maildir.py (MaildirTest): rename the
541 'timeout' method, as it collides with trial's internals
543 * buildbot/scripts/runner.py: add 'buildbot restart' command
544 (stop): don't sys.exit() out of here, otherwise restart can't work
545 * docs/buildbot.texinfo (Shutdown): document it
547 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
548 * buildbot/status/html.py (Waterfall.__init__): same
549 * buildbot/process/builder.py (Builder.startBuild): same
550 * buildbot/process/base.py (BuildRequest): same
551 * buildbot/sourcestamp.py (SourceStamp): same
552 * buildbot/scheduler.py (Nightly): same
554 * buildbot/__init__.py (version): bump to 0.7.2+ while between
556 * docs/buildbot.texinfo: same
558 2006-02-17 Brian Warner <warner@lothar.com>
560 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
561 * docs/buildbot.texinfo: set version number to match
562 * NEWS: update for 0.7.2
564 2006-02-16 Brian Warner <warner@lothar.com>
566 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
568 2006-02-09 Brian Warner <warner@lothar.com>
570 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
571 add text to explain per-build branch parameters
572 * NEWS: mention --umask
574 2006-02-08 Brian Warner <warner@lothar.com>
576 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
578 (SlaveOptions.optParameters): add --umask, to make it possible to
579 make buildslave-generated files (including build products) be
582 * buildbot/slave/bot.py (BuildSlave.startService): same
584 2006-01-23 Brian Warner <warner@lothar.com>
586 * buildbot/status/builder.py: urllib.quote() all URLs that include
587 Builder names, so that builders can include characters like '/'
588 and ' ' without completely breaking the resulting HTML. Thanks to
589 Kevin Turner for the patch.
590 * buildbot/status/html.py: same
591 * buildbot/test/test_web.py (GetURL.testBuild): match changes
593 * NEWS: update in preparation for upcoming release
595 2006-01-18 Brian Warner <warner@lothar.com>
597 * docs/examples/twisted_master.cfg: update to match the Twisted
598 buildbot: remove python2.2, switch to exarkun's buildslaves,
599 disable the .deb builder until we figure out how to build twisted
600 .debs from SVN, add some ktrace debugging to the OS-X build
601 process and remove the qt build, remove threadless builders,
602 change freebsd builder to use landonf's buildslave.
604 2006-01-12 Brian Warner <warner@lothar.com>
606 * buildbot/master.py (Manhole.__init__): let port= be a strports
607 specification string, but handle a regular int for backwards
608 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
609 used in master.cfg to limit connections to just the local host.
610 (BuildMaster.loadConfig): same for c['slavePortnum']
611 * buildbot/scheduler.py (Try_Userpass.__init__): same
612 * buildbot/status/client.py (PBListener.__init__): same
613 * buildbot/status/html.py (Waterfall.__init__): same, for both
614 http_port and distrib_port. Include backwards-compatibility checks
615 so distrib_port can be a filename string and still mean unix:/foo
616 * docs/buildbot.texinfo (Setting the slaveport): document it
617 (Debug options): same
618 (HTML Waterfall): same
621 * buildbot/test/test_config.py (ConfigTest): test it
623 * buildbot/master.py (BuildMaster.loadConfig): wait for the
624 slaveport's disownServiceParent deferred to fire before opening
625 the new one. Fixes an annoying bug in the unit tests.
627 2006-01-03 Brian Warner <warner@lothar.com>
629 * buildbot/master.py (BuildMaster): remove the .schedulers
630 attribute, replacing it with an allSchedulers() method that looks
631 for all IService children that implement IScheduler. Having only
632 one parent/child relationship means fewer opportunities for bugs.
633 (BuildMaster.allSchedulers): new method
634 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
635 also fix ugly bug that caused any config-file reload to
636 half-forget about the earlier Schedulers, causing an exception
637 when a Change arrived and was handed to a half-connected
638 Scheduler. The exception was in scheduler.py line 54ish:
639 self.parent.submitBuildSet(bs)
640 exceptions.AttributeError: 'NoneType' object has no attribute
642 (BuildMaster.addChange): update to use allSchedulers()
644 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
645 to work properly with twisted-1.3.0, where you must explicitly
646 include the __implements__ from parent classes
647 (BaseScheduler.__repr__): make it easier to distinguish distinct
649 (BaseUpstreamScheduler.__implements__): same
651 * buildbot/status/builder.py (Status.getSchedulers): update to
653 * buildbot/test/test_run.py (Run.testMaster): same
654 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
655 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
656 make sure Scheduler instances are left alone when an identical
657 config file is reloaded
658 (ConfigElements.testSchedulers): make sure Schedulers are properly
661 * Makefile (TRIALARGS): my local default Twisted version is now
662 2.1.0, update the trial arguments accordingly
664 2005-12-22 Brian Warner <warner@lothar.com>
666 * docs/examples/twisted_master.cfg: merge changes from pyr: add
669 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
670 addChange in the parent class, although I suspect this should be
671 fixed better in the future.
673 2005-11-26 Brian Warner <warner@lothar.com>
675 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
676 explode when branch==None, thanks to Kevin Turner for the catch
677 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
680 * buildbot/__init__.py (version): bump to 0.7.1+ while between
682 * docs/buildbot.texinfo: same
684 2005-11-26 Brian Warner <warner@lothar.com>
686 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
687 * docs/buildbot.texinfo: set version number to match
689 2005-11-26 Brian Warner <warner@lothar.com>
691 * NEWS: update for 0.7.1
693 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
694 sure that unsubscribe works even if we never sent an ETA update.
695 Also, don't explode on duplicate unsubscribe.
696 (BuildStepStatus.addLog): make the convenience "return self"-added
697 watcher automatically unsubscribe when the Step finishes.
698 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
699 (BuildStatus.stepStarted): same auto-unsubscribe
700 (BuilderStatus.buildStarted): same auto-unsubscribe
702 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
704 (IStatusReceiver.stepStarted): same
705 (IStatusReceiver.logStarted): same
707 * buildbot/test/test_run.py (Status): move the Status test..
708 * buildbot/test/test_status.py (Subscription): .. to here
710 2005-11-25 Brian Warner <warner@lothar.com>
714 * buildbot/locks.py: fix the problem in which loading a master.cfg
715 file that changes some Builders (but not all of them) can result
716 in having multiple copies of the same Lock. Now, the real Locks
717 are kept in a table inside the BotMaster, and the Builders/Steps
718 use "LockIDs", which are still instances of MasterLock and
719 SlaveLock. The real Locks are instances of the new RealMasterLock
720 and RealSlaveLock classes.
721 * buildbot/master.py (BotMaster.getLockByID): new method to
722 convert LockIDs into real Locks.
723 * buildbot/process/base.py (Build.startBuild): convert LockIDs
724 into real Locks before building
725 * buildbot/process/step.py (BuildStep.startStep): same
726 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
727 exercises the problem
730 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
731 what Schedulers are available
733 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
734 work by Dobes Vandermeer and hacked mercilessly by me. This offers
735 'cron'-style build scheduling at certain times of day, week,
737 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
739 * buildbot/scheduler.py (Scheduler): change fileIsImportant
740 handling: treat self.fileIsImportant more as an attribute that
741 contains a callable than as a method. If the attribute is None,
742 don't call it and assume all filenames are important. It is still
743 possible to provide a fileIsImportant method in a subclass,
745 (AnyBranchScheduler): handle fileIsImportant=None, previously it
747 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
748 test using AnyBranchScheduler with fileIsImportant=None
750 2005-11-24 Brian Warner <warner@lothar.com>
752 * buildbot/test/test_config.py (StartService): don't claim a fixed
753 port number, instead set slavePort=0 on the first pass, figure out
754 what port was allocated, then switch to a config file that uses
757 * buildbot/master.py (BuildMaster.loadConfig): close the old
758 slaveport before opening the new one, because unit tests might
759 replace slavePort=0 with the same allocated portnumber, and if we
760 don't wait for the old port to close first, we get a "port already
761 in use" error. There is a tiny race condition here, but the only
762 threat is from other programs that bind (statically) to the same
763 port number we happened to be allocated, and only if those
764 programs use SO_REUSEADDR, and only if they get control in between
767 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
769 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
770 deleted ChangeSources before adding any new ones
771 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
772 compare_attrs, to make sure that a config-file reload does not
773 unnecessarily replace an unmodified ChangeSource instance
774 * buildbot/test/test_config.py (ConfigTest.testSources): update
776 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
777 mean "don't build anything", and add a warning if it gets used
778 because it isn't actually useful.
780 * contrib/svn_buildbot.py: update example usage to match the port
781 number that gets used by the PBChangeSource
782 * buildbot/scripts/sample.cfg: add example of PBChangeSource
784 2005-11-22 Brian Warner <warner@lothar.com>
786 * NEWS: start collecting items for next release
788 * buildbot/process/step.py (SVN.computeSourceRevision): assume
789 revisions are strings
790 (P4Sync.computeSourceRevision): same
792 * buildbot/status/html.py (StatusResourceBuild.body): add a link
793 to the Buildbot's overall status page
794 (StatusResourceBuilder.body): same
796 2005-11-15 Brian Warner <warner@lothar.com>
798 * buildbot/master.py (BuildMaster.loadConfig): serialize the
799 config-file loading, specifically to make sure old StatusTargets
800 are finished shutting down before new ones start up (thus
801 resolving a bug in which changing the Waterfall object would fail
802 because both new and old instances were claiming the same
803 listening port). Also load new Schedulers after all the new
804 Builders are set up, in case they fire off a new build right away.
805 * buildbot/test/test_config.py (StartService): test it
807 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
808 the branch name to the mail body
810 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
811 Without it, a config-file reload fails to update an existing
813 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
814 username/passwd to compare_attrs, for the same reason
815 * buildbot/status/html.py (Waterfall): add favicon to
816 compare_attrs, same reason
818 2005-11-05 Brian Warner <warner@lothar.com>
820 * buildbot/scripts/tryclient.py (createJobfile): stringify the
821 baserev before stuffing it in the jobfile. This resolves problems
822 under SVN (and probably Arch) where revisions are expressed as
823 numbers. I'm inclined to use string-based revisions everywhere in
824 the future, but this fix should be safe for now. Thanks to Steven
825 Walter for the patch.
827 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
828 binary mode when opening pickle files, to make windows work
829 better. Thanks to Dobes Vandermeer for the catch.
830 * buildbot/status/builder.py (BuildStatus.saveYourself): same
831 (BuilderStatus.getBuildByNumber): same
832 (Status.builderAdded): same
833 * buildbot/master.py (BuildMaster.loadChanges): same
835 * buildbot/util.py (Swappable): delete unused leftover code
837 * buildbot/process/step.py (SVN): when building on a non-default
838 branch, add the word "[branch]" to the VC step's description, so
839 it is obvious that we're not building the usual stuff. Likewise,
840 when we are building a specific revision, add the text "rNNN" to
841 indicate what that revision number is. Thanks to Brad Hards and
842 Nathaniel Smith for the suggestion.
843 (Darcs.startVC): same
845 (Bazaar.startVC): same
847 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
848 typo, caught by Mark Dillavou, closes SF#1216636.
850 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
851 about a test to add some day
853 * docs/examples/twisted_master.cfg: update: bot1 can now handle
854 the 'full-2.3' build, and the 'reactors' build is now run under
855 python-2.4 because the buildslave no longer has gtk/etc bindings
856 for earlier versions.
858 2005-11-03 Brian Warner <warner@lothar.com>
860 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
861 method, takes an IBuildStatus and rebuilds it. It might make more
862 sense to add this to IBuildControl instead, but that instance goes
863 away completely once the build has finished, and resubmitting
864 builds can take place weeks later.
865 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
866 * buildbot/status/html.py (StatusResourceBuild): also stash an
867 IBuilderControl so we can use resubmitBuild.
868 (StatusResourceBuild.body): render "resubmit" button if we can.
869 Also add hrefs for each BuildStep
870 (StatusResourceBuild.rebuild): add action for "resubmit" button
871 (StatusResourceBuilder.getChild): give it an IBuilderControl
873 * buildbot/status/builder.py (Status.getURLForThing): change the
874 URL for BuildSteps to have a "step-" prefix, so the magic URLs
875 that live as targets of buttons like "stop" and "rebuild" can't
877 * buildbot/status/builder.py (Status.getURLForThing): same
878 * buildbot/status/html.py (StatusResourceBuild.getChild): same
879 (StepBox.getBox): same
880 * buildbot/test/test_web.py (GetURL): same
883 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
884 exclusivity checks after Source.__init__ upcall, so misspelled
885 arguments will be reported more usefully
886 (Darcs.__init__): same
888 2005-10-29 Brian Warner <warner@lothar.com>
890 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
891 builder. Move the Try scheduler off to a separate port.
893 2005-10-27 Brian Warner <warner@lothar.com>
895 * buildbot/clients/gtkPanes.py
896 (TwoRowClient.remote_builderRemoved): disappearing Builders used
897 to cause the app to crash, now they don't.
899 * buildbot/clients/debug.py: display the buildmaster's location
900 in the window's title bar
902 2005-10-26 Brian Warner <warner@lothar.com>
904 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
905 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
906 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
908 * buildbot/status/html.py (td): put a single non-breaking space
909 inside otherwise empty <td> elements, as a workaround for buggy
910 browsers which would optimize them away (along with any associated
911 styles, like the kind that create the waterfall grid borders).
912 Patch from Frerich Raabe.
914 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
915 argv-list as an argument, defaulting to ["-to"], which is
916 appropriate for the Trial that comes with Twisted-2.1.0 and
917 earlier. The Trial in current Twisted SVN wants
918 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
919 defaults to an empty list.
920 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
921 match it, now that trialMode= is a list instead of a single string
923 * buildbot/__init__.py (version): bump to 0.7.0+ while between
925 * docs/buildbot.texinfo: same
927 2005-10-24 Brian Warner <warner@lothar.com>
929 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
930 * docs/buildbot.texinfo: set version number to match
932 2005-10-24 Brian Warner <warner@lothar.com>
934 * README: update for 0.7.0
936 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
938 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
939 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
940 send the branch= argument unless the user really provided one, to
941 retain compatibility with older buildmasters that don't accept
943 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
946 * docs/buildbot.texinfo: update lots of stuff
948 * buildbot/scripts/runner.py (sendchange): add a --branch argument
949 to the 'buildbot sendchange' command
950 * buildbot/clients/sendchange.py (Sender.send): same
951 * buildbot/changes/pb.py (ChangePerspective): same
952 * buildbot/test/test_changes.py (Sender.testSender): test it
954 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
955 'default_branch' argument names to 'baseURL' and 'defaultBranch',
956 for consistency with other BuildStep arguments that use camelCase.
957 Well, at least more of them use camelCase (like flunkOnWarnings)
958 than don't.. I wish I'd picked one style and stuck with it
959 earlier. Annoying, but it's best done before the release, since
960 these arguments didn't exist at all in 0.6.6 .
962 * buildbot/test/test_vc.py (SVN.testCheckout): same
963 (Darcs.testPatch): same
964 * docs/buildbot.texinfo (SVN): document the change
965 (Darcs): same, add some build-on-branch docs
966 * docs/examples/twisted_master.cfg: match change
968 * buildbot/process/step.py (BuildStep): rename
969 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
970 how it is normally used.
971 * buildbot/test/test_steps.py (Version.checkCompare): same
973 * buildbot/process/step.py (CVS.startVC): refuse to build
974 update/copy -style builds on a non-default branch with an old
975 buildslave (<=0.6.6) that doesn't know how to do it properly. The
976 concern is that it will do a VC 'update' in an existing tree when
977 it is supposed to be switching branches (and therefore clobbering
978 the tree to do a full checkout), thus building the wrong source.
979 This used to be a warning, but I think the confusion it is likely
980 to cause warrants making it an error.
981 (SVN.startVC): same, also make mode=export on old slaves an error
982 (Darcs.startVC): same
983 (Git.startVC): improve error message for non-Git-enabled slaves
984 (Arch.checkSlaveVersion): same. continue to emit a warning when a
985 specific revision is built on a slave that doesn't pay attention
986 to args['revision'], because for slowly-changing trees it will
987 probably do the right thing, and because we have no way to tell
988 whether we're asking it to build the most recent version or not.
989 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
991 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
992 that 'master' is in host:portnum format, to catch errors sooner
994 2005-10-23 Brian Warner <warner@lothar.com>
996 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
997 when creating the list of warning messages, include the line
998 immediately after each WARNING: line, since that's usually where
999 the file and line number wind up.
1001 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1006 2005-10-22 Brian Warner <warner@lothar.com>
1008 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1009 patch from Brad Hards
1010 * buildbot/status/classic.css: same
1011 * buildbot/test/test_web.py (Waterfall): match changes
1013 * buildbot/test/test_steps.py (BuildStep.setUp): set
1014 nextBuildNumber so the test passes
1015 * buildbot/test/test_status.py (MyBuilder): same
1017 * buildbot/status/html.py (StatusResourceBuild.body): revision
1018 might be numeric, so stringify it before html-escapifying it
1019 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1020 timer for the upcoming build
1021 * buildbot/status/classic.css: add background-color attributes for
1022 offline/waiting/building classes
1024 * buildbot/status/builder.py (BuildStatus): derive from
1025 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1026 the default (i.e. unknown) .slavename to "???" instead of None,
1027 since even unknown slavenames need to be printed eventually.
1028 (BuilderStatus): also derive from styles.Versioned . More
1029 importantly, determine .nextBuildNumber at creation/unpickling
1030 time by scanning the directory of saved BuildStatus instances and
1031 choosing one larger than the highest-numbered one found. This
1032 should fix the problem where random errors during upgrades cause
1033 the buildbot to forget about earlier builds. .nextBuildNumber is
1034 no longer stored in the pickle.
1035 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1036 at least log the error. Also call Builder.determineNextBuildNumber
1037 once the basedir is set.
1039 * buildbot/master.py (BuildMaster.loadChanges): do
1040 styles.doUpgrade afterwards, in case I decide to make Changes
1041 derived from styles.Versioned some day and forget to make this
1045 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1046 when running under older pythons (<2.3) in which the shlex module
1047 doesn't have a 'split' function.
1049 * buildbot/process/step.py (ShellCommand.start): make
1050 errorMessages= be a list of strings to stuff in the log before the
1051 command actually starts. This makes it easier to flag multiple
1052 warning messages, e.g. when the Source steps have to deal with an
1054 (CVS.startVC): handle slaves that don't handle multiple branches
1055 by switching into 'clobber' mode
1056 (SVN.startVC): same. Also reject branches without base_url
1057 (Darcs.startVC): same. Also reject revision= in older slaves
1058 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1059 (Bazaar.startVC): same, and test for baz separately than for arch
1061 * buildbot/slave/commands.py (cvs_ver): document new features
1063 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1064 (BuildStep.slaveVersionNewEnough): more useful utility method
1065 * buildbot/test/test_steps.py (Version): start testing it
1067 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1068 the 'force' command requires python2.3, for the shlex.split method
1070 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1071 since we don't use it anymore. The Twisted buildbot uses a
1074 2005-10-21 Brian Warner <warner@lothar.com>
1076 * buildbot/process/process_twisted.py: rework all BuildFactory
1077 classes to take a 'source' step as an argument, instead of
1078 building up the SVN instance in the factory.
1079 * docs/examples/twisted_master.cfg: enable build-on-branch by
1080 providing a base_url and default_branch
1082 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1083 control over --branch and --revision, not that they are always
1085 * buildbot/status/html.py (StatusResourceBuilder.force): same
1086 (StatusResourceBuild.body): display SourceStamp components
1088 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1089 IRC 'force' command, so it can be shared with an eventual
1090 command-line-tool 'buildbot force' mode.
1091 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1093 2005-10-20 Brian Warner <warner@lothar.com>
1095 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1097 * docs/examples/twisted_master.cfg: update to use Schedulers
1099 * buildbot/scripts/sample.cfg: update with Schedulers
1101 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1102 method specifically for use by HTML "force build" button and the
1103 IRC "force" command. Raises an immediate error if there are no
1105 (IBuilderControl.requestBuild): make this just submit a build, not
1106 try to check for existing slaves or set up any when-finished
1107 Deferreds or anything.
1108 * buildbot/process/builder.py (BuilderControl): same
1109 * buildbot/status/html.py (StatusResourceBuilder.force): same
1110 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1111 * buildbot/test/test_slaves.py: same
1112 * buildbot/test/test_web.py: same
1114 2005-10-19 Brian Warner <warner@lothar.com>
1116 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1117 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1119 2005-10-18 Brian Warner <warner@lothar.com>
1121 * buildbot/status/html.py: provide 'status' argument to most
1122 StatusResourceFOO objects
1123 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1124 and Logfiles" section to make the Build page into a more-or-less
1125 comprehensive source of status information about the build
1127 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1128 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1130 2005-10-17 Brian Warner <warner@lothar.com>
1132 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1133 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1134 out what to do about other projects: the correct options for
1135 recent Twisteds will not work for older ones.
1137 2005-10-15 Brian Warner <warner@lothar.com>
1139 * buildbot/status/builder.py (Status.getURLForThing): add method
1140 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1141 use this in email/IRC status clients to make them more useful, by
1142 providing the end user with hints on where to learn more about the
1143 object being reported on.
1144 * buildbot/test/test_web.py (GetURL): tests for it
1146 2005-10-14 Brian Warner <warner@lothar.com>
1148 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1149 fix bug resulting from deferredResult changes
1151 2005-10-13 Brian Warner <warner@lothar.com>
1153 * buildbot/test/test_changes.py: remove use of deferredResult
1154 * buildbot/test/test_config.py: same
1155 * buildbot/test/test_control.py: same
1156 * buildbot/test/test_status.py: same
1157 * buildbot/test/test_vc.py: this is the only remaining use, since
1158 it gets used at module level. This needs to be replaced by some
1159 sort of class-level run-once routine.
1161 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1163 * lots: implement multiple slaves per Builder, which means multiple
1164 current builds per Builder. Some highlights:
1165 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1166 of (state,currentBuilds) instead of (state,currentBuild)
1167 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1168 (IBuildStatus.getSlavename): new method, so you can tell which
1169 slave got used. This only gets set when the build completes.
1170 (IBuildRequestStatus.getBuilds): new method
1172 * buildbot/process/builder.py (SlaveBuilder): add a .state
1173 attribute to track things like ATTACHING and IDLE and BUILDING,
1175 (Builder): .. the .slaves attribute here, which has been turned
1176 into a simple list of available slaves. Added a separate
1177 attaching_slaves list to track ones that are not yet ready for
1179 (Builder.fireTestEvent): put off the test-event callback for a
1180 reactor turn, to make tests a bit more consistent.
1181 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1182 ping fails due to an exception. This needs work, I'm worried that
1183 a code error could lead to a constantly re-connecting slave.
1184 Especially since I'm trying to move to a distinct remote_ping
1185 method, separate from the remote_print that we currently use.
1186 (BuilderControl.requestBuild): return a convenience Deferred that
1187 provides an IBuildStatus when the build finishes.
1188 (BuilderControl.ping): ping all connected slaves, only return True
1189 if they all respond.
1191 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1192 reconnect when we shut down.
1194 * buildbot/status/builder.py: implement new methods, convert
1195 one-build-at-a-time methods to handle multiple builds
1196 * buildbot/status/*.py: do the same in all default status targets
1197 * buildbot/status/html.py: report the build's slavename in the
1198 per-Build page, report all buildslaves on the per-Builder page
1200 * buildbot/test/test_run.py: update/create tests
1201 * buildbot/test/test_slaves.py: same
1202 * buildbot/test/test_scheduler.py: remove stale test
1204 * docs/buildbot.texinfo: document the new builder-specification
1205 'slavenames' parameter
1207 2005-10-12 Brian Warner <warner@lothar.com>
1209 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1210 report failure correctly, causing Dependent builds to run when
1211 they shouldn't have.
1212 * buildbot/status/builder.py (BuildSetStatus): same
1213 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1214 (Set.testSuccess): test the both-pass case too
1215 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1216 fix this test: it was ending too early, masking the failure before
1217 (Logger): specialized StatusReceiver to make sure the dependent
1218 builds aren't even started, much less completed.
1220 2005-10-07 Brian Warner <warner@lothar.com>
1222 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1223 bot.SlaveBuilder being disowned in the middle of a build
1225 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1226 this inherit from StatusReceiver. Also upcall in __init__. This
1227 fixes the embarrasing crash when the new buildSetSubmitted method
1228 is invoked and Waterfall/etc don't implement their own.
1229 * buildbot/test/test_run.py: add a TODO note about a test to catch
1230 just this sort of thing.
1232 * buildbot/process/builder.py (Builder.attached): remove the
1233 already-attached warning, this situation is normal. Add some
1234 comments explaining it.
1236 2005-10-02 Brian Warner <warner@lothar.com>
1238 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1239 OverflowError when setting up dnotify, because some 64-bit systems
1240 have problems with signed-vs-unsigned constants and trip up on the
1241 DN_MULTISHOT flag. Patch from Brad Hards.
1243 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1245 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1246 progressMetrics, description, descriptionDone to the 'parms' list,
1247 and make use the 'parms' list from the implementation class
1248 instead of only BuildStep to initialize the parameters. This
1249 allows buildbot.process.factory.s() to initialize all the parms,
1250 not just those defined in directly by BuildStep.
1252 2005-09-03 Brian Warner <warner@lothar.com>
1254 * NEWS: start adding items for the next release
1256 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1257 python2.2 tests, change 'Quick' builder to only use python2.3
1259 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1261 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1262 the "Ping Builder" button if the build control is available; the
1263 user sees an exception otherwise
1265 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1267 2005-09-01 Brian Warner <warner@lothar.com>
1269 * buildbot/interfaces.py (IBuilderStatus.getState): update
1270 signature, point out that 'build' can be None
1271 (IBuildStatus.getETA): point out ETA can be none
1273 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1275 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1277 2005-08-31 Brian Warner <warner@lothar.com>
1279 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1280 update to match correct signature: removed 'eta' argument
1281 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1283 2005-08-30 Brian Warner <warner@lothar.com>
1285 * buildbot/status/builder.py (LogFile): remove the assertion that
1286 blows up when you try to overwrite an existing logfile, instead
1287 just emit a warning. This case gets hit when the buildmaster is
1288 killed and doesn't get a chance to write out the serialized
1289 BuilderStatus object, so the .nextBuildNumber attribute gets out
1292 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1293 the 'buildbot sendchange' arguments, for the Darcs context file
1294 * docs/buildbot.texinfo (sendchange): document it
1296 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1297 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1298 (IStatus.getSchedulers): new method
1299 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1300 (Status.getSchedulers): implement
1301 * buildbot/process/builder.py (Builder): maintain
1302 BuilderStatus.pendingBuilds
1303 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1304 (TryBase.addChange): Try schedulers should ignore Changes
1306 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1307 for 'try' on CVS/SVN
1308 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1310 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1311 report status properly.
1312 (Try.createJob): implement unique buildset IDs
1314 * buildbot/status/client.py (StatusClientPerspective): add a
1315 perspective_getBuildSets method for the benefit of jobdir-style
1317 * docs/buildbot.texinfo (try): more docs
1318 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1321 2005-08-18 Brian Warner <warner@lothar.com>
1323 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1324 actually work. It's functional but still kind of clunky. Also, it
1325 only works with the pb-style.. needs to be made to work with the
1328 * buildbot/status/client.py (RemoteBuildSet): new class
1329 (RemoteBuildRequest): same
1330 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1331 object, not the internal BuildStatus object.
1332 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1333 outside of the usual buildStarted() return value.
1334 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1336 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1337 (Try_Userpass_Perspective.perspective_try): return a remotely
1338 usable BuildSetStatus object
1340 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1341 isStarted()/waitUntilStarted()
1343 2005-08-16 Brian Warner <warner@lothar.com>
1345 * buildbot/status/builder.py: implement IBuildSetStatus and
1346 IBuildRequestStatus, wire them into place.
1347 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1348 methods into the BuildSetStatus object.
1349 * buildbot/interfaces.py: same
1350 (IStatus.getBuildSets): new method to get pending BuildSets
1351 (IStatusReceiver.buildsetSubmitted): new method which hears about
1353 * buildbot/master.py (BuildMaster.submitBuildSet): same
1354 * buildbot/process/base.py (BuildRequest): same, replace
1355 waitUntilStarted with subscribe/unsubscribe
1356 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1357 subscribe instead of waitUntilStarted
1358 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1360 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1362 * buildbot/test/test_buildreq.py: update for new code
1363 * buildbot/test/test_control.py (Force.testRequest): same
1366 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1367 for Darcs to not use the tempfile module, so it works under
1368 python-2.2 too. We really didn't need the full cleverness of that
1369 module, since the slave has exclusive control of its own builddir.
1371 2005-08-15 Brian Warner <warner@lothar.com>
1373 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1374 for CVS trees. It doesn't work for non-trunk branches,
1376 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1379 * Makefile: make it easier to test against python2.2
1381 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1382 tearDown2, so things like Arch can unregister archives as they're
1383 shutting down. The previous subclass-override-tearDown technique
1384 resulted in a nested maybeWait() and test failures under
1387 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1388 where we can (Arch), add a branch= argument to set the branch used
1390 (BazExtractor): extract the branch too
1391 (TlaExtractor): same
1392 * buildbot/scripts/runner.py (TryOptions): add --branch
1393 * docs/buildbot.texinfo (try): document --branch/try_branch
1395 * buildbot/slave/commands.py (Darcs): implement get-revision for
1396 Darcs, so that 'try' will work. This requires the tempfile module
1399 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1400 of revisions, branches, and 'try' in the process.
1402 2005-08-11 Brian Warner <warner@lothar.com>
1404 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1405 this, it got broken at some point in the last few releases
1406 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1407 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1408 specifically the removal of ETA information from the tuple
1410 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1413 * docs/buildbot.texinfo (try): document both --builder and
1414 'try_builders' in .buildbot/options
1415 * buildbot/scripts/runner.py (TryOptions): add --builder,
1416 accumulate the values into opts['builders']
1417 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1418 * buildbot/test/test_runner.py (Try): add some quick tests to make
1419 sure 'buildbot try --options' and .buildbot/options get parsed
1420 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1421 use --builder control
1423 * docs/buildbot.texinfo (try): add --port argument to PB style
1425 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1426 actual SourceStamp. Still need to extract a branch name, somehow.
1427 (Try): finish implementing the try client side, still need a UI
1428 for specifying which builders to use
1429 (Try.getopt): factor our options/config-file reading
1430 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1432 * buildbot/test/test_vc.py: match SourceStampExtractor change
1434 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1435 causes the twisted log to be sent to stderr
1437 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1439 2005-08-10 Brian Warner <warner@lothar.com>
1441 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1442 style is 90% done, still missing status reporting or waiting for
1443 the buildsets to finish, and it is completely untested.
1445 * buildbot/trybuild.py: delete file, move contents to ..
1446 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1447 * buildbot/test/test_vc.py: match the move
1449 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1450 of the TryScheduler, no buildsetID or status-tracking support yet
1451 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1453 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1454 possible to set the basedir after __init__ time, so it is easier
1455 to use as a Service-child of the BuildMaster instance
1457 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1458 that delivers messages to its Service parent instead of requiring
1459 a subclass to be useful. This turns out to be much easier to build
1462 * buildbot/scripts/tryclient.py (createJob): utility code to
1463 create jobfiles, will eventually be used by 'buildbot try'
1465 2005-08-08 Brian Warner <warner@lothar.com>
1467 * docs/buildbot.texinfo (try): add docs on the
1468 as-yet-unimplemented Try scheduler
1470 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1471 * buildbot/test/test_scheduler.py: .. here
1472 (Scheduling.testTryJobdir): add placeholder test for 'try'
1474 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1475 addEntry merging (>=chunkSize) behavior
1476 (Log.testConsumer): update to handle new callLater(0) behavior
1478 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1479 both the MAX_LENGTH bugfix and the resumeProducing hang.
1481 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1482 put off the actual resumeProducing for a moment with
1483 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1484 causes large logfiles to hang midway through.
1486 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1487 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1488 and to improve memory usage when streaming the file out to a web
1490 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1491 make this work cleanly
1493 2005-08-03 Brian Warner <warner@lothar.com>
1495 * buildbot/trybuild.py: new file for 'try' utilities
1496 (getSourceStamp): run in a tree, find out the baserev+patch
1497 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1498 implemented for SVN and Darcs, still working on Arch. I don't know
1499 how to make CVS work yet.
1501 * docs/buildbot.texinfo: document the 'buildbot' command-line
1502 tool, including the not-yet-implemented 'try' feature, and the
1503 in-flux .buildbot/ options directory.
1505 2005-07-20 Brian Warner <warner@lothar.com>
1507 * buildbot/locks.py: added temporary id() numbers to Lock
1508 descriptions, to track down a not-really-sharing-the-Lock bug
1510 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1512 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1513 needed for python2.2 compatibility
1514 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1515 are from the __future__
1517 2005-07-19 Brian Warner <warner@lothar.com>
1519 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1520 message when schedulers use unknown builders
1522 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1523 SlaveLock('name') and MasterLock('name') are distinct
1525 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1526 c['schedulers'] in such a way that we can actually accept
1528 * buildbot/test/test_config.py: check it
1530 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1531 utility method to *all* the Schedulers
1532 (Periodic.listBuilderNames): same
1534 * docs/buildbot.texinfo (Interlocks): update chapter to match
1537 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1538 to make sure that c['sources'], c['schedulers'], and c['status']
1539 are all lists of the appropriate objects, and that the Schedulers
1540 all point to real Builders
1541 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1542 'listBuilderNames' utility method to support this
1543 * buildbot/scheduler.py: implement the utility method
1544 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1546 * docs/buildbot.texinfo: add some @cindex entries
1548 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1549 if it wasn't already set: most tla commands will fail unless one
1551 (Arch.createRepository): and disable bazaar's revision cache, since
1552 they cause test failures (the multiple repositories we create all
1553 interfere with each other through the cache)
1555 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1556 bring it properly up to date with twisted-2.0 test guidelines
1558 * buildbot/master.py (BuildMaster): remove references to old
1559 'interlock' module, this caused a bunch of post-merge test
1561 * buildbot/test/test_config.py: same
1562 * buildbot/process/base.py (Build): same
1564 * buildbot/test/test_slaves.py: stubs for new test case
1566 * buildbot/scheduler.py: add test-case-name tag
1567 * buildbot/test/test_buildreq.py: same
1569 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1570 unnecessary init code
1571 (Bot.remote_setBuilderList): match it
1573 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1575 * buildbot/changes/mail.py (parseSyncmail): update comment
1577 * buildbot/test/test_slavecommand.py: disable Shell tests on
1578 platforms that don't suport IReactorProcess
1580 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1581 all places where we open logfiles. It causes OS-X to open the file
1582 in some weird mode that that prevents us from mixing reads and
1583 writes to the same filehandle, which we depend upon to implement
1584 _generateChunks properly. This change doesn't appear to break
1585 win32, on which "b" and "t" are treated differently but a missing
1586 flag seems to be interpreted as "t".
1588 2005-07-18 Brian Warner <warner@lothar.com>
1590 * buildbot/slave/commands.py (ShellCommand): overhaul
1591 error-handling code, to try and make timeout/interrupt work
1592 properly, and make win32 happier
1593 * buildbot/test/test_slavecommand.py: clean up, stop using
1594 reactor.iterate, add tests for timeout and interrupt
1595 * buildbot/test/sleep.py: utility for a new timeout test
1597 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1598 code from the local-usebranches branch
1600 2005-07-17 Brian Warner <warner@lothar.com>
1602 * buildbot/process/process_twisted.py
1603 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1604 minutes, to match the other twisted BuildFactories, and don't
1605 excuse failures in c/qt/win32 reactors any more.
1607 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1608 'freebsd' builders, since the buildslaves have been unavailable
1611 2005-07-13 Brian Warner <warner@lothar.com>
1613 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1614 build-on-branch feature
1616 * buildbot/process/step.py (Darcs.__init__): add base_url and
1617 default_branch arguments, just like SVN
1618 (Arch.__init__): note that the version= argument is really the
1621 * buildbot/slave/commands.py (SourceBase): keep track of the
1622 repository+branch that was used for the last checkout in
1623 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1624 match, we clobber the directory and perform a fresh checkout
1625 rather than trying to do an in-place update. This should protect
1626 us against trying to get to branch B by doing an update in a tree
1627 obtained from branch A.
1628 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1629 (SVN.setup): same, just the svnurl
1630 (Darcs.setup): same, just the repourl
1631 (Arch.setup): same, arch coordinates (url), version, and
1632 buildconfig. Also pull the buildconfig from the args dictionary,
1633 which we weren't doing before, so the build-config was effectively
1635 (Arch.sourcedirIsUpdateable): don't try to update when we're
1636 moving to a specific revision: arch can't go backwards, so it is
1637 safer to just clobber the tree and checkout a new one at the
1639 (Bazaar.setup): same sourcedata as Arch
1641 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1642 use maybeWait, to work with twisted-1.3.0 and twcompat
1643 (Dependencies.testRun_Pass): same
1645 * buildbot/test/test_vc.py: rearrange, cleanup
1647 * buildbot/twcompat.py: add defer.waitForDeferred and
1648 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1649 can work under twisted-1.3.0 .
1651 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1652 now created at setUp time. This increases the runtime of the test
1653 suite considerably (from 91 seconds to 151), but it removes the
1654 need for an offline tarball, which should solve a problem I've
1655 seen where the test host has a different version of svn than the
1656 tarball build host. The new code also validates that mode=update
1657 really picks up recent commits. This approach will also make it
1658 easier to test out branches, because the code which creates the VC
1659 branches is next to the code which uses them. It will also make it
1660 possible to test some change-notification hooks, by actually
1661 performing a VC commit and watching to see the ChangeSource get
1664 2005-07-12 Brian Warner <warner@lothar.com>
1666 * docs/buildbot.texinfo (SVN): add branches example
1667 * docs/Makefile (buildbot.ps): add target for postscript manual
1669 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1670 * buildbot/test/test_locks.py: same
1672 * buildbot/process/step.py (Darcs): comment about default branches
1674 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1675 c['interlocks'] in the config file, complain if it is present.
1676 Scan all locks in c['builders'] to make sure the Locks they use
1678 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1679 add some tests to check for non-uniquely-named Locks
1680 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1681 since the unique-Lock validation code requires it now
1683 * buildbot/locks.py: fix test-case-name
1685 * buildbot/interlock.py: remove old file
1687 2005-07-11 Brian Warner <warner@lothar.com>
1689 * buildbot/test/test_interlock.py: rename to..
1690 * buildbot/test/test_locks.py: .. something shorter
1692 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1693 versions (after 2.0.1) changed internet.TCPClient to shut down the
1694 connection in stopService. Change the code to handle this
1697 * buildbot/process/base.py (Build): handle whole-Build locks
1698 * buildbot/process/builder.py (Builder.compareToSetup): same
1699 * buildbot/test/test_interlock.py: make tests work
1701 * buildbot/process/step.py (BuildStep.startStep): complain if a
1702 Step tries to claim a lock that's owned by its own Build
1703 (BuildStep.releaseLocks): typo
1705 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1706 file reloads don't replace unchanged Builders
1708 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1709 rewrite to cover new Locks instead of old c['interlocks']
1710 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1714 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1715 start the master and connect the buildslave
1717 * buildbot/process/step.py (FailingDummy.done): finish with a
1718 FAILURE status rather than raising an exception
1720 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1721 stringify a BuildRequest.reason that is None
1723 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1725 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1726 allow scheduler.Dependent to work
1727 * buildbot/buildset.py (BuildSet): set .reason and .results
1729 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1730 slaves, to make the test stop hanging. It still fails, of course,
1731 because I haven't even started to implement Locks.
1733 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1735 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1736 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1737 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1738 (Dependent): new class for downstream build dependencies
1739 * buildbot/test/test_dependencies.py: tests (still failing)
1741 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1743 2005-07-07 Brian Warner <warner@lothar.com>
1745 * buildbot/test/runutils.py (RunMixin): factored this class out..
1746 * buildbot/test/test_run.py: .. from here
1747 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1748 added new buildbot.locks tests (which all hang right now)
1749 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1750 * buildbot/process/step.py: claim/release per-BuildStep locks
1752 * docs/Makefile: add 'buildbot.html' target
1754 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1755 interpreted as "HEAD", so that all VC steps can accept branch=None
1756 and have it mean the "default branch".
1758 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1760 2005-07-07 Brian Warner <warner@lothar.com>
1762 * docs/examples/twisted_master.cfg: update to match current usage
1764 * docs/buildbot.texinfo (System Architecture): comment out the
1765 image, it doesn't exist yet and just screws up the HTML manual.
1767 2005-07-05 Brian Warner <warner@lothar.com>
1769 * debian/.cvsignore: oops, missed one. Removing leftover file.
1771 2005-06-17 Brian Warner <warner@lothar.com>
1773 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1774 changed its output in 1.2.0, don't mistakenly think that the
1775 subversion we find isn't capable of supporting our tests.
1777 * debian/*: remove the debian/ directory and its contents, to make
1778 life easier for the proper Debian maintainer
1780 * Makefile (release): same
1782 2005-06-07 Brian Warner <warner@lothar.com>
1784 * everything: create a distinct SourceStamp class to replace the
1785 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1786 Changed the signature of Source.startVC to include the revision
1787 information (instead of passing it through self.args). Implement
1788 branches for SVN (now only Darcs/Git is missing support). Add more
1791 2005-06-06 Brian Warner <warner@lothar.com>
1793 * everything: rearrange build scheduling. Create a new Scheduler
1794 object (configured in c['schedulers'], which submit BuildSets to a
1795 set of Builders. Builders can now use multiple slaves. Builds can
1796 be run on alternate branches, either requested manually or driven
1797 by changes. This changed some of the Status classes. Interlocks
1798 are out of service until they've been properly split into Locks
1799 and Dependencies. treeStableTimer, isFileImportant, and
1800 periodicBuild have all been moved from the Builder to the
1802 (BuilderStatus.currentBigState): removed the 'waiting' and
1803 'interlocked' states, removed the 'ETA' argument.
1805 2005-05-24 Brian Warner <warner@lothar.com>
1807 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1808 erroneously abandons the connection (in clientConnectionFailed)
1809 for non-UserErrors, which means that if we lose the connection due
1810 to a network problem or a timeout, we'll never try to reconnect.
1811 Fix this by not upcalling to the buggy parent method. Note:
1812 twisted-2.0 fixes this, but the function only has 3 lines so it
1813 makes more sense to copy it than to try and detect the buggyness
1814 of the parent class. Fixes SF#1207588.
1816 * buildbot/changes/changes.py (Change.branch): doh! Add a
1817 class-level attribute to accomodate old Change instances that were
1818 pickled before 0.6.5 (where .branch was added for new Changes).
1819 This fixes the exception that occurs when you try to look at an
1820 old Change (through asHTML).
1822 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1825 2005-05-23 Brian Warner <warner@lothar.com>
1827 * buildbot/__init__.py (version): release 0.6.6
1829 2005-05-23 Brian Warner <warner@lothar.com>
1831 * NEWS: update for 0.6.6 release
1832 * debian/changelog: same
1834 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1835 before starting: this was done by twistd back when we spawned it,
1836 now that we're importing the pieces and running them in the
1837 current process, we have to do it ourselves. This allows
1838 master.cfg to import files from the same directory without
1839 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1840 Stichele for the catch.
1841 (Options.opt_version): Add a --version command (actually, just make
1842 the existing --version command emit Buildbot's version too)
1844 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1845 fix to make this behave like other LogFiles, this time to handle
1846 existing LogFiles on disk. (add the missing .upgrade method)
1847 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1849 2005-05-21 Brian Warner <warner@lothar.com>
1851 * buildbot/test/test_runner.py (Create.testMaster): match the
1852 rawstring change in runner.py:masterTAC
1854 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1855 TwistedWords is installed
1856 * buildbot/test/test_status.py: same, with TwistedMail
1858 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1859 some old, deprecated, and removed config keys). This should enable
1860 you to use the base buildbot functionality with Twisted-2.0.0 when
1861 you don't also have TwistedWeb and TwistedWords installed
1863 2005-05-20 Brian Warner <warner@lothar.com>
1865 * buildbot/scripts/runner.py (run): call sendchange(), not
1866 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1867 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1868 (stop): don't wait for process to die when sending SIGHUP
1869 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1870 directory name gets interpreted, which you don't want
1873 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1876 2005-05-18 Brian Warner <warner@lothar.com>
1878 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1880 2005-05-18 Brian Warner <warner@lothar.com>
1882 * README: update for 0.6.5
1883 * debian/changelog: same
1885 * buildbot/changes/changes.py: rename tag= to branch=, since
1886 that's how we're using it, and my design for the upcoming "build a
1887 specific branch" feature wants it. also, tag= was too CVS-centric
1888 * buildbot/changes/mail.py (parseSyncmail): same
1889 * buildbot/process/base.py (Build.isBranchImportant): same
1890 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1891 * docs/buildbot.texinfo (Attributes of Changes): same
1893 * NEWS: update tag=, update for upcoming release
1895 2005-05-17 Brian Warner <warner@lothar.com>
1897 * buildbot/scripts/runner.py (stop): actually poll once per
1898 second, instead of re-killing the poor daemon once per second.
1899 Sleep briefly (0.1s) before the first poll, since there's a good
1900 chance we can avoid waiting the full second if the daemon shuts
1901 down quickly. Also remove the sys.exit() at the end.
1902 (start): remove the unneighborly sys.exit()
1904 * Makefile: improve permission-setting to not kick Arch so badly
1906 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1907 default --keepalive=600, since it doesn't hurt very much, and it's
1908 a hassle to discover that you need it.
1909 * buildbot/test/test_runner.py (Create.testSlave): test it
1911 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1912 IRC bot about EXCEPTION
1914 * buildbot/status/client.py (PBListener): upcall more correctly
1916 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1917 an exception mark the overall build with EXCEPTION, not SUCCESS
1919 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1921 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1922 * Makefile: update some release-related stuff
1924 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1925 gets called when there isn't actually an active process, just end
1926 the Command instead of blowing up. I don't know how it gets into
1927 this state, but the twisted win32 buildslave will sometimes hang,
1928 and when it shakes its head and comes back, it thinks it's still
1929 running a Command. The next build causes this command to be
1930 interrupted, but the lack of self.process.pid breaks the interrupt
1933 * NEWS: document changes since the last release
1935 * buildbot/scripts/runner.py (start): change 'buildbot start' to
1936 look for Makefile.buildbot instead of a bare Makefile . The
1937 'buildbot start' does not install this file, so you have to
1938 manually copy it if you want to customize startup behavior.
1939 (createMaster): change 'buildbot master' command to create
1940 Makefile.sample instead of Makefile, to create master.cfg.sample
1941 instead of master.cfg (requiring you to copy it before the
1942 buildmaster can be started). Both sample files are kept up to
1943 date, i.e. they are overwritten if they have been changed. The
1944 'buildbot.tac' file is *not* overwritten, but if the new contents
1945 don't match the old, a 'buildbot.tac.new' file is created and the
1946 user is warned. This seems to be a much more sane way to handle
1947 startup files. Also, don't sys.exit(0) when done, so we can run
1948 unit tests against it.
1949 (createSlave): same. Don't overwrite the sample info/ files.
1950 * buildbot/scripts/sample.mk: remove. the contents were pulled
1951 into runner.py, since they need to match the behavior of start()
1955 * docs/buildbot.texinfo (Launching the daemons): document it
1956 * buildbot/test/test_runner.py (Create): test it
1958 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1959 version that can handle string-in-string tests, because otherwise
1960 python-2.2 fails the tests. It'd be tremendous if Trial's test
1961 took two strings under 2.2 too.
1963 * everything: fixed all deprecation warnings when running against
1964 Twisted-2.0 . (at least all the ones in buildbot code, there are a
1965 few that come from Twisted itself). This involved putting most of
1966 the Twisted-version specific code in the new buildbot.twcompat
1967 module, and creating some abstract base classes in
1968 buildbot.changes.base and buildbot.status.base (which might be
1969 useful anyway). __implements__ is a nuisance and requires an ugly
1970 'if' clause everywhere.
1972 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1973 delay before finishing the test: it seems that smtp.sendmail
1974 doesn't hang up on the server, so we must wait a moment so it can
1975 hang up on us. This removes the trial warning about an unclean
1978 2005-05-16 Brian Warner <warner@lothar.com>
1980 * buildbot/process/step.py (Source): add 'retry' argument. It is a
1981 tuple of (delay, repeats).
1982 * buildbot/test/test_vc.py (Retry): test it
1983 * docs/buildbot.texinfo (Source Checkout): document it
1984 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1985 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1986 doVCFull() are handled by re-trying the checkout (after a delay)
1987 some number of times.
1988 (ShellCommand._startCommand): make header lines easier to read
1990 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1992 (WebTest.test_logfile): make sure master gets shut down, silences
1993 some "unclean reactor" test errors
1995 * buildbot/test/test_changes.py (Sender.tearDown): spin the
1996 reactor once after shutdown, something in certain versions of
1997 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1998 fails, svn-trunk is ok.
2000 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2001 second win32 error message
2003 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2004 validating the ETA, so the tests don't fail on slow systems
2006 2005-05-15 Brian Warner <warner@lothar.com>
2008 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2009 the new LogFile class, so upgrading works properly
2010 (LogFileProducer.resumeProducing): survive resumeProducing after
2011 we've exhausted the chunkGenerator
2013 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2015 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2016 (Log.testUpgrade): same
2018 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2019 Builds and logs with a cron job.
2021 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2022 of the old non-offline LogFile, added code to upgrade these to
2023 new-style contents-live-on-disk instances at load time (in a way
2024 that doesn't invalidate the old Build pickles, so upgrading to
2025 0.6.5 is not a one-way operation). Got rid of everything related
2027 (LogFile.__init__): create LogFiles with the parent step status,
2028 the log's name, and a builder-relative filename where it can keep
2029 the contents on disk.
2030 (LogFile.hasContents): new method, clients are advised to call it
2031 before getText or getChunks and friends. If it returns False, the
2032 log's contents have been deleted and getText() will raise an
2034 (LogFile.getChunks): made it a generator
2035 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2036 Consumer (except one that takes chunks instead of strings). This
2037 enables streaming of very large logfiles without storing the whole
2039 (BuildStatus.generateLogfileName): create names like
2040 12-log-compile-output, with a _0 suffix if required to be unique
2041 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2042 or earlier) logfiles into new-style ones
2043 (BuilderStatus): remove everything related to 'stub' builds. There
2044 is now only one build cache, and we don't strip logs from old
2046 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2047 since we no longer fight to keep it in the cache
2049 * buildbot/status/html.py (TextLog.render_GET): use a
2050 ChunkConsumer to stream the log entries efficiently.
2051 (ChunkConsumer): wrapper which consumes chunks and writes
2054 * buildbot/test/test_twisted.py (Parse.testParse): use a
2055 LogFile-like object instead of a real one
2057 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2058 (Log.testMerge3): validate more merge behavior
2059 (Log.testChunks): validate LogFile.getChunks
2060 (Log.testUpgrade): validate old-style LogFile upgrading
2061 (Log.testSubscribe): validate LogFile.subscribe
2062 (Log.testConsumer): validate LogFile.subscribeConsumer
2064 * buildbot/interfaces.py (IStatusLogStub): remove
2065 (IStatusLog.subscribeConsumer): new method
2066 (IStatusLog.hasContents): new method
2067 (IStatusLogConsumer): describes things passed to subscribeConsumer
2069 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2070 the log contents if it does not have any contents.
2071 (StatusResourceBuildStep.body): same
2072 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2074 2005-05-14 Brian Warner <warner@lothar.com>
2076 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2077 timeouts to try and make the windows metabuildslave not hang
2079 2005-05-13 Mike Taylor <bear@code-bear.com>
2081 * buildbot/slave/commands.py (rmdirRecursive): added a check
2082 to ensure the path passed into rmdirRecursive actually exists.
2083 On win32 a non-existant path would generate an exception.
2085 2005-05-13 Brian Warner <warner@lothar.com>
2087 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2088 shutil.rmtree which behaves correctly on windows in the face of
2089 files that you have to chmod before deleting. Thanks to Bear at
2090 the OSAF for the routine.
2091 (SourceBase.doClobber): use rmdirRecursive
2093 2005-05-12 Brian Warner <warner@lothar.com>
2095 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2096 method generate chunks instead of returning a big list. This
2097 allows the same method to be used for both old LogFile and new
2099 (OfflineLogFile.getText): use the generator
2100 (OfflineLogFile.subscribe): same
2101 * buildbot/status/html.py (TextLog.resumeProducing): same
2102 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2104 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2105 point out that OfflineLogFile does not currently work with
2106 html.Waterfall . Fixing this is high-priority.
2108 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2109 apparently windows defaults to using stdout
2111 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2112 better message on failure so I can figure out the win32 problem
2114 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2115 log messages to include more useful copies of the command being
2116 run, the argv array, and the child command's environment.
2117 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2119 2005-05-11 Brian Warner <warner@lothar.com>
2121 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2123 * Makefile: update the deb-snapshot version
2125 * docs/buildbot.texinfo: move all .xhtml docs into a new
2126 .texinfo-format document, adding a lot of material in the process.
2127 This is starting to look like a real user's manual. Removed all
2128 the Lore-related files: *.xhtml, *.css, template.tpl .
2129 * docs/Makefile: simple makefile to run 'makeinfo'
2130 * buildbot/scripts/sample.cfg: rearrange slightly
2131 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2133 2005-05-10 Brian Warner <warner@lothar.com>
2135 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2136 different name for the internal twistw module, handle it.
2138 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2139 * setup.py: .. and stop trying to install it
2141 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2142 'git'), the new linux kernel VC system (http://kernel.org/git/).
2143 Thanks to Brandon Philips for the patch.
2144 * buildbot/slave/commands.py (Git): same
2146 2005-05-06 Brian Warner <warner@lothar.com>
2148 * buildbot/status/builder.py (OfflineLogFile): replace the default
2149 LogFile with a form that appends its new contents to a disk file
2150 as they arrive. The complete log data is never kept in RAM. This
2151 is the first step towards handling very large (100MB+) logfiles
2152 without choking quite so badly. (The other half is
2153 producer/consumer on the HTML pages).
2154 (BuildStepStatus.addLog): use OfflineLogFile by default
2155 (BuildStatus.getLogfileName): helper code to give the
2156 OfflineLogFile a filename to work with
2158 * buildbot/test/test_status.py (Results.testAddResults): update
2159 tests to handle new asserts
2160 * buildbot/test/test_vc.py (Patch.doPatch): same
2161 * buildbot/test/test_steps.py (BuildStep.setUp): same
2163 2005-05-05 Brian Warner <warner@lothar.com>
2165 * buildbot/scripts/runner.py (start): if there is no Makefile,
2166 launch the app by importing twistd's internals and calling run(),
2167 rather than spawning a new twistd process. This stands a much
2168 better chance of working under windows.
2169 (stop): kill the process with os.kill instead of spawning
2170 /bin/kill, again to reduce the number of external programs which
2171 windows might not have in the PATH. Also wait up to 5 seconds for
2172 the process to go away, allowing things like 'buildbot stop;
2173 buildbot start' to be reliable in the face of slow shutdowns.
2175 * buildbot/master.py (Dispatcher.__getstate__): remove old
2176 .tap-related methods
2177 (BuildMaster.__getstate__): same
2179 * buildbot/slave/bot.py (makeService): same
2180 (Options.longdesc): same
2181 * buildbot/scripts/runner.py: copy over some old mktap option text
2183 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2184 'buildbot master' now creates a buildbot.tac file, so there is no
2185 longer a create-instance/save/reload sequence. mktap is dead, long
2187 * buildbot/scripts/sample.mk: use twistd -y, not -f
2188 * buildbot/test/test_config.py: remove mktap-based test
2189 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2190 * README: don't reference mktap
2192 * docs/source.xhtml: document some of the attributes that Changes
2195 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2197 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2198 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2199 * buildbot/changes/changes.py (Change)
2200 * buildbot/changes/mail.py (parseSyncmail)
2201 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2203 * buildbot/process/base.py (Build.isTagImportant)
2207 2005-05-04 Brian Warner <warner@lothar.com>
2209 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2210 connection after sending the change, so that unit tests don't
2211 complain about sockets being left around
2213 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2214 exception in phase=0 rendering
2215 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2217 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2219 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2220 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2221 and configuring builders with tuples.
2222 * buildbot/test/test_config.py: stop testing compatibility with
2223 deprecated config keys
2224 * buildbot/test/test_run.py: same
2226 2005-05-03 Brian Warner <warner@lothar.com>
2228 * contrib/arch_buildbot.py: survive if there are no logfiles
2229 (username): just use a string, os.getlogin isn't reliable
2231 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2232 so 'buildbot sendchange' actually works. The earlier test only
2233 covered the internal (non-reactor-running) form.
2235 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2236 script to notify the buildmaster about changes
2238 * buildbot/scripts/runner.py (sendchange): new command to send a
2239 change to a buildbot.changes.pb.PBChangeSource receiver.
2240 * buildbot/test/test_changes.py (Sender): test it
2242 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2243 after any reading of the config file, not just when we do it in
2244 startService. This makes some tests a bit cleaner.
2246 * buildbot/changes/pb.py: add some log messages
2248 * buildbot/process/base.py (Build.startBuild): fix a bug that
2249 caused an exception when the build terminated in the very first
2251 (Build.stepDone): let steps return a status of EXCEPTION. This
2252 terminates the build right away, and sets the build's overall
2253 status to EXCEPTION too.
2254 * buildbot/process/step.py (BuildStep.failed): return a status of
2255 EXCEPTION when that is what has happened.
2257 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2258 implement this, allowing Arch-based projects to get precise
2259 checkouts instead of always using the latest code
2260 (Bazaar): create variant of Arch to let folks use baz instead of
2261 tla. Requires a new buildslave too.
2262 * buildbot/slave/commands.py (Arch): add 'revision' argument
2263 (Bazaar): create variant of Arch that uses baz instead of tla.
2264 Remove the code that extracts the archive name from the
2265 register-archive output, since baz doesn't provide it, and require
2266 the user provide both the archive name and its location.
2267 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2269 2005-05-02 Brian Warner <warner@lothar.com>
2271 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2272 thanks to Nick Trout.
2274 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2275 deals better with source Makefile coming from a read-only CVS
2276 checkout. Thanks to Nick Trout for the catch.
2278 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2281 2005-04-28 Brian Warner <warner@lothar.com>
2283 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2285 * debian/changelog: update for 0.6.4
2287 2005-04-28 Brian Warner <warner@lothar.com>
2289 * README.w32: add a checklist of steps for getting buildbot
2291 * MANIFEST.in: include it in the tarball
2295 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2296 broken .tap files from 0.6.3 by getting rid of .services,
2297 .namedServices, and .change_svc at load time.
2299 2005-04-27 Brian Warner <warner@lothar.com>
2301 * NEWS: update in preparation for new release
2303 * buildbot/test/test_config.py (Save.testSave): don't pull in
2304 twisted.scripts.twistd, we don't need it and it isn't for windows
2307 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2308 accomodate win32 which can't do atomic-rename
2310 2005-04-27 Brian Warner <warner@lothar.com>
2312 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2313 timeouts to help the slow metabuildbot not flunk them so much
2314 (Disconnect.testBuild3): same
2315 (Disconnect.testBuild4): same
2316 (Disconnect.testInterrupt): same
2318 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2319 setup, it was completely broken for new buildmasters (those which
2320 did not have a 'change.pck' already saved. Thanks to Paul Warren
2321 for catching this (embarrassing!) bug.
2322 (Dispatcher.__getstate__): don't save our registered avatar
2323 factories, since they'll be re-populated when the config file is
2325 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2326 tests (since the real mktap-generated BuildMaster doesn't save
2328 (BuildMaster.__getstate__): don't save any service children,
2329 they'll all be re-populated when the config file is re-read.
2330 * buildbot/test/test_config.py (Save.testSave): test for this
2332 2005-04-26 Brian Warner <warner@lothar.com>
2334 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2335 rendered with Blender.. looks a bit nicer.
2336 * buildbot/docs/images/icon.blend: add the Blender file for it
2338 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2339 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2340 running under windows. This appears to be the best way to allow
2341 BuildSteps to do something normal like 'trial -v buildbot.test' or
2342 'make foo' and still expect it to work. The idea is to make the
2343 BuildSteps look as much like what a developer would type when
2344 compiling or testing the tree by hand. This approach probably has
2345 problems when there are spaces in the arguments, so if you've got
2346 windows buildslaves, you'll need to pay close attention to your
2349 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2350 timezone to the timestamp column.
2351 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2353 * buildbot/scripts/runner.py (loadOptions): do something sane for
2354 windows, I think. We use %APPDATA%/buildbot instead of
2355 ~/.buildbot, but we still search everywhere from the current
2356 directory up to the root for a .buildbot/ subdir. The "is it under
2357 $HOME" security test was replaced with "is it owned by the current
2358 user", which is only performed under posix.
2359 * buildbot/test/test_runner.py (Options.testFindOptions): update
2360 tests to match. The "is it owned by the current user" check is
2361 untested. The test has been re-enabled for windows.
2363 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2364 any "\n" in the expected output with the platform-specific line
2365 separator. Make this separator "\r\n" on PTYs under unix, they
2366 seem to do that and I don't know why
2368 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2369 windows for now, I don't know what ~/.buildbot/ should mean there.
2371 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2372 win32 compatibility, don't use "/tmp"
2373 (Basedir.testChangeBuilddir): remove more unixisms
2375 2005-04-26 Brian Warner <warner@lothar.com>
2377 * buildbot/test/test_control.py (Force.rmtree): python2.2
2378 compatibility, apparently its shutil.rmtree ignore_errors=
2379 argument is ignored.
2380 * buildbot/test/test_run.py (Run.rmtree): same
2381 (RunMixin.setUp): same
2383 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2386 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2387 'substring in string' operator, must use string.find(substr)!=-1
2388 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2389 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2391 * buildbot/scripts/runner.py (loadOptions): add code to search for
2392 ~/.buildbot/, a directory with things like 'options', containing
2393 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2394 the current directory, your $HOME directory, or anywhere
2395 inbetween, as long as you're somewhere inside your home directory.
2396 (debugclient): look in ~/.buildbot/options for master and passwd
2397 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2398 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2400 * buildbot/status/client.py (makeRemote): new approach to making
2401 IRemote(None) be None, which works under Twisted-2.0
2402 * buildbot/test/test_status.py (Client.testAdaptation): test it
2404 * buildbot/status/builder.py (Status.builderAdded): when loading a
2405 pickled BuilderStatus in from disk, set its name after loading.
2406 The config file might have changed its name (but not its
2407 directory) while it wasn't looking.
2409 * buildbot/process/builder.py (Builder.attached): always return a
2410 Deferred, even if the builder was already attached
2411 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2413 2005-04-25 Brian Warner <warner@lothar.com>
2415 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2416 category-related exception when announcing a build has finished
2418 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2419 reference no-longer-existent changemaster.sources
2420 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2422 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2425 2005-04-25 Brian Warner <warner@lothar.com>
2427 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2429 * debian/changelog: update for 0.6.3
2431 2005-04-25 Brian Warner <warner@lothar.com>
2433 * MANIFEST.in: make sure debug.glade is in the tarball
2435 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2437 * NEWS: update for the imminent 0.6.3 release
2439 * buildbot/status/html.py (HtmlResource.content): make the
2440 stylesheet <link> always point at "buildbot.css".
2441 (StatusResource.getChild): map "buildbot.css" to a static.File
2442 containing whatever css= argument was provided to Waterfall()
2443 (Waterfall): provide the "classic" css as the default.
2444 * docs/waterfall.classic.css: move default CSS from here ..
2445 * buildbot/status/classic.css: .. to here
2447 * MANIFEST.in: make sure classic.css is included in the tarball
2448 * setup.py: and that it is installed too, under buildbot/status/
2450 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2451 the module level, because buildbot.tap files from 0.6.2 don't have
2452 it in their attribute dictionary.
2454 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2455 really exists at startup, might save some confusion somewhere.
2457 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2459 * docs/waterfall.classic.css:
2460 add a stylesheet that's almost the same as the "classic"
2463 * buildbot/status/builder.py:
2464 add EXCEPTION as a result - this is a problem for the bot
2465 maintainer, not a build problem for the changers
2466 * buildbot/process/step.py:
2467 use EXCEPTION instead of FAILURE for exceptions
2468 * buildbot/status/html.py:
2469 add build_get_class to get a class out of a build/buildstep
2470 finish naming the classes
2471 split out sourceNames to changeNames and builderNames so we
2472 can style them separately
2473 * docs/config.xhtml:
2474 finish documenting classes as they are right now
2476 * buildbot/status/html.py:
2477 name the classes as we agreed on IRC
2478 * docs/config.xhtml:
2481 * buildbot/status/html.py:
2482 same for cssclass->class_
2484 * buildbot/status/html.py:
2485 as decided on IRC, use class_ for the "class" attribute to not
2486 conflict with the class keyword, and clean up the messy **{} stuff.
2488 * buildbot/status/mail.py:
2489 put back "builders" argument, and fix docstring, because the
2490 code *ignores* builders listed in this argument
2492 * buildbot/process/builder.py:
2493 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2495 * docs/config.xhtml:
2496 describe the category argument for builders
2498 * buildbot/status/builder.py:
2499 Fix a silly bug due to merging
2501 * buildbot/process/builder.py:
2502 remove category from the process Builder ...
2503 * buildbot/status/builder.py:
2504 ... and add it to BuilderStatus instead.
2505 Set category on unpickled builder statuses, they might not have it.
2506 * buildbot/master.py:
2507 include category when doing builderAdded
2508 * buildbot/status/mail.py:
2509 return None instead of self for builders we are not interested in.
2510 * buildbot/test/test_run.py:
2511 fix a bug due to only doing deferredResult on "dummy" waiting
2512 * buildbot/test/test_status.py:
2513 add checks for the Mail IStatusReceiver returning None or self
2515 * buildbot/status/html.py:
2516 fix testsuite by prefixing page title with BuildBot
2518 * buildbot/status/builder.py:
2519 have .category in builder status ...
2520 * buildbot/process/builder.py:
2521 ... and set it from Builder
2522 * buildbot/status/html.py:
2523 make .css a class variable
2524 * buildbot/test/test_status.py:
2525 write more tests to cover our categories stuff ...
2526 * buildbot/status/mail.py:
2527 ... and fix the bug that this uncovered
2529 * buildbot/changes/mail.py:
2530 * buildbot/changes/pb.py:
2531 * buildbot/master.py:
2532 * buildbot/process/base.py:
2533 * buildbot/process/factory.py:
2534 * buildbot/process/interlock.py:
2535 * buildbot/process/step.py:
2536 * buildbot/process/step_twisted.py:
2537 * buildbot/slave/commands.py:
2538 * buildbot/status/builder.py:
2539 * buildbot/status/client.py:
2540 * buildbot/status/html.py:
2541 * buildbot/status/mail.py:
2542 * buildbot/status/progress.py:
2543 * buildbot/test/test_changes.py:
2544 * buildbot/test/test_config.py:
2545 * buildbot/test/test_control.py:
2546 * buildbot/test/test_interlock.py:
2547 * buildbot/test/test_maildir.py:
2548 * buildbot/test/test_mailparse.py:
2549 * buildbot/test/test_run.py:
2550 * buildbot/test/test_slavecommand.py:
2551 * buildbot/test/test_status.py:
2552 * buildbot/test/test_steps.py:
2553 * buildbot/test/test_twisted.py:
2554 * buildbot/test/test_util.py:
2555 * buildbot/test/test_vc.py:
2556 * buildbot/test/test_web.py:
2558 add test-case-name at the top of a whole set of files
2560 * buildbot/status/builder.py:
2561 keep order of addition when getting builder names
2562 * buildbot/status/words.py:
2563 * buildbot/test/test_run.py:
2564 add test for getBuilderNames
2566 * buildbot/process/base.py:
2567 * buildbot/process/step.py:
2568 * buildbot/status/builder.py:
2569 * buildbot/status/html.py:
2570 make buildbot css-able
2571 replace the color code for purple with purple, don't understand
2572 why it wasn't purple to start with
2574 * buildbot/status/words.py:
2575 ok, so it doesn't look like BuilderStatus.remote is still valid.
2576 Use what waterfall uses instead.
2578 * buildbot/interfaces.py:
2579 * buildbot/status/builder.py:
2580 * buildbot/status/html.py:
2581 * buildbot/status/mail.py:
2582 * buildbot/status/words.py:
2583 * buildbot/test/test_run.py:
2584 use categories everywhere and make it be a list. More sensible
2585 for the future. Also make words actually respect this in
2588 * buildbot/interfaces.py:
2589 add category argument to getBuilderNames
2590 * buildbot/process/builder.py:
2591 * buildbot/status/builder.py:
2592 * buildbot/status/html.py:
2593 * buildbot/status/mail.py:
2594 * buildbot/status/words.py:
2595 * buildbot/test/test_run.py:
2596 move from specifying builders by name to specifying the category
2598 * buildbot/status/html.py:
2599 * buildbot/status/words.py:
2600 add "builders=" to __init__ of status clients so they can
2601 limit themselves to the given list of builders to report on
2603 * buildbot/status/html.py: set the title to the product name
2605 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2607 * buildbot/interfaces.py:
2608 * buildbot/status/builder.py:
2609 more documentation. Hm, not sure if ChangeLog entries make sense
2612 2005-04-23 Brian Warner <warner@lothar.com>
2614 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2616 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2618 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2619 the sub-commands that log buildmaster status to stdout and to a
2620 GUI window, respectively.
2622 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2623 functionality is working again, but all the step-status and ETA
2624 stuff is missing. Commented out a lot of code pending more
2627 * buildbot/status/client.py: make sure that IRemote(None) is None
2629 * buildbot/changes/changes.py: import defer, oops
2630 (ChangeMaster): remove the .sources list, rely upon the fact that
2631 MultiServices can be treated as sequences of their children. This
2632 cleans up the add/remove ChangeSource routines a lot, as we keep
2633 exactly one list of the current sources instead of three.
2635 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2636 up an empty ChangeMaster at init time.
2637 (BuildMaster.loadChanges): if there are changes to be had from
2638 disk, replace self.change_svc with the new ones. If not, keep
2639 using the empty ChangeMaster set up in __init__.
2640 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2641 instead of a separate list, makes the code a bit cleaner.
2642 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2643 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2644 Extend the test to make sure we can get rid of the sources when
2647 2005-04-22 Brian Warner <warner@lothar.com>
2649 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2650 and info/host files when making the slave directory
2652 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2653 whendone= argument, just return the Deferred and let the caller do
2654 what they want with it.
2655 (Disconnect.testBuild1): wait for shutdownSlave
2656 (Basedir.testChangeBuilddir): new test to make sure changes to the
2657 builddir actually get propagated to the slave
2659 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2660 explicit method, rather than passing the builddir in __init__ .
2661 Make sure to update self.basedir too, this was broken before.
2662 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2663 builders and for ones that have just had their builddir changed.
2664 (BotFactory): add a class-level .perspective attribute, so
2665 BuildSlave.waitUntilDisconnected won't get upset when the
2666 connection hasn't yet been established
2667 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2668 tests can reach through it to inspect the SlaveBuilders
2670 * buildbot/process/base.py (Build.buildException): explain the
2671 log.err with a log.msg
2672 * buildbot/process/builder.py (Builder.startBuild): same
2673 (Builder._startBuildFailed): improve error message
2675 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2676 occurred because we lost the brand-new connection, retry instead
2677 of giving up. If not, it's probably an authorization failure, and
2678 it makes sense to stop trying. Make sure we log.msg the reason
2679 that we're log.err'ing the failure, otherwise test failures are
2680 really hard to figure out.
2682 * buildbot/master.py: change loadConfig() to return a Deferred
2683 that doesn't fire until the change has been fully implemented.
2684 This means any connected slaves have been updated with the new
2685 builddir. This change makes it easier to test the code which
2686 actually implements this builddir-updating.
2687 (BotPerspective.addBuilder): return Deferred
2688 (BotPerspective.removeBuilder): same
2689 (BotPerspective.attached): same
2690 (BotPerspective._attached): same. finish with remote_print before
2691 starting the getSlaveInfo, instead of doing them in parallel
2692 (BotPerspective.list_done): same
2693 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2694 actually calling slave.disconnect()
2695 (BotMaster.addBuilder): same
2696 (BotMaster.removeBuilder): same
2697 (BuildMaster.loadConfig): same
2698 (BuildMaster.loadConfig_Slaves): same
2699 (BuildMaster.loadConfig_Sources): same
2700 (BuildMaster.loadConfig_Builders): same
2701 (BuildMaster.loadConfig_status): same
2703 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2704 a Deferred that fires when the source is finally removed
2706 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2707 the previous tree on win32, where we have to do it synchronously,
2708 make sure we return a Deferred anyway.
2709 (SourceBase.doCopy): same
2711 * buildbot/scripts/runner.py (statusgui): use the text client for
2712 now, while I rewrite the Gtk one
2713 * buildbot/clients/base.py: strip out old code, leaving just the
2714 basic print-message-on-event functionality. I also remove the
2715 ReconnectingPBClientFactory, but it does at least quit when it
2716 loses the connection instead of going silent
2718 2005-04-21 Brian Warner <warner@lothar.com>
2720 * Makefile: minor tweaks
2722 * NEWS: point out deprecation warnings, new features for
2725 * buildbot/master.py (BuildMaster.loadConfig): emit
2726 DeprecationWarnings for Builders defined with tuples. Rearrange
2727 code to facility removal of deprecated configuration keys in the
2730 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2731 'buildbot' command to put a little Makefile in the target that
2732 helps you re-create the buildbot.tap file, start or stop the
2733 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2734 all the files 0600, since they contain passwords.
2735 (start): if there is a Makefile, and /usr/bin/make exists, use
2736 'make start' in preference to a raw twistd command. This lets
2737 slave admins put things like PYTHONPATH variables in their
2738 Makefiles and have them still work when the slave is started with
2739 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2740 be nice to first try the 'make' command and only fall back to
2741 twistd if it fails. TODO: the Makefile's "start" command does not
2742 add the --reactor=win32 argument when running under windows.
2743 (Options.debugclient, Options.statusgui): add sub-commands to launch
2744 the debug client (formerly in contrib/debugclient.py) and the
2745 Gtk status application (currently broken)
2746 * buildbot/clients/debug.py: move from contrib/debugclient.py
2747 * buildbot/clients/debug.glade: same
2749 * buildbot/test/test_trial.py: remove it. This requires some
2750 functionality out of Twisted that isn't there yet, and until then
2751 having it around just confuses things.
2753 * buildbot/test/test_slavecommand.py (Shell): test both with and
2754 without PTYs, and make sure that command output is properly
2755 interleaved in the with-PTY case. I think the without-PTY test
2756 should pass on windows, where we never use PTYs anyway.
2758 2005-04-20 Brian Warner <warner@lothar.com>
2760 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2762 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2764 * NEWS: start creating entries for the next release
2766 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2768 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2769 (WebTest.test_webPathname): same
2770 (WebTest.test_webPathname_port): same
2771 (WebTest.test_waterfall): use the default favicon rather than
2772 rooting around the filesystem for it. Open the expected-icon file
2773 in binary mode, to make win32 tests happier (thanks to Nick Trout
2775 * buildbot/status/html.py (buildbot_icon): win32 portability
2777 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2778 win32-compatibility fixes from Nick Trout, the "file not found" message
2779 is different under windows
2780 (FakeSlaveBuilder.__init__): clean up setup a bit
2781 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2783 2005-04-19 Brian Warner <warner@lothar.com>
2785 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2786 skip-if-repositories-are-unavailable test to not kill the trial
2787 that comes with Twisted-1.3.0
2789 * setup.py: install buildbot.png icon file when installing code
2791 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2792 environment used by the command, at least on the child side.
2794 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2795 this method needs to be added and implemented because it gets
2796 called under heavy load. I don't quite understand the
2797 producer/consumer API enough to write it.
2798 (StatusResource.getChild): add a resource for /favicon.ico
2799 (Waterfall.__init__): add favicon= argument
2800 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2801 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2802 (WebTest.test_webPathname): same
2803 (WebTest.test_webPathname_port): same
2804 * docs/config.xhtml: mention favicon=
2805 * buildbot/buildbot.png: add a default icon, dorky as it is
2807 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2809 * buildbot/master.py:
2810 * buildbot/process/base.py:
2811 * buildbot/process/builder.py:
2812 * buildbot/process/interlock.py:
2813 * buildbot/status/builder.py:
2814 * buildbot/status/html.py:
2815 * buildbot/status/mail.py:
2816 * buildbot/status/words.py:
2817 new documentation while digging through the code
2819 2005-04-17 Brian Warner <warner@lothar.com>
2821 * general: try to fix file modes on all .py files: a+r, a-x,
2822 but let buildbot/clients/*.py be +x since they're tools
2824 * docs/epyrun (addMod): when an import fails, say why
2826 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2828 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2830 * buildbot/process/base.py:
2831 * buildbot/process/builder.py:
2832 * buildbot/status/builder.py:
2833 new documentation while digging through the code
2835 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2837 * buildbot/changes/changes.py:
2838 * buildbot/changes/p4poller.py:
2839 * buildbot/interfaces.py:
2840 * buildbot/process/base.py:
2841 * buildbot/process/builder.py:
2842 * buildbot/process/step.py:
2843 * buildbot/process/step_twisted.py:
2844 * buildbot/slave/bot.py:
2845 * buildbot/slave/commands.py:
2846 * buildbot/status/builder.py:
2847 fix all docstrings to make epydoc happy. In the process of fixing
2848 some, I also moved pieces of docs, and removed some deprecated
2851 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2853 * buildbot/process/builder.py:
2854 * buildbot/process/interlock.py:
2855 * buildbot/process/process_twisted.py:
2856 * buildbot/process/step.py:
2857 BuildProcess -> Build, as it looks like that's what happened
2858 * buildbot/process/base.py:
2859 * buildbot/process/factory.py:
2862 2005-04-17 Brian Warner <warner@lothar.com>
2864 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2865 update compile command to accomodate the Twisted split.. now
2866 instead of './setup.py build_ext -i', you do './setup.py all
2867 build_ext -i', to run build_ext over all sub-projects.
2868 (FullTwistedBuildFactory): same
2869 (TwistedReactorsBuildFactory): same
2871 * buildbot/status/html.py (TextLog.finished): null out self.req
2872 when we're done, otherwise the reference cycle of TextLog to .req
2873 to .notifications to a Deferred to TextLog.stop keeps them from
2874 being collected, and consumes a huge (610MB on pyramid at last
2875 check) amount of memory.
2877 2005-04-11 Brian Warner <warner@lothar.com>
2879 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2880 normalize the VC-repository location.. makes SVN happier with
2881 certain test environments.
2883 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2884 RemoteShellCommand gets its own .env dictionary, so that code in
2885 start() doesn't mutate the original. I think this should fix the
2886 step_twisted.Trial problem where multiple identical components
2887 kept getting added to PYTHONPATH= over and over again.
2889 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2890 adding epydoc-format docstrings to many classes. Thanks to Thomas
2891 Vander Stichele for the patches.
2892 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2893 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2894 * buildbot/slave/bot.py, commands.py, registry.py: same
2896 2005-04-05 Brian Warner <warner@lothar.com>
2898 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2899 preserve timestamps, helps incremental builds of large trees.
2900 Patch from Rene Rivera.
2902 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2903 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2906 2005-04-03 Brian Warner <warner@lothar.com>
2908 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2909 with one dict, apparently exec has some scoping bugs when used
2910 with both global/local dicts. Thanks to Nathaniel Smith for the
2913 2005-04-02 Brian Warner <warner@lothar.com>
2915 * buildbot/process/step_twisted.py (countFailedTests): the new
2916 trial in Twisted-2.0 emits a slightly different status line than
2917 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2918 mistakenly think the test count is unparseable.
2919 (Trial.start): note that for some reason each build causes another
2920 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2921 be fixed but I'm not sure quite where the problem is.
2923 2005-04-01 Brian Warner <warner@lothar.com>
2925 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2926 deferredResult to avoid hangs/warnings under twisted-2.0
2927 (RunMixin.tearDown): same
2928 (RunMixin.shutdownSlave): same
2929 (Disconnect.testIdle1): same
2930 (Disconnect.testBuild2): same: wait one second after the build
2931 finishes for test to really be done.. this should be cleaned up to
2932 avoid wasting that second. Builder.detach uses a callLater(0),
2933 either that should be done in-line (something else needed that
2934 behavior), or it should return a Deferred that fires when the
2935 builder is really offline.
2936 (Disconnect.testBuild3): same
2937 (Disconnect.testDisappear): same
2939 * buildbot/test/test_web.py: rearrange server-setup and teardown
2940 code to remove unclean-reactor warnings from twisted-2.0
2942 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2943 so the tests don't hang under twisted-2.0
2945 2005-03-31 Brian Warner <warner@lothar.com>
2947 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2948 caused a warning each time the master changed our set of builders
2950 * buildbot/status/builder.py (BuildStatus.saveYourself): under
2951 w32, don't unlink the file unless it already exists. Thanks to
2952 Baptiste Lepilleur for the catch.
2953 (BuilderStatus.saveYourself): same
2955 2005-02-01 Brian Warner <warner@lothar.com>
2957 * buildbot/status/html.py (TextLog.getChild): use a /text child
2958 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2959 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2960 logfile as text/plain (no markup, no headers). This replaces the
2961 previous scheme (which used an ?text=1 argument), and gets us back
2962 to a relative link (which works better when the buildbot lives
2963 behind another web server, such as Apache configured as a reverse
2964 proxy). Thanks to Gerald Combs for spotting the problem.
2966 * buildbot/__init__.py (version): bump to 0.6.2+ while between
2969 2004-12-13 Brian Warner <warner@lothar.com>
2971 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2973 * debian/changelog: update for 0.6.2
2974 * NEWS: finalize for 0.6.2
2976 2004-12-11 Brian Warner <warner@lothar.com>
2978 * NEWS: bring it up to date
2980 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2981 detection code. Require some sign of life from the buildmaster
2982 every BotFactory.keepaliveInterval seconds. Provoke this
2983 indication at BotFactory.keepaliveTimeout seconds before the
2984 deadline by sending a keepalive request. We don't actually care if
2985 that request is answered in a timely fashion, what we care about
2986 is that .activity() is called before the deadline. .activity() is
2987 triggered by any PB message from the master (including an ack to
2988 one of the slave's status-update messages). With this new scheme,
2989 large status messages over slow pipes are OK, as long as any given
2990 message can be sent (and thus acked) within .keepaliveTimeout
2991 seconds (which defaults to 30).
2992 (SlaveBuilder.remote_startCommand): record activity
2993 (SlaveBuilder.ackUpdate): same
2994 (SlaveBuilder.ackComplete): same
2995 (BotFactory.gotPerspective): same
2996 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2998 2004-12-09 Brian Warner <warner@lothar.com>
3000 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3003 * buildbot/process/step_twisted.py (Trial._commandComplete):
3004 update self.cmd when we start the 'cat test.log' transfer. Without
3005 this, we cannot interrupt the correct RemoteCommand when we lose
3008 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3009 trying to tell the slave to stop the command if we're already
3010 inactive, or if we no longer have a .remote
3012 * buildbot/process/builder.py (Builder._detached): don't let an
3013 exception in currentBuild.stopBuild() prevent the builder from
3014 being marked offline
3016 2004-12-07 Brian Warner <warner@lothar.com>
3018 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3019 KeyError that happens when you ask for a non-existent Builder, and
3020 translate it into a UsageError.
3022 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3023 losing the slave in the middle of a remote step is handled too
3025 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3026 be a Failure, so be sure to stringify it before using it as the
3027 contents of the 'interrupt' logfile
3028 (RemoteCommand.interrupt): use stringified 'why' in
3029 remote_interruptCommand too, just in case
3031 2004-12-06 Brian Warner <warner@lothar.com>
3033 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3034 instead of 'tla update', which is more efficient in case we've
3035 missed a couple of patches since the last update.
3037 * debian/changelog: update for previous (0.6.1) release. Obviously
3038 this needs to be handled better.
3040 2004-12-05 Brian Warner <warner@lothar.com>
3042 * NEWS: update for stuff since last release
3044 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3045 match the maybeDeferred change in Dispatcher.requestAvatar
3046 * buildbot/changes/pb.py (ChangePerspective.attached): same
3047 * buildbot/status/client.py (StatusClientPerspective.attached): same
3048 * buildbot/process/builder.py (Builder._attached3): same
3049 * buildbot/pbutil.py (NewCredPerspective.attached): same
3051 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3052 the date to the top-most box, if it is not the same as today's
3055 * docs/slave.xhtml: provide a buildslave setup checklist
3057 * docs/source.xhtml (Arch): correct terminology
3059 2004-12-04 Brian Warner <warner@lothar.com>
3061 * buildbot/test/test_slavecommand.py: use sys.executable instead
3062 of hard-coding 'python' for child commands, might help portability
3064 * docs/examples/twisted_master.cfg: update to current usage
3066 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3067 'stop build' command to the IRC bot
3069 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3070 message that broke PBChangeSource
3072 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3073 (SlaveBuilder): make some attributes class-level, remove the old
3074 "update queue" which existed to support resuming a build after the
3075 master connection was lost. Try to reimplement that feature later.
3076 (SlaveBuilder.stopCommand): clear self.command when the
3077 SlaveCommand finishes, so that we don't try to kill a leftover one
3079 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3082 * buildbot/slave/commands.py (SourceBase): set self.command for
3083 all VC commands, so they can be interrupted.
3085 2004-12-03 Brian Warner <warner@lothar.com>
3087 * buildbot/master.py: clean up slave-handling code, to handle
3088 slave-disconnect and multiple-connect better
3089 (BotPerspective): make these long-lasting, exactly one per bot
3090 listed in the config file.
3091 (BotPerspective.attached): if a slave connects while an existing
3092 one appears to still be connected, disconnect the old one first.
3093 (BotPerspective.disconnect): new method to forcibly disconnect a
3094 buildslave. Use some hacks to empty the transmit buffer quickly to
3095 avoid the long (20-min?) TCP timeout that could occur if the old
3096 slave has dropped off the net.
3097 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3098 own their own SlaveStatus objects. Remove .attached/.detached, add
3099 .addSlave/.removeSlave, treat slaves like Builders (config file
3100 parsing sends deltas to the BotMaster). Inform the slave
3101 instances, i.e. the BotPerspective, about addBuilder and
3103 (BotMaster.getPerspective): turns into a single dict lookup
3104 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3105 which gives BotPerspective.attached a chance to disconnect the old
3107 (BuildMaster.loadConfig): add code (disabled) to validate that all
3108 builders use known slaves (listed in c['bots']). The check won't
3109 work with tuple-specified builders, which are deprecated but not
3110 yet invalid, so the check is disabled for now.
3111 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3112 routine, do the add/changed/removed dance with them like we do
3114 (BuildMaster.loadConfig_Sources): move source-config into a
3115 separate routine too
3117 * buildbot/status/builder.py (Status.getSlave): get the
3118 SlaveStatus object from the BotPerspective, not the BotMaster.
3120 * buildbot/test/test_run.py: bunch of new tests for losing the
3121 buildslave at various points in the build, handling a slave that
3122 connects multiple times, and making sure we can interrupt a
3125 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3126 something other than 'Bot' for the Bot object, to make certain
3127 test cases easier to write.
3128 (BuildSlave.waitUntilDisconnected): utility method for testing
3130 2004-11-30 Brian Warner <warner@lothar.com>
3132 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3134 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3135 argument, return a Deferred that always fires with True or False.
3136 I don't use an errback to indicate 'ping failed' so that callers
3137 are free to ignore the deferred without causing spurious errors in
3139 * buildbot/process/builder.py (BuilderControl.ping): implement it
3141 * buildbot/test/test_run.py (Status.testDisappear): test ping
3142 (Status.disappearSlave): fix it
3144 2004-11-30 Brian Warner <warner@lothar.com>
3146 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3147 (IBuilderControl): add .getBuild(num), only works for the current
3148 build, of course, although it might be interesting to offer
3149 something for builds in the .waiting or .interlocked state.
3151 * buildbot/process/base.py (Build): have .stopBuild just do the
3152 interrupt, then let the build die by itself.
3153 (BuildControl): add .stopBuild, and add a point-event named
3154 'interrupt' just after the build so status viewers can tell that
3156 (BuilderControl): add .getBuild
3158 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3159 stops when you kill it, good for testing
3160 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3161 contains the 'reason' text.
3163 * buildbot/status/html.py: Add Stop Build button, if the build can
3164 still be stopped. Send a Redirect (to the top page) one second
3165 later, hopefully long enough for the interrupt to have an effect.
3166 Move make_row() up to top-level to share it between Stop Build and
3169 * buildbot/slave/commands.py: only kill the child process once
3171 * buildbot/test/test_run.py: add testInterrupt
3173 2004-11-29 Brian Warner <warner@lothar.com>
3175 * buildbot/process/base.py: Refactor command interruption. The
3176 Build is now responsible for noticing that the slave has gone
3177 away: Build.lostRemote() interrupts the current step and makes
3178 sure that no further ones will be started.
3180 * buildbot/process/builder.py: When the initial remote_startBuild
3181 message fails, log it: this usually indicates that the slave has
3182 gone away, but we don't really start paying attention until they
3183 fail to respond to the first step's command.
3185 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3186 slave disconnect. Now sports a new interrupt() method. Error
3187 handling was simplified a lot by chaining deferreds, so
3188 remoteFailed/remoteComplete were merged into a single
3189 remoteComplete method (which can now get a Failure object).
3190 Likewise failed/finished were merged into just _finished.
3191 (BuildStep): Add interrupt(why) method, and if why is a
3192 ConnectionLost Failure then the step is failed with some useful
3195 * buildbot/slave/bot.py: stop the current command when the remote
3196 Step reference is lost, and when the slave is shut down.
3197 (Bot): make it a MultiService, so it can have children. Use
3198 stopService to tell when the slave is shutting down.
3199 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3200 remote_interruptCommand (which asks the current SlaveCommand to
3201 stop but allows it to keep emitting status messages), and
3202 stopCommand (which tells it to shut up and die).
3204 * buildbot/slave/commands.py: make commands interruptible
3205 (ShellCommand.kill): factor out os.kill logic
3206 (Command): factor out setup()
3207 (Command.sendStatus): don't send status if .running is false, this
3208 happens when the command has been halted.
3209 (Command.interrupt): new method, used to tell the command to die
3210 (SlaveShellCommand): implement .interrupt
3211 (DummyCommand): implement .interrupt
3212 (SourceBase, etc): factor out setup(), don't continue substeps if
3215 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3216 so they can be called after finishing
3218 * buildbot/test/test_run.py: new tests for disconnect behavior,
3219 refactor slave-shutdown routines, add different kinds of
3222 2004-11-27 Brian Warner <warner@lothar.com>
3224 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3225 method to express ETA time like "2m45s" instead of "165 seconds"
3227 2004-11-24 Brian Warner <warner@lothar.com>
3229 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3230 archive after the test completes, to avoid cluttering the user's
3231 'tla archives' listing with a bogus entry. Arch doesn't happen to
3232 provide any way to override the use of ~/.arch-params/, so there
3233 isn't a convenient way to avoid touching the setup of the user who
3235 (VC_HTTP.testArchHTTP): same
3237 2004-11-23 Brian Warner <warner@lothar.com>
3239 * buildbot/status/html.py (TextLog): split render() up into
3240 render_HEAD and render_GET. Use a Producer when sending log
3241 chunks, to reduce memory requirements and avoid sending huge
3242 non-Banana-able strings over web.distrib connections. Requires
3243 peeking under the covers of IStatusLog.
3244 (TextLog.resumeProducing): fix the "as text" link, handle client
3245 disconnects that occur while we're still sending old chunks.
3247 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3248 use defer.succeed, not the non-existent defer.success
3249 (LogFile.waitUntilFinished): same
3250 (LogFile.subscribe): don't add watchers to a finished logfile
3252 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3255 2004-11-23 Brian Warner <warner@lothar.com>
3257 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3259 2004-11-23 Brian Warner <warner@lothar.com>
3261 * NEWS: update for the 0.6.1 release
3262 * MANIFEST.in: add new files
3264 * README (INSTALLATION): explain how to enable the extra VC tests
3266 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3267 level to, so old pickled builds can be displayed ok
3269 2004-11-22 Brian Warner <warner@lothar.com>
3271 * NEWS: summarize updates since last release
3273 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3274 Yoz Grahame. Closes SF#1050138.
3276 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3279 * buildbot/process/step_twisted.py (Trial): update docs a bit
3281 * docs/factories.xhtml: fix Trial factory docs to match reality.
3284 * buildbot/process/factory.py (Trial.__init__): add args for
3285 randomly= and recurse=, making them available to instantiators
3286 instead of only to subclassers. Closes: SF#1049759.
3288 2004-11-15 Brian Warner <warner@lothar.com>
3290 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3291 try to teach the Quick factory to use multiple versions of python
3293 2004-11-12 Brian Warner <warner@lothar.com>
3295 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3296 safer w32-compatible approach, and only use it on windows
3297 (BuildStatus.saveYourself): same
3299 2004-11-11 Brian Warner <warner@lothar.com>
3301 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3302 it: one string merge per chunk. There are now separate .entries
3303 and .runEntries lists: when enumerating over all chunks, make sure
3305 * buildbot/test/test_status.py (Log): more tests
3307 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3308 chunks together, up to 10kb per chunk. This ought to cut down on
3309 the CPU-burning overhead of large log files. Thanks to Alexander
3310 Staubo for spotting the problem.
3311 * buildbot/test/test_status.py (Log): tests for same
3313 2004-11-10 Brian Warner <warner@lothar.com>
3315 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3316 header to outbound mail
3317 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3319 2004-11-08 Brian Warner <warner@lothar.com>
3321 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3322 can't do os.rename() onto an existing file, so catch the exception
3323 and unlink the target file first. This introduces a slight window
3324 where the existing file could be lost, but the main failure case
3325 (disk full) should still be handled safely.
3326 (BuildStatus.saveYourself): same
3328 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3329 separator character instead of os.sep, because the filenames being
3330 split here are coming from the VC system, which can have a
3331 different pathname convention than the local host. This should
3332 help a buildmaster running on windows that uses a CVS repository
3333 which runs under unix.
3334 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3336 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3337 when there are no test failures to be parsed
3339 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3340 instead of the unix-specific os.system("cp"), thanks to Elliot
3341 Murphy for this and the other buildbot-vs-windows catches.
3342 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3344 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3345 echo the command as it is run
3347 * setup.py: install sample.mk too, not just sample.cfg
3348 (scripts): install contrib/windows/buildbot.bat on windows
3350 2004-11-07 Brian Warner <warner@lothar.com>
3352 * buildbot/process/builder.py (Builder._detached): clear the
3353 self.currentBuild reference, otherwise the next build will be
3354 skipped because we think the Builder is already in use.
3356 * docs/examples/twisted_master.cfg: update to match current usage
3357 on the Twisted buildbot
3359 2004-10-29 Brian Warner <warner@lothar.com>
3361 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3363 2004-10-28 Brian Warner <warner@lothar.com>
3365 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3366 have separate doVCUpdate/doVCFull methods. Catch an update failure
3367 and respond by clobbering the source directory and re-trying. This
3368 will handle local changes (like replacing a file with a directory)
3369 that will cause CVS and SVN updates to fail.
3370 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3372 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3375 2004-10-19 Brian Warner <warner@lothar.com>
3377 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3379 * buildbot/status/html.py (StatusResourceTestResults): display any
3380 TestResults that the Build might have
3381 (StatusResourceTestResult): and the logs for each TestResult
3382 (StatusResourceBuild): add link from the per-build page
3384 2004-10-15 Brian Warner <warner@lothar.com>
3386 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3387 the 'problems' portion of stdout, add TestResults to our build
3388 * buildbot/test/test_twisted.py (Parse.testParse): test it
3390 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3391 to retrieve a dict of accumulated test results
3392 (ITestResult): define what a single test result can do
3393 * buildbot/status/builder.py (TestResult): implement ITestResult
3394 (BuildStatus.getTestResults): retrieve dict of TestResults
3395 (BuildStatus.addTestResult): add TestResults
3396 * buildbot/test/test_status.py (Results.testAddResults): test it
3398 2004-10-14 Brian Warner <warner@lothar.com>
3400 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3401 instead of os.system("rm -rf") for win32 portability
3403 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3404 SignalMixin instead of starting/stopping the reactor, which is
3405 likely to cause problems with other tests
3407 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3408 self.copyComplete() call. Yoz Grahame makes the catch.
3410 * contrib/windows/buildbot.bat: helper script to deal with path
3411 issues. Thanks to Yoz Grahame.
3413 * buildbot/master.py (BuildMaster.startService): don't register a
3414 SIGHUP handler if the signal module has no SIGHUP attribute.
3415 Apparently win32 does this.
3417 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3419 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3420 test if the reactor can't offer UNIX sockets
3422 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3423 error introduced in the last commit. We really need that
3426 2004-10-12 Brian Warner <warner@lothar.com>
3428 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3429 when describing a maildir source. Thanks to Stephen Davis.
3431 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3434 * buildbot/scripts/runner.py (createMaster): install Makefile too
3435 (start): add --no_save to 'start' command
3436 * buildbot/scripts/sample.mk: simple convenience Makefile with
3437 start/stop/reload targets
3439 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3442 2004-09-30 Brian Warner <warner@lothar.com>
3444 * setup.py: Releasing buildbot-0.6.0
3446 2004-09-30 Brian Warner <warner@lothar.com>
3448 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3449 test_trial.py from the source tarball until support is complete.
3451 * NEWS: update for 0.6.0 release
3452 * buildbot/__init__.py (version): same
3455 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3456 'source' command to tell users where to get the Buildbot source
3458 * docs/examples/*.cfg: update to modern standards
3460 * NEWS: update for release
3462 * buildbot/scripts/runner.py (createMaster): remove the
3463 -shutdown.tap stuff now that it isn't necessary
3465 (start): launch buildbot.tap, not buildbot-shutdown.tap
3468 * buildbot/status/mail.py (Domain): shorten class name
3469 (MailNotifier): if lookup= is a string, pass it to Domain()
3470 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3471 (Mail.testBuild2): test the string-to-Domain shortcut
3472 (Mail.testMail): fix test
3475 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3478 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3479 more attributes on load
3480 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3481 to accomodate the whole waterfall page at once, and the thrashing
3482 results in a lot of unnecessary loads
3483 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3484 (BuilderStatus.saveYourself): same
3485 (BuilderStatus.eventGenerator): stop generating on the first missing
3486 build. We assume that saved builds are deleted oldest-first.
3487 (BuildStepStatus.__getstate__): .progress might not exist
3489 * buildbot/changes/changes.py (ChangeMaster): make it
3490 serializable, in $masterdir/changes.pck
3491 (ChangeMaster.stopService): save on shutdown
3492 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3493 * buildbot/test/test_config.py: load Changes before config file
3496 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3497 "Oh my god, you killed the command" header on a separate line
3499 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3500 skip over corrupted build pickles
3501 (BuilderStatus.getFullBuildByNumber): same
3502 (BuilderStatus.eventGenerator): skip over unavailable builds
3503 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3504 do an atomic rename. This prevents a corrupted pickle when some
3505 internal serialization error occurs.
3506 (BuilderStatus.saveYourself): same
3508 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3509 the timeout for shell commands, it got lost somehow
3511 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3512 run out of build steps, return the rest of the builder events
3514 * buildbot/interfaces.py (IBuilderControl.ping): add method
3516 * buildbot/process/builder.py (BuilderControl.ping): move
3517 slave-ping to BuilderControl, and fix the failure case in the
3518 process (Event.finish() is the verb, Event.finished is the noun).
3520 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3521 through the BuilderControl instead of the BuilderStatus
3522 (EventBox): add adapter for builder.Event, allowing builder events to
3523 be displayed in the waterfall display
3525 * buildbot/master.py (BotMaster.stopService): add a 'master
3526 shutdown' event to the builder's log
3527 (BuildMaster.startService): and a 'master started' on startup
3529 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3530 builder events into the BuildStep event stream
3531 (Status.builderAdded): add a 'builder created' event
3534 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3535 command to announce the completion of a running build
3536 (IrcStatusBot.command_FORCE): announce when the build finishes
3538 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3539 don't evict unfinished builds from the cache: they must stay in
3540 the full-cache until their logfiles have stopped changing. Make
3541 sure the eviction loop terminates if an unfinished build was hit.
3542 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3543 This lets exceptions be dumped in an email status message. Really
3544 we need LogFiles which contain both text and HTML, instead of two
3546 (BuildStatus.__getstate__): handle self.finished=False
3547 (Status.builderAdded): if the pickle is corrupted, abandon the
3548 history and create a new BuilderStatus object.
3550 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3551 self.progress attribute, helped one test which doesn't fully set
3552 up the Build object.
3554 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3555 IStatusLog methods into an Interface that is implemented by "stub"
3556 logs, for which all the actual text chunks are on disk (in the
3557 pickled Build instance). To show the log contents, you must first
3558 adapt the stub log to a full IStatusLog object.
3560 * buildbot/status/builder.py (LogFileStub): create separate stub
3561 log objects, which can be upgraded to a real one if necessary.
3562 (LogFile): make them persistable, and let them stubify themselves
3564 (BuildStepStatus): same
3566 (BuildStatus.saveYourself): save the whole build out to disk
3567 (BuilderStatus): make it persistable
3568 (BuilderStatus.saveYourself): save the builder to disk
3569 (BuilderStatus.addFullBuildToCache): implement two caches which
3570 hold Build objects: a small one which holds full Builds, and a
3571 larger one which holds "stubbed" Builds (ones with their LogFiles
3572 turned into LogFileStubs). This reduces memory usage by the
3573 buildmaster by not keeping more than a few (default is 2) whole
3574 build logs in RAM all the time.
3575 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3577 (BuilderStatus.eventGenerator): rewrite since .builds went away
3578 (BuilderStatus.buildStarted): remove the .builds array. Add the
3579 build to the "full" cache when it starts.
3580 (BuilderStatus._buildFinished): save the build to disk when it
3582 (Status): give it a basedir (same as the BuildMaster's basedir)
3583 where the builder pickles can be saved
3584 (Status.builderAdded): create the BuilderStatus ourselves, by
3585 loading a pickle from disk (or creating a new instance if there
3586 was none on disk). Return the BuilderStatus so the master can glue
3587 it into the new Builder object.
3589 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3590 all BuilderStatuses to save themselves out to disk. This is in
3591 lieu of saving anything important in the main Application pickle
3592 (the -shutdown.tap file).
3593 (BuildMaster.__init__): give Status() a basedir for its files
3594 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3595 to get the BuilderStatus, then give it to the Builder (instead of
3596 doing it the other way around). It's ok if the status announces
3597 the new Builder before it's really ready, as the outside world can
3598 only see the BuilderStatus object anyway (and it is ready before
3599 builderAdded returns). Use the builder's "builddir" (which
3600 normally specifies where the slave will run the builder) as the
3601 master's basedir (for saving serialized builds).
3603 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3604 coerce the logfile to IStatusLog before trying to get the text
3605 chunks out of it. This will pull the full (non-stubified) Build in
3606 from disk if necessary.
3607 (TextLog): fix the adapter registration
3609 * buildbot/test/test_control.py (Force.setUp): create the basedir
3610 * buildbot/test/test_web.py: same
3611 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3612 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3613 * buildbot/test/test_run.py (Run.testMaster): same
3614 (Status.setUp): same
3616 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3618 * buildbot/status/html.py (Waterfall.__init__): store actual
3619 allowForce flag passed in rather than using True for everyone;
3620 make sure setting it to False doesn't cause a NameError
3622 (StatusResourceBuilder.__init__) add the builder name to the page
3624 (StatusResourceBuilder.body) move HTML generation for a name/value
3625 row into a helper method (StatusResourceBuilder.make_row); only
3626 generate the "Force Build" form if allowForce was True and the
3627 slave is connected. Use class attributes in the generated HTML to
3628 spread a little CSS-joy.
3630 2004-09-28 Brian Warner <warner@lothar.com>
3632 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3633 warning-scanner to not ignore things like
3634 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3636 * buildbot/status/html.py (StatusResource.control): add some
3637 class-level values for .control in an attempt to make upgrading
3640 * buildbot/util.py (ComparableMixin): survive missing attributes,
3641 such as when a class is modified and we're comparing old instances
3644 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3645 failure handling, remove a redundant try/except block. Don't
3646 return the full traceback to the IRC channel.
3647 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3648 error messages. Get ETA properly.
3650 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3651 the reason, since (at least) IRC message will have <> in them.
3652 (StatusResourceBuilder.__init__): take an IBuilderControl
3653 (StatusResourceBuilder.force): use the IBuilderControl we get in
3654 the constructor instead of trying to make our own. Catch the
3655 new exceptions and ignore them for now (until we make an
3656 intermediate web page where we could show the error message)
3657 (StatusResource): create with an IControl, use it to give an
3658 IBuilderControl to all children
3659 (Waterfall): take an allowForce= option, pass an IControl object
3660 to StatusResource if it is True
3662 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3664 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3665 catch new exceptions and return string forms
3667 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3668 * buildbot/process/builder.py (Builder.forceBuild): raise them
3669 * buildbot/test/test_control.py (Force.testNoSlave): new test
3670 (Force.testBuilderInUse): same
3673 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3675 * buildbot/test/test_run.py: use IControl
3676 * buildbot/test/test_vc.py: same
3678 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3679 to use IControl. Still offline.
3680 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3682 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3683 who=None so periodic builds don't send out status mail
3684 (Builder.forceBuild): include reason in the log message
3685 (BuilderControl.forceBuild): rename 'name' to 'who'
3687 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3688 'who' parameter, but make it None by default so builds forced by
3689 slave admins don't cause status mail to be sent to anybody
3690 (BotMaster.forceBuild): same. this method is deprecated.
3691 (DebugPerspective.perspective_forceBuild): same, use IControl.
3692 (DebugPerspective.perspective_fakeChange): use IControl..
3693 (Dispatcher.requestAvatar): .. so don't set .changemaster
3695 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3696 parameter to avoid confusion with the name of the builder
3699 * buildbot/status/mail.py: refine comment about needing 2.3
3701 * buildbot/status/html.py: move all imports to the top
3703 * buildbot/test/test_control.py: test new interfaces
3704 * buildbot/test/test_run.py (Status): handle new interfaces
3705 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3707 * buildbot/process/base.py (BuildControl): implement IBuildControl
3708 and its lonely getStatus() method
3710 * buildbot/process/builder.py (BuilderControl): implement
3711 IBuilderControl, obtained by adapting the Builder instance
3712 (Builder.startBuild): return a BuilderControl instead of a
3713 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3714 accomplish the same thing.
3716 * buildbot/master.py: move all import statements to the top
3717 (Control): implement IControl, obtained by adapting the
3718 BuildMaster instance.
3720 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3721 IBuildControl. These are used to force builds. Eventually they
3722 will provide ways to reconfigure the Builders, pause or abandon a
3723 Build, and perhaps control the BuildMaster itself.
3725 2004-09-26 Brian Warner <warner@lothar.com>
3727 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3728 ends up comparing us against something without a .__class__
3730 2004-09-24 Brian Warner <warner@lothar.com>
3732 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3735 * Makefile: add 'deb-snapshot' target, to create a timestamped
3738 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3740 2004-09-23 Brian Warner <warner@lothar.com>
3742 * buildbot/__init__.py (version): move version string here
3743 * setup.py: get version string from buildbot.version
3744 * buildbot/status/html.py (WaterfallStatusResource.body): add
3745 buildbot version to the page footer
3746 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3749 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3750 slaves, let the second know where the first one is coming from
3751 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3752 see our exceptions. It would be nice if there were a way to just
3753 send them the exception type and value, not the full traceback.
3756 * buildbot/status/mail.py (MailNotifier): add a new argument
3757 sendToInterestedUsers=, which can be set to False to disable the
3758 usual send-to-blamelist behavior.
3759 (top): handle python-2.2 which has no email.MIMEMultipart
3760 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3761 (MailNotifier.disownServiceParent): unsubscribe on removal
3763 * buildbot/test/test_status.py (Mail.testBuild2): test it
3766 * buildbot/status/progress.py (Expectations.wavg): tolerate
3767 current=None, which happens when steps start failing badly
3768 * buildbot/test/test_status.py (Progress.testWavg): test for it
3770 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3771 doesn't understand args['revision'], emit a warning instead of
3772 bailing completely. Updating to -rHEAD is probably close enough.
3774 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3776 * buildbot/test/test_status.py: at least import bb.status.client
3777 even if we don't have any test coverage for it yet
3779 * contrib/svn_buildbot.py: don't require python2.3
3780 (main): wait, do require it (for sets.py), but explain how to
3781 make it work under python2.2
3783 2004-09-23 Brian Warner <warner@lothar.com>
3785 * contrib/svn_buildbot.py: include the revision number in the Change
3787 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3788 using util.now() because FreshCVS is a realtime service
3790 * buildbot/status/event.py: delete dead code
3791 * buildbot/process/step.py: don't import dead Event class
3792 * buildbot/process/step_twisted.py: same
3793 * buildbot/status/builder.py: same
3794 * buildbot/status/client.py: same
3796 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3798 * buildbot/changes/changes.py (Change): set .when from an __init__
3799 argument (which defaults to now()), rather than having
3800 ChangeMaster.addChange set it later.
3801 (ChangeMaster.addChange): same
3803 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3804 (parseSyncmail): same. Just use util.now() for now.
3805 (parseBonsaiMail): parse the timestamp field for when=
3807 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3808 instead of setting .when after the fact
3812 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3813 results when the target project uses retrial. Still under
3815 * buildbot/test/test_trial.py: same
3817 2004-09-21 Brian Warner <warner@lothar.com>
3819 * buildbot/status/mail.py (MailNotifier.__init__): include
3820 success/warnings/failure in the Subject line
3821 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3822 use step.logname for the addLogs=True attachment filenames
3823 * buildbot/test/test_status.py (Mail): test Subject lines
3824 (Mail.testLogs): test attachment filenames
3826 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3827 accept a 'who' argument from the debug tool
3828 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3829 * contrib/debug.glade: add text box to set 'who'
3831 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3832 .getBuilderName with .getBuilder().getName(), more flexible
3833 (IStatusLog.getName): logs have short names, but you can prefix
3834 them with log.getStep().getName() to make them more useful
3835 * buildbot/status/builder.py: same
3836 * buildbot/status/client.py: same
3837 * buildbot/status/html.py: same
3838 * buildbot/test/test_run.py (Status.testSlave): same
3839 * buildbot/process/step.py: tweak logfile names
3841 * buildbot/status/mail.py (MailNotifier): add lookup, change
3842 argument to extraRecipients. The notifier is now aimed at sending
3843 mail to the people involved in a particular build, with additional
3844 constant recipients as a secondary function.
3846 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3847 including slow-lookup and failing-lookup. Make sure the blamelist
3848 members are included.
3850 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3851 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3852 (IBuildStatus.getInterestedUsers): new method
3853 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3854 * buildbot/status/client.py (remote_getResponsibleUsers): same
3855 * buildbot/status/html.py (StatusResourceBuild.body): same
3856 * buildbot/test/test_run.py (Status.testSlave): same
3858 2004-09-20 Brian Warner <warner@lothar.com>
3860 * docs/users.xhtml: update concepts
3862 * Makefile: add a convenience makefile, for things like 'make
3863 test'. It is not included in the source tarball.
3865 2004-09-16 Brian Warner <warner@lothar.com>
3867 * NEWS: mention /usr/bin/buildbot, debian/*
3869 * debian/*: add preliminary debian packaging. Many thanks to
3870 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3871 it considerably since it left their hands, I am responsible for
3872 all breakage that's resulted.
3874 * bin/buildbot: create a top-level 'buildbot' command, to be
3875 installed in /usr/bin/buildbot . For now it's just a simple
3876 frontend to mktap/twistd/kill, but eventually it will be the entry
3877 point to the 'try' command and also a status client. It is also
3878 intended to support the upcoming debian-packaging init.d scripts.
3879 * buildbot/scripts/runner.py: the real work is done here
3880 * buildbot/scripts/__init__.py: need this too
3881 * buildbot/scripts/sample.cfg: this is installed in new
3882 buildmaster directories
3883 * setup.py: install new stuff
3885 2004-09-15 Brian Warner <warner@lothar.com>
3887 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3888 'file:' schema (the version shipped with OS-X was built without the
3890 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3891 updates the log-timestamp, to make sure it isn't still running after
3894 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3895 values to the config file.
3896 * docs/examples/hello.cfg: add examples
3897 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3898 * buildbot/status/builder.py (Status.getProjectURL): implement them
3899 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3900 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3901 * buildbot/status/html.py (WaterfallStatusResource): display them
3904 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3905 certain error cases don't suffer a secondary exception.
3906 (top): Skip tests if the corresponding VC tool is not installed.
3908 * buildbot/process/factory.py (Trial): introduce separate
3909 'buildpython' and 'trialpython' lists, since trialpython=[] is
3910 what you want to invoke /usr/bin/python, whereas ./setup.py is
3911 less likely to be executable. Add env= parameter to pass options
3912 to test cases (which is how I usually write tests, I don't know if
3913 anyone else does it this way).
3915 * buildbot/process/step_twisted.py (Trial): handle python=None.
3916 Require 'testpath' be a string, not a list. Fix tests= typo.
3917 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3919 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3920 way to deal with the possibility of removing the disconnect notify
3922 (CVS): add a 'login' parameter to give a password to 'cvs login',
3923 commonly used with pserver methods (where pw="" or pw="guest")
3925 * buildbot/slave/commands.py (SourceBase): move common args
3926 extraction and setup() to __init__, so everything is ready by the
3927 time setup() is called
3928 (CVS.start): call 'cvs login' if a password was supplied
3929 (ShellCommand): special-case PYTHONPATH: prepend the master's
3930 value to any existing slave-local value.
3932 * buildbot/process/builder.py (Builder.updateBigStatus): if we
3933 don't have a remote, mark the builder as Offline. This whole
3934 function should probably go away and be replaced by individual
3936 (Builder.buildFinished): return the results to the build-finished
3937 deferred callback, helps with testing
3939 2004-09-14 Brian Warner <warner@lothar.com>
3941 * buildbot/test/test_vc.py: put all the repositories needed to run
3942 the complete tests into a single small (1.3MB) tarball, so I can
3943 make that tarball available on the buildbot web site. Test HTTP
3944 access (for Arch and Darcs) by spawning a temporary web server
3945 while the test runs.
3947 * docs/users.xhtml: new document, describe Buildbot's limited
3948 understanding of different human users
3950 * buildbot/test/test_vc.py: rearrange test cases a bit
3952 * buildbot/process/step_twisted.py (Trial): handle testpath=
3953 * buildbot/process/factory.py (Trial): update to use step.Trial
3955 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3957 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3958 the overall build text (which gives you 'failed 2 tests' rather
3960 (BuildStepStatus.text2): default to [], not None
3962 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3965 2004-09-12 Brian Warner <warner@lothar.com>
3967 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3968 log the whole exception if it's just an AttributeError (old slave)
3970 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3971 so (e.g.) sub-commands can be run in the right directory.
3972 (ShellCommand.start): accept an optional errorMessage= argument
3973 to make life easier for SVN.start
3974 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3976 (ShellCommand.start): move ['dir'] compatibility hack..
3977 (RemoteShellCommand.start): .. to here so everyone can use it
3979 * buildbot/process/step_twisted.py (Trial): use .workdir
3981 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3982 text displayed when debuild fails completely
3983 (Trial): snarf _trial_temp/test.log from the slave and display it
3985 2004-09-11 Brian Warner <warner@lothar.com>
3987 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3989 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3990 set to 'twisted', so --recurse can find twisted/web/test/*, etc
3992 * buildbot/process/step.py (ShellCommand): call .createSummary
3993 before .evaluateCommand instead of the other way around. This
3994 makes it slightly easier to count warnings and then use that to
3995 set results=WARNINGS
3996 * buildbot/process/step_twisted.py: cosmetic, swap the methods
3998 * buildbot/process/base.py (Build.buildFinished): update status
3999 before doing progress. It's embarrassing for the build to be stuck
4000 in the "building" state when an exceptions occurs elsewhere..
4002 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4003 python2.2 doesn't have 'sum'
4005 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4006 to prevent clients from accidentally sorting it
4008 * buildbot/master.py (Manhole): add username/password
4009 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4010 c['manholePort'], deprecate old usage
4011 * docs/config.xhtml: document c['manhole']
4012 * docs/examples/hello.cfg: show example of using a Manhole
4015 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4016 pretend the slave is up to date
4018 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4019 the module, overlaps with 'log', the local variable
4021 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4023 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4024 new method to let Steps find out the version of their
4025 corresponding SlaveCommand.
4026 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4027 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4028 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4030 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4031 (Arch.startVC): same
4032 (P4Sync.startVC): same
4034 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4035 Deferred so we can catch errors in remote_startCommand
4036 (RemoteShellCommand.start): same
4038 * docs/examples/twisted_master.cfg: update sample config file
4040 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4041 after connectionMade() is called, not before. Close stdin at that
4044 * buildbot/process/process_twisted.py: update to use Trial, clean
4045 up argument passing (move to argv arrays instead of string
4048 * buildbot/process/step_twisted.py (Trial): new step to replace
4049 RunUnitTests, usable by any trial-using project (not just
4050 Twisted). Arguments have changed, see the docstring for details.
4052 * buildbot/process/base.py (Build.startBuild): this now returns a
4053 Deferred. Exceptions that occur during setupBuild are now
4054 caught better and lead to fewer build_status weirdnesses, like
4055 finishing a build that was never started.
4056 (Build.buildFinished): fire the Deferred instead of calling
4057 builder.buildFinished directly. The callback argument is this
4058 Build, everything else can be extracted from it, including the
4059 new build.results attribute.
4060 * buildbot/process/builder.py (Builder.startBuild): same
4061 (Builder.buildFinished): same, extract results from build
4063 * buildbot/process/step.py (ShellCommands): remove dead code
4065 2004-09-08 Brian Warner <warner@lothar.com>
4067 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4068 doesn't try to use the leftover patched workdir
4069 (SourceStamp): test source-stamp computation for CVS and SVN
4071 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4072 patched workdir ('touch .buildbot-patched') so we don't try to
4074 (SourceBase.start): add ['revision'] for all Source steps
4075 (CVS): change args: use ['branch'] for -r, remove ['files']
4076 (CVS.buildVC): fix revision/branch stuff
4077 (SVN): add revision stuff
4079 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4080 kwargs (except 'workdir') to avoid silent spelling errors
4081 (ShellCommand.__init__): same
4082 (Source): new base class for CVS/SVN/etc. Factor out everything
4083 common, add revision computation (perform the checkout with a -D
4084 DATE or -r REVISION that gets exactly the sources described by the
4085 last Change), overridable with step.alwaysUseLatest. Add patch
4086 handling (build.getSourceStamp can trigger the use of a base
4087 revision and a patch).
4088 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4089 * docs/steps.xhtml: update docs
4090 * docs/source.xhtml: mention .checkoutDelay
4091 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4093 * buildbot/process/base.py (Build.setSourceStamp): add a
4094 .sourceStamp attribute to each Build. If set, this indicates that
4095 the build should be done with something other than the most
4096 recent source tree. This will be used to implement "try" builds.
4097 (Build.allChanges): new support method
4098 (Build.lastChangeTime): remove, functionality moved to Source steps
4099 (Build.setupBuild): copy the Step args before adding ['workdir'],
4100 to avoid modifying the BuildFactory (and thus triggering spurious
4104 * buildbot/status/html.py: rename s/commits/changes/
4105 (StatusResourceChanges): same
4106 (CommitBox.getBox): same, update URL
4107 (WaterfallStatusResource): same
4108 (StatusResource.getChild): same
4110 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4111 * contrib/debug.glade: add optional 'revision' to the fakeChange
4113 * buildbot/changes/changes.py (html_tmpl): display .revision
4114 (ChangeMaster.addChange): note .revision in log
4115 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4116 accept a ['revision'] attribute
4118 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4120 * buildbot/master.py (BotMaster.getPerspective): update the
4121 .connected flag in SlaveStatus when it connects
4122 (BotMaster.detach): and when it disconnects
4123 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4124 (BuildMaster.loadConfig_Builders): walk old list correctly
4126 * buildbot/test/test_config.py: fix prefix= usage
4128 2004-09-06 Brian Warner <warner@lothar.com>
4132 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4133 poll a P4 depot looking for recent changes. Thanks to Dave
4134 Peticolas for the contribution. Probably needs some testing after
4137 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4138 requires manual client setup for each buildslave. Rather
4139 experimental. Thanks again to Dave Peticolas.
4140 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4142 * buildbot/changes/changes.py (Change): add a .revision attribute,
4143 which will eventually be used to generate source-stamp values.
4145 * buildbot/process/step.py (RemoteCommand.start): use
4146 notifyOnDisconnect to notice when we lose the slave, then treat it
4147 like an exception. This allows LogFiles to be closed and the build
4148 to be wrapped up normally. Be sure to remove the disconnect
4149 notification when the step completes so we don't accumulate a
4150 bazillion such notifications which will fire weeks later (when the
4151 slave finally disconnects normally). Fixes SF#915807, thanks to
4152 spiv (Andrew Bennetts) for the report.
4153 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4154 really isn't Logged- specific
4155 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4156 header, since it's almost always going to be appended to an
4158 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4159 update test to handle use of notifyOnDisconnect
4161 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4162 don't clear .ETA and .currentBuild when going offline, let the
4163 current build clean up after itself
4165 * buildbot/process/builder.py (Builder.detached): wait a moment
4166 before doing things like stopping the current build, because the
4167 current step will probably notice the disconnect and cleanup the
4169 * buildbot/test/test_run.py (Status.tearDown): update test to
4170 handle asynchronous build-detachment
4172 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4174 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4175 hush a debug message
4177 2004-09-05 Brian Warner <warner@lothar.com>
4179 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4180 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4181 kernels do this: the fcntl module has the F_NOTIFY constant, but
4182 the kernel itself doesn't support the operation. Thanks to Olly
4183 Betts for spotting the problem.
4185 * buildbot/process/step.py (Darcs): new source-checkout command
4186 (Arch): new source-checkout command
4187 (todo_P4): fix constructor syntax, still just a placeholder
4188 * buildbot/test/test_vc.py (VC.testDarcs): test it
4189 (VC.testDarcsHTTP): same, via localhost HTTP
4191 (VC.testArchHTTP): same
4192 * NEWS: mention new features
4194 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4195 which tells the step to stash stdout text locally (in .stdout).
4196 Slave-side Commands can use this to make decisions based upon the
4197 output of the the ShellCommand (not just the exit code).
4198 (Darcs): New source-checkout command
4199 (Arch): New source-checkout command, uses .keepStdout in one place
4200 where it needs to discover the archive's default name.
4202 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4203 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4204 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4206 * buildbot/process/step.py (ShellCommand.describe): add an
4207 alternate .descriptionDone attribute which provides descriptive
4208 text when the step is complete. .description can be ["compiling"],
4209 for use while the step is running, then .descriptionDone can be
4210 ["compile"], used alone when the step succeeds or with "failed" when
4211 it does not. Updated other steps to use the new text.
4212 * buildbot/process/step_twisted.py: same
4213 * buildbot/test/test_run.py: update tests to match
4215 2004-08-30 Brian Warner <warner@lothar.com>
4217 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4218 (CVS.__init__): send 'patch' argument to slave
4219 (CVS.start): don't create the LoggedRemoteCommand until start(),
4220 so we can catch a .patch added after __init__
4221 (SVN.__init__): add 'patch' to SVN too
4224 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4225 argument, to let commands push data into the process' stdin pipe.
4226 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4227 is in use, since closing a PTY doesn't really affect the process
4228 in the right way (in particular, I couldn't run /usr/bin/patch
4230 (SourceBase.doPatch): handle 'patch' argument
4232 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4235 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4236 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4238 * buildbot/master.py (BotPerspective.got_commands): get command
4239 versions from slave, give to each builder
4240 * buildbot/process/builder.py (Builder.attached): stash slave
4241 command versions in .remoteCommands
4243 * docs/steps.xhtml: bring docs in-line with reality
4245 * buildbot/process/step.py (CVS.__init__): more brutal
4246 compatibility code removal
4247 (SVN.__init__): same
4249 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4250 (SlaveShellCommand.start): require ['workdir'] argument, remove
4251 the ['dir'] fallback (compatibility will come later)
4252 (SourceBase): update docs
4253 (SourceBase.start): remove ['directory'] fallback
4256 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4257 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4258 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4260 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4261 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4262 code.. I will figure out 0.5.0-compatibility hooks later)
4264 2004-08-30 Brian Warner <warner@lothar.com>
4266 * buildbot/process/process_twisted.py: rewrite in terms of new
4267 BuildFactory base class. It got significantly shorter. Yay
4270 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4271 work with the new "self.build isn't nailed down until we call
4272 step.start()" scheme: specifically, __init__ is called before the
4273 build has decided on which Changes are going in, so we don't scan
4274 build.allFiles() for .xhtml files until start()
4275 (HLint.commandComplete): use getText(), not getStdout()
4276 (RunUnitTests.start): same: don't use .build until start()
4277 (RunUnitTests.describe): oops, don't report (None) when using
4279 (RunUnitTests.commandComplete): use getText()
4280 (RunUnitTests.createSummary): same
4281 (BuildDebs.commandComplete): same
4283 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4284 set args['command'] until start(), since our BuildStep is allowed
4285 to change their mind up until that point
4286 (TreeSize.commandComplete): use getText(), not getStdout()
4288 * docs/examples/twisted_master.cfg: update to current standards
4290 * docs/factories.xhtml: update
4291 * buildbot/process/factory.py: implement all the common factories
4292 described in the docs. The Trial factory doesn't work yet, and
4293 I've probably broken all the process_twisted.py factories in the
4294 process. There are compatibility classes left in for things like
4295 the old BasicBuildFactory, but subclasses of them are unlikely to
4297 * docs/examples/glib_master.cfg: use new BuildFactories
4298 * docs/examples/hello.cfg: same
4300 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4301 explicit 'workdir' args
4303 * buildbot/process/base.py (BuildFactory): move factories to ..
4304 * buildbot/process/factory.py (BuildFactory): .. here
4305 * buildbot/process/process_twisted.py: handle move
4306 * buildbot/test/test_config.py: same
4307 * buildbot/test/test_run.py: same
4308 * buildbot/test/test_steps.py: same
4309 * buildbot/test/test_vc.py: same
4310 * docs/factories.xhtml: same
4312 * NEWS: mention config changes that require updating master.cfg
4314 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4315 argument to all steps that weren't given one already, pointing at
4316 the "build/" directory.
4318 * docs/examples/hello.cfg: remove explicit 'workdir' args
4320 * docs/factories.xhtml: document standard BuildFactory clases,
4321 including a bunch which are have not yet been written
4323 2004-08-29 Brian Warner <warner@lothar.com>
4325 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4326 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4327 buildbot.status.builder so they aren't quite so internal
4328 * buildbot/process/base.py, buildbot/process/builder.py: same
4329 * buildbot/process/maxq.py, buildbot/process/step.py: same
4330 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4331 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4332 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4334 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4335 to handle new getLogs()-returns-list behavior
4336 (StatusResourceBuildStep.getChild): same
4337 (StepBox.getBox): same
4338 (WaterfallStatusResource.phase0): same
4340 * docs/source.xhtml: document how Buildbot uses version-control
4341 systems (output side: how we get source trees)
4342 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4343 systems (input side: how we learn about Changes)
4345 * buildbot/master.py (Manhole): use ComparableMixin
4346 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4347 * buildbot/changes/mail.py (MaildirSource): same
4348 * buildbot/status/client.py (PBListener): same
4349 * buildbot/status/html.py (Waterfall): same
4350 * buildbot/status/words.py (IRC): same
4352 * NEWS: start describing new features
4354 * buildbot/status/mail.py (MailNotifier): finish implementation.
4355 The message body is still a bit sparse.
4356 * buildbot/test/test_status.py (Mail): test it
4358 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4359 and __hash__ methods I wind up adding everywhere. Specifically
4360 intended to support the buildbot config-file update scheme where
4361 we compare, say, the old list of IStatusTargets against the new
4362 one and don't touch something which shows up on both lists.
4363 * buildbot/test/test_util.py (Compare): test case for it
4365 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4366 return a list instead of a dict
4367 (IBuildStepStatus.getLogs): same. The idea is that steps create
4368 logs with vaguely unique names (although their uniqueness is not
4369 guaranteed). Thus a compilation step should create its sole
4370 logfile with the name 'compile', and contribute it to the
4371 BuildStatus. If a step has two logfiles, try to create them with
4372 different names (like 'test.log' and 'test.summary'), and only
4373 contribute the important ones to the overall BuildStatus.
4374 * buildbot/status/builder.py (Event.getLogs): same
4375 (BuildStepStatus): fix default .text and .results
4376 (BuildStepStatus.addLog): switch to list-like .getLogs()
4377 (BuildStepStatus.stepFinished): same
4378 (BuildStatus.text): fix default .text
4379 (BuildStatus.getLogs): temporary hack to return all logs (from all
4380 child BuildStepStatus objects). Needs to be fixed to only report
4381 the significant ones (as contributed by the steps themselves)
4382 * buildbot/test/test_run.py: handle list-like .getLogs()
4383 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4385 2004-08-28 Brian Warner <warner@lothar.com>
4387 * buildbot/process/builder.py (Builder.attached): serialize the
4388 attachment process, so the attach-watcher isn't called until the
4389 slave is really available. Add detached watchers too, which makes
4392 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4394 * buildbot/test/test_swap.py: remove dead code
4396 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4397 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4398 sort of as if the command being run exited with a -1. There may
4399 still be some holes in this scheme.
4400 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4401 -r option appears before the module list
4402 * buildbot/process/step.py (CVS): add 'revision' argument
4404 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4405 when sending updates or stepComplete messages to the master, since
4406 we don't currently care whether they arrive or not. When we revamp
4407 the master/slave protocol to really resume interrupted builds,
4408 this will need revisiting.
4409 (lostRemote): remove spurious print
4411 * buildbot/master.py (BotPerspective.attached): serialize the
4412 new-builder interrogation process, to make testing easier
4413 (BotMaster.waitUntilBuilderDetached): convenience function
4415 * buildbot/status/builder.py (BuilderStatus): prune old builds
4416 (BuildStatus.pruneSteps): .. and steps
4417 (BuildStepStatus.pruneLogs): .. and logs
4418 (BuilderStatus.getBuild): handle missing builds
4419 * buildbot/status/html.py (StatusResourceBuild.body): display build
4420 status in the per-build page
4421 (BuildBox.getBox): color finished builds in the per-build box
4423 2004-08-27 Brian Warner <warner@lothar.com>
4425 * buildbot/status/mail.py (MailNotifier): new notification class,
4428 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4429 variants of a common base class which handles all the mode= logic
4431 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4433 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4435 2004-08-26 Brian Warner <warner@lothar.com>
4437 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4440 * buildbot/test/test_run.py: update to new Logfile interface, new
4441 buildbot.slave modules
4442 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4444 * MANIFEST.in: new sample config file
4445 * docs/examples/hello.cfg: same
4447 * buildbot/process/step_twisted.py: remove dead import
4449 * buildbot/process/step.py (RemoteCommand.run): catch errors
4451 (RemoteCommand.remote_update): ignore updates that arrive after
4453 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4454 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4455 the responsibilities of the subclass's methods
4456 (BuildStep.failed): catch errors during failure processing
4457 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4458 (CVS): move to a mode= argument (described in docstring), rather
4459 than the ungainly clobber=/export=/copydir= combination.
4460 (SVN): add mode= functionality to SVN too
4461 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4463 * buildbot/process/base.py (Build.startNextStep): catch errors
4464 during s.startStep()
4466 * buildbot/clients/base.py: update to new PB client interface.
4467 gtkPanes is still broken
4469 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4470 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4471 * setup.py: add buildbot.slave module
4472 * buildbot/bb_tap.py: handle move
4473 * buildbot/slave/registry.py: place to register commands, w/versions
4474 * buildbot/slave/bot.py: major simplifications
4475 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4476 instead of a fixed table. Eventually this will make the slave more
4477 extensible. Use 'start' method on the command, not .startCommand.
4478 Fix unsafeTracebacks handling (I think).
4479 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4480 helper class with a .start method that returns a Deferred.
4481 SlaveShellCommand is the form reached by the buildmaster. Commands
4482 which use multiple ShellCommands can just chain them as Deferreds,
4483 with some helper methods in Command (_abandonOnFailure and
4484 _checkAbandoned) to bail on rc!=0.
4485 (CVSCommand): prefer new mode= argument
4486 (SVNFetch): add mode= argument
4488 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4489 put a useful reason string on the build
4491 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4492 core functionality into an IStatusLog object
4493 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4494 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4495 (StatusResourceBuild.body): use proper accessor methods
4496 * buildbot/status/client.py (RemoteLog): PB-access goes here
4497 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4498 which delivers log contents too
4499 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4500 * buildbot/status/event.py: remove old Logfile completely
4502 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4503 subscription interface for IStatusLog subscriptions just like all
4504 other the status subscriptions
4505 (IStatusReceiver.logChunk): method called on subscribers
4507 2004-08-24 Brian Warner <warner@lothar.com>
4509 * buildbot/process/builder.py (Builder._pong): oops, ping response
4510 includes a result (the implicit None returned by remote_print).
4511 Accept it so the _pong method handles the response correctly.
4513 2004-08-06 Brian Warner <warner@lothar.com>
4515 * buildbot/test/test_config.py: update IRC, PBListener tests
4517 * buildbot/status/client.py (StatusClientPerspective): total
4518 rewrite to match new IStatus interfaces. New subscription scheme.
4519 There are still a few optimizations to make (sending down extra
4520 information with event messages so the client doesn't have to do a
4521 round trip). The logfile-retrieval code is probably still broken.
4522 Moved the PB service into its own port, you can no longer share a
4523 TCP socket between a PBListener and, say, the slaveport (this
4524 should be fixed eventually).
4525 * buildbot/clients/base.py (Client): revamp to match. still needs
4526 a lot of work, but basic event reporting works fine. gtkPanes is
4529 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4530 instance talks to a single irc server. Threw out all the old
4531 multi-server handling code. Still need to add back in
4532 builder-control (i.e. "force build")
4534 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4535 more random text to the as-yet-unreachable per-step page
4537 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4538 rename to stepETAUpdate
4539 (BuildStatus.subscribe): add build-wide ETA updates
4540 (BuilderStatus.getState): remove more cruft
4541 (BuilderStatus.getCurrentBuild): remove more cruft
4542 (BuilderStatus.buildStarted): really handle tuple-subscription
4543 * buildbot/test/test_run.py (Status.testSlave): handle the
4544 stepETAUpdate rename
4546 * buildbot/master.py (BuildMaster): don't add a default
4547 StatusClientService. Don't add a default IrcStatusFactory. Both
4548 are now added through c['status'] in the config file. c['irc'] is
4549 accepted for backwards compatibility, the only quirk is you cannot
4550 use c['irc'] to specify IRC servers on ports other than 6667.
4552 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4553 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4554 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4555 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4558 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4559 the buildmaster to re-read its config file
4562 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4563 find out the port our server is running on
4564 (WebTest.test_webPathname_port): same
4566 * buildbot/test/test_config.py (testWebPortnum): test it
4567 (testWebPathname): ditto
4569 * docs/config.xhtml: document new c['status'] configuration option
4571 * buildbot/status/html.py (Waterfall): new top-level class which
4572 can be added to c['status']. This creates the Site as well as the
4573 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4574 reachable as .parent, for everything.
4576 * buildbot/master.py (Manhole): make it a normal service Child
4577 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4578 webPathname. It will eventually replace c['irc'] and the implicit
4579 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4580 in as (deprecated) backward compatibility hooks for now.
4583 * buildbot/process/builder.py (Builder.buildFinished): don't
4584 inform out builder_status about a finished build, as it finds out
4585 through its child BuildStatus object
4587 * buildbot/status/html.py: extensive revamp. Use adapters to make
4588 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4589 have both starting and finishing times and adjust the waterfall
4590 display accordingly, using spacers if necessary. Use SlaveStatus
4591 to get buildslave info.
4592 (StatusResourceBuildStep): new just-one-step resource, used to get
4593 logfiles. No actual href to it yet.
4595 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4596 the time being, until I get the file-naming scheme right
4598 * buildbot/status/builder.py (Event): clean started/finished names
4599 (BuildStatus.isFinished): .finished is not None is the right test
4600 (BuildStatus.buildStarted): track started/finished times ourselves
4601 (BuilderStatus.getSlave): provide access to SlaveStatus object
4602 (BuilderStatus.getLastFinishedBuild): all builds are now in
4603 .builds, even the currently-running one. Accomodate this change.
4604 (BuilderStatus.eventGenerator): new per-builder event generator.
4605 Returns BuildStepStatus and BuildStatus objects, since they can
4606 both be adapted as necessary.
4607 (BuilderStatus.addEvent): clean up started/finished attributes
4608 (BuilderStatus.startBuild,finishBuild): remove dead code
4609 (SlaveStatus): new object to provide ISlaveStatus
4611 * buildbot/process/step.py (ShellCommand.getColor): actually
4612 return the color instead of setting it ourselves
4613 (CVS.__init__): pull .timeout and .workdir options out of
4614 **kwargs, since BuildStep will ignore them. Without this neither
4615 will be sent to the slave correctly.
4616 (SVN.__init__): same
4618 * buildbot/process/builder.py (Builder): move flags to class-level
4620 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4621 SlaveStatus handle that
4623 * buildbot/process/base.py (Build.firstEvent): remove dead code
4624 (Build.stopBuild): bugfix
4626 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4628 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4629 (ChangeMaster.eventGenerator): yield Changes, since there are now
4630 Adapters to turn them into HTML boxes
4632 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4633 (BotPerspective.attached): feed a SlaveStatus object
4634 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4635 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4637 * buildbot/interfaces.py: API additions
4638 (ISlaveStatus): place to get slave status
4640 2004-08-04 Brian Warner <warner@lothar.com>
4642 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4643 the delay finishes, so the step is marked as SUCCESS
4645 * buildbot/test/test_run.py (Status.testSlave): cover more of
4646 IBuildStatus and IBuildStepStatus
4648 * buildbot/status/progress.py (StepProgress): move some flags to
4649 class-level attributes
4650 (StepProgress.remaining): if there are no other progress metrics
4651 to go by, fall back to elapsed time
4652 (StepProgress.setExpectations): take a dict of metrics instead of
4654 (BuildProgress.setExpectationsFrom): pull expectations from the
4655 Expectations, instead of having it push them to the BuildProgress
4656 (Expectations): move some flags to class-level attributes
4657 (Expectations.__init__): copy per-step times from the
4659 (Expectations.expectedBuildTime): new method for per-build ETA
4661 * buildbot/status/event.py (Logfile): move some flags to
4662 class-level attributes
4663 (Logfile.logProgressTo): better method name, let step set the
4664 progress axis name (instead of always being "output")
4666 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4667 times directly, rather than depending upon the (possibly missing)
4668 .progress object. Use 'None' to indicate "not started/finished
4670 (BuildStepStatus.getExpectations): oops, return the full list of
4672 (BuilderStatus._buildFinished): append finished builds to .builds
4674 * buildbot/process/step.py (BuildStep): add separate .useProgress
4675 flag, since empty .progressMetrics[] still implies that time is a
4677 (CVS): set up the cmd in __init__, instead of waiting for start()
4679 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4680 calculation, this will eventually turn into a proper sourceStamp
4681 (Build.setupBuild): tell the Progress to load from the Expectations,
4682 instead of having the Expectations stuff things into the Progress
4683 (Build.buildException): add a build-level errback to make sure the
4684 build's Deferred fires even in case of exceptions
4686 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4688 * buildbot/process/builder.py (Builder.forceBuild): convey the
4689 reason instead of creating a fake Change
4691 * docs/examples/twisted_master.cfg: update to match reality
4693 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4694 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4695 fix or remove broken/breaking tests
4697 * buildbot/status/event.py (Logfile.__len__): remove evil method
4699 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4700 missing .build, for test convenience
4702 * buildbot/process/step_twisted.py: import fixes
4704 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4706 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4707 .statusbag reference
4709 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4710 connection at shutdown, and stop it from reconnecting
4712 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4713 chase down remote-execution bugs
4715 * buildbot/process/step.py: more fixes, remove
4716 BuildStep.setStatus()
4717 * buildbot/status/builder.py: move setStatus() functionality into
4719 * buildbot/status/event.py: minor fixes
4721 2004-08-03 Brian Warner <warner@lothar.com>
4723 * buildbot/process/base.py, buildbot/process/builder.py
4724 * buildbot/process/step.py, buildbot/status/builder.py
4725 * buildbot/status/event.py, buildbot/test/test_run.py:
4726 fix status delivery, get a basic test case working
4727 * buildbot/master.py: finish implementing basic status delivery,
4728 temporarily disable HTML/IRC/PB status sources
4730 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4732 * buildbot/status/progress.py (BuildProgress): remove dead code
4734 * buildbot/interfaces.py
4735 * buildbot/process/base.py, buildbot/process/builder.py
4736 * buildbot/process/step.py, buildbot/process/step_twisted.py
4737 * buildbot/status/builder.py: Complete overhaul of the all
4738 status-delivery code, unifying all types of status clients (HTML,
4739 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4740 look like. This commit is a checkpointing of the work-in-progress:
4741 the input side is mostly done (Builders/Builds sending status
4742 to the BuilderStatus/BuildStatus objects), but the output side has
4743 not yet been started (HTML resources querying BuilderStatus
4744 objects). Things are probably very broken right now and may remain
4745 so for several weeks, I apologize for the disruption.
4747 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4748 HTML as the log's contents. Currently used for exception tracebacks.
4749 * buildbot/status/progress.py: minor spelling changes
4751 2004-08-02 Brian Warner <warner@lothar.com>
4753 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4754 in mozilla. Also added stylesheets copied from Twisted's docs.
4755 Remember that these files are meant to be run through Lore first.
4756 Thanks to Philipp Frauenfelder for the fixes.
4757 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4758 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4759 * docs/template.tpl: added a Lore template
4761 2004-07-29 Brian Warner <warner@lothar.com>
4763 * buildbot/interfaces.py: revamp status delivery. This is the
4764 preview: these are the Interfaces that will be provided by new
4765 Builder code, and to which the current HTML/IRC/PB status
4766 displayers will be adapted.
4768 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4769 on the SlaveBuilder, not the Bot.
4770 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4772 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4773 set .usePTY on the FakeSlaveBuilder
4775 2004-07-25 Brian Warner <warner@lothar.com>
4777 * buildbot/changes/freshcvs.py: add some debug log messages
4778 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4779 disabled 'setFilter' syntax
4780 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4781 don't end with a slash
4783 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4785 * setup.py: bump to 0.5.0+ while between releases
4787 2004-07-23 Brian Warner <warner@lothar.com>
4789 * setup.py (version): Releasing buildbot-0.5.0
4791 2004-07-23 Brian Warner <warner@lothar.com>
4793 * README: update for 0.5.0 release
4795 * NEWS: update for 0.5.0 release
4797 2004-07-22 Brian Warner <warner@lothar.com>
4799 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4800 mktap-time configuration flag (--usepty=1, --usepty=0)
4801 * buildbot/bot.py: same
4803 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4804 an 'info' directory being unwanted
4806 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4807 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4808 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4809 and earlier), use a FreshCVSSourceOldcred instead.
4810 (test): simple test routine: connect to server, print changes
4812 * buildbot/changes/changes.py (Change.getTime): make it possible
4813 to print un-timestamped changes
4815 * buildbot/master.py (makeApp): delete ancient dead code
4816 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4817 * buildbot/test/test_config.py (testFindConfigFile): test it
4819 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4820 instead of win32 one
4823 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4824 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4827 * buildbot/process/base.py (Builder.__init__): change constructor
4828 to accept a dictionary of config data, rather than discrete
4829 name/slave/builddir/factory arguments
4831 * docs/examples/twisted_master.cfg: update to new syntax
4832 * docs/examples/glib_master.cfg: same
4833 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4834 rough tests of the new syntax
4837 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4838 to be an int, which means "run a web.distrib sub-server on a TCP
4839 port". This lets you publish the buildbot status page to a remote
4840 twisted.web server (using distrib.ResourceSubscription). Also
4841 rename the local attributes used to hold these web things so
4842 they're more in touch with reality.
4843 * buildbot/test/test_web.py: test webPortnum and webPathname
4844 * docs/config.xhtml: document this new use of webPathname
4846 * docs/config.xhtml: new document, slightly ahead of reality
4848 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4849 'prefix' handling: treat it as a simple string to check with
4850 .startswith, instead of treating it as a directory. This allows
4851 sub-directories to be used. If you use prefix=, you should give it
4852 a string that starts just below the CVSROOT and ends with a slash.
4853 This prefix will be stripped from all filenames, and filenames
4854 which do not start with it will be ignored.
4856 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4858 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4859 and --exclude (inverse of --include). SVN post-commit hooks
4860 now have total control over which changes get sent to buildbot and which
4863 2004-07-10 Brian Warner <warner@lothar.com>
4865 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4866 test case to match new API
4868 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4869 which crashed HTML display when self.entries=[] (needed to
4870 distinguish between [], which means "no entries yet", and None,
4871 which means "the entries have been swapped out to disk, go fetch
4874 2004-07-04 Brian Warner <warner@lothar.com>
4876 * buildbot/process/step_twisted.py (countFailedTests): Count
4877 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4878 10kb from the end because any import errors are wedged there and
4879 they would make us think the test log was unparseable.
4880 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4882 2004-06-26 Brian Warner <warner@lothar.com>
4884 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4885 delete-*.pyc command into an actual BuildStep, so we can label it
4887 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4888 (FullTwistedBuildFactory): same
4890 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4892 * contrib/fakechange.py: Add an errback when sending the fake
4893 change, so we know it didn't work.
4895 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4897 * buildbot/process/step_twisted.py: Delete *.pyc files before
4898 calling trial, so it doesn't catch any old .pyc files whose .py
4899 files have been moved or deleted.
4901 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4902 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4903 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4904 instead of ["twisted.test"], so that the end result is "trial -R
4907 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4908 regular expression to match filenames that should be ignored when
4909 changed. Also add a --revision parameter that specifies the
4910 revision to examine, which is useful for debugging.
4912 2004-06-25 Brian Warner <warner@lothar.com>
4914 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4915 summary of warnings (like DeprecationWarnings), next to the
4918 2004-05-13 Brian Warner <warner@lothar.com>
4920 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4921 we now have a w32 build slave courtesy of Mike Taylor.
4923 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4924 so broken. Fixed a race condition that tripped up interlocked
4925 builds and caused the status to be stuck at "Interlocked" forever.
4926 The twisted buildbot's one interlocked build just so happened to
4927 never hit this case until recently (the feeding builds both pass
4928 before the interlocked build is attempted.. usually it has to wait
4930 (Builder._pong_failed): fix method signature
4932 * setup.py: bump to 0.4.3+ while between releases
4934 2004-04-30 Brian Warner <warner@lothar.com>
4936 * setup.py (version): Releasing buildbot-0.4.3
4938 2004-04-30 Brian Warner <warner@lothar.com>
4940 * MANIFEST.in: add the doc fragments in docs/*.xhtml
4942 * README: update for 0.4.3 release
4944 * NEWS: update for 0.4.3 release
4946 * buildbot/master.py (BuildMaster.__getstate__): make sure
4947 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4949 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4950 .trial as a class attribute, for upgrade from 0.4.2
4952 * buildbot/changes/changes.py (Change.links): add .links for
4955 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4956 .textWatchers and .htmlWatchers at save time, since they are both
4957 volatile, should allow smooth 0.4.2 upgrade
4959 * buildbot/process/step.py (CVS.finishStatus): catch failed
4960 CVS/SVN commands so we can make the status box red
4962 2004-04-29 Brian Warner <warner@lothar.com>
4964 * buildbot/changes/freshcvs.py
4965 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4966 code to do setFilter(), which tells the freshcvs daemon to not
4967 send us stuff that we're not interested in. I will uncomment it
4968 when a new version of CVSToys is available in which setFilter()
4969 actually works, and I get a chance to test it better.
4971 * docs/examples/twisted_master.cfg: start using a PBChangeSource
4973 * buildbot/master.py (Dispatcher): use a registration scheme
4974 instead of hardwired service names
4975 (BuildMaster): keep track of the Dispatcher to support
4978 * buildbot/changes/changes.py (ChangeMaster): create a distinct
4979 PBChangeSource class instead of having it be an undocumented
4980 internal feature of the ChangeMaster. Split out the code into a
4982 * buildbot/changes/pb.py (PBChangeSource): same
4983 * buildbot/test/test_changes.py: a few tests for PBChangeSource
4985 * docs/{factories|sources|steps}.xhtml: document some pieces
4987 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4988 using FCMaildirSource
4989 (f23osx): update OS-X builder to use python2.3, since the slave
4990 was updated to Panther (10.3.3)
4992 2004-03-21 Brian Warner <warner@lothar.com>
4994 * buildbot/process/process_twisted.py: factor out doCheckout, change
4995 to use SVN instead of CVS
4997 * buildbot/process/base.py (BasicBuildFactory): refactor to make
4998 an SVN subclass easier
4999 (BasicSVN): subclass which uses Subversion instead of CVS
5001 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5003 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5005 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5007 2004-02-25 Brian Warner <warner@lothar.com>
5009 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5010 is now either a list (which is passed to spawnProcess directly) or
5011 a string (which gets passed to /bin/sh -c). This removes the useSH
5012 flag and the ArgslistCommand class. Also send status header at the
5013 start and end of each command, instead of having the master-side
5015 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5016 -r'. Update to use list-based arguments.
5017 (SVNFetch): use list-based arguments, use ['dir'] argument to
5019 * buildbot/test/test_steps.py (Commands): match changes
5021 * buildbot/process/step.py (InternalShellCommand.words): handle
5023 (SVN): inherit from CVS, cleanup
5025 * buildbot/status/event.py (Logfile.content): render in HTML, with
5026 stderr in red and headers (like the name of the command we're
5027 about to run) in blue. Add link to a second URL (url + "?text=1")
5028 to get just stdout/stderr in text/plain without markup. There is
5029 still a problem with .entries=None causing a crash, it seems to occur
5030 when the logfile is read before it is finished.
5032 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5033 timeout to the keepalives, and use it to explicitly do a
5034 loseConnection instead of waiting for TCP to notice the loss. This
5035 ought to clear up the silent-lossage problem.
5036 (unsafeTracebacks): pass exception tracebacks back to the master,
5037 makes it much easier to debug problems
5039 2004-02-23 Brian Warner <warner@lothar.com>
5041 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5042 the whole command to /bin/sh instead of execve [Johan Dahlin]
5043 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5044 '-r HEAD' [Johan Dahlin]
5045 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5047 * buildbot/changes/changes.py (Change): add links= argument, add
5048 asHTML method [Johan Dahlin]. Modified to make a bit more
5049 XHTMLish. Still not sure how to best use links= .
5051 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5052 Change.asHTML to display the change, not asText
5054 * buildbot/status/html.py (StatusResourceBuilder): web button to
5057 * buildbot/test/test_run.py: test to actually start a buildmaster
5060 * MANIFEST.in: bring back accidentally-dropped test helper files
5062 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5063 that require cvstoys if it is not installed
5065 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5066 values of "bin/trial" [Dave Peticolas]
5067 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5068 tests passed" when we didn't happen to run any tests
5070 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5071 flunkOnFailure [Johan Dahlin]
5073 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5074 multiple instances of the same Step class by suffixing "_2", etc,
5075 to the name until it is unique. This name needs to be unique
5076 because it is used as a key in the dictionary that tracks build
5078 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5081 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5083 2004-01-14 Brian Warner <warner@lothar.com>
5085 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5086 kicked from a channel, log it
5088 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5089 something over whatever IRC channels the buildmaster is currently
5090 connected to. Added to try and track down a problem in which the
5091 master thinks it is still connected but the IRCd doesn't see it. I
5092 used a styles.Versioned this time, so hopefully users won't have
5093 to rebuild their .tap files this time.
5094 * contrib/debug.glade: add a "Poke IRC" button
5095 * contrib/debugclient.py: same
5097 * setup.py: bump to 0.4.2+ while between releases
5099 2004-01-08 Brian Warner <warner@lothar.com>
5101 * setup.py (version): Releasing buildbot-0.4.2
5103 2004-01-08 Brian Warner <warner@lothar.com>
5105 * NEWS: update for 0.4.2 release
5107 * README: document how to run the tests, now that they all pass
5109 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5111 * buildbot/process/step.py (CVS): add a global_options= argument,
5112 which lets you set CVS global options for the command like "-r"
5113 for read-only checkout, or "-R" to avoid writing in the
5115 * buildbot/slavecommand.py (CVSCommand): same
5117 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5118 testing easier (it is turned off when testing, to avoid the
5121 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5122 to make it easier to test: break generateStepID() out to a
5123 separate function, only update statusbag if it exists.
5124 (ShellCommands): create useful text for dict-based commands too.
5126 * test/*, buildbot/test/*: move unit tests under the buildbot/
5128 * setup.py (packages): install buildbot.test too
5130 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5131 * buildbot/test/test_steps.py: fix it, tests pass now
5133 2004-01-06 Brian Warner <warner@lothar.com>
5135 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5136 freshcvs mail uses a slightly different syntax for new
5137 directories. Update parser to handle either.
5138 * test/test_mailparse.py (Test1.testMsg9): test for same
5140 2003-12-21 Brian Warner <warner@lothar.com>
5142 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5143 'warnOnWarnings' so that lintian errors mark the build orange
5145 2003-12-17 Brian Warner <warner@lothar.com>
5147 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5148 messages emitted by Bonsai, contributed by Stephen Davis.
5150 * test/*: moved all tests to use trial instead of unittest. Some
5151 still fail (test_steps, test_slavecommand, and test_process).
5153 * setup.py (version): bump to 0.4.1+ while between releases
5155 2003-12-09 Brian Warner <warner@lothar.com>
5157 * setup.py (version): Releasing buildbot-0.4.1
5159 2003-12-09 Brian Warner <warner@lothar.com>
5161 * NEWS: update for 0.4.1 release
5163 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5164 freebsd builder code a little bit
5166 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5167 don't try to compare attributes of different classes
5168 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5169 (MaildirSource.messageReceived): fix Change delivery
5171 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5172 into the config file's namespace before loading it, like the
5173 documentation claims it does
5174 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5175 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5176 daemon comes back online
5178 2003-12-08 Brian Warner <warner@lothar.com>
5180 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5181 so the example will work with online=0 as well
5183 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5184 fix the __implements__ line
5186 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5187 class a twisted.application.service.Service, use startService to
5190 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5191 directory fd instead of simple open(). I'm sure this used to work,
5192 but the current version of python refuses to open directories with
5195 2003-12-05 Brian Warner <warner@lothar.com>
5197 * setup.py (version): bump to 0.4.0+ while between releases
5199 2003-12-05 Brian Warner <warner@lothar.com>
5201 * setup.py (version): Releasing buildbot-0.4.0
5203 2003-12-05 Brian Warner <warner@lothar.com>
5205 * docs/examples/glib_master.cfg: replace old sample scripts with
5206 new-style config files
5207 * MANIFEST.in: include .cfg files in distribution tarball
5209 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5210 implement a dummy method to avoid the exception that occurs when
5211 freshcvs sends this to us.
5213 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5214 removed the method, as it broke reconnection. Apparently
5215 stopFactory is called each time the connection attempt fails. Must
5217 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5218 attribute before serialization, since without stopFactory the
5219 reconnect timer may still be active and they aren't serializable.
5221 * test/test_mailparse.py (ParseTest): test with 'self' argument
5223 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5224 argument, as these "functions" are invoked like methods from class
5225 attributes and therefore always get an instance as the first
5228 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5229 message: thanks to Stephen Davis for the catch
5231 2003-12-04 Brian Warner <warner@lothar.com>
5233 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5234 twisted's standard ReconnectingClientFactory. Handles both oldcred
5235 and newcred connections. Also has a bug-workaround for
5236 ReconnectingClientFactory serializing its connector when it
5239 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5240 pbutil. Replace makeApp stuff with proper newcred/mktap
5241 makeService(). Don't serialize Ephemerals on shutdown.
5243 * buildbot/changes/changes.py (ChangeMaster): make it a
5244 MultiService and add the sources as children, to get startService
5245 and stopService for free. This also gets rid of the .running flag.
5247 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5248 new pbutil, turn into a TCPClient at the same time (to get
5249 startService for free). Two variants exist: FreshCVSSourceOldcred
5250 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5251 yet, but when it does, we'll be ready).
5252 (FreshCVSSource.notify): handle paths which are empty after the
5253 prefix is stripped. This only happens when the top-level (prefix)
5254 directory is added, at the very beginning of a Repository's life.
5256 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5257 Now the only reconnecting code is in the factory where it belongs.
5258 (Builder.unsubscribe): unregister the disconnect callback when we
5259 delete the builder on command from the master (i.e. when the
5260 buildmaster is reconfigured and that builder goes away). This
5261 fixes a multiple-delete exception when the status client is shut
5263 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5266 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5267 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5269 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5271 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5272 a list of globs (ugh). The testdir will be searched for files
5273 named *.tests and run the tests in the order specified in each of
5274 those files. This allows for "dependancies" between tests to be
5277 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5278 argument to pass to run_maxq.py, instead of a glob.
5280 2003-10-17 Brian Warner <warner@lothar.com>
5282 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5283 files that live in the sandbox
5285 2003-10-15 Brian Warner <warner@lothar.com>
5287 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5288 spelling error in "docs" count-warnings output
5289 (HLint.start): stupid thinko meant .xhtml files were ignored
5291 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5292 tests now that cReactor is banished to the sandbox
5294 2003-10-10 Brian Warner <warner@lothar.com>
5296 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5297 scheme: now .xhtml are sources and .html are generated
5299 2003-10-08 Brian Warner <warner@lothar.com>
5301 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5302 we were ignoring the 'randomly' parameter.
5304 2003-10-01 Brian Warner <warner@lothar.com>
5306 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5307 posix, to kill sub-children of aborted slavecommands.
5309 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5310 Clean up initialization: lastBuildStatus remains None until the
5311 first build has been completed.
5313 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5314 None as a lastBuildStatus
5315 * buildbot/clients/gtkPanes.py: same
5317 * buildbot/status/client.py (StatusClientService): keep
5318 BuilderStatus objects in self.statusbags . These objects now live
5319 here in the StatusClientService and are referenced by the Builder
5320 object, rather than the other way around.
5321 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5322 * buildbot/process/base.py (Builder): same
5323 * test/test_config.py (ConfigTest.testBuilders): same
5325 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5326 an existing builder, leave the statusbag alone. This will preserve the
5329 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5330 hook. This will probably go away in favor of a class in upcoming
5333 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5334 serviceName from newcred FreshCVSNotifiee setup
5336 2003-09-29 Brian Warner <warner@lothar.com>
5338 * buildbot/process/process_twisted.py: switch to new reactor
5340 * docs/examples/twisted_master.cfg: same
5342 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5344 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5345 botmaster reference instead of the oldapp service lookup
5347 * buildbot/master.py (BuildMaster.__init__): give the
5348 StatusClientService a reference to the botmaster to make it easier to
5351 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5353 * buildbot/status/html.py (Box.td): escape hreffy things so you
5354 can have spaces in things like builder names
5355 (StatusResourceBuilder.body)
5356 (WaterfallStatusResource.body)
5357 (WaterfallStatusResource.body0): same
5359 2003-09-25 Brian Warner <warner@lothar.com>
5361 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5362 rearrange the builder list when adding or removing builders: keep
5363 them in the order the user requested.
5364 * test/test_config.py (ConfigTest.testBuilders): verify it
5366 * contrib/debug.glade: give the debug window a name
5368 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5369 now wait on multiple interlocks. Fix code relating to that.
5370 (Builder.checkInterlocks): same
5371 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5373 * buildbot/master.py (BuildMaster.loadConfig): move from
5374 deprecated pb.BrokerFactory to new pb.PBServerFactory
5375 * test/test_config.py (ConfigTest.testWebPathname): same
5377 * docs/examples/twisted_master.cfg: fix interlock declaration
5379 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5380 Interlocks to their Builders into interlock.py .
5381 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5383 * test/test_config.py (ConfigTest.testInterlocks): validate
5386 * buildbot/process/base.py (Builder.__init__): better comments
5387 * buildbot/process/interlock.py (Interlock.__repr__): same
5388 (Interlock.deactivate): add .active flag, move the code that
5389 attaches/detaches builders into the Interlock
5391 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5393 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5394 tests using the new run_maxq.py script, and reporting failures by
5397 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5398 tests, reporting their success or failure in a buildbot-friendly
5401 2003-09-24 Brian Warner <warner@lothar.com>
5403 * docs/examples/twisted_master.cfg: example of a new-style config
5404 file. This lives in the buildmaster base directory as
5407 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5408 button to make the master re-read its config file
5410 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5411 buildmaster configuration from a file. This file can be re-read
5412 later, and the buildmaster will update itself to match the new
5413 desired configuration. Also use new Twisted Application class.
5414 * test/Makefile, test/test_config.py: unit tests for same
5416 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5417 FreshCVSSources comparable, to support reload.
5418 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5420 * buildbot/process/base.py (Builder): make them comparable, make
5421 Interlocks easier to attach, to support reload. Handle
5422 re-attachment of remote slaves.
5423 * buildbot/process/interlock.py (Interlock): same
5425 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5426 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5427 buildmaster taps are now constructed with mktap.
5428 * buildbot/status/client.py (StatusClientService): same
5430 * buildbot/status/words.py: move to new Services, add support to
5431 connect to multiple networks, add reload support, allow nickname
5432 to be configured on a per-network basis
5434 2003-09-20 Brian Warner <warner@lothar.com>
5436 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5437 the freebsd builder, now that the machine has been upgraded and no
5438 longer has python2.2
5440 * setup.py (version): bump to 0.3.5+ while between releases
5442 2003-09-19 Brian Warner <warner@lothar.com>
5444 * setup.py (version): Releasing buildbot-0.3.5
5446 2003-09-19 Brian Warner <warner@lothar.com>
5448 * NEWS: add post-0.3.4 notes
5450 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5452 * MANIFEST.in: add contrib/*
5454 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5455 use a remote root now: cvs.twistedmatrix.com
5457 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5459 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5460 compatibility with old servers
5461 (FreshCVSSource.start): and provide a way to use it
5462 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5464 * docs/examples/twisted_master.py (twisted_app): update to new
5466 (twisted_app): listen on new ~buildbot socket
5467 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5469 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5470 to reduce cvs bandwidth (update instead of full checkout)
5472 2003-09-11 Brian Warner <warner@lothar.com>
5474 * contrib/fakechange.py: demo how to connect to the changemaster
5475 port. You can use this technique to submit changes to the
5476 buildmaster from source control systems that offer a hook to run a
5477 script when changes are committed.
5479 * contrib/debugclient.py: tool to connect to the debug port. You
5480 can use it to force builds, submit fake changes, and wiggle the
5483 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5484 'Dispatcher' realm to handle all the different kinds of
5485 connections and Perspectives: buildslaves, the changemaster port,
5486 the debug port, and the status client port. NewCredPerspectives
5487 now have .attached/.detached methods called with the remote 'mind'
5488 reference, much like old perspectives did. All the pb.Services
5489 turned into ordinary app.ApplicationServices .
5490 (DebugService): went away, DebugPerspectives are now created
5491 directly by the Dispatcher.
5492 (makeApp): changed interface a little bit
5494 * buildbot/changes/changes.py: newcred
5495 * buildbot/status/client.py: newcred
5497 * buildbot/clients/base.py: newcred client side changes
5498 * buildbot/bot.py: ditto
5500 * docs/examples/glib_master.py: handle new makeApp() interface
5501 * docs/examples/twisted_master.py: ditto
5503 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5504 base newcred Perspectives on. This should go away once Twisted
5505 itself provides something sensible.
5508 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5510 * contrib/svn_buildbot.py: A program that you can call from your
5511 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5512 when a change in an SVN repository has happened. See the top of
5513 the file for some minimal usage info.
5515 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5517 * buildbot/slavecommand.py (ArglistCommand): Add new
5518 ArglistCommand that takes an argument list rather than a string as
5519 a parameter. Using a st.split() for argv is very bad.
5521 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5522 update to a particular revision rather than always checking out
5523 (still not very smart about it, there may be cases where the
5524 checkout becomes inconsistent).
5526 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5528 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5529 SVN fetch support. It can checkout (not update!) a specified
5530 revision from a specified repository to a specified directory.
5532 * buildbot/status/progress.py (Expectations.update): Fix an
5533 obvious bug (apparently created by the change described in the
5534 previous ChangeLog message) by moving a check to *after* the
5535 variable it checks is defined.
5538 2003-09-08 Brian Warner <warner@lothar.com>
5540 * buildbot/status/progress.py (Expectations.update): hack to catch
5541 an exception TTimo sees: sometimes the update() method seems to
5542 get called before the step has actually finished, so the .stopTime
5543 is not set, so no totalTime() is available and we average None
5544 with the previous value. Catch this and just don't update the
5545 metrics, and emit a log message.
5547 2003-08-24 Brian Warner <warner@lothar.com>
5549 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5550 parameter to set copydir='original' in CVS commands.
5552 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5554 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5555 which tells the command to maintain a separate original-source CVS
5556 workspace. For each build, this workspace will be updated, then
5557 the tree copied into a new workdir. This reduces CVS bandwidth
5558 (from a full checkout to a mere update) while doubling the local
5559 disk usage (to keep two copies of the tree).
5561 2003-08-21 Brian Warner <warner@lothar.com>
5563 * buildbot/status/event.py (Logfile.addEntry): if the master web
5564 server dies while we're serving a page, request.write raises
5565 pb.DeadReferenceError . Catch this and treat it like a
5566 notifyFinish event by dropping the request.
5568 2003-08-18 Brian Warner <warner@lothar.com>
5570 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5571 (instead of blowing up) if a force-build command is given without
5574 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5575 don't blow up if there aren't yet any Changes in the list
5577 2003-08-02 Brian Warner <warner@lothar.com>
5579 * buildbot/bot.py (updateApplication): don't set the .tap name,
5580 since we shouldn't assume we own the whole .tap file
5582 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5583 'mktap buildbot' (without a subcommand) better
5585 2003-07-29 Brian Warner <warner@lothar.com>
5587 * buildbot/status/words.py
5588 (IrcStatusFactory.clientConnectionLost): when we lose the
5589 connection to the IRC server, schedule a reconnection attempt.
5591 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5592 use shutil.rmtree instead of forking off an "rm -rf" command.
5593 rmtree may take a while and will block until it finishes, so we
5594 use "rm -rf" if available.
5596 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5597 freebsd buildslave badly
5599 * setup.py (version): bump to 0.3.4+ while between releases
5601 2003-07-28 Brian Warner <warner@lothar.com>
5603 * setup.py (version): Releasing buildbot-0.3.4
5605 2003-07-28 Brian Warner <warner@lothar.com>
5607 * NEWS: update in preparation for release
5609 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5610 process.signalProcess instead of os.kill, to improve w32
5613 * docs/examples/twisted_master.py (twisted_app): turn off
5614 win32eventreactor: the tests hang the buildslave badly
5616 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5617 failed builds, since usually the failures are consistent
5619 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5620 add compileOpts/compileOpts2 to reactors build
5622 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5623 (twisted_app): use both default and win32eventreactor on w32 build.
5624 Use both default and kqreactor on freebsd build.
5626 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5627 add compileOpts2, which is put after the build_ext argument. w32
5628 needs "-c mingw32" here.
5630 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5631 touch .acqpath, it goes away in recent Twisted releases
5633 * docs/examples/twisted_master.py (twisted_app): use "python" for
5634 the w32 buildslave, not "python2.2"
5636 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5637 the directory exists.. should hush an exception under w32
5639 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5640 ProcessTerminated -provided values for signal and exitCode rather
5641 than parsing the unix status code directly. This should remove one
5642 more roadblock for a w32-hosted buildslave.
5644 * test/test_mailparse.py: add test cases for Syncmail parser
5646 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5647 temporary compatibility import. Note! Start importing
5648 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5650 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5652 2003-07-27 Brian Warner <warner@lothar.com>
5654 * NEWS: started adding new features
5656 * buildbot/changes/mail.py: start work on Syncmail parser, move
5657 mail sources into their own file
5659 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5660 as implementing IChangeSource
5661 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5663 * buildbot/interfaces.py: define the IChangeSource interface
5665 2003-07-26 Brian Warner <warner@lothar.com>
5667 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5669 2003-06-25 Brian Warner <warner@lothar.com>
5671 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5674 2003-06-17 Brian Warner <warner@lothar.com>
5676 * buildbot/status/words.py: clean up method usage to avoid error
5677 in silly IRC command
5678 (IrcStatusBot.emit_status): round off seconds display
5680 * buildbot/process/base.py (Build): delete the timer when saving
5681 to the .tap file, and restore it (if it should still be running)
5682 upon restore. This should fix the "next build in -34 seconds"
5683 messages that result when the master is restarted while builds are
5684 sitting in the .waiting slot. If the time for the build has
5685 already passed, start it very soon (in 1 second).
5687 * buildbot/status/words.py: more silly commands
5689 * README (REQUIREMENTS): add URLs to all required software
5691 * buildbot/status/words.py ('last'): mention results of, and time
5694 2003-05-28 Brian Warner <warner@lothar.com>
5696 * buildbot/status/words.py: add 'last' command
5697 (IrcStatusBot.emit_status): add current-small text to 'status' output
5699 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5700 (twisted_app): remove spaces from OS-X builder name
5702 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5703 * buildbot/status/words.py: IRC bot should actually be useful now
5705 2003-05-23 Brian Warner <warner@lothar.com>
5707 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5708 "slave information" from $(slavedir)/info/* . These files are
5709 maintained by the slave administrator, and describe the
5710 machine/environment that is hosting the slave. Information from
5711 them is put into the "Builder" HTML page. Still need to establish
5712 a set of well-known filenames and meanings for this data: at the
5713 moment, *all* info/* files are sent to the master, but only
5714 'admin' and 'host' are used on that end.
5715 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5716 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5717 * buildbot/master.py (BotPerspective.got_info): ditto
5719 2003-05-22 Brian Warner <warner@lothar.com>
5721 * setup.py (version): bump version to 0.3.3+ while between releases
5723 2003-05-21 Brian Warner <warner@lothar.com>
5725 * setup.py: Releasing buildbot-0.3.3
5727 2003-05-21 Brian Warner <warner@lothar.com>
5729 * NEWS: 0.3.3 news items
5731 * README: describe --keepalive and life behind a NAT box
5733 * buildbot/bot.py (Bot.connected): implement application-level
5734 keepalives to deal with NAT timeouts, turn them on with
5735 --keepalive option or when SO_KEEPALIVE doesn't work.
5737 * buildbot/master.py (BotPerspective): accept keepalives silently
5739 * buildbot/process/base.py (Build.buildException): CopiedFailures
5740 don't carry as much information as local ones, so don't try to
5741 create a big HTMLized version of them.
5743 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5744 log file when step fails due to an exception, such as when the slave
5747 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5748 --testmodule argument instead of grepping for test-case-name tags
5749 ourselves. Remove FindUnitTests code.
5750 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5752 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5754 2003-05-16 Brian Warner <warner@lothar.com>
5756 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5757 argument to allow things like CFLAGS=-O0 to be passed without relying
5758 upon /bin/sh processing on the slave.
5760 * buildbot/process/step.py (InternalShellCommand.start): send
5762 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5763 'split' instead of letting /bin/sh do it. This should also remove
5764 the need for /bin/sh on the buildslave, making it more likely to
5767 * buildbot/status/html.py: html-escape text in blamelist.
5768 Add "force build" button to the Builder page.
5770 * buildbot/process/step_twisted.py (countFailedTests): look at
5771 last 1000 characters for status line, as import errors can put it
5772 before the -200 point.
5774 2003-05-15 Brian Warner <warner@lothar.com>
5776 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5778 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5779 make 'clobber' a parameter, so it is possible to have builds which
5780 do full tests but do a cvs update instead of hammering the CVS
5781 server with a full checkout each build
5783 * buildbot/process/step.py (InternalShellCommand): bump default
5784 timeout to 20 minutes
5786 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5787 the master to trigger a build. Run it via manhole.
5789 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5790 allow slaves to trigger any build that they host, to make life
5791 easier for slave admins who are testing out new build processes
5793 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5794 don't flunk cReactor or qtreactor on failure, since they fail alot
5795 these days. Do warnOnFailure instead.
5797 * buildbot/process/base.py: change Builder.buildable from a list
5798 into a single slot. When we don't have a slave, new builds (once
5799 they make it past the timeout) are now merged into an existing
5800 buildable one instead of being queued. With this change, a slave
5801 which has been away for a while doesn't get pounded with all the
5802 builds it missed, but instead just does a single build.
5804 2003-05-07 Brian Warner <warner@lothar.com>
5806 * setup.py (version): bump version to 0.3.2+ while between releases
5808 2003-05-07 Brian Warner <warner@lothar.com>
5810 * setup.py: Releasing buildbot-0.3.2
5812 2003-05-07 Brian Warner <warner@lothar.com>
5814 * setup.py: fix major packaging error: include subdirectories!
5816 * NEWS: add changes since last release
5818 * README (REQUIREMENTS): update twisted/python dependencies
5820 * buildbot/status/builder.py (Builder.startBuild): change
5821 BuildProcess API: now they should call startBuild/finishBuild
5822 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5823 keeping a list of builds in the statusbag, to support other kinds of
5825 (Builder.addClient): send current-activity-small to new clients
5826 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5829 * buildbot/status/client.py: drop RemoteReferences at shutdown
5831 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5833 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5834 more debug messages for remote status client
5836 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5837 (.stepFailed): only fire the Deferred once, even if both
5838 stepComplete and stepFailed are called. I think this can happen if
5839 an exception occurs at a weird time.
5841 * buildbot/status/words.py: work-in-progress: IRC status delivery
5843 2003-05-05 Brian Warner <warner@lothar.com>
5845 * docs/examples/twisted_master.py (twisted_app): hush internal
5846 python2.3 distutils deprecation warnings
5847 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5848 add compileOpts= argument which inserts extra args before the
5849 "setup.py build_ext" command. This can be used to give -Wignore
5850 warnings, to hush some internal python-2.3 deprecation messages.
5852 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5853 the ['twisted.test'] default test case to make it easier to change
5856 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5857 * buildbot/clients/gtkPanes.py: ditto
5859 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5860 arg to collapse RunUnitTestsRandomly into RunUnitTests
5861 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5862 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5864 * buildbot/status/html.py (StatusResource): shuffle Resources
5865 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5866 would serve the waterfall display, but the internal links were
5867 only valid on the trailing-slash version. The correct behavior is
5868 for the non-slashed one to serve a Redirect to the slashed one.
5869 This only shows up when the buildbot page is hanging off another
5870 server, like a Twisted-Web distributed server.
5872 * buildbot/status/event.py (Event, RemoteEvent): make Events
5873 pb.Cacheable, with RemoteEvent as the cached version. This removes
5874 a lot of explicit send-an-update code.
5875 * buildbot/status/builder.py (Builder): remove send-update code
5876 * buildbot/status/client.py (ClientBuilder): remove send-update
5877 code, and log errors that occur during callRemote (mostly to catch
5878 InsecureJelly exceptions)
5880 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5881 run Lore with the same python used in the rest of the build
5883 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5885 * buildbot/process/step_twisted.py (HLint): accept 'python'
5886 argument. Catch rc!=0 and mark the step as failed. This marks the
5887 build orange ("has warnings").
5888 (RunUnitTestsJelly): move out to step_twisted2.py
5890 * buildbot/util.py (ignoreStaleRefs): add utility function
5892 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5893 don't fake ETA object, it's too hard to get right
5895 2003-05-02 Brian Warner <warner@lothar.com>
5897 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5899 2003-05-01 Brian Warner <warner@lothar.com>
5901 * buildbot/status/html.py (StatusResource.body): oops, I was
5902 missing a <tr>, causing the waterfall page to be misrendered in
5903 everything except Galeon.
5905 2003-04-29 Brian Warner <warner@lothar.com>
5907 * docs/examples/twisted_master.py: make debuild use python-2.2
5908 explicitly, now that Twisted stopped supporting 2.1
5910 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5911 handle tuple results too. I keep forgetting this, which suggests
5912 it needs to be rethought.
5914 * setup.py (setup): bump version to 0.3.1+ while between releases
5916 2003-04-29 Brian Warner <warner@lothar.com>
5918 * setup.py: Releasing buildbot-0.3.1
5920 2003-04-29 Brian Warner <warner@lothar.com>
5922 * README (SUPPORT): add plea to send questions to the mailing list
5924 * NEWS, MANIFEST.in: add description of recent changes
5926 * docs/examples/twisted_master.py: add the code used to create the
5927 Twisted buildmaster, with passwords and such removed out to a
5930 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5931 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5932 buildmasters to not require CVSToys be installed.
5933 * README, docs/examples/glib_master: update to match the change
5935 * buildbot/clients/base.py, buildbot/bot.py,
5936 buildbot/changes/changes.py, buildbot/pbutil.py: copy
5937 ReconnectingPB from CVSToys distribution to remove CVSToys
5938 dependency for build slaves and status clients. Buildmasters which
5939 use FreshCVSSources still require cvstoys be installed, of course.
5941 2003-04-25 Brian Warner <warner@lothar.com>
5943 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5944 runTestsRandomly arg to turn on trial -z
5946 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5947 experimental code to use trial's machine-parseable output to get
5948 more detailed test results. Still has some major issues.
5949 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5952 * buildbot/status/builder.py (Builder.setCurrentBuild):
5953 anticipating moving build history into statusbag, not used yet
5955 * buildbot/status/tests.py: code to centralize test results,
5956 doesn't work quite yet
5958 * buildbot/status/event.py (Event): use hasattr("setName") instead
5959 of isinstance for now.. need better long-term solution
5961 * buildbot/status/html.py: Remove old imports
5963 2003-04-24 Brian Warner <warner@lothar.com>
5965 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5966 ignore changes under doc/fun/ and sandbox/
5968 * buildbot/process/step_twisted.py: update pushEvent and friends.
5970 * buildbot/status/html.py (Box.td): replace event.buildername with
5971 event.parent.getSwappableName(). Needs more thought.
5973 * buildbot/status/builder.py (Builder): Replace pushEvent and
5974 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5975 Tell events they are being pruned with event.delete().
5977 * buildbot/process/base.py (Build): Remove Builder status-handling
5978 methods. s/pushEvent/setCurrentActivity/.
5980 * buildbot/process/step.py (BuildStep): clean up status delivery.
5981 Gouse builder.statusbag methods instead of intermediate builder
5982 methods. s/updateLastEvent/updateCurrentActivity/.
5983 s/finalizeLastEvent/finishCurrentActivity/. Use
5984 addFileToCurrentActivity for summaryFunction.
5986 * buildbot/status/event.py (Logfile): put data in a Swappable when
5988 (Event): add more setter methods. Remove .buildername, use .parent
5989 and getSwappableName instead (needs more thought).
5991 * buildbot/util.py (Swappable):
5992 * test/test_swap.py: don't bother setting filename at __init__
5993 time, do it later. Change setFilename args to take parent first,
5994 since it provides the most significant part of the filename.
5996 2003-04-23 Brian Warner <warner@lothar.com>
5998 * buildbot/status/event.py (Logfile.addEntry): append to previous
6001 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6002 anticipating Swappable
6003 (InternalShellCommand.remoteUpdate): split out various log-adding
6004 methods so subclasses can snarf stdout separately
6006 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6007 in anticipation of Swappable build logs
6008 (Builder.testsFinished): anticipating TestResults, still disabled
6010 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6013 * buildbot/status/event.py (Logfile): add (disabled) support for
6014 Swappable, not ready for use yet
6016 * buildbot/util.py (Swappable): object which is swapped out to
6017 disk after some period of no use.
6018 * test/test_swap.py: test buildbot.utils.Swappable
6020 2003-04-14 Brian Warner <warner@lothar.com>
6022 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6023 periodic-build timer. Set the .periodicBuildTime on a builder
6024 instance to some number of seconds to activate it.
6026 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6028 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6029 a way that survives result tuples
6031 2003-04-12 Brian Warner <warner@lothar.com>
6033 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6034 return a dict instead of a tuple: allow summarizers to provide
6035 multiple summaries if they want
6036 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6037 (debuildSummarizer): summarize lintian warnings/errors
6039 2003-04-10 Brian Warner <warner@lothar.com>
6041 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6043 2003-04-09 Brian Warner <warner@lothar.com>
6045 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6046 empty summaries: happens when the tests fail so hard they don't emit
6047 a parseable summary line.
6049 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6050 Allow summaryFunction to return None to indicate no summary should
6053 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6054 writing to stale HTTP requests: notice when they disconnect and
6055 remove the request from the list. Also add CacheToFile from
6056 moshez, will be used later.
6058 2003-04-08 Brian Warner <warner@lothar.com>
6060 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6061 should be an int, not a list of strings
6063 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6064 if we weren't actually connected
6066 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6067 to show the tail end of the trial text output
6069 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6070 hook to summarize the results of a ShellCommand
6072 2003-04-07 Brian Warner <warner@lothar.com>
6074 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6075 twisted test suite code into a single class.
6076 * buildbot/process/process_twisted.py: same
6078 2003-04-04 Brian Warner <warner@lothar.com>
6080 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6082 * README (SLAVE): document use of mktap to create slave .tap file
6083 (REQUIREMENTS): describe dependencies
6085 * buildbot/bb_tap.py, buildbot/plugins.tml:
6086 * buildbot/bot.py (updateApplication): Add mktap support for creating
6087 buildslave .tap files
6089 2003-03-28 Brian Warner <warner@lothar.com>
6091 * buildbot/process/step.py (InternalShellCommand.finished): handle
6092 new tuple result values (fix embarrasing bug that appeared during
6095 2003-03-27 Brian Warner <warner@lothar.com>
6097 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6100 2003-03-25 Brian Warner <warner@lothar.com>
6102 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6103 to overall build status
6104 * buildbot/clients/base.py (Builder): improve event printing
6105 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6106 instead of generic ShellCommand
6107 (Build): Add .stopBuild, use it when slave is detached
6109 * buildbot/process/step.py (Configure,Test): give the steps their
6110 own names and status strings
6112 * buildbot/status/html.py (StatusResource): add "show" argument,
6113 lets you limit the set of Builders being displayed.
6115 2003-03-20 Brian Warner <warner@lothar.com>
6117 * buildbot/process/basic.py: removed
6119 2003-03-19 Brian Warner <warner@lothar.com>
6121 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6122 turn off process-docs by default
6124 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6125 when displaying build information without anything in allBuilds[]
6127 * buildbot/bot.py (makeApp): really take password from sys.argv
6129 2003-03-18 Brian Warner <warner@lothar.com>
6131 * buildbot/bot.py (buildApp): take password from sys.argv
6133 * README: replace with more useful text
6135 * setup.py: add a real one
6136 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6138 * docs/PyCon-2003/: added sources for PyCon paper.
6140 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6141 now Build objects control the process and Builder only handles
6142 slave stuff and distribution of changes/status. A new BuildFactory
6143 class creates Build objects on demand.
6145 Created ConfigurableBuild which takes a list of steps to run. This
6146 makes it a lot easier to set up a new kind of build and moves us
6147 closer to being able to configure a build from a web page.
6149 * buildbot/process/step_twisted.py, process_twisted.py: move to
6150 new model. A lot of code went away.
6152 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6153 send lots of empty progress messages to the client.
6155 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6157 2003-02-20 Brian Warner <warner@lothar.com>
6159 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6161 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6162 Twisted bug that prevented non-pty processes from working just got
6163 fixed, and the bug that leaks ptys is still being investigated.
6165 * buildbot/process/step.py (CVS): send timeout arg to slave
6167 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6168 builders coming and going
6169 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6170 from CVSToys, handle lost-buildmaster
6172 * buildbot/status/client.py (StatusClientService.removeBuilder):
6173 Clean up status client protocol: send builders (with references)
6174 as they are created, rather than sending a list and requiring the
6175 client to figure out which ones are new.
6176 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6177 attempts to force a build on an unknown builder
6179 2003-02-19 Brian Warner <warner@lothar.com>
6181 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6182 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6183 Twisted stops leaking them.
6184 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6185 builder goes to an idle state.
6187 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6188 I figure out why CVS commands hang without them, and/or I fix the
6189 hung-command timeout
6191 2003-02-16 Brian Warner <warner@lothar.com>
6193 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6194 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6195 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6196 GenerateDocs now that they are prefixed with WARNING:.
6198 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6199 use manual href target instead of request.childLink
6201 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6202 display every second, but update the ETA every 5 seconds (or
6203 whenever) as remote_progress messages arrive.
6206 2003-02-12 Brian Warner <warner@lothar.com>
6208 * *: import current sources from home CVS repository
6212 # add-log-time-format: add-log-iso8601-time-string