1 2006-05-23 Brian Warner <warner@lothar.com>
3 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
4 * docs/buildbot.texinfo: set version to match
5 * NEWS: update for 0.7.3
7 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
8 give a quick mapping from VC system to possible ChangeSources
9 (Build Properties): add 'buildername'
11 * buildbot/process/base.py (Build.setupStatus): oops, set
12 'buildername' and 'buildnumber' properties
13 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
16 2006-05-22 Brian Warner <warner@lothar.com>
18 * docs/buildbot.texinfo (Build Properties): explain the syntax of
19 property interpolation better
21 * README (INSTALLATION): remove old '-v' argument from recommended
24 * docs/buildbot.texinfo (ShellCommand): add docs for description=
25 and descriptionDone= arguments. Thanks to Niklaus Giger for the
28 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
29 'svnversion' instead of grepping the output of 'svn info', much
30 simpler and avoids CR/LF problems on windows. Thanks to Olivier
31 Bonnet for the suggestion.
32 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
33 require the WC_PATH argument, so run 'svnversion .' instead.
35 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
36 aren't supposed to have 'self' in their argument list
38 2006-05-21 Brian Warner <warner@lothar.com>
40 * buildbot/process/step.py (ShellCommand.start): make
41 testInterpolate pass. I was passing the uninterpolated command to
42 the RemoteShellCommand constructor
43 (ShellCommand._interpolateProperties): oops, handle non-list
44 commands (i.e. strings with multiple words separated by spaces in
45 them) properly, instead of forgetting about them.
47 * buildbot/test/test_properties.py (Run.testInterpolate): new test
48 to actually try to use build properties in a real build. This test
50 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
51 to start and evaluate builds
53 * buildbot/test/test__versions.py: add a pseudo-test to record
54 what version of Twisted/Python/Buildbot are running. This should
55 show up at the beginning of _trial_tmp/test.log, and exists to help
58 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
59 a filename to be served as 'robots.txt' to discourage web spiders.
60 Adapted from a patch by Tobi Vollebregt, thanks!
61 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
62 (Waterfall.test_waterfall): tweak the way that filenames are put
63 into the config file, to accomodate windows pathnames better.
65 * docs/buildbot.texinfo (HTML Waterfall): document it
67 * buildbot/process/process_twisted.py
68 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
69 changed the build process. The new setup.py no longer takes the
71 (FullTwistedBuildFactory.__init__): same
72 (TwistedReactorsBuildFactory.__init__): same
74 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
75 be placed in the [hooks] section of the central repository (the
76 one that everybody pushes changes to).
78 2006-05-20 Brian Warner <warner@lothar.com>
80 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
81 .darcs-context file, use binary mode. I think this was causing a
82 Darcs failure under windows.
84 2006-05-19 Brian Warner <warner@lothar.com>
86 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
87 use a timezone string of +0000 and gmtime, since this timestamp is
88 sent to a buildmaster and %z is broken.
90 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
91 string and localtime, since this timestamp will only be consumed
92 locally, and %z is broken.
94 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
95 gmtime, since this timestamp is returned to the buildmaster, and
98 2006-05-18 Brian Warner <warner@lothar.com>
100 * NEWS: update in preparation for next release
102 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
103 setup-repository and do-we-have-the-vc-tools code into a separate
104 "helper" class, which sticks around in a single module-level
105 object. This seems more likely to continue to work in the future
106 than having it hide in the TestCase and hope that TestCases stick
107 around for a long time.
109 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
110 addremove' has been deprecated in recent versions of mercurial, so
113 2006-05-07 Brian Warner <warner@lothar.com>
115 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
116 operating under windows, move the file before opening it, since
117 you can't rename a file that somebody has open.
119 * buildbot/process/base.py (Build.setupBuild): if something goes
120 wrong while creating a Step, log the name and arguments, since the
121 error message when you get the number of arguments wrong is really
124 2006-05-06 Brian Warner <warner@lothar.com>
126 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
127 bugs in twisted-specific code not covered by my unit tests, this
128 time use 'cmd' argument instead of self.cmd
130 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
131 fix stupid braino: either use startwith or find()==0, not both.
132 (TwistedReactorsBuildFactory.__init__): another dumb typo
134 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
135 mark this test as TODO under windows, since process-killing seems
136 dodgy there. We'll come back to this later and try to fix it
139 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
140 and don't include a timezone
141 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
142 This should avoid the windows-with-verbose-timezone-name problem
144 (Patch.testPatch): add a test which runs 'patch' with less
145 overhead than the full VCBase.do_patch sequence, to try to isolate
146 a windows test failure. This one uses slave.commands.ShellCommand
147 and 'patch', but none of the VC code.
149 * buildbot/slave/commands.py (getCommand): use which() to find the
150 executables for 'cvs', 'svn', etc. This ought to help under
153 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
154 working directory before starting. If an earlier test failed, the
155 leftover directory would mistakenly flunk a later test.
156 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
157 Make sure that we use the right commandlines if which("tla") picks
158 up "tla.exe" (as it does under windows).
159 (TlaSupport.do_get): factor out this tla-vs-baz difference
160 (TlaSupport.vc_create): more tla-vs-baz differences
162 * buildbot/test/test_slavecommand.py
163 (ShellBase.testShellMissingCommand): stop trying to assert
164 anything about the error message: different shells on different
165 OSes with different languages makes it hard, and it really isn't
166 that interesting of a thing to test anyway.
168 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
169 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
170 "Panther"), because it has a bug which flunks a couple tests in
171 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
172 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
173 able to test that yet.
175 2006-04-30 Brian Warner <warner@lothar.com>
177 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
178 make sure child commands emit messages in english, so our regexps
179 will match. Thanks to Nikaus Giger for identifying the problems.
180 (VCBase._do_vctest_export_1): mode="export" is not responsible
181 for setting the "got_revision" property, since in many cases it is
182 not convenient to determine.
183 (SVNSupport.capable): when running 'svn --version' to check for
184 ra_local, we want error messages in english
185 * buildbot/test/test_slavecommand.py
186 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
187 to emit the error message in english
189 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
190 the environment with $LC_ALL="C" so that Commands which need to
191 parse the output of their child processes can obtain it in
193 (SVN.parseGotRevision): call "svn info" afterwards instead of
194 watching the output of the "svn update" or "svn checkout".
195 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
196 (Arch.parseGotRevision): same
197 (Bazaar.parseGotRevision): same
198 (Mercurial.parseGotRevision): same
200 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
201 $LC_ALL="C" when running commands under 'buildbot try', too
203 * buildbot/test/__init__.py: remove the global os.environ()
204 setting, instead we do it just for the tests that run commands and
205 need to parse their output.
207 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
208 remove the overly-short .timeout on this test, because non-DNotify
209 platforms must fall back to polling which happens at 10 second
210 intervals, so a 5 second timeout would never succeed.
212 2006-04-24 Brian Warner <warner@lothar.com>
214 * docs/buildbot.texinfo (Installing the code): update trial
215 invocation, SF#1469116 by Niklaus Giger.
216 (Attributes of Changes): updated branch-name examples to be
217 a bit more realistic, SF#1475240 by Stephen Davis.
219 * contrib/windows/buildbot2.bat: utility wrapper for windows
220 developers, contributed by Nick Trout (after a year of neglect..
223 * buildbot/test/test_vc.py (*.capable): store the actual VC
224 binary's pathname in VCS[vcname], so it can be retrieved later
225 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
226 strip out non-numeric timezone information, specifically the funky
227 German string that his system produced that confuses CVS.
228 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
229 allow Darcs tests to work on windows
230 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
231 procutils.which() everywhere, to allow tryclient to work under
232 windows. Also from Niklaus Giger, SF#1463394.
234 * buildbot/twcompat.py (which): move the replacement for a missing
235 twisted.python.procutils.which from test_vc.py to here, so it can
236 be used in other places too (specifically tryclient.py)
238 2006-04-23 Brian Warner <warner@lothar.com>
240 * buildbot/status/html.py (StatusResourceBuild.body): replace the
241 bare buildbotURL/projectName line with a proper DIV, along with a
242 CSS class of "title", from Stefan Seefeld (SF#1461675).
243 (WaterfallStatusResource.body0): remove the redundant 'table'
245 (WaterfallStatusResource.body): same. Also add class="LastBuild"
246 to the top-row TR, and class="Activity" to the second-row TR,
247 rather than putting them in the individual TD nodes.
249 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
250 'got_revision' build property for all VC systems that implement
251 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
253 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
254 to determine which revision we actually obtained
255 (CVS.parseGotRevision): implement this for CVS, which just means
256 to grab a timestamp. Not ideal, and it depends upon the buildslave
257 having a clock that is reasonably well syncronized with the server,
258 but it's better than nothing.
259 (SVN.parseGotRevision): implement it for SVN, which is accurate
260 (Darcs.parseGotRevision): same
261 (Arch.parseGotRevision): same
262 (Bazaar.parseGotRevision): same
263 (Mercurial.parseGotRevision): same
265 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
266 keep a record of all non-stdout/stderr/header/rc status updates,
267 for the benefit of RemoteCommands that send other useful things,
269 (Source.commandComplete): put any 'got_revision' status values
270 into a build property of the same name
273 * buildbot/process/step_twisted.py (Trial): update to deal with
274 new ShellCommand refactoring
276 * docs/buildbot.texinfo (Build Properties): document new feature
277 that allows BuildSteps to get/set Build-wide properties like which
278 revision was requested and/or checked out.
280 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
281 * buildbot/status/builder.py (BuildStatus.getProperty): implement
282 it. Note that this bumps the persistenceVersion of the saved Build
283 object, so add the necessary upgrade-old-version logic to include
284 an empty properties dict.
286 * buildbot/process/base.py (Build.setProperty): implement it
287 (Build.getProperty): same
288 (Build.startBuild): change build startup to set 'branch',
289 'revision', and 'slavename' properties at the right time
291 * buildbot/process/step.py (BuildStep.__init__): change setup to
292 require 'build' argument in a better way
293 (LoggingBuildStep): split ShellCommand into two pieces, for better
294 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
295 a single RemoteCommand that sends stdout/stderr status text. It
296 also provides the usual commandComplete / createSummary /
297 evaluateCommand / getText methods to be overridden...
298 (ShellCommand): .. whereas ShellCommand is specifically for
299 running RemoteShellCommands. Other shell-like BuildSteps (like
300 Source) can inherit from LoggingBuildStep instead of ShellCommand
301 (WithProperties): marker class to do build-property interpolation
302 (Source): inherit from LoggingBuildStep instead of ShellCommand
305 * buildbot/test/test_properties.py: test new functionality
307 2006-04-21 Brian Warner <warner@lothar.com>
309 * buildbot/test/test_vc.py: rename testBranch to
310 testCheckoutBranch to keep the tests in about the right
313 2006-04-18 Brian Warner <warner@lothar.com>
315 * docs/buildbot.texinfo (PBListener): improve cross-references
316 between PBListener and 'buildbot statusgui', thanks to John Pye
319 2006-04-17 Brian Warner <warner@lothar.com>
321 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
322 running under Twisted-1.3.0, otherwise skipped tests are reported
325 * all: use isinstance() instead of 'type(x) is foo', suggested by
328 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
329 oops, fix a brain-fade from the other week, when making the
330 addStep changes. I changed all the __init__ upcalls to use the
331 wrong superclass name.
332 (FullTwistedBuildFactory.__init__): same
333 (TwistedDebsBuildFactory.__init__): same
334 (TwistedReactorsBuildFactory.__init__): same
335 (TwistedBuild.isFileImportant): use .startswith for clarity,
336 thanks to Neal Norwitz for the suggestions.
338 * contrib/viewcvspoll.py: script to poll a viewcvs database for
339 changes, then deliver them over PB to a remote buildmaster.
341 * contrib/svnpoller.py: added script by John Pye to poll a remote
342 SVN repository (by running 'svn log') from a cronjob, and run
343 'buildbot sendchange' to deliver the changes to a remote
345 * contrib/svn_watcher.py: added script by Niklaus Giger (a
346 modification of svnpoller.py), same purpose, but this one loops
347 internally (rather than expecting to run from a cronjob) and works
349 * contrib/README.txt: same
351 2006-04-11 Brian Warner <warner@lothar.com>
353 * all: fix a number of incorrect names and missing imports, thanks
354 to Anthony Baxter for the patch.
355 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
356 remove unused buggy method.
357 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
358 comes from shutil, not "shutils"
359 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
360 (Arch.checkSlaveVersion): same
361 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
363 * buildbot/process/step_twisted2.py: add some missing imports
364 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
365 this code used to live in twisted.internet.defer
367 2006-04-10 Brian Warner <warner@lothar.com>
369 * buildbot/process/step.py (Mercurial): add Mercurial support
370 * buildbot/slave/commands.py (Mercurial): same
371 * buildbot/scripts/tryclient.py (MercurialExtractor): same
372 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
373 not yet tested, but 'try' support *is* covered
374 * docs/buildbot.texinfo (Mercurial): document it
376 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
377 some debugging messages (turned off)
378 * buildbot/test/test_vc.py: improve debug messages
380 2006-04-07 Brian Warner <warner@lothar.com>
382 * buildbot/test/test_vc.py (which): define our own which() in case
383 we can't import twisted.python.procutils, because procutils doesn't
386 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
387 of SlaveLocks for performance tests
389 * docs/examples/twisted_master.cfg: update to match current usage
391 * buildbot/changes/p4poller.py (P4Source): add new arguments:
392 password, p4 binary, pollinterval, maximum history to check.
393 Patch from an anonymous sf.net contributor, SF#1219384.
394 * buildbot/process/step.py (P4Sync.__init__): add username,
395 password, and client arguments.
396 * buildbot/slave/commands.py (P4Sync): same
398 2006-04-05 Brian Warner <warner@lothar.com>
400 * buildbot/process/factory.py (BuildFactory.addStep): new method
401 to add steps to a BuildFactory. Use it instead of f.steps.append,
402 and you can probably avoid using the s() convenience function.
403 Patch from Neal Norwitz, sf.net #1412605.
404 (other): update all factories to use addStep
405 * buildbot/process/process_twisted.py: update all factories to use
408 2006-04-03 Brian Warner <warner@lothar.com>
410 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
411 work under windows too. Adapted from a patch by Niklaus Giger,
412 addresses SF#1463399.
414 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
415 spawned commands emit parseable results in english and not some
416 other language. Patch from Niklaus Giger, SF#1463395.
418 * README (INSTALLATION): discourage users from running unit tests on
419 a "network drive", patch from Niklaus Giger, SF#1463394.
421 2006-03-22 Brian Warner <warner@lothar.com>
423 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
424 function to turn a repository-relative pathname into a (branch,
425 branch-relative-filename) tuple. Change this function to handle
426 the branch naming policy used by your Subversion repository.
427 Thanks to AllMyData.com for sponsoring this work.
429 2006-03-16 Brian Warner <warner@lothar.com>
431 * buildbot/scripts/sample.cfg: add python-mode declaration for
432 vim. Thanks to John Pye for the patch.
434 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
435 command line, mention the importance of running 'crontab' as the
436 buildmaster/buildslave user. Thanks to John Pye for the catch.
438 2006-03-13 Brian Warner <warner@lothar.com>
440 * buildbot/status/words.py (IRC): add an optional password=
441 argument, which will be sent to Nickserv in an IDENTIFY message at
442 login, to claim the nickname. freenode requires this before the
443 bot can sent (or reply to) private messages. Thanks to Clement
444 Stenac for the patch.
445 * docs/buildbot.texinfo (IRC Bot): document it
447 * buildbot/status/builder.py (LogFile.merge): don't write chunks
448 larger than chunkSize. Fixes SF#1349253.
449 * buildbot/test/test_status.py (Log.testLargeSummary): test it
450 (Log.testConsumer): update to match new internal chunking behavior
452 2006-03-12 Brian Warner <warner@lothar.com>
454 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
456 * buildbot/test/test_maildir.py (MaildirTest): rename the
457 'timeout' method, as it collides with trial's internals
459 * buildbot/scripts/runner.py: add 'buildbot restart' command
460 (stop): don't sys.exit() out of here, otherwise restart can't work
461 * docs/buildbot.texinfo (Shutdown): document it
463 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
464 * buildbot/status/html.py (Waterfall.__init__): same
465 * buildbot/process/builder.py (Builder.startBuild): same
466 * buildbot/process/base.py (BuildRequest): same
467 * buildbot/sourcestamp.py (SourceStamp): same
468 * buildbot/scheduler.py (Nightly): same
470 * buildbot/__init__.py (version): bump to 0.7.2+ while between
472 * docs/buildbot.texinfo: same
474 2006-02-17 Brian Warner <warner@lothar.com>
476 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
477 * docs/buildbot.texinfo: set version number to match
478 * NEWS: update for 0.7.2
480 2006-02-16 Brian Warner <warner@lothar.com>
482 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
484 2006-02-09 Brian Warner <warner@lothar.com>
486 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
487 add text to explain per-build branch parameters
488 * NEWS: mention --umask
490 2006-02-08 Brian Warner <warner@lothar.com>
492 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
494 (SlaveOptions.optParameters): add --umask, to make it possible to
495 make buildslave-generated files (including build products) be
498 * buildbot/slave/bot.py (BuildSlave.startService): same
500 2006-01-23 Brian Warner <warner@lothar.com>
502 * buildbot/status/builder.py: urllib.quote() all URLs that include
503 Builder names, so that builders can include characters like '/'
504 and ' ' without completely breaking the resulting HTML. Thanks to
505 Kevin Turner for the patch.
506 * buildbot/status/html.py: same
507 * buildbot/test/test_web.py (GetURL.testBuild): match changes
509 * NEWS: update in preparation for upcoming release
511 2006-01-18 Brian Warner <warner@lothar.com>
513 * docs/examples/twisted_master.cfg: update to match the Twisted
514 buildbot: remove python2.2, switch to exarkun's buildslaves,
515 disable the .deb builder until we figure out how to build twisted
516 .debs from SVN, add some ktrace debugging to the OS-X build
517 process and remove the qt build, remove threadless builders,
518 change freebsd builder to use landonf's buildslave.
520 2006-01-12 Brian Warner <warner@lothar.com>
522 * buildbot/master.py (Manhole.__init__): let port= be a strports
523 specification string, but handle a regular int for backwards
524 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
525 used in master.cfg to limit connections to just the local host.
526 (BuildMaster.loadConfig): same for c['slavePortnum']
527 * buildbot/scheduler.py (Try_Userpass.__init__): same
528 * buildbot/status/client.py (PBListener.__init__): same
529 * buildbot/status/html.py (Waterfall.__init__): same, for both
530 http_port and distrib_port. Include backwards-compatibility checks
531 so distrib_port can be a filename string and still mean unix:/foo
532 * docs/buildbot.texinfo (Setting the slaveport): document it
533 (Debug options): same
534 (HTML Waterfall): same
537 * buildbot/test/test_config.py (ConfigTest): test it
539 * buildbot/master.py (BuildMaster.loadConfig): wait for the
540 slaveport's disownServiceParent deferred to fire before opening
541 the new one. Fixes an annoying bug in the unit tests.
543 2006-01-03 Brian Warner <warner@lothar.com>
545 * buildbot/master.py (BuildMaster): remove the .schedulers
546 attribute, replacing it with an allSchedulers() method that looks
547 for all IService children that implement IScheduler. Having only
548 one parent/child relationship means fewer opportunities for bugs.
549 (BuildMaster.allSchedulers): new method
550 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
551 also fix ugly bug that caused any config-file reload to
552 half-forget about the earlier Schedulers, causing an exception
553 when a Change arrived and was handed to a half-connected
554 Scheduler. The exception was in scheduler.py line 54ish:
555 self.parent.submitBuildSet(bs)
556 exceptions.AttributeError: 'NoneType' object has no attribute
558 (BuildMaster.addChange): update to use allSchedulers()
560 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
561 to work properly with twisted-1.3.0, where you must explicitly
562 include the __implements__ from parent classes
563 (BaseScheduler.__repr__): make it easier to distinguish distinct
565 (BaseUpstreamScheduler.__implements__): same
567 * buildbot/status/builder.py (Status.getSchedulers): update to
569 * buildbot/test/test_run.py (Run.testMaster): same
570 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
571 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
572 make sure Scheduler instances are left alone when an identical
573 config file is reloaded
574 (ConfigElements.testSchedulers): make sure Schedulers are properly
577 * Makefile (TRIALARGS): my local default Twisted version is now
578 2.1.0, update the trial arguments accordingly
580 2005-12-22 Brian Warner <warner@lothar.com>
582 * docs/examples/twisted_master.cfg: merge changes from pyr: add
585 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
586 addChange in the parent class, although I suspect this should be
587 fixed better in the future.
589 2005-11-26 Brian Warner <warner@lothar.com>
591 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
592 explode when branch==None, thanks to Kevin Turner for the catch
593 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
596 * buildbot/__init__.py (version): bump to 0.7.1+ while between
598 * docs/buildbot.texinfo: same
600 2005-11-26 Brian Warner <warner@lothar.com>
602 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
603 * docs/buildbot.texinfo: set version number to match
605 2005-11-26 Brian Warner <warner@lothar.com>
607 * NEWS: update for 0.7.1
609 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
610 sure that unsubscribe works even if we never sent an ETA update.
611 Also, don't explode on duplicate unsubscribe.
612 (BuildStepStatus.addLog): make the convenience "return self"-added
613 watcher automatically unsubscribe when the Step finishes.
614 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
615 (BuildStatus.stepStarted): same auto-unsubscribe
616 (BuilderStatus.buildStarted): same auto-unsubscribe
618 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
620 (IStatusReceiver.stepStarted): same
621 (IStatusReceiver.logStarted): same
623 * buildbot/test/test_run.py (Status): move the Status test..
624 * buildbot/test/test_status.py (Subscription): .. to here
626 2005-11-25 Brian Warner <warner@lothar.com>
630 * buildbot/locks.py: fix the problem in which loading a master.cfg
631 file that changes some Builders (but not all of them) can result
632 in having multiple copies of the same Lock. Now, the real Locks
633 are kept in a table inside the BotMaster, and the Builders/Steps
634 use "LockIDs", which are still instances of MasterLock and
635 SlaveLock. The real Locks are instances of the new RealMasterLock
636 and RealSlaveLock classes.
637 * buildbot/master.py (BotMaster.getLockByID): new method to
638 convert LockIDs into real Locks.
639 * buildbot/process/base.py (Build.startBuild): convert LockIDs
640 into real Locks before building
641 * buildbot/process/step.py (BuildStep.startStep): same
642 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
643 exercises the problem
646 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
647 what Schedulers are available
649 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
650 work by Dobes Vandermeer and hacked mercilessly by me. This offers
651 'cron'-style build scheduling at certain times of day, week,
653 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
655 * buildbot/scheduler.py (Scheduler): change fileIsImportant
656 handling: treat self.fileIsImportant more as an attribute that
657 contains a callable than as a method. If the attribute is None,
658 don't call it and assume all filenames are important. It is still
659 possible to provide a fileIsImportant method in a subclass,
661 (AnyBranchScheduler): handle fileIsImportant=None, previously it
663 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
664 test using AnyBranchScheduler with fileIsImportant=None
666 2005-11-24 Brian Warner <warner@lothar.com>
668 * buildbot/test/test_config.py (StartService): don't claim a fixed
669 port number, instead set slavePort=0 on the first pass, figure out
670 what port was allocated, then switch to a config file that uses
673 * buildbot/master.py (BuildMaster.loadConfig): close the old
674 slaveport before opening the new one, because unit tests might
675 replace slavePort=0 with the same allocated portnumber, and if we
676 don't wait for the old port to close first, we get a "port already
677 in use" error. There is a tiny race condition here, but the only
678 threat is from other programs that bind (statically) to the same
679 port number we happened to be allocated, and only if those
680 programs use SO_REUSEADDR, and only if they get control in between
683 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
685 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
686 deleted ChangeSources before adding any new ones
687 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
688 compare_attrs, to make sure that a config-file reload does not
689 unnecessarily replace an unmodified ChangeSource instance
690 * buildbot/test/test_config.py (ConfigTest.testSources): update
692 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
693 mean "don't build anything", and add a warning if it gets used
694 because it isn't actually useful.
696 * contrib/svn_buildbot.py: update example usage to match the port
697 number that gets used by the PBChangeSource
698 * buildbot/scripts/sample.cfg: add example of PBChangeSource
700 2005-11-22 Brian Warner <warner@lothar.com>
702 * NEWS: start collecting items for next release
704 * buildbot/process/step.py (SVN.computeSourceRevision): assume
705 revisions are strings
706 (P4Sync.computeSourceRevision): same
708 * buildbot/status/html.py (StatusResourceBuild.body): add a link
709 to the Buildbot's overall status page
710 (StatusResourceBuilder.body): same
712 2005-11-15 Brian Warner <warner@lothar.com>
714 * buildbot/master.py (BuildMaster.loadConfig): serialize the
715 config-file loading, specifically to make sure old StatusTargets
716 are finished shutting down before new ones start up (thus
717 resolving a bug in which changing the Waterfall object would fail
718 because both new and old instances were claiming the same
719 listening port). Also load new Schedulers after all the new
720 Builders are set up, in case they fire off a new build right away.
721 * buildbot/test/test_config.py (StartService): test it
723 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
724 the branch name to the mail body
726 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
727 Without it, a config-file reload fails to update an existing
729 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
730 username/passwd to compare_attrs, for the same reason
731 * buildbot/status/html.py (Waterfall): add favicon to
732 compare_attrs, same reason
734 2005-11-05 Brian Warner <warner@lothar.com>
736 * buildbot/scripts/tryclient.py (createJobfile): stringify the
737 baserev before stuffing it in the jobfile. This resolves problems
738 under SVN (and probably Arch) where revisions are expressed as
739 numbers. I'm inclined to use string-based revisions everywhere in
740 the future, but this fix should be safe for now. Thanks to Steven
741 Walter for the patch.
743 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
744 binary mode when opening pickle files, to make windows work
745 better. Thanks to Dobes Vandermeer for the catch.
746 * buildbot/status/builder.py (BuildStatus.saveYourself): same
747 (BuilderStatus.getBuildByNumber): same
748 (Status.builderAdded): same
749 * buildbot/master.py (BuildMaster.loadChanges): same
751 * buildbot/util.py (Swappable): delete unused leftover code
753 * buildbot/process/step.py (SVN): when building on a non-default
754 branch, add the word "[branch]" to the VC step's description, so
755 it is obvious that we're not building the usual stuff. Likewise,
756 when we are building a specific revision, add the text "rNNN" to
757 indicate what that revision number is. Thanks to Brad Hards and
758 Nathaniel Smith for the suggestion.
759 (Darcs.startVC): same
761 (Bazaar.startVC): same
763 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
764 typo, caught by Mark Dillavou, closes SF#1216636.
766 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
767 about a test to add some day
769 * docs/examples/twisted_master.cfg: update: bot1 can now handle
770 the 'full-2.3' build, and the 'reactors' build is now run under
771 python-2.4 because the buildslave no longer has gtk/etc bindings
772 for earlier versions.
774 2005-11-03 Brian Warner <warner@lothar.com>
776 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
777 method, takes an IBuildStatus and rebuilds it. It might make more
778 sense to add this to IBuildControl instead, but that instance goes
779 away completely once the build has finished, and resubmitting
780 builds can take place weeks later.
781 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
782 * buildbot/status/html.py (StatusResourceBuild): also stash an
783 IBuilderControl so we can use resubmitBuild.
784 (StatusResourceBuild.body): render "resubmit" button if we can.
785 Also add hrefs for each BuildStep
786 (StatusResourceBuild.rebuild): add action for "resubmit" button
787 (StatusResourceBuilder.getChild): give it an IBuilderControl
789 * buildbot/status/builder.py (Status.getURLForThing): change the
790 URL for BuildSteps to have a "step-" prefix, so the magic URLs
791 that live as targets of buttons like "stop" and "rebuild" can't
793 * buildbot/status/builder.py (Status.getURLForThing): same
794 * buildbot/status/html.py (StatusResourceBuild.getChild): same
795 (StepBox.getBox): same
796 * buildbot/test/test_web.py (GetURL): same
799 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
800 exclusivity checks after Source.__init__ upcall, so misspelled
801 arguments will be reported more usefully
802 (Darcs.__init__): same
804 2005-10-29 Brian Warner <warner@lothar.com>
806 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
807 builder. Move the Try scheduler off to a separate port.
809 2005-10-27 Brian Warner <warner@lothar.com>
811 * buildbot/clients/gtkPanes.py
812 (TwoRowClient.remote_builderRemoved): disappearing Builders used
813 to cause the app to crash, now they don't.
815 * buildbot/clients/debug.py: display the buildmaster's location
816 in the window's title bar
818 2005-10-26 Brian Warner <warner@lothar.com>
820 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
821 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
822 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
824 * buildbot/status/html.py (td): put a single non-breaking space
825 inside otherwise empty <td> elements, as a workaround for buggy
826 browsers which would optimize them away (along with any associated
827 styles, like the kind that create the waterfall grid borders).
828 Patch from Frerich Raabe.
830 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
831 argv-list as an argument, defaulting to ["-to"], which is
832 appropriate for the Trial that comes with Twisted-2.1.0 and
833 earlier. The Trial in current Twisted SVN wants
834 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
835 defaults to an empty list.
836 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
837 match it, now that trialMode= is a list instead of a single string
839 * buildbot/__init__.py (version): bump to 0.7.0+ while between
841 * docs/buildbot.texinfo: same
843 2005-10-24 Brian Warner <warner@lothar.com>
845 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
846 * docs/buildbot.texinfo: set version number to match
848 2005-10-24 Brian Warner <warner@lothar.com>
850 * README: update for 0.7.0
852 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
854 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
855 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
856 send the branch= argument unless the user really provided one, to
857 retain compatibility with older buildmasters that don't accept
859 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
862 * docs/buildbot.texinfo: update lots of stuff
864 * buildbot/scripts/runner.py (sendchange): add a --branch argument
865 to the 'buildbot sendchange' command
866 * buildbot/clients/sendchange.py (Sender.send): same
867 * buildbot/changes/pb.py (ChangePerspective): same
868 * buildbot/test/test_changes.py (Sender.testSender): test it
870 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
871 'default_branch' argument names to 'baseURL' and 'defaultBranch',
872 for consistency with other BuildStep arguments that use camelCase.
873 Well, at least more of them use camelCase (like flunkOnWarnings)
874 than don't.. I wish I'd picked one style and stuck with it
875 earlier. Annoying, but it's best done before the release, since
876 these arguments didn't exist at all in 0.6.6 .
878 * buildbot/test/test_vc.py (SVN.testCheckout): same
879 (Darcs.testPatch): same
880 * docs/buildbot.texinfo (SVN): document the change
881 (Darcs): same, add some build-on-branch docs
882 * docs/examples/twisted_master.cfg: match change
884 * buildbot/process/step.py (BuildStep): rename
885 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
886 how it is normally used.
887 * buildbot/test/test_steps.py (Version.checkCompare): same
889 * buildbot/process/step.py (CVS.startVC): refuse to build
890 update/copy -style builds on a non-default branch with an old
891 buildslave (<=0.6.6) that doesn't know how to do it properly. The
892 concern is that it will do a VC 'update' in an existing tree when
893 it is supposed to be switching branches (and therefore clobbering
894 the tree to do a full checkout), thus building the wrong source.
895 This used to be a warning, but I think the confusion it is likely
896 to cause warrants making it an error.
897 (SVN.startVC): same, also make mode=export on old slaves an error
898 (Darcs.startVC): same
899 (Git.startVC): improve error message for non-Git-enabled slaves
900 (Arch.checkSlaveVersion): same. continue to emit a warning when a
901 specific revision is built on a slave that doesn't pay attention
902 to args['revision'], because for slowly-changing trees it will
903 probably do the right thing, and because we have no way to tell
904 whether we're asking it to build the most recent version or not.
905 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
907 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
908 that 'master' is in host:portnum format, to catch errors sooner
910 2005-10-23 Brian Warner <warner@lothar.com>
912 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
913 when creating the list of warning messages, include the line
914 immediately after each WARNING: line, since that's usually where
915 the file and line number wind up.
917 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
922 2005-10-22 Brian Warner <warner@lothar.com>
924 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
925 patch from Brad Hards
926 * buildbot/status/classic.css: same
927 * buildbot/test/test_web.py (Waterfall): match changes
929 * buildbot/test/test_steps.py (BuildStep.setUp): set
930 nextBuildNumber so the test passes
931 * buildbot/test/test_status.py (MyBuilder): same
933 * buildbot/status/html.py (StatusResourceBuild.body): revision
934 might be numeric, so stringify it before html-escapifying it
935 (CurrentBox.getBox): add a "waiting" state, and show a countdown
936 timer for the upcoming build
937 * buildbot/status/classic.css: add background-color attributes for
938 offline/waiting/building classes
940 * buildbot/status/builder.py (BuildStatus): derive from
941 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
942 the default (i.e. unknown) .slavename to "???" instead of None,
943 since even unknown slavenames need to be printed eventually.
944 (BuilderStatus): also derive from styles.Versioned . More
945 importantly, determine .nextBuildNumber at creation/unpickling
946 time by scanning the directory of saved BuildStatus instances and
947 choosing one larger than the highest-numbered one found. This
948 should fix the problem where random errors during upgrades cause
949 the buildbot to forget about earlier builds. .nextBuildNumber is
950 no longer stored in the pickle.
951 (Status.builderAdded): if we can't unpickle the BuilderStatus,
952 at least log the error. Also call Builder.determineNextBuildNumber
953 once the basedir is set.
955 * buildbot/master.py (BuildMaster.loadChanges): do
956 styles.doUpgrade afterwards, in case I decide to make Changes
957 derived from styles.Versioned some day and forget to make this
961 * buildbot/test/test_runner.py (Options.testForceOptions): skip
962 when running under older pythons (<2.3) in which the shlex module
963 doesn't have a 'split' function.
965 * buildbot/process/step.py (ShellCommand.start): make
966 errorMessages= be a list of strings to stuff in the log before the
967 command actually starts. This makes it easier to flag multiple
968 warning messages, e.g. when the Source steps have to deal with an
970 (CVS.startVC): handle slaves that don't handle multiple branches
971 by switching into 'clobber' mode
972 (SVN.startVC): same. Also reject branches without base_url
973 (Darcs.startVC): same. Also reject revision= in older slaves
974 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
975 (Bazaar.startVC): same, and test for baz separately than for arch
977 * buildbot/slave/commands.py (cvs_ver): document new features
979 * buildbot/process/step.py (BuildStep.slaveVersion): document it
980 (BuildStep.slaveVersionNewEnough): more useful utility method
981 * buildbot/test/test_steps.py (Version): start testing it
983 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
984 the 'force' command requires python2.3, for the shlex.split method
986 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
987 since we don't use it anymore. The Twisted buildbot uses a
990 2005-10-21 Brian Warner <warner@lothar.com>
992 * buildbot/process/process_twisted.py: rework all BuildFactory
993 classes to take a 'source' step as an argument, instead of
994 building up the SVN instance in the factory.
995 * docs/examples/twisted_master.cfg: enable build-on-branch by
996 providing a base_url and default_branch
998 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
999 control over --branch and --revision, not that they are always
1001 * buildbot/status/html.py (StatusResourceBuilder.force): same
1002 (StatusResourceBuild.body): display SourceStamp components
1004 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1005 IRC 'force' command, so it can be shared with an eventual
1006 command-line-tool 'buildbot force' mode.
1007 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1009 2005-10-20 Brian Warner <warner@lothar.com>
1011 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1013 * docs/examples/twisted_master.cfg: update to use Schedulers
1015 * buildbot/scripts/sample.cfg: update with Schedulers
1017 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1018 method specifically for use by HTML "force build" button and the
1019 IRC "force" command. Raises an immediate error if there are no
1021 (IBuilderControl.requestBuild): make this just submit a build, not
1022 try to check for existing slaves or set up any when-finished
1023 Deferreds or anything.
1024 * buildbot/process/builder.py (BuilderControl): same
1025 * buildbot/status/html.py (StatusResourceBuilder.force): same
1026 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1027 * buildbot/test/test_slaves.py: same
1028 * buildbot/test/test_web.py: same
1030 2005-10-19 Brian Warner <warner@lothar.com>
1032 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1033 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1035 2005-10-18 Brian Warner <warner@lothar.com>
1037 * buildbot/status/html.py: provide 'status' argument to most
1038 StatusResourceFOO objects
1039 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1040 and Logfiles" section to make the Build page into a more-or-less
1041 comprehensive source of status information about the build
1043 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1044 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1046 2005-10-17 Brian Warner <warner@lothar.com>
1048 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1049 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1050 out what to do about other projects: the correct options for
1051 recent Twisteds will not work for older ones.
1053 2005-10-15 Brian Warner <warner@lothar.com>
1055 * buildbot/status/builder.py (Status.getURLForThing): add method
1056 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1057 use this in email/IRC status clients to make them more useful, by
1058 providing the end user with hints on where to learn more about the
1059 object being reported on.
1060 * buildbot/test/test_web.py (GetURL): tests for it
1062 2005-10-14 Brian Warner <warner@lothar.com>
1064 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1065 fix bug resulting from deferredResult changes
1067 2005-10-13 Brian Warner <warner@lothar.com>
1069 * buildbot/test/test_changes.py: remove use of deferredResult
1070 * buildbot/test/test_config.py: same
1071 * buildbot/test/test_control.py: same
1072 * buildbot/test/test_status.py: same
1073 * buildbot/test/test_vc.py: this is the only remaining use, since
1074 it gets used at module level. This needs to be replaced by some
1075 sort of class-level run-once routine.
1077 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1079 * lots: implement multiple slaves per Builder, which means multiple
1080 current builds per Builder. Some highlights:
1081 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1082 of (state,currentBuilds) instead of (state,currentBuild)
1083 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1084 (IBuildStatus.getSlavename): new method, so you can tell which
1085 slave got used. This only gets set when the build completes.
1086 (IBuildRequestStatus.getBuilds): new method
1088 * buildbot/process/builder.py (SlaveBuilder): add a .state
1089 attribute to track things like ATTACHING and IDLE and BUILDING,
1091 (Builder): .. the .slaves attribute here, which has been turned
1092 into a simple list of available slaves. Added a separate
1093 attaching_slaves list to track ones that are not yet ready for
1095 (Builder.fireTestEvent): put off the test-event callback for a
1096 reactor turn, to make tests a bit more consistent.
1097 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1098 ping fails due to an exception. This needs work, I'm worried that
1099 a code error could lead to a constantly re-connecting slave.
1100 Especially since I'm trying to move to a distinct remote_ping
1101 method, separate from the remote_print that we currently use.
1102 (BuilderControl.requestBuild): return a convenience Deferred that
1103 provides an IBuildStatus when the build finishes.
1104 (BuilderControl.ping): ping all connected slaves, only return True
1105 if they all respond.
1107 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1108 reconnect when we shut down.
1110 * buildbot/status/builder.py: implement new methods, convert
1111 one-build-at-a-time methods to handle multiple builds
1112 * buildbot/status/*.py: do the same in all default status targets
1113 * buildbot/status/html.py: report the build's slavename in the
1114 per-Build page, report all buildslaves on the per-Builder page
1116 * buildbot/test/test_run.py: update/create tests
1117 * buildbot/test/test_slaves.py: same
1118 * buildbot/test/test_scheduler.py: remove stale test
1120 * docs/buildbot.texinfo: document the new builder-specification
1121 'slavenames' parameter
1123 2005-10-12 Brian Warner <warner@lothar.com>
1125 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1126 report failure correctly, causing Dependent builds to run when
1127 they shouldn't have.
1128 * buildbot/status/builder.py (BuildSetStatus): same
1129 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1130 (Set.testSuccess): test the both-pass case too
1131 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1132 fix this test: it was ending too early, masking the failure before
1133 (Logger): specialized StatusReceiver to make sure the dependent
1134 builds aren't even started, much less completed.
1136 2005-10-07 Brian Warner <warner@lothar.com>
1138 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1139 bot.SlaveBuilder being disowned in the middle of a build
1141 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1142 this inherit from StatusReceiver. Also upcall in __init__. This
1143 fixes the embarrasing crash when the new buildSetSubmitted method
1144 is invoked and Waterfall/etc don't implement their own.
1145 * buildbot/test/test_run.py: add a TODO note about a test to catch
1146 just this sort of thing.
1148 * buildbot/process/builder.py (Builder.attached): remove the
1149 already-attached warning, this situation is normal. Add some
1150 comments explaining it.
1152 2005-10-02 Brian Warner <warner@lothar.com>
1154 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1155 OverflowError when setting up dnotify, because some 64-bit systems
1156 have problems with signed-vs-unsigned constants and trip up on the
1157 DN_MULTISHOT flag. Patch from Brad Hards.
1159 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1161 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1162 progressMetrics, description, descriptionDone to the 'parms' list,
1163 and make use the 'parms' list from the implementation class
1164 instead of only BuildStep to initialize the parameters. This
1165 allows buildbot.process.factory.s() to initialize all the parms,
1166 not just those defined in directly by BuildStep.
1168 2005-09-03 Brian Warner <warner@lothar.com>
1170 * NEWS: start adding items for the next release
1172 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1173 python2.2 tests, change 'Quick' builder to only use python2.3
1175 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1177 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1178 the "Ping Builder" button if the build control is available; the
1179 user sees an exception otherwise
1181 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1183 2005-09-01 Brian Warner <warner@lothar.com>
1185 * buildbot/interfaces.py (IBuilderStatus.getState): update
1186 signature, point out that 'build' can be None
1187 (IBuildStatus.getETA): point out ETA can be none
1189 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1191 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1193 2005-08-31 Brian Warner <warner@lothar.com>
1195 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1196 update to match correct signature: removed 'eta' argument
1197 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1199 2005-08-30 Brian Warner <warner@lothar.com>
1201 * buildbot/status/builder.py (LogFile): remove the assertion that
1202 blows up when you try to overwrite an existing logfile, instead
1203 just emit a warning. This case gets hit when the buildmaster is
1204 killed and doesn't get a chance to write out the serialized
1205 BuilderStatus object, so the .nextBuildNumber attribute gets out
1208 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1209 the 'buildbot sendchange' arguments, for the Darcs context file
1210 * docs/buildbot.texinfo (sendchange): document it
1212 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1213 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1214 (IStatus.getSchedulers): new method
1215 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1216 (Status.getSchedulers): implement
1217 * buildbot/process/builder.py (Builder): maintain
1218 BuilderStatus.pendingBuilds
1219 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1220 (TryBase.addChange): Try schedulers should ignore Changes
1222 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1223 for 'try' on CVS/SVN
1224 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1226 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1227 report status properly.
1228 (Try.createJob): implement unique buildset IDs
1230 * buildbot/status/client.py (StatusClientPerspective): add a
1231 perspective_getBuildSets method for the benefit of jobdir-style
1233 * docs/buildbot.texinfo (try): more docs
1234 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1237 2005-08-18 Brian Warner <warner@lothar.com>
1239 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1240 actually work. It's functional but still kind of clunky. Also, it
1241 only works with the pb-style.. needs to be made to work with the
1244 * buildbot/status/client.py (RemoteBuildSet): new class
1245 (RemoteBuildRequest): same
1246 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1247 object, not the internal BuildStatus object.
1248 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1249 outside of the usual buildStarted() return value.
1250 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1252 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1253 (Try_Userpass_Perspective.perspective_try): return a remotely
1254 usable BuildSetStatus object
1256 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1257 isStarted()/waitUntilStarted()
1259 2005-08-16 Brian Warner <warner@lothar.com>
1261 * buildbot/status/builder.py: implement IBuildSetStatus and
1262 IBuildRequestStatus, wire them into place.
1263 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1264 methods into the BuildSetStatus object.
1265 * buildbot/interfaces.py: same
1266 (IStatus.getBuildSets): new method to get pending BuildSets
1267 (IStatusReceiver.buildsetSubmitted): new method which hears about
1269 * buildbot/master.py (BuildMaster.submitBuildSet): same
1270 * buildbot/process/base.py (BuildRequest): same, replace
1271 waitUntilStarted with subscribe/unsubscribe
1272 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1273 subscribe instead of waitUntilStarted
1274 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1276 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1278 * buildbot/test/test_buildreq.py: update for new code
1279 * buildbot/test/test_control.py (Force.testRequest): same
1282 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1283 for Darcs to not use the tempfile module, so it works under
1284 python-2.2 too. We really didn't need the full cleverness of that
1285 module, since the slave has exclusive control of its own builddir.
1287 2005-08-15 Brian Warner <warner@lothar.com>
1289 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1290 for CVS trees. It doesn't work for non-trunk branches,
1292 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1295 * Makefile: make it easier to test against python2.2
1297 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1298 tearDown2, so things like Arch can unregister archives as they're
1299 shutting down. The previous subclass-override-tearDown technique
1300 resulted in a nested maybeWait() and test failures under
1303 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1304 where we can (Arch), add a branch= argument to set the branch used
1306 (BazExtractor): extract the branch too
1307 (TlaExtractor): same
1308 * buildbot/scripts/runner.py (TryOptions): add --branch
1309 * docs/buildbot.texinfo (try): document --branch/try_branch
1311 * buildbot/slave/commands.py (Darcs): implement get-revision for
1312 Darcs, so that 'try' will work. This requires the tempfile module
1315 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1316 of revisions, branches, and 'try' in the process.
1318 2005-08-11 Brian Warner <warner@lothar.com>
1320 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1321 this, it got broken at some point in the last few releases
1322 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1323 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1324 specifically the removal of ETA information from the tuple
1326 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1329 * docs/buildbot.texinfo (try): document both --builder and
1330 'try_builders' in .buildbot/options
1331 * buildbot/scripts/runner.py (TryOptions): add --builder,
1332 accumulate the values into opts['builders']
1333 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1334 * buildbot/test/test_runner.py (Try): add some quick tests to make
1335 sure 'buildbot try --options' and .buildbot/options get parsed
1336 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1337 use --builder control
1339 * docs/buildbot.texinfo (try): add --port argument to PB style
1341 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1342 actual SourceStamp. Still need to extract a branch name, somehow.
1343 (Try): finish implementing the try client side, still need a UI
1344 for specifying which builders to use
1345 (Try.getopt): factor our options/config-file reading
1346 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1348 * buildbot/test/test_vc.py: match SourceStampExtractor change
1350 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1351 causes the twisted log to be sent to stderr
1353 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1355 2005-08-10 Brian Warner <warner@lothar.com>
1357 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1358 style is 90% done, still missing status reporting or waiting for
1359 the buildsets to finish, and it is completely untested.
1361 * buildbot/trybuild.py: delete file, move contents to ..
1362 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1363 * buildbot/test/test_vc.py: match the move
1365 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1366 of the TryScheduler, no buildsetID or status-tracking support yet
1367 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1369 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1370 possible to set the basedir after __init__ time, so it is easier
1371 to use as a Service-child of the BuildMaster instance
1373 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1374 that delivers messages to its Service parent instead of requiring
1375 a subclass to be useful. This turns out to be much easier to build
1378 * buildbot/scripts/tryclient.py (createJob): utility code to
1379 create jobfiles, will eventually be used by 'buildbot try'
1381 2005-08-08 Brian Warner <warner@lothar.com>
1383 * docs/buildbot.texinfo (try): add docs on the
1384 as-yet-unimplemented Try scheduler
1386 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1387 * buildbot/test/test_scheduler.py: .. here
1388 (Scheduling.testTryJobdir): add placeholder test for 'try'
1390 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1391 addEntry merging (>=chunkSize) behavior
1392 (Log.testConsumer): update to handle new callLater(0) behavior
1394 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1395 both the MAX_LENGTH bugfix and the resumeProducing hang.
1397 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1398 put off the actual resumeProducing for a moment with
1399 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1400 causes large logfiles to hang midway through.
1402 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1403 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1404 and to improve memory usage when streaming the file out to a web
1406 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1407 make this work cleanly
1409 2005-08-03 Brian Warner <warner@lothar.com>
1411 * buildbot/trybuild.py: new file for 'try' utilities
1412 (getSourceStamp): run in a tree, find out the baserev+patch
1413 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1414 implemented for SVN and Darcs, still working on Arch. I don't know
1415 how to make CVS work yet.
1417 * docs/buildbot.texinfo: document the 'buildbot' command-line
1418 tool, including the not-yet-implemented 'try' feature, and the
1419 in-flux .buildbot/ options directory.
1421 2005-07-20 Brian Warner <warner@lothar.com>
1423 * buildbot/locks.py: added temporary id() numbers to Lock
1424 descriptions, to track down a not-really-sharing-the-Lock bug
1426 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1428 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1429 needed for python2.2 compatibility
1430 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1431 are from the __future__
1433 2005-07-19 Brian Warner <warner@lothar.com>
1435 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1436 message when schedulers use unknown builders
1438 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1439 SlaveLock('name') and MasterLock('name') are distinct
1441 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1442 c['schedulers'] in such a way that we can actually accept
1444 * buildbot/test/test_config.py: check it
1446 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1447 utility method to *all* the Schedulers
1448 (Periodic.listBuilderNames): same
1450 * docs/buildbot.texinfo (Interlocks): update chapter to match
1453 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1454 to make sure that c['sources'], c['schedulers'], and c['status']
1455 are all lists of the appropriate objects, and that the Schedulers
1456 all point to real Builders
1457 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1458 'listBuilderNames' utility method to support this
1459 * buildbot/scheduler.py: implement the utility method
1460 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1462 * docs/buildbot.texinfo: add some @cindex entries
1464 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1465 if it wasn't already set: most tla commands will fail unless one
1467 (Arch.createRepository): and disable bazaar's revision cache, since
1468 they cause test failures (the multiple repositories we create all
1469 interfere with each other through the cache)
1471 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1472 bring it properly up to date with twisted-2.0 test guidelines
1474 * buildbot/master.py (BuildMaster): remove references to old
1475 'interlock' module, this caused a bunch of post-merge test
1477 * buildbot/test/test_config.py: same
1478 * buildbot/process/base.py (Build): same
1480 * buildbot/test/test_slaves.py: stubs for new test case
1482 * buildbot/scheduler.py: add test-case-name tag
1483 * buildbot/test/test_buildreq.py: same
1485 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1486 unnecessary init code
1487 (Bot.remote_setBuilderList): match it
1489 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1491 * buildbot/changes/mail.py (parseSyncmail): update comment
1493 * buildbot/test/test_slavecommand.py: disable Shell tests on
1494 platforms that don't suport IReactorProcess
1496 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1497 all places where we open logfiles. It causes OS-X to open the file
1498 in some weird mode that that prevents us from mixing reads and
1499 writes to the same filehandle, which we depend upon to implement
1500 _generateChunks properly. This change doesn't appear to break
1501 win32, on which "b" and "t" are treated differently but a missing
1502 flag seems to be interpreted as "t".
1504 2005-07-18 Brian Warner <warner@lothar.com>
1506 * buildbot/slave/commands.py (ShellCommand): overhaul
1507 error-handling code, to try and make timeout/interrupt work
1508 properly, and make win32 happier
1509 * buildbot/test/test_slavecommand.py: clean up, stop using
1510 reactor.iterate, add tests for timeout and interrupt
1511 * buildbot/test/sleep.py: utility for a new timeout test
1513 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1514 code from the local-usebranches branch
1516 2005-07-17 Brian Warner <warner@lothar.com>
1518 * buildbot/process/process_twisted.py
1519 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1520 minutes, to match the other twisted BuildFactories, and don't
1521 excuse failures in c/qt/win32 reactors any more.
1523 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1524 'freebsd' builders, since the buildslaves have been unavailable
1527 2005-07-13 Brian Warner <warner@lothar.com>
1529 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1530 build-on-branch feature
1532 * buildbot/process/step.py (Darcs.__init__): add base_url and
1533 default_branch arguments, just like SVN
1534 (Arch.__init__): note that the version= argument is really the
1537 * buildbot/slave/commands.py (SourceBase): keep track of the
1538 repository+branch that was used for the last checkout in
1539 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1540 match, we clobber the directory and perform a fresh checkout
1541 rather than trying to do an in-place update. This should protect
1542 us against trying to get to branch B by doing an update in a tree
1543 obtained from branch A.
1544 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1545 (SVN.setup): same, just the svnurl
1546 (Darcs.setup): same, just the repourl
1547 (Arch.setup): same, arch coordinates (url), version, and
1548 buildconfig. Also pull the buildconfig from the args dictionary,
1549 which we weren't doing before, so the build-config was effectively
1551 (Arch.sourcedirIsUpdateable): don't try to update when we're
1552 moving to a specific revision: arch can't go backwards, so it is
1553 safer to just clobber the tree and checkout a new one at the
1555 (Bazaar.setup): same sourcedata as Arch
1557 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1558 use maybeWait, to work with twisted-1.3.0 and twcompat
1559 (Dependencies.testRun_Pass): same
1561 * buildbot/test/test_vc.py: rearrange, cleanup
1563 * buildbot/twcompat.py: add defer.waitForDeferred and
1564 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1565 can work under twisted-1.3.0 .
1567 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1568 now created at setUp time. This increases the runtime of the test
1569 suite considerably (from 91 seconds to 151), but it removes the
1570 need for an offline tarball, which should solve a problem I've
1571 seen where the test host has a different version of svn than the
1572 tarball build host. The new code also validates that mode=update
1573 really picks up recent commits. This approach will also make it
1574 easier to test out branches, because the code which creates the VC
1575 branches is next to the code which uses them. It will also make it
1576 possible to test some change-notification hooks, by actually
1577 performing a VC commit and watching to see the ChangeSource get
1580 2005-07-12 Brian Warner <warner@lothar.com>
1582 * docs/buildbot.texinfo (SVN): add branches example
1583 * docs/Makefile (buildbot.ps): add target for postscript manual
1585 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1586 * buildbot/test/test_locks.py: same
1588 * buildbot/process/step.py (Darcs): comment about default branches
1590 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1591 c['interlocks'] in the config file, complain if it is present.
1592 Scan all locks in c['builders'] to make sure the Locks they use
1594 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1595 add some tests to check for non-uniquely-named Locks
1596 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1597 since the unique-Lock validation code requires it now
1599 * buildbot/locks.py: fix test-case-name
1601 * buildbot/interlock.py: remove old file
1603 2005-07-11 Brian Warner <warner@lothar.com>
1605 * buildbot/test/test_interlock.py: rename to..
1606 * buildbot/test/test_locks.py: .. something shorter
1608 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1609 versions (after 2.0.1) changed internet.TCPClient to shut down the
1610 connection in stopService. Change the code to handle this
1613 * buildbot/process/base.py (Build): handle whole-Build locks
1614 * buildbot/process/builder.py (Builder.compareToSetup): same
1615 * buildbot/test/test_interlock.py: make tests work
1617 * buildbot/process/step.py (BuildStep.startStep): complain if a
1618 Step tries to claim a lock that's owned by its own Build
1619 (BuildStep.releaseLocks): typo
1621 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1622 file reloads don't replace unchanged Builders
1624 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1625 rewrite to cover new Locks instead of old c['interlocks']
1626 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1630 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1631 start the master and connect the buildslave
1633 * buildbot/process/step.py (FailingDummy.done): finish with a
1634 FAILURE status rather than raising an exception
1636 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1637 stringify a BuildRequest.reason that is None
1639 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1641 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1642 allow scheduler.Dependent to work
1643 * buildbot/buildset.py (BuildSet): set .reason and .results
1645 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1646 slaves, to make the test stop hanging. It still fails, of course,
1647 because I haven't even started to implement Locks.
1649 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1651 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1652 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1653 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1654 (Dependent): new class for downstream build dependencies
1655 * buildbot/test/test_dependencies.py: tests (still failing)
1657 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1659 2005-07-07 Brian Warner <warner@lothar.com>
1661 * buildbot/test/runutils.py (RunMixin): factored this class out..
1662 * buildbot/test/test_run.py: .. from here
1663 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1664 added new buildbot.locks tests (which all hang right now)
1665 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1666 * buildbot/process/step.py: claim/release per-BuildStep locks
1668 * docs/Makefile: add 'buildbot.html' target
1670 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1671 interpreted as "HEAD", so that all VC steps can accept branch=None
1672 and have it mean the "default branch".
1674 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1676 2005-07-07 Brian Warner <warner@lothar.com>
1678 * docs/examples/twisted_master.cfg: update to match current usage
1680 * docs/buildbot.texinfo (System Architecture): comment out the
1681 image, it doesn't exist yet and just screws up the HTML manual.
1683 2005-07-05 Brian Warner <warner@lothar.com>
1685 * debian/.cvsignore: oops, missed one. Removing leftover file.
1687 2005-06-17 Brian Warner <warner@lothar.com>
1689 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1690 changed its output in 1.2.0, don't mistakenly think that the
1691 subversion we find isn't capable of supporting our tests.
1693 * debian/*: remove the debian/ directory and its contents, to make
1694 life easier for the proper Debian maintainer
1696 * Makefile (release): same
1698 2005-06-07 Brian Warner <warner@lothar.com>
1700 * everything: create a distinct SourceStamp class to replace the
1701 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1702 Changed the signature of Source.startVC to include the revision
1703 information (instead of passing it through self.args). Implement
1704 branches for SVN (now only Darcs/Git is missing support). Add more
1707 2005-06-06 Brian Warner <warner@lothar.com>
1709 * everything: rearrange build scheduling. Create a new Scheduler
1710 object (configured in c['schedulers'], which submit BuildSets to a
1711 set of Builders. Builders can now use multiple slaves. Builds can
1712 be run on alternate branches, either requested manually or driven
1713 by changes. This changed some of the Status classes. Interlocks
1714 are out of service until they've been properly split into Locks
1715 and Dependencies. treeStableTimer, isFileImportant, and
1716 periodicBuild have all been moved from the Builder to the
1718 (BuilderStatus.currentBigState): removed the 'waiting' and
1719 'interlocked' states, removed the 'ETA' argument.
1721 2005-05-24 Brian Warner <warner@lothar.com>
1723 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1724 erroneously abandons the connection (in clientConnectionFailed)
1725 for non-UserErrors, which means that if we lose the connection due
1726 to a network problem or a timeout, we'll never try to reconnect.
1727 Fix this by not upcalling to the buggy parent method. Note:
1728 twisted-2.0 fixes this, but the function only has 3 lines so it
1729 makes more sense to copy it than to try and detect the buggyness
1730 of the parent class. Fixes SF#1207588.
1732 * buildbot/changes/changes.py (Change.branch): doh! Add a
1733 class-level attribute to accomodate old Change instances that were
1734 pickled before 0.6.5 (where .branch was added for new Changes).
1735 This fixes the exception that occurs when you try to look at an
1736 old Change (through asHTML).
1738 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1741 2005-05-23 Brian Warner <warner@lothar.com>
1743 * buildbot/__init__.py (version): release 0.6.6
1745 2005-05-23 Brian Warner <warner@lothar.com>
1747 * NEWS: update for 0.6.6 release
1748 * debian/changelog: same
1750 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1751 before starting: this was done by twistd back when we spawned it,
1752 now that we're importing the pieces and running them in the
1753 current process, we have to do it ourselves. This allows
1754 master.cfg to import files from the same directory without
1755 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1756 Stichele for the catch.
1757 (Options.opt_version): Add a --version command (actually, just make
1758 the existing --version command emit Buildbot's version too)
1760 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1761 fix to make this behave like other LogFiles, this time to handle
1762 existing LogFiles on disk. (add the missing .upgrade method)
1763 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1765 2005-05-21 Brian Warner <warner@lothar.com>
1767 * buildbot/test/test_runner.py (Create.testMaster): match the
1768 rawstring change in runner.py:masterTAC
1770 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1771 TwistedWords is installed
1772 * buildbot/test/test_status.py: same, with TwistedMail
1774 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1775 some old, deprecated, and removed config keys). This should enable
1776 you to use the base buildbot functionality with Twisted-2.0.0 when
1777 you don't also have TwistedWeb and TwistedWords installed
1779 2005-05-20 Brian Warner <warner@lothar.com>
1781 * buildbot/scripts/runner.py (run): call sendchange(), not
1782 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1783 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1784 (stop): don't wait for process to die when sending SIGHUP
1785 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1786 directory name gets interpreted, which you don't want
1789 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1792 2005-05-18 Brian Warner <warner@lothar.com>
1794 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1796 2005-05-18 Brian Warner <warner@lothar.com>
1798 * README: update for 0.6.5
1799 * debian/changelog: same
1801 * buildbot/changes/changes.py: rename tag= to branch=, since
1802 that's how we're using it, and my design for the upcoming "build a
1803 specific branch" feature wants it. also, tag= was too CVS-centric
1804 * buildbot/changes/mail.py (parseSyncmail): same
1805 * buildbot/process/base.py (Build.isBranchImportant): same
1806 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1807 * docs/buildbot.texinfo (Attributes of Changes): same
1809 * NEWS: update tag=, update for upcoming release
1811 2005-05-17 Brian Warner <warner@lothar.com>
1813 * buildbot/scripts/runner.py (stop): actually poll once per
1814 second, instead of re-killing the poor daemon once per second.
1815 Sleep briefly (0.1s) before the first poll, since there's a good
1816 chance we can avoid waiting the full second if the daemon shuts
1817 down quickly. Also remove the sys.exit() at the end.
1818 (start): remove the unneighborly sys.exit()
1820 * Makefile: improve permission-setting to not kick Arch so badly
1822 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1823 default --keepalive=600, since it doesn't hurt very much, and it's
1824 a hassle to discover that you need it.
1825 * buildbot/test/test_runner.py (Create.testSlave): test it
1827 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1828 IRC bot about EXCEPTION
1830 * buildbot/status/client.py (PBListener): upcall more correctly
1832 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1833 an exception mark the overall build with EXCEPTION, not SUCCESS
1835 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1837 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1838 * Makefile: update some release-related stuff
1840 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1841 gets called when there isn't actually an active process, just end
1842 the Command instead of blowing up. I don't know how it gets into
1843 this state, but the twisted win32 buildslave will sometimes hang,
1844 and when it shakes its head and comes back, it thinks it's still
1845 running a Command. The next build causes this command to be
1846 interrupted, but the lack of self.process.pid breaks the interrupt
1849 * NEWS: document changes since the last release
1851 * buildbot/scripts/runner.py (start): change 'buildbot start' to
1852 look for Makefile.buildbot instead of a bare Makefile . The
1853 'buildbot start' does not install this file, so you have to
1854 manually copy it if you want to customize startup behavior.
1855 (createMaster): change 'buildbot master' command to create
1856 Makefile.sample instead of Makefile, to create master.cfg.sample
1857 instead of master.cfg (requiring you to copy it before the
1858 buildmaster can be started). Both sample files are kept up to
1859 date, i.e. they are overwritten if they have been changed. The
1860 'buildbot.tac' file is *not* overwritten, but if the new contents
1861 don't match the old, a 'buildbot.tac.new' file is created and the
1862 user is warned. This seems to be a much more sane way to handle
1863 startup files. Also, don't sys.exit(0) when done, so we can run
1864 unit tests against it.
1865 (createSlave): same. Don't overwrite the sample info/ files.
1866 * buildbot/scripts/sample.mk: remove. the contents were pulled
1867 into runner.py, since they need to match the behavior of start()
1871 * docs/buildbot.texinfo (Launching the daemons): document it
1872 * buildbot/test/test_runner.py (Create): test it
1874 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1875 version that can handle string-in-string tests, because otherwise
1876 python-2.2 fails the tests. It'd be tremendous if Trial's test
1877 took two strings under 2.2 too.
1879 * everything: fixed all deprecation warnings when running against
1880 Twisted-2.0 . (at least all the ones in buildbot code, there are a
1881 few that come from Twisted itself). This involved putting most of
1882 the Twisted-version specific code in the new buildbot.twcompat
1883 module, and creating some abstract base classes in
1884 buildbot.changes.base and buildbot.status.base (which might be
1885 useful anyway). __implements__ is a nuisance and requires an ugly
1886 'if' clause everywhere.
1888 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1889 delay before finishing the test: it seems that smtp.sendmail
1890 doesn't hang up on the server, so we must wait a moment so it can
1891 hang up on us. This removes the trial warning about an unclean
1894 2005-05-16 Brian Warner <warner@lothar.com>
1896 * buildbot/process/step.py (Source): add 'retry' argument. It is a
1897 tuple of (delay, repeats).
1898 * buildbot/test/test_vc.py (Retry): test it
1899 * docs/buildbot.texinfo (Source Checkout): document it
1900 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1901 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1902 doVCFull() are handled by re-trying the checkout (after a delay)
1903 some number of times.
1904 (ShellCommand._startCommand): make header lines easier to read
1906 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1908 (WebTest.test_logfile): make sure master gets shut down, silences
1909 some "unclean reactor" test errors
1911 * buildbot/test/test_changes.py (Sender.tearDown): spin the
1912 reactor once after shutdown, something in certain versions of
1913 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1914 fails, svn-trunk is ok.
1916 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
1917 second win32 error message
1919 * buildbot/test/test_run.py (Status.testSlave): be smarter about
1920 validating the ETA, so the tests don't fail on slow systems
1922 2005-05-15 Brian Warner <warner@lothar.com>
1924 * buildbot/status/builder.py (HTMLLogFile): make this behave like
1925 the new LogFile class, so upgrading works properly
1926 (LogFileProducer.resumeProducing): survive resumeProducing after
1927 we've exhausted the chunkGenerator
1929 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
1931 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
1932 (Log.testUpgrade): same
1934 * docs/buildbot.texinfo (Maintenance): describe how to delete old
1935 Builds and logs with a cron job.
1937 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
1938 of the old non-offline LogFile, added code to upgrade these to
1939 new-style contents-live-on-disk instances at load time (in a way
1940 that doesn't invalidate the old Build pickles, so upgrading to
1941 0.6.5 is not a one-way operation). Got rid of everything related
1943 (LogFile.__init__): create LogFiles with the parent step status,
1944 the log's name, and a builder-relative filename where it can keep
1945 the contents on disk.
1946 (LogFile.hasContents): new method, clients are advised to call it
1947 before getText or getChunks and friends. If it returns False, the
1948 log's contents have been deleted and getText() will raise an
1950 (LogFile.getChunks): made it a generator
1951 (LogFile.subscribeConsumer): new method, takes a Twisted-style
1952 Consumer (except one that takes chunks instead of strings). This
1953 enables streaming of very large logfiles without storing the whole
1955 (BuildStatus.generateLogfileName): create names like
1956 12-log-compile-output, with a _0 suffix if required to be unique
1957 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
1958 or earlier) logfiles into new-style ones
1959 (BuilderStatus): remove everything related to 'stub' builds. There
1960 is now only one build cache, and we don't strip logs from old
1962 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
1963 since we no longer fight to keep it in the cache
1965 * buildbot/status/html.py (TextLog.render_GET): use a
1966 ChunkConsumer to stream the log entries efficiently.
1967 (ChunkConsumer): wrapper which consumes chunks and writes
1970 * buildbot/test/test_twisted.py (Parse.testParse): use a
1971 LogFile-like object instead of a real one
1973 * buildbot/test/test_status.py (MyLog): handle new LogFile code
1974 (Log.testMerge3): validate more merge behavior
1975 (Log.testChunks): validate LogFile.getChunks
1976 (Log.testUpgrade): validate old-style LogFile upgrading
1977 (Log.testSubscribe): validate LogFile.subscribe
1978 (Log.testConsumer): validate LogFile.subscribeConsumer
1980 * buildbot/interfaces.py (IStatusLogStub): remove
1981 (IStatusLog.subscribeConsumer): new method
1982 (IStatusLog.hasContents): new method
1983 (IStatusLogConsumer): describes things passed to subscribeConsumer
1985 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
1986 the log contents if it does not have any contents.
1987 (StatusResourceBuildStep.body): same
1988 (StatusResourceBuildStep.getChild): give a 404 for empty logs
1990 2005-05-14 Brian Warner <warner@lothar.com>
1992 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
1993 timeouts to try and make the windows metabuildslave not hang
1995 2005-05-13 Mike Taylor <bear@code-bear.com>
1997 * buildbot/slave/commands.py (rmdirRecursive): added a check
1998 to ensure the path passed into rmdirRecursive actually exists.
1999 On win32 a non-existant path would generate an exception.
2001 2005-05-13 Brian Warner <warner@lothar.com>
2003 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2004 shutil.rmtree which behaves correctly on windows in the face of
2005 files that you have to chmod before deleting. Thanks to Bear at
2006 the OSAF for the routine.
2007 (SourceBase.doClobber): use rmdirRecursive
2009 2005-05-12 Brian Warner <warner@lothar.com>
2011 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2012 method generate chunks instead of returning a big list. This
2013 allows the same method to be used for both old LogFile and new
2015 (OfflineLogFile.getText): use the generator
2016 (OfflineLogFile.subscribe): same
2017 * buildbot/status/html.py (TextLog.resumeProducing): same
2018 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2020 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2021 point out that OfflineLogFile does not currently work with
2022 html.Waterfall . Fixing this is high-priority.
2024 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2025 apparently windows defaults to using stdout
2027 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2028 better message on failure so I can figure out the win32 problem
2030 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2031 log messages to include more useful copies of the command being
2032 run, the argv array, and the child command's environment.
2033 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2035 2005-05-11 Brian Warner <warner@lothar.com>
2037 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2039 * Makefile: update the deb-snapshot version
2041 * docs/buildbot.texinfo: move all .xhtml docs into a new
2042 .texinfo-format document, adding a lot of material in the process.
2043 This is starting to look like a real user's manual. Removed all
2044 the Lore-related files: *.xhtml, *.css, template.tpl .
2045 * docs/Makefile: simple makefile to run 'makeinfo'
2046 * buildbot/scripts/sample.cfg: rearrange slightly
2047 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2049 2005-05-10 Brian Warner <warner@lothar.com>
2051 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2052 different name for the internal twistw module, handle it.
2054 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2055 * setup.py: .. and stop trying to install it
2057 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2058 'git'), the new linux kernel VC system (http://kernel.org/git/).
2059 Thanks to Brandon Philips for the patch.
2060 * buildbot/slave/commands.py (Git): same
2062 2005-05-06 Brian Warner <warner@lothar.com>
2064 * buildbot/status/builder.py (OfflineLogFile): replace the default
2065 LogFile with a form that appends its new contents to a disk file
2066 as they arrive. The complete log data is never kept in RAM. This
2067 is the first step towards handling very large (100MB+) logfiles
2068 without choking quite so badly. (The other half is
2069 producer/consumer on the HTML pages).
2070 (BuildStepStatus.addLog): use OfflineLogFile by default
2071 (BuildStatus.getLogfileName): helper code to give the
2072 OfflineLogFile a filename to work with
2074 * buildbot/test/test_status.py (Results.testAddResults): update
2075 tests to handle new asserts
2076 * buildbot/test/test_vc.py (Patch.doPatch): same
2077 * buildbot/test/test_steps.py (BuildStep.setUp): same
2079 2005-05-05 Brian Warner <warner@lothar.com>
2081 * buildbot/scripts/runner.py (start): if there is no Makefile,
2082 launch the app by importing twistd's internals and calling run(),
2083 rather than spawning a new twistd process. This stands a much
2084 better chance of working under windows.
2085 (stop): kill the process with os.kill instead of spawning
2086 /bin/kill, again to reduce the number of external programs which
2087 windows might not have in the PATH. Also wait up to 5 seconds for
2088 the process to go away, allowing things like 'buildbot stop;
2089 buildbot start' to be reliable in the face of slow shutdowns.
2091 * buildbot/master.py (Dispatcher.__getstate__): remove old
2092 .tap-related methods
2093 (BuildMaster.__getstate__): same
2095 * buildbot/slave/bot.py (makeService): same
2096 (Options.longdesc): same
2097 * buildbot/scripts/runner.py: copy over some old mktap option text
2099 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2100 'buildbot master' now creates a buildbot.tac file, so there is no
2101 longer a create-instance/save/reload sequence. mktap is dead, long
2103 * buildbot/scripts/sample.mk: use twistd -y, not -f
2104 * buildbot/test/test_config.py: remove mktap-based test
2105 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2106 * README: don't reference mktap
2108 * docs/source.xhtml: document some of the attributes that Changes
2111 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2113 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2114 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2115 * buildbot/changes/changes.py (Change)
2116 * buildbot/changes/mail.py (parseSyncmail)
2117 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2119 * buildbot/process/base.py (Build.isTagImportant)
2123 2005-05-04 Brian Warner <warner@lothar.com>
2125 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2126 connection after sending the change, so that unit tests don't
2127 complain about sockets being left around
2129 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2130 exception in phase=0 rendering
2131 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2133 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2135 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2136 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2137 and configuring builders with tuples.
2138 * buildbot/test/test_config.py: stop testing compatibility with
2139 deprecated config keys
2140 * buildbot/test/test_run.py: same
2142 2005-05-03 Brian Warner <warner@lothar.com>
2144 * contrib/arch_buildbot.py: survive if there are no logfiles
2145 (username): just use a string, os.getlogin isn't reliable
2147 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2148 so 'buildbot sendchange' actually works. The earlier test only
2149 covered the internal (non-reactor-running) form.
2151 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2152 script to notify the buildmaster about changes
2154 * buildbot/scripts/runner.py (sendchange): new command to send a
2155 change to a buildbot.changes.pb.PBChangeSource receiver.
2156 * buildbot/test/test_changes.py (Sender): test it
2158 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2159 after any reading of the config file, not just when we do it in
2160 startService. This makes some tests a bit cleaner.
2162 * buildbot/changes/pb.py: add some log messages
2164 * buildbot/process/base.py (Build.startBuild): fix a bug that
2165 caused an exception when the build terminated in the very first
2167 (Build.stepDone): let steps return a status of EXCEPTION. This
2168 terminates the build right away, and sets the build's overall
2169 status to EXCEPTION too.
2170 * buildbot/process/step.py (BuildStep.failed): return a status of
2171 EXCEPTION when that is what has happened.
2173 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2174 implement this, allowing Arch-based projects to get precise
2175 checkouts instead of always using the latest code
2176 (Bazaar): create variant of Arch to let folks use baz instead of
2177 tla. Requires a new buildslave too.
2178 * buildbot/slave/commands.py (Arch): add 'revision' argument
2179 (Bazaar): create variant of Arch that uses baz instead of tla.
2180 Remove the code that extracts the archive name from the
2181 register-archive output, since baz doesn't provide it, and require
2182 the user provide both the archive name and its location.
2183 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2185 2005-05-02 Brian Warner <warner@lothar.com>
2187 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2188 thanks to Nick Trout.
2190 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2191 deals better with source Makefile coming from a read-only CVS
2192 checkout. Thanks to Nick Trout for the catch.
2194 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2197 2005-04-28 Brian Warner <warner@lothar.com>
2199 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2201 * debian/changelog: update for 0.6.4
2203 2005-04-28 Brian Warner <warner@lothar.com>
2205 * README.w32: add a checklist of steps for getting buildbot
2207 * MANIFEST.in: include it in the tarball
2211 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2212 broken .tap files from 0.6.3 by getting rid of .services,
2213 .namedServices, and .change_svc at load time.
2215 2005-04-27 Brian Warner <warner@lothar.com>
2217 * NEWS: update in preparation for new release
2219 * buildbot/test/test_config.py (Save.testSave): don't pull in
2220 twisted.scripts.twistd, we don't need it and it isn't for windows
2223 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2224 accomodate win32 which can't do atomic-rename
2226 2005-04-27 Brian Warner <warner@lothar.com>
2228 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2229 timeouts to help the slow metabuildbot not flunk them so much
2230 (Disconnect.testBuild3): same
2231 (Disconnect.testBuild4): same
2232 (Disconnect.testInterrupt): same
2234 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2235 setup, it was completely broken for new buildmasters (those which
2236 did not have a 'change.pck' already saved. Thanks to Paul Warren
2237 for catching this (embarrassing!) bug.
2238 (Dispatcher.__getstate__): don't save our registered avatar
2239 factories, since they'll be re-populated when the config file is
2241 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2242 tests (since the real mktap-generated BuildMaster doesn't save
2244 (BuildMaster.__getstate__): don't save any service children,
2245 they'll all be re-populated when the config file is re-read.
2246 * buildbot/test/test_config.py (Save.testSave): test for this
2248 2005-04-26 Brian Warner <warner@lothar.com>
2250 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2251 rendered with Blender.. looks a bit nicer.
2252 * buildbot/docs/images/icon.blend: add the Blender file for it
2254 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2255 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2256 running under windows. This appears to be the best way to allow
2257 BuildSteps to do something normal like 'trial -v buildbot.test' or
2258 'make foo' and still expect it to work. The idea is to make the
2259 BuildSteps look as much like what a developer would type when
2260 compiling or testing the tree by hand. This approach probably has
2261 problems when there are spaces in the arguments, so if you've got
2262 windows buildslaves, you'll need to pay close attention to your
2265 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2266 timezone to the timestamp column.
2267 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2269 * buildbot/scripts/runner.py (loadOptions): do something sane for
2270 windows, I think. We use %APPDATA%/buildbot instead of
2271 ~/.buildbot, but we still search everywhere from the current
2272 directory up to the root for a .buildbot/ subdir. The "is it under
2273 $HOME" security test was replaced with "is it owned by the current
2274 user", which is only performed under posix.
2275 * buildbot/test/test_runner.py (Options.testFindOptions): update
2276 tests to match. The "is it owned by the current user" check is
2277 untested. The test has been re-enabled for windows.
2279 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2280 any "\n" in the expected output with the platform-specific line
2281 separator. Make this separator "\r\n" on PTYs under unix, they
2282 seem to do that and I don't know why
2284 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2285 windows for now, I don't know what ~/.buildbot/ should mean there.
2287 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2288 win32 compatibility, don't use "/tmp"
2289 (Basedir.testChangeBuilddir): remove more unixisms
2291 2005-04-26 Brian Warner <warner@lothar.com>
2293 * buildbot/test/test_control.py (Force.rmtree): python2.2
2294 compatibility, apparently its shutil.rmtree ignore_errors=
2295 argument is ignored.
2296 * buildbot/test/test_run.py (Run.rmtree): same
2297 (RunMixin.setUp): same
2299 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2302 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2303 'substring in string' operator, must use string.find(substr)!=-1
2304 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2305 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2307 * buildbot/scripts/runner.py (loadOptions): add code to search for
2308 ~/.buildbot/, a directory with things like 'options', containing
2309 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2310 the current directory, your $HOME directory, or anywhere
2311 inbetween, as long as you're somewhere inside your home directory.
2312 (debugclient): look in ~/.buildbot/options for master and passwd
2313 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2314 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2316 * buildbot/status/client.py (makeRemote): new approach to making
2317 IRemote(None) be None, which works under Twisted-2.0
2318 * buildbot/test/test_status.py (Client.testAdaptation): test it
2320 * buildbot/status/builder.py (Status.builderAdded): when loading a
2321 pickled BuilderStatus in from disk, set its name after loading.
2322 The config file might have changed its name (but not its
2323 directory) while it wasn't looking.
2325 * buildbot/process/builder.py (Builder.attached): always return a
2326 Deferred, even if the builder was already attached
2327 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2329 2005-04-25 Brian Warner <warner@lothar.com>
2331 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2332 category-related exception when announcing a build has finished
2334 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2335 reference no-longer-existent changemaster.sources
2336 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2338 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2341 2005-04-25 Brian Warner <warner@lothar.com>
2343 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2345 * debian/changelog: update for 0.6.3
2347 2005-04-25 Brian Warner <warner@lothar.com>
2349 * MANIFEST.in: make sure debug.glade is in the tarball
2351 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2353 * NEWS: update for the imminent 0.6.3 release
2355 * buildbot/status/html.py (HtmlResource.content): make the
2356 stylesheet <link> always point at "buildbot.css".
2357 (StatusResource.getChild): map "buildbot.css" to a static.File
2358 containing whatever css= argument was provided to Waterfall()
2359 (Waterfall): provide the "classic" css as the default.
2360 * docs/waterfall.classic.css: move default CSS from here ..
2361 * buildbot/status/classic.css: .. to here
2363 * MANIFEST.in: make sure classic.css is included in the tarball
2364 * setup.py: and that it is installed too, under buildbot/status/
2366 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2367 the module level, because buildbot.tap files from 0.6.2 don't have
2368 it in their attribute dictionary.
2370 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2371 really exists at startup, might save some confusion somewhere.
2373 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2375 * docs/waterfall.classic.css:
2376 add a stylesheet that's almost the same as the "classic"
2379 * buildbot/status/builder.py:
2380 add EXCEPTION as a result - this is a problem for the bot
2381 maintainer, not a build problem for the changers
2382 * buildbot/process/step.py:
2383 use EXCEPTION instead of FAILURE for exceptions
2384 * buildbot/status/html.py:
2385 add build_get_class to get a class out of a build/buildstep
2386 finish naming the classes
2387 split out sourceNames to changeNames and builderNames so we
2388 can style them separately
2389 * docs/config.xhtml:
2390 finish documenting classes as they are right now
2392 * buildbot/status/html.py:
2393 name the classes as we agreed on IRC
2394 * docs/config.xhtml:
2397 * buildbot/status/html.py:
2398 same for cssclass->class_
2400 * buildbot/status/html.py:
2401 as decided on IRC, use class_ for the "class" attribute to not
2402 conflict with the class keyword, and clean up the messy **{} stuff.
2404 * buildbot/status/mail.py:
2405 put back "builders" argument, and fix docstring, because the
2406 code *ignores* builders listed in this argument
2408 * buildbot/process/builder.py:
2409 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2411 * docs/config.xhtml:
2412 describe the category argument for builders
2414 * buildbot/status/builder.py:
2415 Fix a silly bug due to merging
2417 * buildbot/process/builder.py:
2418 remove category from the process Builder ...
2419 * buildbot/status/builder.py:
2420 ... and add it to BuilderStatus instead.
2421 Set category on unpickled builder statuses, they might not have it.
2422 * buildbot/master.py:
2423 include category when doing builderAdded
2424 * buildbot/status/mail.py:
2425 return None instead of self for builders we are not interested in.
2426 * buildbot/test/test_run.py:
2427 fix a bug due to only doing deferredResult on "dummy" waiting
2428 * buildbot/test/test_status.py:
2429 add checks for the Mail IStatusReceiver returning None or self
2431 * buildbot/status/html.py:
2432 fix testsuite by prefixing page title with BuildBot
2434 * buildbot/status/builder.py:
2435 have .category in builder status ...
2436 * buildbot/process/builder.py:
2437 ... and set it from Builder
2438 * buildbot/status/html.py:
2439 make .css a class variable
2440 * buildbot/test/test_status.py:
2441 write more tests to cover our categories stuff ...
2442 * buildbot/status/mail.py:
2443 ... and fix the bug that this uncovered
2445 * buildbot/changes/mail.py:
2446 * buildbot/changes/pb.py:
2447 * buildbot/master.py:
2448 * buildbot/process/base.py:
2449 * buildbot/process/factory.py:
2450 * buildbot/process/interlock.py:
2451 * buildbot/process/step.py:
2452 * buildbot/process/step_twisted.py:
2453 * buildbot/slave/commands.py:
2454 * buildbot/status/builder.py:
2455 * buildbot/status/client.py:
2456 * buildbot/status/html.py:
2457 * buildbot/status/mail.py:
2458 * buildbot/status/progress.py:
2459 * buildbot/test/test_changes.py:
2460 * buildbot/test/test_config.py:
2461 * buildbot/test/test_control.py:
2462 * buildbot/test/test_interlock.py:
2463 * buildbot/test/test_maildir.py:
2464 * buildbot/test/test_mailparse.py:
2465 * buildbot/test/test_run.py:
2466 * buildbot/test/test_slavecommand.py:
2467 * buildbot/test/test_status.py:
2468 * buildbot/test/test_steps.py:
2469 * buildbot/test/test_twisted.py:
2470 * buildbot/test/test_util.py:
2471 * buildbot/test/test_vc.py:
2472 * buildbot/test/test_web.py:
2474 add test-case-name at the top of a whole set of files
2476 * buildbot/status/builder.py:
2477 keep order of addition when getting builder names
2478 * buildbot/status/words.py:
2479 * buildbot/test/test_run.py:
2480 add test for getBuilderNames
2482 * buildbot/process/base.py:
2483 * buildbot/process/step.py:
2484 * buildbot/status/builder.py:
2485 * buildbot/status/html.py:
2486 make buildbot css-able
2487 replace the color code for purple with purple, don't understand
2488 why it wasn't purple to start with
2490 * buildbot/status/words.py:
2491 ok, so it doesn't look like BuilderStatus.remote is still valid.
2492 Use what waterfall uses instead.
2494 * buildbot/interfaces.py:
2495 * buildbot/status/builder.py:
2496 * buildbot/status/html.py:
2497 * buildbot/status/mail.py:
2498 * buildbot/status/words.py:
2499 * buildbot/test/test_run.py:
2500 use categories everywhere and make it be a list. More sensible
2501 for the future. Also make words actually respect this in
2504 * buildbot/interfaces.py:
2505 add category argument to getBuilderNames
2506 * buildbot/process/builder.py:
2507 * buildbot/status/builder.py:
2508 * buildbot/status/html.py:
2509 * buildbot/status/mail.py:
2510 * buildbot/status/words.py:
2511 * buildbot/test/test_run.py:
2512 move from specifying builders by name to specifying the category
2514 * buildbot/status/html.py:
2515 * buildbot/status/words.py:
2516 add "builders=" to __init__ of status clients so they can
2517 limit themselves to the given list of builders to report on
2519 * buildbot/status/html.py: set the title to the product name
2521 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2523 * buildbot/interfaces.py:
2524 * buildbot/status/builder.py:
2525 more documentation. Hm, not sure if ChangeLog entries make sense
2528 2005-04-23 Brian Warner <warner@lothar.com>
2530 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2532 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2534 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2535 the sub-commands that log buildmaster status to stdout and to a
2536 GUI window, respectively.
2538 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2539 functionality is working again, but all the step-status and ETA
2540 stuff is missing. Commented out a lot of code pending more
2543 * buildbot/status/client.py: make sure that IRemote(None) is None
2545 * buildbot/changes/changes.py: import defer, oops
2546 (ChangeMaster): remove the .sources list, rely upon the fact that
2547 MultiServices can be treated as sequences of their children. This
2548 cleans up the add/remove ChangeSource routines a lot, as we keep
2549 exactly one list of the current sources instead of three.
2551 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2552 up an empty ChangeMaster at init time.
2553 (BuildMaster.loadChanges): if there are changes to be had from
2554 disk, replace self.change_svc with the new ones. If not, keep
2555 using the empty ChangeMaster set up in __init__.
2556 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2557 instead of a separate list, makes the code a bit cleaner.
2558 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2559 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2560 Extend the test to make sure we can get rid of the sources when
2563 2005-04-22 Brian Warner <warner@lothar.com>
2565 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2566 and info/host files when making the slave directory
2568 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2569 whendone= argument, just return the Deferred and let the caller do
2570 what they want with it.
2571 (Disconnect.testBuild1): wait for shutdownSlave
2572 (Basedir.testChangeBuilddir): new test to make sure changes to the
2573 builddir actually get propagated to the slave
2575 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2576 explicit method, rather than passing the builddir in __init__ .
2577 Make sure to update self.basedir too, this was broken before.
2578 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2579 builders and for ones that have just had their builddir changed.
2580 (BotFactory): add a class-level .perspective attribute, so
2581 BuildSlave.waitUntilDisconnected won't get upset when the
2582 connection hasn't yet been established
2583 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2584 tests can reach through it to inspect the SlaveBuilders
2586 * buildbot/process/base.py (Build.buildException): explain the
2587 log.err with a log.msg
2588 * buildbot/process/builder.py (Builder.startBuild): same
2589 (Builder._startBuildFailed): improve error message
2591 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2592 occurred because we lost the brand-new connection, retry instead
2593 of giving up. If not, it's probably an authorization failure, and
2594 it makes sense to stop trying. Make sure we log.msg the reason
2595 that we're log.err'ing the failure, otherwise test failures are
2596 really hard to figure out.
2598 * buildbot/master.py: change loadConfig() to return a Deferred
2599 that doesn't fire until the change has been fully implemented.
2600 This means any connected slaves have been updated with the new
2601 builddir. This change makes it easier to test the code which
2602 actually implements this builddir-updating.
2603 (BotPerspective.addBuilder): return Deferred
2604 (BotPerspective.removeBuilder): same
2605 (BotPerspective.attached): same
2606 (BotPerspective._attached): same. finish with remote_print before
2607 starting the getSlaveInfo, instead of doing them in parallel
2608 (BotPerspective.list_done): same
2609 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2610 actually calling slave.disconnect()
2611 (BotMaster.addBuilder): same
2612 (BotMaster.removeBuilder): same
2613 (BuildMaster.loadConfig): same
2614 (BuildMaster.loadConfig_Slaves): same
2615 (BuildMaster.loadConfig_Sources): same
2616 (BuildMaster.loadConfig_Builders): same
2617 (BuildMaster.loadConfig_status): same
2619 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2620 a Deferred that fires when the source is finally removed
2622 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2623 the previous tree on win32, where we have to do it synchronously,
2624 make sure we return a Deferred anyway.
2625 (SourceBase.doCopy): same
2627 * buildbot/scripts/runner.py (statusgui): use the text client for
2628 now, while I rewrite the Gtk one
2629 * buildbot/clients/base.py: strip out old code, leaving just the
2630 basic print-message-on-event functionality. I also remove the
2631 ReconnectingPBClientFactory, but it does at least quit when it
2632 loses the connection instead of going silent
2634 2005-04-21 Brian Warner <warner@lothar.com>
2636 * Makefile: minor tweaks
2638 * NEWS: point out deprecation warnings, new features for
2641 * buildbot/master.py (BuildMaster.loadConfig): emit
2642 DeprecationWarnings for Builders defined with tuples. Rearrange
2643 code to facility removal of deprecated configuration keys in the
2646 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2647 'buildbot' command to put a little Makefile in the target that
2648 helps you re-create the buildbot.tap file, start or stop the
2649 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2650 all the files 0600, since they contain passwords.
2651 (start): if there is a Makefile, and /usr/bin/make exists, use
2652 'make start' in preference to a raw twistd command. This lets
2653 slave admins put things like PYTHONPATH variables in their
2654 Makefiles and have them still work when the slave is started with
2655 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2656 be nice to first try the 'make' command and only fall back to
2657 twistd if it fails. TODO: the Makefile's "start" command does not
2658 add the --reactor=win32 argument when running under windows.
2659 (Options.debugclient, Options.statusgui): add sub-commands to launch
2660 the debug client (formerly in contrib/debugclient.py) and the
2661 Gtk status application (currently broken)
2662 * buildbot/clients/debug.py: move from contrib/debugclient.py
2663 * buildbot/clients/debug.glade: same
2665 * buildbot/test/test_trial.py: remove it. This requires some
2666 functionality out of Twisted that isn't there yet, and until then
2667 having it around just confuses things.
2669 * buildbot/test/test_slavecommand.py (Shell): test both with and
2670 without PTYs, and make sure that command output is properly
2671 interleaved in the with-PTY case. I think the without-PTY test
2672 should pass on windows, where we never use PTYs anyway.
2674 2005-04-20 Brian Warner <warner@lothar.com>
2676 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2678 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2680 * NEWS: start creating entries for the next release
2682 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2684 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2685 (WebTest.test_webPathname): same
2686 (WebTest.test_webPathname_port): same
2687 (WebTest.test_waterfall): use the default favicon rather than
2688 rooting around the filesystem for it. Open the expected-icon file
2689 in binary mode, to make win32 tests happier (thanks to Nick Trout
2691 * buildbot/status/html.py (buildbot_icon): win32 portability
2693 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2694 win32-compatibility fixes from Nick Trout, the "file not found" message
2695 is different under windows
2696 (FakeSlaveBuilder.__init__): clean up setup a bit
2697 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2699 2005-04-19 Brian Warner <warner@lothar.com>
2701 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2702 skip-if-repositories-are-unavailable test to not kill the trial
2703 that comes with Twisted-1.3.0
2705 * setup.py: install buildbot.png icon file when installing code
2707 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2708 environment used by the command, at least on the child side.
2710 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2711 this method needs to be added and implemented because it gets
2712 called under heavy load. I don't quite understand the
2713 producer/consumer API enough to write it.
2714 (StatusResource.getChild): add a resource for /favicon.ico
2715 (Waterfall.__init__): add favicon= argument
2716 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2717 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2718 (WebTest.test_webPathname): same
2719 (WebTest.test_webPathname_port): same
2720 * docs/config.xhtml: mention favicon=
2721 * buildbot/buildbot.png: add a default icon, dorky as it is
2723 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2725 * buildbot/master.py:
2726 * buildbot/process/base.py:
2727 * buildbot/process/builder.py:
2728 * buildbot/process/interlock.py:
2729 * buildbot/status/builder.py:
2730 * buildbot/status/html.py:
2731 * buildbot/status/mail.py:
2732 * buildbot/status/words.py:
2733 new documentation while digging through the code
2735 2005-04-17 Brian Warner <warner@lothar.com>
2737 * general: try to fix file modes on all .py files: a+r, a-x,
2738 but let buildbot/clients/*.py be +x since they're tools
2740 * docs/epyrun (addMod): when an import fails, say why
2742 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2744 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2746 * buildbot/process/base.py:
2747 * buildbot/process/builder.py:
2748 * buildbot/status/builder.py:
2749 new documentation while digging through the code
2751 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2753 * buildbot/changes/changes.py:
2754 * buildbot/changes/p4poller.py:
2755 * buildbot/interfaces.py:
2756 * buildbot/process/base.py:
2757 * buildbot/process/builder.py:
2758 * buildbot/process/step.py:
2759 * buildbot/process/step_twisted.py:
2760 * buildbot/slave/bot.py:
2761 * buildbot/slave/commands.py:
2762 * buildbot/status/builder.py:
2763 fix all docstrings to make epydoc happy. In the process of fixing
2764 some, I also moved pieces of docs, and removed some deprecated
2767 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2769 * buildbot/process/builder.py:
2770 * buildbot/process/interlock.py:
2771 * buildbot/process/process_twisted.py:
2772 * buildbot/process/step.py:
2773 BuildProcess -> Build, as it looks like that's what happened
2774 * buildbot/process/base.py:
2775 * buildbot/process/factory.py:
2778 2005-04-17 Brian Warner <warner@lothar.com>
2780 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2781 update compile command to accomodate the Twisted split.. now
2782 instead of './setup.py build_ext -i', you do './setup.py all
2783 build_ext -i', to run build_ext over all sub-projects.
2784 (FullTwistedBuildFactory): same
2785 (TwistedReactorsBuildFactory): same
2787 * buildbot/status/html.py (TextLog.finished): null out self.req
2788 when we're done, otherwise the reference cycle of TextLog to .req
2789 to .notifications to a Deferred to TextLog.stop keeps them from
2790 being collected, and consumes a huge (610MB on pyramid at last
2791 check) amount of memory.
2793 2005-04-11 Brian Warner <warner@lothar.com>
2795 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2796 normalize the VC-repository location.. makes SVN happier with
2797 certain test environments.
2799 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2800 RemoteShellCommand gets its own .env dictionary, so that code in
2801 start() doesn't mutate the original. I think this should fix the
2802 step_twisted.Trial problem where multiple identical components
2803 kept getting added to PYTHONPATH= over and over again.
2805 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2806 adding epydoc-format docstrings to many classes. Thanks to Thomas
2807 Vander Stichele for the patches.
2808 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2809 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2810 * buildbot/slave/bot.py, commands.py, registry.py: same
2812 2005-04-05 Brian Warner <warner@lothar.com>
2814 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2815 preserve timestamps, helps incremental builds of large trees.
2816 Patch from Rene Rivera.
2818 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2819 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2822 2005-04-03 Brian Warner <warner@lothar.com>
2824 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2825 with one dict, apparently exec has some scoping bugs when used
2826 with both global/local dicts. Thanks to Nathaniel Smith for the
2829 2005-04-02 Brian Warner <warner@lothar.com>
2831 * buildbot/process/step_twisted.py (countFailedTests): the new
2832 trial in Twisted-2.0 emits a slightly different status line than
2833 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2834 mistakenly think the test count is unparseable.
2835 (Trial.start): note that for some reason each build causes another
2836 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2837 be fixed but I'm not sure quite where the problem is.
2839 2005-04-01 Brian Warner <warner@lothar.com>
2841 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2842 deferredResult to avoid hangs/warnings under twisted-2.0
2843 (RunMixin.tearDown): same
2844 (RunMixin.shutdownSlave): same
2845 (Disconnect.testIdle1): same
2846 (Disconnect.testBuild2): same: wait one second after the build
2847 finishes for test to really be done.. this should be cleaned up to
2848 avoid wasting that second. Builder.detach uses a callLater(0),
2849 either that should be done in-line (something else needed that
2850 behavior), or it should return a Deferred that fires when the
2851 builder is really offline.
2852 (Disconnect.testBuild3): same
2853 (Disconnect.testDisappear): same
2855 * buildbot/test/test_web.py: rearrange server-setup and teardown
2856 code to remove unclean-reactor warnings from twisted-2.0
2858 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2859 so the tests don't hang under twisted-2.0
2861 2005-03-31 Brian Warner <warner@lothar.com>
2863 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2864 caused a warning each time the master changed our set of builders
2866 * buildbot/status/builder.py (BuildStatus.saveYourself): under
2867 w32, don't unlink the file unless it already exists. Thanks to
2868 Baptiste Lepilleur for the catch.
2869 (BuilderStatus.saveYourself): same
2871 2005-02-01 Brian Warner <warner@lothar.com>
2873 * buildbot/status/html.py (TextLog.getChild): use a /text child
2874 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2875 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2876 logfile as text/plain (no markup, no headers). This replaces the
2877 previous scheme (which used an ?text=1 argument), and gets us back
2878 to a relative link (which works better when the buildbot lives
2879 behind another web server, such as Apache configured as a reverse
2880 proxy). Thanks to Gerald Combs for spotting the problem.
2882 * buildbot/__init__.py (version): bump to 0.6.2+ while between
2885 2004-12-13 Brian Warner <warner@lothar.com>
2887 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2889 * debian/changelog: update for 0.6.2
2890 * NEWS: finalize for 0.6.2
2892 2004-12-11 Brian Warner <warner@lothar.com>
2894 * NEWS: bring it up to date
2896 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2897 detection code. Require some sign of life from the buildmaster
2898 every BotFactory.keepaliveInterval seconds. Provoke this
2899 indication at BotFactory.keepaliveTimeout seconds before the
2900 deadline by sending a keepalive request. We don't actually care if
2901 that request is answered in a timely fashion, what we care about
2902 is that .activity() is called before the deadline. .activity() is
2903 triggered by any PB message from the master (including an ack to
2904 one of the slave's status-update messages). With this new scheme,
2905 large status messages over slow pipes are OK, as long as any given
2906 message can be sent (and thus acked) within .keepaliveTimeout
2907 seconds (which defaults to 30).
2908 (SlaveBuilder.remote_startCommand): record activity
2909 (SlaveBuilder.ackUpdate): same
2910 (SlaveBuilder.ackComplete): same
2911 (BotFactory.gotPerspective): same
2912 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2914 2004-12-09 Brian Warner <warner@lothar.com>
2916 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
2919 * buildbot/process/step_twisted.py (Trial._commandComplete):
2920 update self.cmd when we start the 'cat test.log' transfer. Without
2921 this, we cannot interrupt the correct RemoteCommand when we lose
2924 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
2925 trying to tell the slave to stop the command if we're already
2926 inactive, or if we no longer have a .remote
2928 * buildbot/process/builder.py (Builder._detached): don't let an
2929 exception in currentBuild.stopBuild() prevent the builder from
2930 being marked offline
2932 2004-12-07 Brian Warner <warner@lothar.com>
2934 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
2935 KeyError that happens when you ask for a non-existent Builder, and
2936 translate it into a UsageError.
2938 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
2939 losing the slave in the middle of a remote step is handled too
2941 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
2942 be a Failure, so be sure to stringify it before using it as the
2943 contents of the 'interrupt' logfile
2944 (RemoteCommand.interrupt): use stringified 'why' in
2945 remote_interruptCommand too, just in case
2947 2004-12-06 Brian Warner <warner@lothar.com>
2949 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
2950 instead of 'tla update', which is more efficient in case we've
2951 missed a couple of patches since the last update.
2953 * debian/changelog: update for previous (0.6.1) release. Obviously
2954 this needs to be handled better.
2956 2004-12-05 Brian Warner <warner@lothar.com>
2958 * NEWS: update for stuff since last release
2960 * buildbot/master.py (DebugPerspective.attached): return 'self', to
2961 match the maybeDeferred change in Dispatcher.requestAvatar
2962 * buildbot/changes/pb.py (ChangePerspective.attached): same
2963 * buildbot/status/client.py (StatusClientPerspective.attached): same
2964 * buildbot/process/builder.py (Builder._attached3): same
2965 * buildbot/pbutil.py (NewCredPerspective.attached): same
2967 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
2968 the date to the top-most box, if it is not the same as today's
2971 * docs/slave.xhtml: provide a buildslave setup checklist
2973 * docs/source.xhtml (Arch): correct terminology
2975 2004-12-04 Brian Warner <warner@lothar.com>
2977 * buildbot/test/test_slavecommand.py: use sys.executable instead
2978 of hard-coding 'python' for child commands, might help portability
2980 * docs/examples/twisted_master.cfg: update to current usage
2982 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
2983 'stop build' command to the IRC bot
2985 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
2986 message that broke PBChangeSource
2988 * buildbot/slave/bot.py: clean up shutdown/lose-master code
2989 (SlaveBuilder): make some attributes class-level, remove the old
2990 "update queue" which existed to support resuming a build after the
2991 master connection was lost. Try to reimplement that feature later.
2992 (SlaveBuilder.stopCommand): clear self.command when the
2993 SlaveCommand finishes, so that we don't try to kill a leftover one
2995 (SlaveBuilder.commandComplete): same, merge with commandFailed and
2998 * buildbot/slave/commands.py (SourceBase): set self.command for
2999 all VC commands, so they can be interrupted.
3001 2004-12-03 Brian Warner <warner@lothar.com>
3003 * buildbot/master.py: clean up slave-handling code, to handle
3004 slave-disconnect and multiple-connect better
3005 (BotPerspective): make these long-lasting, exactly one per bot
3006 listed in the config file.
3007 (BotPerspective.attached): if a slave connects while an existing
3008 one appears to still be connected, disconnect the old one first.
3009 (BotPerspective.disconnect): new method to forcibly disconnect a
3010 buildslave. Use some hacks to empty the transmit buffer quickly to
3011 avoid the long (20-min?) TCP timeout that could occur if the old
3012 slave has dropped off the net.
3013 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3014 own their own SlaveStatus objects. Remove .attached/.detached, add
3015 .addSlave/.removeSlave, treat slaves like Builders (config file
3016 parsing sends deltas to the BotMaster). Inform the slave
3017 instances, i.e. the BotPerspective, about addBuilder and
3019 (BotMaster.getPerspective): turns into a single dict lookup
3020 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3021 which gives BotPerspective.attached a chance to disconnect the old
3023 (BuildMaster.loadConfig): add code (disabled) to validate that all
3024 builders use known slaves (listed in c['bots']). The check won't
3025 work with tuple-specified builders, which are deprecated but not
3026 yet invalid, so the check is disabled for now.
3027 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3028 routine, do the add/changed/removed dance with them like we do
3030 (BuildMaster.loadConfig_Sources): move source-config into a
3031 separate routine too
3033 * buildbot/status/builder.py (Status.getSlave): get the
3034 SlaveStatus object from the BotPerspective, not the BotMaster.
3036 * buildbot/test/test_run.py: bunch of new tests for losing the
3037 buildslave at various points in the build, handling a slave that
3038 connects multiple times, and making sure we can interrupt a
3041 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3042 something other than 'Bot' for the Bot object, to make certain
3043 test cases easier to write.
3044 (BuildSlave.waitUntilDisconnected): utility method for testing
3046 2004-11-30 Brian Warner <warner@lothar.com>
3048 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3050 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3051 argument, return a Deferred that always fires with True or False.
3052 I don't use an errback to indicate 'ping failed' so that callers
3053 are free to ignore the deferred without causing spurious errors in
3055 * buildbot/process/builder.py (BuilderControl.ping): implement it
3057 * buildbot/test/test_run.py (Status.testDisappear): test ping
3058 (Status.disappearSlave): fix it
3060 2004-11-30 Brian Warner <warner@lothar.com>
3062 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3063 (IBuilderControl): add .getBuild(num), only works for the current
3064 build, of course, although it might be interesting to offer
3065 something for builds in the .waiting or .interlocked state.
3067 * buildbot/process/base.py (Build): have .stopBuild just do the
3068 interrupt, then let the build die by itself.
3069 (BuildControl): add .stopBuild, and add a point-event named
3070 'interrupt' just after the build so status viewers can tell that
3072 (BuilderControl): add .getBuild
3074 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3075 stops when you kill it, good for testing
3076 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3077 contains the 'reason' text.
3079 * buildbot/status/html.py: Add Stop Build button, if the build can
3080 still be stopped. Send a Redirect (to the top page) one second
3081 later, hopefully long enough for the interrupt to have an effect.
3082 Move make_row() up to top-level to share it between Stop Build and
3085 * buildbot/slave/commands.py: only kill the child process once
3087 * buildbot/test/test_run.py: add testInterrupt
3089 2004-11-29 Brian Warner <warner@lothar.com>
3091 * buildbot/process/base.py: Refactor command interruption. The
3092 Build is now responsible for noticing that the slave has gone
3093 away: Build.lostRemote() interrupts the current step and makes
3094 sure that no further ones will be started.
3096 * buildbot/process/builder.py: When the initial remote_startBuild
3097 message fails, log it: this usually indicates that the slave has
3098 gone away, but we don't really start paying attention until they
3099 fail to respond to the first step's command.
3101 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3102 slave disconnect. Now sports a new interrupt() method. Error
3103 handling was simplified a lot by chaining deferreds, so
3104 remoteFailed/remoteComplete were merged into a single
3105 remoteComplete method (which can now get a Failure object).
3106 Likewise failed/finished were merged into just _finished.
3107 (BuildStep): Add interrupt(why) method, and if why is a
3108 ConnectionLost Failure then the step is failed with some useful
3111 * buildbot/slave/bot.py: stop the current command when the remote
3112 Step reference is lost, and when the slave is shut down.
3113 (Bot): make it a MultiService, so it can have children. Use
3114 stopService to tell when the slave is shutting down.
3115 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3116 remote_interruptCommand (which asks the current SlaveCommand to
3117 stop but allows it to keep emitting status messages), and
3118 stopCommand (which tells it to shut up and die).
3120 * buildbot/slave/commands.py: make commands interruptible
3121 (ShellCommand.kill): factor out os.kill logic
3122 (Command): factor out setup()
3123 (Command.sendStatus): don't send status if .running is false, this
3124 happens when the command has been halted.
3125 (Command.interrupt): new method, used to tell the command to die
3126 (SlaveShellCommand): implement .interrupt
3127 (DummyCommand): implement .interrupt
3128 (SourceBase, etc): factor out setup(), don't continue substeps if
3131 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3132 so they can be called after finishing
3134 * buildbot/test/test_run.py: new tests for disconnect behavior,
3135 refactor slave-shutdown routines, add different kinds of
3138 2004-11-27 Brian Warner <warner@lothar.com>
3140 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3141 method to express ETA time like "2m45s" instead of "165 seconds"
3143 2004-11-24 Brian Warner <warner@lothar.com>
3145 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3146 archive after the test completes, to avoid cluttering the user's
3147 'tla archives' listing with a bogus entry. Arch doesn't happen to
3148 provide any way to override the use of ~/.arch-params/, so there
3149 isn't a convenient way to avoid touching the setup of the user who
3151 (VC_HTTP.testArchHTTP): same
3153 2004-11-23 Brian Warner <warner@lothar.com>
3155 * buildbot/status/html.py (TextLog): split render() up into
3156 render_HEAD and render_GET. Use a Producer when sending log
3157 chunks, to reduce memory requirements and avoid sending huge
3158 non-Banana-able strings over web.distrib connections. Requires
3159 peeking under the covers of IStatusLog.
3160 (TextLog.resumeProducing): fix the "as text" link, handle client
3161 disconnects that occur while we're still sending old chunks.
3163 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3164 use defer.succeed, not the non-existent defer.success
3165 (LogFile.waitUntilFinished): same
3166 (LogFile.subscribe): don't add watchers to a finished logfile
3168 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3171 2004-11-23 Brian Warner <warner@lothar.com>
3173 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3175 2004-11-23 Brian Warner <warner@lothar.com>
3177 * NEWS: update for the 0.6.1 release
3178 * MANIFEST.in: add new files
3180 * README (INSTALLATION): explain how to enable the extra VC tests
3182 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3183 level to, so old pickled builds can be displayed ok
3185 2004-11-22 Brian Warner <warner@lothar.com>
3187 * NEWS: summarize updates since last release
3189 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3190 Yoz Grahame. Closes SF#1050138.
3192 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3195 * buildbot/process/step_twisted.py (Trial): update docs a bit
3197 * docs/factories.xhtml: fix Trial factory docs to match reality.
3200 * buildbot/process/factory.py (Trial.__init__): add args for
3201 randomly= and recurse=, making them available to instantiators
3202 instead of only to subclassers. Closes: SF#1049759.
3204 2004-11-15 Brian Warner <warner@lothar.com>
3206 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3207 try to teach the Quick factory to use multiple versions of python
3209 2004-11-12 Brian Warner <warner@lothar.com>
3211 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3212 safer w32-compatible approach, and only use it on windows
3213 (BuildStatus.saveYourself): same
3215 2004-11-11 Brian Warner <warner@lothar.com>
3217 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3218 it: one string merge per chunk. There are now separate .entries
3219 and .runEntries lists: when enumerating over all chunks, make sure
3221 * buildbot/test/test_status.py (Log): more tests
3223 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3224 chunks together, up to 10kb per chunk. This ought to cut down on
3225 the CPU-burning overhead of large log files. Thanks to Alexander
3226 Staubo for spotting the problem.
3227 * buildbot/test/test_status.py (Log): tests for same
3229 2004-11-10 Brian Warner <warner@lothar.com>
3231 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3232 header to outbound mail
3233 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3235 2004-11-08 Brian Warner <warner@lothar.com>
3237 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3238 can't do os.rename() onto an existing file, so catch the exception
3239 and unlink the target file first. This introduces a slight window
3240 where the existing file could be lost, but the main failure case
3241 (disk full) should still be handled safely.
3242 (BuildStatus.saveYourself): same
3244 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3245 separator character instead of os.sep, because the filenames being
3246 split here are coming from the VC system, which can have a
3247 different pathname convention than the local host. This should
3248 help a buildmaster running on windows that uses a CVS repository
3249 which runs under unix.
3250 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3252 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3253 when there are no test failures to be parsed
3255 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3256 instead of the unix-specific os.system("cp"), thanks to Elliot
3257 Murphy for this and the other buildbot-vs-windows catches.
3258 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3260 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3261 echo the command as it is run
3263 * setup.py: install sample.mk too, not just sample.cfg
3264 (scripts): install contrib/windows/buildbot.bat on windows
3266 2004-11-07 Brian Warner <warner@lothar.com>
3268 * buildbot/process/builder.py (Builder._detached): clear the
3269 self.currentBuild reference, otherwise the next build will be
3270 skipped because we think the Builder is already in use.
3272 * docs/examples/twisted_master.cfg: update to match current usage
3273 on the Twisted buildbot
3275 2004-10-29 Brian Warner <warner@lothar.com>
3277 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3279 2004-10-28 Brian Warner <warner@lothar.com>
3281 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3282 have separate doVCUpdate/doVCFull methods. Catch an update failure
3283 and respond by clobbering the source directory and re-trying. This
3284 will handle local changes (like replacing a file with a directory)
3285 that will cause CVS and SVN updates to fail.
3286 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3288 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3291 2004-10-19 Brian Warner <warner@lothar.com>
3293 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3295 * buildbot/status/html.py (StatusResourceTestResults): display any
3296 TestResults that the Build might have
3297 (StatusResourceTestResult): and the logs for each TestResult
3298 (StatusResourceBuild): add link from the per-build page
3300 2004-10-15 Brian Warner <warner@lothar.com>
3302 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3303 the 'problems' portion of stdout, add TestResults to our build
3304 * buildbot/test/test_twisted.py (Parse.testParse): test it
3306 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3307 to retrieve a dict of accumulated test results
3308 (ITestResult): define what a single test result can do
3309 * buildbot/status/builder.py (TestResult): implement ITestResult
3310 (BuildStatus.getTestResults): retrieve dict of TestResults
3311 (BuildStatus.addTestResult): add TestResults
3312 * buildbot/test/test_status.py (Results.testAddResults): test it
3314 2004-10-14 Brian Warner <warner@lothar.com>
3316 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3317 instead of os.system("rm -rf") for win32 portability
3319 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3320 SignalMixin instead of starting/stopping the reactor, which is
3321 likely to cause problems with other tests
3323 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3324 self.copyComplete() call. Yoz Grahame makes the catch.
3326 * contrib/windows/buildbot.bat: helper script to deal with path
3327 issues. Thanks to Yoz Grahame.
3329 * buildbot/master.py (BuildMaster.startService): don't register a
3330 SIGHUP handler if the signal module has no SIGHUP attribute.
3331 Apparently win32 does this.
3333 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3335 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3336 test if the reactor can't offer UNIX sockets
3338 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3339 error introduced in the last commit. We really need that
3342 2004-10-12 Brian Warner <warner@lothar.com>
3344 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3345 when describing a maildir source. Thanks to Stephen Davis.
3347 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3350 * buildbot/scripts/runner.py (createMaster): install Makefile too
3351 (start): add --no_save to 'start' command
3352 * buildbot/scripts/sample.mk: simple convenience Makefile with
3353 start/stop/reload targets
3355 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3358 2004-09-30 Brian Warner <warner@lothar.com>
3360 * setup.py: Releasing buildbot-0.6.0
3362 2004-09-30 Brian Warner <warner@lothar.com>
3364 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3365 test_trial.py from the source tarball until support is complete.
3367 * NEWS: update for 0.6.0 release
3368 * buildbot/__init__.py (version): same
3371 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3372 'source' command to tell users where to get the Buildbot source
3374 * docs/examples/*.cfg: update to modern standards
3376 * NEWS: update for release
3378 * buildbot/scripts/runner.py (createMaster): remove the
3379 -shutdown.tap stuff now that it isn't necessary
3381 (start): launch buildbot.tap, not buildbot-shutdown.tap
3384 * buildbot/status/mail.py (Domain): shorten class name
3385 (MailNotifier): if lookup= is a string, pass it to Domain()
3386 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3387 (Mail.testBuild2): test the string-to-Domain shortcut
3388 (Mail.testMail): fix test
3391 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3394 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3395 more attributes on load
3396 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3397 to accomodate the whole waterfall page at once, and the thrashing
3398 results in a lot of unnecessary loads
3399 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3400 (BuilderStatus.saveYourself): same
3401 (BuilderStatus.eventGenerator): stop generating on the first missing
3402 build. We assume that saved builds are deleted oldest-first.
3403 (BuildStepStatus.__getstate__): .progress might not exist
3405 * buildbot/changes/changes.py (ChangeMaster): make it
3406 serializable, in $masterdir/changes.pck
3407 (ChangeMaster.stopService): save on shutdown
3408 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3409 * buildbot/test/test_config.py: load Changes before config file
3412 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3413 "Oh my god, you killed the command" header on a separate line
3415 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3416 skip over corrupted build pickles
3417 (BuilderStatus.getFullBuildByNumber): same
3418 (BuilderStatus.eventGenerator): skip over unavailable builds
3419 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3420 do an atomic rename. This prevents a corrupted pickle when some
3421 internal serialization error occurs.
3422 (BuilderStatus.saveYourself): same
3424 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3425 the timeout for shell commands, it got lost somehow
3427 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3428 run out of build steps, return the rest of the builder events
3430 * buildbot/interfaces.py (IBuilderControl.ping): add method
3432 * buildbot/process/builder.py (BuilderControl.ping): move
3433 slave-ping to BuilderControl, and fix the failure case in the
3434 process (Event.finish() is the verb, Event.finished is the noun).
3436 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3437 through the BuilderControl instead of the BuilderStatus
3438 (EventBox): add adapter for builder.Event, allowing builder events to
3439 be displayed in the waterfall display
3441 * buildbot/master.py (BotMaster.stopService): add a 'master
3442 shutdown' event to the builder's log
3443 (BuildMaster.startService): and a 'master started' on startup
3445 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3446 builder events into the BuildStep event stream
3447 (Status.builderAdded): add a 'builder created' event
3450 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3451 command to announce the completion of a running build
3452 (IrcStatusBot.command_FORCE): announce when the build finishes
3454 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3455 don't evict unfinished builds from the cache: they must stay in
3456 the full-cache until their logfiles have stopped changing. Make
3457 sure the eviction loop terminates if an unfinished build was hit.
3458 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3459 This lets exceptions be dumped in an email status message. Really
3460 we need LogFiles which contain both text and HTML, instead of two
3462 (BuildStatus.__getstate__): handle self.finished=False
3463 (Status.builderAdded): if the pickle is corrupted, abandon the
3464 history and create a new BuilderStatus object.
3466 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3467 self.progress attribute, helped one test which doesn't fully set
3468 up the Build object.
3470 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3471 IStatusLog methods into an Interface that is implemented by "stub"
3472 logs, for which all the actual text chunks are on disk (in the
3473 pickled Build instance). To show the log contents, you must first
3474 adapt the stub log to a full IStatusLog object.
3476 * buildbot/status/builder.py (LogFileStub): create separate stub
3477 log objects, which can be upgraded to a real one if necessary.
3478 (LogFile): make them persistable, and let them stubify themselves
3480 (BuildStepStatus): same
3482 (BuildStatus.saveYourself): save the whole build out to disk
3483 (BuilderStatus): make it persistable
3484 (BuilderStatus.saveYourself): save the builder to disk
3485 (BuilderStatus.addFullBuildToCache): implement two caches which
3486 hold Build objects: a small one which holds full Builds, and a
3487 larger one which holds "stubbed" Builds (ones with their LogFiles
3488 turned into LogFileStubs). This reduces memory usage by the
3489 buildmaster by not keeping more than a few (default is 2) whole
3490 build logs in RAM all the time.
3491 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3493 (BuilderStatus.eventGenerator): rewrite since .builds went away
3494 (BuilderStatus.buildStarted): remove the .builds array. Add the
3495 build to the "full" cache when it starts.
3496 (BuilderStatus._buildFinished): save the build to disk when it
3498 (Status): give it a basedir (same as the BuildMaster's basedir)
3499 where the builder pickles can be saved
3500 (Status.builderAdded): create the BuilderStatus ourselves, by
3501 loading a pickle from disk (or creating a new instance if there
3502 was none on disk). Return the BuilderStatus so the master can glue
3503 it into the new Builder object.
3505 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3506 all BuilderStatuses to save themselves out to disk. This is in
3507 lieu of saving anything important in the main Application pickle
3508 (the -shutdown.tap file).
3509 (BuildMaster.__init__): give Status() a basedir for its files
3510 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3511 to get the BuilderStatus, then give it to the Builder (instead of
3512 doing it the other way around). It's ok if the status announces
3513 the new Builder before it's really ready, as the outside world can
3514 only see the BuilderStatus object anyway (and it is ready before
3515 builderAdded returns). Use the builder's "builddir" (which
3516 normally specifies where the slave will run the builder) as the
3517 master's basedir (for saving serialized builds).
3519 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3520 coerce the logfile to IStatusLog before trying to get the text
3521 chunks out of it. This will pull the full (non-stubified) Build in
3522 from disk if necessary.
3523 (TextLog): fix the adapter registration
3525 * buildbot/test/test_control.py (Force.setUp): create the basedir
3526 * buildbot/test/test_web.py: same
3527 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3528 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3529 * buildbot/test/test_run.py (Run.testMaster): same
3530 (Status.setUp): same
3532 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3534 * buildbot/status/html.py (Waterfall.__init__): store actual
3535 allowForce flag passed in rather than using True for everyone;
3536 make sure setting it to False doesn't cause a NameError
3538 (StatusResourceBuilder.__init__) add the builder name to the page
3540 (StatusResourceBuilder.body) move HTML generation for a name/value
3541 row into a helper method (StatusResourceBuilder.make_row); only
3542 generate the "Force Build" form if allowForce was True and the
3543 slave is connected. Use class attributes in the generated HTML to
3544 spread a little CSS-joy.
3546 2004-09-28 Brian Warner <warner@lothar.com>
3548 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3549 warning-scanner to not ignore things like
3550 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3552 * buildbot/status/html.py (StatusResource.control): add some
3553 class-level values for .control in an attempt to make upgrading
3556 * buildbot/util.py (ComparableMixin): survive missing attributes,
3557 such as when a class is modified and we're comparing old instances
3560 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3561 failure handling, remove a redundant try/except block. Don't
3562 return the full traceback to the IRC channel.
3563 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3564 error messages. Get ETA properly.
3566 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3567 the reason, since (at least) IRC message will have <> in them.
3568 (StatusResourceBuilder.__init__): take an IBuilderControl
3569 (StatusResourceBuilder.force): use the IBuilderControl we get in
3570 the constructor instead of trying to make our own. Catch the
3571 new exceptions and ignore them for now (until we make an
3572 intermediate web page where we could show the error message)
3573 (StatusResource): create with an IControl, use it to give an
3574 IBuilderControl to all children
3575 (Waterfall): take an allowForce= option, pass an IControl object
3576 to StatusResource if it is True
3578 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3580 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3581 catch new exceptions and return string forms
3583 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3584 * buildbot/process/builder.py (Builder.forceBuild): raise them
3585 * buildbot/test/test_control.py (Force.testNoSlave): new test
3586 (Force.testBuilderInUse): same
3589 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3591 * buildbot/test/test_run.py: use IControl
3592 * buildbot/test/test_vc.py: same
3594 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3595 to use IControl. Still offline.
3596 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3598 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3599 who=None so periodic builds don't send out status mail
3600 (Builder.forceBuild): include reason in the log message
3601 (BuilderControl.forceBuild): rename 'name' to 'who'
3603 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3604 'who' parameter, but make it None by default so builds forced by
3605 slave admins don't cause status mail to be sent to anybody
3606 (BotMaster.forceBuild): same. this method is deprecated.
3607 (DebugPerspective.perspective_forceBuild): same, use IControl.
3608 (DebugPerspective.perspective_fakeChange): use IControl..
3609 (Dispatcher.requestAvatar): .. so don't set .changemaster
3611 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3612 parameter to avoid confusion with the name of the builder
3615 * buildbot/status/mail.py: refine comment about needing 2.3
3617 * buildbot/status/html.py: move all imports to the top
3619 * buildbot/test/test_control.py: test new interfaces
3620 * buildbot/test/test_run.py (Status): handle new interfaces
3621 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3623 * buildbot/process/base.py (BuildControl): implement IBuildControl
3624 and its lonely getStatus() method
3626 * buildbot/process/builder.py (BuilderControl): implement
3627 IBuilderControl, obtained by adapting the Builder instance
3628 (Builder.startBuild): return a BuilderControl instead of a
3629 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3630 accomplish the same thing.
3632 * buildbot/master.py: move all import statements to the top
3633 (Control): implement IControl, obtained by adapting the
3634 BuildMaster instance.
3636 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3637 IBuildControl. These are used to force builds. Eventually they
3638 will provide ways to reconfigure the Builders, pause or abandon a
3639 Build, and perhaps control the BuildMaster itself.
3641 2004-09-26 Brian Warner <warner@lothar.com>
3643 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3644 ends up comparing us against something without a .__class__
3646 2004-09-24 Brian Warner <warner@lothar.com>
3648 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3651 * Makefile: add 'deb-snapshot' target, to create a timestamped
3654 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3656 2004-09-23 Brian Warner <warner@lothar.com>
3658 * buildbot/__init__.py (version): move version string here
3659 * setup.py: get version string from buildbot.version
3660 * buildbot/status/html.py (WaterfallStatusResource.body): add
3661 buildbot version to the page footer
3662 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3665 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3666 slaves, let the second know where the first one is coming from
3667 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3668 see our exceptions. It would be nice if there were a way to just
3669 send them the exception type and value, not the full traceback.
3672 * buildbot/status/mail.py (MailNotifier): add a new argument
3673 sendToInterestedUsers=, which can be set to False to disable the
3674 usual send-to-blamelist behavior.
3675 (top): handle python-2.2 which has no email.MIMEMultipart
3676 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3677 (MailNotifier.disownServiceParent): unsubscribe on removal
3679 * buildbot/test/test_status.py (Mail.testBuild2): test it
3682 * buildbot/status/progress.py (Expectations.wavg): tolerate
3683 current=None, which happens when steps start failing badly
3684 * buildbot/test/test_status.py (Progress.testWavg): test for it
3686 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3687 doesn't understand args['revision'], emit a warning instead of
3688 bailing completely. Updating to -rHEAD is probably close enough.
3690 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3692 * buildbot/test/test_status.py: at least import bb.status.client
3693 even if we don't have any test coverage for it yet
3695 * contrib/svn_buildbot.py: don't require python2.3
3696 (main): wait, do require it (for sets.py), but explain how to
3697 make it work under python2.2
3699 2004-09-23 Brian Warner <warner@lothar.com>
3701 * contrib/svn_buildbot.py: include the revision number in the Change
3703 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3704 using util.now() because FreshCVS is a realtime service
3706 * buildbot/status/event.py: delete dead code
3707 * buildbot/process/step.py: don't import dead Event class
3708 * buildbot/process/step_twisted.py: same
3709 * buildbot/status/builder.py: same
3710 * buildbot/status/client.py: same
3712 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3714 * buildbot/changes/changes.py (Change): set .when from an __init__
3715 argument (which defaults to now()), rather than having
3716 ChangeMaster.addChange set it later.
3717 (ChangeMaster.addChange): same
3719 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3720 (parseSyncmail): same. Just use util.now() for now.
3721 (parseBonsaiMail): parse the timestamp field for when=
3723 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3724 instead of setting .when after the fact
3728 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3729 results when the target project uses retrial. Still under
3731 * buildbot/test/test_trial.py: same
3733 2004-09-21 Brian Warner <warner@lothar.com>
3735 * buildbot/status/mail.py (MailNotifier.__init__): include
3736 success/warnings/failure in the Subject line
3737 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3738 use step.logname for the addLogs=True attachment filenames
3739 * buildbot/test/test_status.py (Mail): test Subject lines
3740 (Mail.testLogs): test attachment filenames
3742 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3743 accept a 'who' argument from the debug tool
3744 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3745 * contrib/debug.glade: add text box to set 'who'
3747 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3748 .getBuilderName with .getBuilder().getName(), more flexible
3749 (IStatusLog.getName): logs have short names, but you can prefix
3750 them with log.getStep().getName() to make them more useful
3751 * buildbot/status/builder.py: same
3752 * buildbot/status/client.py: same
3753 * buildbot/status/html.py: same
3754 * buildbot/test/test_run.py (Status.testSlave): same
3755 * buildbot/process/step.py: tweak logfile names
3757 * buildbot/status/mail.py (MailNotifier): add lookup, change
3758 argument to extraRecipients. The notifier is now aimed at sending
3759 mail to the people involved in a particular build, with additional
3760 constant recipients as a secondary function.
3762 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3763 including slow-lookup and failing-lookup. Make sure the blamelist
3764 members are included.
3766 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3767 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3768 (IBuildStatus.getInterestedUsers): new method
3769 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3770 * buildbot/status/client.py (remote_getResponsibleUsers): same
3771 * buildbot/status/html.py (StatusResourceBuild.body): same
3772 * buildbot/test/test_run.py (Status.testSlave): same
3774 2004-09-20 Brian Warner <warner@lothar.com>
3776 * docs/users.xhtml: update concepts
3778 * Makefile: add a convenience makefile, for things like 'make
3779 test'. It is not included in the source tarball.
3781 2004-09-16 Brian Warner <warner@lothar.com>
3783 * NEWS: mention /usr/bin/buildbot, debian/*
3785 * debian/*: add preliminary debian packaging. Many thanks to
3786 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3787 it considerably since it left their hands, I am responsible for
3788 all breakage that's resulted.
3790 * bin/buildbot: create a top-level 'buildbot' command, to be
3791 installed in /usr/bin/buildbot . For now it's just a simple
3792 frontend to mktap/twistd/kill, but eventually it will be the entry
3793 point to the 'try' command and also a status client. It is also
3794 intended to support the upcoming debian-packaging init.d scripts.
3795 * buildbot/scripts/runner.py: the real work is done here
3796 * buildbot/scripts/__init__.py: need this too
3797 * buildbot/scripts/sample.cfg: this is installed in new
3798 buildmaster directories
3799 * setup.py: install new stuff
3801 2004-09-15 Brian Warner <warner@lothar.com>
3803 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3804 'file:' schema (the version shipped with OS-X was built without the
3806 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3807 updates the log-timestamp, to make sure it isn't still running after
3810 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3811 values to the config file.
3812 * docs/examples/hello.cfg: add examples
3813 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3814 * buildbot/status/builder.py (Status.getProjectURL): implement them
3815 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3816 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3817 * buildbot/status/html.py (WaterfallStatusResource): display them
3820 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3821 certain error cases don't suffer a secondary exception.
3822 (top): Skip tests if the corresponding VC tool is not installed.
3824 * buildbot/process/factory.py (Trial): introduce separate
3825 'buildpython' and 'trialpython' lists, since trialpython=[] is
3826 what you want to invoke /usr/bin/python, whereas ./setup.py is
3827 less likely to be executable. Add env= parameter to pass options
3828 to test cases (which is how I usually write tests, I don't know if
3829 anyone else does it this way).
3831 * buildbot/process/step_twisted.py (Trial): handle python=None.
3832 Require 'testpath' be a string, not a list. Fix tests= typo.
3833 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3835 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3836 way to deal with the possibility of removing the disconnect notify
3838 (CVS): add a 'login' parameter to give a password to 'cvs login',
3839 commonly used with pserver methods (where pw="" or pw="guest")
3841 * buildbot/slave/commands.py (SourceBase): move common args
3842 extraction and setup() to __init__, so everything is ready by the
3843 time setup() is called
3844 (CVS.start): call 'cvs login' if a password was supplied
3845 (ShellCommand): special-case PYTHONPATH: prepend the master's
3846 value to any existing slave-local value.
3848 * buildbot/process/builder.py (Builder.updateBigStatus): if we
3849 don't have a remote, mark the builder as Offline. This whole
3850 function should probably go away and be replaced by individual
3852 (Builder.buildFinished): return the results to the build-finished
3853 deferred callback, helps with testing
3855 2004-09-14 Brian Warner <warner@lothar.com>
3857 * buildbot/test/test_vc.py: put all the repositories needed to run
3858 the complete tests into a single small (1.3MB) tarball, so I can
3859 make that tarball available on the buildbot web site. Test HTTP
3860 access (for Arch and Darcs) by spawning a temporary web server
3861 while the test runs.
3863 * docs/users.xhtml: new document, describe Buildbot's limited
3864 understanding of different human users
3866 * buildbot/test/test_vc.py: rearrange test cases a bit
3868 * buildbot/process/step_twisted.py (Trial): handle testpath=
3869 * buildbot/process/factory.py (Trial): update to use step.Trial
3871 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3873 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3874 the overall build text (which gives you 'failed 2 tests' rather
3876 (BuildStepStatus.text2): default to [], not None
3878 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3881 2004-09-12 Brian Warner <warner@lothar.com>
3883 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3884 log the whole exception if it's just an AttributeError (old slave)
3886 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3887 so (e.g.) sub-commands can be run in the right directory.
3888 (ShellCommand.start): accept an optional errorMessage= argument
3889 to make life easier for SVN.start
3890 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3892 (ShellCommand.start): move ['dir'] compatibility hack..
3893 (RemoteShellCommand.start): .. to here so everyone can use it
3895 * buildbot/process/step_twisted.py (Trial): use .workdir
3897 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3898 text displayed when debuild fails completely
3899 (Trial): snarf _trial_temp/test.log from the slave and display it
3901 2004-09-11 Brian Warner <warner@lothar.com>
3903 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3905 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3906 set to 'twisted', so --recurse can find twisted/web/test/*, etc
3908 * buildbot/process/step.py (ShellCommand): call .createSummary
3909 before .evaluateCommand instead of the other way around. This
3910 makes it slightly easier to count warnings and then use that to
3911 set results=WARNINGS
3912 * buildbot/process/step_twisted.py: cosmetic, swap the methods
3914 * buildbot/process/base.py (Build.buildFinished): update status
3915 before doing progress. It's embarrassing for the build to be stuck
3916 in the "building" state when an exceptions occurs elsewhere..
3918 * buildbot/status/progress.py (Expectations.expectedBuildTime):
3919 python2.2 doesn't have 'sum'
3921 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
3922 to prevent clients from accidentally sorting it
3924 * buildbot/master.py (Manhole): add username/password
3925 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
3926 c['manholePort'], deprecate old usage
3927 * docs/config.xhtml: document c['manhole']
3928 * docs/examples/hello.cfg: show example of using a Manhole
3931 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
3932 pretend the slave is up to date
3934 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
3935 the module, overlaps with 'log', the local variable
3937 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
3939 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
3940 new method to let Steps find out the version of their
3941 corresponding SlaveCommand.
3942 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
3943 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
3944 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
3946 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
3947 (Arch.startVC): same
3948 (P4Sync.startVC): same
3950 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
3951 Deferred so we can catch errors in remote_startCommand
3952 (RemoteShellCommand.start): same
3954 * docs/examples/twisted_master.cfg: update sample config file
3956 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
3957 after connectionMade() is called, not before. Close stdin at that
3960 * buildbot/process/process_twisted.py: update to use Trial, clean
3961 up argument passing (move to argv arrays instead of string
3964 * buildbot/process/step_twisted.py (Trial): new step to replace
3965 RunUnitTests, usable by any trial-using project (not just
3966 Twisted). Arguments have changed, see the docstring for details.
3968 * buildbot/process/base.py (Build.startBuild): this now returns a
3969 Deferred. Exceptions that occur during setupBuild are now
3970 caught better and lead to fewer build_status weirdnesses, like
3971 finishing a build that was never started.
3972 (Build.buildFinished): fire the Deferred instead of calling
3973 builder.buildFinished directly. The callback argument is this
3974 Build, everything else can be extracted from it, including the
3975 new build.results attribute.
3976 * buildbot/process/builder.py (Builder.startBuild): same
3977 (Builder.buildFinished): same, extract results from build
3979 * buildbot/process/step.py (ShellCommands): remove dead code
3981 2004-09-08 Brian Warner <warner@lothar.com>
3983 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
3984 doesn't try to use the leftover patched workdir
3985 (SourceStamp): test source-stamp computation for CVS and SVN
3987 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
3988 patched workdir ('touch .buildbot-patched') so we don't try to
3990 (SourceBase.start): add ['revision'] for all Source steps
3991 (CVS): change args: use ['branch'] for -r, remove ['files']
3992 (CVS.buildVC): fix revision/branch stuff
3993 (SVN): add revision stuff
3995 * buildbot/process/step.py (BuildStep.__init__): reject unknown
3996 kwargs (except 'workdir') to avoid silent spelling errors
3997 (ShellCommand.__init__): same
3998 (Source): new base class for CVS/SVN/etc. Factor out everything
3999 common, add revision computation (perform the checkout with a -D
4000 DATE or -r REVISION that gets exactly the sources described by the
4001 last Change), overridable with step.alwaysUseLatest. Add patch
4002 handling (build.getSourceStamp can trigger the use of a base
4003 revision and a patch).
4004 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4005 * docs/steps.xhtml: update docs
4006 * docs/source.xhtml: mention .checkoutDelay
4007 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4009 * buildbot/process/base.py (Build.setSourceStamp): add a
4010 .sourceStamp attribute to each Build. If set, this indicates that
4011 the build should be done with something other than the most
4012 recent source tree. This will be used to implement "try" builds.
4013 (Build.allChanges): new support method
4014 (Build.lastChangeTime): remove, functionality moved to Source steps
4015 (Build.setupBuild): copy the Step args before adding ['workdir'],
4016 to avoid modifying the BuildFactory (and thus triggering spurious
4020 * buildbot/status/html.py: rename s/commits/changes/
4021 (StatusResourceChanges): same
4022 (CommitBox.getBox): same, update URL
4023 (WaterfallStatusResource): same
4024 (StatusResource.getChild): same
4026 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4027 * contrib/debug.glade: add optional 'revision' to the fakeChange
4029 * buildbot/changes/changes.py (html_tmpl): display .revision
4030 (ChangeMaster.addChange): note .revision in log
4031 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4032 accept a ['revision'] attribute
4034 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4036 * buildbot/master.py (BotMaster.getPerspective): update the
4037 .connected flag in SlaveStatus when it connects
4038 (BotMaster.detach): and when it disconnects
4039 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4040 (BuildMaster.loadConfig_Builders): walk old list correctly
4042 * buildbot/test/test_config.py: fix prefix= usage
4044 2004-09-06 Brian Warner <warner@lothar.com>
4048 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4049 poll a P4 depot looking for recent changes. Thanks to Dave
4050 Peticolas for the contribution. Probably needs some testing after
4053 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4054 requires manual client setup for each buildslave. Rather
4055 experimental. Thanks again to Dave Peticolas.
4056 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4058 * buildbot/changes/changes.py (Change): add a .revision attribute,
4059 which will eventually be used to generate source-stamp values.
4061 * buildbot/process/step.py (RemoteCommand.start): use
4062 notifyOnDisconnect to notice when we lose the slave, then treat it
4063 like an exception. This allows LogFiles to be closed and the build
4064 to be wrapped up normally. Be sure to remove the disconnect
4065 notification when the step completes so we don't accumulate a
4066 bazillion such notifications which will fire weeks later (when the
4067 slave finally disconnects normally). Fixes SF#915807, thanks to
4068 spiv (Andrew Bennetts) for the report.
4069 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4070 really isn't Logged- specific
4071 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4072 header, since it's almost always going to be appended to an
4074 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4075 update test to handle use of notifyOnDisconnect
4077 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4078 don't clear .ETA and .currentBuild when going offline, let the
4079 current build clean up after itself
4081 * buildbot/process/builder.py (Builder.detached): wait a moment
4082 before doing things like stopping the current build, because the
4083 current step will probably notice the disconnect and cleanup the
4085 * buildbot/test/test_run.py (Status.tearDown): update test to
4086 handle asynchronous build-detachment
4088 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4090 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4091 hush a debug message
4093 2004-09-05 Brian Warner <warner@lothar.com>
4095 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4096 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4097 kernels do this: the fcntl module has the F_NOTIFY constant, but
4098 the kernel itself doesn't support the operation. Thanks to Olly
4099 Betts for spotting the problem.
4101 * buildbot/process/step.py (Darcs): new source-checkout command
4102 (Arch): new source-checkout command
4103 (todo_P4): fix constructor syntax, still just a placeholder
4104 * buildbot/test/test_vc.py (VC.testDarcs): test it
4105 (VC.testDarcsHTTP): same, via localhost HTTP
4107 (VC.testArchHTTP): same
4108 * NEWS: mention new features
4110 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4111 which tells the step to stash stdout text locally (in .stdout).
4112 Slave-side Commands can use this to make decisions based upon the
4113 output of the the ShellCommand (not just the exit code).
4114 (Darcs): New source-checkout command
4115 (Arch): New source-checkout command, uses .keepStdout in one place
4116 where it needs to discover the archive's default name.
4118 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4119 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4120 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4122 * buildbot/process/step.py (ShellCommand.describe): add an
4123 alternate .descriptionDone attribute which provides descriptive
4124 text when the step is complete. .description can be ["compiling"],
4125 for use while the step is running, then .descriptionDone can be
4126 ["compile"], used alone when the step succeeds or with "failed" when
4127 it does not. Updated other steps to use the new text.
4128 * buildbot/process/step_twisted.py: same
4129 * buildbot/test/test_run.py: update tests to match
4131 2004-08-30 Brian Warner <warner@lothar.com>
4133 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4134 (CVS.__init__): send 'patch' argument to slave
4135 (CVS.start): don't create the LoggedRemoteCommand until start(),
4136 so we can catch a .patch added after __init__
4137 (SVN.__init__): add 'patch' to SVN too
4140 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4141 argument, to let commands push data into the process' stdin pipe.
4142 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4143 is in use, since closing a PTY doesn't really affect the process
4144 in the right way (in particular, I couldn't run /usr/bin/patch
4146 (SourceBase.doPatch): handle 'patch' argument
4148 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4151 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4152 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4154 * buildbot/master.py (BotPerspective.got_commands): get command
4155 versions from slave, give to each builder
4156 * buildbot/process/builder.py (Builder.attached): stash slave
4157 command versions in .remoteCommands
4159 * docs/steps.xhtml: bring docs in-line with reality
4161 * buildbot/process/step.py (CVS.__init__): more brutal
4162 compatibility code removal
4163 (SVN.__init__): same
4165 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4166 (SlaveShellCommand.start): require ['workdir'] argument, remove
4167 the ['dir'] fallback (compatibility will come later)
4168 (SourceBase): update docs
4169 (SourceBase.start): remove ['directory'] fallback
4172 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4173 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4174 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4176 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4177 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4178 code.. I will figure out 0.5.0-compatibility hooks later)
4180 2004-08-30 Brian Warner <warner@lothar.com>
4182 * buildbot/process/process_twisted.py: rewrite in terms of new
4183 BuildFactory base class. It got significantly shorter. Yay
4186 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4187 work with the new "self.build isn't nailed down until we call
4188 step.start()" scheme: specifically, __init__ is called before the
4189 build has decided on which Changes are going in, so we don't scan
4190 build.allFiles() for .xhtml files until start()
4191 (HLint.commandComplete): use getText(), not getStdout()
4192 (RunUnitTests.start): same: don't use .build until start()
4193 (RunUnitTests.describe): oops, don't report (None) when using
4195 (RunUnitTests.commandComplete): use getText()
4196 (RunUnitTests.createSummary): same
4197 (BuildDebs.commandComplete): same
4199 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4200 set args['command'] until start(), since our BuildStep is allowed
4201 to change their mind up until that point
4202 (TreeSize.commandComplete): use getText(), not getStdout()
4204 * docs/examples/twisted_master.cfg: update to current standards
4206 * docs/factories.xhtml: update
4207 * buildbot/process/factory.py: implement all the common factories
4208 described in the docs. The Trial factory doesn't work yet, and
4209 I've probably broken all the process_twisted.py factories in the
4210 process. There are compatibility classes left in for things like
4211 the old BasicBuildFactory, but subclasses of them are unlikely to
4213 * docs/examples/glib_master.cfg: use new BuildFactories
4214 * docs/examples/hello.cfg: same
4216 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4217 explicit 'workdir' args
4219 * buildbot/process/base.py (BuildFactory): move factories to ..
4220 * buildbot/process/factory.py (BuildFactory): .. here
4221 * buildbot/process/process_twisted.py: handle move
4222 * buildbot/test/test_config.py: same
4223 * buildbot/test/test_run.py: same
4224 * buildbot/test/test_steps.py: same
4225 * buildbot/test/test_vc.py: same
4226 * docs/factories.xhtml: same
4228 * NEWS: mention config changes that require updating master.cfg
4230 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4231 argument to all steps that weren't given one already, pointing at
4232 the "build/" directory.
4234 * docs/examples/hello.cfg: remove explicit 'workdir' args
4236 * docs/factories.xhtml: document standard BuildFactory clases,
4237 including a bunch which are have not yet been written
4239 2004-08-29 Brian Warner <warner@lothar.com>
4241 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4242 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4243 buildbot.status.builder so they aren't quite so internal
4244 * buildbot/process/base.py, buildbot/process/builder.py: same
4245 * buildbot/process/maxq.py, buildbot/process/step.py: same
4246 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4247 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4248 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4250 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4251 to handle new getLogs()-returns-list behavior
4252 (StatusResourceBuildStep.getChild): same
4253 (StepBox.getBox): same
4254 (WaterfallStatusResource.phase0): same
4256 * docs/source.xhtml: document how Buildbot uses version-control
4257 systems (output side: how we get source trees)
4258 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4259 systems (input side: how we learn about Changes)
4261 * buildbot/master.py (Manhole): use ComparableMixin
4262 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4263 * buildbot/changes/mail.py (MaildirSource): same
4264 * buildbot/status/client.py (PBListener): same
4265 * buildbot/status/html.py (Waterfall): same
4266 * buildbot/status/words.py (IRC): same
4268 * NEWS: start describing new features
4270 * buildbot/status/mail.py (MailNotifier): finish implementation.
4271 The message body is still a bit sparse.
4272 * buildbot/test/test_status.py (Mail): test it
4274 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4275 and __hash__ methods I wind up adding everywhere. Specifically
4276 intended to support the buildbot config-file update scheme where
4277 we compare, say, the old list of IStatusTargets against the new
4278 one and don't touch something which shows up on both lists.
4279 * buildbot/test/test_util.py (Compare): test case for it
4281 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4282 return a list instead of a dict
4283 (IBuildStepStatus.getLogs): same. The idea is that steps create
4284 logs with vaguely unique names (although their uniqueness is not
4285 guaranteed). Thus a compilation step should create its sole
4286 logfile with the name 'compile', and contribute it to the
4287 BuildStatus. If a step has two logfiles, try to create them with
4288 different names (like 'test.log' and 'test.summary'), and only
4289 contribute the important ones to the overall BuildStatus.
4290 * buildbot/status/builder.py (Event.getLogs): same
4291 (BuildStepStatus): fix default .text and .results
4292 (BuildStepStatus.addLog): switch to list-like .getLogs()
4293 (BuildStepStatus.stepFinished): same
4294 (BuildStatus.text): fix default .text
4295 (BuildStatus.getLogs): temporary hack to return all logs (from all
4296 child BuildStepStatus objects). Needs to be fixed to only report
4297 the significant ones (as contributed by the steps themselves)
4298 * buildbot/test/test_run.py: handle list-like .getLogs()
4299 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4301 2004-08-28 Brian Warner <warner@lothar.com>
4303 * buildbot/process/builder.py (Builder.attached): serialize the
4304 attachment process, so the attach-watcher isn't called until the
4305 slave is really available. Add detached watchers too, which makes
4308 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4310 * buildbot/test/test_swap.py: remove dead code
4312 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4313 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4314 sort of as if the command being run exited with a -1. There may
4315 still be some holes in this scheme.
4316 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4317 -r option appears before the module list
4318 * buildbot/process/step.py (CVS): add 'revision' argument
4320 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4321 when sending updates or stepComplete messages to the master, since
4322 we don't currently care whether they arrive or not. When we revamp
4323 the master/slave protocol to really resume interrupted builds,
4324 this will need revisiting.
4325 (lostRemote): remove spurious print
4327 * buildbot/master.py (BotPerspective.attached): serialize the
4328 new-builder interrogation process, to make testing easier
4329 (BotMaster.waitUntilBuilderDetached): convenience function
4331 * buildbot/status/builder.py (BuilderStatus): prune old builds
4332 (BuildStatus.pruneSteps): .. and steps
4333 (BuildStepStatus.pruneLogs): .. and logs
4334 (BuilderStatus.getBuild): handle missing builds
4335 * buildbot/status/html.py (StatusResourceBuild.body): display build
4336 status in the per-build page
4337 (BuildBox.getBox): color finished builds in the per-build box
4339 2004-08-27 Brian Warner <warner@lothar.com>
4341 * buildbot/status/mail.py (MailNotifier): new notification class,
4344 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4345 variants of a common base class which handles all the mode= logic
4347 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4349 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4351 2004-08-26 Brian Warner <warner@lothar.com>
4353 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4356 * buildbot/test/test_run.py: update to new Logfile interface, new
4357 buildbot.slave modules
4358 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4360 * MANIFEST.in: new sample config file
4361 * docs/examples/hello.cfg: same
4363 * buildbot/process/step_twisted.py: remove dead import
4365 * buildbot/process/step.py (RemoteCommand.run): catch errors
4367 (RemoteCommand.remote_update): ignore updates that arrive after
4369 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4370 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4371 the responsibilities of the subclass's methods
4372 (BuildStep.failed): catch errors during failure processing
4373 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4374 (CVS): move to a mode= argument (described in docstring), rather
4375 than the ungainly clobber=/export=/copydir= combination.
4376 (SVN): add mode= functionality to SVN too
4377 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4379 * buildbot/process/base.py (Build.startNextStep): catch errors
4380 during s.startStep()
4382 * buildbot/clients/base.py: update to new PB client interface.
4383 gtkPanes is still broken
4385 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4386 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4387 * setup.py: add buildbot.slave module
4388 * buildbot/bb_tap.py: handle move
4389 * buildbot/slave/registry.py: place to register commands, w/versions
4390 * buildbot/slave/bot.py: major simplifications
4391 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4392 instead of a fixed table. Eventually this will make the slave more
4393 extensible. Use 'start' method on the command, not .startCommand.
4394 Fix unsafeTracebacks handling (I think).
4395 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4396 helper class with a .start method that returns a Deferred.
4397 SlaveShellCommand is the form reached by the buildmaster. Commands
4398 which use multiple ShellCommands can just chain them as Deferreds,
4399 with some helper methods in Command (_abandonOnFailure and
4400 _checkAbandoned) to bail on rc!=0.
4401 (CVSCommand): prefer new mode= argument
4402 (SVNFetch): add mode= argument
4404 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4405 put a useful reason string on the build
4407 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4408 core functionality into an IStatusLog object
4409 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4410 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4411 (StatusResourceBuild.body): use proper accessor methods
4412 * buildbot/status/client.py (RemoteLog): PB-access goes here
4413 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4414 which delivers log contents too
4415 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4416 * buildbot/status/event.py: remove old Logfile completely
4418 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4419 subscription interface for IStatusLog subscriptions just like all
4420 other the status subscriptions
4421 (IStatusReceiver.logChunk): method called on subscribers
4423 2004-08-24 Brian Warner <warner@lothar.com>
4425 * buildbot/process/builder.py (Builder._pong): oops, ping response
4426 includes a result (the implicit None returned by remote_print).
4427 Accept it so the _pong method handles the response correctly.
4429 2004-08-06 Brian Warner <warner@lothar.com>
4431 * buildbot/test/test_config.py: update IRC, PBListener tests
4433 * buildbot/status/client.py (StatusClientPerspective): total
4434 rewrite to match new IStatus interfaces. New subscription scheme.
4435 There are still a few optimizations to make (sending down extra
4436 information with event messages so the client doesn't have to do a
4437 round trip). The logfile-retrieval code is probably still broken.
4438 Moved the PB service into its own port, you can no longer share a
4439 TCP socket between a PBListener and, say, the slaveport (this
4440 should be fixed eventually).
4441 * buildbot/clients/base.py (Client): revamp to match. still needs
4442 a lot of work, but basic event reporting works fine. gtkPanes is
4445 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4446 instance talks to a single irc server. Threw out all the old
4447 multi-server handling code. Still need to add back in
4448 builder-control (i.e. "force build")
4450 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4451 more random text to the as-yet-unreachable per-step page
4453 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4454 rename to stepETAUpdate
4455 (BuildStatus.subscribe): add build-wide ETA updates
4456 (BuilderStatus.getState): remove more cruft
4457 (BuilderStatus.getCurrentBuild): remove more cruft
4458 (BuilderStatus.buildStarted): really handle tuple-subscription
4459 * buildbot/test/test_run.py (Status.testSlave): handle the
4460 stepETAUpdate rename
4462 * buildbot/master.py (BuildMaster): don't add a default
4463 StatusClientService. Don't add a default IrcStatusFactory. Both
4464 are now added through c['status'] in the config file. c['irc'] is
4465 accepted for backwards compatibility, the only quirk is you cannot
4466 use c['irc'] to specify IRC servers on ports other than 6667.
4468 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4469 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4470 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4471 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4474 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4475 the buildmaster to re-read its config file
4478 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4479 find out the port our server is running on
4480 (WebTest.test_webPathname_port): same
4482 * buildbot/test/test_config.py (testWebPortnum): test it
4483 (testWebPathname): ditto
4485 * docs/config.xhtml: document new c['status'] configuration option
4487 * buildbot/status/html.py (Waterfall): new top-level class which
4488 can be added to c['status']. This creates the Site as well as the
4489 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4490 reachable as .parent, for everything.
4492 * buildbot/master.py (Manhole): make it a normal service Child
4493 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4494 webPathname. It will eventually replace c['irc'] and the implicit
4495 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4496 in as (deprecated) backward compatibility hooks for now.
4499 * buildbot/process/builder.py (Builder.buildFinished): don't
4500 inform out builder_status about a finished build, as it finds out
4501 through its child BuildStatus object
4503 * buildbot/status/html.py: extensive revamp. Use adapters to make
4504 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4505 have both starting and finishing times and adjust the waterfall
4506 display accordingly, using spacers if necessary. Use SlaveStatus
4507 to get buildslave info.
4508 (StatusResourceBuildStep): new just-one-step resource, used to get
4509 logfiles. No actual href to it yet.
4511 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4512 the time being, until I get the file-naming scheme right
4514 * buildbot/status/builder.py (Event): clean started/finished names
4515 (BuildStatus.isFinished): .finished is not None is the right test
4516 (BuildStatus.buildStarted): track started/finished times ourselves
4517 (BuilderStatus.getSlave): provide access to SlaveStatus object
4518 (BuilderStatus.getLastFinishedBuild): all builds are now in
4519 .builds, even the currently-running one. Accomodate this change.
4520 (BuilderStatus.eventGenerator): new per-builder event generator.
4521 Returns BuildStepStatus and BuildStatus objects, since they can
4522 both be adapted as necessary.
4523 (BuilderStatus.addEvent): clean up started/finished attributes
4524 (BuilderStatus.startBuild,finishBuild): remove dead code
4525 (SlaveStatus): new object to provide ISlaveStatus
4527 * buildbot/process/step.py (ShellCommand.getColor): actually
4528 return the color instead of setting it ourselves
4529 (CVS.__init__): pull .timeout and .workdir options out of
4530 **kwargs, since BuildStep will ignore them. Without this neither
4531 will be sent to the slave correctly.
4532 (SVN.__init__): same
4534 * buildbot/process/builder.py (Builder): move flags to class-level
4536 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4537 SlaveStatus handle that
4539 * buildbot/process/base.py (Build.firstEvent): remove dead code
4540 (Build.stopBuild): bugfix
4542 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4544 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4545 (ChangeMaster.eventGenerator): yield Changes, since there are now
4546 Adapters to turn them into HTML boxes
4548 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4549 (BotPerspective.attached): feed a SlaveStatus object
4550 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4551 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4553 * buildbot/interfaces.py: API additions
4554 (ISlaveStatus): place to get slave status
4556 2004-08-04 Brian Warner <warner@lothar.com>
4558 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4559 the delay finishes, so the step is marked as SUCCESS
4561 * buildbot/test/test_run.py (Status.testSlave): cover more of
4562 IBuildStatus and IBuildStepStatus
4564 * buildbot/status/progress.py (StepProgress): move some flags to
4565 class-level attributes
4566 (StepProgress.remaining): if there are no other progress metrics
4567 to go by, fall back to elapsed time
4568 (StepProgress.setExpectations): take a dict of metrics instead of
4570 (BuildProgress.setExpectationsFrom): pull expectations from the
4571 Expectations, instead of having it push them to the BuildProgress
4572 (Expectations): move some flags to class-level attributes
4573 (Expectations.__init__): copy per-step times from the
4575 (Expectations.expectedBuildTime): new method for per-build ETA
4577 * buildbot/status/event.py (Logfile): move some flags to
4578 class-level attributes
4579 (Logfile.logProgressTo): better method name, let step set the
4580 progress axis name (instead of always being "output")
4582 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4583 times directly, rather than depending upon the (possibly missing)
4584 .progress object. Use 'None' to indicate "not started/finished
4586 (BuildStepStatus.getExpectations): oops, return the full list of
4588 (BuilderStatus._buildFinished): append finished builds to .builds
4590 * buildbot/process/step.py (BuildStep): add separate .useProgress
4591 flag, since empty .progressMetrics[] still implies that time is a
4593 (CVS): set up the cmd in __init__, instead of waiting for start()
4595 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4596 calculation, this will eventually turn into a proper sourceStamp
4597 (Build.setupBuild): tell the Progress to load from the Expectations,
4598 instead of having the Expectations stuff things into the Progress
4599 (Build.buildException): add a build-level errback to make sure the
4600 build's Deferred fires even in case of exceptions
4602 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4604 * buildbot/process/builder.py (Builder.forceBuild): convey the
4605 reason instead of creating a fake Change
4607 * docs/examples/twisted_master.cfg: update to match reality
4609 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4610 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4611 fix or remove broken/breaking tests
4613 * buildbot/status/event.py (Logfile.__len__): remove evil method
4615 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4616 missing .build, for test convenience
4618 * buildbot/process/step_twisted.py: import fixes
4620 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4622 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4623 .statusbag reference
4625 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4626 connection at shutdown, and stop it from reconnecting
4628 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4629 chase down remote-execution bugs
4631 * buildbot/process/step.py: more fixes, remove
4632 BuildStep.setStatus()
4633 * buildbot/status/builder.py: move setStatus() functionality into
4635 * buildbot/status/event.py: minor fixes
4637 2004-08-03 Brian Warner <warner@lothar.com>
4639 * buildbot/process/base.py, buildbot/process/builder.py
4640 * buildbot/process/step.py, buildbot/status/builder.py
4641 * buildbot/status/event.py, buildbot/test/test_run.py:
4642 fix status delivery, get a basic test case working
4643 * buildbot/master.py: finish implementing basic status delivery,
4644 temporarily disable HTML/IRC/PB status sources
4646 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4648 * buildbot/status/progress.py (BuildProgress): remove dead code
4650 * buildbot/interfaces.py
4651 * buildbot/process/base.py, buildbot/process/builder.py
4652 * buildbot/process/step.py, buildbot/process/step_twisted.py
4653 * buildbot/status/builder.py: Complete overhaul of the all
4654 status-delivery code, unifying all types of status clients (HTML,
4655 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4656 look like. This commit is a checkpointing of the work-in-progress:
4657 the input side is mostly done (Builders/Builds sending status
4658 to the BuilderStatus/BuildStatus objects), but the output side has
4659 not yet been started (HTML resources querying BuilderStatus
4660 objects). Things are probably very broken right now and may remain
4661 so for several weeks, I apologize for the disruption.
4663 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4664 HTML as the log's contents. Currently used for exception tracebacks.
4665 * buildbot/status/progress.py: minor spelling changes
4667 2004-08-02 Brian Warner <warner@lothar.com>
4669 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4670 in mozilla. Also added stylesheets copied from Twisted's docs.
4671 Remember that these files are meant to be run through Lore first.
4672 Thanks to Philipp Frauenfelder for the fixes.
4673 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4674 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4675 * docs/template.tpl: added a Lore template
4677 2004-07-29 Brian Warner <warner@lothar.com>
4679 * buildbot/interfaces.py: revamp status delivery. This is the
4680 preview: these are the Interfaces that will be provided by new
4681 Builder code, and to which the current HTML/IRC/PB status
4682 displayers will be adapted.
4684 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4685 on the SlaveBuilder, not the Bot.
4686 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4688 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4689 set .usePTY on the FakeSlaveBuilder
4691 2004-07-25 Brian Warner <warner@lothar.com>
4693 * buildbot/changes/freshcvs.py: add some debug log messages
4694 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4695 disabled 'setFilter' syntax
4696 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4697 don't end with a slash
4699 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4701 * setup.py: bump to 0.5.0+ while between releases
4703 2004-07-23 Brian Warner <warner@lothar.com>
4705 * setup.py (version): Releasing buildbot-0.5.0
4707 2004-07-23 Brian Warner <warner@lothar.com>
4709 * README: update for 0.5.0 release
4711 * NEWS: update for 0.5.0 release
4713 2004-07-22 Brian Warner <warner@lothar.com>
4715 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4716 mktap-time configuration flag (--usepty=1, --usepty=0)
4717 * buildbot/bot.py: same
4719 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4720 an 'info' directory being unwanted
4722 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4723 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4724 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4725 and earlier), use a FreshCVSSourceOldcred instead.
4726 (test): simple test routine: connect to server, print changes
4728 * buildbot/changes/changes.py (Change.getTime): make it possible
4729 to print un-timestamped changes
4731 * buildbot/master.py (makeApp): delete ancient dead code
4732 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4733 * buildbot/test/test_config.py (testFindConfigFile): test it
4735 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4736 instead of win32 one
4739 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4740 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4743 * buildbot/process/base.py (Builder.__init__): change constructor
4744 to accept a dictionary of config data, rather than discrete
4745 name/slave/builddir/factory arguments
4747 * docs/examples/twisted_master.cfg: update to new syntax
4748 * docs/examples/glib_master.cfg: same
4749 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4750 rough tests of the new syntax
4753 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4754 to be an int, which means "run a web.distrib sub-server on a TCP
4755 port". This lets you publish the buildbot status page to a remote
4756 twisted.web server (using distrib.ResourceSubscription). Also
4757 rename the local attributes used to hold these web things so
4758 they're more in touch with reality.
4759 * buildbot/test/test_web.py: test webPortnum and webPathname
4760 * docs/config.xhtml: document this new use of webPathname
4762 * docs/config.xhtml: new document, slightly ahead of reality
4764 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4765 'prefix' handling: treat it as a simple string to check with
4766 .startswith, instead of treating it as a directory. This allows
4767 sub-directories to be used. If you use prefix=, you should give it
4768 a string that starts just below the CVSROOT and ends with a slash.
4769 This prefix will be stripped from all filenames, and filenames
4770 which do not start with it will be ignored.
4772 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4774 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4775 and --exclude (inverse of --include). SVN post-commit hooks
4776 now have total control over which changes get sent to buildbot and which
4779 2004-07-10 Brian Warner <warner@lothar.com>
4781 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4782 test case to match new API
4784 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4785 which crashed HTML display when self.entries=[] (needed to
4786 distinguish between [], which means "no entries yet", and None,
4787 which means "the entries have been swapped out to disk, go fetch
4790 2004-07-04 Brian Warner <warner@lothar.com>
4792 * buildbot/process/step_twisted.py (countFailedTests): Count
4793 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4794 10kb from the end because any import errors are wedged there and
4795 they would make us think the test log was unparseable.
4796 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4798 2004-06-26 Brian Warner <warner@lothar.com>
4800 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4801 delete-*.pyc command into an actual BuildStep, so we can label it
4803 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4804 (FullTwistedBuildFactory): same
4806 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4808 * contrib/fakechange.py: Add an errback when sending the fake
4809 change, so we know it didn't work.
4811 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4813 * buildbot/process/step_twisted.py: Delete *.pyc files before
4814 calling trial, so it doesn't catch any old .pyc files whose .py
4815 files have been moved or deleted.
4817 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4818 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4819 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4820 instead of ["twisted.test"], so that the end result is "trial -R
4823 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4824 regular expression to match filenames that should be ignored when
4825 changed. Also add a --revision parameter that specifies the
4826 revision to examine, which is useful for debugging.
4828 2004-06-25 Brian Warner <warner@lothar.com>
4830 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4831 summary of warnings (like DeprecationWarnings), next to the
4834 2004-05-13 Brian Warner <warner@lothar.com>
4836 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4837 we now have a w32 build slave courtesy of Mike Taylor.
4839 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4840 so broken. Fixed a race condition that tripped up interlocked
4841 builds and caused the status to be stuck at "Interlocked" forever.
4842 The twisted buildbot's one interlocked build just so happened to
4843 never hit this case until recently (the feeding builds both pass
4844 before the interlocked build is attempted.. usually it has to wait
4846 (Builder._pong_failed): fix method signature
4848 * setup.py: bump to 0.4.3+ while between releases
4850 2004-04-30 Brian Warner <warner@lothar.com>
4852 * setup.py (version): Releasing buildbot-0.4.3
4854 2004-04-30 Brian Warner <warner@lothar.com>
4856 * MANIFEST.in: add the doc fragments in docs/*.xhtml
4858 * README: update for 0.4.3 release
4860 * NEWS: update for 0.4.3 release
4862 * buildbot/master.py (BuildMaster.__getstate__): make sure
4863 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4865 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4866 .trial as a class attribute, for upgrade from 0.4.2
4868 * buildbot/changes/changes.py (Change.links): add .links for
4871 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4872 .textWatchers and .htmlWatchers at save time, since they are both
4873 volatile, should allow smooth 0.4.2 upgrade
4875 * buildbot/process/step.py (CVS.finishStatus): catch failed
4876 CVS/SVN commands so we can make the status box red
4878 2004-04-29 Brian Warner <warner@lothar.com>
4880 * buildbot/changes/freshcvs.py
4881 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4882 code to do setFilter(), which tells the freshcvs daemon to not
4883 send us stuff that we're not interested in. I will uncomment it
4884 when a new version of CVSToys is available in which setFilter()
4885 actually works, and I get a chance to test it better.
4887 * docs/examples/twisted_master.cfg: start using a PBChangeSource
4889 * buildbot/master.py (Dispatcher): use a registration scheme
4890 instead of hardwired service names
4891 (BuildMaster): keep track of the Dispatcher to support
4894 * buildbot/changes/changes.py (ChangeMaster): create a distinct
4895 PBChangeSource class instead of having it be an undocumented
4896 internal feature of the ChangeMaster. Split out the code into a
4898 * buildbot/changes/pb.py (PBChangeSource): same
4899 * buildbot/test/test_changes.py: a few tests for PBChangeSource
4901 * docs/{factories|sources|steps}.xhtml: document some pieces
4903 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4904 using FCMaildirSource
4905 (f23osx): update OS-X builder to use python2.3, since the slave
4906 was updated to Panther (10.3.3)
4908 2004-03-21 Brian Warner <warner@lothar.com>
4910 * buildbot/process/process_twisted.py: factor out doCheckout, change
4911 to use SVN instead of CVS
4913 * buildbot/process/base.py (BasicBuildFactory): refactor to make
4914 an SVN subclass easier
4915 (BasicSVN): subclass which uses Subversion instead of CVS
4917 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
4919 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
4921 (CVSCommand.cvsComplete): don't assume chdir worked on win32
4923 2004-02-25 Brian Warner <warner@lothar.com>
4925 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
4926 is now either a list (which is passed to spawnProcess directly) or
4927 a string (which gets passed to /bin/sh -c). This removes the useSH
4928 flag and the ArgslistCommand class. Also send status header at the
4929 start and end of each command, instead of having the master-side
4931 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
4932 -r'. Update to use list-based arguments.
4933 (SVNFetch): use list-based arguments, use ['dir'] argument to
4935 * buildbot/test/test_steps.py (Commands): match changes
4937 * buildbot/process/step.py (InternalShellCommand.words): handle
4939 (SVN): inherit from CVS, cleanup
4941 * buildbot/status/event.py (Logfile.content): render in HTML, with
4942 stderr in red and headers (like the name of the command we're
4943 about to run) in blue. Add link to a second URL (url + "?text=1")
4944 to get just stdout/stderr in text/plain without markup. There is
4945 still a problem with .entries=None causing a crash, it seems to occur
4946 when the logfile is read before it is finished.
4948 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
4949 timeout to the keepalives, and use it to explicitly do a
4950 loseConnection instead of waiting for TCP to notice the loss. This
4951 ought to clear up the silent-lossage problem.
4952 (unsafeTracebacks): pass exception tracebacks back to the master,
4953 makes it much easier to debug problems
4955 2004-02-23 Brian Warner <warner@lothar.com>
4957 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
4958 the whole command to /bin/sh instead of execve [Johan Dahlin]
4959 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
4960 '-r HEAD' [Johan Dahlin]
4961 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
4963 * buildbot/changes/changes.py (Change): add links= argument, add
4964 asHTML method [Johan Dahlin]. Modified to make a bit more
4965 XHTMLish. Still not sure how to best use links= .
4967 * buildbot/status/html.py (StatusResourceCommits.getChild): use
4968 Change.asHTML to display the change, not asText
4970 * buildbot/status/html.py (StatusResourceBuilder): web button to
4973 * buildbot/test/test_run.py: test to actually start a buildmaster
4976 * MANIFEST.in: bring back accidentally-dropped test helper files
4978 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
4979 that require cvstoys if it is not installed
4981 * buildbot/process/step_twisted.py (RunUnitTests): allow other
4982 values of "bin/trial" [Dave Peticolas]
4983 (RunUnitTests.finishStatus): say "no tests run" instead of "0
4984 tests passed" when we didn't happen to run any tests
4986 * buildbot/process/step.py (Compile): use haltOnFailure instead of
4987 flunkOnFailure [Johan Dahlin]
4989 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
4990 multiple instances of the same Step class by suffixing "_2", etc,
4991 to the name until it is unique. This name needs to be unique
4992 because it is used as a key in the dictionary that tracks build
4994 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
4997 * buildbot/process/base.py (Builder.ping): add "ping slave" command
4999 2004-01-14 Brian Warner <warner@lothar.com>
5001 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5002 kicked from a channel, log it
5004 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5005 something over whatever IRC channels the buildmaster is currently
5006 connected to. Added to try and track down a problem in which the
5007 master thinks it is still connected but the IRCd doesn't see it. I
5008 used a styles.Versioned this time, so hopefully users won't have
5009 to rebuild their .tap files this time.
5010 * contrib/debug.glade: add a "Poke IRC" button
5011 * contrib/debugclient.py: same
5013 * setup.py: bump to 0.4.2+ while between releases
5015 2004-01-08 Brian Warner <warner@lothar.com>
5017 * setup.py (version): Releasing buildbot-0.4.2
5019 2004-01-08 Brian Warner <warner@lothar.com>
5021 * NEWS: update for 0.4.2 release
5023 * README: document how to run the tests, now that they all pass
5025 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5027 * buildbot/process/step.py (CVS): add a global_options= argument,
5028 which lets you set CVS global options for the command like "-r"
5029 for read-only checkout, or "-R" to avoid writing in the
5031 * buildbot/slavecommand.py (CVSCommand): same
5033 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5034 testing easier (it is turned off when testing, to avoid the
5037 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5038 to make it easier to test: break generateStepID() out to a
5039 separate function, only update statusbag if it exists.
5040 (ShellCommands): create useful text for dict-based commands too.
5042 * test/*, buildbot/test/*: move unit tests under the buildbot/
5044 * setup.py (packages): install buildbot.test too
5046 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5047 * buildbot/test/test_steps.py: fix it, tests pass now
5049 2004-01-06 Brian Warner <warner@lothar.com>
5051 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5052 freshcvs mail uses a slightly different syntax for new
5053 directories. Update parser to handle either.
5054 * test/test_mailparse.py (Test1.testMsg9): test for same
5056 2003-12-21 Brian Warner <warner@lothar.com>
5058 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5059 'warnOnWarnings' so that lintian errors mark the build orange
5061 2003-12-17 Brian Warner <warner@lothar.com>
5063 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5064 messages emitted by Bonsai, contributed by Stephen Davis.
5066 * test/*: moved all tests to use trial instead of unittest. Some
5067 still fail (test_steps, test_slavecommand, and test_process).
5069 * setup.py (version): bump to 0.4.1+ while between releases
5071 2003-12-09 Brian Warner <warner@lothar.com>
5073 * setup.py (version): Releasing buildbot-0.4.1
5075 2003-12-09 Brian Warner <warner@lothar.com>
5077 * NEWS: update for 0.4.1 release
5079 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5080 freebsd builder code a little bit
5082 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5083 don't try to compare attributes of different classes
5084 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5085 (MaildirSource.messageReceived): fix Change delivery
5087 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5088 into the config file's namespace before loading it, like the
5089 documentation claims it does
5090 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5091 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5092 daemon comes back online
5094 2003-12-08 Brian Warner <warner@lothar.com>
5096 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5097 so the example will work with online=0 as well
5099 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5100 fix the __implements__ line
5102 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5103 class a twisted.application.service.Service, use startService to
5106 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5107 directory fd instead of simple open(). I'm sure this used to work,
5108 but the current version of python refuses to open directories with
5111 2003-12-05 Brian Warner <warner@lothar.com>
5113 * setup.py (version): bump to 0.4.0+ while between releases
5115 2003-12-05 Brian Warner <warner@lothar.com>
5117 * setup.py (version): Releasing buildbot-0.4.0
5119 2003-12-05 Brian Warner <warner@lothar.com>
5121 * docs/examples/glib_master.cfg: replace old sample scripts with
5122 new-style config files
5123 * MANIFEST.in: include .cfg files in distribution tarball
5125 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5126 implement a dummy method to avoid the exception that occurs when
5127 freshcvs sends this to us.
5129 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5130 removed the method, as it broke reconnection. Apparently
5131 stopFactory is called each time the connection attempt fails. Must
5133 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5134 attribute before serialization, since without stopFactory the
5135 reconnect timer may still be active and they aren't serializable.
5137 * test/test_mailparse.py (ParseTest): test with 'self' argument
5139 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5140 argument, as these "functions" are invoked like methods from class
5141 attributes and therefore always get an instance as the first
5144 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5145 message: thanks to Stephen Davis for the catch
5147 2003-12-04 Brian Warner <warner@lothar.com>
5149 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5150 twisted's standard ReconnectingClientFactory. Handles both oldcred
5151 and newcred connections. Also has a bug-workaround for
5152 ReconnectingClientFactory serializing its connector when it
5155 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5156 pbutil. Replace makeApp stuff with proper newcred/mktap
5157 makeService(). Don't serialize Ephemerals on shutdown.
5159 * buildbot/changes/changes.py (ChangeMaster): make it a
5160 MultiService and add the sources as children, to get startService
5161 and stopService for free. This also gets rid of the .running flag.
5163 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5164 new pbutil, turn into a TCPClient at the same time (to get
5165 startService for free). Two variants exist: FreshCVSSourceOldcred
5166 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5167 yet, but when it does, we'll be ready).
5168 (FreshCVSSource.notify): handle paths which are empty after the
5169 prefix is stripped. This only happens when the top-level (prefix)
5170 directory is added, at the very beginning of a Repository's life.
5172 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5173 Now the only reconnecting code is in the factory where it belongs.
5174 (Builder.unsubscribe): unregister the disconnect callback when we
5175 delete the builder on command from the master (i.e. when the
5176 buildmaster is reconfigured and that builder goes away). This
5177 fixes a multiple-delete exception when the status client is shut
5179 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5182 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5183 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5185 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5187 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5188 a list of globs (ugh). The testdir will be searched for files
5189 named *.tests and run the tests in the order specified in each of
5190 those files. This allows for "dependancies" between tests to be
5193 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5194 argument to pass to run_maxq.py, instead of a glob.
5196 2003-10-17 Brian Warner <warner@lothar.com>
5198 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5199 files that live in the sandbox
5201 2003-10-15 Brian Warner <warner@lothar.com>
5203 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5204 spelling error in "docs" count-warnings output
5205 (HLint.start): stupid thinko meant .xhtml files were ignored
5207 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5208 tests now that cReactor is banished to the sandbox
5210 2003-10-10 Brian Warner <warner@lothar.com>
5212 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5213 scheme: now .xhtml are sources and .html are generated
5215 2003-10-08 Brian Warner <warner@lothar.com>
5217 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5218 we were ignoring the 'randomly' parameter.
5220 2003-10-01 Brian Warner <warner@lothar.com>
5222 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5223 posix, to kill sub-children of aborted slavecommands.
5225 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5226 Clean up initialization: lastBuildStatus remains None until the
5227 first build has been completed.
5229 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5230 None as a lastBuildStatus
5231 * buildbot/clients/gtkPanes.py: same
5233 * buildbot/status/client.py (StatusClientService): keep
5234 BuilderStatus objects in self.statusbags . These objects now live
5235 here in the StatusClientService and are referenced by the Builder
5236 object, rather than the other way around.
5237 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5238 * buildbot/process/base.py (Builder): same
5239 * test/test_config.py (ConfigTest.testBuilders): same
5241 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5242 an existing builder, leave the statusbag alone. This will preserve the
5245 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5246 hook. This will probably go away in favor of a class in upcoming
5249 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5250 serviceName from newcred FreshCVSNotifiee setup
5252 2003-09-29 Brian Warner <warner@lothar.com>
5254 * buildbot/process/process_twisted.py: switch to new reactor
5256 * docs/examples/twisted_master.cfg: same
5258 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5260 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5261 botmaster reference instead of the oldapp service lookup
5263 * buildbot/master.py (BuildMaster.__init__): give the
5264 StatusClientService a reference to the botmaster to make it easier to
5267 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5269 * buildbot/status/html.py (Box.td): escape hreffy things so you
5270 can have spaces in things like builder names
5271 (StatusResourceBuilder.body)
5272 (WaterfallStatusResource.body)
5273 (WaterfallStatusResource.body0): same
5275 2003-09-25 Brian Warner <warner@lothar.com>
5277 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5278 rearrange the builder list when adding or removing builders: keep
5279 them in the order the user requested.
5280 * test/test_config.py (ConfigTest.testBuilders): verify it
5282 * contrib/debug.glade: give the debug window a name
5284 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5285 now wait on multiple interlocks. Fix code relating to that.
5286 (Builder.checkInterlocks): same
5287 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5289 * buildbot/master.py (BuildMaster.loadConfig): move from
5290 deprecated pb.BrokerFactory to new pb.PBServerFactory
5291 * test/test_config.py (ConfigTest.testWebPathname): same
5293 * docs/examples/twisted_master.cfg: fix interlock declaration
5295 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5296 Interlocks to their Builders into interlock.py .
5297 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5299 * test/test_config.py (ConfigTest.testInterlocks): validate
5302 * buildbot/process/base.py (Builder.__init__): better comments
5303 * buildbot/process/interlock.py (Interlock.__repr__): same
5304 (Interlock.deactivate): add .active flag, move the code that
5305 attaches/detaches builders into the Interlock
5307 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5309 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5310 tests using the new run_maxq.py script, and reporting failures by
5313 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5314 tests, reporting their success or failure in a buildbot-friendly
5317 2003-09-24 Brian Warner <warner@lothar.com>
5319 * docs/examples/twisted_master.cfg: example of a new-style config
5320 file. This lives in the buildmaster base directory as
5323 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5324 button to make the master re-read its config file
5326 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5327 buildmaster configuration from a file. This file can be re-read
5328 later, and the buildmaster will update itself to match the new
5329 desired configuration. Also use new Twisted Application class.
5330 * test/Makefile, test/test_config.py: unit tests for same
5332 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5333 FreshCVSSources comparable, to support reload.
5334 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5336 * buildbot/process/base.py (Builder): make them comparable, make
5337 Interlocks easier to attach, to support reload. Handle
5338 re-attachment of remote slaves.
5339 * buildbot/process/interlock.py (Interlock): same
5341 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5342 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5343 buildmaster taps are now constructed with mktap.
5344 * buildbot/status/client.py (StatusClientService): same
5346 * buildbot/status/words.py: move to new Services, add support to
5347 connect to multiple networks, add reload support, allow nickname
5348 to be configured on a per-network basis
5350 2003-09-20 Brian Warner <warner@lothar.com>
5352 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5353 the freebsd builder, now that the machine has been upgraded and no
5354 longer has python2.2
5356 * setup.py (version): bump to 0.3.5+ while between releases
5358 2003-09-19 Brian Warner <warner@lothar.com>
5360 * setup.py (version): Releasing buildbot-0.3.5
5362 2003-09-19 Brian Warner <warner@lothar.com>
5364 * NEWS: add post-0.3.4 notes
5366 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5368 * MANIFEST.in: add contrib/*
5370 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5371 use a remote root now: cvs.twistedmatrix.com
5373 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5375 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5376 compatibility with old servers
5377 (FreshCVSSource.start): and provide a way to use it
5378 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5380 * docs/examples/twisted_master.py (twisted_app): update to new
5382 (twisted_app): listen on new ~buildbot socket
5383 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5385 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5386 to reduce cvs bandwidth (update instead of full checkout)
5388 2003-09-11 Brian Warner <warner@lothar.com>
5390 * contrib/fakechange.py: demo how to connect to the changemaster
5391 port. You can use this technique to submit changes to the
5392 buildmaster from source control systems that offer a hook to run a
5393 script when changes are committed.
5395 * contrib/debugclient.py: tool to connect to the debug port. You
5396 can use it to force builds, submit fake changes, and wiggle the
5399 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5400 'Dispatcher' realm to handle all the different kinds of
5401 connections and Perspectives: buildslaves, the changemaster port,
5402 the debug port, and the status client port. NewCredPerspectives
5403 now have .attached/.detached methods called with the remote 'mind'
5404 reference, much like old perspectives did. All the pb.Services
5405 turned into ordinary app.ApplicationServices .
5406 (DebugService): went away, DebugPerspectives are now created
5407 directly by the Dispatcher.
5408 (makeApp): changed interface a little bit
5410 * buildbot/changes/changes.py: newcred
5411 * buildbot/status/client.py: newcred
5413 * buildbot/clients/base.py: newcred client side changes
5414 * buildbot/bot.py: ditto
5416 * docs/examples/glib_master.py: handle new makeApp() interface
5417 * docs/examples/twisted_master.py: ditto
5419 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5420 base newcred Perspectives on. This should go away once Twisted
5421 itself provides something sensible.
5424 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5426 * contrib/svn_buildbot.py: A program that you can call from your
5427 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5428 when a change in an SVN repository has happened. See the top of
5429 the file for some minimal usage info.
5431 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5433 * buildbot/slavecommand.py (ArglistCommand): Add new
5434 ArglistCommand that takes an argument list rather than a string as
5435 a parameter. Using a st.split() for argv is very bad.
5437 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5438 update to a particular revision rather than always checking out
5439 (still not very smart about it, there may be cases where the
5440 checkout becomes inconsistent).
5442 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5444 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5445 SVN fetch support. It can checkout (not update!) a specified
5446 revision from a specified repository to a specified directory.
5448 * buildbot/status/progress.py (Expectations.update): Fix an
5449 obvious bug (apparently created by the change described in the
5450 previous ChangeLog message) by moving a check to *after* the
5451 variable it checks is defined.
5454 2003-09-08 Brian Warner <warner@lothar.com>
5456 * buildbot/status/progress.py (Expectations.update): hack to catch
5457 an exception TTimo sees: sometimes the update() method seems to
5458 get called before the step has actually finished, so the .stopTime
5459 is not set, so no totalTime() is available and we average None
5460 with the previous value. Catch this and just don't update the
5461 metrics, and emit a log message.
5463 2003-08-24 Brian Warner <warner@lothar.com>
5465 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5466 parameter to set copydir='original' in CVS commands.
5468 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5470 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5471 which tells the command to maintain a separate original-source CVS
5472 workspace. For each build, this workspace will be updated, then
5473 the tree copied into a new workdir. This reduces CVS bandwidth
5474 (from a full checkout to a mere update) while doubling the local
5475 disk usage (to keep two copies of the tree).
5477 2003-08-21 Brian Warner <warner@lothar.com>
5479 * buildbot/status/event.py (Logfile.addEntry): if the master web
5480 server dies while we're serving a page, request.write raises
5481 pb.DeadReferenceError . Catch this and treat it like a
5482 notifyFinish event by dropping the request.
5484 2003-08-18 Brian Warner <warner@lothar.com>
5486 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5487 (instead of blowing up) if a force-build command is given without
5490 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5491 don't blow up if there aren't yet any Changes in the list
5493 2003-08-02 Brian Warner <warner@lothar.com>
5495 * buildbot/bot.py (updateApplication): don't set the .tap name,
5496 since we shouldn't assume we own the whole .tap file
5498 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5499 'mktap buildbot' (without a subcommand) better
5501 2003-07-29 Brian Warner <warner@lothar.com>
5503 * buildbot/status/words.py
5504 (IrcStatusFactory.clientConnectionLost): when we lose the
5505 connection to the IRC server, schedule a reconnection attempt.
5507 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5508 use shutil.rmtree instead of forking off an "rm -rf" command.
5509 rmtree may take a while and will block until it finishes, so we
5510 use "rm -rf" if available.
5512 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5513 freebsd buildslave badly
5515 * setup.py (version): bump to 0.3.4+ while between releases
5517 2003-07-28 Brian Warner <warner@lothar.com>
5519 * setup.py (version): Releasing buildbot-0.3.4
5521 2003-07-28 Brian Warner <warner@lothar.com>
5523 * NEWS: update in preparation for release
5525 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5526 process.signalProcess instead of os.kill, to improve w32
5529 * docs/examples/twisted_master.py (twisted_app): turn off
5530 win32eventreactor: the tests hang the buildslave badly
5532 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5533 failed builds, since usually the failures are consistent
5535 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5536 add compileOpts/compileOpts2 to reactors build
5538 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5539 (twisted_app): use both default and win32eventreactor on w32 build.
5540 Use both default and kqreactor on freebsd build.
5542 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5543 add compileOpts2, which is put after the build_ext argument. w32
5544 needs "-c mingw32" here.
5546 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5547 touch .acqpath, it goes away in recent Twisted releases
5549 * docs/examples/twisted_master.py (twisted_app): use "python" for
5550 the w32 buildslave, not "python2.2"
5552 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5553 the directory exists.. should hush an exception under w32
5555 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5556 ProcessTerminated -provided values for signal and exitCode rather
5557 than parsing the unix status code directly. This should remove one
5558 more roadblock for a w32-hosted buildslave.
5560 * test/test_mailparse.py: add test cases for Syncmail parser
5562 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5563 temporary compatibility import. Note! Start importing
5564 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5566 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5568 2003-07-27 Brian Warner <warner@lothar.com>
5570 * NEWS: started adding new features
5572 * buildbot/changes/mail.py: start work on Syncmail parser, move
5573 mail sources into their own file
5575 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5576 as implementing IChangeSource
5577 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5579 * buildbot/interfaces.py: define the IChangeSource interface
5581 2003-07-26 Brian Warner <warner@lothar.com>
5583 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5585 2003-06-25 Brian Warner <warner@lothar.com>
5587 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5590 2003-06-17 Brian Warner <warner@lothar.com>
5592 * buildbot/status/words.py: clean up method usage to avoid error
5593 in silly IRC command
5594 (IrcStatusBot.emit_status): round off seconds display
5596 * buildbot/process/base.py (Build): delete the timer when saving
5597 to the .tap file, and restore it (if it should still be running)
5598 upon restore. This should fix the "next build in -34 seconds"
5599 messages that result when the master is restarted while builds are
5600 sitting in the .waiting slot. If the time for the build has
5601 already passed, start it very soon (in 1 second).
5603 * buildbot/status/words.py: more silly commands
5605 * README (REQUIREMENTS): add URLs to all required software
5607 * buildbot/status/words.py ('last'): mention results of, and time
5610 2003-05-28 Brian Warner <warner@lothar.com>
5612 * buildbot/status/words.py: add 'last' command
5613 (IrcStatusBot.emit_status): add current-small text to 'status' output
5615 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5616 (twisted_app): remove spaces from OS-X builder name
5618 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5619 * buildbot/status/words.py: IRC bot should actually be useful now
5621 2003-05-23 Brian Warner <warner@lothar.com>
5623 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5624 "slave information" from $(slavedir)/info/* . These files are
5625 maintained by the slave administrator, and describe the
5626 machine/environment that is hosting the slave. Information from
5627 them is put into the "Builder" HTML page. Still need to establish
5628 a set of well-known filenames and meanings for this data: at the
5629 moment, *all* info/* files are sent to the master, but only
5630 'admin' and 'host' are used on that end.
5631 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5632 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5633 * buildbot/master.py (BotPerspective.got_info): ditto
5635 2003-05-22 Brian Warner <warner@lothar.com>
5637 * setup.py (version): bump version to 0.3.3+ while between releases
5639 2003-05-21 Brian Warner <warner@lothar.com>
5641 * setup.py: Releasing buildbot-0.3.3
5643 2003-05-21 Brian Warner <warner@lothar.com>
5645 * NEWS: 0.3.3 news items
5647 * README: describe --keepalive and life behind a NAT box
5649 * buildbot/bot.py (Bot.connected): implement application-level
5650 keepalives to deal with NAT timeouts, turn them on with
5651 --keepalive option or when SO_KEEPALIVE doesn't work.
5653 * buildbot/master.py (BotPerspective): accept keepalives silently
5655 * buildbot/process/base.py (Build.buildException): CopiedFailures
5656 don't carry as much information as local ones, so don't try to
5657 create a big HTMLized version of them.
5659 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5660 log file when step fails due to an exception, such as when the slave
5663 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5664 --testmodule argument instead of grepping for test-case-name tags
5665 ourselves. Remove FindUnitTests code.
5666 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5668 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5670 2003-05-16 Brian Warner <warner@lothar.com>
5672 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5673 argument to allow things like CFLAGS=-O0 to be passed without relying
5674 upon /bin/sh processing on the slave.
5676 * buildbot/process/step.py (InternalShellCommand.start): send
5678 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5679 'split' instead of letting /bin/sh do it. This should also remove
5680 the need for /bin/sh on the buildslave, making it more likely to
5683 * buildbot/status/html.py: html-escape text in blamelist.
5684 Add "force build" button to the Builder page.
5686 * buildbot/process/step_twisted.py (countFailedTests): look at
5687 last 1000 characters for status line, as import errors can put it
5688 before the -200 point.
5690 2003-05-15 Brian Warner <warner@lothar.com>
5692 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5694 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5695 make 'clobber' a parameter, so it is possible to have builds which
5696 do full tests but do a cvs update instead of hammering the CVS
5697 server with a full checkout each build
5699 * buildbot/process/step.py (InternalShellCommand): bump default
5700 timeout to 20 minutes
5702 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5703 the master to trigger a build. Run it via manhole.
5705 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5706 allow slaves to trigger any build that they host, to make life
5707 easier for slave admins who are testing out new build processes
5709 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5710 don't flunk cReactor or qtreactor on failure, since they fail alot
5711 these days. Do warnOnFailure instead.
5713 * buildbot/process/base.py: change Builder.buildable from a list
5714 into a single slot. When we don't have a slave, new builds (once
5715 they make it past the timeout) are now merged into an existing
5716 buildable one instead of being queued. With this change, a slave
5717 which has been away for a while doesn't get pounded with all the
5718 builds it missed, but instead just does a single build.
5720 2003-05-07 Brian Warner <warner@lothar.com>
5722 * setup.py (version): bump version to 0.3.2+ while between releases
5724 2003-05-07 Brian Warner <warner@lothar.com>
5726 * setup.py: Releasing buildbot-0.3.2
5728 2003-05-07 Brian Warner <warner@lothar.com>
5730 * setup.py: fix major packaging error: include subdirectories!
5732 * NEWS: add changes since last release
5734 * README (REQUIREMENTS): update twisted/python dependencies
5736 * buildbot/status/builder.py (Builder.startBuild): change
5737 BuildProcess API: now they should call startBuild/finishBuild
5738 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5739 keeping a list of builds in the statusbag, to support other kinds of
5741 (Builder.addClient): send current-activity-small to new clients
5742 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5745 * buildbot/status/client.py: drop RemoteReferences at shutdown
5747 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5749 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5750 more debug messages for remote status client
5752 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5753 (.stepFailed): only fire the Deferred once, even if both
5754 stepComplete and stepFailed are called. I think this can happen if
5755 an exception occurs at a weird time.
5757 * buildbot/status/words.py: work-in-progress: IRC status delivery
5759 2003-05-05 Brian Warner <warner@lothar.com>
5761 * docs/examples/twisted_master.py (twisted_app): hush internal
5762 python2.3 distutils deprecation warnings
5763 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5764 add compileOpts= argument which inserts extra args before the
5765 "setup.py build_ext" command. This can be used to give -Wignore
5766 warnings, to hush some internal python-2.3 deprecation messages.
5768 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5769 the ['twisted.test'] default test case to make it easier to change
5772 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5773 * buildbot/clients/gtkPanes.py: ditto
5775 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5776 arg to collapse RunUnitTestsRandomly into RunUnitTests
5777 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5778 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5780 * buildbot/status/html.py (StatusResource): shuffle Resources
5781 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5782 would serve the waterfall display, but the internal links were
5783 only valid on the trailing-slash version. The correct behavior is
5784 for the non-slashed one to serve a Redirect to the slashed one.
5785 This only shows up when the buildbot page is hanging off another
5786 server, like a Twisted-Web distributed server.
5788 * buildbot/status/event.py (Event, RemoteEvent): make Events
5789 pb.Cacheable, with RemoteEvent as the cached version. This removes
5790 a lot of explicit send-an-update code.
5791 * buildbot/status/builder.py (Builder): remove send-update code
5792 * buildbot/status/client.py (ClientBuilder): remove send-update
5793 code, and log errors that occur during callRemote (mostly to catch
5794 InsecureJelly exceptions)
5796 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5797 run Lore with the same python used in the rest of the build
5799 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5801 * buildbot/process/step_twisted.py (HLint): accept 'python'
5802 argument. Catch rc!=0 and mark the step as failed. This marks the
5803 build orange ("has warnings").
5804 (RunUnitTestsJelly): move out to step_twisted2.py
5806 * buildbot/util.py (ignoreStaleRefs): add utility function
5808 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5809 don't fake ETA object, it's too hard to get right
5811 2003-05-02 Brian Warner <warner@lothar.com>
5813 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5815 2003-05-01 Brian Warner <warner@lothar.com>
5817 * buildbot/status/html.py (StatusResource.body): oops, I was
5818 missing a <tr>, causing the waterfall page to be misrendered in
5819 everything except Galeon.
5821 2003-04-29 Brian Warner <warner@lothar.com>
5823 * docs/examples/twisted_master.py: make debuild use python-2.2
5824 explicitly, now that Twisted stopped supporting 2.1
5826 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5827 handle tuple results too. I keep forgetting this, which suggests
5828 it needs to be rethought.
5830 * setup.py (setup): bump version to 0.3.1+ while between releases
5832 2003-04-29 Brian Warner <warner@lothar.com>
5834 * setup.py: Releasing buildbot-0.3.1
5836 2003-04-29 Brian Warner <warner@lothar.com>
5838 * README (SUPPORT): add plea to send questions to the mailing list
5840 * NEWS, MANIFEST.in: add description of recent changes
5842 * docs/examples/twisted_master.py: add the code used to create the
5843 Twisted buildmaster, with passwords and such removed out to a
5846 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5847 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5848 buildmasters to not require CVSToys be installed.
5849 * README, docs/examples/glib_master: update to match the change
5851 * buildbot/clients/base.py, buildbot/bot.py,
5852 buildbot/changes/changes.py, buildbot/pbutil.py: copy
5853 ReconnectingPB from CVSToys distribution to remove CVSToys
5854 dependency for build slaves and status clients. Buildmasters which
5855 use FreshCVSSources still require cvstoys be installed, of course.
5857 2003-04-25 Brian Warner <warner@lothar.com>
5859 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5860 runTestsRandomly arg to turn on trial -z
5862 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5863 experimental code to use trial's machine-parseable output to get
5864 more detailed test results. Still has some major issues.
5865 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5868 * buildbot/status/builder.py (Builder.setCurrentBuild):
5869 anticipating moving build history into statusbag, not used yet
5871 * buildbot/status/tests.py: code to centralize test results,
5872 doesn't work quite yet
5874 * buildbot/status/event.py (Event): use hasattr("setName") instead
5875 of isinstance for now.. need better long-term solution
5877 * buildbot/status/html.py: Remove old imports
5879 2003-04-24 Brian Warner <warner@lothar.com>
5881 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5882 ignore changes under doc/fun/ and sandbox/
5884 * buildbot/process/step_twisted.py: update pushEvent and friends.
5886 * buildbot/status/html.py (Box.td): replace event.buildername with
5887 event.parent.getSwappableName(). Needs more thought.
5889 * buildbot/status/builder.py (Builder): Replace pushEvent and
5890 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5891 Tell events they are being pruned with event.delete().
5893 * buildbot/process/base.py (Build): Remove Builder status-handling
5894 methods. s/pushEvent/setCurrentActivity/.
5896 * buildbot/process/step.py (BuildStep): clean up status delivery.
5897 Gouse builder.statusbag methods instead of intermediate builder
5898 methods. s/updateLastEvent/updateCurrentActivity/.
5899 s/finalizeLastEvent/finishCurrentActivity/. Use
5900 addFileToCurrentActivity for summaryFunction.
5902 * buildbot/status/event.py (Logfile): put data in a Swappable when
5904 (Event): add more setter methods. Remove .buildername, use .parent
5905 and getSwappableName instead (needs more thought).
5907 * buildbot/util.py (Swappable):
5908 * test/test_swap.py: don't bother setting filename at __init__
5909 time, do it later. Change setFilename args to take parent first,
5910 since it provides the most significant part of the filename.
5912 2003-04-23 Brian Warner <warner@lothar.com>
5914 * buildbot/status/event.py (Logfile.addEntry): append to previous
5917 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
5918 anticipating Swappable
5919 (InternalShellCommand.remoteUpdate): split out various log-adding
5920 methods so subclasses can snarf stdout separately
5922 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
5923 in anticipation of Swappable build logs
5924 (Builder.testsFinished): anticipating TestResults, still disabled
5926 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
5929 * buildbot/status/event.py (Logfile): add (disabled) support for
5930 Swappable, not ready for use yet
5932 * buildbot/util.py (Swappable): object which is swapped out to
5933 disk after some period of no use.
5934 * test/test_swap.py: test buildbot.utils.Swappable
5936 2003-04-14 Brian Warner <warner@lothar.com>
5938 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
5939 periodic-build timer. Set the .periodicBuildTime on a builder
5940 instance to some number of seconds to activate it.
5942 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
5944 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
5945 a way that survives result tuples
5947 2003-04-12 Brian Warner <warner@lothar.com>
5949 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
5950 return a dict instead of a tuple: allow summarizers to provide
5951 multiple summaries if they want
5952 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
5953 (debuildSummarizer): summarize lintian warnings/errors
5955 2003-04-10 Brian Warner <warner@lothar.com>
5957 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
5959 2003-04-09 Brian Warner <warner@lothar.com>
5961 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
5962 empty summaries: happens when the tests fail so hard they don't emit
5963 a parseable summary line.
5965 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
5966 Allow summaryFunction to return None to indicate no summary should
5969 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
5970 writing to stale HTTP requests: notice when they disconnect and
5971 remove the request from the list. Also add CacheToFile from
5972 moshez, will be used later.
5974 2003-04-08 Brian Warner <warner@lothar.com>
5976 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
5977 should be an int, not a list of strings
5979 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
5980 if we weren't actually connected
5982 * buildbot/process/step_twisted.py (trialTextSummarizer): function
5983 to show the tail end of the trial text output
5985 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
5986 hook to summarize the results of a ShellCommand
5988 2003-04-07 Brian Warner <warner@lothar.com>
5990 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
5991 twisted test suite code into a single class.
5992 * buildbot/process/process_twisted.py: same
5994 2003-04-04 Brian Warner <warner@lothar.com>
5996 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
5998 * README (SLAVE): document use of mktap to create slave .tap file
5999 (REQUIREMENTS): describe dependencies
6001 * buildbot/bb_tap.py, buildbot/plugins.tml:
6002 * buildbot/bot.py (updateApplication): Add mktap support for creating
6003 buildslave .tap files
6005 2003-03-28 Brian Warner <warner@lothar.com>
6007 * buildbot/process/step.py (InternalShellCommand.finished): handle
6008 new tuple result values (fix embarrasing bug that appeared during
6011 2003-03-27 Brian Warner <warner@lothar.com>
6013 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6016 2003-03-25 Brian Warner <warner@lothar.com>
6018 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6019 to overall build status
6020 * buildbot/clients/base.py (Builder): improve event printing
6021 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6022 instead of generic ShellCommand
6023 (Build): Add .stopBuild, use it when slave is detached
6025 * buildbot/process/step.py (Configure,Test): give the steps their
6026 own names and status strings
6028 * buildbot/status/html.py (StatusResource): add "show" argument,
6029 lets you limit the set of Builders being displayed.
6031 2003-03-20 Brian Warner <warner@lothar.com>
6033 * buildbot/process/basic.py: removed
6035 2003-03-19 Brian Warner <warner@lothar.com>
6037 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6038 turn off process-docs by default
6040 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6041 when displaying build information without anything in allBuilds[]
6043 * buildbot/bot.py (makeApp): really take password from sys.argv
6045 2003-03-18 Brian Warner <warner@lothar.com>
6047 * buildbot/bot.py (buildApp): take password from sys.argv
6049 * README: replace with more useful text
6051 * setup.py: add a real one
6052 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6054 * docs/PyCon-2003/: added sources for PyCon paper.
6056 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6057 now Build objects control the process and Builder only handles
6058 slave stuff and distribution of changes/status. A new BuildFactory
6059 class creates Build objects on demand.
6061 Created ConfigurableBuild which takes a list of steps to run. This
6062 makes it a lot easier to set up a new kind of build and moves us
6063 closer to being able to configure a build from a web page.
6065 * buildbot/process/step_twisted.py, process_twisted.py: move to
6066 new model. A lot of code went away.
6068 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6069 send lots of empty progress messages to the client.
6071 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6073 2003-02-20 Brian Warner <warner@lothar.com>
6075 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6077 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6078 Twisted bug that prevented non-pty processes from working just got
6079 fixed, and the bug that leaks ptys is still being investigated.
6081 * buildbot/process/step.py (CVS): send timeout arg to slave
6083 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6084 builders coming and going
6085 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6086 from CVSToys, handle lost-buildmaster
6088 * buildbot/status/client.py (StatusClientService.removeBuilder):
6089 Clean up status client protocol: send builders (with references)
6090 as they are created, rather than sending a list and requiring the
6091 client to figure out which ones are new.
6092 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6093 attempts to force a build on an unknown builder
6095 2003-02-19 Brian Warner <warner@lothar.com>
6097 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6098 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6099 Twisted stops leaking them.
6100 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6101 builder goes to an idle state.
6103 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6104 I figure out why CVS commands hang without them, and/or I fix the
6105 hung-command timeout
6107 2003-02-16 Brian Warner <warner@lothar.com>
6109 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6110 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6111 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6112 GenerateDocs now that they are prefixed with WARNING:.
6114 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6115 use manual href target instead of request.childLink
6117 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6118 display every second, but update the ETA every 5 seconds (or
6119 whenever) as remote_progress messages arrive.
6122 2003-02-12 Brian Warner <warner@lothar.com>
6124 * *: import current sources from home CVS repository
6128 # add-log-time-format: add-log-iso8601-time-string