1 2006-05-28 Brian Warner <warner@lothar.com>
3 * buildbot/test/test_properties.py (Run.testInterpolate): on the
4 build we use to verify that WithProperties works:
6 ** set flunkOnFailure=True so that build failures get noticed
7 ** set workdir='.' so that the build succeeds, otherwise it is trying
8 to touch 'build/something', and 'build/' doesn't exist because
9 usually that's created by a Source step
10 ** set timeout=10, because Twisted-1.3.0 has a race condition that
11 this test somehow triggers, in which the 'touch' process becomes
12 a zombie and we wait for th etimeout before giving up on it.
14 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
15 to log the Build results and step logs to the twisted log.
16 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
17 what went wrong if a build was expected to succeed but didn't.
19 * buildbot/process/step_twisted.py (Trial): set the default
20 trialMode to '--reporter=bwverbose', which specifies verbose
21 black-and-white text. Back in twisted-1.3/2.0 days we had to use
22 '-to', but those are completely missing in modern Twisteds.
24 * buildbot/scripts/sample.cfg: make the sample Manhole config use
25 a localhost-only port, to encourage better security
27 * docs/buildbot.texinfo (Change Sources): mention
30 * .darcs-boring: add a Darcs boringfile
32 * README (REQUIREMENTS): stop claiming compatibility with
35 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
38 2006-05-27 Brian Warner <warner@lothar.com>
40 * buildbot/__init__.py: bump to 0.7.3+ while between releases
41 * docs/buildbot.texinfo: same
43 2006-05-23 Brian Warner <warner@lothar.com>
45 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
46 * docs/buildbot.texinfo: set version to match
47 * NEWS: update for 0.7.3
49 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
50 give a quick mapping from VC system to possible ChangeSources
51 (Build Properties): add 'buildername'
53 * buildbot/process/base.py (Build.setupStatus): oops, set
54 'buildername' and 'buildnumber' properties
55 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
58 2006-05-22 Brian Warner <warner@lothar.com>
60 * docs/buildbot.texinfo (Build Properties): explain the syntax of
61 property interpolation better
63 * README (INSTALLATION): remove old '-v' argument from recommended
66 * docs/buildbot.texinfo (ShellCommand): add docs for description=
67 and descriptionDone= arguments. Thanks to Niklaus Giger for the
70 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
71 'svnversion' instead of grepping the output of 'svn info', much
72 simpler and avoids CR/LF problems on windows. Thanks to Olivier
73 Bonnet for the suggestion.
74 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
75 require the WC_PATH argument, so run 'svnversion .' instead.
77 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
78 aren't supposed to have 'self' in their argument list
80 2006-05-21 Brian Warner <warner@lothar.com>
82 * buildbot/process/step.py (ShellCommand.start): make
83 testInterpolate pass. I was passing the uninterpolated command to
84 the RemoteShellCommand constructor
85 (ShellCommand._interpolateProperties): oops, handle non-list
86 commands (i.e. strings with multiple words separated by spaces in
87 them) properly, instead of forgetting about them.
89 * buildbot/test/test_properties.py (Run.testInterpolate): new test
90 to actually try to use build properties in a real build. This test
92 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
93 to start and evaluate builds
95 * buildbot/test/test__versions.py: add a pseudo-test to record
96 what version of Twisted/Python/Buildbot are running. This should
97 show up at the beginning of _trial_tmp/test.log, and exists to help
100 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
101 a filename to be served as 'robots.txt' to discourage web spiders.
102 Adapted from a patch by Tobi Vollebregt, thanks!
103 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
104 (Waterfall.test_waterfall): tweak the way that filenames are put
105 into the config file, to accomodate windows pathnames better.
107 * docs/buildbot.texinfo (HTML Waterfall): document it
109 * buildbot/process/process_twisted.py
110 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
111 changed the build process. The new setup.py no longer takes the
113 (FullTwistedBuildFactory.__init__): same
114 (TwistedReactorsBuildFactory.__init__): same
116 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
117 be placed in the [hooks] section of the central repository (the
118 one that everybody pushes changes to).
120 2006-05-20 Brian Warner <warner@lothar.com>
122 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
123 .darcs-context file, use binary mode. I think this was causing a
124 Darcs failure under windows.
126 2006-05-19 Brian Warner <warner@lothar.com>
128 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
129 use a timezone string of +0000 and gmtime, since this timestamp is
130 sent to a buildmaster and %z is broken.
132 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
133 string and localtime, since this timestamp will only be consumed
134 locally, and %z is broken.
136 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
137 gmtime, since this timestamp is returned to the buildmaster, and
140 2006-05-18 Brian Warner <warner@lothar.com>
142 * NEWS: update in preparation for next release
144 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
145 setup-repository and do-we-have-the-vc-tools code into a separate
146 "helper" class, which sticks around in a single module-level
147 object. This seems more likely to continue to work in the future
148 than having it hide in the TestCase and hope that TestCases stick
149 around for a long time.
151 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
152 addremove' has been deprecated in recent versions of mercurial, so
155 2006-05-07 Brian Warner <warner@lothar.com>
157 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
158 operating under windows, move the file before opening it, since
159 you can't rename a file that somebody has open.
161 * buildbot/process/base.py (Build.setupBuild): if something goes
162 wrong while creating a Step, log the name and arguments, since the
163 error message when you get the number of arguments wrong is really
166 2006-05-06 Brian Warner <warner@lothar.com>
168 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
169 bugs in twisted-specific code not covered by my unit tests, this
170 time use 'cmd' argument instead of self.cmd
172 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
173 fix stupid braino: either use startwith or find()==0, not both.
174 (TwistedReactorsBuildFactory.__init__): another dumb typo
176 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
177 mark this test as TODO under windows, since process-killing seems
178 dodgy there. We'll come back to this later and try to fix it
181 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
182 and don't include a timezone
183 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
184 This should avoid the windows-with-verbose-timezone-name problem
186 (Patch.testPatch): add a test which runs 'patch' with less
187 overhead than the full VCBase.do_patch sequence, to try to isolate
188 a windows test failure. This one uses slave.commands.ShellCommand
189 and 'patch', but none of the VC code.
191 * buildbot/slave/commands.py (getCommand): use which() to find the
192 executables for 'cvs', 'svn', etc. This ought to help under
195 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
196 working directory before starting. If an earlier test failed, the
197 leftover directory would mistakenly flunk a later test.
198 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
199 Make sure that we use the right commandlines if which("tla") picks
200 up "tla.exe" (as it does under windows).
201 (TlaSupport.do_get): factor out this tla-vs-baz difference
202 (TlaSupport.vc_create): more tla-vs-baz differences
204 * buildbot/test/test_slavecommand.py
205 (ShellBase.testShellMissingCommand): stop trying to assert
206 anything about the error message: different shells on different
207 OSes with different languages makes it hard, and it really isn't
208 that interesting of a thing to test anyway.
210 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
211 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
212 "Panther"), because it has a bug which flunks a couple tests in
213 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
214 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
215 able to test that yet.
217 2006-04-30 Brian Warner <warner@lothar.com>
219 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
220 make sure child commands emit messages in english, so our regexps
221 will match. Thanks to Nikaus Giger for identifying the problems.
222 (VCBase._do_vctest_export_1): mode="export" is not responsible
223 for setting the "got_revision" property, since in many cases it is
224 not convenient to determine.
225 (SVNSupport.capable): when running 'svn --version' to check for
226 ra_local, we want error messages in english
227 * buildbot/test/test_slavecommand.py
228 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
229 to emit the error message in english
231 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
232 the environment with $LC_ALL="C" so that Commands which need to
233 parse the output of their child processes can obtain it in
235 (SVN.parseGotRevision): call "svn info" afterwards instead of
236 watching the output of the "svn update" or "svn checkout".
237 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
238 (Arch.parseGotRevision): same
239 (Bazaar.parseGotRevision): same
240 (Mercurial.parseGotRevision): same
242 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
243 $LC_ALL="C" when running commands under 'buildbot try', too
245 * buildbot/test/__init__.py: remove the global os.environ()
246 setting, instead we do it just for the tests that run commands and
247 need to parse their output.
249 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
250 remove the overly-short .timeout on this test, because non-DNotify
251 platforms must fall back to polling which happens at 10 second
252 intervals, so a 5 second timeout would never succeed.
254 2006-04-24 Brian Warner <warner@lothar.com>
256 * docs/buildbot.texinfo (Installing the code): update trial
257 invocation, SF#1469116 by Niklaus Giger.
258 (Attributes of Changes): updated branch-name examples to be
259 a bit more realistic, SF#1475240 by Stephen Davis.
261 * contrib/windows/buildbot2.bat: utility wrapper for windows
262 developers, contributed by Nick Trout (after a year of neglect..
265 * buildbot/test/test_vc.py (*.capable): store the actual VC
266 binary's pathname in VCS[vcname], so it can be retrieved later
267 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
268 strip out non-numeric timezone information, specifically the funky
269 German string that his system produced that confuses CVS.
270 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
271 allow Darcs tests to work on windows
272 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
273 procutils.which() everywhere, to allow tryclient to work under
274 windows. Also from Niklaus Giger, SF#1463394.
276 * buildbot/twcompat.py (which): move the replacement for a missing
277 twisted.python.procutils.which from test_vc.py to here, so it can
278 be used in other places too (specifically tryclient.py)
280 2006-04-23 Brian Warner <warner@lothar.com>
282 * buildbot/status/html.py (StatusResourceBuild.body): replace the
283 bare buildbotURL/projectName line with a proper DIV, along with a
284 CSS class of "title", from Stefan Seefeld (SF#1461675).
285 (WaterfallStatusResource.body0): remove the redundant 'table'
287 (WaterfallStatusResource.body): same. Also add class="LastBuild"
288 to the top-row TR, and class="Activity" to the second-row TR,
289 rather than putting them in the individual TD nodes.
291 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
292 'got_revision' build property for all VC systems that implement
293 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
295 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
296 to determine which revision we actually obtained
297 (CVS.parseGotRevision): implement this for CVS, which just means
298 to grab a timestamp. Not ideal, and it depends upon the buildslave
299 having a clock that is reasonably well syncronized with the server,
300 but it's better than nothing.
301 (SVN.parseGotRevision): implement it for SVN, which is accurate
302 (Darcs.parseGotRevision): same
303 (Arch.parseGotRevision): same
304 (Bazaar.parseGotRevision): same
305 (Mercurial.parseGotRevision): same
307 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
308 keep a record of all non-stdout/stderr/header/rc status updates,
309 for the benefit of RemoteCommands that send other useful things,
311 (Source.commandComplete): put any 'got_revision' status values
312 into a build property of the same name
315 * buildbot/process/step_twisted.py (Trial): update to deal with
316 new ShellCommand refactoring
318 * docs/buildbot.texinfo (Build Properties): document new feature
319 that allows BuildSteps to get/set Build-wide properties like which
320 revision was requested and/or checked out.
322 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
323 * buildbot/status/builder.py (BuildStatus.getProperty): implement
324 it. Note that this bumps the persistenceVersion of the saved Build
325 object, so add the necessary upgrade-old-version logic to include
326 an empty properties dict.
328 * buildbot/process/base.py (Build.setProperty): implement it
329 (Build.getProperty): same
330 (Build.startBuild): change build startup to set 'branch',
331 'revision', and 'slavename' properties at the right time
333 * buildbot/process/step.py (BuildStep.__init__): change setup to
334 require 'build' argument in a better way
335 (LoggingBuildStep): split ShellCommand into two pieces, for better
336 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
337 a single RemoteCommand that sends stdout/stderr status text. It
338 also provides the usual commandComplete / createSummary /
339 evaluateCommand / getText methods to be overridden...
340 (ShellCommand): .. whereas ShellCommand is specifically for
341 running RemoteShellCommands. Other shell-like BuildSteps (like
342 Source) can inherit from LoggingBuildStep instead of ShellCommand
343 (WithProperties): marker class to do build-property interpolation
344 (Source): inherit from LoggingBuildStep instead of ShellCommand
347 * buildbot/test/test_properties.py: test new functionality
349 2006-04-21 Brian Warner <warner@lothar.com>
351 * buildbot/test/test_vc.py: rename testBranch to
352 testCheckoutBranch to keep the tests in about the right
355 2006-04-18 Brian Warner <warner@lothar.com>
357 * docs/buildbot.texinfo (PBListener): improve cross-references
358 between PBListener and 'buildbot statusgui', thanks to John Pye
361 2006-04-17 Brian Warner <warner@lothar.com>
363 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
364 running under Twisted-1.3.0, otherwise skipped tests are reported
367 * all: use isinstance() instead of 'type(x) is foo', suggested by
370 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
371 oops, fix a brain-fade from the other week, when making the
372 addStep changes. I changed all the __init__ upcalls to use the
373 wrong superclass name.
374 (FullTwistedBuildFactory.__init__): same
375 (TwistedDebsBuildFactory.__init__): same
376 (TwistedReactorsBuildFactory.__init__): same
377 (TwistedBuild.isFileImportant): use .startswith for clarity,
378 thanks to Neal Norwitz for the suggestions.
380 * contrib/viewcvspoll.py: script to poll a viewcvs database for
381 changes, then deliver them over PB to a remote buildmaster.
383 * contrib/svnpoller.py: added script by John Pye to poll a remote
384 SVN repository (by running 'svn log') from a cronjob, and run
385 'buildbot sendchange' to deliver the changes to a remote
387 * contrib/svn_watcher.py: added script by Niklaus Giger (a
388 modification of svnpoller.py), same purpose, but this one loops
389 internally (rather than expecting to run from a cronjob) and works
391 * contrib/README.txt: same
393 2006-04-11 Brian Warner <warner@lothar.com>
395 * all: fix a number of incorrect names and missing imports, thanks
396 to Anthony Baxter for the patch.
397 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
398 remove unused buggy method.
399 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
400 comes from shutil, not "shutils"
401 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
402 (Arch.checkSlaveVersion): same
403 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
405 * buildbot/process/step_twisted2.py: add some missing imports
406 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
407 this code used to live in twisted.internet.defer
409 2006-04-10 Brian Warner <warner@lothar.com>
411 * buildbot/process/step.py (Mercurial): add Mercurial support
412 * buildbot/slave/commands.py (Mercurial): same
413 * buildbot/scripts/tryclient.py (MercurialExtractor): same
414 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
415 not yet tested, but 'try' support *is* covered
416 * docs/buildbot.texinfo (Mercurial): document it
418 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
419 some debugging messages (turned off)
420 * buildbot/test/test_vc.py: improve debug messages
422 2006-04-07 Brian Warner <warner@lothar.com>
424 * buildbot/test/test_vc.py (which): define our own which() in case
425 we can't import twisted.python.procutils, because procutils doesn't
428 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
429 of SlaveLocks for performance tests
431 * docs/examples/twisted_master.cfg: update to match current usage
433 * buildbot/changes/p4poller.py (P4Source): add new arguments:
434 password, p4 binary, pollinterval, maximum history to check.
435 Patch from an anonymous sf.net contributor, SF#1219384.
436 * buildbot/process/step.py (P4Sync.__init__): add username,
437 password, and client arguments.
438 * buildbot/slave/commands.py (P4Sync): same
440 2006-04-05 Brian Warner <warner@lothar.com>
442 * buildbot/process/factory.py (BuildFactory.addStep): new method
443 to add steps to a BuildFactory. Use it instead of f.steps.append,
444 and you can probably avoid using the s() convenience function.
445 Patch from Neal Norwitz, sf.net #1412605.
446 (other): update all factories to use addStep
447 * buildbot/process/process_twisted.py: update all factories to use
450 2006-04-03 Brian Warner <warner@lothar.com>
452 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
453 work under windows too. Adapted from a patch by Niklaus Giger,
454 addresses SF#1463399.
456 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
457 spawned commands emit parseable results in english and not some
458 other language. Patch from Niklaus Giger, SF#1463395.
460 * README (INSTALLATION): discourage users from running unit tests on
461 a "network drive", patch from Niklaus Giger, SF#1463394.
463 2006-03-22 Brian Warner <warner@lothar.com>
465 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
466 function to turn a repository-relative pathname into a (branch,
467 branch-relative-filename) tuple. Change this function to handle
468 the branch naming policy used by your Subversion repository.
469 Thanks to AllMyData.com for sponsoring this work.
471 2006-03-16 Brian Warner <warner@lothar.com>
473 * buildbot/scripts/sample.cfg: add python-mode declaration for
474 vim. Thanks to John Pye for the patch.
476 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
477 command line, mention the importance of running 'crontab' as the
478 buildmaster/buildslave user. Thanks to John Pye for the catch.
480 2006-03-13 Brian Warner <warner@lothar.com>
482 * buildbot/status/words.py (IRC): add an optional password=
483 argument, which will be sent to Nickserv in an IDENTIFY message at
484 login, to claim the nickname. freenode requires this before the
485 bot can sent (or reply to) private messages. Thanks to Clement
486 Stenac for the patch.
487 * docs/buildbot.texinfo (IRC Bot): document it
489 * buildbot/status/builder.py (LogFile.merge): don't write chunks
490 larger than chunkSize. Fixes SF#1349253.
491 * buildbot/test/test_status.py (Log.testLargeSummary): test it
492 (Log.testConsumer): update to match new internal chunking behavior
494 2006-03-12 Brian Warner <warner@lothar.com>
496 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
498 * buildbot/test/test_maildir.py (MaildirTest): rename the
499 'timeout' method, as it collides with trial's internals
501 * buildbot/scripts/runner.py: add 'buildbot restart' command
502 (stop): don't sys.exit() out of here, otherwise restart can't work
503 * docs/buildbot.texinfo (Shutdown): document it
505 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
506 * buildbot/status/html.py (Waterfall.__init__): same
507 * buildbot/process/builder.py (Builder.startBuild): same
508 * buildbot/process/base.py (BuildRequest): same
509 * buildbot/sourcestamp.py (SourceStamp): same
510 * buildbot/scheduler.py (Nightly): same
512 * buildbot/__init__.py (version): bump to 0.7.2+ while between
514 * docs/buildbot.texinfo: same
516 2006-02-17 Brian Warner <warner@lothar.com>
518 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
519 * docs/buildbot.texinfo: set version number to match
520 * NEWS: update for 0.7.2
522 2006-02-16 Brian Warner <warner@lothar.com>
524 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
526 2006-02-09 Brian Warner <warner@lothar.com>
528 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
529 add text to explain per-build branch parameters
530 * NEWS: mention --umask
532 2006-02-08 Brian Warner <warner@lothar.com>
534 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
536 (SlaveOptions.optParameters): add --umask, to make it possible to
537 make buildslave-generated files (including build products) be
540 * buildbot/slave/bot.py (BuildSlave.startService): same
542 2006-01-23 Brian Warner <warner@lothar.com>
544 * buildbot/status/builder.py: urllib.quote() all URLs that include
545 Builder names, so that builders can include characters like '/'
546 and ' ' without completely breaking the resulting HTML. Thanks to
547 Kevin Turner for the patch.
548 * buildbot/status/html.py: same
549 * buildbot/test/test_web.py (GetURL.testBuild): match changes
551 * NEWS: update in preparation for upcoming release
553 2006-01-18 Brian Warner <warner@lothar.com>
555 * docs/examples/twisted_master.cfg: update to match the Twisted
556 buildbot: remove python2.2, switch to exarkun's buildslaves,
557 disable the .deb builder until we figure out how to build twisted
558 .debs from SVN, add some ktrace debugging to the OS-X build
559 process and remove the qt build, remove threadless builders,
560 change freebsd builder to use landonf's buildslave.
562 2006-01-12 Brian Warner <warner@lothar.com>
564 * buildbot/master.py (Manhole.__init__): let port= be a strports
565 specification string, but handle a regular int for backwards
566 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
567 used in master.cfg to limit connections to just the local host.
568 (BuildMaster.loadConfig): same for c['slavePortnum']
569 * buildbot/scheduler.py (Try_Userpass.__init__): same
570 * buildbot/status/client.py (PBListener.__init__): same
571 * buildbot/status/html.py (Waterfall.__init__): same, for both
572 http_port and distrib_port. Include backwards-compatibility checks
573 so distrib_port can be a filename string and still mean unix:/foo
574 * docs/buildbot.texinfo (Setting the slaveport): document it
575 (Debug options): same
576 (HTML Waterfall): same
579 * buildbot/test/test_config.py (ConfigTest): test it
581 * buildbot/master.py (BuildMaster.loadConfig): wait for the
582 slaveport's disownServiceParent deferred to fire before opening
583 the new one. Fixes an annoying bug in the unit tests.
585 2006-01-03 Brian Warner <warner@lothar.com>
587 * buildbot/master.py (BuildMaster): remove the .schedulers
588 attribute, replacing it with an allSchedulers() method that looks
589 for all IService children that implement IScheduler. Having only
590 one parent/child relationship means fewer opportunities for bugs.
591 (BuildMaster.allSchedulers): new method
592 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
593 also fix ugly bug that caused any config-file reload to
594 half-forget about the earlier Schedulers, causing an exception
595 when a Change arrived and was handed to a half-connected
596 Scheduler. The exception was in scheduler.py line 54ish:
597 self.parent.submitBuildSet(bs)
598 exceptions.AttributeError: 'NoneType' object has no attribute
600 (BuildMaster.addChange): update to use allSchedulers()
602 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
603 to work properly with twisted-1.3.0, where you must explicitly
604 include the __implements__ from parent classes
605 (BaseScheduler.__repr__): make it easier to distinguish distinct
607 (BaseUpstreamScheduler.__implements__): same
609 * buildbot/status/builder.py (Status.getSchedulers): update to
611 * buildbot/test/test_run.py (Run.testMaster): same
612 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
613 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
614 make sure Scheduler instances are left alone when an identical
615 config file is reloaded
616 (ConfigElements.testSchedulers): make sure Schedulers are properly
619 * Makefile (TRIALARGS): my local default Twisted version is now
620 2.1.0, update the trial arguments accordingly
622 2005-12-22 Brian Warner <warner@lothar.com>
624 * docs/examples/twisted_master.cfg: merge changes from pyr: add
627 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
628 addChange in the parent class, although I suspect this should be
629 fixed better in the future.
631 2005-11-26 Brian Warner <warner@lothar.com>
633 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
634 explode when branch==None, thanks to Kevin Turner for the catch
635 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
638 * buildbot/__init__.py (version): bump to 0.7.1+ while between
640 * docs/buildbot.texinfo: same
642 2005-11-26 Brian Warner <warner@lothar.com>
644 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
645 * docs/buildbot.texinfo: set version number to match
647 2005-11-26 Brian Warner <warner@lothar.com>
649 * NEWS: update for 0.7.1
651 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
652 sure that unsubscribe works even if we never sent an ETA update.
653 Also, don't explode on duplicate unsubscribe.
654 (BuildStepStatus.addLog): make the convenience "return self"-added
655 watcher automatically unsubscribe when the Step finishes.
656 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
657 (BuildStatus.stepStarted): same auto-unsubscribe
658 (BuilderStatus.buildStarted): same auto-unsubscribe
660 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
662 (IStatusReceiver.stepStarted): same
663 (IStatusReceiver.logStarted): same
665 * buildbot/test/test_run.py (Status): move the Status test..
666 * buildbot/test/test_status.py (Subscription): .. to here
668 2005-11-25 Brian Warner <warner@lothar.com>
672 * buildbot/locks.py: fix the problem in which loading a master.cfg
673 file that changes some Builders (but not all of them) can result
674 in having multiple copies of the same Lock. Now, the real Locks
675 are kept in a table inside the BotMaster, and the Builders/Steps
676 use "LockIDs", which are still instances of MasterLock and
677 SlaveLock. The real Locks are instances of the new RealMasterLock
678 and RealSlaveLock classes.
679 * buildbot/master.py (BotMaster.getLockByID): new method to
680 convert LockIDs into real Locks.
681 * buildbot/process/base.py (Build.startBuild): convert LockIDs
682 into real Locks before building
683 * buildbot/process/step.py (BuildStep.startStep): same
684 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
685 exercises the problem
688 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
689 what Schedulers are available
691 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
692 work by Dobes Vandermeer and hacked mercilessly by me. This offers
693 'cron'-style build scheduling at certain times of day, week,
695 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
697 * buildbot/scheduler.py (Scheduler): change fileIsImportant
698 handling: treat self.fileIsImportant more as an attribute that
699 contains a callable than as a method. If the attribute is None,
700 don't call it and assume all filenames are important. It is still
701 possible to provide a fileIsImportant method in a subclass,
703 (AnyBranchScheduler): handle fileIsImportant=None, previously it
705 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
706 test using AnyBranchScheduler with fileIsImportant=None
708 2005-11-24 Brian Warner <warner@lothar.com>
710 * buildbot/test/test_config.py (StartService): don't claim a fixed
711 port number, instead set slavePort=0 on the first pass, figure out
712 what port was allocated, then switch to a config file that uses
715 * buildbot/master.py (BuildMaster.loadConfig): close the old
716 slaveport before opening the new one, because unit tests might
717 replace slavePort=0 with the same allocated portnumber, and if we
718 don't wait for the old port to close first, we get a "port already
719 in use" error. There is a tiny race condition here, but the only
720 threat is from other programs that bind (statically) to the same
721 port number we happened to be allocated, and only if those
722 programs use SO_REUSEADDR, and only if they get control in between
725 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
727 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
728 deleted ChangeSources before adding any new ones
729 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
730 compare_attrs, to make sure that a config-file reload does not
731 unnecessarily replace an unmodified ChangeSource instance
732 * buildbot/test/test_config.py (ConfigTest.testSources): update
734 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
735 mean "don't build anything", and add a warning if it gets used
736 because it isn't actually useful.
738 * contrib/svn_buildbot.py: update example usage to match the port
739 number that gets used by the PBChangeSource
740 * buildbot/scripts/sample.cfg: add example of PBChangeSource
742 2005-11-22 Brian Warner <warner@lothar.com>
744 * NEWS: start collecting items for next release
746 * buildbot/process/step.py (SVN.computeSourceRevision): assume
747 revisions are strings
748 (P4Sync.computeSourceRevision): same
750 * buildbot/status/html.py (StatusResourceBuild.body): add a link
751 to the Buildbot's overall status page
752 (StatusResourceBuilder.body): same
754 2005-11-15 Brian Warner <warner@lothar.com>
756 * buildbot/master.py (BuildMaster.loadConfig): serialize the
757 config-file loading, specifically to make sure old StatusTargets
758 are finished shutting down before new ones start up (thus
759 resolving a bug in which changing the Waterfall object would fail
760 because both new and old instances were claiming the same
761 listening port). Also load new Schedulers after all the new
762 Builders are set up, in case they fire off a new build right away.
763 * buildbot/test/test_config.py (StartService): test it
765 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
766 the branch name to the mail body
768 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
769 Without it, a config-file reload fails to update an existing
771 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
772 username/passwd to compare_attrs, for the same reason
773 * buildbot/status/html.py (Waterfall): add favicon to
774 compare_attrs, same reason
776 2005-11-05 Brian Warner <warner@lothar.com>
778 * buildbot/scripts/tryclient.py (createJobfile): stringify the
779 baserev before stuffing it in the jobfile. This resolves problems
780 under SVN (and probably Arch) where revisions are expressed as
781 numbers. I'm inclined to use string-based revisions everywhere in
782 the future, but this fix should be safe for now. Thanks to Steven
783 Walter for the patch.
785 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
786 binary mode when opening pickle files, to make windows work
787 better. Thanks to Dobes Vandermeer for the catch.
788 * buildbot/status/builder.py (BuildStatus.saveYourself): same
789 (BuilderStatus.getBuildByNumber): same
790 (Status.builderAdded): same
791 * buildbot/master.py (BuildMaster.loadChanges): same
793 * buildbot/util.py (Swappable): delete unused leftover code
795 * buildbot/process/step.py (SVN): when building on a non-default
796 branch, add the word "[branch]" to the VC step's description, so
797 it is obvious that we're not building the usual stuff. Likewise,
798 when we are building a specific revision, add the text "rNNN" to
799 indicate what that revision number is. Thanks to Brad Hards and
800 Nathaniel Smith for the suggestion.
801 (Darcs.startVC): same
803 (Bazaar.startVC): same
805 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
806 typo, caught by Mark Dillavou, closes SF#1216636.
808 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
809 about a test to add some day
811 * docs/examples/twisted_master.cfg: update: bot1 can now handle
812 the 'full-2.3' build, and the 'reactors' build is now run under
813 python-2.4 because the buildslave no longer has gtk/etc bindings
814 for earlier versions.
816 2005-11-03 Brian Warner <warner@lothar.com>
818 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
819 method, takes an IBuildStatus and rebuilds it. It might make more
820 sense to add this to IBuildControl instead, but that instance goes
821 away completely once the build has finished, and resubmitting
822 builds can take place weeks later.
823 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
824 * buildbot/status/html.py (StatusResourceBuild): also stash an
825 IBuilderControl so we can use resubmitBuild.
826 (StatusResourceBuild.body): render "resubmit" button if we can.
827 Also add hrefs for each BuildStep
828 (StatusResourceBuild.rebuild): add action for "resubmit" button
829 (StatusResourceBuilder.getChild): give it an IBuilderControl
831 * buildbot/status/builder.py (Status.getURLForThing): change the
832 URL for BuildSteps to have a "step-" prefix, so the magic URLs
833 that live as targets of buttons like "stop" and "rebuild" can't
835 * buildbot/status/builder.py (Status.getURLForThing): same
836 * buildbot/status/html.py (StatusResourceBuild.getChild): same
837 (StepBox.getBox): same
838 * buildbot/test/test_web.py (GetURL): same
841 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
842 exclusivity checks after Source.__init__ upcall, so misspelled
843 arguments will be reported more usefully
844 (Darcs.__init__): same
846 2005-10-29 Brian Warner <warner@lothar.com>
848 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
849 builder. Move the Try scheduler off to a separate port.
851 2005-10-27 Brian Warner <warner@lothar.com>
853 * buildbot/clients/gtkPanes.py
854 (TwoRowClient.remote_builderRemoved): disappearing Builders used
855 to cause the app to crash, now they don't.
857 * buildbot/clients/debug.py: display the buildmaster's location
858 in the window's title bar
860 2005-10-26 Brian Warner <warner@lothar.com>
862 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
863 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
864 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
866 * buildbot/status/html.py (td): put a single non-breaking space
867 inside otherwise empty <td> elements, as a workaround for buggy
868 browsers which would optimize them away (along with any associated
869 styles, like the kind that create the waterfall grid borders).
870 Patch from Frerich Raabe.
872 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
873 argv-list as an argument, defaulting to ["-to"], which is
874 appropriate for the Trial that comes with Twisted-2.1.0 and
875 earlier. The Trial in current Twisted SVN wants
876 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
877 defaults to an empty list.
878 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
879 match it, now that trialMode= is a list instead of a single string
881 * buildbot/__init__.py (version): bump to 0.7.0+ while between
883 * docs/buildbot.texinfo: same
885 2005-10-24 Brian Warner <warner@lothar.com>
887 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
888 * docs/buildbot.texinfo: set version number to match
890 2005-10-24 Brian Warner <warner@lothar.com>
892 * README: update for 0.7.0
894 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
896 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
897 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
898 send the branch= argument unless the user really provided one, to
899 retain compatibility with older buildmasters that don't accept
901 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
904 * docs/buildbot.texinfo: update lots of stuff
906 * buildbot/scripts/runner.py (sendchange): add a --branch argument
907 to the 'buildbot sendchange' command
908 * buildbot/clients/sendchange.py (Sender.send): same
909 * buildbot/changes/pb.py (ChangePerspective): same
910 * buildbot/test/test_changes.py (Sender.testSender): test it
912 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
913 'default_branch' argument names to 'baseURL' and 'defaultBranch',
914 for consistency with other BuildStep arguments that use camelCase.
915 Well, at least more of them use camelCase (like flunkOnWarnings)
916 than don't.. I wish I'd picked one style and stuck with it
917 earlier. Annoying, but it's best done before the release, since
918 these arguments didn't exist at all in 0.6.6 .
920 * buildbot/test/test_vc.py (SVN.testCheckout): same
921 (Darcs.testPatch): same
922 * docs/buildbot.texinfo (SVN): document the change
923 (Darcs): same, add some build-on-branch docs
924 * docs/examples/twisted_master.cfg: match change
926 * buildbot/process/step.py (BuildStep): rename
927 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
928 how it is normally used.
929 * buildbot/test/test_steps.py (Version.checkCompare): same
931 * buildbot/process/step.py (CVS.startVC): refuse to build
932 update/copy -style builds on a non-default branch with an old
933 buildslave (<=0.6.6) that doesn't know how to do it properly. The
934 concern is that it will do a VC 'update' in an existing tree when
935 it is supposed to be switching branches (and therefore clobbering
936 the tree to do a full checkout), thus building the wrong source.
937 This used to be a warning, but I think the confusion it is likely
938 to cause warrants making it an error.
939 (SVN.startVC): same, also make mode=export on old slaves an error
940 (Darcs.startVC): same
941 (Git.startVC): improve error message for non-Git-enabled slaves
942 (Arch.checkSlaveVersion): same. continue to emit a warning when a
943 specific revision is built on a slave that doesn't pay attention
944 to args['revision'], because for slowly-changing trees it will
945 probably do the right thing, and because we have no way to tell
946 whether we're asking it to build the most recent version or not.
947 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
949 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
950 that 'master' is in host:portnum format, to catch errors sooner
952 2005-10-23 Brian Warner <warner@lothar.com>
954 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
955 when creating the list of warning messages, include the line
956 immediately after each WARNING: line, since that's usually where
957 the file and line number wind up.
959 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
964 2005-10-22 Brian Warner <warner@lothar.com>
966 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
967 patch from Brad Hards
968 * buildbot/status/classic.css: same
969 * buildbot/test/test_web.py (Waterfall): match changes
971 * buildbot/test/test_steps.py (BuildStep.setUp): set
972 nextBuildNumber so the test passes
973 * buildbot/test/test_status.py (MyBuilder): same
975 * buildbot/status/html.py (StatusResourceBuild.body): revision
976 might be numeric, so stringify it before html-escapifying it
977 (CurrentBox.getBox): add a "waiting" state, and show a countdown
978 timer for the upcoming build
979 * buildbot/status/classic.css: add background-color attributes for
980 offline/waiting/building classes
982 * buildbot/status/builder.py (BuildStatus): derive from
983 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
984 the default (i.e. unknown) .slavename to "???" instead of None,
985 since even unknown slavenames need to be printed eventually.
986 (BuilderStatus): also derive from styles.Versioned . More
987 importantly, determine .nextBuildNumber at creation/unpickling
988 time by scanning the directory of saved BuildStatus instances and
989 choosing one larger than the highest-numbered one found. This
990 should fix the problem where random errors during upgrades cause
991 the buildbot to forget about earlier builds. .nextBuildNumber is
992 no longer stored in the pickle.
993 (Status.builderAdded): if we can't unpickle the BuilderStatus,
994 at least log the error. Also call Builder.determineNextBuildNumber
995 once the basedir is set.
997 * buildbot/master.py (BuildMaster.loadChanges): do
998 styles.doUpgrade afterwards, in case I decide to make Changes
999 derived from styles.Versioned some day and forget to make this
1003 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1004 when running under older pythons (<2.3) in which the shlex module
1005 doesn't have a 'split' function.
1007 * buildbot/process/step.py (ShellCommand.start): make
1008 errorMessages= be a list of strings to stuff in the log before the
1009 command actually starts. This makes it easier to flag multiple
1010 warning messages, e.g. when the Source steps have to deal with an
1012 (CVS.startVC): handle slaves that don't handle multiple branches
1013 by switching into 'clobber' mode
1014 (SVN.startVC): same. Also reject branches without base_url
1015 (Darcs.startVC): same. Also reject revision= in older slaves
1016 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1017 (Bazaar.startVC): same, and test for baz separately than for arch
1019 * buildbot/slave/commands.py (cvs_ver): document new features
1021 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1022 (BuildStep.slaveVersionNewEnough): more useful utility method
1023 * buildbot/test/test_steps.py (Version): start testing it
1025 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1026 the 'force' command requires python2.3, for the shlex.split method
1028 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1029 since we don't use it anymore. The Twisted buildbot uses a
1032 2005-10-21 Brian Warner <warner@lothar.com>
1034 * buildbot/process/process_twisted.py: rework all BuildFactory
1035 classes to take a 'source' step as an argument, instead of
1036 building up the SVN instance in the factory.
1037 * docs/examples/twisted_master.cfg: enable build-on-branch by
1038 providing a base_url and default_branch
1040 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1041 control over --branch and --revision, not that they are always
1043 * buildbot/status/html.py (StatusResourceBuilder.force): same
1044 (StatusResourceBuild.body): display SourceStamp components
1046 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1047 IRC 'force' command, so it can be shared with an eventual
1048 command-line-tool 'buildbot force' mode.
1049 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1051 2005-10-20 Brian Warner <warner@lothar.com>
1053 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1055 * docs/examples/twisted_master.cfg: update to use Schedulers
1057 * buildbot/scripts/sample.cfg: update with Schedulers
1059 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1060 method specifically for use by HTML "force build" button and the
1061 IRC "force" command. Raises an immediate error if there are no
1063 (IBuilderControl.requestBuild): make this just submit a build, not
1064 try to check for existing slaves or set up any when-finished
1065 Deferreds or anything.
1066 * buildbot/process/builder.py (BuilderControl): same
1067 * buildbot/status/html.py (StatusResourceBuilder.force): same
1068 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1069 * buildbot/test/test_slaves.py: same
1070 * buildbot/test/test_web.py: same
1072 2005-10-19 Brian Warner <warner@lothar.com>
1074 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1075 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1077 2005-10-18 Brian Warner <warner@lothar.com>
1079 * buildbot/status/html.py: provide 'status' argument to most
1080 StatusResourceFOO objects
1081 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1082 and Logfiles" section to make the Build page into a more-or-less
1083 comprehensive source of status information about the build
1085 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1086 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1088 2005-10-17 Brian Warner <warner@lothar.com>
1090 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1091 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1092 out what to do about other projects: the correct options for
1093 recent Twisteds will not work for older ones.
1095 2005-10-15 Brian Warner <warner@lothar.com>
1097 * buildbot/status/builder.py (Status.getURLForThing): add method
1098 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1099 use this in email/IRC status clients to make them more useful, by
1100 providing the end user with hints on where to learn more about the
1101 object being reported on.
1102 * buildbot/test/test_web.py (GetURL): tests for it
1104 2005-10-14 Brian Warner <warner@lothar.com>
1106 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1107 fix bug resulting from deferredResult changes
1109 2005-10-13 Brian Warner <warner@lothar.com>
1111 * buildbot/test/test_changes.py: remove use of deferredResult
1112 * buildbot/test/test_config.py: same
1113 * buildbot/test/test_control.py: same
1114 * buildbot/test/test_status.py: same
1115 * buildbot/test/test_vc.py: this is the only remaining use, since
1116 it gets used at module level. This needs to be replaced by some
1117 sort of class-level run-once routine.
1119 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1121 * lots: implement multiple slaves per Builder, which means multiple
1122 current builds per Builder. Some highlights:
1123 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1124 of (state,currentBuilds) instead of (state,currentBuild)
1125 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1126 (IBuildStatus.getSlavename): new method, so you can tell which
1127 slave got used. This only gets set when the build completes.
1128 (IBuildRequestStatus.getBuilds): new method
1130 * buildbot/process/builder.py (SlaveBuilder): add a .state
1131 attribute to track things like ATTACHING and IDLE and BUILDING,
1133 (Builder): .. the .slaves attribute here, which has been turned
1134 into a simple list of available slaves. Added a separate
1135 attaching_slaves list to track ones that are not yet ready for
1137 (Builder.fireTestEvent): put off the test-event callback for a
1138 reactor turn, to make tests a bit more consistent.
1139 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1140 ping fails due to an exception. This needs work, I'm worried that
1141 a code error could lead to a constantly re-connecting slave.
1142 Especially since I'm trying to move to a distinct remote_ping
1143 method, separate from the remote_print that we currently use.
1144 (BuilderControl.requestBuild): return a convenience Deferred that
1145 provides an IBuildStatus when the build finishes.
1146 (BuilderControl.ping): ping all connected slaves, only return True
1147 if they all respond.
1149 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1150 reconnect when we shut down.
1152 * buildbot/status/builder.py: implement new methods, convert
1153 one-build-at-a-time methods to handle multiple builds
1154 * buildbot/status/*.py: do the same in all default status targets
1155 * buildbot/status/html.py: report the build's slavename in the
1156 per-Build page, report all buildslaves on the per-Builder page
1158 * buildbot/test/test_run.py: update/create tests
1159 * buildbot/test/test_slaves.py: same
1160 * buildbot/test/test_scheduler.py: remove stale test
1162 * docs/buildbot.texinfo: document the new builder-specification
1163 'slavenames' parameter
1165 2005-10-12 Brian Warner <warner@lothar.com>
1167 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1168 report failure correctly, causing Dependent builds to run when
1169 they shouldn't have.
1170 * buildbot/status/builder.py (BuildSetStatus): same
1171 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1172 (Set.testSuccess): test the both-pass case too
1173 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1174 fix this test: it was ending too early, masking the failure before
1175 (Logger): specialized StatusReceiver to make sure the dependent
1176 builds aren't even started, much less completed.
1178 2005-10-07 Brian Warner <warner@lothar.com>
1180 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1181 bot.SlaveBuilder being disowned in the middle of a build
1183 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1184 this inherit from StatusReceiver. Also upcall in __init__. This
1185 fixes the embarrasing crash when the new buildSetSubmitted method
1186 is invoked and Waterfall/etc don't implement their own.
1187 * buildbot/test/test_run.py: add a TODO note about a test to catch
1188 just this sort of thing.
1190 * buildbot/process/builder.py (Builder.attached): remove the
1191 already-attached warning, this situation is normal. Add some
1192 comments explaining it.
1194 2005-10-02 Brian Warner <warner@lothar.com>
1196 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1197 OverflowError when setting up dnotify, because some 64-bit systems
1198 have problems with signed-vs-unsigned constants and trip up on the
1199 DN_MULTISHOT flag. Patch from Brad Hards.
1201 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1203 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1204 progressMetrics, description, descriptionDone to the 'parms' list,
1205 and make use the 'parms' list from the implementation class
1206 instead of only BuildStep to initialize the parameters. This
1207 allows buildbot.process.factory.s() to initialize all the parms,
1208 not just those defined in directly by BuildStep.
1210 2005-09-03 Brian Warner <warner@lothar.com>
1212 * NEWS: start adding items for the next release
1214 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1215 python2.2 tests, change 'Quick' builder to only use python2.3
1217 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1219 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1220 the "Ping Builder" button if the build control is available; the
1221 user sees an exception otherwise
1223 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1225 2005-09-01 Brian Warner <warner@lothar.com>
1227 * buildbot/interfaces.py (IBuilderStatus.getState): update
1228 signature, point out that 'build' can be None
1229 (IBuildStatus.getETA): point out ETA can be none
1231 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1233 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1235 2005-08-31 Brian Warner <warner@lothar.com>
1237 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1238 update to match correct signature: removed 'eta' argument
1239 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1241 2005-08-30 Brian Warner <warner@lothar.com>
1243 * buildbot/status/builder.py (LogFile): remove the assertion that
1244 blows up when you try to overwrite an existing logfile, instead
1245 just emit a warning. This case gets hit when the buildmaster is
1246 killed and doesn't get a chance to write out the serialized
1247 BuilderStatus object, so the .nextBuildNumber attribute gets out
1250 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1251 the 'buildbot sendchange' arguments, for the Darcs context file
1252 * docs/buildbot.texinfo (sendchange): document it
1254 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1255 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1256 (IStatus.getSchedulers): new method
1257 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1258 (Status.getSchedulers): implement
1259 * buildbot/process/builder.py (Builder): maintain
1260 BuilderStatus.pendingBuilds
1261 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1262 (TryBase.addChange): Try schedulers should ignore Changes
1264 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1265 for 'try' on CVS/SVN
1266 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1268 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1269 report status properly.
1270 (Try.createJob): implement unique buildset IDs
1272 * buildbot/status/client.py (StatusClientPerspective): add a
1273 perspective_getBuildSets method for the benefit of jobdir-style
1275 * docs/buildbot.texinfo (try): more docs
1276 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1279 2005-08-18 Brian Warner <warner@lothar.com>
1281 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1282 actually work. It's functional but still kind of clunky. Also, it
1283 only works with the pb-style.. needs to be made to work with the
1286 * buildbot/status/client.py (RemoteBuildSet): new class
1287 (RemoteBuildRequest): same
1288 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1289 object, not the internal BuildStatus object.
1290 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1291 outside of the usual buildStarted() return value.
1292 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1294 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1295 (Try_Userpass_Perspective.perspective_try): return a remotely
1296 usable BuildSetStatus object
1298 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1299 isStarted()/waitUntilStarted()
1301 2005-08-16 Brian Warner <warner@lothar.com>
1303 * buildbot/status/builder.py: implement IBuildSetStatus and
1304 IBuildRequestStatus, wire them into place.
1305 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1306 methods into the BuildSetStatus object.
1307 * buildbot/interfaces.py: same
1308 (IStatus.getBuildSets): new method to get pending BuildSets
1309 (IStatusReceiver.buildsetSubmitted): new method which hears about
1311 * buildbot/master.py (BuildMaster.submitBuildSet): same
1312 * buildbot/process/base.py (BuildRequest): same, replace
1313 waitUntilStarted with subscribe/unsubscribe
1314 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1315 subscribe instead of waitUntilStarted
1316 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1318 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1320 * buildbot/test/test_buildreq.py: update for new code
1321 * buildbot/test/test_control.py (Force.testRequest): same
1324 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1325 for Darcs to not use the tempfile module, so it works under
1326 python-2.2 too. We really didn't need the full cleverness of that
1327 module, since the slave has exclusive control of its own builddir.
1329 2005-08-15 Brian Warner <warner@lothar.com>
1331 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1332 for CVS trees. It doesn't work for non-trunk branches,
1334 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1337 * Makefile: make it easier to test against python2.2
1339 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1340 tearDown2, so things like Arch can unregister archives as they're
1341 shutting down. The previous subclass-override-tearDown technique
1342 resulted in a nested maybeWait() and test failures under
1345 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1346 where we can (Arch), add a branch= argument to set the branch used
1348 (BazExtractor): extract the branch too
1349 (TlaExtractor): same
1350 * buildbot/scripts/runner.py (TryOptions): add --branch
1351 * docs/buildbot.texinfo (try): document --branch/try_branch
1353 * buildbot/slave/commands.py (Darcs): implement get-revision for
1354 Darcs, so that 'try' will work. This requires the tempfile module
1357 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1358 of revisions, branches, and 'try' in the process.
1360 2005-08-11 Brian Warner <warner@lothar.com>
1362 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1363 this, it got broken at some point in the last few releases
1364 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1365 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1366 specifically the removal of ETA information from the tuple
1368 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1371 * docs/buildbot.texinfo (try): document both --builder and
1372 'try_builders' in .buildbot/options
1373 * buildbot/scripts/runner.py (TryOptions): add --builder,
1374 accumulate the values into opts['builders']
1375 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1376 * buildbot/test/test_runner.py (Try): add some quick tests to make
1377 sure 'buildbot try --options' and .buildbot/options get parsed
1378 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1379 use --builder control
1381 * docs/buildbot.texinfo (try): add --port argument to PB style
1383 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1384 actual SourceStamp. Still need to extract a branch name, somehow.
1385 (Try): finish implementing the try client side, still need a UI
1386 for specifying which builders to use
1387 (Try.getopt): factor our options/config-file reading
1388 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1390 * buildbot/test/test_vc.py: match SourceStampExtractor change
1392 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1393 causes the twisted log to be sent to stderr
1395 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1397 2005-08-10 Brian Warner <warner@lothar.com>
1399 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1400 style is 90% done, still missing status reporting or waiting for
1401 the buildsets to finish, and it is completely untested.
1403 * buildbot/trybuild.py: delete file, move contents to ..
1404 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1405 * buildbot/test/test_vc.py: match the move
1407 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1408 of the TryScheduler, no buildsetID or status-tracking support yet
1409 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1411 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1412 possible to set the basedir after __init__ time, so it is easier
1413 to use as a Service-child of the BuildMaster instance
1415 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1416 that delivers messages to its Service parent instead of requiring
1417 a subclass to be useful. This turns out to be much easier to build
1420 * buildbot/scripts/tryclient.py (createJob): utility code to
1421 create jobfiles, will eventually be used by 'buildbot try'
1423 2005-08-08 Brian Warner <warner@lothar.com>
1425 * docs/buildbot.texinfo (try): add docs on the
1426 as-yet-unimplemented Try scheduler
1428 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1429 * buildbot/test/test_scheduler.py: .. here
1430 (Scheduling.testTryJobdir): add placeholder test for 'try'
1432 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1433 addEntry merging (>=chunkSize) behavior
1434 (Log.testConsumer): update to handle new callLater(0) behavior
1436 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1437 both the MAX_LENGTH bugfix and the resumeProducing hang.
1439 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1440 put off the actual resumeProducing for a moment with
1441 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1442 causes large logfiles to hang midway through.
1444 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1445 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1446 and to improve memory usage when streaming the file out to a web
1448 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1449 make this work cleanly
1451 2005-08-03 Brian Warner <warner@lothar.com>
1453 * buildbot/trybuild.py: new file for 'try' utilities
1454 (getSourceStamp): run in a tree, find out the baserev+patch
1455 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1456 implemented for SVN and Darcs, still working on Arch. I don't know
1457 how to make CVS work yet.
1459 * docs/buildbot.texinfo: document the 'buildbot' command-line
1460 tool, including the not-yet-implemented 'try' feature, and the
1461 in-flux .buildbot/ options directory.
1463 2005-07-20 Brian Warner <warner@lothar.com>
1465 * buildbot/locks.py: added temporary id() numbers to Lock
1466 descriptions, to track down a not-really-sharing-the-Lock bug
1468 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1470 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1471 needed for python2.2 compatibility
1472 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1473 are from the __future__
1475 2005-07-19 Brian Warner <warner@lothar.com>
1477 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1478 message when schedulers use unknown builders
1480 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1481 SlaveLock('name') and MasterLock('name') are distinct
1483 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1484 c['schedulers'] in such a way that we can actually accept
1486 * buildbot/test/test_config.py: check it
1488 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1489 utility method to *all* the Schedulers
1490 (Periodic.listBuilderNames): same
1492 * docs/buildbot.texinfo (Interlocks): update chapter to match
1495 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1496 to make sure that c['sources'], c['schedulers'], and c['status']
1497 are all lists of the appropriate objects, and that the Schedulers
1498 all point to real Builders
1499 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1500 'listBuilderNames' utility method to support this
1501 * buildbot/scheduler.py: implement the utility method
1502 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1504 * docs/buildbot.texinfo: add some @cindex entries
1506 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1507 if it wasn't already set: most tla commands will fail unless one
1509 (Arch.createRepository): and disable bazaar's revision cache, since
1510 they cause test failures (the multiple repositories we create all
1511 interfere with each other through the cache)
1513 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1514 bring it properly up to date with twisted-2.0 test guidelines
1516 * buildbot/master.py (BuildMaster): remove references to old
1517 'interlock' module, this caused a bunch of post-merge test
1519 * buildbot/test/test_config.py: same
1520 * buildbot/process/base.py (Build): same
1522 * buildbot/test/test_slaves.py: stubs for new test case
1524 * buildbot/scheduler.py: add test-case-name tag
1525 * buildbot/test/test_buildreq.py: same
1527 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1528 unnecessary init code
1529 (Bot.remote_setBuilderList): match it
1531 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1533 * buildbot/changes/mail.py (parseSyncmail): update comment
1535 * buildbot/test/test_slavecommand.py: disable Shell tests on
1536 platforms that don't suport IReactorProcess
1538 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1539 all places where we open logfiles. It causes OS-X to open the file
1540 in some weird mode that that prevents us from mixing reads and
1541 writes to the same filehandle, which we depend upon to implement
1542 _generateChunks properly. This change doesn't appear to break
1543 win32, on which "b" and "t" are treated differently but a missing
1544 flag seems to be interpreted as "t".
1546 2005-07-18 Brian Warner <warner@lothar.com>
1548 * buildbot/slave/commands.py (ShellCommand): overhaul
1549 error-handling code, to try and make timeout/interrupt work
1550 properly, and make win32 happier
1551 * buildbot/test/test_slavecommand.py: clean up, stop using
1552 reactor.iterate, add tests for timeout and interrupt
1553 * buildbot/test/sleep.py: utility for a new timeout test
1555 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1556 code from the local-usebranches branch
1558 2005-07-17 Brian Warner <warner@lothar.com>
1560 * buildbot/process/process_twisted.py
1561 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1562 minutes, to match the other twisted BuildFactories, and don't
1563 excuse failures in c/qt/win32 reactors any more.
1565 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1566 'freebsd' builders, since the buildslaves have been unavailable
1569 2005-07-13 Brian Warner <warner@lothar.com>
1571 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1572 build-on-branch feature
1574 * buildbot/process/step.py (Darcs.__init__): add base_url and
1575 default_branch arguments, just like SVN
1576 (Arch.__init__): note that the version= argument is really the
1579 * buildbot/slave/commands.py (SourceBase): keep track of the
1580 repository+branch that was used for the last checkout in
1581 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1582 match, we clobber the directory and perform a fresh checkout
1583 rather than trying to do an in-place update. This should protect
1584 us against trying to get to branch B by doing an update in a tree
1585 obtained from branch A.
1586 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1587 (SVN.setup): same, just the svnurl
1588 (Darcs.setup): same, just the repourl
1589 (Arch.setup): same, arch coordinates (url), version, and
1590 buildconfig. Also pull the buildconfig from the args dictionary,
1591 which we weren't doing before, so the build-config was effectively
1593 (Arch.sourcedirIsUpdateable): don't try to update when we're
1594 moving to a specific revision: arch can't go backwards, so it is
1595 safer to just clobber the tree and checkout a new one at the
1597 (Bazaar.setup): same sourcedata as Arch
1599 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1600 use maybeWait, to work with twisted-1.3.0 and twcompat
1601 (Dependencies.testRun_Pass): same
1603 * buildbot/test/test_vc.py: rearrange, cleanup
1605 * buildbot/twcompat.py: add defer.waitForDeferred and
1606 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1607 can work under twisted-1.3.0 .
1609 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1610 now created at setUp time. This increases the runtime of the test
1611 suite considerably (from 91 seconds to 151), but it removes the
1612 need for an offline tarball, which should solve a problem I've
1613 seen where the test host has a different version of svn than the
1614 tarball build host. The new code also validates that mode=update
1615 really picks up recent commits. This approach will also make it
1616 easier to test out branches, because the code which creates the VC
1617 branches is next to the code which uses them. It will also make it
1618 possible to test some change-notification hooks, by actually
1619 performing a VC commit and watching to see the ChangeSource get
1622 2005-07-12 Brian Warner <warner@lothar.com>
1624 * docs/buildbot.texinfo (SVN): add branches example
1625 * docs/Makefile (buildbot.ps): add target for postscript manual
1627 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1628 * buildbot/test/test_locks.py: same
1630 * buildbot/process/step.py (Darcs): comment about default branches
1632 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1633 c['interlocks'] in the config file, complain if it is present.
1634 Scan all locks in c['builders'] to make sure the Locks they use
1636 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1637 add some tests to check for non-uniquely-named Locks
1638 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1639 since the unique-Lock validation code requires it now
1641 * buildbot/locks.py: fix test-case-name
1643 * buildbot/interlock.py: remove old file
1645 2005-07-11 Brian Warner <warner@lothar.com>
1647 * buildbot/test/test_interlock.py: rename to..
1648 * buildbot/test/test_locks.py: .. something shorter
1650 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1651 versions (after 2.0.1) changed internet.TCPClient to shut down the
1652 connection in stopService. Change the code to handle this
1655 * buildbot/process/base.py (Build): handle whole-Build locks
1656 * buildbot/process/builder.py (Builder.compareToSetup): same
1657 * buildbot/test/test_interlock.py: make tests work
1659 * buildbot/process/step.py (BuildStep.startStep): complain if a
1660 Step tries to claim a lock that's owned by its own Build
1661 (BuildStep.releaseLocks): typo
1663 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1664 file reloads don't replace unchanged Builders
1666 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1667 rewrite to cover new Locks instead of old c['interlocks']
1668 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1672 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1673 start the master and connect the buildslave
1675 * buildbot/process/step.py (FailingDummy.done): finish with a
1676 FAILURE status rather than raising an exception
1678 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1679 stringify a BuildRequest.reason that is None
1681 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1683 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1684 allow scheduler.Dependent to work
1685 * buildbot/buildset.py (BuildSet): set .reason and .results
1687 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1688 slaves, to make the test stop hanging. It still fails, of course,
1689 because I haven't even started to implement Locks.
1691 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1693 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1694 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1695 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1696 (Dependent): new class for downstream build dependencies
1697 * buildbot/test/test_dependencies.py: tests (still failing)
1699 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1701 2005-07-07 Brian Warner <warner@lothar.com>
1703 * buildbot/test/runutils.py (RunMixin): factored this class out..
1704 * buildbot/test/test_run.py: .. from here
1705 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1706 added new buildbot.locks tests (which all hang right now)
1707 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1708 * buildbot/process/step.py: claim/release per-BuildStep locks
1710 * docs/Makefile: add 'buildbot.html' target
1712 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1713 interpreted as "HEAD", so that all VC steps can accept branch=None
1714 and have it mean the "default branch".
1716 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1718 2005-07-07 Brian Warner <warner@lothar.com>
1720 * docs/examples/twisted_master.cfg: update to match current usage
1722 * docs/buildbot.texinfo (System Architecture): comment out the
1723 image, it doesn't exist yet and just screws up the HTML manual.
1725 2005-07-05 Brian Warner <warner@lothar.com>
1727 * debian/.cvsignore: oops, missed one. Removing leftover file.
1729 2005-06-17 Brian Warner <warner@lothar.com>
1731 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1732 changed its output in 1.2.0, don't mistakenly think that the
1733 subversion we find isn't capable of supporting our tests.
1735 * debian/*: remove the debian/ directory and its contents, to make
1736 life easier for the proper Debian maintainer
1738 * Makefile (release): same
1740 2005-06-07 Brian Warner <warner@lothar.com>
1742 * everything: create a distinct SourceStamp class to replace the
1743 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1744 Changed the signature of Source.startVC to include the revision
1745 information (instead of passing it through self.args). Implement
1746 branches for SVN (now only Darcs/Git is missing support). Add more
1749 2005-06-06 Brian Warner <warner@lothar.com>
1751 * everything: rearrange build scheduling. Create a new Scheduler
1752 object (configured in c['schedulers'], which submit BuildSets to a
1753 set of Builders. Builders can now use multiple slaves. Builds can
1754 be run on alternate branches, either requested manually or driven
1755 by changes. This changed some of the Status classes. Interlocks
1756 are out of service until they've been properly split into Locks
1757 and Dependencies. treeStableTimer, isFileImportant, and
1758 periodicBuild have all been moved from the Builder to the
1760 (BuilderStatus.currentBigState): removed the 'waiting' and
1761 'interlocked' states, removed the 'ETA' argument.
1763 2005-05-24 Brian Warner <warner@lothar.com>
1765 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1766 erroneously abandons the connection (in clientConnectionFailed)
1767 for non-UserErrors, which means that if we lose the connection due
1768 to a network problem or a timeout, we'll never try to reconnect.
1769 Fix this by not upcalling to the buggy parent method. Note:
1770 twisted-2.0 fixes this, but the function only has 3 lines so it
1771 makes more sense to copy it than to try and detect the buggyness
1772 of the parent class. Fixes SF#1207588.
1774 * buildbot/changes/changes.py (Change.branch): doh! Add a
1775 class-level attribute to accomodate old Change instances that were
1776 pickled before 0.6.5 (where .branch was added for new Changes).
1777 This fixes the exception that occurs when you try to look at an
1778 old Change (through asHTML).
1780 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1783 2005-05-23 Brian Warner <warner@lothar.com>
1785 * buildbot/__init__.py (version): release 0.6.6
1787 2005-05-23 Brian Warner <warner@lothar.com>
1789 * NEWS: update for 0.6.6 release
1790 * debian/changelog: same
1792 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1793 before starting: this was done by twistd back when we spawned it,
1794 now that we're importing the pieces and running them in the
1795 current process, we have to do it ourselves. This allows
1796 master.cfg to import files from the same directory without
1797 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1798 Stichele for the catch.
1799 (Options.opt_version): Add a --version command (actually, just make
1800 the existing --version command emit Buildbot's version too)
1802 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1803 fix to make this behave like other LogFiles, this time to handle
1804 existing LogFiles on disk. (add the missing .upgrade method)
1805 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1807 2005-05-21 Brian Warner <warner@lothar.com>
1809 * buildbot/test/test_runner.py (Create.testMaster): match the
1810 rawstring change in runner.py:masterTAC
1812 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1813 TwistedWords is installed
1814 * buildbot/test/test_status.py: same, with TwistedMail
1816 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1817 some old, deprecated, and removed config keys). This should enable
1818 you to use the base buildbot functionality with Twisted-2.0.0 when
1819 you don't also have TwistedWeb and TwistedWords installed
1821 2005-05-20 Brian Warner <warner@lothar.com>
1823 * buildbot/scripts/runner.py (run): call sendchange(), not
1824 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1825 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1826 (stop): don't wait for process to die when sending SIGHUP
1827 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1828 directory name gets interpreted, which you don't want
1831 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1834 2005-05-18 Brian Warner <warner@lothar.com>
1836 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1838 2005-05-18 Brian Warner <warner@lothar.com>
1840 * README: update for 0.6.5
1841 * debian/changelog: same
1843 * buildbot/changes/changes.py: rename tag= to branch=, since
1844 that's how we're using it, and my design for the upcoming "build a
1845 specific branch" feature wants it. also, tag= was too CVS-centric
1846 * buildbot/changes/mail.py (parseSyncmail): same
1847 * buildbot/process/base.py (Build.isBranchImportant): same
1848 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1849 * docs/buildbot.texinfo (Attributes of Changes): same
1851 * NEWS: update tag=, update for upcoming release
1853 2005-05-17 Brian Warner <warner@lothar.com>
1855 * buildbot/scripts/runner.py (stop): actually poll once per
1856 second, instead of re-killing the poor daemon once per second.
1857 Sleep briefly (0.1s) before the first poll, since there's a good
1858 chance we can avoid waiting the full second if the daemon shuts
1859 down quickly. Also remove the sys.exit() at the end.
1860 (start): remove the unneighborly sys.exit()
1862 * Makefile: improve permission-setting to not kick Arch so badly
1864 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1865 default --keepalive=600, since it doesn't hurt very much, and it's
1866 a hassle to discover that you need it.
1867 * buildbot/test/test_runner.py (Create.testSlave): test it
1869 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1870 IRC bot about EXCEPTION
1872 * buildbot/status/client.py (PBListener): upcall more correctly
1874 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1875 an exception mark the overall build with EXCEPTION, not SUCCESS
1877 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1879 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1880 * Makefile: update some release-related stuff
1882 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1883 gets called when there isn't actually an active process, just end
1884 the Command instead of blowing up. I don't know how it gets into
1885 this state, but the twisted win32 buildslave will sometimes hang,
1886 and when it shakes its head and comes back, it thinks it's still
1887 running a Command. The next build causes this command to be
1888 interrupted, but the lack of self.process.pid breaks the interrupt
1891 * NEWS: document changes since the last release
1893 * buildbot/scripts/runner.py (start): change 'buildbot start' to
1894 look for Makefile.buildbot instead of a bare Makefile . The
1895 'buildbot start' does not install this file, so you have to
1896 manually copy it if you want to customize startup behavior.
1897 (createMaster): change 'buildbot master' command to create
1898 Makefile.sample instead of Makefile, to create master.cfg.sample
1899 instead of master.cfg (requiring you to copy it before the
1900 buildmaster can be started). Both sample files are kept up to
1901 date, i.e. they are overwritten if they have been changed. The
1902 'buildbot.tac' file is *not* overwritten, but if the new contents
1903 don't match the old, a 'buildbot.tac.new' file is created and the
1904 user is warned. This seems to be a much more sane way to handle
1905 startup files. Also, don't sys.exit(0) when done, so we can run
1906 unit tests against it.
1907 (createSlave): same. Don't overwrite the sample info/ files.
1908 * buildbot/scripts/sample.mk: remove. the contents were pulled
1909 into runner.py, since they need to match the behavior of start()
1913 * docs/buildbot.texinfo (Launching the daemons): document it
1914 * buildbot/test/test_runner.py (Create): test it
1916 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1917 version that can handle string-in-string tests, because otherwise
1918 python-2.2 fails the tests. It'd be tremendous if Trial's test
1919 took two strings under 2.2 too.
1921 * everything: fixed all deprecation warnings when running against
1922 Twisted-2.0 . (at least all the ones in buildbot code, there are a
1923 few that come from Twisted itself). This involved putting most of
1924 the Twisted-version specific code in the new buildbot.twcompat
1925 module, and creating some abstract base classes in
1926 buildbot.changes.base and buildbot.status.base (which might be
1927 useful anyway). __implements__ is a nuisance and requires an ugly
1928 'if' clause everywhere.
1930 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1931 delay before finishing the test: it seems that smtp.sendmail
1932 doesn't hang up on the server, so we must wait a moment so it can
1933 hang up on us. This removes the trial warning about an unclean
1936 2005-05-16 Brian Warner <warner@lothar.com>
1938 * buildbot/process/step.py (Source): add 'retry' argument. It is a
1939 tuple of (delay, repeats).
1940 * buildbot/test/test_vc.py (Retry): test it
1941 * docs/buildbot.texinfo (Source Checkout): document it
1942 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1943 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1944 doVCFull() are handled by re-trying the checkout (after a delay)
1945 some number of times.
1946 (ShellCommand._startCommand): make header lines easier to read
1948 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1950 (WebTest.test_logfile): make sure master gets shut down, silences
1951 some "unclean reactor" test errors
1953 * buildbot/test/test_changes.py (Sender.tearDown): spin the
1954 reactor once after shutdown, something in certain versions of
1955 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1956 fails, svn-trunk is ok.
1958 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
1959 second win32 error message
1961 * buildbot/test/test_run.py (Status.testSlave): be smarter about
1962 validating the ETA, so the tests don't fail on slow systems
1964 2005-05-15 Brian Warner <warner@lothar.com>
1966 * buildbot/status/builder.py (HTMLLogFile): make this behave like
1967 the new LogFile class, so upgrading works properly
1968 (LogFileProducer.resumeProducing): survive resumeProducing after
1969 we've exhausted the chunkGenerator
1971 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
1973 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
1974 (Log.testUpgrade): same
1976 * docs/buildbot.texinfo (Maintenance): describe how to delete old
1977 Builds and logs with a cron job.
1979 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
1980 of the old non-offline LogFile, added code to upgrade these to
1981 new-style contents-live-on-disk instances at load time (in a way
1982 that doesn't invalidate the old Build pickles, so upgrading to
1983 0.6.5 is not a one-way operation). Got rid of everything related
1985 (LogFile.__init__): create LogFiles with the parent step status,
1986 the log's name, and a builder-relative filename where it can keep
1987 the contents on disk.
1988 (LogFile.hasContents): new method, clients are advised to call it
1989 before getText or getChunks and friends. If it returns False, the
1990 log's contents have been deleted and getText() will raise an
1992 (LogFile.getChunks): made it a generator
1993 (LogFile.subscribeConsumer): new method, takes a Twisted-style
1994 Consumer (except one that takes chunks instead of strings). This
1995 enables streaming of very large logfiles without storing the whole
1997 (BuildStatus.generateLogfileName): create names like
1998 12-log-compile-output, with a _0 suffix if required to be unique
1999 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2000 or earlier) logfiles into new-style ones
2001 (BuilderStatus): remove everything related to 'stub' builds. There
2002 is now only one build cache, and we don't strip logs from old
2004 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2005 since we no longer fight to keep it in the cache
2007 * buildbot/status/html.py (TextLog.render_GET): use a
2008 ChunkConsumer to stream the log entries efficiently.
2009 (ChunkConsumer): wrapper which consumes chunks and writes
2012 * buildbot/test/test_twisted.py (Parse.testParse): use a
2013 LogFile-like object instead of a real one
2015 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2016 (Log.testMerge3): validate more merge behavior
2017 (Log.testChunks): validate LogFile.getChunks
2018 (Log.testUpgrade): validate old-style LogFile upgrading
2019 (Log.testSubscribe): validate LogFile.subscribe
2020 (Log.testConsumer): validate LogFile.subscribeConsumer
2022 * buildbot/interfaces.py (IStatusLogStub): remove
2023 (IStatusLog.subscribeConsumer): new method
2024 (IStatusLog.hasContents): new method
2025 (IStatusLogConsumer): describes things passed to subscribeConsumer
2027 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2028 the log contents if it does not have any contents.
2029 (StatusResourceBuildStep.body): same
2030 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2032 2005-05-14 Brian Warner <warner@lothar.com>
2034 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2035 timeouts to try and make the windows metabuildslave not hang
2037 2005-05-13 Mike Taylor <bear@code-bear.com>
2039 * buildbot/slave/commands.py (rmdirRecursive): added a check
2040 to ensure the path passed into rmdirRecursive actually exists.
2041 On win32 a non-existant path would generate an exception.
2043 2005-05-13 Brian Warner <warner@lothar.com>
2045 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2046 shutil.rmtree which behaves correctly on windows in the face of
2047 files that you have to chmod before deleting. Thanks to Bear at
2048 the OSAF for the routine.
2049 (SourceBase.doClobber): use rmdirRecursive
2051 2005-05-12 Brian Warner <warner@lothar.com>
2053 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2054 method generate chunks instead of returning a big list. This
2055 allows the same method to be used for both old LogFile and new
2057 (OfflineLogFile.getText): use the generator
2058 (OfflineLogFile.subscribe): same
2059 * buildbot/status/html.py (TextLog.resumeProducing): same
2060 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2062 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2063 point out that OfflineLogFile does not currently work with
2064 html.Waterfall . Fixing this is high-priority.
2066 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2067 apparently windows defaults to using stdout
2069 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2070 better message on failure so I can figure out the win32 problem
2072 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2073 log messages to include more useful copies of the command being
2074 run, the argv array, and the child command's environment.
2075 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2077 2005-05-11 Brian Warner <warner@lothar.com>
2079 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2081 * Makefile: update the deb-snapshot version
2083 * docs/buildbot.texinfo: move all .xhtml docs into a new
2084 .texinfo-format document, adding a lot of material in the process.
2085 This is starting to look like a real user's manual. Removed all
2086 the Lore-related files: *.xhtml, *.css, template.tpl .
2087 * docs/Makefile: simple makefile to run 'makeinfo'
2088 * buildbot/scripts/sample.cfg: rearrange slightly
2089 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2091 2005-05-10 Brian Warner <warner@lothar.com>
2093 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2094 different name for the internal twistw module, handle it.
2096 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2097 * setup.py: .. and stop trying to install it
2099 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2100 'git'), the new linux kernel VC system (http://kernel.org/git/).
2101 Thanks to Brandon Philips for the patch.
2102 * buildbot/slave/commands.py (Git): same
2104 2005-05-06 Brian Warner <warner@lothar.com>
2106 * buildbot/status/builder.py (OfflineLogFile): replace the default
2107 LogFile with a form that appends its new contents to a disk file
2108 as they arrive. The complete log data is never kept in RAM. This
2109 is the first step towards handling very large (100MB+) logfiles
2110 without choking quite so badly. (The other half is
2111 producer/consumer on the HTML pages).
2112 (BuildStepStatus.addLog): use OfflineLogFile by default
2113 (BuildStatus.getLogfileName): helper code to give the
2114 OfflineLogFile a filename to work with
2116 * buildbot/test/test_status.py (Results.testAddResults): update
2117 tests to handle new asserts
2118 * buildbot/test/test_vc.py (Patch.doPatch): same
2119 * buildbot/test/test_steps.py (BuildStep.setUp): same
2121 2005-05-05 Brian Warner <warner@lothar.com>
2123 * buildbot/scripts/runner.py (start): if there is no Makefile,
2124 launch the app by importing twistd's internals and calling run(),
2125 rather than spawning a new twistd process. This stands a much
2126 better chance of working under windows.
2127 (stop): kill the process with os.kill instead of spawning
2128 /bin/kill, again to reduce the number of external programs which
2129 windows might not have in the PATH. Also wait up to 5 seconds for
2130 the process to go away, allowing things like 'buildbot stop;
2131 buildbot start' to be reliable in the face of slow shutdowns.
2133 * buildbot/master.py (Dispatcher.__getstate__): remove old
2134 .tap-related methods
2135 (BuildMaster.__getstate__): same
2137 * buildbot/slave/bot.py (makeService): same
2138 (Options.longdesc): same
2139 * buildbot/scripts/runner.py: copy over some old mktap option text
2141 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2142 'buildbot master' now creates a buildbot.tac file, so there is no
2143 longer a create-instance/save/reload sequence. mktap is dead, long
2145 * buildbot/scripts/sample.mk: use twistd -y, not -f
2146 * buildbot/test/test_config.py: remove mktap-based test
2147 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2148 * README: don't reference mktap
2150 * docs/source.xhtml: document some of the attributes that Changes
2153 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2155 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2156 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2157 * buildbot/changes/changes.py (Change)
2158 * buildbot/changes/mail.py (parseSyncmail)
2159 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2161 * buildbot/process/base.py (Build.isTagImportant)
2165 2005-05-04 Brian Warner <warner@lothar.com>
2167 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2168 connection after sending the change, so that unit tests don't
2169 complain about sockets being left around
2171 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2172 exception in phase=0 rendering
2173 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2175 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2177 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2178 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2179 and configuring builders with tuples.
2180 * buildbot/test/test_config.py: stop testing compatibility with
2181 deprecated config keys
2182 * buildbot/test/test_run.py: same
2184 2005-05-03 Brian Warner <warner@lothar.com>
2186 * contrib/arch_buildbot.py: survive if there are no logfiles
2187 (username): just use a string, os.getlogin isn't reliable
2189 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2190 so 'buildbot sendchange' actually works. The earlier test only
2191 covered the internal (non-reactor-running) form.
2193 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2194 script to notify the buildmaster about changes
2196 * buildbot/scripts/runner.py (sendchange): new command to send a
2197 change to a buildbot.changes.pb.PBChangeSource receiver.
2198 * buildbot/test/test_changes.py (Sender): test it
2200 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2201 after any reading of the config file, not just when we do it in
2202 startService. This makes some tests a bit cleaner.
2204 * buildbot/changes/pb.py: add some log messages
2206 * buildbot/process/base.py (Build.startBuild): fix a bug that
2207 caused an exception when the build terminated in the very first
2209 (Build.stepDone): let steps return a status of EXCEPTION. This
2210 terminates the build right away, and sets the build's overall
2211 status to EXCEPTION too.
2212 * buildbot/process/step.py (BuildStep.failed): return a status of
2213 EXCEPTION when that is what has happened.
2215 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2216 implement this, allowing Arch-based projects to get precise
2217 checkouts instead of always using the latest code
2218 (Bazaar): create variant of Arch to let folks use baz instead of
2219 tla. Requires a new buildslave too.
2220 * buildbot/slave/commands.py (Arch): add 'revision' argument
2221 (Bazaar): create variant of Arch that uses baz instead of tla.
2222 Remove the code that extracts the archive name from the
2223 register-archive output, since baz doesn't provide it, and require
2224 the user provide both the archive name and its location.
2225 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2227 2005-05-02 Brian Warner <warner@lothar.com>
2229 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2230 thanks to Nick Trout.
2232 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2233 deals better with source Makefile coming from a read-only CVS
2234 checkout. Thanks to Nick Trout for the catch.
2236 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2239 2005-04-28 Brian Warner <warner@lothar.com>
2241 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2243 * debian/changelog: update for 0.6.4
2245 2005-04-28 Brian Warner <warner@lothar.com>
2247 * README.w32: add a checklist of steps for getting buildbot
2249 * MANIFEST.in: include it in the tarball
2253 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2254 broken .tap files from 0.6.3 by getting rid of .services,
2255 .namedServices, and .change_svc at load time.
2257 2005-04-27 Brian Warner <warner@lothar.com>
2259 * NEWS: update in preparation for new release
2261 * buildbot/test/test_config.py (Save.testSave): don't pull in
2262 twisted.scripts.twistd, we don't need it and it isn't for windows
2265 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2266 accomodate win32 which can't do atomic-rename
2268 2005-04-27 Brian Warner <warner@lothar.com>
2270 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2271 timeouts to help the slow metabuildbot not flunk them so much
2272 (Disconnect.testBuild3): same
2273 (Disconnect.testBuild4): same
2274 (Disconnect.testInterrupt): same
2276 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2277 setup, it was completely broken for new buildmasters (those which
2278 did not have a 'change.pck' already saved. Thanks to Paul Warren
2279 for catching this (embarrassing!) bug.
2280 (Dispatcher.__getstate__): don't save our registered avatar
2281 factories, since they'll be re-populated when the config file is
2283 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2284 tests (since the real mktap-generated BuildMaster doesn't save
2286 (BuildMaster.__getstate__): don't save any service children,
2287 they'll all be re-populated when the config file is re-read.
2288 * buildbot/test/test_config.py (Save.testSave): test for this
2290 2005-04-26 Brian Warner <warner@lothar.com>
2292 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2293 rendered with Blender.. looks a bit nicer.
2294 * buildbot/docs/images/icon.blend: add the Blender file for it
2296 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2297 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2298 running under windows. This appears to be the best way to allow
2299 BuildSteps to do something normal like 'trial -v buildbot.test' or
2300 'make foo' and still expect it to work. The idea is to make the
2301 BuildSteps look as much like what a developer would type when
2302 compiling or testing the tree by hand. This approach probably has
2303 problems when there are spaces in the arguments, so if you've got
2304 windows buildslaves, you'll need to pay close attention to your
2307 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2308 timezone to the timestamp column.
2309 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2311 * buildbot/scripts/runner.py (loadOptions): do something sane for
2312 windows, I think. We use %APPDATA%/buildbot instead of
2313 ~/.buildbot, but we still search everywhere from the current
2314 directory up to the root for a .buildbot/ subdir. The "is it under
2315 $HOME" security test was replaced with "is it owned by the current
2316 user", which is only performed under posix.
2317 * buildbot/test/test_runner.py (Options.testFindOptions): update
2318 tests to match. The "is it owned by the current user" check is
2319 untested. The test has been re-enabled for windows.
2321 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2322 any "\n" in the expected output with the platform-specific line
2323 separator. Make this separator "\r\n" on PTYs under unix, they
2324 seem to do that and I don't know why
2326 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2327 windows for now, I don't know what ~/.buildbot/ should mean there.
2329 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2330 win32 compatibility, don't use "/tmp"
2331 (Basedir.testChangeBuilddir): remove more unixisms
2333 2005-04-26 Brian Warner <warner@lothar.com>
2335 * buildbot/test/test_control.py (Force.rmtree): python2.2
2336 compatibility, apparently its shutil.rmtree ignore_errors=
2337 argument is ignored.
2338 * buildbot/test/test_run.py (Run.rmtree): same
2339 (RunMixin.setUp): same
2341 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2344 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2345 'substring in string' operator, must use string.find(substr)!=-1
2346 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2347 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2349 * buildbot/scripts/runner.py (loadOptions): add code to search for
2350 ~/.buildbot/, a directory with things like 'options', containing
2351 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2352 the current directory, your $HOME directory, or anywhere
2353 inbetween, as long as you're somewhere inside your home directory.
2354 (debugclient): look in ~/.buildbot/options for master and passwd
2355 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2356 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2358 * buildbot/status/client.py (makeRemote): new approach to making
2359 IRemote(None) be None, which works under Twisted-2.0
2360 * buildbot/test/test_status.py (Client.testAdaptation): test it
2362 * buildbot/status/builder.py (Status.builderAdded): when loading a
2363 pickled BuilderStatus in from disk, set its name after loading.
2364 The config file might have changed its name (but not its
2365 directory) while it wasn't looking.
2367 * buildbot/process/builder.py (Builder.attached): always return a
2368 Deferred, even if the builder was already attached
2369 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2371 2005-04-25 Brian Warner <warner@lothar.com>
2373 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2374 category-related exception when announcing a build has finished
2376 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2377 reference no-longer-existent changemaster.sources
2378 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2380 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2383 2005-04-25 Brian Warner <warner@lothar.com>
2385 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2387 * debian/changelog: update for 0.6.3
2389 2005-04-25 Brian Warner <warner@lothar.com>
2391 * MANIFEST.in: make sure debug.glade is in the tarball
2393 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2395 * NEWS: update for the imminent 0.6.3 release
2397 * buildbot/status/html.py (HtmlResource.content): make the
2398 stylesheet <link> always point at "buildbot.css".
2399 (StatusResource.getChild): map "buildbot.css" to a static.File
2400 containing whatever css= argument was provided to Waterfall()
2401 (Waterfall): provide the "classic" css as the default.
2402 * docs/waterfall.classic.css: move default CSS from here ..
2403 * buildbot/status/classic.css: .. to here
2405 * MANIFEST.in: make sure classic.css is included in the tarball
2406 * setup.py: and that it is installed too, under buildbot/status/
2408 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2409 the module level, because buildbot.tap files from 0.6.2 don't have
2410 it in their attribute dictionary.
2412 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2413 really exists at startup, might save some confusion somewhere.
2415 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2417 * docs/waterfall.classic.css:
2418 add a stylesheet that's almost the same as the "classic"
2421 * buildbot/status/builder.py:
2422 add EXCEPTION as a result - this is a problem for the bot
2423 maintainer, not a build problem for the changers
2424 * buildbot/process/step.py:
2425 use EXCEPTION instead of FAILURE for exceptions
2426 * buildbot/status/html.py:
2427 add build_get_class to get a class out of a build/buildstep
2428 finish naming the classes
2429 split out sourceNames to changeNames and builderNames so we
2430 can style them separately
2431 * docs/config.xhtml:
2432 finish documenting classes as they are right now
2434 * buildbot/status/html.py:
2435 name the classes as we agreed on IRC
2436 * docs/config.xhtml:
2439 * buildbot/status/html.py:
2440 same for cssclass->class_
2442 * buildbot/status/html.py:
2443 as decided on IRC, use class_ for the "class" attribute to not
2444 conflict with the class keyword, and clean up the messy **{} stuff.
2446 * buildbot/status/mail.py:
2447 put back "builders" argument, and fix docstring, because the
2448 code *ignores* builders listed in this argument
2450 * buildbot/process/builder.py:
2451 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2453 * docs/config.xhtml:
2454 describe the category argument for builders
2456 * buildbot/status/builder.py:
2457 Fix a silly bug due to merging
2459 * buildbot/process/builder.py:
2460 remove category from the process Builder ...
2461 * buildbot/status/builder.py:
2462 ... and add it to BuilderStatus instead.
2463 Set category on unpickled builder statuses, they might not have it.
2464 * buildbot/master.py:
2465 include category when doing builderAdded
2466 * buildbot/status/mail.py:
2467 return None instead of self for builders we are not interested in.
2468 * buildbot/test/test_run.py:
2469 fix a bug due to only doing deferredResult on "dummy" waiting
2470 * buildbot/test/test_status.py:
2471 add checks for the Mail IStatusReceiver returning None or self
2473 * buildbot/status/html.py:
2474 fix testsuite by prefixing page title with BuildBot
2476 * buildbot/status/builder.py:
2477 have .category in builder status ...
2478 * buildbot/process/builder.py:
2479 ... and set it from Builder
2480 * buildbot/status/html.py:
2481 make .css a class variable
2482 * buildbot/test/test_status.py:
2483 write more tests to cover our categories stuff ...
2484 * buildbot/status/mail.py:
2485 ... and fix the bug that this uncovered
2487 * buildbot/changes/mail.py:
2488 * buildbot/changes/pb.py:
2489 * buildbot/master.py:
2490 * buildbot/process/base.py:
2491 * buildbot/process/factory.py:
2492 * buildbot/process/interlock.py:
2493 * buildbot/process/step.py:
2494 * buildbot/process/step_twisted.py:
2495 * buildbot/slave/commands.py:
2496 * buildbot/status/builder.py:
2497 * buildbot/status/client.py:
2498 * buildbot/status/html.py:
2499 * buildbot/status/mail.py:
2500 * buildbot/status/progress.py:
2501 * buildbot/test/test_changes.py:
2502 * buildbot/test/test_config.py:
2503 * buildbot/test/test_control.py:
2504 * buildbot/test/test_interlock.py:
2505 * buildbot/test/test_maildir.py:
2506 * buildbot/test/test_mailparse.py:
2507 * buildbot/test/test_run.py:
2508 * buildbot/test/test_slavecommand.py:
2509 * buildbot/test/test_status.py:
2510 * buildbot/test/test_steps.py:
2511 * buildbot/test/test_twisted.py:
2512 * buildbot/test/test_util.py:
2513 * buildbot/test/test_vc.py:
2514 * buildbot/test/test_web.py:
2516 add test-case-name at the top of a whole set of files
2518 * buildbot/status/builder.py:
2519 keep order of addition when getting builder names
2520 * buildbot/status/words.py:
2521 * buildbot/test/test_run.py:
2522 add test for getBuilderNames
2524 * buildbot/process/base.py:
2525 * buildbot/process/step.py:
2526 * buildbot/status/builder.py:
2527 * buildbot/status/html.py:
2528 make buildbot css-able
2529 replace the color code for purple with purple, don't understand
2530 why it wasn't purple to start with
2532 * buildbot/status/words.py:
2533 ok, so it doesn't look like BuilderStatus.remote is still valid.
2534 Use what waterfall uses instead.
2536 * buildbot/interfaces.py:
2537 * buildbot/status/builder.py:
2538 * buildbot/status/html.py:
2539 * buildbot/status/mail.py:
2540 * buildbot/status/words.py:
2541 * buildbot/test/test_run.py:
2542 use categories everywhere and make it be a list. More sensible
2543 for the future. Also make words actually respect this in
2546 * buildbot/interfaces.py:
2547 add category argument to getBuilderNames
2548 * buildbot/process/builder.py:
2549 * buildbot/status/builder.py:
2550 * buildbot/status/html.py:
2551 * buildbot/status/mail.py:
2552 * buildbot/status/words.py:
2553 * buildbot/test/test_run.py:
2554 move from specifying builders by name to specifying the category
2556 * buildbot/status/html.py:
2557 * buildbot/status/words.py:
2558 add "builders=" to __init__ of status clients so they can
2559 limit themselves to the given list of builders to report on
2561 * buildbot/status/html.py: set the title to the product name
2563 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2565 * buildbot/interfaces.py:
2566 * buildbot/status/builder.py:
2567 more documentation. Hm, not sure if ChangeLog entries make sense
2570 2005-04-23 Brian Warner <warner@lothar.com>
2572 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2574 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2576 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2577 the sub-commands that log buildmaster status to stdout and to a
2578 GUI window, respectively.
2580 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2581 functionality is working again, but all the step-status and ETA
2582 stuff is missing. Commented out a lot of code pending more
2585 * buildbot/status/client.py: make sure that IRemote(None) is None
2587 * buildbot/changes/changes.py: import defer, oops
2588 (ChangeMaster): remove the .sources list, rely upon the fact that
2589 MultiServices can be treated as sequences of their children. This
2590 cleans up the add/remove ChangeSource routines a lot, as we keep
2591 exactly one list of the current sources instead of three.
2593 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2594 up an empty ChangeMaster at init time.
2595 (BuildMaster.loadChanges): if there are changes to be had from
2596 disk, replace self.change_svc with the new ones. If not, keep
2597 using the empty ChangeMaster set up in __init__.
2598 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2599 instead of a separate list, makes the code a bit cleaner.
2600 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2601 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2602 Extend the test to make sure we can get rid of the sources when
2605 2005-04-22 Brian Warner <warner@lothar.com>
2607 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2608 and info/host files when making the slave directory
2610 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2611 whendone= argument, just return the Deferred and let the caller do
2612 what they want with it.
2613 (Disconnect.testBuild1): wait for shutdownSlave
2614 (Basedir.testChangeBuilddir): new test to make sure changes to the
2615 builddir actually get propagated to the slave
2617 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2618 explicit method, rather than passing the builddir in __init__ .
2619 Make sure to update self.basedir too, this was broken before.
2620 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2621 builders and for ones that have just had their builddir changed.
2622 (BotFactory): add a class-level .perspective attribute, so
2623 BuildSlave.waitUntilDisconnected won't get upset when the
2624 connection hasn't yet been established
2625 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2626 tests can reach through it to inspect the SlaveBuilders
2628 * buildbot/process/base.py (Build.buildException): explain the
2629 log.err with a log.msg
2630 * buildbot/process/builder.py (Builder.startBuild): same
2631 (Builder._startBuildFailed): improve error message
2633 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2634 occurred because we lost the brand-new connection, retry instead
2635 of giving up. If not, it's probably an authorization failure, and
2636 it makes sense to stop trying. Make sure we log.msg the reason
2637 that we're log.err'ing the failure, otherwise test failures are
2638 really hard to figure out.
2640 * buildbot/master.py: change loadConfig() to return a Deferred
2641 that doesn't fire until the change has been fully implemented.
2642 This means any connected slaves have been updated with the new
2643 builddir. This change makes it easier to test the code which
2644 actually implements this builddir-updating.
2645 (BotPerspective.addBuilder): return Deferred
2646 (BotPerspective.removeBuilder): same
2647 (BotPerspective.attached): same
2648 (BotPerspective._attached): same. finish with remote_print before
2649 starting the getSlaveInfo, instead of doing them in parallel
2650 (BotPerspective.list_done): same
2651 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2652 actually calling slave.disconnect()
2653 (BotMaster.addBuilder): same
2654 (BotMaster.removeBuilder): same
2655 (BuildMaster.loadConfig): same
2656 (BuildMaster.loadConfig_Slaves): same
2657 (BuildMaster.loadConfig_Sources): same
2658 (BuildMaster.loadConfig_Builders): same
2659 (BuildMaster.loadConfig_status): same
2661 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2662 a Deferred that fires when the source is finally removed
2664 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2665 the previous tree on win32, where we have to do it synchronously,
2666 make sure we return a Deferred anyway.
2667 (SourceBase.doCopy): same
2669 * buildbot/scripts/runner.py (statusgui): use the text client for
2670 now, while I rewrite the Gtk one
2671 * buildbot/clients/base.py: strip out old code, leaving just the
2672 basic print-message-on-event functionality. I also remove the
2673 ReconnectingPBClientFactory, but it does at least quit when it
2674 loses the connection instead of going silent
2676 2005-04-21 Brian Warner <warner@lothar.com>
2678 * Makefile: minor tweaks
2680 * NEWS: point out deprecation warnings, new features for
2683 * buildbot/master.py (BuildMaster.loadConfig): emit
2684 DeprecationWarnings for Builders defined with tuples. Rearrange
2685 code to facility removal of deprecated configuration keys in the
2688 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2689 'buildbot' command to put a little Makefile in the target that
2690 helps you re-create the buildbot.tap file, start or stop the
2691 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2692 all the files 0600, since they contain passwords.
2693 (start): if there is a Makefile, and /usr/bin/make exists, use
2694 'make start' in preference to a raw twistd command. This lets
2695 slave admins put things like PYTHONPATH variables in their
2696 Makefiles and have them still work when the slave is started with
2697 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2698 be nice to first try the 'make' command and only fall back to
2699 twistd if it fails. TODO: the Makefile's "start" command does not
2700 add the --reactor=win32 argument when running under windows.
2701 (Options.debugclient, Options.statusgui): add sub-commands to launch
2702 the debug client (formerly in contrib/debugclient.py) and the
2703 Gtk status application (currently broken)
2704 * buildbot/clients/debug.py: move from contrib/debugclient.py
2705 * buildbot/clients/debug.glade: same
2707 * buildbot/test/test_trial.py: remove it. This requires some
2708 functionality out of Twisted that isn't there yet, and until then
2709 having it around just confuses things.
2711 * buildbot/test/test_slavecommand.py (Shell): test both with and
2712 without PTYs, and make sure that command output is properly
2713 interleaved in the with-PTY case. I think the without-PTY test
2714 should pass on windows, where we never use PTYs anyway.
2716 2005-04-20 Brian Warner <warner@lothar.com>
2718 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2720 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2722 * NEWS: start creating entries for the next release
2724 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2726 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2727 (WebTest.test_webPathname): same
2728 (WebTest.test_webPathname_port): same
2729 (WebTest.test_waterfall): use the default favicon rather than
2730 rooting around the filesystem for it. Open the expected-icon file
2731 in binary mode, to make win32 tests happier (thanks to Nick Trout
2733 * buildbot/status/html.py (buildbot_icon): win32 portability
2735 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2736 win32-compatibility fixes from Nick Trout, the "file not found" message
2737 is different under windows
2738 (FakeSlaveBuilder.__init__): clean up setup a bit
2739 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2741 2005-04-19 Brian Warner <warner@lothar.com>
2743 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2744 skip-if-repositories-are-unavailable test to not kill the trial
2745 that comes with Twisted-1.3.0
2747 * setup.py: install buildbot.png icon file when installing code
2749 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2750 environment used by the command, at least on the child side.
2752 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2753 this method needs to be added and implemented because it gets
2754 called under heavy load. I don't quite understand the
2755 producer/consumer API enough to write it.
2756 (StatusResource.getChild): add a resource for /favicon.ico
2757 (Waterfall.__init__): add favicon= argument
2758 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2759 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2760 (WebTest.test_webPathname): same
2761 (WebTest.test_webPathname_port): same
2762 * docs/config.xhtml: mention favicon=
2763 * buildbot/buildbot.png: add a default icon, dorky as it is
2765 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2767 * buildbot/master.py:
2768 * buildbot/process/base.py:
2769 * buildbot/process/builder.py:
2770 * buildbot/process/interlock.py:
2771 * buildbot/status/builder.py:
2772 * buildbot/status/html.py:
2773 * buildbot/status/mail.py:
2774 * buildbot/status/words.py:
2775 new documentation while digging through the code
2777 2005-04-17 Brian Warner <warner@lothar.com>
2779 * general: try to fix file modes on all .py files: a+r, a-x,
2780 but let buildbot/clients/*.py be +x since they're tools
2782 * docs/epyrun (addMod): when an import fails, say why
2784 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2786 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2788 * buildbot/process/base.py:
2789 * buildbot/process/builder.py:
2790 * buildbot/status/builder.py:
2791 new documentation while digging through the code
2793 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2795 * buildbot/changes/changes.py:
2796 * buildbot/changes/p4poller.py:
2797 * buildbot/interfaces.py:
2798 * buildbot/process/base.py:
2799 * buildbot/process/builder.py:
2800 * buildbot/process/step.py:
2801 * buildbot/process/step_twisted.py:
2802 * buildbot/slave/bot.py:
2803 * buildbot/slave/commands.py:
2804 * buildbot/status/builder.py:
2805 fix all docstrings to make epydoc happy. In the process of fixing
2806 some, I also moved pieces of docs, and removed some deprecated
2809 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2811 * buildbot/process/builder.py:
2812 * buildbot/process/interlock.py:
2813 * buildbot/process/process_twisted.py:
2814 * buildbot/process/step.py:
2815 BuildProcess -> Build, as it looks like that's what happened
2816 * buildbot/process/base.py:
2817 * buildbot/process/factory.py:
2820 2005-04-17 Brian Warner <warner@lothar.com>
2822 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2823 update compile command to accomodate the Twisted split.. now
2824 instead of './setup.py build_ext -i', you do './setup.py all
2825 build_ext -i', to run build_ext over all sub-projects.
2826 (FullTwistedBuildFactory): same
2827 (TwistedReactorsBuildFactory): same
2829 * buildbot/status/html.py (TextLog.finished): null out self.req
2830 when we're done, otherwise the reference cycle of TextLog to .req
2831 to .notifications to a Deferred to TextLog.stop keeps them from
2832 being collected, and consumes a huge (610MB on pyramid at last
2833 check) amount of memory.
2835 2005-04-11 Brian Warner <warner@lothar.com>
2837 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2838 normalize the VC-repository location.. makes SVN happier with
2839 certain test environments.
2841 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2842 RemoteShellCommand gets its own .env dictionary, so that code in
2843 start() doesn't mutate the original. I think this should fix the
2844 step_twisted.Trial problem where multiple identical components
2845 kept getting added to PYTHONPATH= over and over again.
2847 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2848 adding epydoc-format docstrings to many classes. Thanks to Thomas
2849 Vander Stichele for the patches.
2850 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2851 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2852 * buildbot/slave/bot.py, commands.py, registry.py: same
2854 2005-04-05 Brian Warner <warner@lothar.com>
2856 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2857 preserve timestamps, helps incremental builds of large trees.
2858 Patch from Rene Rivera.
2860 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2861 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2864 2005-04-03 Brian Warner <warner@lothar.com>
2866 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2867 with one dict, apparently exec has some scoping bugs when used
2868 with both global/local dicts. Thanks to Nathaniel Smith for the
2871 2005-04-02 Brian Warner <warner@lothar.com>
2873 * buildbot/process/step_twisted.py (countFailedTests): the new
2874 trial in Twisted-2.0 emits a slightly different status line than
2875 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2876 mistakenly think the test count is unparseable.
2877 (Trial.start): note that for some reason each build causes another
2878 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2879 be fixed but I'm not sure quite where the problem is.
2881 2005-04-01 Brian Warner <warner@lothar.com>
2883 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2884 deferredResult to avoid hangs/warnings under twisted-2.0
2885 (RunMixin.tearDown): same
2886 (RunMixin.shutdownSlave): same
2887 (Disconnect.testIdle1): same
2888 (Disconnect.testBuild2): same: wait one second after the build
2889 finishes for test to really be done.. this should be cleaned up to
2890 avoid wasting that second. Builder.detach uses a callLater(0),
2891 either that should be done in-line (something else needed that
2892 behavior), or it should return a Deferred that fires when the
2893 builder is really offline.
2894 (Disconnect.testBuild3): same
2895 (Disconnect.testDisappear): same
2897 * buildbot/test/test_web.py: rearrange server-setup and teardown
2898 code to remove unclean-reactor warnings from twisted-2.0
2900 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2901 so the tests don't hang under twisted-2.0
2903 2005-03-31 Brian Warner <warner@lothar.com>
2905 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2906 caused a warning each time the master changed our set of builders
2908 * buildbot/status/builder.py (BuildStatus.saveYourself): under
2909 w32, don't unlink the file unless it already exists. Thanks to
2910 Baptiste Lepilleur for the catch.
2911 (BuilderStatus.saveYourself): same
2913 2005-02-01 Brian Warner <warner@lothar.com>
2915 * buildbot/status/html.py (TextLog.getChild): use a /text child
2916 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2917 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2918 logfile as text/plain (no markup, no headers). This replaces the
2919 previous scheme (which used an ?text=1 argument), and gets us back
2920 to a relative link (which works better when the buildbot lives
2921 behind another web server, such as Apache configured as a reverse
2922 proxy). Thanks to Gerald Combs for spotting the problem.
2924 * buildbot/__init__.py (version): bump to 0.6.2+ while between
2927 2004-12-13 Brian Warner <warner@lothar.com>
2929 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2931 * debian/changelog: update for 0.6.2
2932 * NEWS: finalize for 0.6.2
2934 2004-12-11 Brian Warner <warner@lothar.com>
2936 * NEWS: bring it up to date
2938 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2939 detection code. Require some sign of life from the buildmaster
2940 every BotFactory.keepaliveInterval seconds. Provoke this
2941 indication at BotFactory.keepaliveTimeout seconds before the
2942 deadline by sending a keepalive request. We don't actually care if
2943 that request is answered in a timely fashion, what we care about
2944 is that .activity() is called before the deadline. .activity() is
2945 triggered by any PB message from the master (including an ack to
2946 one of the slave's status-update messages). With this new scheme,
2947 large status messages over slow pipes are OK, as long as any given
2948 message can be sent (and thus acked) within .keepaliveTimeout
2949 seconds (which defaults to 30).
2950 (SlaveBuilder.remote_startCommand): record activity
2951 (SlaveBuilder.ackUpdate): same
2952 (SlaveBuilder.ackComplete): same
2953 (BotFactory.gotPerspective): same
2954 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2956 2004-12-09 Brian Warner <warner@lothar.com>
2958 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
2961 * buildbot/process/step_twisted.py (Trial._commandComplete):
2962 update self.cmd when we start the 'cat test.log' transfer. Without
2963 this, we cannot interrupt the correct RemoteCommand when we lose
2966 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
2967 trying to tell the slave to stop the command if we're already
2968 inactive, or if we no longer have a .remote
2970 * buildbot/process/builder.py (Builder._detached): don't let an
2971 exception in currentBuild.stopBuild() prevent the builder from
2972 being marked offline
2974 2004-12-07 Brian Warner <warner@lothar.com>
2976 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
2977 KeyError that happens when you ask for a non-existent Builder, and
2978 translate it into a UsageError.
2980 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
2981 losing the slave in the middle of a remote step is handled too
2983 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
2984 be a Failure, so be sure to stringify it before using it as the
2985 contents of the 'interrupt' logfile
2986 (RemoteCommand.interrupt): use stringified 'why' in
2987 remote_interruptCommand too, just in case
2989 2004-12-06 Brian Warner <warner@lothar.com>
2991 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
2992 instead of 'tla update', which is more efficient in case we've
2993 missed a couple of patches since the last update.
2995 * debian/changelog: update for previous (0.6.1) release. Obviously
2996 this needs to be handled better.
2998 2004-12-05 Brian Warner <warner@lothar.com>
3000 * NEWS: update for stuff since last release
3002 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3003 match the maybeDeferred change in Dispatcher.requestAvatar
3004 * buildbot/changes/pb.py (ChangePerspective.attached): same
3005 * buildbot/status/client.py (StatusClientPerspective.attached): same
3006 * buildbot/process/builder.py (Builder._attached3): same
3007 * buildbot/pbutil.py (NewCredPerspective.attached): same
3009 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3010 the date to the top-most box, if it is not the same as today's
3013 * docs/slave.xhtml: provide a buildslave setup checklist
3015 * docs/source.xhtml (Arch): correct terminology
3017 2004-12-04 Brian Warner <warner@lothar.com>
3019 * buildbot/test/test_slavecommand.py: use sys.executable instead
3020 of hard-coding 'python' for child commands, might help portability
3022 * docs/examples/twisted_master.cfg: update to current usage
3024 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3025 'stop build' command to the IRC bot
3027 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3028 message that broke PBChangeSource
3030 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3031 (SlaveBuilder): make some attributes class-level, remove the old
3032 "update queue" which existed to support resuming a build after the
3033 master connection was lost. Try to reimplement that feature later.
3034 (SlaveBuilder.stopCommand): clear self.command when the
3035 SlaveCommand finishes, so that we don't try to kill a leftover one
3037 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3040 * buildbot/slave/commands.py (SourceBase): set self.command for
3041 all VC commands, so they can be interrupted.
3043 2004-12-03 Brian Warner <warner@lothar.com>
3045 * buildbot/master.py: clean up slave-handling code, to handle
3046 slave-disconnect and multiple-connect better
3047 (BotPerspective): make these long-lasting, exactly one per bot
3048 listed in the config file.
3049 (BotPerspective.attached): if a slave connects while an existing
3050 one appears to still be connected, disconnect the old one first.
3051 (BotPerspective.disconnect): new method to forcibly disconnect a
3052 buildslave. Use some hacks to empty the transmit buffer quickly to
3053 avoid the long (20-min?) TCP timeout that could occur if the old
3054 slave has dropped off the net.
3055 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3056 own their own SlaveStatus objects. Remove .attached/.detached, add
3057 .addSlave/.removeSlave, treat slaves like Builders (config file
3058 parsing sends deltas to the BotMaster). Inform the slave
3059 instances, i.e. the BotPerspective, about addBuilder and
3061 (BotMaster.getPerspective): turns into a single dict lookup
3062 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3063 which gives BotPerspective.attached a chance to disconnect the old
3065 (BuildMaster.loadConfig): add code (disabled) to validate that all
3066 builders use known slaves (listed in c['bots']). The check won't
3067 work with tuple-specified builders, which are deprecated but not
3068 yet invalid, so the check is disabled for now.
3069 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3070 routine, do the add/changed/removed dance with them like we do
3072 (BuildMaster.loadConfig_Sources): move source-config into a
3073 separate routine too
3075 * buildbot/status/builder.py (Status.getSlave): get the
3076 SlaveStatus object from the BotPerspective, not the BotMaster.
3078 * buildbot/test/test_run.py: bunch of new tests for losing the
3079 buildslave at various points in the build, handling a slave that
3080 connects multiple times, and making sure we can interrupt a
3083 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3084 something other than 'Bot' for the Bot object, to make certain
3085 test cases easier to write.
3086 (BuildSlave.waitUntilDisconnected): utility method for testing
3088 2004-11-30 Brian Warner <warner@lothar.com>
3090 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3092 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3093 argument, return a Deferred that always fires with True or False.
3094 I don't use an errback to indicate 'ping failed' so that callers
3095 are free to ignore the deferred without causing spurious errors in
3097 * buildbot/process/builder.py (BuilderControl.ping): implement it
3099 * buildbot/test/test_run.py (Status.testDisappear): test ping
3100 (Status.disappearSlave): fix it
3102 2004-11-30 Brian Warner <warner@lothar.com>
3104 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3105 (IBuilderControl): add .getBuild(num), only works for the current
3106 build, of course, although it might be interesting to offer
3107 something for builds in the .waiting or .interlocked state.
3109 * buildbot/process/base.py (Build): have .stopBuild just do the
3110 interrupt, then let the build die by itself.
3111 (BuildControl): add .stopBuild, and add a point-event named
3112 'interrupt' just after the build so status viewers can tell that
3114 (BuilderControl): add .getBuild
3116 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3117 stops when you kill it, good for testing
3118 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3119 contains the 'reason' text.
3121 * buildbot/status/html.py: Add Stop Build button, if the build can
3122 still be stopped. Send a Redirect (to the top page) one second
3123 later, hopefully long enough for the interrupt to have an effect.
3124 Move make_row() up to top-level to share it between Stop Build and
3127 * buildbot/slave/commands.py: only kill the child process once
3129 * buildbot/test/test_run.py: add testInterrupt
3131 2004-11-29 Brian Warner <warner@lothar.com>
3133 * buildbot/process/base.py: Refactor command interruption. The
3134 Build is now responsible for noticing that the slave has gone
3135 away: Build.lostRemote() interrupts the current step and makes
3136 sure that no further ones will be started.
3138 * buildbot/process/builder.py: When the initial remote_startBuild
3139 message fails, log it: this usually indicates that the slave has
3140 gone away, but we don't really start paying attention until they
3141 fail to respond to the first step's command.
3143 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3144 slave disconnect. Now sports a new interrupt() method. Error
3145 handling was simplified a lot by chaining deferreds, so
3146 remoteFailed/remoteComplete were merged into a single
3147 remoteComplete method (which can now get a Failure object).
3148 Likewise failed/finished were merged into just _finished.
3149 (BuildStep): Add interrupt(why) method, and if why is a
3150 ConnectionLost Failure then the step is failed with some useful
3153 * buildbot/slave/bot.py: stop the current command when the remote
3154 Step reference is lost, and when the slave is shut down.
3155 (Bot): make it a MultiService, so it can have children. Use
3156 stopService to tell when the slave is shutting down.
3157 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3158 remote_interruptCommand (which asks the current SlaveCommand to
3159 stop but allows it to keep emitting status messages), and
3160 stopCommand (which tells it to shut up and die).
3162 * buildbot/slave/commands.py: make commands interruptible
3163 (ShellCommand.kill): factor out os.kill logic
3164 (Command): factor out setup()
3165 (Command.sendStatus): don't send status if .running is false, this
3166 happens when the command has been halted.
3167 (Command.interrupt): new method, used to tell the command to die
3168 (SlaveShellCommand): implement .interrupt
3169 (DummyCommand): implement .interrupt
3170 (SourceBase, etc): factor out setup(), don't continue substeps if
3173 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3174 so they can be called after finishing
3176 * buildbot/test/test_run.py: new tests for disconnect behavior,
3177 refactor slave-shutdown routines, add different kinds of
3180 2004-11-27 Brian Warner <warner@lothar.com>
3182 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3183 method to express ETA time like "2m45s" instead of "165 seconds"
3185 2004-11-24 Brian Warner <warner@lothar.com>
3187 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3188 archive after the test completes, to avoid cluttering the user's
3189 'tla archives' listing with a bogus entry. Arch doesn't happen to
3190 provide any way to override the use of ~/.arch-params/, so there
3191 isn't a convenient way to avoid touching the setup of the user who
3193 (VC_HTTP.testArchHTTP): same
3195 2004-11-23 Brian Warner <warner@lothar.com>
3197 * buildbot/status/html.py (TextLog): split render() up into
3198 render_HEAD and render_GET. Use a Producer when sending log
3199 chunks, to reduce memory requirements and avoid sending huge
3200 non-Banana-able strings over web.distrib connections. Requires
3201 peeking under the covers of IStatusLog.
3202 (TextLog.resumeProducing): fix the "as text" link, handle client
3203 disconnects that occur while we're still sending old chunks.
3205 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3206 use defer.succeed, not the non-existent defer.success
3207 (LogFile.waitUntilFinished): same
3208 (LogFile.subscribe): don't add watchers to a finished logfile
3210 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3213 2004-11-23 Brian Warner <warner@lothar.com>
3215 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3217 2004-11-23 Brian Warner <warner@lothar.com>
3219 * NEWS: update for the 0.6.1 release
3220 * MANIFEST.in: add new files
3222 * README (INSTALLATION): explain how to enable the extra VC tests
3224 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3225 level to, so old pickled builds can be displayed ok
3227 2004-11-22 Brian Warner <warner@lothar.com>
3229 * NEWS: summarize updates since last release
3231 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3232 Yoz Grahame. Closes SF#1050138.
3234 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3237 * buildbot/process/step_twisted.py (Trial): update docs a bit
3239 * docs/factories.xhtml: fix Trial factory docs to match reality.
3242 * buildbot/process/factory.py (Trial.__init__): add args for
3243 randomly= and recurse=, making them available to instantiators
3244 instead of only to subclassers. Closes: SF#1049759.
3246 2004-11-15 Brian Warner <warner@lothar.com>
3248 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3249 try to teach the Quick factory to use multiple versions of python
3251 2004-11-12 Brian Warner <warner@lothar.com>
3253 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3254 safer w32-compatible approach, and only use it on windows
3255 (BuildStatus.saveYourself): same
3257 2004-11-11 Brian Warner <warner@lothar.com>
3259 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3260 it: one string merge per chunk. There are now separate .entries
3261 and .runEntries lists: when enumerating over all chunks, make sure
3263 * buildbot/test/test_status.py (Log): more tests
3265 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3266 chunks together, up to 10kb per chunk. This ought to cut down on
3267 the CPU-burning overhead of large log files. Thanks to Alexander
3268 Staubo for spotting the problem.
3269 * buildbot/test/test_status.py (Log): tests for same
3271 2004-11-10 Brian Warner <warner@lothar.com>
3273 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3274 header to outbound mail
3275 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3277 2004-11-08 Brian Warner <warner@lothar.com>
3279 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3280 can't do os.rename() onto an existing file, so catch the exception
3281 and unlink the target file first. This introduces a slight window
3282 where the existing file could be lost, but the main failure case
3283 (disk full) should still be handled safely.
3284 (BuildStatus.saveYourself): same
3286 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3287 separator character instead of os.sep, because the filenames being
3288 split here are coming from the VC system, which can have a
3289 different pathname convention than the local host. This should
3290 help a buildmaster running on windows that uses a CVS repository
3291 which runs under unix.
3292 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3294 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3295 when there are no test failures to be parsed
3297 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3298 instead of the unix-specific os.system("cp"), thanks to Elliot
3299 Murphy for this and the other buildbot-vs-windows catches.
3300 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3302 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3303 echo the command as it is run
3305 * setup.py: install sample.mk too, not just sample.cfg
3306 (scripts): install contrib/windows/buildbot.bat on windows
3308 2004-11-07 Brian Warner <warner@lothar.com>
3310 * buildbot/process/builder.py (Builder._detached): clear the
3311 self.currentBuild reference, otherwise the next build will be
3312 skipped because we think the Builder is already in use.
3314 * docs/examples/twisted_master.cfg: update to match current usage
3315 on the Twisted buildbot
3317 2004-10-29 Brian Warner <warner@lothar.com>
3319 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3321 2004-10-28 Brian Warner <warner@lothar.com>
3323 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3324 have separate doVCUpdate/doVCFull methods. Catch an update failure
3325 and respond by clobbering the source directory and re-trying. This
3326 will handle local changes (like replacing a file with a directory)
3327 that will cause CVS and SVN updates to fail.
3328 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3330 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3333 2004-10-19 Brian Warner <warner@lothar.com>
3335 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3337 * buildbot/status/html.py (StatusResourceTestResults): display any
3338 TestResults that the Build might have
3339 (StatusResourceTestResult): and the logs for each TestResult
3340 (StatusResourceBuild): add link from the per-build page
3342 2004-10-15 Brian Warner <warner@lothar.com>
3344 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3345 the 'problems' portion of stdout, add TestResults to our build
3346 * buildbot/test/test_twisted.py (Parse.testParse): test it
3348 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3349 to retrieve a dict of accumulated test results
3350 (ITestResult): define what a single test result can do
3351 * buildbot/status/builder.py (TestResult): implement ITestResult
3352 (BuildStatus.getTestResults): retrieve dict of TestResults
3353 (BuildStatus.addTestResult): add TestResults
3354 * buildbot/test/test_status.py (Results.testAddResults): test it
3356 2004-10-14 Brian Warner <warner@lothar.com>
3358 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3359 instead of os.system("rm -rf") for win32 portability
3361 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3362 SignalMixin instead of starting/stopping the reactor, which is
3363 likely to cause problems with other tests
3365 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3366 self.copyComplete() call. Yoz Grahame makes the catch.
3368 * contrib/windows/buildbot.bat: helper script to deal with path
3369 issues. Thanks to Yoz Grahame.
3371 * buildbot/master.py (BuildMaster.startService): don't register a
3372 SIGHUP handler if the signal module has no SIGHUP attribute.
3373 Apparently win32 does this.
3375 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3377 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3378 test if the reactor can't offer UNIX sockets
3380 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3381 error introduced in the last commit. We really need that
3384 2004-10-12 Brian Warner <warner@lothar.com>
3386 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3387 when describing a maildir source. Thanks to Stephen Davis.
3389 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3392 * buildbot/scripts/runner.py (createMaster): install Makefile too
3393 (start): add --no_save to 'start' command
3394 * buildbot/scripts/sample.mk: simple convenience Makefile with
3395 start/stop/reload targets
3397 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3400 2004-09-30 Brian Warner <warner@lothar.com>
3402 * setup.py: Releasing buildbot-0.6.0
3404 2004-09-30 Brian Warner <warner@lothar.com>
3406 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3407 test_trial.py from the source tarball until support is complete.
3409 * NEWS: update for 0.6.0 release
3410 * buildbot/__init__.py (version): same
3413 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3414 'source' command to tell users where to get the Buildbot source
3416 * docs/examples/*.cfg: update to modern standards
3418 * NEWS: update for release
3420 * buildbot/scripts/runner.py (createMaster): remove the
3421 -shutdown.tap stuff now that it isn't necessary
3423 (start): launch buildbot.tap, not buildbot-shutdown.tap
3426 * buildbot/status/mail.py (Domain): shorten class name
3427 (MailNotifier): if lookup= is a string, pass it to Domain()
3428 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3429 (Mail.testBuild2): test the string-to-Domain shortcut
3430 (Mail.testMail): fix test
3433 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3436 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3437 more attributes on load
3438 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3439 to accomodate the whole waterfall page at once, and the thrashing
3440 results in a lot of unnecessary loads
3441 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3442 (BuilderStatus.saveYourself): same
3443 (BuilderStatus.eventGenerator): stop generating on the first missing
3444 build. We assume that saved builds are deleted oldest-first.
3445 (BuildStepStatus.__getstate__): .progress might not exist
3447 * buildbot/changes/changes.py (ChangeMaster): make it
3448 serializable, in $masterdir/changes.pck
3449 (ChangeMaster.stopService): save on shutdown
3450 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3451 * buildbot/test/test_config.py: load Changes before config file
3454 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3455 "Oh my god, you killed the command" header on a separate line
3457 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3458 skip over corrupted build pickles
3459 (BuilderStatus.getFullBuildByNumber): same
3460 (BuilderStatus.eventGenerator): skip over unavailable builds
3461 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3462 do an atomic rename. This prevents a corrupted pickle when some
3463 internal serialization error occurs.
3464 (BuilderStatus.saveYourself): same
3466 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3467 the timeout for shell commands, it got lost somehow
3469 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3470 run out of build steps, return the rest of the builder events
3472 * buildbot/interfaces.py (IBuilderControl.ping): add method
3474 * buildbot/process/builder.py (BuilderControl.ping): move
3475 slave-ping to BuilderControl, and fix the failure case in the
3476 process (Event.finish() is the verb, Event.finished is the noun).
3478 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3479 through the BuilderControl instead of the BuilderStatus
3480 (EventBox): add adapter for builder.Event, allowing builder events to
3481 be displayed in the waterfall display
3483 * buildbot/master.py (BotMaster.stopService): add a 'master
3484 shutdown' event to the builder's log
3485 (BuildMaster.startService): and a 'master started' on startup
3487 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3488 builder events into the BuildStep event stream
3489 (Status.builderAdded): add a 'builder created' event
3492 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3493 command to announce the completion of a running build
3494 (IrcStatusBot.command_FORCE): announce when the build finishes
3496 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3497 don't evict unfinished builds from the cache: they must stay in
3498 the full-cache until their logfiles have stopped changing. Make
3499 sure the eviction loop terminates if an unfinished build was hit.
3500 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3501 This lets exceptions be dumped in an email status message. Really
3502 we need LogFiles which contain both text and HTML, instead of two
3504 (BuildStatus.__getstate__): handle self.finished=False
3505 (Status.builderAdded): if the pickle is corrupted, abandon the
3506 history and create a new BuilderStatus object.
3508 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3509 self.progress attribute, helped one test which doesn't fully set
3510 up the Build object.
3512 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3513 IStatusLog methods into an Interface that is implemented by "stub"
3514 logs, for which all the actual text chunks are on disk (in the
3515 pickled Build instance). To show the log contents, you must first
3516 adapt the stub log to a full IStatusLog object.
3518 * buildbot/status/builder.py (LogFileStub): create separate stub
3519 log objects, which can be upgraded to a real one if necessary.
3520 (LogFile): make them persistable, and let them stubify themselves
3522 (BuildStepStatus): same
3524 (BuildStatus.saveYourself): save the whole build out to disk
3525 (BuilderStatus): make it persistable
3526 (BuilderStatus.saveYourself): save the builder to disk
3527 (BuilderStatus.addFullBuildToCache): implement two caches which
3528 hold Build objects: a small one which holds full Builds, and a
3529 larger one which holds "stubbed" Builds (ones with their LogFiles
3530 turned into LogFileStubs). This reduces memory usage by the
3531 buildmaster by not keeping more than a few (default is 2) whole
3532 build logs in RAM all the time.
3533 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3535 (BuilderStatus.eventGenerator): rewrite since .builds went away
3536 (BuilderStatus.buildStarted): remove the .builds array. Add the
3537 build to the "full" cache when it starts.
3538 (BuilderStatus._buildFinished): save the build to disk when it
3540 (Status): give it a basedir (same as the BuildMaster's basedir)
3541 where the builder pickles can be saved
3542 (Status.builderAdded): create the BuilderStatus ourselves, by
3543 loading a pickle from disk (or creating a new instance if there
3544 was none on disk). Return the BuilderStatus so the master can glue
3545 it into the new Builder object.
3547 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3548 all BuilderStatuses to save themselves out to disk. This is in
3549 lieu of saving anything important in the main Application pickle
3550 (the -shutdown.tap file).
3551 (BuildMaster.__init__): give Status() a basedir for its files
3552 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3553 to get the BuilderStatus, then give it to the Builder (instead of
3554 doing it the other way around). It's ok if the status announces
3555 the new Builder before it's really ready, as the outside world can
3556 only see the BuilderStatus object anyway (and it is ready before
3557 builderAdded returns). Use the builder's "builddir" (which
3558 normally specifies where the slave will run the builder) as the
3559 master's basedir (for saving serialized builds).
3561 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3562 coerce the logfile to IStatusLog before trying to get the text
3563 chunks out of it. This will pull the full (non-stubified) Build in
3564 from disk if necessary.
3565 (TextLog): fix the adapter registration
3567 * buildbot/test/test_control.py (Force.setUp): create the basedir
3568 * buildbot/test/test_web.py: same
3569 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3570 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3571 * buildbot/test/test_run.py (Run.testMaster): same
3572 (Status.setUp): same
3574 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3576 * buildbot/status/html.py (Waterfall.__init__): store actual
3577 allowForce flag passed in rather than using True for everyone;
3578 make sure setting it to False doesn't cause a NameError
3580 (StatusResourceBuilder.__init__) add the builder name to the page
3582 (StatusResourceBuilder.body) move HTML generation for a name/value
3583 row into a helper method (StatusResourceBuilder.make_row); only
3584 generate the "Force Build" form if allowForce was True and the
3585 slave is connected. Use class attributes in the generated HTML to
3586 spread a little CSS-joy.
3588 2004-09-28 Brian Warner <warner@lothar.com>
3590 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3591 warning-scanner to not ignore things like
3592 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3594 * buildbot/status/html.py (StatusResource.control): add some
3595 class-level values for .control in an attempt to make upgrading
3598 * buildbot/util.py (ComparableMixin): survive missing attributes,
3599 such as when a class is modified and we're comparing old instances
3602 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3603 failure handling, remove a redundant try/except block. Don't
3604 return the full traceback to the IRC channel.
3605 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3606 error messages. Get ETA properly.
3608 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3609 the reason, since (at least) IRC message will have <> in them.
3610 (StatusResourceBuilder.__init__): take an IBuilderControl
3611 (StatusResourceBuilder.force): use the IBuilderControl we get in
3612 the constructor instead of trying to make our own. Catch the
3613 new exceptions and ignore them for now (until we make an
3614 intermediate web page where we could show the error message)
3615 (StatusResource): create with an IControl, use it to give an
3616 IBuilderControl to all children
3617 (Waterfall): take an allowForce= option, pass an IControl object
3618 to StatusResource if it is True
3620 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3622 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3623 catch new exceptions and return string forms
3625 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3626 * buildbot/process/builder.py (Builder.forceBuild): raise them
3627 * buildbot/test/test_control.py (Force.testNoSlave): new test
3628 (Force.testBuilderInUse): same
3631 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3633 * buildbot/test/test_run.py: use IControl
3634 * buildbot/test/test_vc.py: same
3636 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3637 to use IControl. Still offline.
3638 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3640 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3641 who=None so periodic builds don't send out status mail
3642 (Builder.forceBuild): include reason in the log message
3643 (BuilderControl.forceBuild): rename 'name' to 'who'
3645 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3646 'who' parameter, but make it None by default so builds forced by
3647 slave admins don't cause status mail to be sent to anybody
3648 (BotMaster.forceBuild): same. this method is deprecated.
3649 (DebugPerspective.perspective_forceBuild): same, use IControl.
3650 (DebugPerspective.perspective_fakeChange): use IControl..
3651 (Dispatcher.requestAvatar): .. so don't set .changemaster
3653 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3654 parameter to avoid confusion with the name of the builder
3657 * buildbot/status/mail.py: refine comment about needing 2.3
3659 * buildbot/status/html.py: move all imports to the top
3661 * buildbot/test/test_control.py: test new interfaces
3662 * buildbot/test/test_run.py (Status): handle new interfaces
3663 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3665 * buildbot/process/base.py (BuildControl): implement IBuildControl
3666 and its lonely getStatus() method
3668 * buildbot/process/builder.py (BuilderControl): implement
3669 IBuilderControl, obtained by adapting the Builder instance
3670 (Builder.startBuild): return a BuilderControl instead of a
3671 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3672 accomplish the same thing.
3674 * buildbot/master.py: move all import statements to the top
3675 (Control): implement IControl, obtained by adapting the
3676 BuildMaster instance.
3678 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3679 IBuildControl. These are used to force builds. Eventually they
3680 will provide ways to reconfigure the Builders, pause or abandon a
3681 Build, and perhaps control the BuildMaster itself.
3683 2004-09-26 Brian Warner <warner@lothar.com>
3685 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3686 ends up comparing us against something without a .__class__
3688 2004-09-24 Brian Warner <warner@lothar.com>
3690 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3693 * Makefile: add 'deb-snapshot' target, to create a timestamped
3696 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3698 2004-09-23 Brian Warner <warner@lothar.com>
3700 * buildbot/__init__.py (version): move version string here
3701 * setup.py: get version string from buildbot.version
3702 * buildbot/status/html.py (WaterfallStatusResource.body): add
3703 buildbot version to the page footer
3704 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3707 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3708 slaves, let the second know where the first one is coming from
3709 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3710 see our exceptions. It would be nice if there were a way to just
3711 send them the exception type and value, not the full traceback.
3714 * buildbot/status/mail.py (MailNotifier): add a new argument
3715 sendToInterestedUsers=, which can be set to False to disable the
3716 usual send-to-blamelist behavior.
3717 (top): handle python-2.2 which has no email.MIMEMultipart
3718 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3719 (MailNotifier.disownServiceParent): unsubscribe on removal
3721 * buildbot/test/test_status.py (Mail.testBuild2): test it
3724 * buildbot/status/progress.py (Expectations.wavg): tolerate
3725 current=None, which happens when steps start failing badly
3726 * buildbot/test/test_status.py (Progress.testWavg): test for it
3728 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3729 doesn't understand args['revision'], emit a warning instead of
3730 bailing completely. Updating to -rHEAD is probably close enough.
3732 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3734 * buildbot/test/test_status.py: at least import bb.status.client
3735 even if we don't have any test coverage for it yet
3737 * contrib/svn_buildbot.py: don't require python2.3
3738 (main): wait, do require it (for sets.py), but explain how to
3739 make it work under python2.2
3741 2004-09-23 Brian Warner <warner@lothar.com>
3743 * contrib/svn_buildbot.py: include the revision number in the Change
3745 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3746 using util.now() because FreshCVS is a realtime service
3748 * buildbot/status/event.py: delete dead code
3749 * buildbot/process/step.py: don't import dead Event class
3750 * buildbot/process/step_twisted.py: same
3751 * buildbot/status/builder.py: same
3752 * buildbot/status/client.py: same
3754 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3756 * buildbot/changes/changes.py (Change): set .when from an __init__
3757 argument (which defaults to now()), rather than having
3758 ChangeMaster.addChange set it later.
3759 (ChangeMaster.addChange): same
3761 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3762 (parseSyncmail): same. Just use util.now() for now.
3763 (parseBonsaiMail): parse the timestamp field for when=
3765 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3766 instead of setting .when after the fact
3770 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3771 results when the target project uses retrial. Still under
3773 * buildbot/test/test_trial.py: same
3775 2004-09-21 Brian Warner <warner@lothar.com>
3777 * buildbot/status/mail.py (MailNotifier.__init__): include
3778 success/warnings/failure in the Subject line
3779 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3780 use step.logname for the addLogs=True attachment filenames
3781 * buildbot/test/test_status.py (Mail): test Subject lines
3782 (Mail.testLogs): test attachment filenames
3784 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3785 accept a 'who' argument from the debug tool
3786 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3787 * contrib/debug.glade: add text box to set 'who'
3789 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3790 .getBuilderName with .getBuilder().getName(), more flexible
3791 (IStatusLog.getName): logs have short names, but you can prefix
3792 them with log.getStep().getName() to make them more useful
3793 * buildbot/status/builder.py: same
3794 * buildbot/status/client.py: same
3795 * buildbot/status/html.py: same
3796 * buildbot/test/test_run.py (Status.testSlave): same
3797 * buildbot/process/step.py: tweak logfile names
3799 * buildbot/status/mail.py (MailNotifier): add lookup, change
3800 argument to extraRecipients. The notifier is now aimed at sending
3801 mail to the people involved in a particular build, with additional
3802 constant recipients as a secondary function.
3804 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3805 including slow-lookup and failing-lookup. Make sure the blamelist
3806 members are included.
3808 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3809 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3810 (IBuildStatus.getInterestedUsers): new method
3811 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3812 * buildbot/status/client.py (remote_getResponsibleUsers): same
3813 * buildbot/status/html.py (StatusResourceBuild.body): same
3814 * buildbot/test/test_run.py (Status.testSlave): same
3816 2004-09-20 Brian Warner <warner@lothar.com>
3818 * docs/users.xhtml: update concepts
3820 * Makefile: add a convenience makefile, for things like 'make
3821 test'. It is not included in the source tarball.
3823 2004-09-16 Brian Warner <warner@lothar.com>
3825 * NEWS: mention /usr/bin/buildbot, debian/*
3827 * debian/*: add preliminary debian packaging. Many thanks to
3828 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3829 it considerably since it left their hands, I am responsible for
3830 all breakage that's resulted.
3832 * bin/buildbot: create a top-level 'buildbot' command, to be
3833 installed in /usr/bin/buildbot . For now it's just a simple
3834 frontend to mktap/twistd/kill, but eventually it will be the entry
3835 point to the 'try' command and also a status client. It is also
3836 intended to support the upcoming debian-packaging init.d scripts.
3837 * buildbot/scripts/runner.py: the real work is done here
3838 * buildbot/scripts/__init__.py: need this too
3839 * buildbot/scripts/sample.cfg: this is installed in new
3840 buildmaster directories
3841 * setup.py: install new stuff
3843 2004-09-15 Brian Warner <warner@lothar.com>
3845 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3846 'file:' schema (the version shipped with OS-X was built without the
3848 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3849 updates the log-timestamp, to make sure it isn't still running after
3852 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3853 values to the config file.
3854 * docs/examples/hello.cfg: add examples
3855 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3856 * buildbot/status/builder.py (Status.getProjectURL): implement them
3857 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3858 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3859 * buildbot/status/html.py (WaterfallStatusResource): display them
3862 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3863 certain error cases don't suffer a secondary exception.
3864 (top): Skip tests if the corresponding VC tool is not installed.
3866 * buildbot/process/factory.py (Trial): introduce separate
3867 'buildpython' and 'trialpython' lists, since trialpython=[] is
3868 what you want to invoke /usr/bin/python, whereas ./setup.py is
3869 less likely to be executable. Add env= parameter to pass options
3870 to test cases (which is how I usually write tests, I don't know if
3871 anyone else does it this way).
3873 * buildbot/process/step_twisted.py (Trial): handle python=None.
3874 Require 'testpath' be a string, not a list. Fix tests= typo.
3875 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3877 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3878 way to deal with the possibility of removing the disconnect notify
3880 (CVS): add a 'login' parameter to give a password to 'cvs login',
3881 commonly used with pserver methods (where pw="" or pw="guest")
3883 * buildbot/slave/commands.py (SourceBase): move common args
3884 extraction and setup() to __init__, so everything is ready by the
3885 time setup() is called
3886 (CVS.start): call 'cvs login' if a password was supplied
3887 (ShellCommand): special-case PYTHONPATH: prepend the master's
3888 value to any existing slave-local value.
3890 * buildbot/process/builder.py (Builder.updateBigStatus): if we
3891 don't have a remote, mark the builder as Offline. This whole
3892 function should probably go away and be replaced by individual
3894 (Builder.buildFinished): return the results to the build-finished
3895 deferred callback, helps with testing
3897 2004-09-14 Brian Warner <warner@lothar.com>
3899 * buildbot/test/test_vc.py: put all the repositories needed to run
3900 the complete tests into a single small (1.3MB) tarball, so I can
3901 make that tarball available on the buildbot web site. Test HTTP
3902 access (for Arch and Darcs) by spawning a temporary web server
3903 while the test runs.
3905 * docs/users.xhtml: new document, describe Buildbot's limited
3906 understanding of different human users
3908 * buildbot/test/test_vc.py: rearrange test cases a bit
3910 * buildbot/process/step_twisted.py (Trial): handle testpath=
3911 * buildbot/process/factory.py (Trial): update to use step.Trial
3913 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3915 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3916 the overall build text (which gives you 'failed 2 tests' rather
3918 (BuildStepStatus.text2): default to [], not None
3920 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3923 2004-09-12 Brian Warner <warner@lothar.com>
3925 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3926 log the whole exception if it's just an AttributeError (old slave)
3928 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3929 so (e.g.) sub-commands can be run in the right directory.
3930 (ShellCommand.start): accept an optional errorMessage= argument
3931 to make life easier for SVN.start
3932 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3934 (ShellCommand.start): move ['dir'] compatibility hack..
3935 (RemoteShellCommand.start): .. to here so everyone can use it
3937 * buildbot/process/step_twisted.py (Trial): use .workdir
3939 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3940 text displayed when debuild fails completely
3941 (Trial): snarf _trial_temp/test.log from the slave and display it
3943 2004-09-11 Brian Warner <warner@lothar.com>
3945 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3947 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3948 set to 'twisted', so --recurse can find twisted/web/test/*, etc
3950 * buildbot/process/step.py (ShellCommand): call .createSummary
3951 before .evaluateCommand instead of the other way around. This
3952 makes it slightly easier to count warnings and then use that to
3953 set results=WARNINGS
3954 * buildbot/process/step_twisted.py: cosmetic, swap the methods
3956 * buildbot/process/base.py (Build.buildFinished): update status
3957 before doing progress. It's embarrassing for the build to be stuck
3958 in the "building" state when an exceptions occurs elsewhere..
3960 * buildbot/status/progress.py (Expectations.expectedBuildTime):
3961 python2.2 doesn't have 'sum'
3963 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
3964 to prevent clients from accidentally sorting it
3966 * buildbot/master.py (Manhole): add username/password
3967 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
3968 c['manholePort'], deprecate old usage
3969 * docs/config.xhtml: document c['manhole']
3970 * docs/examples/hello.cfg: show example of using a Manhole
3973 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
3974 pretend the slave is up to date
3976 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
3977 the module, overlaps with 'log', the local variable
3979 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
3981 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
3982 new method to let Steps find out the version of their
3983 corresponding SlaveCommand.
3984 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
3985 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
3986 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
3988 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
3989 (Arch.startVC): same
3990 (P4Sync.startVC): same
3992 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
3993 Deferred so we can catch errors in remote_startCommand
3994 (RemoteShellCommand.start): same
3996 * docs/examples/twisted_master.cfg: update sample config file
3998 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
3999 after connectionMade() is called, not before. Close stdin at that
4002 * buildbot/process/process_twisted.py: update to use Trial, clean
4003 up argument passing (move to argv arrays instead of string
4006 * buildbot/process/step_twisted.py (Trial): new step to replace
4007 RunUnitTests, usable by any trial-using project (not just
4008 Twisted). Arguments have changed, see the docstring for details.
4010 * buildbot/process/base.py (Build.startBuild): this now returns a
4011 Deferred. Exceptions that occur during setupBuild are now
4012 caught better and lead to fewer build_status weirdnesses, like
4013 finishing a build that was never started.
4014 (Build.buildFinished): fire the Deferred instead of calling
4015 builder.buildFinished directly. The callback argument is this
4016 Build, everything else can be extracted from it, including the
4017 new build.results attribute.
4018 * buildbot/process/builder.py (Builder.startBuild): same
4019 (Builder.buildFinished): same, extract results from build
4021 * buildbot/process/step.py (ShellCommands): remove dead code
4023 2004-09-08 Brian Warner <warner@lothar.com>
4025 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4026 doesn't try to use the leftover patched workdir
4027 (SourceStamp): test source-stamp computation for CVS and SVN
4029 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4030 patched workdir ('touch .buildbot-patched') so we don't try to
4032 (SourceBase.start): add ['revision'] for all Source steps
4033 (CVS): change args: use ['branch'] for -r, remove ['files']
4034 (CVS.buildVC): fix revision/branch stuff
4035 (SVN): add revision stuff
4037 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4038 kwargs (except 'workdir') to avoid silent spelling errors
4039 (ShellCommand.__init__): same
4040 (Source): new base class for CVS/SVN/etc. Factor out everything
4041 common, add revision computation (perform the checkout with a -D
4042 DATE or -r REVISION that gets exactly the sources described by the
4043 last Change), overridable with step.alwaysUseLatest. Add patch
4044 handling (build.getSourceStamp can trigger the use of a base
4045 revision and a patch).
4046 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4047 * docs/steps.xhtml: update docs
4048 * docs/source.xhtml: mention .checkoutDelay
4049 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4051 * buildbot/process/base.py (Build.setSourceStamp): add a
4052 .sourceStamp attribute to each Build. If set, this indicates that
4053 the build should be done with something other than the most
4054 recent source tree. This will be used to implement "try" builds.
4055 (Build.allChanges): new support method
4056 (Build.lastChangeTime): remove, functionality moved to Source steps
4057 (Build.setupBuild): copy the Step args before adding ['workdir'],
4058 to avoid modifying the BuildFactory (and thus triggering spurious
4062 * buildbot/status/html.py: rename s/commits/changes/
4063 (StatusResourceChanges): same
4064 (CommitBox.getBox): same, update URL
4065 (WaterfallStatusResource): same
4066 (StatusResource.getChild): same
4068 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4069 * contrib/debug.glade: add optional 'revision' to the fakeChange
4071 * buildbot/changes/changes.py (html_tmpl): display .revision
4072 (ChangeMaster.addChange): note .revision in log
4073 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4074 accept a ['revision'] attribute
4076 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4078 * buildbot/master.py (BotMaster.getPerspective): update the
4079 .connected flag in SlaveStatus when it connects
4080 (BotMaster.detach): and when it disconnects
4081 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4082 (BuildMaster.loadConfig_Builders): walk old list correctly
4084 * buildbot/test/test_config.py: fix prefix= usage
4086 2004-09-06 Brian Warner <warner@lothar.com>
4090 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4091 poll a P4 depot looking for recent changes. Thanks to Dave
4092 Peticolas for the contribution. Probably needs some testing after
4095 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4096 requires manual client setup for each buildslave. Rather
4097 experimental. Thanks again to Dave Peticolas.
4098 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4100 * buildbot/changes/changes.py (Change): add a .revision attribute,
4101 which will eventually be used to generate source-stamp values.
4103 * buildbot/process/step.py (RemoteCommand.start): use
4104 notifyOnDisconnect to notice when we lose the slave, then treat it
4105 like an exception. This allows LogFiles to be closed and the build
4106 to be wrapped up normally. Be sure to remove the disconnect
4107 notification when the step completes so we don't accumulate a
4108 bazillion such notifications which will fire weeks later (when the
4109 slave finally disconnects normally). Fixes SF#915807, thanks to
4110 spiv (Andrew Bennetts) for the report.
4111 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4112 really isn't Logged- specific
4113 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4114 header, since it's almost always going to be appended to an
4116 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4117 update test to handle use of notifyOnDisconnect
4119 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4120 don't clear .ETA and .currentBuild when going offline, let the
4121 current build clean up after itself
4123 * buildbot/process/builder.py (Builder.detached): wait a moment
4124 before doing things like stopping the current build, because the
4125 current step will probably notice the disconnect and cleanup the
4127 * buildbot/test/test_run.py (Status.tearDown): update test to
4128 handle asynchronous build-detachment
4130 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4132 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4133 hush a debug message
4135 2004-09-05 Brian Warner <warner@lothar.com>
4137 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4138 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4139 kernels do this: the fcntl module has the F_NOTIFY constant, but
4140 the kernel itself doesn't support the operation. Thanks to Olly
4141 Betts for spotting the problem.
4143 * buildbot/process/step.py (Darcs): new source-checkout command
4144 (Arch): new source-checkout command
4145 (todo_P4): fix constructor syntax, still just a placeholder
4146 * buildbot/test/test_vc.py (VC.testDarcs): test it
4147 (VC.testDarcsHTTP): same, via localhost HTTP
4149 (VC.testArchHTTP): same
4150 * NEWS: mention new features
4152 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4153 which tells the step to stash stdout text locally (in .stdout).
4154 Slave-side Commands can use this to make decisions based upon the
4155 output of the the ShellCommand (not just the exit code).
4156 (Darcs): New source-checkout command
4157 (Arch): New source-checkout command, uses .keepStdout in one place
4158 where it needs to discover the archive's default name.
4160 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4161 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4162 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4164 * buildbot/process/step.py (ShellCommand.describe): add an
4165 alternate .descriptionDone attribute which provides descriptive
4166 text when the step is complete. .description can be ["compiling"],
4167 for use while the step is running, then .descriptionDone can be
4168 ["compile"], used alone when the step succeeds or with "failed" when
4169 it does not. Updated other steps to use the new text.
4170 * buildbot/process/step_twisted.py: same
4171 * buildbot/test/test_run.py: update tests to match
4173 2004-08-30 Brian Warner <warner@lothar.com>
4175 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4176 (CVS.__init__): send 'patch' argument to slave
4177 (CVS.start): don't create the LoggedRemoteCommand until start(),
4178 so we can catch a .patch added after __init__
4179 (SVN.__init__): add 'patch' to SVN too
4182 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4183 argument, to let commands push data into the process' stdin pipe.
4184 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4185 is in use, since closing a PTY doesn't really affect the process
4186 in the right way (in particular, I couldn't run /usr/bin/patch
4188 (SourceBase.doPatch): handle 'patch' argument
4190 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4193 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4194 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4196 * buildbot/master.py (BotPerspective.got_commands): get command
4197 versions from slave, give to each builder
4198 * buildbot/process/builder.py (Builder.attached): stash slave
4199 command versions in .remoteCommands
4201 * docs/steps.xhtml: bring docs in-line with reality
4203 * buildbot/process/step.py (CVS.__init__): more brutal
4204 compatibility code removal
4205 (SVN.__init__): same
4207 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4208 (SlaveShellCommand.start): require ['workdir'] argument, remove
4209 the ['dir'] fallback (compatibility will come later)
4210 (SourceBase): update docs
4211 (SourceBase.start): remove ['directory'] fallback
4214 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4215 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4216 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4218 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4219 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4220 code.. I will figure out 0.5.0-compatibility hooks later)
4222 2004-08-30 Brian Warner <warner@lothar.com>
4224 * buildbot/process/process_twisted.py: rewrite in terms of new
4225 BuildFactory base class. It got significantly shorter. Yay
4228 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4229 work with the new "self.build isn't nailed down until we call
4230 step.start()" scheme: specifically, __init__ is called before the
4231 build has decided on which Changes are going in, so we don't scan
4232 build.allFiles() for .xhtml files until start()
4233 (HLint.commandComplete): use getText(), not getStdout()
4234 (RunUnitTests.start): same: don't use .build until start()
4235 (RunUnitTests.describe): oops, don't report (None) when using
4237 (RunUnitTests.commandComplete): use getText()
4238 (RunUnitTests.createSummary): same
4239 (BuildDebs.commandComplete): same
4241 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4242 set args['command'] until start(), since our BuildStep is allowed
4243 to change their mind up until that point
4244 (TreeSize.commandComplete): use getText(), not getStdout()
4246 * docs/examples/twisted_master.cfg: update to current standards
4248 * docs/factories.xhtml: update
4249 * buildbot/process/factory.py: implement all the common factories
4250 described in the docs. The Trial factory doesn't work yet, and
4251 I've probably broken all the process_twisted.py factories in the
4252 process. There are compatibility classes left in for things like
4253 the old BasicBuildFactory, but subclasses of them are unlikely to
4255 * docs/examples/glib_master.cfg: use new BuildFactories
4256 * docs/examples/hello.cfg: same
4258 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4259 explicit 'workdir' args
4261 * buildbot/process/base.py (BuildFactory): move factories to ..
4262 * buildbot/process/factory.py (BuildFactory): .. here
4263 * buildbot/process/process_twisted.py: handle move
4264 * buildbot/test/test_config.py: same
4265 * buildbot/test/test_run.py: same
4266 * buildbot/test/test_steps.py: same
4267 * buildbot/test/test_vc.py: same
4268 * docs/factories.xhtml: same
4270 * NEWS: mention config changes that require updating master.cfg
4272 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4273 argument to all steps that weren't given one already, pointing at
4274 the "build/" directory.
4276 * docs/examples/hello.cfg: remove explicit 'workdir' args
4278 * docs/factories.xhtml: document standard BuildFactory clases,
4279 including a bunch which are have not yet been written
4281 2004-08-29 Brian Warner <warner@lothar.com>
4283 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4284 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4285 buildbot.status.builder so they aren't quite so internal
4286 * buildbot/process/base.py, buildbot/process/builder.py: same
4287 * buildbot/process/maxq.py, buildbot/process/step.py: same
4288 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4289 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4290 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4292 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4293 to handle new getLogs()-returns-list behavior
4294 (StatusResourceBuildStep.getChild): same
4295 (StepBox.getBox): same
4296 (WaterfallStatusResource.phase0): same
4298 * docs/source.xhtml: document how Buildbot uses version-control
4299 systems (output side: how we get source trees)
4300 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4301 systems (input side: how we learn about Changes)
4303 * buildbot/master.py (Manhole): use ComparableMixin
4304 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4305 * buildbot/changes/mail.py (MaildirSource): same
4306 * buildbot/status/client.py (PBListener): same
4307 * buildbot/status/html.py (Waterfall): same
4308 * buildbot/status/words.py (IRC): same
4310 * NEWS: start describing new features
4312 * buildbot/status/mail.py (MailNotifier): finish implementation.
4313 The message body is still a bit sparse.
4314 * buildbot/test/test_status.py (Mail): test it
4316 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4317 and __hash__ methods I wind up adding everywhere. Specifically
4318 intended to support the buildbot config-file update scheme where
4319 we compare, say, the old list of IStatusTargets against the new
4320 one and don't touch something which shows up on both lists.
4321 * buildbot/test/test_util.py (Compare): test case for it
4323 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4324 return a list instead of a dict
4325 (IBuildStepStatus.getLogs): same. The idea is that steps create
4326 logs with vaguely unique names (although their uniqueness is not
4327 guaranteed). Thus a compilation step should create its sole
4328 logfile with the name 'compile', and contribute it to the
4329 BuildStatus. If a step has two logfiles, try to create them with
4330 different names (like 'test.log' and 'test.summary'), and only
4331 contribute the important ones to the overall BuildStatus.
4332 * buildbot/status/builder.py (Event.getLogs): same
4333 (BuildStepStatus): fix default .text and .results
4334 (BuildStepStatus.addLog): switch to list-like .getLogs()
4335 (BuildStepStatus.stepFinished): same
4336 (BuildStatus.text): fix default .text
4337 (BuildStatus.getLogs): temporary hack to return all logs (from all
4338 child BuildStepStatus objects). Needs to be fixed to only report
4339 the significant ones (as contributed by the steps themselves)
4340 * buildbot/test/test_run.py: handle list-like .getLogs()
4341 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4343 2004-08-28 Brian Warner <warner@lothar.com>
4345 * buildbot/process/builder.py (Builder.attached): serialize the
4346 attachment process, so the attach-watcher isn't called until the
4347 slave is really available. Add detached watchers too, which makes
4350 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4352 * buildbot/test/test_swap.py: remove dead code
4354 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4355 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4356 sort of as if the command being run exited with a -1. There may
4357 still be some holes in this scheme.
4358 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4359 -r option appears before the module list
4360 * buildbot/process/step.py (CVS): add 'revision' argument
4362 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4363 when sending updates or stepComplete messages to the master, since
4364 we don't currently care whether they arrive or not. When we revamp
4365 the master/slave protocol to really resume interrupted builds,
4366 this will need revisiting.
4367 (lostRemote): remove spurious print
4369 * buildbot/master.py (BotPerspective.attached): serialize the
4370 new-builder interrogation process, to make testing easier
4371 (BotMaster.waitUntilBuilderDetached): convenience function
4373 * buildbot/status/builder.py (BuilderStatus): prune old builds
4374 (BuildStatus.pruneSteps): .. and steps
4375 (BuildStepStatus.pruneLogs): .. and logs
4376 (BuilderStatus.getBuild): handle missing builds
4377 * buildbot/status/html.py (StatusResourceBuild.body): display build
4378 status in the per-build page
4379 (BuildBox.getBox): color finished builds in the per-build box
4381 2004-08-27 Brian Warner <warner@lothar.com>
4383 * buildbot/status/mail.py (MailNotifier): new notification class,
4386 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4387 variants of a common base class which handles all the mode= logic
4389 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4391 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4393 2004-08-26 Brian Warner <warner@lothar.com>
4395 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4398 * buildbot/test/test_run.py: update to new Logfile interface, new
4399 buildbot.slave modules
4400 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4402 * MANIFEST.in: new sample config file
4403 * docs/examples/hello.cfg: same
4405 * buildbot/process/step_twisted.py: remove dead import
4407 * buildbot/process/step.py (RemoteCommand.run): catch errors
4409 (RemoteCommand.remote_update): ignore updates that arrive after
4411 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4412 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4413 the responsibilities of the subclass's methods
4414 (BuildStep.failed): catch errors during failure processing
4415 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4416 (CVS): move to a mode= argument (described in docstring), rather
4417 than the ungainly clobber=/export=/copydir= combination.
4418 (SVN): add mode= functionality to SVN too
4419 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4421 * buildbot/process/base.py (Build.startNextStep): catch errors
4422 during s.startStep()
4424 * buildbot/clients/base.py: update to new PB client interface.
4425 gtkPanes is still broken
4427 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4428 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4429 * setup.py: add buildbot.slave module
4430 * buildbot/bb_tap.py: handle move
4431 * buildbot/slave/registry.py: place to register commands, w/versions
4432 * buildbot/slave/bot.py: major simplifications
4433 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4434 instead of a fixed table. Eventually this will make the slave more
4435 extensible. Use 'start' method on the command, not .startCommand.
4436 Fix unsafeTracebacks handling (I think).
4437 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4438 helper class with a .start method that returns a Deferred.
4439 SlaveShellCommand is the form reached by the buildmaster. Commands
4440 which use multiple ShellCommands can just chain them as Deferreds,
4441 with some helper methods in Command (_abandonOnFailure and
4442 _checkAbandoned) to bail on rc!=0.
4443 (CVSCommand): prefer new mode= argument
4444 (SVNFetch): add mode= argument
4446 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4447 put a useful reason string on the build
4449 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4450 core functionality into an IStatusLog object
4451 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4452 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4453 (StatusResourceBuild.body): use proper accessor methods
4454 * buildbot/status/client.py (RemoteLog): PB-access goes here
4455 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4456 which delivers log contents too
4457 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4458 * buildbot/status/event.py: remove old Logfile completely
4460 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4461 subscription interface for IStatusLog subscriptions just like all
4462 other the status subscriptions
4463 (IStatusReceiver.logChunk): method called on subscribers
4465 2004-08-24 Brian Warner <warner@lothar.com>
4467 * buildbot/process/builder.py (Builder._pong): oops, ping response
4468 includes a result (the implicit None returned by remote_print).
4469 Accept it so the _pong method handles the response correctly.
4471 2004-08-06 Brian Warner <warner@lothar.com>
4473 * buildbot/test/test_config.py: update IRC, PBListener tests
4475 * buildbot/status/client.py (StatusClientPerspective): total
4476 rewrite to match new IStatus interfaces. New subscription scheme.
4477 There are still a few optimizations to make (sending down extra
4478 information with event messages so the client doesn't have to do a
4479 round trip). The logfile-retrieval code is probably still broken.
4480 Moved the PB service into its own port, you can no longer share a
4481 TCP socket between a PBListener and, say, the slaveport (this
4482 should be fixed eventually).
4483 * buildbot/clients/base.py (Client): revamp to match. still needs
4484 a lot of work, but basic event reporting works fine. gtkPanes is
4487 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4488 instance talks to a single irc server. Threw out all the old
4489 multi-server handling code. Still need to add back in
4490 builder-control (i.e. "force build")
4492 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4493 more random text to the as-yet-unreachable per-step page
4495 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4496 rename to stepETAUpdate
4497 (BuildStatus.subscribe): add build-wide ETA updates
4498 (BuilderStatus.getState): remove more cruft
4499 (BuilderStatus.getCurrentBuild): remove more cruft
4500 (BuilderStatus.buildStarted): really handle tuple-subscription
4501 * buildbot/test/test_run.py (Status.testSlave): handle the
4502 stepETAUpdate rename
4504 * buildbot/master.py (BuildMaster): don't add a default
4505 StatusClientService. Don't add a default IrcStatusFactory. Both
4506 are now added through c['status'] in the config file. c['irc'] is
4507 accepted for backwards compatibility, the only quirk is you cannot
4508 use c['irc'] to specify IRC servers on ports other than 6667.
4510 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4511 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4512 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4513 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4516 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4517 the buildmaster to re-read its config file
4520 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4521 find out the port our server is running on
4522 (WebTest.test_webPathname_port): same
4524 * buildbot/test/test_config.py (testWebPortnum): test it
4525 (testWebPathname): ditto
4527 * docs/config.xhtml: document new c['status'] configuration option
4529 * buildbot/status/html.py (Waterfall): new top-level class which
4530 can be added to c['status']. This creates the Site as well as the
4531 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4532 reachable as .parent, for everything.
4534 * buildbot/master.py (Manhole): make it a normal service Child
4535 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4536 webPathname. It will eventually replace c['irc'] and the implicit
4537 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4538 in as (deprecated) backward compatibility hooks for now.
4541 * buildbot/process/builder.py (Builder.buildFinished): don't
4542 inform out builder_status about a finished build, as it finds out
4543 through its child BuildStatus object
4545 * buildbot/status/html.py: extensive revamp. Use adapters to make
4546 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4547 have both starting and finishing times and adjust the waterfall
4548 display accordingly, using spacers if necessary. Use SlaveStatus
4549 to get buildslave info.
4550 (StatusResourceBuildStep): new just-one-step resource, used to get
4551 logfiles. No actual href to it yet.
4553 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4554 the time being, until I get the file-naming scheme right
4556 * buildbot/status/builder.py (Event): clean started/finished names
4557 (BuildStatus.isFinished): .finished is not None is the right test
4558 (BuildStatus.buildStarted): track started/finished times ourselves
4559 (BuilderStatus.getSlave): provide access to SlaveStatus object
4560 (BuilderStatus.getLastFinishedBuild): all builds are now in
4561 .builds, even the currently-running one. Accomodate this change.
4562 (BuilderStatus.eventGenerator): new per-builder event generator.
4563 Returns BuildStepStatus and BuildStatus objects, since they can
4564 both be adapted as necessary.
4565 (BuilderStatus.addEvent): clean up started/finished attributes
4566 (BuilderStatus.startBuild,finishBuild): remove dead code
4567 (SlaveStatus): new object to provide ISlaveStatus
4569 * buildbot/process/step.py (ShellCommand.getColor): actually
4570 return the color instead of setting it ourselves
4571 (CVS.__init__): pull .timeout and .workdir options out of
4572 **kwargs, since BuildStep will ignore them. Without this neither
4573 will be sent to the slave correctly.
4574 (SVN.__init__): same
4576 * buildbot/process/builder.py (Builder): move flags to class-level
4578 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4579 SlaveStatus handle that
4581 * buildbot/process/base.py (Build.firstEvent): remove dead code
4582 (Build.stopBuild): bugfix
4584 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4586 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4587 (ChangeMaster.eventGenerator): yield Changes, since there are now
4588 Adapters to turn them into HTML boxes
4590 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4591 (BotPerspective.attached): feed a SlaveStatus object
4592 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4593 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4595 * buildbot/interfaces.py: API additions
4596 (ISlaveStatus): place to get slave status
4598 2004-08-04 Brian Warner <warner@lothar.com>
4600 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4601 the delay finishes, so the step is marked as SUCCESS
4603 * buildbot/test/test_run.py (Status.testSlave): cover more of
4604 IBuildStatus and IBuildStepStatus
4606 * buildbot/status/progress.py (StepProgress): move some flags to
4607 class-level attributes
4608 (StepProgress.remaining): if there are no other progress metrics
4609 to go by, fall back to elapsed time
4610 (StepProgress.setExpectations): take a dict of metrics instead of
4612 (BuildProgress.setExpectationsFrom): pull expectations from the
4613 Expectations, instead of having it push them to the BuildProgress
4614 (Expectations): move some flags to class-level attributes
4615 (Expectations.__init__): copy per-step times from the
4617 (Expectations.expectedBuildTime): new method for per-build ETA
4619 * buildbot/status/event.py (Logfile): move some flags to
4620 class-level attributes
4621 (Logfile.logProgressTo): better method name, let step set the
4622 progress axis name (instead of always being "output")
4624 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4625 times directly, rather than depending upon the (possibly missing)
4626 .progress object. Use 'None' to indicate "not started/finished
4628 (BuildStepStatus.getExpectations): oops, return the full list of
4630 (BuilderStatus._buildFinished): append finished builds to .builds
4632 * buildbot/process/step.py (BuildStep): add separate .useProgress
4633 flag, since empty .progressMetrics[] still implies that time is a
4635 (CVS): set up the cmd in __init__, instead of waiting for start()
4637 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4638 calculation, this will eventually turn into a proper sourceStamp
4639 (Build.setupBuild): tell the Progress to load from the Expectations,
4640 instead of having the Expectations stuff things into the Progress
4641 (Build.buildException): add a build-level errback to make sure the
4642 build's Deferred fires even in case of exceptions
4644 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4646 * buildbot/process/builder.py (Builder.forceBuild): convey the
4647 reason instead of creating a fake Change
4649 * docs/examples/twisted_master.cfg: update to match reality
4651 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4652 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4653 fix or remove broken/breaking tests
4655 * buildbot/status/event.py (Logfile.__len__): remove evil method
4657 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4658 missing .build, for test convenience
4660 * buildbot/process/step_twisted.py: import fixes
4662 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4664 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4665 .statusbag reference
4667 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4668 connection at shutdown, and stop it from reconnecting
4670 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4671 chase down remote-execution bugs
4673 * buildbot/process/step.py: more fixes, remove
4674 BuildStep.setStatus()
4675 * buildbot/status/builder.py: move setStatus() functionality into
4677 * buildbot/status/event.py: minor fixes
4679 2004-08-03 Brian Warner <warner@lothar.com>
4681 * buildbot/process/base.py, buildbot/process/builder.py
4682 * buildbot/process/step.py, buildbot/status/builder.py
4683 * buildbot/status/event.py, buildbot/test/test_run.py:
4684 fix status delivery, get a basic test case working
4685 * buildbot/master.py: finish implementing basic status delivery,
4686 temporarily disable HTML/IRC/PB status sources
4688 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4690 * buildbot/status/progress.py (BuildProgress): remove dead code
4692 * buildbot/interfaces.py
4693 * buildbot/process/base.py, buildbot/process/builder.py
4694 * buildbot/process/step.py, buildbot/process/step_twisted.py
4695 * buildbot/status/builder.py: Complete overhaul of the all
4696 status-delivery code, unifying all types of status clients (HTML,
4697 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4698 look like. This commit is a checkpointing of the work-in-progress:
4699 the input side is mostly done (Builders/Builds sending status
4700 to the BuilderStatus/BuildStatus objects), but the output side has
4701 not yet been started (HTML resources querying BuilderStatus
4702 objects). Things are probably very broken right now and may remain
4703 so for several weeks, I apologize for the disruption.
4705 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4706 HTML as the log's contents. Currently used for exception tracebacks.
4707 * buildbot/status/progress.py: minor spelling changes
4709 2004-08-02 Brian Warner <warner@lothar.com>
4711 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4712 in mozilla. Also added stylesheets copied from Twisted's docs.
4713 Remember that these files are meant to be run through Lore first.
4714 Thanks to Philipp Frauenfelder for the fixes.
4715 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4716 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4717 * docs/template.tpl: added a Lore template
4719 2004-07-29 Brian Warner <warner@lothar.com>
4721 * buildbot/interfaces.py: revamp status delivery. This is the
4722 preview: these are the Interfaces that will be provided by new
4723 Builder code, and to which the current HTML/IRC/PB status
4724 displayers will be adapted.
4726 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4727 on the SlaveBuilder, not the Bot.
4728 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4730 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4731 set .usePTY on the FakeSlaveBuilder
4733 2004-07-25 Brian Warner <warner@lothar.com>
4735 * buildbot/changes/freshcvs.py: add some debug log messages
4736 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4737 disabled 'setFilter' syntax
4738 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4739 don't end with a slash
4741 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4743 * setup.py: bump to 0.5.0+ while between releases
4745 2004-07-23 Brian Warner <warner@lothar.com>
4747 * setup.py (version): Releasing buildbot-0.5.0
4749 2004-07-23 Brian Warner <warner@lothar.com>
4751 * README: update for 0.5.0 release
4753 * NEWS: update for 0.5.0 release
4755 2004-07-22 Brian Warner <warner@lothar.com>
4757 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4758 mktap-time configuration flag (--usepty=1, --usepty=0)
4759 * buildbot/bot.py: same
4761 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4762 an 'info' directory being unwanted
4764 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4765 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4766 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4767 and earlier), use a FreshCVSSourceOldcred instead.
4768 (test): simple test routine: connect to server, print changes
4770 * buildbot/changes/changes.py (Change.getTime): make it possible
4771 to print un-timestamped changes
4773 * buildbot/master.py (makeApp): delete ancient dead code
4774 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4775 * buildbot/test/test_config.py (testFindConfigFile): test it
4777 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4778 instead of win32 one
4781 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4782 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4785 * buildbot/process/base.py (Builder.__init__): change constructor
4786 to accept a dictionary of config data, rather than discrete
4787 name/slave/builddir/factory arguments
4789 * docs/examples/twisted_master.cfg: update to new syntax
4790 * docs/examples/glib_master.cfg: same
4791 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4792 rough tests of the new syntax
4795 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4796 to be an int, which means "run a web.distrib sub-server on a TCP
4797 port". This lets you publish the buildbot status page to a remote
4798 twisted.web server (using distrib.ResourceSubscription). Also
4799 rename the local attributes used to hold these web things so
4800 they're more in touch with reality.
4801 * buildbot/test/test_web.py: test webPortnum and webPathname
4802 * docs/config.xhtml: document this new use of webPathname
4804 * docs/config.xhtml: new document, slightly ahead of reality
4806 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4807 'prefix' handling: treat it as a simple string to check with
4808 .startswith, instead of treating it as a directory. This allows
4809 sub-directories to be used. If you use prefix=, you should give it
4810 a string that starts just below the CVSROOT and ends with a slash.
4811 This prefix will be stripped from all filenames, and filenames
4812 which do not start with it will be ignored.
4814 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4816 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4817 and --exclude (inverse of --include). SVN post-commit hooks
4818 now have total control over which changes get sent to buildbot and which
4821 2004-07-10 Brian Warner <warner@lothar.com>
4823 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4824 test case to match new API
4826 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4827 which crashed HTML display when self.entries=[] (needed to
4828 distinguish between [], which means "no entries yet", and None,
4829 which means "the entries have been swapped out to disk, go fetch
4832 2004-07-04 Brian Warner <warner@lothar.com>
4834 * buildbot/process/step_twisted.py (countFailedTests): Count
4835 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4836 10kb from the end because any import errors are wedged there and
4837 they would make us think the test log was unparseable.
4838 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4840 2004-06-26 Brian Warner <warner@lothar.com>
4842 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4843 delete-*.pyc command into an actual BuildStep, so we can label it
4845 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4846 (FullTwistedBuildFactory): same
4848 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4850 * contrib/fakechange.py: Add an errback when sending the fake
4851 change, so we know it didn't work.
4853 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4855 * buildbot/process/step_twisted.py: Delete *.pyc files before
4856 calling trial, so it doesn't catch any old .pyc files whose .py
4857 files have been moved or deleted.
4859 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4860 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4861 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4862 instead of ["twisted.test"], so that the end result is "trial -R
4865 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4866 regular expression to match filenames that should be ignored when
4867 changed. Also add a --revision parameter that specifies the
4868 revision to examine, which is useful for debugging.
4870 2004-06-25 Brian Warner <warner@lothar.com>
4872 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4873 summary of warnings (like DeprecationWarnings), next to the
4876 2004-05-13 Brian Warner <warner@lothar.com>
4878 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4879 we now have a w32 build slave courtesy of Mike Taylor.
4881 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4882 so broken. Fixed a race condition that tripped up interlocked
4883 builds and caused the status to be stuck at "Interlocked" forever.
4884 The twisted buildbot's one interlocked build just so happened to
4885 never hit this case until recently (the feeding builds both pass
4886 before the interlocked build is attempted.. usually it has to wait
4888 (Builder._pong_failed): fix method signature
4890 * setup.py: bump to 0.4.3+ while between releases
4892 2004-04-30 Brian Warner <warner@lothar.com>
4894 * setup.py (version): Releasing buildbot-0.4.3
4896 2004-04-30 Brian Warner <warner@lothar.com>
4898 * MANIFEST.in: add the doc fragments in docs/*.xhtml
4900 * README: update for 0.4.3 release
4902 * NEWS: update for 0.4.3 release
4904 * buildbot/master.py (BuildMaster.__getstate__): make sure
4905 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4907 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4908 .trial as a class attribute, for upgrade from 0.4.2
4910 * buildbot/changes/changes.py (Change.links): add .links for
4913 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4914 .textWatchers and .htmlWatchers at save time, since they are both
4915 volatile, should allow smooth 0.4.2 upgrade
4917 * buildbot/process/step.py (CVS.finishStatus): catch failed
4918 CVS/SVN commands so we can make the status box red
4920 2004-04-29 Brian Warner <warner@lothar.com>
4922 * buildbot/changes/freshcvs.py
4923 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4924 code to do setFilter(), which tells the freshcvs daemon to not
4925 send us stuff that we're not interested in. I will uncomment it
4926 when a new version of CVSToys is available in which setFilter()
4927 actually works, and I get a chance to test it better.
4929 * docs/examples/twisted_master.cfg: start using a PBChangeSource
4931 * buildbot/master.py (Dispatcher): use a registration scheme
4932 instead of hardwired service names
4933 (BuildMaster): keep track of the Dispatcher to support
4936 * buildbot/changes/changes.py (ChangeMaster): create a distinct
4937 PBChangeSource class instead of having it be an undocumented
4938 internal feature of the ChangeMaster. Split out the code into a
4940 * buildbot/changes/pb.py (PBChangeSource): same
4941 * buildbot/test/test_changes.py: a few tests for PBChangeSource
4943 * docs/{factories|sources|steps}.xhtml: document some pieces
4945 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4946 using FCMaildirSource
4947 (f23osx): update OS-X builder to use python2.3, since the slave
4948 was updated to Panther (10.3.3)
4950 2004-03-21 Brian Warner <warner@lothar.com>
4952 * buildbot/process/process_twisted.py: factor out doCheckout, change
4953 to use SVN instead of CVS
4955 * buildbot/process/base.py (BasicBuildFactory): refactor to make
4956 an SVN subclass easier
4957 (BasicSVN): subclass which uses Subversion instead of CVS
4959 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
4961 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
4963 (CVSCommand.cvsComplete): don't assume chdir worked on win32
4965 2004-02-25 Brian Warner <warner@lothar.com>
4967 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
4968 is now either a list (which is passed to spawnProcess directly) or
4969 a string (which gets passed to /bin/sh -c). This removes the useSH
4970 flag and the ArgslistCommand class. Also send status header at the
4971 start and end of each command, instead of having the master-side
4973 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
4974 -r'. Update to use list-based arguments.
4975 (SVNFetch): use list-based arguments, use ['dir'] argument to
4977 * buildbot/test/test_steps.py (Commands): match changes
4979 * buildbot/process/step.py (InternalShellCommand.words): handle
4981 (SVN): inherit from CVS, cleanup
4983 * buildbot/status/event.py (Logfile.content): render in HTML, with
4984 stderr in red and headers (like the name of the command we're
4985 about to run) in blue. Add link to a second URL (url + "?text=1")
4986 to get just stdout/stderr in text/plain without markup. There is
4987 still a problem with .entries=None causing a crash, it seems to occur
4988 when the logfile is read before it is finished.
4990 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
4991 timeout to the keepalives, and use it to explicitly do a
4992 loseConnection instead of waiting for TCP to notice the loss. This
4993 ought to clear up the silent-lossage problem.
4994 (unsafeTracebacks): pass exception tracebacks back to the master,
4995 makes it much easier to debug problems
4997 2004-02-23 Brian Warner <warner@lothar.com>
4999 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5000 the whole command to /bin/sh instead of execve [Johan Dahlin]
5001 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5002 '-r HEAD' [Johan Dahlin]
5003 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5005 * buildbot/changes/changes.py (Change): add links= argument, add
5006 asHTML method [Johan Dahlin]. Modified to make a bit more
5007 XHTMLish. Still not sure how to best use links= .
5009 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5010 Change.asHTML to display the change, not asText
5012 * buildbot/status/html.py (StatusResourceBuilder): web button to
5015 * buildbot/test/test_run.py: test to actually start a buildmaster
5018 * MANIFEST.in: bring back accidentally-dropped test helper files
5020 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5021 that require cvstoys if it is not installed
5023 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5024 values of "bin/trial" [Dave Peticolas]
5025 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5026 tests passed" when we didn't happen to run any tests
5028 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5029 flunkOnFailure [Johan Dahlin]
5031 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5032 multiple instances of the same Step class by suffixing "_2", etc,
5033 to the name until it is unique. This name needs to be unique
5034 because it is used as a key in the dictionary that tracks build
5036 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5039 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5041 2004-01-14 Brian Warner <warner@lothar.com>
5043 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5044 kicked from a channel, log it
5046 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5047 something over whatever IRC channels the buildmaster is currently
5048 connected to. Added to try and track down a problem in which the
5049 master thinks it is still connected but the IRCd doesn't see it. I
5050 used a styles.Versioned this time, so hopefully users won't have
5051 to rebuild their .tap files this time.
5052 * contrib/debug.glade: add a "Poke IRC" button
5053 * contrib/debugclient.py: same
5055 * setup.py: bump to 0.4.2+ while between releases
5057 2004-01-08 Brian Warner <warner@lothar.com>
5059 * setup.py (version): Releasing buildbot-0.4.2
5061 2004-01-08 Brian Warner <warner@lothar.com>
5063 * NEWS: update for 0.4.2 release
5065 * README: document how to run the tests, now that they all pass
5067 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5069 * buildbot/process/step.py (CVS): add a global_options= argument,
5070 which lets you set CVS global options for the command like "-r"
5071 for read-only checkout, or "-R" to avoid writing in the
5073 * buildbot/slavecommand.py (CVSCommand): same
5075 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5076 testing easier (it is turned off when testing, to avoid the
5079 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5080 to make it easier to test: break generateStepID() out to a
5081 separate function, only update statusbag if it exists.
5082 (ShellCommands): create useful text for dict-based commands too.
5084 * test/*, buildbot/test/*: move unit tests under the buildbot/
5086 * setup.py (packages): install buildbot.test too
5088 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5089 * buildbot/test/test_steps.py: fix it, tests pass now
5091 2004-01-06 Brian Warner <warner@lothar.com>
5093 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5094 freshcvs mail uses a slightly different syntax for new
5095 directories. Update parser to handle either.
5096 * test/test_mailparse.py (Test1.testMsg9): test for same
5098 2003-12-21 Brian Warner <warner@lothar.com>
5100 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5101 'warnOnWarnings' so that lintian errors mark the build orange
5103 2003-12-17 Brian Warner <warner@lothar.com>
5105 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5106 messages emitted by Bonsai, contributed by Stephen Davis.
5108 * test/*: moved all tests to use trial instead of unittest. Some
5109 still fail (test_steps, test_slavecommand, and test_process).
5111 * setup.py (version): bump to 0.4.1+ while between releases
5113 2003-12-09 Brian Warner <warner@lothar.com>
5115 * setup.py (version): Releasing buildbot-0.4.1
5117 2003-12-09 Brian Warner <warner@lothar.com>
5119 * NEWS: update for 0.4.1 release
5121 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5122 freebsd builder code a little bit
5124 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5125 don't try to compare attributes of different classes
5126 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5127 (MaildirSource.messageReceived): fix Change delivery
5129 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5130 into the config file's namespace before loading it, like the
5131 documentation claims it does
5132 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5133 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5134 daemon comes back online
5136 2003-12-08 Brian Warner <warner@lothar.com>
5138 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5139 so the example will work with online=0 as well
5141 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5142 fix the __implements__ line
5144 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5145 class a twisted.application.service.Service, use startService to
5148 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5149 directory fd instead of simple open(). I'm sure this used to work,
5150 but the current version of python refuses to open directories with
5153 2003-12-05 Brian Warner <warner@lothar.com>
5155 * setup.py (version): bump to 0.4.0+ while between releases
5157 2003-12-05 Brian Warner <warner@lothar.com>
5159 * setup.py (version): Releasing buildbot-0.4.0
5161 2003-12-05 Brian Warner <warner@lothar.com>
5163 * docs/examples/glib_master.cfg: replace old sample scripts with
5164 new-style config files
5165 * MANIFEST.in: include .cfg files in distribution tarball
5167 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5168 implement a dummy method to avoid the exception that occurs when
5169 freshcvs sends this to us.
5171 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5172 removed the method, as it broke reconnection. Apparently
5173 stopFactory is called each time the connection attempt fails. Must
5175 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5176 attribute before serialization, since without stopFactory the
5177 reconnect timer may still be active and they aren't serializable.
5179 * test/test_mailparse.py (ParseTest): test with 'self' argument
5181 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5182 argument, as these "functions" are invoked like methods from class
5183 attributes and therefore always get an instance as the first
5186 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5187 message: thanks to Stephen Davis for the catch
5189 2003-12-04 Brian Warner <warner@lothar.com>
5191 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5192 twisted's standard ReconnectingClientFactory. Handles both oldcred
5193 and newcred connections. Also has a bug-workaround for
5194 ReconnectingClientFactory serializing its connector when it
5197 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5198 pbutil. Replace makeApp stuff with proper newcred/mktap
5199 makeService(). Don't serialize Ephemerals on shutdown.
5201 * buildbot/changes/changes.py (ChangeMaster): make it a
5202 MultiService and add the sources as children, to get startService
5203 and stopService for free. This also gets rid of the .running flag.
5205 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5206 new pbutil, turn into a TCPClient at the same time (to get
5207 startService for free). Two variants exist: FreshCVSSourceOldcred
5208 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5209 yet, but when it does, we'll be ready).
5210 (FreshCVSSource.notify): handle paths which are empty after the
5211 prefix is stripped. This only happens when the top-level (prefix)
5212 directory is added, at the very beginning of a Repository's life.
5214 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5215 Now the only reconnecting code is in the factory where it belongs.
5216 (Builder.unsubscribe): unregister the disconnect callback when we
5217 delete the builder on command from the master (i.e. when the
5218 buildmaster is reconfigured and that builder goes away). This
5219 fixes a multiple-delete exception when the status client is shut
5221 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5224 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5225 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5227 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5229 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5230 a list of globs (ugh). The testdir will be searched for files
5231 named *.tests and run the tests in the order specified in each of
5232 those files. This allows for "dependancies" between tests to be
5235 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5236 argument to pass to run_maxq.py, instead of a glob.
5238 2003-10-17 Brian Warner <warner@lothar.com>
5240 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5241 files that live in the sandbox
5243 2003-10-15 Brian Warner <warner@lothar.com>
5245 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5246 spelling error in "docs" count-warnings output
5247 (HLint.start): stupid thinko meant .xhtml files were ignored
5249 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5250 tests now that cReactor is banished to the sandbox
5252 2003-10-10 Brian Warner <warner@lothar.com>
5254 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5255 scheme: now .xhtml are sources and .html are generated
5257 2003-10-08 Brian Warner <warner@lothar.com>
5259 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5260 we were ignoring the 'randomly' parameter.
5262 2003-10-01 Brian Warner <warner@lothar.com>
5264 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5265 posix, to kill sub-children of aborted slavecommands.
5267 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5268 Clean up initialization: lastBuildStatus remains None until the
5269 first build has been completed.
5271 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5272 None as a lastBuildStatus
5273 * buildbot/clients/gtkPanes.py: same
5275 * buildbot/status/client.py (StatusClientService): keep
5276 BuilderStatus objects in self.statusbags . These objects now live
5277 here in the StatusClientService and are referenced by the Builder
5278 object, rather than the other way around.
5279 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5280 * buildbot/process/base.py (Builder): same
5281 * test/test_config.py (ConfigTest.testBuilders): same
5283 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5284 an existing builder, leave the statusbag alone. This will preserve the
5287 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5288 hook. This will probably go away in favor of a class in upcoming
5291 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5292 serviceName from newcred FreshCVSNotifiee setup
5294 2003-09-29 Brian Warner <warner@lothar.com>
5296 * buildbot/process/process_twisted.py: switch to new reactor
5298 * docs/examples/twisted_master.cfg: same
5300 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5302 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5303 botmaster reference instead of the oldapp service lookup
5305 * buildbot/master.py (BuildMaster.__init__): give the
5306 StatusClientService a reference to the botmaster to make it easier to
5309 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5311 * buildbot/status/html.py (Box.td): escape hreffy things so you
5312 can have spaces in things like builder names
5313 (StatusResourceBuilder.body)
5314 (WaterfallStatusResource.body)
5315 (WaterfallStatusResource.body0): same
5317 2003-09-25 Brian Warner <warner@lothar.com>
5319 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5320 rearrange the builder list when adding or removing builders: keep
5321 them in the order the user requested.
5322 * test/test_config.py (ConfigTest.testBuilders): verify it
5324 * contrib/debug.glade: give the debug window a name
5326 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5327 now wait on multiple interlocks. Fix code relating to that.
5328 (Builder.checkInterlocks): same
5329 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5331 * buildbot/master.py (BuildMaster.loadConfig): move from
5332 deprecated pb.BrokerFactory to new pb.PBServerFactory
5333 * test/test_config.py (ConfigTest.testWebPathname): same
5335 * docs/examples/twisted_master.cfg: fix interlock declaration
5337 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5338 Interlocks to their Builders into interlock.py .
5339 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5341 * test/test_config.py (ConfigTest.testInterlocks): validate
5344 * buildbot/process/base.py (Builder.__init__): better comments
5345 * buildbot/process/interlock.py (Interlock.__repr__): same
5346 (Interlock.deactivate): add .active flag, move the code that
5347 attaches/detaches builders into the Interlock
5349 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5351 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5352 tests using the new run_maxq.py script, and reporting failures by
5355 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5356 tests, reporting their success or failure in a buildbot-friendly
5359 2003-09-24 Brian Warner <warner@lothar.com>
5361 * docs/examples/twisted_master.cfg: example of a new-style config
5362 file. This lives in the buildmaster base directory as
5365 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5366 button to make the master re-read its config file
5368 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5369 buildmaster configuration from a file. This file can be re-read
5370 later, and the buildmaster will update itself to match the new
5371 desired configuration. Also use new Twisted Application class.
5372 * test/Makefile, test/test_config.py: unit tests for same
5374 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5375 FreshCVSSources comparable, to support reload.
5376 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5378 * buildbot/process/base.py (Builder): make them comparable, make
5379 Interlocks easier to attach, to support reload. Handle
5380 re-attachment of remote slaves.
5381 * buildbot/process/interlock.py (Interlock): same
5383 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5384 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5385 buildmaster taps are now constructed with mktap.
5386 * buildbot/status/client.py (StatusClientService): same
5388 * buildbot/status/words.py: move to new Services, add support to
5389 connect to multiple networks, add reload support, allow nickname
5390 to be configured on a per-network basis
5392 2003-09-20 Brian Warner <warner@lothar.com>
5394 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5395 the freebsd builder, now that the machine has been upgraded and no
5396 longer has python2.2
5398 * setup.py (version): bump to 0.3.5+ while between releases
5400 2003-09-19 Brian Warner <warner@lothar.com>
5402 * setup.py (version): Releasing buildbot-0.3.5
5404 2003-09-19 Brian Warner <warner@lothar.com>
5406 * NEWS: add post-0.3.4 notes
5408 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5410 * MANIFEST.in: add contrib/*
5412 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5413 use a remote root now: cvs.twistedmatrix.com
5415 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5417 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5418 compatibility with old servers
5419 (FreshCVSSource.start): and provide a way to use it
5420 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5422 * docs/examples/twisted_master.py (twisted_app): update to new
5424 (twisted_app): listen on new ~buildbot socket
5425 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5427 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5428 to reduce cvs bandwidth (update instead of full checkout)
5430 2003-09-11 Brian Warner <warner@lothar.com>
5432 * contrib/fakechange.py: demo how to connect to the changemaster
5433 port. You can use this technique to submit changes to the
5434 buildmaster from source control systems that offer a hook to run a
5435 script when changes are committed.
5437 * contrib/debugclient.py: tool to connect to the debug port. You
5438 can use it to force builds, submit fake changes, and wiggle the
5441 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5442 'Dispatcher' realm to handle all the different kinds of
5443 connections and Perspectives: buildslaves, the changemaster port,
5444 the debug port, and the status client port. NewCredPerspectives
5445 now have .attached/.detached methods called with the remote 'mind'
5446 reference, much like old perspectives did. All the pb.Services
5447 turned into ordinary app.ApplicationServices .
5448 (DebugService): went away, DebugPerspectives are now created
5449 directly by the Dispatcher.
5450 (makeApp): changed interface a little bit
5452 * buildbot/changes/changes.py: newcred
5453 * buildbot/status/client.py: newcred
5455 * buildbot/clients/base.py: newcred client side changes
5456 * buildbot/bot.py: ditto
5458 * docs/examples/glib_master.py: handle new makeApp() interface
5459 * docs/examples/twisted_master.py: ditto
5461 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5462 base newcred Perspectives on. This should go away once Twisted
5463 itself provides something sensible.
5466 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5468 * contrib/svn_buildbot.py: A program that you can call from your
5469 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5470 when a change in an SVN repository has happened. See the top of
5471 the file for some minimal usage info.
5473 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5475 * buildbot/slavecommand.py (ArglistCommand): Add new
5476 ArglistCommand that takes an argument list rather than a string as
5477 a parameter. Using a st.split() for argv is very bad.
5479 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5480 update to a particular revision rather than always checking out
5481 (still not very smart about it, there may be cases where the
5482 checkout becomes inconsistent).
5484 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5486 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5487 SVN fetch support. It can checkout (not update!) a specified
5488 revision from a specified repository to a specified directory.
5490 * buildbot/status/progress.py (Expectations.update): Fix an
5491 obvious bug (apparently created by the change described in the
5492 previous ChangeLog message) by moving a check to *after* the
5493 variable it checks is defined.
5496 2003-09-08 Brian Warner <warner@lothar.com>
5498 * buildbot/status/progress.py (Expectations.update): hack to catch
5499 an exception TTimo sees: sometimes the update() method seems to
5500 get called before the step has actually finished, so the .stopTime
5501 is not set, so no totalTime() is available and we average None
5502 with the previous value. Catch this and just don't update the
5503 metrics, and emit a log message.
5505 2003-08-24 Brian Warner <warner@lothar.com>
5507 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5508 parameter to set copydir='original' in CVS commands.
5510 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5512 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5513 which tells the command to maintain a separate original-source CVS
5514 workspace. For each build, this workspace will be updated, then
5515 the tree copied into a new workdir. This reduces CVS bandwidth
5516 (from a full checkout to a mere update) while doubling the local
5517 disk usage (to keep two copies of the tree).
5519 2003-08-21 Brian Warner <warner@lothar.com>
5521 * buildbot/status/event.py (Logfile.addEntry): if the master web
5522 server dies while we're serving a page, request.write raises
5523 pb.DeadReferenceError . Catch this and treat it like a
5524 notifyFinish event by dropping the request.
5526 2003-08-18 Brian Warner <warner@lothar.com>
5528 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5529 (instead of blowing up) if a force-build command is given without
5532 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5533 don't blow up if there aren't yet any Changes in the list
5535 2003-08-02 Brian Warner <warner@lothar.com>
5537 * buildbot/bot.py (updateApplication): don't set the .tap name,
5538 since we shouldn't assume we own the whole .tap file
5540 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5541 'mktap buildbot' (without a subcommand) better
5543 2003-07-29 Brian Warner <warner@lothar.com>
5545 * buildbot/status/words.py
5546 (IrcStatusFactory.clientConnectionLost): when we lose the
5547 connection to the IRC server, schedule a reconnection attempt.
5549 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5550 use shutil.rmtree instead of forking off an "rm -rf" command.
5551 rmtree may take a while and will block until it finishes, so we
5552 use "rm -rf" if available.
5554 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5555 freebsd buildslave badly
5557 * setup.py (version): bump to 0.3.4+ while between releases
5559 2003-07-28 Brian Warner <warner@lothar.com>
5561 * setup.py (version): Releasing buildbot-0.3.4
5563 2003-07-28 Brian Warner <warner@lothar.com>
5565 * NEWS: update in preparation for release
5567 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5568 process.signalProcess instead of os.kill, to improve w32
5571 * docs/examples/twisted_master.py (twisted_app): turn off
5572 win32eventreactor: the tests hang the buildslave badly
5574 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5575 failed builds, since usually the failures are consistent
5577 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5578 add compileOpts/compileOpts2 to reactors build
5580 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5581 (twisted_app): use both default and win32eventreactor on w32 build.
5582 Use both default and kqreactor on freebsd build.
5584 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5585 add compileOpts2, which is put after the build_ext argument. w32
5586 needs "-c mingw32" here.
5588 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5589 touch .acqpath, it goes away in recent Twisted releases
5591 * docs/examples/twisted_master.py (twisted_app): use "python" for
5592 the w32 buildslave, not "python2.2"
5594 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5595 the directory exists.. should hush an exception under w32
5597 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5598 ProcessTerminated -provided values for signal and exitCode rather
5599 than parsing the unix status code directly. This should remove one
5600 more roadblock for a w32-hosted buildslave.
5602 * test/test_mailparse.py: add test cases for Syncmail parser
5604 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5605 temporary compatibility import. Note! Start importing
5606 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5608 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5610 2003-07-27 Brian Warner <warner@lothar.com>
5612 * NEWS: started adding new features
5614 * buildbot/changes/mail.py: start work on Syncmail parser, move
5615 mail sources into their own file
5617 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5618 as implementing IChangeSource
5619 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5621 * buildbot/interfaces.py: define the IChangeSource interface
5623 2003-07-26 Brian Warner <warner@lothar.com>
5625 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5627 2003-06-25 Brian Warner <warner@lothar.com>
5629 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5632 2003-06-17 Brian Warner <warner@lothar.com>
5634 * buildbot/status/words.py: clean up method usage to avoid error
5635 in silly IRC command
5636 (IrcStatusBot.emit_status): round off seconds display
5638 * buildbot/process/base.py (Build): delete the timer when saving
5639 to the .tap file, and restore it (if it should still be running)
5640 upon restore. This should fix the "next build in -34 seconds"
5641 messages that result when the master is restarted while builds are
5642 sitting in the .waiting slot. If the time for the build has
5643 already passed, start it very soon (in 1 second).
5645 * buildbot/status/words.py: more silly commands
5647 * README (REQUIREMENTS): add URLs to all required software
5649 * buildbot/status/words.py ('last'): mention results of, and time
5652 2003-05-28 Brian Warner <warner@lothar.com>
5654 * buildbot/status/words.py: add 'last' command
5655 (IrcStatusBot.emit_status): add current-small text to 'status' output
5657 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5658 (twisted_app): remove spaces from OS-X builder name
5660 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5661 * buildbot/status/words.py: IRC bot should actually be useful now
5663 2003-05-23 Brian Warner <warner@lothar.com>
5665 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5666 "slave information" from $(slavedir)/info/* . These files are
5667 maintained by the slave administrator, and describe the
5668 machine/environment that is hosting the slave. Information from
5669 them is put into the "Builder" HTML page. Still need to establish
5670 a set of well-known filenames and meanings for this data: at the
5671 moment, *all* info/* files are sent to the master, but only
5672 'admin' and 'host' are used on that end.
5673 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5674 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5675 * buildbot/master.py (BotPerspective.got_info): ditto
5677 2003-05-22 Brian Warner <warner@lothar.com>
5679 * setup.py (version): bump version to 0.3.3+ while between releases
5681 2003-05-21 Brian Warner <warner@lothar.com>
5683 * setup.py: Releasing buildbot-0.3.3
5685 2003-05-21 Brian Warner <warner@lothar.com>
5687 * NEWS: 0.3.3 news items
5689 * README: describe --keepalive and life behind a NAT box
5691 * buildbot/bot.py (Bot.connected): implement application-level
5692 keepalives to deal with NAT timeouts, turn them on with
5693 --keepalive option or when SO_KEEPALIVE doesn't work.
5695 * buildbot/master.py (BotPerspective): accept keepalives silently
5697 * buildbot/process/base.py (Build.buildException): CopiedFailures
5698 don't carry as much information as local ones, so don't try to
5699 create a big HTMLized version of them.
5701 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5702 log file when step fails due to an exception, such as when the slave
5705 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5706 --testmodule argument instead of grepping for test-case-name tags
5707 ourselves. Remove FindUnitTests code.
5708 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5710 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5712 2003-05-16 Brian Warner <warner@lothar.com>
5714 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5715 argument to allow things like CFLAGS=-O0 to be passed without relying
5716 upon /bin/sh processing on the slave.
5718 * buildbot/process/step.py (InternalShellCommand.start): send
5720 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5721 'split' instead of letting /bin/sh do it. This should also remove
5722 the need for /bin/sh on the buildslave, making it more likely to
5725 * buildbot/status/html.py: html-escape text in blamelist.
5726 Add "force build" button to the Builder page.
5728 * buildbot/process/step_twisted.py (countFailedTests): look at
5729 last 1000 characters for status line, as import errors can put it
5730 before the -200 point.
5732 2003-05-15 Brian Warner <warner@lothar.com>
5734 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5736 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5737 make 'clobber' a parameter, so it is possible to have builds which
5738 do full tests but do a cvs update instead of hammering the CVS
5739 server with a full checkout each build
5741 * buildbot/process/step.py (InternalShellCommand): bump default
5742 timeout to 20 minutes
5744 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5745 the master to trigger a build. Run it via manhole.
5747 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5748 allow slaves to trigger any build that they host, to make life
5749 easier for slave admins who are testing out new build processes
5751 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5752 don't flunk cReactor or qtreactor on failure, since they fail alot
5753 these days. Do warnOnFailure instead.
5755 * buildbot/process/base.py: change Builder.buildable from a list
5756 into a single slot. When we don't have a slave, new builds (once
5757 they make it past the timeout) are now merged into an existing
5758 buildable one instead of being queued. With this change, a slave
5759 which has been away for a while doesn't get pounded with all the
5760 builds it missed, but instead just does a single build.
5762 2003-05-07 Brian Warner <warner@lothar.com>
5764 * setup.py (version): bump version to 0.3.2+ while between releases
5766 2003-05-07 Brian Warner <warner@lothar.com>
5768 * setup.py: Releasing buildbot-0.3.2
5770 2003-05-07 Brian Warner <warner@lothar.com>
5772 * setup.py: fix major packaging error: include subdirectories!
5774 * NEWS: add changes since last release
5776 * README (REQUIREMENTS): update twisted/python dependencies
5778 * buildbot/status/builder.py (Builder.startBuild): change
5779 BuildProcess API: now they should call startBuild/finishBuild
5780 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5781 keeping a list of builds in the statusbag, to support other kinds of
5783 (Builder.addClient): send current-activity-small to new clients
5784 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5787 * buildbot/status/client.py: drop RemoteReferences at shutdown
5789 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5791 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5792 more debug messages for remote status client
5794 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5795 (.stepFailed): only fire the Deferred once, even if both
5796 stepComplete and stepFailed are called. I think this can happen if
5797 an exception occurs at a weird time.
5799 * buildbot/status/words.py: work-in-progress: IRC status delivery
5801 2003-05-05 Brian Warner <warner@lothar.com>
5803 * docs/examples/twisted_master.py (twisted_app): hush internal
5804 python2.3 distutils deprecation warnings
5805 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5806 add compileOpts= argument which inserts extra args before the
5807 "setup.py build_ext" command. This can be used to give -Wignore
5808 warnings, to hush some internal python-2.3 deprecation messages.
5810 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5811 the ['twisted.test'] default test case to make it easier to change
5814 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5815 * buildbot/clients/gtkPanes.py: ditto
5817 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5818 arg to collapse RunUnitTestsRandomly into RunUnitTests
5819 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5820 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5822 * buildbot/status/html.py (StatusResource): shuffle Resources
5823 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5824 would serve the waterfall display, but the internal links were
5825 only valid on the trailing-slash version. The correct behavior is
5826 for the non-slashed one to serve a Redirect to the slashed one.
5827 This only shows up when the buildbot page is hanging off another
5828 server, like a Twisted-Web distributed server.
5830 * buildbot/status/event.py (Event, RemoteEvent): make Events
5831 pb.Cacheable, with RemoteEvent as the cached version. This removes
5832 a lot of explicit send-an-update code.
5833 * buildbot/status/builder.py (Builder): remove send-update code
5834 * buildbot/status/client.py (ClientBuilder): remove send-update
5835 code, and log errors that occur during callRemote (mostly to catch
5836 InsecureJelly exceptions)
5838 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5839 run Lore with the same python used in the rest of the build
5841 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5843 * buildbot/process/step_twisted.py (HLint): accept 'python'
5844 argument. Catch rc!=0 and mark the step as failed. This marks the
5845 build orange ("has warnings").
5846 (RunUnitTestsJelly): move out to step_twisted2.py
5848 * buildbot/util.py (ignoreStaleRefs): add utility function
5850 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5851 don't fake ETA object, it's too hard to get right
5853 2003-05-02 Brian Warner <warner@lothar.com>
5855 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5857 2003-05-01 Brian Warner <warner@lothar.com>
5859 * buildbot/status/html.py (StatusResource.body): oops, I was
5860 missing a <tr>, causing the waterfall page to be misrendered in
5861 everything except Galeon.
5863 2003-04-29 Brian Warner <warner@lothar.com>
5865 * docs/examples/twisted_master.py: make debuild use python-2.2
5866 explicitly, now that Twisted stopped supporting 2.1
5868 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5869 handle tuple results too. I keep forgetting this, which suggests
5870 it needs to be rethought.
5872 * setup.py (setup): bump version to 0.3.1+ while between releases
5874 2003-04-29 Brian Warner <warner@lothar.com>
5876 * setup.py: Releasing buildbot-0.3.1
5878 2003-04-29 Brian Warner <warner@lothar.com>
5880 * README (SUPPORT): add plea to send questions to the mailing list
5882 * NEWS, MANIFEST.in: add description of recent changes
5884 * docs/examples/twisted_master.py: add the code used to create the
5885 Twisted buildmaster, with passwords and such removed out to a
5888 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5889 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5890 buildmasters to not require CVSToys be installed.
5891 * README, docs/examples/glib_master: update to match the change
5893 * buildbot/clients/base.py, buildbot/bot.py,
5894 buildbot/changes/changes.py, buildbot/pbutil.py: copy
5895 ReconnectingPB from CVSToys distribution to remove CVSToys
5896 dependency for build slaves and status clients. Buildmasters which
5897 use FreshCVSSources still require cvstoys be installed, of course.
5899 2003-04-25 Brian Warner <warner@lothar.com>
5901 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5902 runTestsRandomly arg to turn on trial -z
5904 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5905 experimental code to use trial's machine-parseable output to get
5906 more detailed test results. Still has some major issues.
5907 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5910 * buildbot/status/builder.py (Builder.setCurrentBuild):
5911 anticipating moving build history into statusbag, not used yet
5913 * buildbot/status/tests.py: code to centralize test results,
5914 doesn't work quite yet
5916 * buildbot/status/event.py (Event): use hasattr("setName") instead
5917 of isinstance for now.. need better long-term solution
5919 * buildbot/status/html.py: Remove old imports
5921 2003-04-24 Brian Warner <warner@lothar.com>
5923 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5924 ignore changes under doc/fun/ and sandbox/
5926 * buildbot/process/step_twisted.py: update pushEvent and friends.
5928 * buildbot/status/html.py (Box.td): replace event.buildername with
5929 event.parent.getSwappableName(). Needs more thought.
5931 * buildbot/status/builder.py (Builder): Replace pushEvent and
5932 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5933 Tell events they are being pruned with event.delete().
5935 * buildbot/process/base.py (Build): Remove Builder status-handling
5936 methods. s/pushEvent/setCurrentActivity/.
5938 * buildbot/process/step.py (BuildStep): clean up status delivery.
5939 Gouse builder.statusbag methods instead of intermediate builder
5940 methods. s/updateLastEvent/updateCurrentActivity/.
5941 s/finalizeLastEvent/finishCurrentActivity/. Use
5942 addFileToCurrentActivity for summaryFunction.
5944 * buildbot/status/event.py (Logfile): put data in a Swappable when
5946 (Event): add more setter methods. Remove .buildername, use .parent
5947 and getSwappableName instead (needs more thought).
5949 * buildbot/util.py (Swappable):
5950 * test/test_swap.py: don't bother setting filename at __init__
5951 time, do it later. Change setFilename args to take parent first,
5952 since it provides the most significant part of the filename.
5954 2003-04-23 Brian Warner <warner@lothar.com>
5956 * buildbot/status/event.py (Logfile.addEntry): append to previous
5959 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
5960 anticipating Swappable
5961 (InternalShellCommand.remoteUpdate): split out various log-adding
5962 methods so subclasses can snarf stdout separately
5964 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
5965 in anticipation of Swappable build logs
5966 (Builder.testsFinished): anticipating TestResults, still disabled
5968 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
5971 * buildbot/status/event.py (Logfile): add (disabled) support for
5972 Swappable, not ready for use yet
5974 * buildbot/util.py (Swappable): object which is swapped out to
5975 disk after some period of no use.
5976 * test/test_swap.py: test buildbot.utils.Swappable
5978 2003-04-14 Brian Warner <warner@lothar.com>
5980 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
5981 periodic-build timer. Set the .periodicBuildTime on a builder
5982 instance to some number of seconds to activate it.
5984 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
5986 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
5987 a way that survives result tuples
5989 2003-04-12 Brian Warner <warner@lothar.com>
5991 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
5992 return a dict instead of a tuple: allow summarizers to provide
5993 multiple summaries if they want
5994 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
5995 (debuildSummarizer): summarize lintian warnings/errors
5997 2003-04-10 Brian Warner <warner@lothar.com>
5999 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6001 2003-04-09 Brian Warner <warner@lothar.com>
6003 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6004 empty summaries: happens when the tests fail so hard they don't emit
6005 a parseable summary line.
6007 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6008 Allow summaryFunction to return None to indicate no summary should
6011 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6012 writing to stale HTTP requests: notice when they disconnect and
6013 remove the request from the list. Also add CacheToFile from
6014 moshez, will be used later.
6016 2003-04-08 Brian Warner <warner@lothar.com>
6018 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6019 should be an int, not a list of strings
6021 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6022 if we weren't actually connected
6024 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6025 to show the tail end of the trial text output
6027 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6028 hook to summarize the results of a ShellCommand
6030 2003-04-07 Brian Warner <warner@lothar.com>
6032 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6033 twisted test suite code into a single class.
6034 * buildbot/process/process_twisted.py: same
6036 2003-04-04 Brian Warner <warner@lothar.com>
6038 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6040 * README (SLAVE): document use of mktap to create slave .tap file
6041 (REQUIREMENTS): describe dependencies
6043 * buildbot/bb_tap.py, buildbot/plugins.tml:
6044 * buildbot/bot.py (updateApplication): Add mktap support for creating
6045 buildslave .tap files
6047 2003-03-28 Brian Warner <warner@lothar.com>
6049 * buildbot/process/step.py (InternalShellCommand.finished): handle
6050 new tuple result values (fix embarrasing bug that appeared during
6053 2003-03-27 Brian Warner <warner@lothar.com>
6055 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6058 2003-03-25 Brian Warner <warner@lothar.com>
6060 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6061 to overall build status
6062 * buildbot/clients/base.py (Builder): improve event printing
6063 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6064 instead of generic ShellCommand
6065 (Build): Add .stopBuild, use it when slave is detached
6067 * buildbot/process/step.py (Configure,Test): give the steps their
6068 own names and status strings
6070 * buildbot/status/html.py (StatusResource): add "show" argument,
6071 lets you limit the set of Builders being displayed.
6073 2003-03-20 Brian Warner <warner@lothar.com>
6075 * buildbot/process/basic.py: removed
6077 2003-03-19 Brian Warner <warner@lothar.com>
6079 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6080 turn off process-docs by default
6082 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6083 when displaying build information without anything in allBuilds[]
6085 * buildbot/bot.py (makeApp): really take password from sys.argv
6087 2003-03-18 Brian Warner <warner@lothar.com>
6089 * buildbot/bot.py (buildApp): take password from sys.argv
6091 * README: replace with more useful text
6093 * setup.py: add a real one
6094 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6096 * docs/PyCon-2003/: added sources for PyCon paper.
6098 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6099 now Build objects control the process and Builder only handles
6100 slave stuff and distribution of changes/status. A new BuildFactory
6101 class creates Build objects on demand.
6103 Created ConfigurableBuild which takes a list of steps to run. This
6104 makes it a lot easier to set up a new kind of build and moves us
6105 closer to being able to configure a build from a web page.
6107 * buildbot/process/step_twisted.py, process_twisted.py: move to
6108 new model. A lot of code went away.
6110 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6111 send lots of empty progress messages to the client.
6113 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6115 2003-02-20 Brian Warner <warner@lothar.com>
6117 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6119 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6120 Twisted bug that prevented non-pty processes from working just got
6121 fixed, and the bug that leaks ptys is still being investigated.
6123 * buildbot/process/step.py (CVS): send timeout arg to slave
6125 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6126 builders coming and going
6127 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6128 from CVSToys, handle lost-buildmaster
6130 * buildbot/status/client.py (StatusClientService.removeBuilder):
6131 Clean up status client protocol: send builders (with references)
6132 as they are created, rather than sending a list and requiring the
6133 client to figure out which ones are new.
6134 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6135 attempts to force a build on an unknown builder
6137 2003-02-19 Brian Warner <warner@lothar.com>
6139 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6140 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6141 Twisted stops leaking them.
6142 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6143 builder goes to an idle state.
6145 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6146 I figure out why CVS commands hang without them, and/or I fix the
6147 hung-command timeout
6149 2003-02-16 Brian Warner <warner@lothar.com>
6151 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6152 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6153 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6154 GenerateDocs now that they are prefixed with WARNING:.
6156 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6157 use manual href target instead of request.childLink
6159 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6160 display every second, but update the ETA every 5 seconds (or
6161 whenever) as remote_progress messages arrive.
6164 2003-02-12 Brian Warner <warner@lothar.com>
6166 * *: import current sources from home CVS repository
6170 # add-log-time-format: add-log-iso8601-time-string