1 2006-06-08 Brian Warner <warner@allmydata.com>
3 * buildbot/status/client.py
4 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
5 changing this from getCurrentBuild() to getCurrentBuilds(). Each
6 build needs to be IRemote'd separately, rather than IRemote'ing
7 the whole list at once. I can't wait until newpb's serialization
8 adapters make this unnecessary.
10 2006-06-06 Brian Warner <warner@lothar.com>
12 * buildbot/process/step.py (WithProperties): make this inherit
13 from ComparableMixin, so that reloading an unchanged config file
14 doesn't cause us to spuriously reload any Builders which use them.
15 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
18 2006-06-03 Brian Warner <warner@lothar.com>
20 * contrib/windows/{setup.py, buildbot_service.py}: add support for
21 running py2exe on windows, contributed by Mark Hammond. Addresses
22 SF#1401121, but I think we still need to include
23 buildbot/scripts/sample.cfg
24 * setup.py: include buildbot_service.py as a script under windows
25 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
26 a py2exe application), get the icon/css datafiles from a different
29 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
30 double-escape the build URL. Thanks to Olivier Bonnet for the
31 patch. Fixes SF#1452801.
33 2006-06-02 Brian Warner <warner@lothar.com>
35 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
36 first six columns of 'svnlook' output, not just the first column,
37 since property changes appear in the other five. Thanks to Olivier
38 Bonnet for the patch. Fixes SF#1398174.
40 2006-06-01 Brian Warner <warner@lothar.com>
42 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
43 the fake build, so that title= has something to be set to
45 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
46 attribute of the "Build #NN" link in the yellow start-the-build
47 box to the build's reason. This means that you get a little
48 tooltip explaining why the build was done when you hover over the
49 yellow box. Thanks to Zandr Milewski for the suggestion.
51 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
52 (Box.setETA): handle ETA=None (by stopping the timer)
53 (Box.update): make the [soon] text less different than the usual
54 text, so the rest of the text doesn't flop around so much. It
55 would be awfully nice to figure out how to center this stuff.
56 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
58 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
59 by default, so that any ShellCommand which fails marks the overall
60 build as a failure. I should have done this from the beginning.
61 Add flunkOnFailure=False to the arguments if you want to turn off
64 2006-05-30 Brian Warner <warner@lothar.com>
66 * buildbot/clients/gtkPanes.py: add a third row: now it shows
67 last-build/current-build/current-step. Show what step is currently
68 running. Show ETA for both the overall build and the current step.
69 Update GTK calls to modern non-deprecated forms. There's still a
70 lot of dead code and debug noise to remove.
72 * buildbot/process/step_twisted.py (Trial): set the step name, so it
73 shows up properly in status displays
75 2006-05-28 Brian Warner <warner@lothar.com>
77 * buildbot/test/test_properties.py (Run.testInterpolate): on the
78 build we use to verify that WithProperties works:
80 ** set flunkOnFailure=True so that build failures get noticed
81 ** set workdir='.' so that the build succeeds, otherwise it is trying
82 to touch 'build/something', and 'build/' doesn't exist because
83 usually that's created by a Source step
84 ** set timeout=10, because Twisted-1.3.0 has a race condition that
85 this test somehow triggers, in which the 'touch' process becomes
86 a zombie and we wait for th etimeout before giving up on it.
88 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
89 to log the Build results and step logs to the twisted log.
90 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
91 what went wrong if a build was expected to succeed but didn't.
93 * buildbot/process/step_twisted.py (Trial): set the default
94 trialMode to '--reporter=bwverbose', which specifies verbose
95 black-and-white text. Back in twisted-1.3/2.0 days we had to use
96 '-to', but those are completely missing in modern Twisteds.
98 * buildbot/scripts/sample.cfg: make the sample Manhole config use
99 a localhost-only port, to encourage better security
101 * docs/buildbot.texinfo (Change Sources): mention
104 * .darcs-boring: add a Darcs boringfile
106 * README (REQUIREMENTS): stop claiming compatibility with
109 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
112 2006-05-27 Brian Warner <warner@lothar.com>
114 * buildbot/__init__.py: bump to 0.7.3+ while between releases
115 * docs/buildbot.texinfo: same
117 2006-05-23 Brian Warner <warner@lothar.com>
119 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
120 * docs/buildbot.texinfo: set version to match
121 * NEWS: update for 0.7.3
123 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
124 give a quick mapping from VC system to possible ChangeSources
125 (Build Properties): add 'buildername'
127 * buildbot/process/base.py (Build.setupStatus): oops, set
128 'buildername' and 'buildnumber' properties
129 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
132 2006-05-22 Brian Warner <warner@lothar.com>
134 * docs/buildbot.texinfo (Build Properties): explain the syntax of
135 property interpolation better
137 * README (INSTALLATION): remove old '-v' argument from recommended
140 * docs/buildbot.texinfo (ShellCommand): add docs for description=
141 and descriptionDone= arguments. Thanks to Niklaus Giger for the
144 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
145 'svnversion' instead of grepping the output of 'svn info', much
146 simpler and avoids CR/LF problems on windows. Thanks to Olivier
147 Bonnet for the suggestion.
148 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
149 require the WC_PATH argument, so run 'svnversion .' instead.
151 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
152 aren't supposed to have 'self' in their argument list
154 2006-05-21 Brian Warner <warner@lothar.com>
156 * buildbot/process/step.py (ShellCommand.start): make
157 testInterpolate pass. I was passing the uninterpolated command to
158 the RemoteShellCommand constructor
159 (ShellCommand._interpolateProperties): oops, handle non-list
160 commands (i.e. strings with multiple words separated by spaces in
161 them) properly, instead of forgetting about them.
163 * buildbot/test/test_properties.py (Run.testInterpolate): new test
164 to actually try to use build properties in a real build. This test
166 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
167 to start and evaluate builds
169 * buildbot/test/test__versions.py: add a pseudo-test to record
170 what version of Twisted/Python/Buildbot are running. This should
171 show up at the beginning of _trial_tmp/test.log, and exists to help
172 debug other problems.
174 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
175 a filename to be served as 'robots.txt' to discourage web spiders.
176 Adapted from a patch by Tobi Vollebregt, thanks!
177 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
178 (Waterfall.test_waterfall): tweak the way that filenames are put
179 into the config file, to accomodate windows pathnames better.
181 * docs/buildbot.texinfo (HTML Waterfall): document it
183 * buildbot/process/process_twisted.py
184 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
185 changed the build process. The new setup.py no longer takes the
187 (FullTwistedBuildFactory.__init__): same
188 (TwistedReactorsBuildFactory.__init__): same
190 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
191 be placed in the [hooks] section of the central repository (the
192 one that everybody pushes changes to).
194 2006-05-20 Brian Warner <warner@lothar.com>
196 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
197 .darcs-context file, use binary mode. I think this was causing a
198 Darcs failure under windows.
200 2006-05-19 Brian Warner <warner@lothar.com>
202 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
203 use a timezone string of +0000 and gmtime, since this timestamp is
204 sent to a buildmaster and %z is broken.
206 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
207 string and localtime, since this timestamp will only be consumed
208 locally, and %z is broken.
210 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
211 gmtime, since this timestamp is returned to the buildmaster, and
214 2006-05-18 Brian Warner <warner@lothar.com>
216 * NEWS: update in preparation for next release
218 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
219 setup-repository and do-we-have-the-vc-tools code into a separate
220 "helper" class, which sticks around in a single module-level
221 object. This seems more likely to continue to work in the future
222 than having it hide in the TestCase and hope that TestCases stick
223 around for a long time.
225 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
226 addremove' has been deprecated in recent versions of mercurial, so
229 2006-05-07 Brian Warner <warner@lothar.com>
231 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
232 operating under windows, move the file before opening it, since
233 you can't rename a file that somebody has open.
235 * buildbot/process/base.py (Build.setupBuild): if something goes
236 wrong while creating a Step, log the name and arguments, since the
237 error message when you get the number of arguments wrong is really
240 2006-05-06 Brian Warner <warner@lothar.com>
242 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
243 bugs in twisted-specific code not covered by my unit tests, this
244 time use 'cmd' argument instead of self.cmd
246 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
247 fix stupid braino: either use startwith or find()==0, not both.
248 (TwistedReactorsBuildFactory.__init__): another dumb typo
250 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
251 mark this test as TODO under windows, since process-killing seems
252 dodgy there. We'll come back to this later and try to fix it
255 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
256 and don't include a timezone
257 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
258 This should avoid the windows-with-verbose-timezone-name problem
260 (Patch.testPatch): add a test which runs 'patch' with less
261 overhead than the full VCBase.do_patch sequence, to try to isolate
262 a windows test failure. This one uses slave.commands.ShellCommand
263 and 'patch', but none of the VC code.
265 * buildbot/slave/commands.py (getCommand): use which() to find the
266 executables for 'cvs', 'svn', etc. This ought to help under
269 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
270 working directory before starting. If an earlier test failed, the
271 leftover directory would mistakenly flunk a later test.
272 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
273 Make sure that we use the right commandlines if which("tla") picks
274 up "tla.exe" (as it does under windows).
275 (TlaSupport.do_get): factor out this tla-vs-baz difference
276 (TlaSupport.vc_create): more tla-vs-baz differences
278 * buildbot/test/test_slavecommand.py
279 (ShellBase.testShellMissingCommand): stop trying to assert
280 anything about the error message: different shells on different
281 OSes with different languages makes it hard, and it really isn't
282 that interesting of a thing to test anyway.
284 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
285 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
286 "Panther"), because it has a bug which flunks a couple tests in
287 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
288 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
289 able to test that yet.
291 2006-04-30 Brian Warner <warner@lothar.com>
293 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
294 make sure child commands emit messages in english, so our regexps
295 will match. Thanks to Nikaus Giger for identifying the problems.
296 (VCBase._do_vctest_export_1): mode="export" is not responsible
297 for setting the "got_revision" property, since in many cases it is
298 not convenient to determine.
299 (SVNSupport.capable): when running 'svn --version' to check for
300 ra_local, we want error messages in english
301 * buildbot/test/test_slavecommand.py
302 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
303 to emit the error message in english
305 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
306 the environment with $LC_ALL="C" so that Commands which need to
307 parse the output of their child processes can obtain it in
309 (SVN.parseGotRevision): call "svn info" afterwards instead of
310 watching the output of the "svn update" or "svn checkout".
311 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
312 (Arch.parseGotRevision): same
313 (Bazaar.parseGotRevision): same
314 (Mercurial.parseGotRevision): same
316 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
317 $LC_ALL="C" when running commands under 'buildbot try', too
319 * buildbot/test/__init__.py: remove the global os.environ()
320 setting, instead we do it just for the tests that run commands and
321 need to parse their output.
323 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
324 remove the overly-short .timeout on this test, because non-DNotify
325 platforms must fall back to polling which happens at 10 second
326 intervals, so a 5 second timeout would never succeed.
328 2006-04-24 Brian Warner <warner@lothar.com>
330 * docs/buildbot.texinfo (Installing the code): update trial
331 invocation, SF#1469116 by Niklaus Giger.
332 (Attributes of Changes): updated branch-name examples to be
333 a bit more realistic, SF#1475240 by Stephen Davis.
335 * contrib/windows/buildbot2.bat: utility wrapper for windows
336 developers, contributed by Nick Trout (after a year of neglect..
339 * buildbot/test/test_vc.py (*.capable): store the actual VC
340 binary's pathname in VCS[vcname], so it can be retrieved later
341 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
342 strip out non-numeric timezone information, specifically the funky
343 German string that his system produced that confuses CVS.
344 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
345 allow Darcs tests to work on windows
346 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
347 procutils.which() everywhere, to allow tryclient to work under
348 windows. Also from Niklaus Giger, SF#1463394.
350 * buildbot/twcompat.py (which): move the replacement for a missing
351 twisted.python.procutils.which from test_vc.py to here, so it can
352 be used in other places too (specifically tryclient.py)
354 2006-04-23 Brian Warner <warner@lothar.com>
356 * buildbot/status/html.py (StatusResourceBuild.body): replace the
357 bare buildbotURL/projectName line with a proper DIV, along with a
358 CSS class of "title", from Stefan Seefeld (SF#1461675).
359 (WaterfallStatusResource.body0): remove the redundant 'table'
361 (WaterfallStatusResource.body): same. Also add class="LastBuild"
362 to the top-row TR, and class="Activity" to the second-row TR,
363 rather than putting them in the individual TD nodes.
365 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
366 'got_revision' build property for all VC systems that implement
367 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
369 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
370 to determine which revision we actually obtained
371 (CVS.parseGotRevision): implement this for CVS, which just means
372 to grab a timestamp. Not ideal, and it depends upon the buildslave
373 having a clock that is reasonably well syncronized with the server,
374 but it's better than nothing.
375 (SVN.parseGotRevision): implement it for SVN, which is accurate
376 (Darcs.parseGotRevision): same
377 (Arch.parseGotRevision): same
378 (Bazaar.parseGotRevision): same
379 (Mercurial.parseGotRevision): same
381 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
382 keep a record of all non-stdout/stderr/header/rc status updates,
383 for the benefit of RemoteCommands that send other useful things,
385 (Source.commandComplete): put any 'got_revision' status values
386 into a build property of the same name
389 * buildbot/process/step_twisted.py (Trial): update to deal with
390 new ShellCommand refactoring
392 * docs/buildbot.texinfo (Build Properties): document new feature
393 that allows BuildSteps to get/set Build-wide properties like which
394 revision was requested and/or checked out.
396 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
397 * buildbot/status/builder.py (BuildStatus.getProperty): implement
398 it. Note that this bumps the persistenceVersion of the saved Build
399 object, so add the necessary upgrade-old-version logic to include
400 an empty properties dict.
402 * buildbot/process/base.py (Build.setProperty): implement it
403 (Build.getProperty): same
404 (Build.startBuild): change build startup to set 'branch',
405 'revision', and 'slavename' properties at the right time
407 * buildbot/process/step.py (BuildStep.__init__): change setup to
408 require 'build' argument in a better way
409 (LoggingBuildStep): split ShellCommand into two pieces, for better
410 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
411 a single RemoteCommand that sends stdout/stderr status text. It
412 also provides the usual commandComplete / createSummary /
413 evaluateCommand / getText methods to be overridden...
414 (ShellCommand): .. whereas ShellCommand is specifically for
415 running RemoteShellCommands. Other shell-like BuildSteps (like
416 Source) can inherit from LoggingBuildStep instead of ShellCommand
417 (WithProperties): marker class to do build-property interpolation
418 (Source): inherit from LoggingBuildStep instead of ShellCommand
421 * buildbot/test/test_properties.py: test new functionality
423 2006-04-21 Brian Warner <warner@lothar.com>
425 * buildbot/test/test_vc.py: rename testBranch to
426 testCheckoutBranch to keep the tests in about the right
429 2006-04-18 Brian Warner <warner@lothar.com>
431 * docs/buildbot.texinfo (PBListener): improve cross-references
432 between PBListener and 'buildbot statusgui', thanks to John Pye
435 2006-04-17 Brian Warner <warner@lothar.com>
437 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
438 running under Twisted-1.3.0, otherwise skipped tests are reported
441 * all: use isinstance() instead of 'type(x) is foo', suggested by
444 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
445 oops, fix a brain-fade from the other week, when making the
446 addStep changes. I changed all the __init__ upcalls to use the
447 wrong superclass name.
448 (FullTwistedBuildFactory.__init__): same
449 (TwistedDebsBuildFactory.__init__): same
450 (TwistedReactorsBuildFactory.__init__): same
451 (TwistedBuild.isFileImportant): use .startswith for clarity,
452 thanks to Neal Norwitz for the suggestions.
454 * contrib/viewcvspoll.py: script to poll a viewcvs database for
455 changes, then deliver them over PB to a remote buildmaster.
457 * contrib/svnpoller.py: added script by John Pye to poll a remote
458 SVN repository (by running 'svn log') from a cronjob, and run
459 'buildbot sendchange' to deliver the changes to a remote
461 * contrib/svn_watcher.py: added script by Niklaus Giger (a
462 modification of svnpoller.py), same purpose, but this one loops
463 internally (rather than expecting to run from a cronjob) and works
465 * contrib/README.txt: same
467 2006-04-11 Brian Warner <warner@lothar.com>
469 * all: fix a number of incorrect names and missing imports, thanks
470 to Anthony Baxter for the patch.
471 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
472 remove unused buggy method.
473 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
474 comes from shutil, not "shutils"
475 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
476 (Arch.checkSlaveVersion): same
477 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
479 * buildbot/process/step_twisted2.py: add some missing imports
480 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
481 this code used to live in twisted.internet.defer
483 2006-04-10 Brian Warner <warner@lothar.com>
485 * buildbot/process/step.py (Mercurial): add Mercurial support
486 * buildbot/slave/commands.py (Mercurial): same
487 * buildbot/scripts/tryclient.py (MercurialExtractor): same
488 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
489 not yet tested, but 'try' support *is* covered
490 * docs/buildbot.texinfo (Mercurial): document it
492 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
493 some debugging messages (turned off)
494 * buildbot/test/test_vc.py: improve debug messages
496 2006-04-07 Brian Warner <warner@lothar.com>
498 * buildbot/test/test_vc.py (which): define our own which() in case
499 we can't import twisted.python.procutils, because procutils doesn't
502 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
503 of SlaveLocks for performance tests
505 * docs/examples/twisted_master.cfg: update to match current usage
507 * buildbot/changes/p4poller.py (P4Source): add new arguments:
508 password, p4 binary, pollinterval, maximum history to check.
509 Patch from an anonymous sf.net contributor, SF#1219384.
510 * buildbot/process/step.py (P4Sync.__init__): add username,
511 password, and client arguments.
512 * buildbot/slave/commands.py (P4Sync): same
514 2006-04-05 Brian Warner <warner@lothar.com>
516 * buildbot/process/factory.py (BuildFactory.addStep): new method
517 to add steps to a BuildFactory. Use it instead of f.steps.append,
518 and you can probably avoid using the s() convenience function.
519 Patch from Neal Norwitz, sf.net #1412605.
520 (other): update all factories to use addStep
521 * buildbot/process/process_twisted.py: update all factories to use
524 2006-04-03 Brian Warner <warner@lothar.com>
526 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
527 work under windows too. Adapted from a patch by Niklaus Giger,
528 addresses SF#1463399.
530 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
531 spawned commands emit parseable results in english and not some
532 other language. Patch from Niklaus Giger, SF#1463395.
534 * README (INSTALLATION): discourage users from running unit tests on
535 a "network drive", patch from Niklaus Giger, SF#1463394.
537 2006-03-22 Brian Warner <warner@lothar.com>
539 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
540 function to turn a repository-relative pathname into a (branch,
541 branch-relative-filename) tuple. Change this function to handle
542 the branch naming policy used by your Subversion repository.
543 Thanks to AllMyData.com for sponsoring this work.
545 2006-03-16 Brian Warner <warner@lothar.com>
547 * buildbot/scripts/sample.cfg: add python-mode declaration for
548 vim. Thanks to John Pye for the patch.
550 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
551 command line, mention the importance of running 'crontab' as the
552 buildmaster/buildslave user. Thanks to John Pye for the catch.
554 2006-03-13 Brian Warner <warner@lothar.com>
556 * buildbot/status/words.py (IRC): add an optional password=
557 argument, which will be sent to Nickserv in an IDENTIFY message at
558 login, to claim the nickname. freenode requires this before the
559 bot can sent (or reply to) private messages. Thanks to Clement
560 Stenac for the patch.
561 * docs/buildbot.texinfo (IRC Bot): document it
563 * buildbot/status/builder.py (LogFile.merge): don't write chunks
564 larger than chunkSize. Fixes SF#1349253.
565 * buildbot/test/test_status.py (Log.testLargeSummary): test it
566 (Log.testConsumer): update to match new internal chunking behavior
568 2006-03-12 Brian Warner <warner@lothar.com>
570 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
572 * buildbot/test/test_maildir.py (MaildirTest): rename the
573 'timeout' method, as it collides with trial's internals
575 * buildbot/scripts/runner.py: add 'buildbot restart' command
576 (stop): don't sys.exit() out of here, otherwise restart can't work
577 * docs/buildbot.texinfo (Shutdown): document it
579 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
580 * buildbot/status/html.py (Waterfall.__init__): same
581 * buildbot/process/builder.py (Builder.startBuild): same
582 * buildbot/process/base.py (BuildRequest): same
583 * buildbot/sourcestamp.py (SourceStamp): same
584 * buildbot/scheduler.py (Nightly): same
586 * buildbot/__init__.py (version): bump to 0.7.2+ while between
588 * docs/buildbot.texinfo: same
590 2006-02-17 Brian Warner <warner@lothar.com>
592 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
593 * docs/buildbot.texinfo: set version number to match
594 * NEWS: update for 0.7.2
596 2006-02-16 Brian Warner <warner@lothar.com>
598 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
600 2006-02-09 Brian Warner <warner@lothar.com>
602 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
603 add text to explain per-build branch parameters
604 * NEWS: mention --umask
606 2006-02-08 Brian Warner <warner@lothar.com>
608 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
610 (SlaveOptions.optParameters): add --umask, to make it possible to
611 make buildslave-generated files (including build products) be
614 * buildbot/slave/bot.py (BuildSlave.startService): same
616 2006-01-23 Brian Warner <warner@lothar.com>
618 * buildbot/status/builder.py: urllib.quote() all URLs that include
619 Builder names, so that builders can include characters like '/'
620 and ' ' without completely breaking the resulting HTML. Thanks to
621 Kevin Turner for the patch.
622 * buildbot/status/html.py: same
623 * buildbot/test/test_web.py (GetURL.testBuild): match changes
625 * NEWS: update in preparation for upcoming release
627 2006-01-18 Brian Warner <warner@lothar.com>
629 * docs/examples/twisted_master.cfg: update to match the Twisted
630 buildbot: remove python2.2, switch to exarkun's buildslaves,
631 disable the .deb builder until we figure out how to build twisted
632 .debs from SVN, add some ktrace debugging to the OS-X build
633 process and remove the qt build, remove threadless builders,
634 change freebsd builder to use landonf's buildslave.
636 2006-01-12 Brian Warner <warner@lothar.com>
638 * buildbot/master.py (Manhole.__init__): let port= be a strports
639 specification string, but handle a regular int for backwards
640 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
641 used in master.cfg to limit connections to just the local host.
642 (BuildMaster.loadConfig): same for c['slavePortnum']
643 * buildbot/scheduler.py (Try_Userpass.__init__): same
644 * buildbot/status/client.py (PBListener.__init__): same
645 * buildbot/status/html.py (Waterfall.__init__): same, for both
646 http_port and distrib_port. Include backwards-compatibility checks
647 so distrib_port can be a filename string and still mean unix:/foo
648 * docs/buildbot.texinfo (Setting the slaveport): document it
649 (Debug options): same
650 (HTML Waterfall): same
653 * buildbot/test/test_config.py (ConfigTest): test it
655 * buildbot/master.py (BuildMaster.loadConfig): wait for the
656 slaveport's disownServiceParent deferred to fire before opening
657 the new one. Fixes an annoying bug in the unit tests.
659 2006-01-03 Brian Warner <warner@lothar.com>
661 * buildbot/master.py (BuildMaster): remove the .schedulers
662 attribute, replacing it with an allSchedulers() method that looks
663 for all IService children that implement IScheduler. Having only
664 one parent/child relationship means fewer opportunities for bugs.
665 (BuildMaster.allSchedulers): new method
666 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
667 also fix ugly bug that caused any config-file reload to
668 half-forget about the earlier Schedulers, causing an exception
669 when a Change arrived and was handed to a half-connected
670 Scheduler. The exception was in scheduler.py line 54ish:
671 self.parent.submitBuildSet(bs)
672 exceptions.AttributeError: 'NoneType' object has no attribute
674 (BuildMaster.addChange): update to use allSchedulers()
676 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
677 to work properly with twisted-1.3.0, where you must explicitly
678 include the __implements__ from parent classes
679 (BaseScheduler.__repr__): make it easier to distinguish distinct
681 (BaseUpstreamScheduler.__implements__): same
683 * buildbot/status/builder.py (Status.getSchedulers): update to
685 * buildbot/test/test_run.py (Run.testMaster): same
686 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
687 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
688 make sure Scheduler instances are left alone when an identical
689 config file is reloaded
690 (ConfigElements.testSchedulers): make sure Schedulers are properly
693 * Makefile (TRIALARGS): my local default Twisted version is now
694 2.1.0, update the trial arguments accordingly
696 2005-12-22 Brian Warner <warner@lothar.com>
698 * docs/examples/twisted_master.cfg: merge changes from pyr: add
701 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
702 addChange in the parent class, although I suspect this should be
703 fixed better in the future.
705 2005-11-26 Brian Warner <warner@lothar.com>
707 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
708 explode when branch==None, thanks to Kevin Turner for the catch
709 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
712 * buildbot/__init__.py (version): bump to 0.7.1+ while between
714 * docs/buildbot.texinfo: same
716 2005-11-26 Brian Warner <warner@lothar.com>
718 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
719 * docs/buildbot.texinfo: set version number to match
721 2005-11-26 Brian Warner <warner@lothar.com>
723 * NEWS: update for 0.7.1
725 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
726 sure that unsubscribe works even if we never sent an ETA update.
727 Also, don't explode on duplicate unsubscribe.
728 (BuildStepStatus.addLog): make the convenience "return self"-added
729 watcher automatically unsubscribe when the Step finishes.
730 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
731 (BuildStatus.stepStarted): same auto-unsubscribe
732 (BuilderStatus.buildStarted): same auto-unsubscribe
734 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
736 (IStatusReceiver.stepStarted): same
737 (IStatusReceiver.logStarted): same
739 * buildbot/test/test_run.py (Status): move the Status test..
740 * buildbot/test/test_status.py (Subscription): .. to here
742 2005-11-25 Brian Warner <warner@lothar.com>
746 * buildbot/locks.py: fix the problem in which loading a master.cfg
747 file that changes some Builders (but not all of them) can result
748 in having multiple copies of the same Lock. Now, the real Locks
749 are kept in a table inside the BotMaster, and the Builders/Steps
750 use "LockIDs", which are still instances of MasterLock and
751 SlaveLock. The real Locks are instances of the new RealMasterLock
752 and RealSlaveLock classes.
753 * buildbot/master.py (BotMaster.getLockByID): new method to
754 convert LockIDs into real Locks.
755 * buildbot/process/base.py (Build.startBuild): convert LockIDs
756 into real Locks before building
757 * buildbot/process/step.py (BuildStep.startStep): same
758 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
759 exercises the problem
762 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
763 what Schedulers are available
765 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
766 work by Dobes Vandermeer and hacked mercilessly by me. This offers
767 'cron'-style build scheduling at certain times of day, week,
769 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
771 * buildbot/scheduler.py (Scheduler): change fileIsImportant
772 handling: treat self.fileIsImportant more as an attribute that
773 contains a callable than as a method. If the attribute is None,
774 don't call it and assume all filenames are important. It is still
775 possible to provide a fileIsImportant method in a subclass,
777 (AnyBranchScheduler): handle fileIsImportant=None, previously it
779 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
780 test using AnyBranchScheduler with fileIsImportant=None
782 2005-11-24 Brian Warner <warner@lothar.com>
784 * buildbot/test/test_config.py (StartService): don't claim a fixed
785 port number, instead set slavePort=0 on the first pass, figure out
786 what port was allocated, then switch to a config file that uses
789 * buildbot/master.py (BuildMaster.loadConfig): close the old
790 slaveport before opening the new one, because unit tests might
791 replace slavePort=0 with the same allocated portnumber, and if we
792 don't wait for the old port to close first, we get a "port already
793 in use" error. There is a tiny race condition here, but the only
794 threat is from other programs that bind (statically) to the same
795 port number we happened to be allocated, and only if those
796 programs use SO_REUSEADDR, and only if they get control in between
799 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
801 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
802 deleted ChangeSources before adding any new ones
803 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
804 compare_attrs, to make sure that a config-file reload does not
805 unnecessarily replace an unmodified ChangeSource instance
806 * buildbot/test/test_config.py (ConfigTest.testSources): update
808 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
809 mean "don't build anything", and add a warning if it gets used
810 because it isn't actually useful.
812 * contrib/svn_buildbot.py: update example usage to match the port
813 number that gets used by the PBChangeSource
814 * buildbot/scripts/sample.cfg: add example of PBChangeSource
816 2005-11-22 Brian Warner <warner@lothar.com>
818 * NEWS: start collecting items for next release
820 * buildbot/process/step.py (SVN.computeSourceRevision): assume
821 revisions are strings
822 (P4Sync.computeSourceRevision): same
824 * buildbot/status/html.py (StatusResourceBuild.body): add a link
825 to the Buildbot's overall status page
826 (StatusResourceBuilder.body): same
828 2005-11-15 Brian Warner <warner@lothar.com>
830 * buildbot/master.py (BuildMaster.loadConfig): serialize the
831 config-file loading, specifically to make sure old StatusTargets
832 are finished shutting down before new ones start up (thus
833 resolving a bug in which changing the Waterfall object would fail
834 because both new and old instances were claiming the same
835 listening port). Also load new Schedulers after all the new
836 Builders are set up, in case they fire off a new build right away.
837 * buildbot/test/test_config.py (StartService): test it
839 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
840 the branch name to the mail body
842 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
843 Without it, a config-file reload fails to update an existing
845 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
846 username/passwd to compare_attrs, for the same reason
847 * buildbot/status/html.py (Waterfall): add favicon to
848 compare_attrs, same reason
850 2005-11-05 Brian Warner <warner@lothar.com>
852 * buildbot/scripts/tryclient.py (createJobfile): stringify the
853 baserev before stuffing it in the jobfile. This resolves problems
854 under SVN (and probably Arch) where revisions are expressed as
855 numbers. I'm inclined to use string-based revisions everywhere in
856 the future, but this fix should be safe for now. Thanks to Steven
857 Walter for the patch.
859 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
860 binary mode when opening pickle files, to make windows work
861 better. Thanks to Dobes Vandermeer for the catch.
862 * buildbot/status/builder.py (BuildStatus.saveYourself): same
863 (BuilderStatus.getBuildByNumber): same
864 (Status.builderAdded): same
865 * buildbot/master.py (BuildMaster.loadChanges): same
867 * buildbot/util.py (Swappable): delete unused leftover code
869 * buildbot/process/step.py (SVN): when building on a non-default
870 branch, add the word "[branch]" to the VC step's description, so
871 it is obvious that we're not building the usual stuff. Likewise,
872 when we are building a specific revision, add the text "rNNN" to
873 indicate what that revision number is. Thanks to Brad Hards and
874 Nathaniel Smith for the suggestion.
875 (Darcs.startVC): same
877 (Bazaar.startVC): same
879 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
880 typo, caught by Mark Dillavou, closes SF#1216636.
882 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
883 about a test to add some day
885 * docs/examples/twisted_master.cfg: update: bot1 can now handle
886 the 'full-2.3' build, and the 'reactors' build is now run under
887 python-2.4 because the buildslave no longer has gtk/etc bindings
888 for earlier versions.
890 2005-11-03 Brian Warner <warner@lothar.com>
892 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
893 method, takes an IBuildStatus and rebuilds it. It might make more
894 sense to add this to IBuildControl instead, but that instance goes
895 away completely once the build has finished, and resubmitting
896 builds can take place weeks later.
897 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
898 * buildbot/status/html.py (StatusResourceBuild): also stash an
899 IBuilderControl so we can use resubmitBuild.
900 (StatusResourceBuild.body): render "resubmit" button if we can.
901 Also add hrefs for each BuildStep
902 (StatusResourceBuild.rebuild): add action for "resubmit" button
903 (StatusResourceBuilder.getChild): give it an IBuilderControl
905 * buildbot/status/builder.py (Status.getURLForThing): change the
906 URL for BuildSteps to have a "step-" prefix, so the magic URLs
907 that live as targets of buttons like "stop" and "rebuild" can't
909 * buildbot/status/builder.py (Status.getURLForThing): same
910 * buildbot/status/html.py (StatusResourceBuild.getChild): same
911 (StepBox.getBox): same
912 * buildbot/test/test_web.py (GetURL): same
915 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
916 exclusivity checks after Source.__init__ upcall, so misspelled
917 arguments will be reported more usefully
918 (Darcs.__init__): same
920 2005-10-29 Brian Warner <warner@lothar.com>
922 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
923 builder. Move the Try scheduler off to a separate port.
925 2005-10-27 Brian Warner <warner@lothar.com>
927 * buildbot/clients/gtkPanes.py
928 (TwoRowClient.remote_builderRemoved): disappearing Builders used
929 to cause the app to crash, now they don't.
931 * buildbot/clients/debug.py: display the buildmaster's location
932 in the window's title bar
934 2005-10-26 Brian Warner <warner@lothar.com>
936 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
937 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
938 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
940 * buildbot/status/html.py (td): put a single non-breaking space
941 inside otherwise empty <td> elements, as a workaround for buggy
942 browsers which would optimize them away (along with any associated
943 styles, like the kind that create the waterfall grid borders).
944 Patch from Frerich Raabe.
946 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
947 argv-list as an argument, defaulting to ["-to"], which is
948 appropriate for the Trial that comes with Twisted-2.1.0 and
949 earlier. The Trial in current Twisted SVN wants
950 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
951 defaults to an empty list.
952 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
953 match it, now that trialMode= is a list instead of a single string
955 * buildbot/__init__.py (version): bump to 0.7.0+ while between
957 * docs/buildbot.texinfo: same
959 2005-10-24 Brian Warner <warner@lothar.com>
961 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
962 * docs/buildbot.texinfo: set version number to match
964 2005-10-24 Brian Warner <warner@lothar.com>
966 * README: update for 0.7.0
968 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
970 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
971 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
972 send the branch= argument unless the user really provided one, to
973 retain compatibility with older buildmasters that don't accept
975 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
978 * docs/buildbot.texinfo: update lots of stuff
980 * buildbot/scripts/runner.py (sendchange): add a --branch argument
981 to the 'buildbot sendchange' command
982 * buildbot/clients/sendchange.py (Sender.send): same
983 * buildbot/changes/pb.py (ChangePerspective): same
984 * buildbot/test/test_changes.py (Sender.testSender): test it
986 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
987 'default_branch' argument names to 'baseURL' and 'defaultBranch',
988 for consistency with other BuildStep arguments that use camelCase.
989 Well, at least more of them use camelCase (like flunkOnWarnings)
990 than don't.. I wish I'd picked one style and stuck with it
991 earlier. Annoying, but it's best done before the release, since
992 these arguments didn't exist at all in 0.6.6 .
994 * buildbot/test/test_vc.py (SVN.testCheckout): same
995 (Darcs.testPatch): same
996 * docs/buildbot.texinfo (SVN): document the change
997 (Darcs): same, add some build-on-branch docs
998 * docs/examples/twisted_master.cfg: match change
1000 * buildbot/process/step.py (BuildStep): rename
1001 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1002 how it is normally used.
1003 * buildbot/test/test_steps.py (Version.checkCompare): same
1005 * buildbot/process/step.py (CVS.startVC): refuse to build
1006 update/copy -style builds on a non-default branch with an old
1007 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1008 concern is that it will do a VC 'update' in an existing tree when
1009 it is supposed to be switching branches (and therefore clobbering
1010 the tree to do a full checkout), thus building the wrong source.
1011 This used to be a warning, but I think the confusion it is likely
1012 to cause warrants making it an error.
1013 (SVN.startVC): same, also make mode=export on old slaves an error
1014 (Darcs.startVC): same
1015 (Git.startVC): improve error message for non-Git-enabled slaves
1016 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1017 specific revision is built on a slave that doesn't pay attention
1018 to args['revision'], because for slowly-changing trees it will
1019 probably do the right thing, and because we have no way to tell
1020 whether we're asking it to build the most recent version or not.
1021 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1023 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1024 that 'master' is in host:portnum format, to catch errors sooner
1026 2005-10-23 Brian Warner <warner@lothar.com>
1028 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1029 when creating the list of warning messages, include the line
1030 immediately after each WARNING: line, since that's usually where
1031 the file and line number wind up.
1033 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1038 2005-10-22 Brian Warner <warner@lothar.com>
1040 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1041 patch from Brad Hards
1042 * buildbot/status/classic.css: same
1043 * buildbot/test/test_web.py (Waterfall): match changes
1045 * buildbot/test/test_steps.py (BuildStep.setUp): set
1046 nextBuildNumber so the test passes
1047 * buildbot/test/test_status.py (MyBuilder): same
1049 * buildbot/status/html.py (StatusResourceBuild.body): revision
1050 might be numeric, so stringify it before html-escapifying it
1051 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1052 timer for the upcoming build
1053 * buildbot/status/classic.css: add background-color attributes for
1054 offline/waiting/building classes
1056 * buildbot/status/builder.py (BuildStatus): derive from
1057 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1058 the default (i.e. unknown) .slavename to "???" instead of None,
1059 since even unknown slavenames need to be printed eventually.
1060 (BuilderStatus): also derive from styles.Versioned . More
1061 importantly, determine .nextBuildNumber at creation/unpickling
1062 time by scanning the directory of saved BuildStatus instances and
1063 choosing one larger than the highest-numbered one found. This
1064 should fix the problem where random errors during upgrades cause
1065 the buildbot to forget about earlier builds. .nextBuildNumber is
1066 no longer stored in the pickle.
1067 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1068 at least log the error. Also call Builder.determineNextBuildNumber
1069 once the basedir is set.
1071 * buildbot/master.py (BuildMaster.loadChanges): do
1072 styles.doUpgrade afterwards, in case I decide to make Changes
1073 derived from styles.Versioned some day and forget to make this
1077 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1078 when running under older pythons (<2.3) in which the shlex module
1079 doesn't have a 'split' function.
1081 * buildbot/process/step.py (ShellCommand.start): make
1082 errorMessages= be a list of strings to stuff in the log before the
1083 command actually starts. This makes it easier to flag multiple
1084 warning messages, e.g. when the Source steps have to deal with an
1086 (CVS.startVC): handle slaves that don't handle multiple branches
1087 by switching into 'clobber' mode
1088 (SVN.startVC): same. Also reject branches without base_url
1089 (Darcs.startVC): same. Also reject revision= in older slaves
1090 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1091 (Bazaar.startVC): same, and test for baz separately than for arch
1093 * buildbot/slave/commands.py (cvs_ver): document new features
1095 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1096 (BuildStep.slaveVersionNewEnough): more useful utility method
1097 * buildbot/test/test_steps.py (Version): start testing it
1099 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1100 the 'force' command requires python2.3, for the shlex.split method
1102 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1103 since we don't use it anymore. The Twisted buildbot uses a
1106 2005-10-21 Brian Warner <warner@lothar.com>
1108 * buildbot/process/process_twisted.py: rework all BuildFactory
1109 classes to take a 'source' step as an argument, instead of
1110 building up the SVN instance in the factory.
1111 * docs/examples/twisted_master.cfg: enable build-on-branch by
1112 providing a base_url and default_branch
1114 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1115 control over --branch and --revision, not that they are always
1117 * buildbot/status/html.py (StatusResourceBuilder.force): same
1118 (StatusResourceBuild.body): display SourceStamp components
1120 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1121 IRC 'force' command, so it can be shared with an eventual
1122 command-line-tool 'buildbot force' mode.
1123 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1125 2005-10-20 Brian Warner <warner@lothar.com>
1127 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1129 * docs/examples/twisted_master.cfg: update to use Schedulers
1131 * buildbot/scripts/sample.cfg: update with Schedulers
1133 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1134 method specifically for use by HTML "force build" button and the
1135 IRC "force" command. Raises an immediate error if there are no
1137 (IBuilderControl.requestBuild): make this just submit a build, not
1138 try to check for existing slaves or set up any when-finished
1139 Deferreds or anything.
1140 * buildbot/process/builder.py (BuilderControl): same
1141 * buildbot/status/html.py (StatusResourceBuilder.force): same
1142 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1143 * buildbot/test/test_slaves.py: same
1144 * buildbot/test/test_web.py: same
1146 2005-10-19 Brian Warner <warner@lothar.com>
1148 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1149 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1151 2005-10-18 Brian Warner <warner@lothar.com>
1153 * buildbot/status/html.py: provide 'status' argument to most
1154 StatusResourceFOO objects
1155 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1156 and Logfiles" section to make the Build page into a more-or-less
1157 comprehensive source of status information about the build
1159 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1160 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1162 2005-10-17 Brian Warner <warner@lothar.com>
1164 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1165 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1166 out what to do about other projects: the correct options for
1167 recent Twisteds will not work for older ones.
1169 2005-10-15 Brian Warner <warner@lothar.com>
1171 * buildbot/status/builder.py (Status.getURLForThing): add method
1172 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1173 use this in email/IRC status clients to make them more useful, by
1174 providing the end user with hints on where to learn more about the
1175 object being reported on.
1176 * buildbot/test/test_web.py (GetURL): tests for it
1178 2005-10-14 Brian Warner <warner@lothar.com>
1180 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1181 fix bug resulting from deferredResult changes
1183 2005-10-13 Brian Warner <warner@lothar.com>
1185 * buildbot/test/test_changes.py: remove use of deferredResult
1186 * buildbot/test/test_config.py: same
1187 * buildbot/test/test_control.py: same
1188 * buildbot/test/test_status.py: same
1189 * buildbot/test/test_vc.py: this is the only remaining use, since
1190 it gets used at module level. This needs to be replaced by some
1191 sort of class-level run-once routine.
1193 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1195 * lots: implement multiple slaves per Builder, which means multiple
1196 current builds per Builder. Some highlights:
1197 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1198 of (state,currentBuilds) instead of (state,currentBuild)
1199 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1200 (IBuildStatus.getSlavename): new method, so you can tell which
1201 slave got used. This only gets set when the build completes.
1202 (IBuildRequestStatus.getBuilds): new method
1204 * buildbot/process/builder.py (SlaveBuilder): add a .state
1205 attribute to track things like ATTACHING and IDLE and BUILDING,
1207 (Builder): .. the .slaves attribute here, which has been turned
1208 into a simple list of available slaves. Added a separate
1209 attaching_slaves list to track ones that are not yet ready for
1211 (Builder.fireTestEvent): put off the test-event callback for a
1212 reactor turn, to make tests a bit more consistent.
1213 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1214 ping fails due to an exception. This needs work, I'm worried that
1215 a code error could lead to a constantly re-connecting slave.
1216 Especially since I'm trying to move to a distinct remote_ping
1217 method, separate from the remote_print that we currently use.
1218 (BuilderControl.requestBuild): return a convenience Deferred that
1219 provides an IBuildStatus when the build finishes.
1220 (BuilderControl.ping): ping all connected slaves, only return True
1221 if they all respond.
1223 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1224 reconnect when we shut down.
1226 * buildbot/status/builder.py: implement new methods, convert
1227 one-build-at-a-time methods to handle multiple builds
1228 * buildbot/status/*.py: do the same in all default status targets
1229 * buildbot/status/html.py: report the build's slavename in the
1230 per-Build page, report all buildslaves on the per-Builder page
1232 * buildbot/test/test_run.py: update/create tests
1233 * buildbot/test/test_slaves.py: same
1234 * buildbot/test/test_scheduler.py: remove stale test
1236 * docs/buildbot.texinfo: document the new builder-specification
1237 'slavenames' parameter
1239 2005-10-12 Brian Warner <warner@lothar.com>
1241 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1242 report failure correctly, causing Dependent builds to run when
1243 they shouldn't have.
1244 * buildbot/status/builder.py (BuildSetStatus): same
1245 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1246 (Set.testSuccess): test the both-pass case too
1247 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1248 fix this test: it was ending too early, masking the failure before
1249 (Logger): specialized StatusReceiver to make sure the dependent
1250 builds aren't even started, much less completed.
1252 2005-10-07 Brian Warner <warner@lothar.com>
1254 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1255 bot.SlaveBuilder being disowned in the middle of a build
1257 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1258 this inherit from StatusReceiver. Also upcall in __init__. This
1259 fixes the embarrasing crash when the new buildSetSubmitted method
1260 is invoked and Waterfall/etc don't implement their own.
1261 * buildbot/test/test_run.py: add a TODO note about a test to catch
1262 just this sort of thing.
1264 * buildbot/process/builder.py (Builder.attached): remove the
1265 already-attached warning, this situation is normal. Add some
1266 comments explaining it.
1268 2005-10-02 Brian Warner <warner@lothar.com>
1270 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1271 OverflowError when setting up dnotify, because some 64-bit systems
1272 have problems with signed-vs-unsigned constants and trip up on the
1273 DN_MULTISHOT flag. Patch from Brad Hards.
1275 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1277 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1278 progressMetrics, description, descriptionDone to the 'parms' list,
1279 and make use the 'parms' list from the implementation class
1280 instead of only BuildStep to initialize the parameters. This
1281 allows buildbot.process.factory.s() to initialize all the parms,
1282 not just those defined in directly by BuildStep.
1284 2005-09-03 Brian Warner <warner@lothar.com>
1286 * NEWS: start adding items for the next release
1288 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1289 python2.2 tests, change 'Quick' builder to only use python2.3
1291 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1293 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1294 the "Ping Builder" button if the build control is available; the
1295 user sees an exception otherwise
1297 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1299 2005-09-01 Brian Warner <warner@lothar.com>
1301 * buildbot/interfaces.py (IBuilderStatus.getState): update
1302 signature, point out that 'build' can be None
1303 (IBuildStatus.getETA): point out ETA can be none
1305 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1307 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1309 2005-08-31 Brian Warner <warner@lothar.com>
1311 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1312 update to match correct signature: removed 'eta' argument
1313 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1315 2005-08-30 Brian Warner <warner@lothar.com>
1317 * buildbot/status/builder.py (LogFile): remove the assertion that
1318 blows up when you try to overwrite an existing logfile, instead
1319 just emit a warning. This case gets hit when the buildmaster is
1320 killed and doesn't get a chance to write out the serialized
1321 BuilderStatus object, so the .nextBuildNumber attribute gets out
1324 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1325 the 'buildbot sendchange' arguments, for the Darcs context file
1326 * docs/buildbot.texinfo (sendchange): document it
1328 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1329 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1330 (IStatus.getSchedulers): new method
1331 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1332 (Status.getSchedulers): implement
1333 * buildbot/process/builder.py (Builder): maintain
1334 BuilderStatus.pendingBuilds
1335 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1336 (TryBase.addChange): Try schedulers should ignore Changes
1338 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1339 for 'try' on CVS/SVN
1340 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1342 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1343 report status properly.
1344 (Try.createJob): implement unique buildset IDs
1346 * buildbot/status/client.py (StatusClientPerspective): add a
1347 perspective_getBuildSets method for the benefit of jobdir-style
1349 * docs/buildbot.texinfo (try): more docs
1350 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1353 2005-08-18 Brian Warner <warner@lothar.com>
1355 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1356 actually work. It's functional but still kind of clunky. Also, it
1357 only works with the pb-style.. needs to be made to work with the
1360 * buildbot/status/client.py (RemoteBuildSet): new class
1361 (RemoteBuildRequest): same
1362 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1363 object, not the internal BuildStatus object.
1364 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1365 outside of the usual buildStarted() return value.
1366 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1368 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1369 (Try_Userpass_Perspective.perspective_try): return a remotely
1370 usable BuildSetStatus object
1372 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1373 isStarted()/waitUntilStarted()
1375 2005-08-16 Brian Warner <warner@lothar.com>
1377 * buildbot/status/builder.py: implement IBuildSetStatus and
1378 IBuildRequestStatus, wire them into place.
1379 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1380 methods into the BuildSetStatus object.
1381 * buildbot/interfaces.py: same
1382 (IStatus.getBuildSets): new method to get pending BuildSets
1383 (IStatusReceiver.buildsetSubmitted): new method which hears about
1385 * buildbot/master.py (BuildMaster.submitBuildSet): same
1386 * buildbot/process/base.py (BuildRequest): same, replace
1387 waitUntilStarted with subscribe/unsubscribe
1388 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1389 subscribe instead of waitUntilStarted
1390 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1392 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1394 * buildbot/test/test_buildreq.py: update for new code
1395 * buildbot/test/test_control.py (Force.testRequest): same
1398 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1399 for Darcs to not use the tempfile module, so it works under
1400 python-2.2 too. We really didn't need the full cleverness of that
1401 module, since the slave has exclusive control of its own builddir.
1403 2005-08-15 Brian Warner <warner@lothar.com>
1405 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1406 for CVS trees. It doesn't work for non-trunk branches,
1408 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1411 * Makefile: make it easier to test against python2.2
1413 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1414 tearDown2, so things like Arch can unregister archives as they're
1415 shutting down. The previous subclass-override-tearDown technique
1416 resulted in a nested maybeWait() and test failures under
1419 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1420 where we can (Arch), add a branch= argument to set the branch used
1422 (BazExtractor): extract the branch too
1423 (TlaExtractor): same
1424 * buildbot/scripts/runner.py (TryOptions): add --branch
1425 * docs/buildbot.texinfo (try): document --branch/try_branch
1427 * buildbot/slave/commands.py (Darcs): implement get-revision for
1428 Darcs, so that 'try' will work. This requires the tempfile module
1431 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1432 of revisions, branches, and 'try' in the process.
1434 2005-08-11 Brian Warner <warner@lothar.com>
1436 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1437 this, it got broken at some point in the last few releases
1438 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1439 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1440 specifically the removal of ETA information from the tuple
1442 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1445 * docs/buildbot.texinfo (try): document both --builder and
1446 'try_builders' in .buildbot/options
1447 * buildbot/scripts/runner.py (TryOptions): add --builder,
1448 accumulate the values into opts['builders']
1449 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1450 * buildbot/test/test_runner.py (Try): add some quick tests to make
1451 sure 'buildbot try --options' and .buildbot/options get parsed
1452 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1453 use --builder control
1455 * docs/buildbot.texinfo (try): add --port argument to PB style
1457 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1458 actual SourceStamp. Still need to extract a branch name, somehow.
1459 (Try): finish implementing the try client side, still need a UI
1460 for specifying which builders to use
1461 (Try.getopt): factor our options/config-file reading
1462 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1464 * buildbot/test/test_vc.py: match SourceStampExtractor change
1466 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1467 causes the twisted log to be sent to stderr
1469 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1471 2005-08-10 Brian Warner <warner@lothar.com>
1473 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1474 style is 90% done, still missing status reporting or waiting for
1475 the buildsets to finish, and it is completely untested.
1477 * buildbot/trybuild.py: delete file, move contents to ..
1478 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1479 * buildbot/test/test_vc.py: match the move
1481 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1482 of the TryScheduler, no buildsetID or status-tracking support yet
1483 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1485 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1486 possible to set the basedir after __init__ time, so it is easier
1487 to use as a Service-child of the BuildMaster instance
1489 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1490 that delivers messages to its Service parent instead of requiring
1491 a subclass to be useful. This turns out to be much easier to build
1494 * buildbot/scripts/tryclient.py (createJob): utility code to
1495 create jobfiles, will eventually be used by 'buildbot try'
1497 2005-08-08 Brian Warner <warner@lothar.com>
1499 * docs/buildbot.texinfo (try): add docs on the
1500 as-yet-unimplemented Try scheduler
1502 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1503 * buildbot/test/test_scheduler.py: .. here
1504 (Scheduling.testTryJobdir): add placeholder test for 'try'
1506 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1507 addEntry merging (>=chunkSize) behavior
1508 (Log.testConsumer): update to handle new callLater(0) behavior
1510 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1511 both the MAX_LENGTH bugfix and the resumeProducing hang.
1513 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1514 put off the actual resumeProducing for a moment with
1515 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1516 causes large logfiles to hang midway through.
1518 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1519 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1520 and to improve memory usage when streaming the file out to a web
1522 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1523 make this work cleanly
1525 2005-08-03 Brian Warner <warner@lothar.com>
1527 * buildbot/trybuild.py: new file for 'try' utilities
1528 (getSourceStamp): run in a tree, find out the baserev+patch
1529 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1530 implemented for SVN and Darcs, still working on Arch. I don't know
1531 how to make CVS work yet.
1533 * docs/buildbot.texinfo: document the 'buildbot' command-line
1534 tool, including the not-yet-implemented 'try' feature, and the
1535 in-flux .buildbot/ options directory.
1537 2005-07-20 Brian Warner <warner@lothar.com>
1539 * buildbot/locks.py: added temporary id() numbers to Lock
1540 descriptions, to track down a not-really-sharing-the-Lock bug
1542 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1544 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1545 needed for python2.2 compatibility
1546 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1547 are from the __future__
1549 2005-07-19 Brian Warner <warner@lothar.com>
1551 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1552 message when schedulers use unknown builders
1554 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1555 SlaveLock('name') and MasterLock('name') are distinct
1557 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1558 c['schedulers'] in such a way that we can actually accept
1560 * buildbot/test/test_config.py: check it
1562 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1563 utility method to *all* the Schedulers
1564 (Periodic.listBuilderNames): same
1566 * docs/buildbot.texinfo (Interlocks): update chapter to match
1569 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1570 to make sure that c['sources'], c['schedulers'], and c['status']
1571 are all lists of the appropriate objects, and that the Schedulers
1572 all point to real Builders
1573 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1574 'listBuilderNames' utility method to support this
1575 * buildbot/scheduler.py: implement the utility method
1576 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1578 * docs/buildbot.texinfo: add some @cindex entries
1580 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1581 if it wasn't already set: most tla commands will fail unless one
1583 (Arch.createRepository): and disable bazaar's revision cache, since
1584 they cause test failures (the multiple repositories we create all
1585 interfere with each other through the cache)
1587 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1588 bring it properly up to date with twisted-2.0 test guidelines
1590 * buildbot/master.py (BuildMaster): remove references to old
1591 'interlock' module, this caused a bunch of post-merge test
1593 * buildbot/test/test_config.py: same
1594 * buildbot/process/base.py (Build): same
1596 * buildbot/test/test_slaves.py: stubs for new test case
1598 * buildbot/scheduler.py: add test-case-name tag
1599 * buildbot/test/test_buildreq.py: same
1601 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1602 unnecessary init code
1603 (Bot.remote_setBuilderList): match it
1605 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1607 * buildbot/changes/mail.py (parseSyncmail): update comment
1609 * buildbot/test/test_slavecommand.py: disable Shell tests on
1610 platforms that don't suport IReactorProcess
1612 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1613 all places where we open logfiles. It causes OS-X to open the file
1614 in some weird mode that that prevents us from mixing reads and
1615 writes to the same filehandle, which we depend upon to implement
1616 _generateChunks properly. This change doesn't appear to break
1617 win32, on which "b" and "t" are treated differently but a missing
1618 flag seems to be interpreted as "t".
1620 2005-07-18 Brian Warner <warner@lothar.com>
1622 * buildbot/slave/commands.py (ShellCommand): overhaul
1623 error-handling code, to try and make timeout/interrupt work
1624 properly, and make win32 happier
1625 * buildbot/test/test_slavecommand.py: clean up, stop using
1626 reactor.iterate, add tests for timeout and interrupt
1627 * buildbot/test/sleep.py: utility for a new timeout test
1629 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1630 code from the local-usebranches branch
1632 2005-07-17 Brian Warner <warner@lothar.com>
1634 * buildbot/process/process_twisted.py
1635 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1636 minutes, to match the other twisted BuildFactories, and don't
1637 excuse failures in c/qt/win32 reactors any more.
1639 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1640 'freebsd' builders, since the buildslaves have been unavailable
1643 2005-07-13 Brian Warner <warner@lothar.com>
1645 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1646 build-on-branch feature
1648 * buildbot/process/step.py (Darcs.__init__): add base_url and
1649 default_branch arguments, just like SVN
1650 (Arch.__init__): note that the version= argument is really the
1653 * buildbot/slave/commands.py (SourceBase): keep track of the
1654 repository+branch that was used for the last checkout in
1655 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1656 match, we clobber the directory and perform a fresh checkout
1657 rather than trying to do an in-place update. This should protect
1658 us against trying to get to branch B by doing an update in a tree
1659 obtained from branch A.
1660 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1661 (SVN.setup): same, just the svnurl
1662 (Darcs.setup): same, just the repourl
1663 (Arch.setup): same, arch coordinates (url), version, and
1664 buildconfig. Also pull the buildconfig from the args dictionary,
1665 which we weren't doing before, so the build-config was effectively
1667 (Arch.sourcedirIsUpdateable): don't try to update when we're
1668 moving to a specific revision: arch can't go backwards, so it is
1669 safer to just clobber the tree and checkout a new one at the
1671 (Bazaar.setup): same sourcedata as Arch
1673 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1674 use maybeWait, to work with twisted-1.3.0 and twcompat
1675 (Dependencies.testRun_Pass): same
1677 * buildbot/test/test_vc.py: rearrange, cleanup
1679 * buildbot/twcompat.py: add defer.waitForDeferred and
1680 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1681 can work under twisted-1.3.0 .
1683 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1684 now created at setUp time. This increases the runtime of the test
1685 suite considerably (from 91 seconds to 151), but it removes the
1686 need for an offline tarball, which should solve a problem I've
1687 seen where the test host has a different version of svn than the
1688 tarball build host. The new code also validates that mode=update
1689 really picks up recent commits. This approach will also make it
1690 easier to test out branches, because the code which creates the VC
1691 branches is next to the code which uses them. It will also make it
1692 possible to test some change-notification hooks, by actually
1693 performing a VC commit and watching to see the ChangeSource get
1696 2005-07-12 Brian Warner <warner@lothar.com>
1698 * docs/buildbot.texinfo (SVN): add branches example
1699 * docs/Makefile (buildbot.ps): add target for postscript manual
1701 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1702 * buildbot/test/test_locks.py: same
1704 * buildbot/process/step.py (Darcs): comment about default branches
1706 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1707 c['interlocks'] in the config file, complain if it is present.
1708 Scan all locks in c['builders'] to make sure the Locks they use
1710 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1711 add some tests to check for non-uniquely-named Locks
1712 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1713 since the unique-Lock validation code requires it now
1715 * buildbot/locks.py: fix test-case-name
1717 * buildbot/interlock.py: remove old file
1719 2005-07-11 Brian Warner <warner@lothar.com>
1721 * buildbot/test/test_interlock.py: rename to..
1722 * buildbot/test/test_locks.py: .. something shorter
1724 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1725 versions (after 2.0.1) changed internet.TCPClient to shut down the
1726 connection in stopService. Change the code to handle this
1729 * buildbot/process/base.py (Build): handle whole-Build locks
1730 * buildbot/process/builder.py (Builder.compareToSetup): same
1731 * buildbot/test/test_interlock.py: make tests work
1733 * buildbot/process/step.py (BuildStep.startStep): complain if a
1734 Step tries to claim a lock that's owned by its own Build
1735 (BuildStep.releaseLocks): typo
1737 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1738 file reloads don't replace unchanged Builders
1740 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1741 rewrite to cover new Locks instead of old c['interlocks']
1742 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1746 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1747 start the master and connect the buildslave
1749 * buildbot/process/step.py (FailingDummy.done): finish with a
1750 FAILURE status rather than raising an exception
1752 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1753 stringify a BuildRequest.reason that is None
1755 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1757 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1758 allow scheduler.Dependent to work
1759 * buildbot/buildset.py (BuildSet): set .reason and .results
1761 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1762 slaves, to make the test stop hanging. It still fails, of course,
1763 because I haven't even started to implement Locks.
1765 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1767 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1768 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1769 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1770 (Dependent): new class for downstream build dependencies
1771 * buildbot/test/test_dependencies.py: tests (still failing)
1773 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1775 2005-07-07 Brian Warner <warner@lothar.com>
1777 * buildbot/test/runutils.py (RunMixin): factored this class out..
1778 * buildbot/test/test_run.py: .. from here
1779 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1780 added new buildbot.locks tests (which all hang right now)
1781 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1782 * buildbot/process/step.py: claim/release per-BuildStep locks
1784 * docs/Makefile: add 'buildbot.html' target
1786 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1787 interpreted as "HEAD", so that all VC steps can accept branch=None
1788 and have it mean the "default branch".
1790 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1792 2005-07-07 Brian Warner <warner@lothar.com>
1794 * docs/examples/twisted_master.cfg: update to match current usage
1796 * docs/buildbot.texinfo (System Architecture): comment out the
1797 image, it doesn't exist yet and just screws up the HTML manual.
1799 2005-07-05 Brian Warner <warner@lothar.com>
1801 * debian/.cvsignore: oops, missed one. Removing leftover file.
1803 2005-06-17 Brian Warner <warner@lothar.com>
1805 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1806 changed its output in 1.2.0, don't mistakenly think that the
1807 subversion we find isn't capable of supporting our tests.
1809 * debian/*: remove the debian/ directory and its contents, to make
1810 life easier for the proper Debian maintainer
1812 * Makefile (release): same
1814 2005-06-07 Brian Warner <warner@lothar.com>
1816 * everything: create a distinct SourceStamp class to replace the
1817 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1818 Changed the signature of Source.startVC to include the revision
1819 information (instead of passing it through self.args). Implement
1820 branches for SVN (now only Darcs/Git is missing support). Add more
1823 2005-06-06 Brian Warner <warner@lothar.com>
1825 * everything: rearrange build scheduling. Create a new Scheduler
1826 object (configured in c['schedulers'], which submit BuildSets to a
1827 set of Builders. Builders can now use multiple slaves. Builds can
1828 be run on alternate branches, either requested manually or driven
1829 by changes. This changed some of the Status classes. Interlocks
1830 are out of service until they've been properly split into Locks
1831 and Dependencies. treeStableTimer, isFileImportant, and
1832 periodicBuild have all been moved from the Builder to the
1834 (BuilderStatus.currentBigState): removed the 'waiting' and
1835 'interlocked' states, removed the 'ETA' argument.
1837 2005-05-24 Brian Warner <warner@lothar.com>
1839 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1840 erroneously abandons the connection (in clientConnectionFailed)
1841 for non-UserErrors, which means that if we lose the connection due
1842 to a network problem or a timeout, we'll never try to reconnect.
1843 Fix this by not upcalling to the buggy parent method. Note:
1844 twisted-2.0 fixes this, but the function only has 3 lines so it
1845 makes more sense to copy it than to try and detect the buggyness
1846 of the parent class. Fixes SF#1207588.
1848 * buildbot/changes/changes.py (Change.branch): doh! Add a
1849 class-level attribute to accomodate old Change instances that were
1850 pickled before 0.6.5 (where .branch was added for new Changes).
1851 This fixes the exception that occurs when you try to look at an
1852 old Change (through asHTML).
1854 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1857 2005-05-23 Brian Warner <warner@lothar.com>
1859 * buildbot/__init__.py (version): release 0.6.6
1861 2005-05-23 Brian Warner <warner@lothar.com>
1863 * NEWS: update for 0.6.6 release
1864 * debian/changelog: same
1866 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1867 before starting: this was done by twistd back when we spawned it,
1868 now that we're importing the pieces and running them in the
1869 current process, we have to do it ourselves. This allows
1870 master.cfg to import files from the same directory without
1871 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1872 Stichele for the catch.
1873 (Options.opt_version): Add a --version command (actually, just make
1874 the existing --version command emit Buildbot's version too)
1876 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1877 fix to make this behave like other LogFiles, this time to handle
1878 existing LogFiles on disk. (add the missing .upgrade method)
1879 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1881 2005-05-21 Brian Warner <warner@lothar.com>
1883 * buildbot/test/test_runner.py (Create.testMaster): match the
1884 rawstring change in runner.py:masterTAC
1886 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1887 TwistedWords is installed
1888 * buildbot/test/test_status.py: same, with TwistedMail
1890 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1891 some old, deprecated, and removed config keys). This should enable
1892 you to use the base buildbot functionality with Twisted-2.0.0 when
1893 you don't also have TwistedWeb and TwistedWords installed
1895 2005-05-20 Brian Warner <warner@lothar.com>
1897 * buildbot/scripts/runner.py (run): call sendchange(), not
1898 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1899 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1900 (stop): don't wait for process to die when sending SIGHUP
1901 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1902 directory name gets interpreted, which you don't want
1905 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1908 2005-05-18 Brian Warner <warner@lothar.com>
1910 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1912 2005-05-18 Brian Warner <warner@lothar.com>
1914 * README: update for 0.6.5
1915 * debian/changelog: same
1917 * buildbot/changes/changes.py: rename tag= to branch=, since
1918 that's how we're using it, and my design for the upcoming "build a
1919 specific branch" feature wants it. also, tag= was too CVS-centric
1920 * buildbot/changes/mail.py (parseSyncmail): same
1921 * buildbot/process/base.py (Build.isBranchImportant): same
1922 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1923 * docs/buildbot.texinfo (Attributes of Changes): same
1925 * NEWS: update tag=, update for upcoming release
1927 2005-05-17 Brian Warner <warner@lothar.com>
1929 * buildbot/scripts/runner.py (stop): actually poll once per
1930 second, instead of re-killing the poor daemon once per second.
1931 Sleep briefly (0.1s) before the first poll, since there's a good
1932 chance we can avoid waiting the full second if the daemon shuts
1933 down quickly. Also remove the sys.exit() at the end.
1934 (start): remove the unneighborly sys.exit()
1936 * Makefile: improve permission-setting to not kick Arch so badly
1938 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1939 default --keepalive=600, since it doesn't hurt very much, and it's
1940 a hassle to discover that you need it.
1941 * buildbot/test/test_runner.py (Create.testSlave): test it
1943 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1944 IRC bot about EXCEPTION
1946 * buildbot/status/client.py (PBListener): upcall more correctly
1948 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1949 an exception mark the overall build with EXCEPTION, not SUCCESS
1951 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1953 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1954 * Makefile: update some release-related stuff
1956 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1957 gets called when there isn't actually an active process, just end
1958 the Command instead of blowing up. I don't know how it gets into
1959 this state, but the twisted win32 buildslave will sometimes hang,
1960 and when it shakes its head and comes back, it thinks it's still
1961 running a Command. The next build causes this command to be
1962 interrupted, but the lack of self.process.pid breaks the interrupt
1965 * NEWS: document changes since the last release
1967 * buildbot/scripts/runner.py (start): change 'buildbot start' to
1968 look for Makefile.buildbot instead of a bare Makefile . The
1969 'buildbot start' does not install this file, so you have to
1970 manually copy it if you want to customize startup behavior.
1971 (createMaster): change 'buildbot master' command to create
1972 Makefile.sample instead of Makefile, to create master.cfg.sample
1973 instead of master.cfg (requiring you to copy it before the
1974 buildmaster can be started). Both sample files are kept up to
1975 date, i.e. they are overwritten if they have been changed. The
1976 'buildbot.tac' file is *not* overwritten, but if the new contents
1977 don't match the old, a 'buildbot.tac.new' file is created and the
1978 user is warned. This seems to be a much more sane way to handle
1979 startup files. Also, don't sys.exit(0) when done, so we can run
1980 unit tests against it.
1981 (createSlave): same. Don't overwrite the sample info/ files.
1982 * buildbot/scripts/sample.mk: remove. the contents were pulled
1983 into runner.py, since they need to match the behavior of start()
1987 * docs/buildbot.texinfo (Launching the daemons): document it
1988 * buildbot/test/test_runner.py (Create): test it
1990 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1991 version that can handle string-in-string tests, because otherwise
1992 python-2.2 fails the tests. It'd be tremendous if Trial's test
1993 took two strings under 2.2 too.
1995 * everything: fixed all deprecation warnings when running against
1996 Twisted-2.0 . (at least all the ones in buildbot code, there are a
1997 few that come from Twisted itself). This involved putting most of
1998 the Twisted-version specific code in the new buildbot.twcompat
1999 module, and creating some abstract base classes in
2000 buildbot.changes.base and buildbot.status.base (which might be
2001 useful anyway). __implements__ is a nuisance and requires an ugly
2002 'if' clause everywhere.
2004 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2005 delay before finishing the test: it seems that smtp.sendmail
2006 doesn't hang up on the server, so we must wait a moment so it can
2007 hang up on us. This removes the trial warning about an unclean
2010 2005-05-16 Brian Warner <warner@lothar.com>
2012 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2013 tuple of (delay, repeats).
2014 * buildbot/test/test_vc.py (Retry): test it
2015 * docs/buildbot.texinfo (Source Checkout): document it
2016 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2017 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2018 doVCFull() are handled by re-trying the checkout (after a delay)
2019 some number of times.
2020 (ShellCommand._startCommand): make header lines easier to read
2022 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2024 (WebTest.test_logfile): make sure master gets shut down, silences
2025 some "unclean reactor" test errors
2027 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2028 reactor once after shutdown, something in certain versions of
2029 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2030 fails, svn-trunk is ok.
2032 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2033 second win32 error message
2035 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2036 validating the ETA, so the tests don't fail on slow systems
2038 2005-05-15 Brian Warner <warner@lothar.com>
2040 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2041 the new LogFile class, so upgrading works properly
2042 (LogFileProducer.resumeProducing): survive resumeProducing after
2043 we've exhausted the chunkGenerator
2045 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2047 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2048 (Log.testUpgrade): same
2050 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2051 Builds and logs with a cron job.
2053 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2054 of the old non-offline LogFile, added code to upgrade these to
2055 new-style contents-live-on-disk instances at load time (in a way
2056 that doesn't invalidate the old Build pickles, so upgrading to
2057 0.6.5 is not a one-way operation). Got rid of everything related
2059 (LogFile.__init__): create LogFiles with the parent step status,
2060 the log's name, and a builder-relative filename where it can keep
2061 the contents on disk.
2062 (LogFile.hasContents): new method, clients are advised to call it
2063 before getText or getChunks and friends. If it returns False, the
2064 log's contents have been deleted and getText() will raise an
2066 (LogFile.getChunks): made it a generator
2067 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2068 Consumer (except one that takes chunks instead of strings). This
2069 enables streaming of very large logfiles without storing the whole
2071 (BuildStatus.generateLogfileName): create names like
2072 12-log-compile-output, with a _0 suffix if required to be unique
2073 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2074 or earlier) logfiles into new-style ones
2075 (BuilderStatus): remove everything related to 'stub' builds. There
2076 is now only one build cache, and we don't strip logs from old
2078 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2079 since we no longer fight to keep it in the cache
2081 * buildbot/status/html.py (TextLog.render_GET): use a
2082 ChunkConsumer to stream the log entries efficiently.
2083 (ChunkConsumer): wrapper which consumes chunks and writes
2086 * buildbot/test/test_twisted.py (Parse.testParse): use a
2087 LogFile-like object instead of a real one
2089 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2090 (Log.testMerge3): validate more merge behavior
2091 (Log.testChunks): validate LogFile.getChunks
2092 (Log.testUpgrade): validate old-style LogFile upgrading
2093 (Log.testSubscribe): validate LogFile.subscribe
2094 (Log.testConsumer): validate LogFile.subscribeConsumer
2096 * buildbot/interfaces.py (IStatusLogStub): remove
2097 (IStatusLog.subscribeConsumer): new method
2098 (IStatusLog.hasContents): new method
2099 (IStatusLogConsumer): describes things passed to subscribeConsumer
2101 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2102 the log contents if it does not have any contents.
2103 (StatusResourceBuildStep.body): same
2104 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2106 2005-05-14 Brian Warner <warner@lothar.com>
2108 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2109 timeouts to try and make the windows metabuildslave not hang
2111 2005-05-13 Mike Taylor <bear@code-bear.com>
2113 * buildbot/slave/commands.py (rmdirRecursive): added a check
2114 to ensure the path passed into rmdirRecursive actually exists.
2115 On win32 a non-existant path would generate an exception.
2117 2005-05-13 Brian Warner <warner@lothar.com>
2119 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2120 shutil.rmtree which behaves correctly on windows in the face of
2121 files that you have to chmod before deleting. Thanks to Bear at
2122 the OSAF for the routine.
2123 (SourceBase.doClobber): use rmdirRecursive
2125 2005-05-12 Brian Warner <warner@lothar.com>
2127 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2128 method generate chunks instead of returning a big list. This
2129 allows the same method to be used for both old LogFile and new
2131 (OfflineLogFile.getText): use the generator
2132 (OfflineLogFile.subscribe): same
2133 * buildbot/status/html.py (TextLog.resumeProducing): same
2134 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2136 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2137 point out that OfflineLogFile does not currently work with
2138 html.Waterfall . Fixing this is high-priority.
2140 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2141 apparently windows defaults to using stdout
2143 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2144 better message on failure so I can figure out the win32 problem
2146 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2147 log messages to include more useful copies of the command being
2148 run, the argv array, and the child command's environment.
2149 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2151 2005-05-11 Brian Warner <warner@lothar.com>
2153 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2155 * Makefile: update the deb-snapshot version
2157 * docs/buildbot.texinfo: move all .xhtml docs into a new
2158 .texinfo-format document, adding a lot of material in the process.
2159 This is starting to look like a real user's manual. Removed all
2160 the Lore-related files: *.xhtml, *.css, template.tpl .
2161 * docs/Makefile: simple makefile to run 'makeinfo'
2162 * buildbot/scripts/sample.cfg: rearrange slightly
2163 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2165 2005-05-10 Brian Warner <warner@lothar.com>
2167 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2168 different name for the internal twistw module, handle it.
2170 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2171 * setup.py: .. and stop trying to install it
2173 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2174 'git'), the new linux kernel VC system (http://kernel.org/git/).
2175 Thanks to Brandon Philips for the patch.
2176 * buildbot/slave/commands.py (Git): same
2178 2005-05-06 Brian Warner <warner@lothar.com>
2180 * buildbot/status/builder.py (OfflineLogFile): replace the default
2181 LogFile with a form that appends its new contents to a disk file
2182 as they arrive. The complete log data is never kept in RAM. This
2183 is the first step towards handling very large (100MB+) logfiles
2184 without choking quite so badly. (The other half is
2185 producer/consumer on the HTML pages).
2186 (BuildStepStatus.addLog): use OfflineLogFile by default
2187 (BuildStatus.getLogfileName): helper code to give the
2188 OfflineLogFile a filename to work with
2190 * buildbot/test/test_status.py (Results.testAddResults): update
2191 tests to handle new asserts
2192 * buildbot/test/test_vc.py (Patch.doPatch): same
2193 * buildbot/test/test_steps.py (BuildStep.setUp): same
2195 2005-05-05 Brian Warner <warner@lothar.com>
2197 * buildbot/scripts/runner.py (start): if there is no Makefile,
2198 launch the app by importing twistd's internals and calling run(),
2199 rather than spawning a new twistd process. This stands a much
2200 better chance of working under windows.
2201 (stop): kill the process with os.kill instead of spawning
2202 /bin/kill, again to reduce the number of external programs which
2203 windows might not have in the PATH. Also wait up to 5 seconds for
2204 the process to go away, allowing things like 'buildbot stop;
2205 buildbot start' to be reliable in the face of slow shutdowns.
2207 * buildbot/master.py (Dispatcher.__getstate__): remove old
2208 .tap-related methods
2209 (BuildMaster.__getstate__): same
2211 * buildbot/slave/bot.py (makeService): same
2212 (Options.longdesc): same
2213 * buildbot/scripts/runner.py: copy over some old mktap option text
2215 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2216 'buildbot master' now creates a buildbot.tac file, so there is no
2217 longer a create-instance/save/reload sequence. mktap is dead, long
2219 * buildbot/scripts/sample.mk: use twistd -y, not -f
2220 * buildbot/test/test_config.py: remove mktap-based test
2221 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2222 * README: don't reference mktap
2224 * docs/source.xhtml: document some of the attributes that Changes
2227 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2229 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2230 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2231 * buildbot/changes/changes.py (Change)
2232 * buildbot/changes/mail.py (parseSyncmail)
2233 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2235 * buildbot/process/base.py (Build.isTagImportant)
2239 2005-05-04 Brian Warner <warner@lothar.com>
2241 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2242 connection after sending the change, so that unit tests don't
2243 complain about sockets being left around
2245 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2246 exception in phase=0 rendering
2247 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2249 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2251 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2252 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2253 and configuring builders with tuples.
2254 * buildbot/test/test_config.py: stop testing compatibility with
2255 deprecated config keys
2256 * buildbot/test/test_run.py: same
2258 2005-05-03 Brian Warner <warner@lothar.com>
2260 * contrib/arch_buildbot.py: survive if there are no logfiles
2261 (username): just use a string, os.getlogin isn't reliable
2263 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2264 so 'buildbot sendchange' actually works. The earlier test only
2265 covered the internal (non-reactor-running) form.
2267 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2268 script to notify the buildmaster about changes
2270 * buildbot/scripts/runner.py (sendchange): new command to send a
2271 change to a buildbot.changes.pb.PBChangeSource receiver.
2272 * buildbot/test/test_changes.py (Sender): test it
2274 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2275 after any reading of the config file, not just when we do it in
2276 startService. This makes some tests a bit cleaner.
2278 * buildbot/changes/pb.py: add some log messages
2280 * buildbot/process/base.py (Build.startBuild): fix a bug that
2281 caused an exception when the build terminated in the very first
2283 (Build.stepDone): let steps return a status of EXCEPTION. This
2284 terminates the build right away, and sets the build's overall
2285 status to EXCEPTION too.
2286 * buildbot/process/step.py (BuildStep.failed): return a status of
2287 EXCEPTION when that is what has happened.
2289 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2290 implement this, allowing Arch-based projects to get precise
2291 checkouts instead of always using the latest code
2292 (Bazaar): create variant of Arch to let folks use baz instead of
2293 tla. Requires a new buildslave too.
2294 * buildbot/slave/commands.py (Arch): add 'revision' argument
2295 (Bazaar): create variant of Arch that uses baz instead of tla.
2296 Remove the code that extracts the archive name from the
2297 register-archive output, since baz doesn't provide it, and require
2298 the user provide both the archive name and its location.
2299 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2301 2005-05-02 Brian Warner <warner@lothar.com>
2303 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2304 thanks to Nick Trout.
2306 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2307 deals better with source Makefile coming from a read-only CVS
2308 checkout. Thanks to Nick Trout for the catch.
2310 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2313 2005-04-28 Brian Warner <warner@lothar.com>
2315 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2317 * debian/changelog: update for 0.6.4
2319 2005-04-28 Brian Warner <warner@lothar.com>
2321 * README.w32: add a checklist of steps for getting buildbot
2323 * MANIFEST.in: include it in the tarball
2327 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2328 broken .tap files from 0.6.3 by getting rid of .services,
2329 .namedServices, and .change_svc at load time.
2331 2005-04-27 Brian Warner <warner@lothar.com>
2333 * NEWS: update in preparation for new release
2335 * buildbot/test/test_config.py (Save.testSave): don't pull in
2336 twisted.scripts.twistd, we don't need it and it isn't for windows
2339 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2340 accomodate win32 which can't do atomic-rename
2342 2005-04-27 Brian Warner <warner@lothar.com>
2344 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2345 timeouts to help the slow metabuildbot not flunk them so much
2346 (Disconnect.testBuild3): same
2347 (Disconnect.testBuild4): same
2348 (Disconnect.testInterrupt): same
2350 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2351 setup, it was completely broken for new buildmasters (those which
2352 did not have a 'change.pck' already saved. Thanks to Paul Warren
2353 for catching this (embarrassing!) bug.
2354 (Dispatcher.__getstate__): don't save our registered avatar
2355 factories, since they'll be re-populated when the config file is
2357 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2358 tests (since the real mktap-generated BuildMaster doesn't save
2360 (BuildMaster.__getstate__): don't save any service children,
2361 they'll all be re-populated when the config file is re-read.
2362 * buildbot/test/test_config.py (Save.testSave): test for this
2364 2005-04-26 Brian Warner <warner@lothar.com>
2366 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2367 rendered with Blender.. looks a bit nicer.
2368 * buildbot/docs/images/icon.blend: add the Blender file for it
2370 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2371 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2372 running under windows. This appears to be the best way to allow
2373 BuildSteps to do something normal like 'trial -v buildbot.test' or
2374 'make foo' and still expect it to work. The idea is to make the
2375 BuildSteps look as much like what a developer would type when
2376 compiling or testing the tree by hand. This approach probably has
2377 problems when there are spaces in the arguments, so if you've got
2378 windows buildslaves, you'll need to pay close attention to your
2381 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2382 timezone to the timestamp column.
2383 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2385 * buildbot/scripts/runner.py (loadOptions): do something sane for
2386 windows, I think. We use %APPDATA%/buildbot instead of
2387 ~/.buildbot, but we still search everywhere from the current
2388 directory up to the root for a .buildbot/ subdir. The "is it under
2389 $HOME" security test was replaced with "is it owned by the current
2390 user", which is only performed under posix.
2391 * buildbot/test/test_runner.py (Options.testFindOptions): update
2392 tests to match. The "is it owned by the current user" check is
2393 untested. The test has been re-enabled for windows.
2395 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2396 any "\n" in the expected output with the platform-specific line
2397 separator. Make this separator "\r\n" on PTYs under unix, they
2398 seem to do that and I don't know why
2400 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2401 windows for now, I don't know what ~/.buildbot/ should mean there.
2403 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2404 win32 compatibility, don't use "/tmp"
2405 (Basedir.testChangeBuilddir): remove more unixisms
2407 2005-04-26 Brian Warner <warner@lothar.com>
2409 * buildbot/test/test_control.py (Force.rmtree): python2.2
2410 compatibility, apparently its shutil.rmtree ignore_errors=
2411 argument is ignored.
2412 * buildbot/test/test_run.py (Run.rmtree): same
2413 (RunMixin.setUp): same
2415 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2418 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2419 'substring in string' operator, must use string.find(substr)!=-1
2420 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2421 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2423 * buildbot/scripts/runner.py (loadOptions): add code to search for
2424 ~/.buildbot/, a directory with things like 'options', containing
2425 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2426 the current directory, your $HOME directory, or anywhere
2427 inbetween, as long as you're somewhere inside your home directory.
2428 (debugclient): look in ~/.buildbot/options for master and passwd
2429 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2430 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2432 * buildbot/status/client.py (makeRemote): new approach to making
2433 IRemote(None) be None, which works under Twisted-2.0
2434 * buildbot/test/test_status.py (Client.testAdaptation): test it
2436 * buildbot/status/builder.py (Status.builderAdded): when loading a
2437 pickled BuilderStatus in from disk, set its name after loading.
2438 The config file might have changed its name (but not its
2439 directory) while it wasn't looking.
2441 * buildbot/process/builder.py (Builder.attached): always return a
2442 Deferred, even if the builder was already attached
2443 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2445 2005-04-25 Brian Warner <warner@lothar.com>
2447 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2448 category-related exception when announcing a build has finished
2450 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2451 reference no-longer-existent changemaster.sources
2452 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2454 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2457 2005-04-25 Brian Warner <warner@lothar.com>
2459 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2461 * debian/changelog: update for 0.6.3
2463 2005-04-25 Brian Warner <warner@lothar.com>
2465 * MANIFEST.in: make sure debug.glade is in the tarball
2467 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2469 * NEWS: update for the imminent 0.6.3 release
2471 * buildbot/status/html.py (HtmlResource.content): make the
2472 stylesheet <link> always point at "buildbot.css".
2473 (StatusResource.getChild): map "buildbot.css" to a static.File
2474 containing whatever css= argument was provided to Waterfall()
2475 (Waterfall): provide the "classic" css as the default.
2476 * docs/waterfall.classic.css: move default CSS from here ..
2477 * buildbot/status/classic.css: .. to here
2479 * MANIFEST.in: make sure classic.css is included in the tarball
2480 * setup.py: and that it is installed too, under buildbot/status/
2482 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2483 the module level, because buildbot.tap files from 0.6.2 don't have
2484 it in their attribute dictionary.
2486 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2487 really exists at startup, might save some confusion somewhere.
2489 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2491 * docs/waterfall.classic.css:
2492 add a stylesheet that's almost the same as the "classic"
2495 * buildbot/status/builder.py:
2496 add EXCEPTION as a result - this is a problem for the bot
2497 maintainer, not a build problem for the changers
2498 * buildbot/process/step.py:
2499 use EXCEPTION instead of FAILURE for exceptions
2500 * buildbot/status/html.py:
2501 add build_get_class to get a class out of a build/buildstep
2502 finish naming the classes
2503 split out sourceNames to changeNames and builderNames so we
2504 can style them separately
2505 * docs/config.xhtml:
2506 finish documenting classes as they are right now
2508 * buildbot/status/html.py:
2509 name the classes as we agreed on IRC
2510 * docs/config.xhtml:
2513 * buildbot/status/html.py:
2514 same for cssclass->class_
2516 * buildbot/status/html.py:
2517 as decided on IRC, use class_ for the "class" attribute to not
2518 conflict with the class keyword, and clean up the messy **{} stuff.
2520 * buildbot/status/mail.py:
2521 put back "builders" argument, and fix docstring, because the
2522 code *ignores* builders listed in this argument
2524 * buildbot/process/builder.py:
2525 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2527 * docs/config.xhtml:
2528 describe the category argument for builders
2530 * buildbot/status/builder.py:
2531 Fix a silly bug due to merging
2533 * buildbot/process/builder.py:
2534 remove category from the process Builder ...
2535 * buildbot/status/builder.py:
2536 ... and add it to BuilderStatus instead.
2537 Set category on unpickled builder statuses, they might not have it.
2538 * buildbot/master.py:
2539 include category when doing builderAdded
2540 * buildbot/status/mail.py:
2541 return None instead of self for builders we are not interested in.
2542 * buildbot/test/test_run.py:
2543 fix a bug due to only doing deferredResult on "dummy" waiting
2544 * buildbot/test/test_status.py:
2545 add checks for the Mail IStatusReceiver returning None or self
2547 * buildbot/status/html.py:
2548 fix testsuite by prefixing page title with BuildBot
2550 * buildbot/status/builder.py:
2551 have .category in builder status ...
2552 * buildbot/process/builder.py:
2553 ... and set it from Builder
2554 * buildbot/status/html.py:
2555 make .css a class variable
2556 * buildbot/test/test_status.py:
2557 write more tests to cover our categories stuff ...
2558 * buildbot/status/mail.py:
2559 ... and fix the bug that this uncovered
2561 * buildbot/changes/mail.py:
2562 * buildbot/changes/pb.py:
2563 * buildbot/master.py:
2564 * buildbot/process/base.py:
2565 * buildbot/process/factory.py:
2566 * buildbot/process/interlock.py:
2567 * buildbot/process/step.py:
2568 * buildbot/process/step_twisted.py:
2569 * buildbot/slave/commands.py:
2570 * buildbot/status/builder.py:
2571 * buildbot/status/client.py:
2572 * buildbot/status/html.py:
2573 * buildbot/status/mail.py:
2574 * buildbot/status/progress.py:
2575 * buildbot/test/test_changes.py:
2576 * buildbot/test/test_config.py:
2577 * buildbot/test/test_control.py:
2578 * buildbot/test/test_interlock.py:
2579 * buildbot/test/test_maildir.py:
2580 * buildbot/test/test_mailparse.py:
2581 * buildbot/test/test_run.py:
2582 * buildbot/test/test_slavecommand.py:
2583 * buildbot/test/test_status.py:
2584 * buildbot/test/test_steps.py:
2585 * buildbot/test/test_twisted.py:
2586 * buildbot/test/test_util.py:
2587 * buildbot/test/test_vc.py:
2588 * buildbot/test/test_web.py:
2590 add test-case-name at the top of a whole set of files
2592 * buildbot/status/builder.py:
2593 keep order of addition when getting builder names
2594 * buildbot/status/words.py:
2595 * buildbot/test/test_run.py:
2596 add test for getBuilderNames
2598 * buildbot/process/base.py:
2599 * buildbot/process/step.py:
2600 * buildbot/status/builder.py:
2601 * buildbot/status/html.py:
2602 make buildbot css-able
2603 replace the color code for purple with purple, don't understand
2604 why it wasn't purple to start with
2606 * buildbot/status/words.py:
2607 ok, so it doesn't look like BuilderStatus.remote is still valid.
2608 Use what waterfall uses instead.
2610 * buildbot/interfaces.py:
2611 * buildbot/status/builder.py:
2612 * buildbot/status/html.py:
2613 * buildbot/status/mail.py:
2614 * buildbot/status/words.py:
2615 * buildbot/test/test_run.py:
2616 use categories everywhere and make it be a list. More sensible
2617 for the future. Also make words actually respect this in
2620 * buildbot/interfaces.py:
2621 add category argument to getBuilderNames
2622 * buildbot/process/builder.py:
2623 * buildbot/status/builder.py:
2624 * buildbot/status/html.py:
2625 * buildbot/status/mail.py:
2626 * buildbot/status/words.py:
2627 * buildbot/test/test_run.py:
2628 move from specifying builders by name to specifying the category
2630 * buildbot/status/html.py:
2631 * buildbot/status/words.py:
2632 add "builders=" to __init__ of status clients so they can
2633 limit themselves to the given list of builders to report on
2635 * buildbot/status/html.py: set the title to the product name
2637 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2639 * buildbot/interfaces.py:
2640 * buildbot/status/builder.py:
2641 more documentation. Hm, not sure if ChangeLog entries make sense
2644 2005-04-23 Brian Warner <warner@lothar.com>
2646 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2648 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2650 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2651 the sub-commands that log buildmaster status to stdout and to a
2652 GUI window, respectively.
2654 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2655 functionality is working again, but all the step-status and ETA
2656 stuff is missing. Commented out a lot of code pending more
2659 * buildbot/status/client.py: make sure that IRemote(None) is None
2661 * buildbot/changes/changes.py: import defer, oops
2662 (ChangeMaster): remove the .sources list, rely upon the fact that
2663 MultiServices can be treated as sequences of their children. This
2664 cleans up the add/remove ChangeSource routines a lot, as we keep
2665 exactly one list of the current sources instead of three.
2667 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2668 up an empty ChangeMaster at init time.
2669 (BuildMaster.loadChanges): if there are changes to be had from
2670 disk, replace self.change_svc with the new ones. If not, keep
2671 using the empty ChangeMaster set up in __init__.
2672 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2673 instead of a separate list, makes the code a bit cleaner.
2674 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2675 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2676 Extend the test to make sure we can get rid of the sources when
2679 2005-04-22 Brian Warner <warner@lothar.com>
2681 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2682 and info/host files when making the slave directory
2684 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2685 whendone= argument, just return the Deferred and let the caller do
2686 what they want with it.
2687 (Disconnect.testBuild1): wait for shutdownSlave
2688 (Basedir.testChangeBuilddir): new test to make sure changes to the
2689 builddir actually get propagated to the slave
2691 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2692 explicit method, rather than passing the builddir in __init__ .
2693 Make sure to update self.basedir too, this was broken before.
2694 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2695 builders and for ones that have just had their builddir changed.
2696 (BotFactory): add a class-level .perspective attribute, so
2697 BuildSlave.waitUntilDisconnected won't get upset when the
2698 connection hasn't yet been established
2699 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2700 tests can reach through it to inspect the SlaveBuilders
2702 * buildbot/process/base.py (Build.buildException): explain the
2703 log.err with a log.msg
2704 * buildbot/process/builder.py (Builder.startBuild): same
2705 (Builder._startBuildFailed): improve error message
2707 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2708 occurred because we lost the brand-new connection, retry instead
2709 of giving up. If not, it's probably an authorization failure, and
2710 it makes sense to stop trying. Make sure we log.msg the reason
2711 that we're log.err'ing the failure, otherwise test failures are
2712 really hard to figure out.
2714 * buildbot/master.py: change loadConfig() to return a Deferred
2715 that doesn't fire until the change has been fully implemented.
2716 This means any connected slaves have been updated with the new
2717 builddir. This change makes it easier to test the code which
2718 actually implements this builddir-updating.
2719 (BotPerspective.addBuilder): return Deferred
2720 (BotPerspective.removeBuilder): same
2721 (BotPerspective.attached): same
2722 (BotPerspective._attached): same. finish with remote_print before
2723 starting the getSlaveInfo, instead of doing them in parallel
2724 (BotPerspective.list_done): same
2725 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2726 actually calling slave.disconnect()
2727 (BotMaster.addBuilder): same
2728 (BotMaster.removeBuilder): same
2729 (BuildMaster.loadConfig): same
2730 (BuildMaster.loadConfig_Slaves): same
2731 (BuildMaster.loadConfig_Sources): same
2732 (BuildMaster.loadConfig_Builders): same
2733 (BuildMaster.loadConfig_status): same
2735 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2736 a Deferred that fires when the source is finally removed
2738 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2739 the previous tree on win32, where we have to do it synchronously,
2740 make sure we return a Deferred anyway.
2741 (SourceBase.doCopy): same
2743 * buildbot/scripts/runner.py (statusgui): use the text client for
2744 now, while I rewrite the Gtk one
2745 * buildbot/clients/base.py: strip out old code, leaving just the
2746 basic print-message-on-event functionality. I also remove the
2747 ReconnectingPBClientFactory, but it does at least quit when it
2748 loses the connection instead of going silent
2750 2005-04-21 Brian Warner <warner@lothar.com>
2752 * Makefile: minor tweaks
2754 * NEWS: point out deprecation warnings, new features for
2757 * buildbot/master.py (BuildMaster.loadConfig): emit
2758 DeprecationWarnings for Builders defined with tuples. Rearrange
2759 code to facility removal of deprecated configuration keys in the
2762 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2763 'buildbot' command to put a little Makefile in the target that
2764 helps you re-create the buildbot.tap file, start or stop the
2765 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2766 all the files 0600, since they contain passwords.
2767 (start): if there is a Makefile, and /usr/bin/make exists, use
2768 'make start' in preference to a raw twistd command. This lets
2769 slave admins put things like PYTHONPATH variables in their
2770 Makefiles and have them still work when the slave is started with
2771 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2772 be nice to first try the 'make' command and only fall back to
2773 twistd if it fails. TODO: the Makefile's "start" command does not
2774 add the --reactor=win32 argument when running under windows.
2775 (Options.debugclient, Options.statusgui): add sub-commands to launch
2776 the debug client (formerly in contrib/debugclient.py) and the
2777 Gtk status application (currently broken)
2778 * buildbot/clients/debug.py: move from contrib/debugclient.py
2779 * buildbot/clients/debug.glade: same
2781 * buildbot/test/test_trial.py: remove it. This requires some
2782 functionality out of Twisted that isn't there yet, and until then
2783 having it around just confuses things.
2785 * buildbot/test/test_slavecommand.py (Shell): test both with and
2786 without PTYs, and make sure that command output is properly
2787 interleaved in the with-PTY case. I think the without-PTY test
2788 should pass on windows, where we never use PTYs anyway.
2790 2005-04-20 Brian Warner <warner@lothar.com>
2792 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2794 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2796 * NEWS: start creating entries for the next release
2798 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2800 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2801 (WebTest.test_webPathname): same
2802 (WebTest.test_webPathname_port): same
2803 (WebTest.test_waterfall): use the default favicon rather than
2804 rooting around the filesystem for it. Open the expected-icon file
2805 in binary mode, to make win32 tests happier (thanks to Nick Trout
2807 * buildbot/status/html.py (buildbot_icon): win32 portability
2809 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2810 win32-compatibility fixes from Nick Trout, the "file not found" message
2811 is different under windows
2812 (FakeSlaveBuilder.__init__): clean up setup a bit
2813 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2815 2005-04-19 Brian Warner <warner@lothar.com>
2817 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2818 skip-if-repositories-are-unavailable test to not kill the trial
2819 that comes with Twisted-1.3.0
2821 * setup.py: install buildbot.png icon file when installing code
2823 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2824 environment used by the command, at least on the child side.
2826 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2827 this method needs to be added and implemented because it gets
2828 called under heavy load. I don't quite understand the
2829 producer/consumer API enough to write it.
2830 (StatusResource.getChild): add a resource for /favicon.ico
2831 (Waterfall.__init__): add favicon= argument
2832 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2833 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2834 (WebTest.test_webPathname): same
2835 (WebTest.test_webPathname_port): same
2836 * docs/config.xhtml: mention favicon=
2837 * buildbot/buildbot.png: add a default icon, dorky as it is
2839 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2841 * buildbot/master.py:
2842 * buildbot/process/base.py:
2843 * buildbot/process/builder.py:
2844 * buildbot/process/interlock.py:
2845 * buildbot/status/builder.py:
2846 * buildbot/status/html.py:
2847 * buildbot/status/mail.py:
2848 * buildbot/status/words.py:
2849 new documentation while digging through the code
2851 2005-04-17 Brian Warner <warner@lothar.com>
2853 * general: try to fix file modes on all .py files: a+r, a-x,
2854 but let buildbot/clients/*.py be +x since they're tools
2856 * docs/epyrun (addMod): when an import fails, say why
2858 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2860 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2862 * buildbot/process/base.py:
2863 * buildbot/process/builder.py:
2864 * buildbot/status/builder.py:
2865 new documentation while digging through the code
2867 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2869 * buildbot/changes/changes.py:
2870 * buildbot/changes/p4poller.py:
2871 * buildbot/interfaces.py:
2872 * buildbot/process/base.py:
2873 * buildbot/process/builder.py:
2874 * buildbot/process/step.py:
2875 * buildbot/process/step_twisted.py:
2876 * buildbot/slave/bot.py:
2877 * buildbot/slave/commands.py:
2878 * buildbot/status/builder.py:
2879 fix all docstrings to make epydoc happy. In the process of fixing
2880 some, I also moved pieces of docs, and removed some deprecated
2883 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2885 * buildbot/process/builder.py:
2886 * buildbot/process/interlock.py:
2887 * buildbot/process/process_twisted.py:
2888 * buildbot/process/step.py:
2889 BuildProcess -> Build, as it looks like that's what happened
2890 * buildbot/process/base.py:
2891 * buildbot/process/factory.py:
2894 2005-04-17 Brian Warner <warner@lothar.com>
2896 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2897 update compile command to accomodate the Twisted split.. now
2898 instead of './setup.py build_ext -i', you do './setup.py all
2899 build_ext -i', to run build_ext over all sub-projects.
2900 (FullTwistedBuildFactory): same
2901 (TwistedReactorsBuildFactory): same
2903 * buildbot/status/html.py (TextLog.finished): null out self.req
2904 when we're done, otherwise the reference cycle of TextLog to .req
2905 to .notifications to a Deferred to TextLog.stop keeps them from
2906 being collected, and consumes a huge (610MB on pyramid at last
2907 check) amount of memory.
2909 2005-04-11 Brian Warner <warner@lothar.com>
2911 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2912 normalize the VC-repository location.. makes SVN happier with
2913 certain test environments.
2915 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2916 RemoteShellCommand gets its own .env dictionary, so that code in
2917 start() doesn't mutate the original. I think this should fix the
2918 step_twisted.Trial problem where multiple identical components
2919 kept getting added to PYTHONPATH= over and over again.
2921 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2922 adding epydoc-format docstrings to many classes. Thanks to Thomas
2923 Vander Stichele for the patches.
2924 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2925 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2926 * buildbot/slave/bot.py, commands.py, registry.py: same
2928 2005-04-05 Brian Warner <warner@lothar.com>
2930 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2931 preserve timestamps, helps incremental builds of large trees.
2932 Patch from Rene Rivera.
2934 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2935 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2938 2005-04-03 Brian Warner <warner@lothar.com>
2940 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2941 with one dict, apparently exec has some scoping bugs when used
2942 with both global/local dicts. Thanks to Nathaniel Smith for the
2945 2005-04-02 Brian Warner <warner@lothar.com>
2947 * buildbot/process/step_twisted.py (countFailedTests): the new
2948 trial in Twisted-2.0 emits a slightly different status line than
2949 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2950 mistakenly think the test count is unparseable.
2951 (Trial.start): note that for some reason each build causes another
2952 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2953 be fixed but I'm not sure quite where the problem is.
2955 2005-04-01 Brian Warner <warner@lothar.com>
2957 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2958 deferredResult to avoid hangs/warnings under twisted-2.0
2959 (RunMixin.tearDown): same
2960 (RunMixin.shutdownSlave): same
2961 (Disconnect.testIdle1): same
2962 (Disconnect.testBuild2): same: wait one second after the build
2963 finishes for test to really be done.. this should be cleaned up to
2964 avoid wasting that second. Builder.detach uses a callLater(0),
2965 either that should be done in-line (something else needed that
2966 behavior), or it should return a Deferred that fires when the
2967 builder is really offline.
2968 (Disconnect.testBuild3): same
2969 (Disconnect.testDisappear): same
2971 * buildbot/test/test_web.py: rearrange server-setup and teardown
2972 code to remove unclean-reactor warnings from twisted-2.0
2974 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2975 so the tests don't hang under twisted-2.0
2977 2005-03-31 Brian Warner <warner@lothar.com>
2979 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2980 caused a warning each time the master changed our set of builders
2982 * buildbot/status/builder.py (BuildStatus.saveYourself): under
2983 w32, don't unlink the file unless it already exists. Thanks to
2984 Baptiste Lepilleur for the catch.
2985 (BuilderStatus.saveYourself): same
2987 2005-02-01 Brian Warner <warner@lothar.com>
2989 * buildbot/status/html.py (TextLog.getChild): use a /text child
2990 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2991 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2992 logfile as text/plain (no markup, no headers). This replaces the
2993 previous scheme (which used an ?text=1 argument), and gets us back
2994 to a relative link (which works better when the buildbot lives
2995 behind another web server, such as Apache configured as a reverse
2996 proxy). Thanks to Gerald Combs for spotting the problem.
2998 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3001 2004-12-13 Brian Warner <warner@lothar.com>
3003 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3005 * debian/changelog: update for 0.6.2
3006 * NEWS: finalize for 0.6.2
3008 2004-12-11 Brian Warner <warner@lothar.com>
3010 * NEWS: bring it up to date
3012 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3013 detection code. Require some sign of life from the buildmaster
3014 every BotFactory.keepaliveInterval seconds. Provoke this
3015 indication at BotFactory.keepaliveTimeout seconds before the
3016 deadline by sending a keepalive request. We don't actually care if
3017 that request is answered in a timely fashion, what we care about
3018 is that .activity() is called before the deadline. .activity() is
3019 triggered by any PB message from the master (including an ack to
3020 one of the slave's status-update messages). With this new scheme,
3021 large status messages over slow pipes are OK, as long as any given
3022 message can be sent (and thus acked) within .keepaliveTimeout
3023 seconds (which defaults to 30).
3024 (SlaveBuilder.remote_startCommand): record activity
3025 (SlaveBuilder.ackUpdate): same
3026 (SlaveBuilder.ackComplete): same
3027 (BotFactory.gotPerspective): same
3028 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3030 2004-12-09 Brian Warner <warner@lothar.com>
3032 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3035 * buildbot/process/step_twisted.py (Trial._commandComplete):
3036 update self.cmd when we start the 'cat test.log' transfer. Without
3037 this, we cannot interrupt the correct RemoteCommand when we lose
3040 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3041 trying to tell the slave to stop the command if we're already
3042 inactive, or if we no longer have a .remote
3044 * buildbot/process/builder.py (Builder._detached): don't let an
3045 exception in currentBuild.stopBuild() prevent the builder from
3046 being marked offline
3048 2004-12-07 Brian Warner <warner@lothar.com>
3050 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3051 KeyError that happens when you ask for a non-existent Builder, and
3052 translate it into a UsageError.
3054 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3055 losing the slave in the middle of a remote step is handled too
3057 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3058 be a Failure, so be sure to stringify it before using it as the
3059 contents of the 'interrupt' logfile
3060 (RemoteCommand.interrupt): use stringified 'why' in
3061 remote_interruptCommand too, just in case
3063 2004-12-06 Brian Warner <warner@lothar.com>
3065 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3066 instead of 'tla update', which is more efficient in case we've
3067 missed a couple of patches since the last update.
3069 * debian/changelog: update for previous (0.6.1) release. Obviously
3070 this needs to be handled better.
3072 2004-12-05 Brian Warner <warner@lothar.com>
3074 * NEWS: update for stuff since last release
3076 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3077 match the maybeDeferred change in Dispatcher.requestAvatar
3078 * buildbot/changes/pb.py (ChangePerspective.attached): same
3079 * buildbot/status/client.py (StatusClientPerspective.attached): same
3080 * buildbot/process/builder.py (Builder._attached3): same
3081 * buildbot/pbutil.py (NewCredPerspective.attached): same
3083 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3084 the date to the top-most box, if it is not the same as today's
3087 * docs/slave.xhtml: provide a buildslave setup checklist
3089 * docs/source.xhtml (Arch): correct terminology
3091 2004-12-04 Brian Warner <warner@lothar.com>
3093 * buildbot/test/test_slavecommand.py: use sys.executable instead
3094 of hard-coding 'python' for child commands, might help portability
3096 * docs/examples/twisted_master.cfg: update to current usage
3098 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3099 'stop build' command to the IRC bot
3101 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3102 message that broke PBChangeSource
3104 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3105 (SlaveBuilder): make some attributes class-level, remove the old
3106 "update queue" which existed to support resuming a build after the
3107 master connection was lost. Try to reimplement that feature later.
3108 (SlaveBuilder.stopCommand): clear self.command when the
3109 SlaveCommand finishes, so that we don't try to kill a leftover one
3111 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3114 * buildbot/slave/commands.py (SourceBase): set self.command for
3115 all VC commands, so they can be interrupted.
3117 2004-12-03 Brian Warner <warner@lothar.com>
3119 * buildbot/master.py: clean up slave-handling code, to handle
3120 slave-disconnect and multiple-connect better
3121 (BotPerspective): make these long-lasting, exactly one per bot
3122 listed in the config file.
3123 (BotPerspective.attached): if a slave connects while an existing
3124 one appears to still be connected, disconnect the old one first.
3125 (BotPerspective.disconnect): new method to forcibly disconnect a
3126 buildslave. Use some hacks to empty the transmit buffer quickly to
3127 avoid the long (20-min?) TCP timeout that could occur if the old
3128 slave has dropped off the net.
3129 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3130 own their own SlaveStatus objects. Remove .attached/.detached, add
3131 .addSlave/.removeSlave, treat slaves like Builders (config file
3132 parsing sends deltas to the BotMaster). Inform the slave
3133 instances, i.e. the BotPerspective, about addBuilder and
3135 (BotMaster.getPerspective): turns into a single dict lookup
3136 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3137 which gives BotPerspective.attached a chance to disconnect the old
3139 (BuildMaster.loadConfig): add code (disabled) to validate that all
3140 builders use known slaves (listed in c['bots']). The check won't
3141 work with tuple-specified builders, which are deprecated but not
3142 yet invalid, so the check is disabled for now.
3143 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3144 routine, do the add/changed/removed dance with them like we do
3146 (BuildMaster.loadConfig_Sources): move source-config into a
3147 separate routine too
3149 * buildbot/status/builder.py (Status.getSlave): get the
3150 SlaveStatus object from the BotPerspective, not the BotMaster.
3152 * buildbot/test/test_run.py: bunch of new tests for losing the
3153 buildslave at various points in the build, handling a slave that
3154 connects multiple times, and making sure we can interrupt a
3157 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3158 something other than 'Bot' for the Bot object, to make certain
3159 test cases easier to write.
3160 (BuildSlave.waitUntilDisconnected): utility method for testing
3162 2004-11-30 Brian Warner <warner@lothar.com>
3164 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3166 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3167 argument, return a Deferred that always fires with True or False.
3168 I don't use an errback to indicate 'ping failed' so that callers
3169 are free to ignore the deferred without causing spurious errors in
3171 * buildbot/process/builder.py (BuilderControl.ping): implement it
3173 * buildbot/test/test_run.py (Status.testDisappear): test ping
3174 (Status.disappearSlave): fix it
3176 2004-11-30 Brian Warner <warner@lothar.com>
3178 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3179 (IBuilderControl): add .getBuild(num), only works for the current
3180 build, of course, although it might be interesting to offer
3181 something for builds in the .waiting or .interlocked state.
3183 * buildbot/process/base.py (Build): have .stopBuild just do the
3184 interrupt, then let the build die by itself.
3185 (BuildControl): add .stopBuild, and add a point-event named
3186 'interrupt' just after the build so status viewers can tell that
3188 (BuilderControl): add .getBuild
3190 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3191 stops when you kill it, good for testing
3192 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3193 contains the 'reason' text.
3195 * buildbot/status/html.py: Add Stop Build button, if the build can
3196 still be stopped. Send a Redirect (to the top page) one second
3197 later, hopefully long enough for the interrupt to have an effect.
3198 Move make_row() up to top-level to share it between Stop Build and
3201 * buildbot/slave/commands.py: only kill the child process once
3203 * buildbot/test/test_run.py: add testInterrupt
3205 2004-11-29 Brian Warner <warner@lothar.com>
3207 * buildbot/process/base.py: Refactor command interruption. The
3208 Build is now responsible for noticing that the slave has gone
3209 away: Build.lostRemote() interrupts the current step and makes
3210 sure that no further ones will be started.
3212 * buildbot/process/builder.py: When the initial remote_startBuild
3213 message fails, log it: this usually indicates that the slave has
3214 gone away, but we don't really start paying attention until they
3215 fail to respond to the first step's command.
3217 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3218 slave disconnect. Now sports a new interrupt() method. Error
3219 handling was simplified a lot by chaining deferreds, so
3220 remoteFailed/remoteComplete were merged into a single
3221 remoteComplete method (which can now get a Failure object).
3222 Likewise failed/finished were merged into just _finished.
3223 (BuildStep): Add interrupt(why) method, and if why is a
3224 ConnectionLost Failure then the step is failed with some useful
3227 * buildbot/slave/bot.py: stop the current command when the remote
3228 Step reference is lost, and when the slave is shut down.
3229 (Bot): make it a MultiService, so it can have children. Use
3230 stopService to tell when the slave is shutting down.
3231 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3232 remote_interruptCommand (which asks the current SlaveCommand to
3233 stop but allows it to keep emitting status messages), and
3234 stopCommand (which tells it to shut up and die).
3236 * buildbot/slave/commands.py: make commands interruptible
3237 (ShellCommand.kill): factor out os.kill logic
3238 (Command): factor out setup()
3239 (Command.sendStatus): don't send status if .running is false, this
3240 happens when the command has been halted.
3241 (Command.interrupt): new method, used to tell the command to die
3242 (SlaveShellCommand): implement .interrupt
3243 (DummyCommand): implement .interrupt
3244 (SourceBase, etc): factor out setup(), don't continue substeps if
3247 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3248 so they can be called after finishing
3250 * buildbot/test/test_run.py: new tests for disconnect behavior,
3251 refactor slave-shutdown routines, add different kinds of
3254 2004-11-27 Brian Warner <warner@lothar.com>
3256 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3257 method to express ETA time like "2m45s" instead of "165 seconds"
3259 2004-11-24 Brian Warner <warner@lothar.com>
3261 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3262 archive after the test completes, to avoid cluttering the user's
3263 'tla archives' listing with a bogus entry. Arch doesn't happen to
3264 provide any way to override the use of ~/.arch-params/, so there
3265 isn't a convenient way to avoid touching the setup of the user who
3267 (VC_HTTP.testArchHTTP): same
3269 2004-11-23 Brian Warner <warner@lothar.com>
3271 * buildbot/status/html.py (TextLog): split render() up into
3272 render_HEAD and render_GET. Use a Producer when sending log
3273 chunks, to reduce memory requirements and avoid sending huge
3274 non-Banana-able strings over web.distrib connections. Requires
3275 peeking under the covers of IStatusLog.
3276 (TextLog.resumeProducing): fix the "as text" link, handle client
3277 disconnects that occur while we're still sending old chunks.
3279 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3280 use defer.succeed, not the non-existent defer.success
3281 (LogFile.waitUntilFinished): same
3282 (LogFile.subscribe): don't add watchers to a finished logfile
3284 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3287 2004-11-23 Brian Warner <warner@lothar.com>
3289 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3291 2004-11-23 Brian Warner <warner@lothar.com>
3293 * NEWS: update for the 0.6.1 release
3294 * MANIFEST.in: add new files
3296 * README (INSTALLATION): explain how to enable the extra VC tests
3298 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3299 level to, so old pickled builds can be displayed ok
3301 2004-11-22 Brian Warner <warner@lothar.com>
3303 * NEWS: summarize updates since last release
3305 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3306 Yoz Grahame. Closes SF#1050138.
3308 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3311 * buildbot/process/step_twisted.py (Trial): update docs a bit
3313 * docs/factories.xhtml: fix Trial factory docs to match reality.
3316 * buildbot/process/factory.py (Trial.__init__): add args for
3317 randomly= and recurse=, making them available to instantiators
3318 instead of only to subclassers. Closes: SF#1049759.
3320 2004-11-15 Brian Warner <warner@lothar.com>
3322 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3323 try to teach the Quick factory to use multiple versions of python
3325 2004-11-12 Brian Warner <warner@lothar.com>
3327 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3328 safer w32-compatible approach, and only use it on windows
3329 (BuildStatus.saveYourself): same
3331 2004-11-11 Brian Warner <warner@lothar.com>
3333 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3334 it: one string merge per chunk. There are now separate .entries
3335 and .runEntries lists: when enumerating over all chunks, make sure
3337 * buildbot/test/test_status.py (Log): more tests
3339 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3340 chunks together, up to 10kb per chunk. This ought to cut down on
3341 the CPU-burning overhead of large log files. Thanks to Alexander
3342 Staubo for spotting the problem.
3343 * buildbot/test/test_status.py (Log): tests for same
3345 2004-11-10 Brian Warner <warner@lothar.com>
3347 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3348 header to outbound mail
3349 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3351 2004-11-08 Brian Warner <warner@lothar.com>
3353 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3354 can't do os.rename() onto an existing file, so catch the exception
3355 and unlink the target file first. This introduces a slight window
3356 where the existing file could be lost, but the main failure case
3357 (disk full) should still be handled safely.
3358 (BuildStatus.saveYourself): same
3360 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3361 separator character instead of os.sep, because the filenames being
3362 split here are coming from the VC system, which can have a
3363 different pathname convention than the local host. This should
3364 help a buildmaster running on windows that uses a CVS repository
3365 which runs under unix.
3366 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3368 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3369 when there are no test failures to be parsed
3371 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3372 instead of the unix-specific os.system("cp"), thanks to Elliot
3373 Murphy for this and the other buildbot-vs-windows catches.
3374 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3376 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3377 echo the command as it is run
3379 * setup.py: install sample.mk too, not just sample.cfg
3380 (scripts): install contrib/windows/buildbot.bat on windows
3382 2004-11-07 Brian Warner <warner@lothar.com>
3384 * buildbot/process/builder.py (Builder._detached): clear the
3385 self.currentBuild reference, otherwise the next build will be
3386 skipped because we think the Builder is already in use.
3388 * docs/examples/twisted_master.cfg: update to match current usage
3389 on the Twisted buildbot
3391 2004-10-29 Brian Warner <warner@lothar.com>
3393 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3395 2004-10-28 Brian Warner <warner@lothar.com>
3397 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3398 have separate doVCUpdate/doVCFull methods. Catch an update failure
3399 and respond by clobbering the source directory and re-trying. This
3400 will handle local changes (like replacing a file with a directory)
3401 that will cause CVS and SVN updates to fail.
3402 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3404 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3407 2004-10-19 Brian Warner <warner@lothar.com>
3409 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3411 * buildbot/status/html.py (StatusResourceTestResults): display any
3412 TestResults that the Build might have
3413 (StatusResourceTestResult): and the logs for each TestResult
3414 (StatusResourceBuild): add link from the per-build page
3416 2004-10-15 Brian Warner <warner@lothar.com>
3418 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3419 the 'problems' portion of stdout, add TestResults to our build
3420 * buildbot/test/test_twisted.py (Parse.testParse): test it
3422 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3423 to retrieve a dict of accumulated test results
3424 (ITestResult): define what a single test result can do
3425 * buildbot/status/builder.py (TestResult): implement ITestResult
3426 (BuildStatus.getTestResults): retrieve dict of TestResults
3427 (BuildStatus.addTestResult): add TestResults
3428 * buildbot/test/test_status.py (Results.testAddResults): test it
3430 2004-10-14 Brian Warner <warner@lothar.com>
3432 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3433 instead of os.system("rm -rf") for win32 portability
3435 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3436 SignalMixin instead of starting/stopping the reactor, which is
3437 likely to cause problems with other tests
3439 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3440 self.copyComplete() call. Yoz Grahame makes the catch.
3442 * contrib/windows/buildbot.bat: helper script to deal with path
3443 issues. Thanks to Yoz Grahame.
3445 * buildbot/master.py (BuildMaster.startService): don't register a
3446 SIGHUP handler if the signal module has no SIGHUP attribute.
3447 Apparently win32 does this.
3449 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3451 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3452 test if the reactor can't offer UNIX sockets
3454 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3455 error introduced in the last commit. We really need that
3458 2004-10-12 Brian Warner <warner@lothar.com>
3460 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3461 when describing a maildir source. Thanks to Stephen Davis.
3463 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3466 * buildbot/scripts/runner.py (createMaster): install Makefile too
3467 (start): add --no_save to 'start' command
3468 * buildbot/scripts/sample.mk: simple convenience Makefile with
3469 start/stop/reload targets
3471 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3474 2004-09-30 Brian Warner <warner@lothar.com>
3476 * setup.py: Releasing buildbot-0.6.0
3478 2004-09-30 Brian Warner <warner@lothar.com>
3480 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3481 test_trial.py from the source tarball until support is complete.
3483 * NEWS: update for 0.6.0 release
3484 * buildbot/__init__.py (version): same
3487 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3488 'source' command to tell users where to get the Buildbot source
3490 * docs/examples/*.cfg: update to modern standards
3492 * NEWS: update for release
3494 * buildbot/scripts/runner.py (createMaster): remove the
3495 -shutdown.tap stuff now that it isn't necessary
3497 (start): launch buildbot.tap, not buildbot-shutdown.tap
3500 * buildbot/status/mail.py (Domain): shorten class name
3501 (MailNotifier): if lookup= is a string, pass it to Domain()
3502 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3503 (Mail.testBuild2): test the string-to-Domain shortcut
3504 (Mail.testMail): fix test
3507 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3510 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3511 more attributes on load
3512 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3513 to accomodate the whole waterfall page at once, and the thrashing
3514 results in a lot of unnecessary loads
3515 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3516 (BuilderStatus.saveYourself): same
3517 (BuilderStatus.eventGenerator): stop generating on the first missing
3518 build. We assume that saved builds are deleted oldest-first.
3519 (BuildStepStatus.__getstate__): .progress might not exist
3521 * buildbot/changes/changes.py (ChangeMaster): make it
3522 serializable, in $masterdir/changes.pck
3523 (ChangeMaster.stopService): save on shutdown
3524 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3525 * buildbot/test/test_config.py: load Changes before config file
3528 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3529 "Oh my god, you killed the command" header on a separate line
3531 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3532 skip over corrupted build pickles
3533 (BuilderStatus.getFullBuildByNumber): same
3534 (BuilderStatus.eventGenerator): skip over unavailable builds
3535 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3536 do an atomic rename. This prevents a corrupted pickle when some
3537 internal serialization error occurs.
3538 (BuilderStatus.saveYourself): same
3540 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3541 the timeout for shell commands, it got lost somehow
3543 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3544 run out of build steps, return the rest of the builder events
3546 * buildbot/interfaces.py (IBuilderControl.ping): add method
3548 * buildbot/process/builder.py (BuilderControl.ping): move
3549 slave-ping to BuilderControl, and fix the failure case in the
3550 process (Event.finish() is the verb, Event.finished is the noun).
3552 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3553 through the BuilderControl instead of the BuilderStatus
3554 (EventBox): add adapter for builder.Event, allowing builder events to
3555 be displayed in the waterfall display
3557 * buildbot/master.py (BotMaster.stopService): add a 'master
3558 shutdown' event to the builder's log
3559 (BuildMaster.startService): and a 'master started' on startup
3561 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3562 builder events into the BuildStep event stream
3563 (Status.builderAdded): add a 'builder created' event
3566 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3567 command to announce the completion of a running build
3568 (IrcStatusBot.command_FORCE): announce when the build finishes
3570 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3571 don't evict unfinished builds from the cache: they must stay in
3572 the full-cache until their logfiles have stopped changing. Make
3573 sure the eviction loop terminates if an unfinished build was hit.
3574 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3575 This lets exceptions be dumped in an email status message. Really
3576 we need LogFiles which contain both text and HTML, instead of two
3578 (BuildStatus.__getstate__): handle self.finished=False
3579 (Status.builderAdded): if the pickle is corrupted, abandon the
3580 history and create a new BuilderStatus object.
3582 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3583 self.progress attribute, helped one test which doesn't fully set
3584 up the Build object.
3586 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3587 IStatusLog methods into an Interface that is implemented by "stub"
3588 logs, for which all the actual text chunks are on disk (in the
3589 pickled Build instance). To show the log contents, you must first
3590 adapt the stub log to a full IStatusLog object.
3592 * buildbot/status/builder.py (LogFileStub): create separate stub
3593 log objects, which can be upgraded to a real one if necessary.
3594 (LogFile): make them persistable, and let them stubify themselves
3596 (BuildStepStatus): same
3598 (BuildStatus.saveYourself): save the whole build out to disk
3599 (BuilderStatus): make it persistable
3600 (BuilderStatus.saveYourself): save the builder to disk
3601 (BuilderStatus.addFullBuildToCache): implement two caches which
3602 hold Build objects: a small one which holds full Builds, and a
3603 larger one which holds "stubbed" Builds (ones with their LogFiles
3604 turned into LogFileStubs). This reduces memory usage by the
3605 buildmaster by not keeping more than a few (default is 2) whole
3606 build logs in RAM all the time.
3607 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3609 (BuilderStatus.eventGenerator): rewrite since .builds went away
3610 (BuilderStatus.buildStarted): remove the .builds array. Add the
3611 build to the "full" cache when it starts.
3612 (BuilderStatus._buildFinished): save the build to disk when it
3614 (Status): give it a basedir (same as the BuildMaster's basedir)
3615 where the builder pickles can be saved
3616 (Status.builderAdded): create the BuilderStatus ourselves, by
3617 loading a pickle from disk (or creating a new instance if there
3618 was none on disk). Return the BuilderStatus so the master can glue
3619 it into the new Builder object.
3621 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3622 all BuilderStatuses to save themselves out to disk. This is in
3623 lieu of saving anything important in the main Application pickle
3624 (the -shutdown.tap file).
3625 (BuildMaster.__init__): give Status() a basedir for its files
3626 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3627 to get the BuilderStatus, then give it to the Builder (instead of
3628 doing it the other way around). It's ok if the status announces
3629 the new Builder before it's really ready, as the outside world can
3630 only see the BuilderStatus object anyway (and it is ready before
3631 builderAdded returns). Use the builder's "builddir" (which
3632 normally specifies where the slave will run the builder) as the
3633 master's basedir (for saving serialized builds).
3635 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3636 coerce the logfile to IStatusLog before trying to get the text
3637 chunks out of it. This will pull the full (non-stubified) Build in
3638 from disk if necessary.
3639 (TextLog): fix the adapter registration
3641 * buildbot/test/test_control.py (Force.setUp): create the basedir
3642 * buildbot/test/test_web.py: same
3643 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3644 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3645 * buildbot/test/test_run.py (Run.testMaster): same
3646 (Status.setUp): same
3648 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3650 * buildbot/status/html.py (Waterfall.__init__): store actual
3651 allowForce flag passed in rather than using True for everyone;
3652 make sure setting it to False doesn't cause a NameError
3654 (StatusResourceBuilder.__init__) add the builder name to the page
3656 (StatusResourceBuilder.body) move HTML generation for a name/value
3657 row into a helper method (StatusResourceBuilder.make_row); only
3658 generate the "Force Build" form if allowForce was True and the
3659 slave is connected. Use class attributes in the generated HTML to
3660 spread a little CSS-joy.
3662 2004-09-28 Brian Warner <warner@lothar.com>
3664 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3665 warning-scanner to not ignore things like
3666 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3668 * buildbot/status/html.py (StatusResource.control): add some
3669 class-level values for .control in an attempt to make upgrading
3672 * buildbot/util.py (ComparableMixin): survive missing attributes,
3673 such as when a class is modified and we're comparing old instances
3676 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3677 failure handling, remove a redundant try/except block. Don't
3678 return the full traceback to the IRC channel.
3679 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3680 error messages. Get ETA properly.
3682 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3683 the reason, since (at least) IRC message will have <> in them.
3684 (StatusResourceBuilder.__init__): take an IBuilderControl
3685 (StatusResourceBuilder.force): use the IBuilderControl we get in
3686 the constructor instead of trying to make our own. Catch the
3687 new exceptions and ignore them for now (until we make an
3688 intermediate web page where we could show the error message)
3689 (StatusResource): create with an IControl, use it to give an
3690 IBuilderControl to all children
3691 (Waterfall): take an allowForce= option, pass an IControl object
3692 to StatusResource if it is True
3694 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3696 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3697 catch new exceptions and return string forms
3699 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3700 * buildbot/process/builder.py (Builder.forceBuild): raise them
3701 * buildbot/test/test_control.py (Force.testNoSlave): new test
3702 (Force.testBuilderInUse): same
3705 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3707 * buildbot/test/test_run.py: use IControl
3708 * buildbot/test/test_vc.py: same
3710 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3711 to use IControl. Still offline.
3712 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3714 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3715 who=None so periodic builds don't send out status mail
3716 (Builder.forceBuild): include reason in the log message
3717 (BuilderControl.forceBuild): rename 'name' to 'who'
3719 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3720 'who' parameter, but make it None by default so builds forced by
3721 slave admins don't cause status mail to be sent to anybody
3722 (BotMaster.forceBuild): same. this method is deprecated.
3723 (DebugPerspective.perspective_forceBuild): same, use IControl.
3724 (DebugPerspective.perspective_fakeChange): use IControl..
3725 (Dispatcher.requestAvatar): .. so don't set .changemaster
3727 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3728 parameter to avoid confusion with the name of the builder
3731 * buildbot/status/mail.py: refine comment about needing 2.3
3733 * buildbot/status/html.py: move all imports to the top
3735 * buildbot/test/test_control.py: test new interfaces
3736 * buildbot/test/test_run.py (Status): handle new interfaces
3737 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3739 * buildbot/process/base.py (BuildControl): implement IBuildControl
3740 and its lonely getStatus() method
3742 * buildbot/process/builder.py (BuilderControl): implement
3743 IBuilderControl, obtained by adapting the Builder instance
3744 (Builder.startBuild): return a BuilderControl instead of a
3745 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3746 accomplish the same thing.
3748 * buildbot/master.py: move all import statements to the top
3749 (Control): implement IControl, obtained by adapting the
3750 BuildMaster instance.
3752 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3753 IBuildControl. These are used to force builds. Eventually they
3754 will provide ways to reconfigure the Builders, pause or abandon a
3755 Build, and perhaps control the BuildMaster itself.
3757 2004-09-26 Brian Warner <warner@lothar.com>
3759 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3760 ends up comparing us against something without a .__class__
3762 2004-09-24 Brian Warner <warner@lothar.com>
3764 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3767 * Makefile: add 'deb-snapshot' target, to create a timestamped
3770 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3772 2004-09-23 Brian Warner <warner@lothar.com>
3774 * buildbot/__init__.py (version): move version string here
3775 * setup.py: get version string from buildbot.version
3776 * buildbot/status/html.py (WaterfallStatusResource.body): add
3777 buildbot version to the page footer
3778 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3781 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3782 slaves, let the second know where the first one is coming from
3783 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3784 see our exceptions. It would be nice if there were a way to just
3785 send them the exception type and value, not the full traceback.
3788 * buildbot/status/mail.py (MailNotifier): add a new argument
3789 sendToInterestedUsers=, which can be set to False to disable the
3790 usual send-to-blamelist behavior.
3791 (top): handle python-2.2 which has no email.MIMEMultipart
3792 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3793 (MailNotifier.disownServiceParent): unsubscribe on removal
3795 * buildbot/test/test_status.py (Mail.testBuild2): test it
3798 * buildbot/status/progress.py (Expectations.wavg): tolerate
3799 current=None, which happens when steps start failing badly
3800 * buildbot/test/test_status.py (Progress.testWavg): test for it
3802 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3803 doesn't understand args['revision'], emit a warning instead of
3804 bailing completely. Updating to -rHEAD is probably close enough.
3806 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3808 * buildbot/test/test_status.py: at least import bb.status.client
3809 even if we don't have any test coverage for it yet
3811 * contrib/svn_buildbot.py: don't require python2.3
3812 (main): wait, do require it (for sets.py), but explain how to
3813 make it work under python2.2
3815 2004-09-23 Brian Warner <warner@lothar.com>
3817 * contrib/svn_buildbot.py: include the revision number in the Change
3819 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3820 using util.now() because FreshCVS is a realtime service
3822 * buildbot/status/event.py: delete dead code
3823 * buildbot/process/step.py: don't import dead Event class
3824 * buildbot/process/step_twisted.py: same
3825 * buildbot/status/builder.py: same
3826 * buildbot/status/client.py: same
3828 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3830 * buildbot/changes/changes.py (Change): set .when from an __init__
3831 argument (which defaults to now()), rather than having
3832 ChangeMaster.addChange set it later.
3833 (ChangeMaster.addChange): same
3835 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3836 (parseSyncmail): same. Just use util.now() for now.
3837 (parseBonsaiMail): parse the timestamp field for when=
3839 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3840 instead of setting .when after the fact
3844 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3845 results when the target project uses retrial. Still under
3847 * buildbot/test/test_trial.py: same
3849 2004-09-21 Brian Warner <warner@lothar.com>
3851 * buildbot/status/mail.py (MailNotifier.__init__): include
3852 success/warnings/failure in the Subject line
3853 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3854 use step.logname for the addLogs=True attachment filenames
3855 * buildbot/test/test_status.py (Mail): test Subject lines
3856 (Mail.testLogs): test attachment filenames
3858 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3859 accept a 'who' argument from the debug tool
3860 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3861 * contrib/debug.glade: add text box to set 'who'
3863 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3864 .getBuilderName with .getBuilder().getName(), more flexible
3865 (IStatusLog.getName): logs have short names, but you can prefix
3866 them with log.getStep().getName() to make them more useful
3867 * buildbot/status/builder.py: same
3868 * buildbot/status/client.py: same
3869 * buildbot/status/html.py: same
3870 * buildbot/test/test_run.py (Status.testSlave): same
3871 * buildbot/process/step.py: tweak logfile names
3873 * buildbot/status/mail.py (MailNotifier): add lookup, change
3874 argument to extraRecipients. The notifier is now aimed at sending
3875 mail to the people involved in a particular build, with additional
3876 constant recipients as a secondary function.
3878 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3879 including slow-lookup and failing-lookup. Make sure the blamelist
3880 members are included.
3882 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3883 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3884 (IBuildStatus.getInterestedUsers): new method
3885 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3886 * buildbot/status/client.py (remote_getResponsibleUsers): same
3887 * buildbot/status/html.py (StatusResourceBuild.body): same
3888 * buildbot/test/test_run.py (Status.testSlave): same
3890 2004-09-20 Brian Warner <warner@lothar.com>
3892 * docs/users.xhtml: update concepts
3894 * Makefile: add a convenience makefile, for things like 'make
3895 test'. It is not included in the source tarball.
3897 2004-09-16 Brian Warner <warner@lothar.com>
3899 * NEWS: mention /usr/bin/buildbot, debian/*
3901 * debian/*: add preliminary debian packaging. Many thanks to
3902 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3903 it considerably since it left their hands, I am responsible for
3904 all breakage that's resulted.
3906 * bin/buildbot: create a top-level 'buildbot' command, to be
3907 installed in /usr/bin/buildbot . For now it's just a simple
3908 frontend to mktap/twistd/kill, but eventually it will be the entry
3909 point to the 'try' command and also a status client. It is also
3910 intended to support the upcoming debian-packaging init.d scripts.
3911 * buildbot/scripts/runner.py: the real work is done here
3912 * buildbot/scripts/__init__.py: need this too
3913 * buildbot/scripts/sample.cfg: this is installed in new
3914 buildmaster directories
3915 * setup.py: install new stuff
3917 2004-09-15 Brian Warner <warner@lothar.com>
3919 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3920 'file:' schema (the version shipped with OS-X was built without the
3922 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3923 updates the log-timestamp, to make sure it isn't still running after
3926 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3927 values to the config file.
3928 * docs/examples/hello.cfg: add examples
3929 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3930 * buildbot/status/builder.py (Status.getProjectURL): implement them
3931 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3932 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3933 * buildbot/status/html.py (WaterfallStatusResource): display them
3936 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3937 certain error cases don't suffer a secondary exception.
3938 (top): Skip tests if the corresponding VC tool is not installed.
3940 * buildbot/process/factory.py (Trial): introduce separate
3941 'buildpython' and 'trialpython' lists, since trialpython=[] is
3942 what you want to invoke /usr/bin/python, whereas ./setup.py is
3943 less likely to be executable. Add env= parameter to pass options
3944 to test cases (which is how I usually write tests, I don't know if
3945 anyone else does it this way).
3947 * buildbot/process/step_twisted.py (Trial): handle python=None.
3948 Require 'testpath' be a string, not a list. Fix tests= typo.
3949 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3951 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3952 way to deal with the possibility of removing the disconnect notify
3954 (CVS): add a 'login' parameter to give a password to 'cvs login',
3955 commonly used with pserver methods (where pw="" or pw="guest")
3957 * buildbot/slave/commands.py (SourceBase): move common args
3958 extraction and setup() to __init__, so everything is ready by the
3959 time setup() is called
3960 (CVS.start): call 'cvs login' if a password was supplied
3961 (ShellCommand): special-case PYTHONPATH: prepend the master's
3962 value to any existing slave-local value.
3964 * buildbot/process/builder.py (Builder.updateBigStatus): if we
3965 don't have a remote, mark the builder as Offline. This whole
3966 function should probably go away and be replaced by individual
3968 (Builder.buildFinished): return the results to the build-finished
3969 deferred callback, helps with testing
3971 2004-09-14 Brian Warner <warner@lothar.com>
3973 * buildbot/test/test_vc.py: put all the repositories needed to run
3974 the complete tests into a single small (1.3MB) tarball, so I can
3975 make that tarball available on the buildbot web site. Test HTTP
3976 access (for Arch and Darcs) by spawning a temporary web server
3977 while the test runs.
3979 * docs/users.xhtml: new document, describe Buildbot's limited
3980 understanding of different human users
3982 * buildbot/test/test_vc.py: rearrange test cases a bit
3984 * buildbot/process/step_twisted.py (Trial): handle testpath=
3985 * buildbot/process/factory.py (Trial): update to use step.Trial
3987 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3989 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3990 the overall build text (which gives you 'failed 2 tests' rather
3992 (BuildStepStatus.text2): default to [], not None
3994 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3997 2004-09-12 Brian Warner <warner@lothar.com>
3999 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4000 log the whole exception if it's just an AttributeError (old slave)
4002 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4003 so (e.g.) sub-commands can be run in the right directory.
4004 (ShellCommand.start): accept an optional errorMessage= argument
4005 to make life easier for SVN.start
4006 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4008 (ShellCommand.start): move ['dir'] compatibility hack..
4009 (RemoteShellCommand.start): .. to here so everyone can use it
4011 * buildbot/process/step_twisted.py (Trial): use .workdir
4013 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4014 text displayed when debuild fails completely
4015 (Trial): snarf _trial_temp/test.log from the slave and display it
4017 2004-09-11 Brian Warner <warner@lothar.com>
4019 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4021 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4022 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4024 * buildbot/process/step.py (ShellCommand): call .createSummary
4025 before .evaluateCommand instead of the other way around. This
4026 makes it slightly easier to count warnings and then use that to
4027 set results=WARNINGS
4028 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4030 * buildbot/process/base.py (Build.buildFinished): update status
4031 before doing progress. It's embarrassing for the build to be stuck
4032 in the "building" state when an exceptions occurs elsewhere..
4034 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4035 python2.2 doesn't have 'sum'
4037 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4038 to prevent clients from accidentally sorting it
4040 * buildbot/master.py (Manhole): add username/password
4041 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4042 c['manholePort'], deprecate old usage
4043 * docs/config.xhtml: document c['manhole']
4044 * docs/examples/hello.cfg: show example of using a Manhole
4047 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4048 pretend the slave is up to date
4050 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4051 the module, overlaps with 'log', the local variable
4053 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4055 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4056 new method to let Steps find out the version of their
4057 corresponding SlaveCommand.
4058 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4059 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4060 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4062 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4063 (Arch.startVC): same
4064 (P4Sync.startVC): same
4066 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4067 Deferred so we can catch errors in remote_startCommand
4068 (RemoteShellCommand.start): same
4070 * docs/examples/twisted_master.cfg: update sample config file
4072 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4073 after connectionMade() is called, not before. Close stdin at that
4076 * buildbot/process/process_twisted.py: update to use Trial, clean
4077 up argument passing (move to argv arrays instead of string
4080 * buildbot/process/step_twisted.py (Trial): new step to replace
4081 RunUnitTests, usable by any trial-using project (not just
4082 Twisted). Arguments have changed, see the docstring for details.
4084 * buildbot/process/base.py (Build.startBuild): this now returns a
4085 Deferred. Exceptions that occur during setupBuild are now
4086 caught better and lead to fewer build_status weirdnesses, like
4087 finishing a build that was never started.
4088 (Build.buildFinished): fire the Deferred instead of calling
4089 builder.buildFinished directly. The callback argument is this
4090 Build, everything else can be extracted from it, including the
4091 new build.results attribute.
4092 * buildbot/process/builder.py (Builder.startBuild): same
4093 (Builder.buildFinished): same, extract results from build
4095 * buildbot/process/step.py (ShellCommands): remove dead code
4097 2004-09-08 Brian Warner <warner@lothar.com>
4099 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4100 doesn't try to use the leftover patched workdir
4101 (SourceStamp): test source-stamp computation for CVS and SVN
4103 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4104 patched workdir ('touch .buildbot-patched') so we don't try to
4106 (SourceBase.start): add ['revision'] for all Source steps
4107 (CVS): change args: use ['branch'] for -r, remove ['files']
4108 (CVS.buildVC): fix revision/branch stuff
4109 (SVN): add revision stuff
4111 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4112 kwargs (except 'workdir') to avoid silent spelling errors
4113 (ShellCommand.__init__): same
4114 (Source): new base class for CVS/SVN/etc. Factor out everything
4115 common, add revision computation (perform the checkout with a -D
4116 DATE or -r REVISION that gets exactly the sources described by the
4117 last Change), overridable with step.alwaysUseLatest. Add patch
4118 handling (build.getSourceStamp can trigger the use of a base
4119 revision and a patch).
4120 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4121 * docs/steps.xhtml: update docs
4122 * docs/source.xhtml: mention .checkoutDelay
4123 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4125 * buildbot/process/base.py (Build.setSourceStamp): add a
4126 .sourceStamp attribute to each Build. If set, this indicates that
4127 the build should be done with something other than the most
4128 recent source tree. This will be used to implement "try" builds.
4129 (Build.allChanges): new support method
4130 (Build.lastChangeTime): remove, functionality moved to Source steps
4131 (Build.setupBuild): copy the Step args before adding ['workdir'],
4132 to avoid modifying the BuildFactory (and thus triggering spurious
4136 * buildbot/status/html.py: rename s/commits/changes/
4137 (StatusResourceChanges): same
4138 (CommitBox.getBox): same, update URL
4139 (WaterfallStatusResource): same
4140 (StatusResource.getChild): same
4142 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4143 * contrib/debug.glade: add optional 'revision' to the fakeChange
4145 * buildbot/changes/changes.py (html_tmpl): display .revision
4146 (ChangeMaster.addChange): note .revision in log
4147 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4148 accept a ['revision'] attribute
4150 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4152 * buildbot/master.py (BotMaster.getPerspective): update the
4153 .connected flag in SlaveStatus when it connects
4154 (BotMaster.detach): and when it disconnects
4155 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4156 (BuildMaster.loadConfig_Builders): walk old list correctly
4158 * buildbot/test/test_config.py: fix prefix= usage
4160 2004-09-06 Brian Warner <warner@lothar.com>
4164 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4165 poll a P4 depot looking for recent changes. Thanks to Dave
4166 Peticolas for the contribution. Probably needs some testing after
4169 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4170 requires manual client setup for each buildslave. Rather
4171 experimental. Thanks again to Dave Peticolas.
4172 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4174 * buildbot/changes/changes.py (Change): add a .revision attribute,
4175 which will eventually be used to generate source-stamp values.
4177 * buildbot/process/step.py (RemoteCommand.start): use
4178 notifyOnDisconnect to notice when we lose the slave, then treat it
4179 like an exception. This allows LogFiles to be closed and the build
4180 to be wrapped up normally. Be sure to remove the disconnect
4181 notification when the step completes so we don't accumulate a
4182 bazillion such notifications which will fire weeks later (when the
4183 slave finally disconnects normally). Fixes SF#915807, thanks to
4184 spiv (Andrew Bennetts) for the report.
4185 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4186 really isn't Logged- specific
4187 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4188 header, since it's almost always going to be appended to an
4190 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4191 update test to handle use of notifyOnDisconnect
4193 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4194 don't clear .ETA and .currentBuild when going offline, let the
4195 current build clean up after itself
4197 * buildbot/process/builder.py (Builder.detached): wait a moment
4198 before doing things like stopping the current build, because the
4199 current step will probably notice the disconnect and cleanup the
4201 * buildbot/test/test_run.py (Status.tearDown): update test to
4202 handle asynchronous build-detachment
4204 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4206 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4207 hush a debug message
4209 2004-09-05 Brian Warner <warner@lothar.com>
4211 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4212 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4213 kernels do this: the fcntl module has the F_NOTIFY constant, but
4214 the kernel itself doesn't support the operation. Thanks to Olly
4215 Betts for spotting the problem.
4217 * buildbot/process/step.py (Darcs): new source-checkout command
4218 (Arch): new source-checkout command
4219 (todo_P4): fix constructor syntax, still just a placeholder
4220 * buildbot/test/test_vc.py (VC.testDarcs): test it
4221 (VC.testDarcsHTTP): same, via localhost HTTP
4223 (VC.testArchHTTP): same
4224 * NEWS: mention new features
4226 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4227 which tells the step to stash stdout text locally (in .stdout).
4228 Slave-side Commands can use this to make decisions based upon the
4229 output of the the ShellCommand (not just the exit code).
4230 (Darcs): New source-checkout command
4231 (Arch): New source-checkout command, uses .keepStdout in one place
4232 where it needs to discover the archive's default name.
4234 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4235 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4236 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4238 * buildbot/process/step.py (ShellCommand.describe): add an
4239 alternate .descriptionDone attribute which provides descriptive
4240 text when the step is complete. .description can be ["compiling"],
4241 for use while the step is running, then .descriptionDone can be
4242 ["compile"], used alone when the step succeeds or with "failed" when
4243 it does not. Updated other steps to use the new text.
4244 * buildbot/process/step_twisted.py: same
4245 * buildbot/test/test_run.py: update tests to match
4247 2004-08-30 Brian Warner <warner@lothar.com>
4249 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4250 (CVS.__init__): send 'patch' argument to slave
4251 (CVS.start): don't create the LoggedRemoteCommand until start(),
4252 so we can catch a .patch added after __init__
4253 (SVN.__init__): add 'patch' to SVN too
4256 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4257 argument, to let commands push data into the process' stdin pipe.
4258 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4259 is in use, since closing a PTY doesn't really affect the process
4260 in the right way (in particular, I couldn't run /usr/bin/patch
4262 (SourceBase.doPatch): handle 'patch' argument
4264 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4267 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4268 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4270 * buildbot/master.py (BotPerspective.got_commands): get command
4271 versions from slave, give to each builder
4272 * buildbot/process/builder.py (Builder.attached): stash slave
4273 command versions in .remoteCommands
4275 * docs/steps.xhtml: bring docs in-line with reality
4277 * buildbot/process/step.py (CVS.__init__): more brutal
4278 compatibility code removal
4279 (SVN.__init__): same
4281 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4282 (SlaveShellCommand.start): require ['workdir'] argument, remove
4283 the ['dir'] fallback (compatibility will come later)
4284 (SourceBase): update docs
4285 (SourceBase.start): remove ['directory'] fallback
4288 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4289 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4290 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4292 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4293 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4294 code.. I will figure out 0.5.0-compatibility hooks later)
4296 2004-08-30 Brian Warner <warner@lothar.com>
4298 * buildbot/process/process_twisted.py: rewrite in terms of new
4299 BuildFactory base class. It got significantly shorter. Yay
4302 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4303 work with the new "self.build isn't nailed down until we call
4304 step.start()" scheme: specifically, __init__ is called before the
4305 build has decided on which Changes are going in, so we don't scan
4306 build.allFiles() for .xhtml files until start()
4307 (HLint.commandComplete): use getText(), not getStdout()
4308 (RunUnitTests.start): same: don't use .build until start()
4309 (RunUnitTests.describe): oops, don't report (None) when using
4311 (RunUnitTests.commandComplete): use getText()
4312 (RunUnitTests.createSummary): same
4313 (BuildDebs.commandComplete): same
4315 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4316 set args['command'] until start(), since our BuildStep is allowed
4317 to change their mind up until that point
4318 (TreeSize.commandComplete): use getText(), not getStdout()
4320 * docs/examples/twisted_master.cfg: update to current standards
4322 * docs/factories.xhtml: update
4323 * buildbot/process/factory.py: implement all the common factories
4324 described in the docs. The Trial factory doesn't work yet, and
4325 I've probably broken all the process_twisted.py factories in the
4326 process. There are compatibility classes left in for things like
4327 the old BasicBuildFactory, but subclasses of them are unlikely to
4329 * docs/examples/glib_master.cfg: use new BuildFactories
4330 * docs/examples/hello.cfg: same
4332 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4333 explicit 'workdir' args
4335 * buildbot/process/base.py (BuildFactory): move factories to ..
4336 * buildbot/process/factory.py (BuildFactory): .. here
4337 * buildbot/process/process_twisted.py: handle move
4338 * buildbot/test/test_config.py: same
4339 * buildbot/test/test_run.py: same
4340 * buildbot/test/test_steps.py: same
4341 * buildbot/test/test_vc.py: same
4342 * docs/factories.xhtml: same
4344 * NEWS: mention config changes that require updating master.cfg
4346 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4347 argument to all steps that weren't given one already, pointing at
4348 the "build/" directory.
4350 * docs/examples/hello.cfg: remove explicit 'workdir' args
4352 * docs/factories.xhtml: document standard BuildFactory clases,
4353 including a bunch which are have not yet been written
4355 2004-08-29 Brian Warner <warner@lothar.com>
4357 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4358 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4359 buildbot.status.builder so they aren't quite so internal
4360 * buildbot/process/base.py, buildbot/process/builder.py: same
4361 * buildbot/process/maxq.py, buildbot/process/step.py: same
4362 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4363 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4364 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4366 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4367 to handle new getLogs()-returns-list behavior
4368 (StatusResourceBuildStep.getChild): same
4369 (StepBox.getBox): same
4370 (WaterfallStatusResource.phase0): same
4372 * docs/source.xhtml: document how Buildbot uses version-control
4373 systems (output side: how we get source trees)
4374 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4375 systems (input side: how we learn about Changes)
4377 * buildbot/master.py (Manhole): use ComparableMixin
4378 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4379 * buildbot/changes/mail.py (MaildirSource): same
4380 * buildbot/status/client.py (PBListener): same
4381 * buildbot/status/html.py (Waterfall): same
4382 * buildbot/status/words.py (IRC): same
4384 * NEWS: start describing new features
4386 * buildbot/status/mail.py (MailNotifier): finish implementation.
4387 The message body is still a bit sparse.
4388 * buildbot/test/test_status.py (Mail): test it
4390 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4391 and __hash__ methods I wind up adding everywhere. Specifically
4392 intended to support the buildbot config-file update scheme where
4393 we compare, say, the old list of IStatusTargets against the new
4394 one and don't touch something which shows up on both lists.
4395 * buildbot/test/test_util.py (Compare): test case for it
4397 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4398 return a list instead of a dict
4399 (IBuildStepStatus.getLogs): same. The idea is that steps create
4400 logs with vaguely unique names (although their uniqueness is not
4401 guaranteed). Thus a compilation step should create its sole
4402 logfile with the name 'compile', and contribute it to the
4403 BuildStatus. If a step has two logfiles, try to create them with
4404 different names (like 'test.log' and 'test.summary'), and only
4405 contribute the important ones to the overall BuildStatus.
4406 * buildbot/status/builder.py (Event.getLogs): same
4407 (BuildStepStatus): fix default .text and .results
4408 (BuildStepStatus.addLog): switch to list-like .getLogs()
4409 (BuildStepStatus.stepFinished): same
4410 (BuildStatus.text): fix default .text
4411 (BuildStatus.getLogs): temporary hack to return all logs (from all
4412 child BuildStepStatus objects). Needs to be fixed to only report
4413 the significant ones (as contributed by the steps themselves)
4414 * buildbot/test/test_run.py: handle list-like .getLogs()
4415 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4417 2004-08-28 Brian Warner <warner@lothar.com>
4419 * buildbot/process/builder.py (Builder.attached): serialize the
4420 attachment process, so the attach-watcher isn't called until the
4421 slave is really available. Add detached watchers too, which makes
4424 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4426 * buildbot/test/test_swap.py: remove dead code
4428 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4429 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4430 sort of as if the command being run exited with a -1. There may
4431 still be some holes in this scheme.
4432 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4433 -r option appears before the module list
4434 * buildbot/process/step.py (CVS): add 'revision' argument
4436 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4437 when sending updates or stepComplete messages to the master, since
4438 we don't currently care whether they arrive or not. When we revamp
4439 the master/slave protocol to really resume interrupted builds,
4440 this will need revisiting.
4441 (lostRemote): remove spurious print
4443 * buildbot/master.py (BotPerspective.attached): serialize the
4444 new-builder interrogation process, to make testing easier
4445 (BotMaster.waitUntilBuilderDetached): convenience function
4447 * buildbot/status/builder.py (BuilderStatus): prune old builds
4448 (BuildStatus.pruneSteps): .. and steps
4449 (BuildStepStatus.pruneLogs): .. and logs
4450 (BuilderStatus.getBuild): handle missing builds
4451 * buildbot/status/html.py (StatusResourceBuild.body): display build
4452 status in the per-build page
4453 (BuildBox.getBox): color finished builds in the per-build box
4455 2004-08-27 Brian Warner <warner@lothar.com>
4457 * buildbot/status/mail.py (MailNotifier): new notification class,
4460 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4461 variants of a common base class which handles all the mode= logic
4463 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4465 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4467 2004-08-26 Brian Warner <warner@lothar.com>
4469 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4472 * buildbot/test/test_run.py: update to new Logfile interface, new
4473 buildbot.slave modules
4474 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4476 * MANIFEST.in: new sample config file
4477 * docs/examples/hello.cfg: same
4479 * buildbot/process/step_twisted.py: remove dead import
4481 * buildbot/process/step.py (RemoteCommand.run): catch errors
4483 (RemoteCommand.remote_update): ignore updates that arrive after
4485 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4486 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4487 the responsibilities of the subclass's methods
4488 (BuildStep.failed): catch errors during failure processing
4489 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4490 (CVS): move to a mode= argument (described in docstring), rather
4491 than the ungainly clobber=/export=/copydir= combination.
4492 (SVN): add mode= functionality to SVN too
4493 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4495 * buildbot/process/base.py (Build.startNextStep): catch errors
4496 during s.startStep()
4498 * buildbot/clients/base.py: update to new PB client interface.
4499 gtkPanes is still broken
4501 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4502 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4503 * setup.py: add buildbot.slave module
4504 * buildbot/bb_tap.py: handle move
4505 * buildbot/slave/registry.py: place to register commands, w/versions
4506 * buildbot/slave/bot.py: major simplifications
4507 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4508 instead of a fixed table. Eventually this will make the slave more
4509 extensible. Use 'start' method on the command, not .startCommand.
4510 Fix unsafeTracebacks handling (I think).
4511 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4512 helper class with a .start method that returns a Deferred.
4513 SlaveShellCommand is the form reached by the buildmaster. Commands
4514 which use multiple ShellCommands can just chain them as Deferreds,
4515 with some helper methods in Command (_abandonOnFailure and
4516 _checkAbandoned) to bail on rc!=0.
4517 (CVSCommand): prefer new mode= argument
4518 (SVNFetch): add mode= argument
4520 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4521 put a useful reason string on the build
4523 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4524 core functionality into an IStatusLog object
4525 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4526 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4527 (StatusResourceBuild.body): use proper accessor methods
4528 * buildbot/status/client.py (RemoteLog): PB-access goes here
4529 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4530 which delivers log contents too
4531 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4532 * buildbot/status/event.py: remove old Logfile completely
4534 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4535 subscription interface for IStatusLog subscriptions just like all
4536 other the status subscriptions
4537 (IStatusReceiver.logChunk): method called on subscribers
4539 2004-08-24 Brian Warner <warner@lothar.com>
4541 * buildbot/process/builder.py (Builder._pong): oops, ping response
4542 includes a result (the implicit None returned by remote_print).
4543 Accept it so the _pong method handles the response correctly.
4545 2004-08-06 Brian Warner <warner@lothar.com>
4547 * buildbot/test/test_config.py: update IRC, PBListener tests
4549 * buildbot/status/client.py (StatusClientPerspective): total
4550 rewrite to match new IStatus interfaces. New subscription scheme.
4551 There are still a few optimizations to make (sending down extra
4552 information with event messages so the client doesn't have to do a
4553 round trip). The logfile-retrieval code is probably still broken.
4554 Moved the PB service into its own port, you can no longer share a
4555 TCP socket between a PBListener and, say, the slaveport (this
4556 should be fixed eventually).
4557 * buildbot/clients/base.py (Client): revamp to match. still needs
4558 a lot of work, but basic event reporting works fine. gtkPanes is
4561 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4562 instance talks to a single irc server. Threw out all the old
4563 multi-server handling code. Still need to add back in
4564 builder-control (i.e. "force build")
4566 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4567 more random text to the as-yet-unreachable per-step page
4569 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4570 rename to stepETAUpdate
4571 (BuildStatus.subscribe): add build-wide ETA updates
4572 (BuilderStatus.getState): remove more cruft
4573 (BuilderStatus.getCurrentBuild): remove more cruft
4574 (BuilderStatus.buildStarted): really handle tuple-subscription
4575 * buildbot/test/test_run.py (Status.testSlave): handle the
4576 stepETAUpdate rename
4578 * buildbot/master.py (BuildMaster): don't add a default
4579 StatusClientService. Don't add a default IrcStatusFactory. Both
4580 are now added through c['status'] in the config file. c['irc'] is
4581 accepted for backwards compatibility, the only quirk is you cannot
4582 use c['irc'] to specify IRC servers on ports other than 6667.
4584 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4585 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4586 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4587 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4590 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4591 the buildmaster to re-read its config file
4594 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4595 find out the port our server is running on
4596 (WebTest.test_webPathname_port): same
4598 * buildbot/test/test_config.py (testWebPortnum): test it
4599 (testWebPathname): ditto
4601 * docs/config.xhtml: document new c['status'] configuration option
4603 * buildbot/status/html.py (Waterfall): new top-level class which
4604 can be added to c['status']. This creates the Site as well as the
4605 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4606 reachable as .parent, for everything.
4608 * buildbot/master.py (Manhole): make it a normal service Child
4609 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4610 webPathname. It will eventually replace c['irc'] and the implicit
4611 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4612 in as (deprecated) backward compatibility hooks for now.
4615 * buildbot/process/builder.py (Builder.buildFinished): don't
4616 inform out builder_status about a finished build, as it finds out
4617 through its child BuildStatus object
4619 * buildbot/status/html.py: extensive revamp. Use adapters to make
4620 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4621 have both starting and finishing times and adjust the waterfall
4622 display accordingly, using spacers if necessary. Use SlaveStatus
4623 to get buildslave info.
4624 (StatusResourceBuildStep): new just-one-step resource, used to get
4625 logfiles. No actual href to it yet.
4627 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4628 the time being, until I get the file-naming scheme right
4630 * buildbot/status/builder.py (Event): clean started/finished names
4631 (BuildStatus.isFinished): .finished is not None is the right test
4632 (BuildStatus.buildStarted): track started/finished times ourselves
4633 (BuilderStatus.getSlave): provide access to SlaveStatus object
4634 (BuilderStatus.getLastFinishedBuild): all builds are now in
4635 .builds, even the currently-running one. Accomodate this change.
4636 (BuilderStatus.eventGenerator): new per-builder event generator.
4637 Returns BuildStepStatus and BuildStatus objects, since they can
4638 both be adapted as necessary.
4639 (BuilderStatus.addEvent): clean up started/finished attributes
4640 (BuilderStatus.startBuild,finishBuild): remove dead code
4641 (SlaveStatus): new object to provide ISlaveStatus
4643 * buildbot/process/step.py (ShellCommand.getColor): actually
4644 return the color instead of setting it ourselves
4645 (CVS.__init__): pull .timeout and .workdir options out of
4646 **kwargs, since BuildStep will ignore them. Without this neither
4647 will be sent to the slave correctly.
4648 (SVN.__init__): same
4650 * buildbot/process/builder.py (Builder): move flags to class-level
4652 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4653 SlaveStatus handle that
4655 * buildbot/process/base.py (Build.firstEvent): remove dead code
4656 (Build.stopBuild): bugfix
4658 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4660 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4661 (ChangeMaster.eventGenerator): yield Changes, since there are now
4662 Adapters to turn them into HTML boxes
4664 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4665 (BotPerspective.attached): feed a SlaveStatus object
4666 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4667 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4669 * buildbot/interfaces.py: API additions
4670 (ISlaveStatus): place to get slave status
4672 2004-08-04 Brian Warner <warner@lothar.com>
4674 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4675 the delay finishes, so the step is marked as SUCCESS
4677 * buildbot/test/test_run.py (Status.testSlave): cover more of
4678 IBuildStatus and IBuildStepStatus
4680 * buildbot/status/progress.py (StepProgress): move some flags to
4681 class-level attributes
4682 (StepProgress.remaining): if there are no other progress metrics
4683 to go by, fall back to elapsed time
4684 (StepProgress.setExpectations): take a dict of metrics instead of
4686 (BuildProgress.setExpectationsFrom): pull expectations from the
4687 Expectations, instead of having it push them to the BuildProgress
4688 (Expectations): move some flags to class-level attributes
4689 (Expectations.__init__): copy per-step times from the
4691 (Expectations.expectedBuildTime): new method for per-build ETA
4693 * buildbot/status/event.py (Logfile): move some flags to
4694 class-level attributes
4695 (Logfile.logProgressTo): better method name, let step set the
4696 progress axis name (instead of always being "output")
4698 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4699 times directly, rather than depending upon the (possibly missing)
4700 .progress object. Use 'None' to indicate "not started/finished
4702 (BuildStepStatus.getExpectations): oops, return the full list of
4704 (BuilderStatus._buildFinished): append finished builds to .builds
4706 * buildbot/process/step.py (BuildStep): add separate .useProgress
4707 flag, since empty .progressMetrics[] still implies that time is a
4709 (CVS): set up the cmd in __init__, instead of waiting for start()
4711 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4712 calculation, this will eventually turn into a proper sourceStamp
4713 (Build.setupBuild): tell the Progress to load from the Expectations,
4714 instead of having the Expectations stuff things into the Progress
4715 (Build.buildException): add a build-level errback to make sure the
4716 build's Deferred fires even in case of exceptions
4718 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4720 * buildbot/process/builder.py (Builder.forceBuild): convey the
4721 reason instead of creating a fake Change
4723 * docs/examples/twisted_master.cfg: update to match reality
4725 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4726 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4727 fix or remove broken/breaking tests
4729 * buildbot/status/event.py (Logfile.__len__): remove evil method
4731 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4732 missing .build, for test convenience
4734 * buildbot/process/step_twisted.py: import fixes
4736 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4738 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4739 .statusbag reference
4741 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4742 connection at shutdown, and stop it from reconnecting
4744 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4745 chase down remote-execution bugs
4747 * buildbot/process/step.py: more fixes, remove
4748 BuildStep.setStatus()
4749 * buildbot/status/builder.py: move setStatus() functionality into
4751 * buildbot/status/event.py: minor fixes
4753 2004-08-03 Brian Warner <warner@lothar.com>
4755 * buildbot/process/base.py, buildbot/process/builder.py
4756 * buildbot/process/step.py, buildbot/status/builder.py
4757 * buildbot/status/event.py, buildbot/test/test_run.py:
4758 fix status delivery, get a basic test case working
4759 * buildbot/master.py: finish implementing basic status delivery,
4760 temporarily disable HTML/IRC/PB status sources
4762 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4764 * buildbot/status/progress.py (BuildProgress): remove dead code
4766 * buildbot/interfaces.py
4767 * buildbot/process/base.py, buildbot/process/builder.py
4768 * buildbot/process/step.py, buildbot/process/step_twisted.py
4769 * buildbot/status/builder.py: Complete overhaul of the all
4770 status-delivery code, unifying all types of status clients (HTML,
4771 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4772 look like. This commit is a checkpointing of the work-in-progress:
4773 the input side is mostly done (Builders/Builds sending status
4774 to the BuilderStatus/BuildStatus objects), but the output side has
4775 not yet been started (HTML resources querying BuilderStatus
4776 objects). Things are probably very broken right now and may remain
4777 so for several weeks, I apologize for the disruption.
4779 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4780 HTML as the log's contents. Currently used for exception tracebacks.
4781 * buildbot/status/progress.py: minor spelling changes
4783 2004-08-02 Brian Warner <warner@lothar.com>
4785 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4786 in mozilla. Also added stylesheets copied from Twisted's docs.
4787 Remember that these files are meant to be run through Lore first.
4788 Thanks to Philipp Frauenfelder for the fixes.
4789 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4790 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4791 * docs/template.tpl: added a Lore template
4793 2004-07-29 Brian Warner <warner@lothar.com>
4795 * buildbot/interfaces.py: revamp status delivery. This is the
4796 preview: these are the Interfaces that will be provided by new
4797 Builder code, and to which the current HTML/IRC/PB status
4798 displayers will be adapted.
4800 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4801 on the SlaveBuilder, not the Bot.
4802 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4804 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4805 set .usePTY on the FakeSlaveBuilder
4807 2004-07-25 Brian Warner <warner@lothar.com>
4809 * buildbot/changes/freshcvs.py: add some debug log messages
4810 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4811 disabled 'setFilter' syntax
4812 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4813 don't end with a slash
4815 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4817 * setup.py: bump to 0.5.0+ while between releases
4819 2004-07-23 Brian Warner <warner@lothar.com>
4821 * setup.py (version): Releasing buildbot-0.5.0
4823 2004-07-23 Brian Warner <warner@lothar.com>
4825 * README: update for 0.5.0 release
4827 * NEWS: update for 0.5.0 release
4829 2004-07-22 Brian Warner <warner@lothar.com>
4831 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4832 mktap-time configuration flag (--usepty=1, --usepty=0)
4833 * buildbot/bot.py: same
4835 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4836 an 'info' directory being unwanted
4838 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4839 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4840 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4841 and earlier), use a FreshCVSSourceOldcred instead.
4842 (test): simple test routine: connect to server, print changes
4844 * buildbot/changes/changes.py (Change.getTime): make it possible
4845 to print un-timestamped changes
4847 * buildbot/master.py (makeApp): delete ancient dead code
4848 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4849 * buildbot/test/test_config.py (testFindConfigFile): test it
4851 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4852 instead of win32 one
4855 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4856 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4859 * buildbot/process/base.py (Builder.__init__): change constructor
4860 to accept a dictionary of config data, rather than discrete
4861 name/slave/builddir/factory arguments
4863 * docs/examples/twisted_master.cfg: update to new syntax
4864 * docs/examples/glib_master.cfg: same
4865 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4866 rough tests of the new syntax
4869 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4870 to be an int, which means "run a web.distrib sub-server on a TCP
4871 port". This lets you publish the buildbot status page to a remote
4872 twisted.web server (using distrib.ResourceSubscription). Also
4873 rename the local attributes used to hold these web things so
4874 they're more in touch with reality.
4875 * buildbot/test/test_web.py: test webPortnum and webPathname
4876 * docs/config.xhtml: document this new use of webPathname
4878 * docs/config.xhtml: new document, slightly ahead of reality
4880 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4881 'prefix' handling: treat it as a simple string to check with
4882 .startswith, instead of treating it as a directory. This allows
4883 sub-directories to be used. If you use prefix=, you should give it
4884 a string that starts just below the CVSROOT and ends with a slash.
4885 This prefix will be stripped from all filenames, and filenames
4886 which do not start with it will be ignored.
4888 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4890 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4891 and --exclude (inverse of --include). SVN post-commit hooks
4892 now have total control over which changes get sent to buildbot and which
4895 2004-07-10 Brian Warner <warner@lothar.com>
4897 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4898 test case to match new API
4900 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4901 which crashed HTML display when self.entries=[] (needed to
4902 distinguish between [], which means "no entries yet", and None,
4903 which means "the entries have been swapped out to disk, go fetch
4906 2004-07-04 Brian Warner <warner@lothar.com>
4908 * buildbot/process/step_twisted.py (countFailedTests): Count
4909 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4910 10kb from the end because any import errors are wedged there and
4911 they would make us think the test log was unparseable.
4912 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4914 2004-06-26 Brian Warner <warner@lothar.com>
4916 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4917 delete-*.pyc command into an actual BuildStep, so we can label it
4919 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4920 (FullTwistedBuildFactory): same
4922 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4924 * contrib/fakechange.py: Add an errback when sending the fake
4925 change, so we know it didn't work.
4927 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4929 * buildbot/process/step_twisted.py: Delete *.pyc files before
4930 calling trial, so it doesn't catch any old .pyc files whose .py
4931 files have been moved or deleted.
4933 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4934 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4935 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4936 instead of ["twisted.test"], so that the end result is "trial -R
4939 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4940 regular expression to match filenames that should be ignored when
4941 changed. Also add a --revision parameter that specifies the
4942 revision to examine, which is useful for debugging.
4944 2004-06-25 Brian Warner <warner@lothar.com>
4946 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4947 summary of warnings (like DeprecationWarnings), next to the
4950 2004-05-13 Brian Warner <warner@lothar.com>
4952 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4953 we now have a w32 build slave courtesy of Mike Taylor.
4955 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4956 so broken. Fixed a race condition that tripped up interlocked
4957 builds and caused the status to be stuck at "Interlocked" forever.
4958 The twisted buildbot's one interlocked build just so happened to
4959 never hit this case until recently (the feeding builds both pass
4960 before the interlocked build is attempted.. usually it has to wait
4962 (Builder._pong_failed): fix method signature
4964 * setup.py: bump to 0.4.3+ while between releases
4966 2004-04-30 Brian Warner <warner@lothar.com>
4968 * setup.py (version): Releasing buildbot-0.4.3
4970 2004-04-30 Brian Warner <warner@lothar.com>
4972 * MANIFEST.in: add the doc fragments in docs/*.xhtml
4974 * README: update for 0.4.3 release
4976 * NEWS: update for 0.4.3 release
4978 * buildbot/master.py (BuildMaster.__getstate__): make sure
4979 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4981 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4982 .trial as a class attribute, for upgrade from 0.4.2
4984 * buildbot/changes/changes.py (Change.links): add .links for
4987 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4988 .textWatchers and .htmlWatchers at save time, since they are both
4989 volatile, should allow smooth 0.4.2 upgrade
4991 * buildbot/process/step.py (CVS.finishStatus): catch failed
4992 CVS/SVN commands so we can make the status box red
4994 2004-04-29 Brian Warner <warner@lothar.com>
4996 * buildbot/changes/freshcvs.py
4997 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4998 code to do setFilter(), which tells the freshcvs daemon to not
4999 send us stuff that we're not interested in. I will uncomment it
5000 when a new version of CVSToys is available in which setFilter()
5001 actually works, and I get a chance to test it better.
5003 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5005 * buildbot/master.py (Dispatcher): use a registration scheme
5006 instead of hardwired service names
5007 (BuildMaster): keep track of the Dispatcher to support
5010 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5011 PBChangeSource class instead of having it be an undocumented
5012 internal feature of the ChangeMaster. Split out the code into a
5014 * buildbot/changes/pb.py (PBChangeSource): same
5015 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5017 * docs/{factories|sources|steps}.xhtml: document some pieces
5019 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5020 using FCMaildirSource
5021 (f23osx): update OS-X builder to use python2.3, since the slave
5022 was updated to Panther (10.3.3)
5024 2004-03-21 Brian Warner <warner@lothar.com>
5026 * buildbot/process/process_twisted.py: factor out doCheckout, change
5027 to use SVN instead of CVS
5029 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5030 an SVN subclass easier
5031 (BasicSVN): subclass which uses Subversion instead of CVS
5033 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5035 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5037 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5039 2004-02-25 Brian Warner <warner@lothar.com>
5041 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5042 is now either a list (which is passed to spawnProcess directly) or
5043 a string (which gets passed to /bin/sh -c). This removes the useSH
5044 flag and the ArgslistCommand class. Also send status header at the
5045 start and end of each command, instead of having the master-side
5047 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5048 -r'. Update to use list-based arguments.
5049 (SVNFetch): use list-based arguments, use ['dir'] argument to
5051 * buildbot/test/test_steps.py (Commands): match changes
5053 * buildbot/process/step.py (InternalShellCommand.words): handle
5055 (SVN): inherit from CVS, cleanup
5057 * buildbot/status/event.py (Logfile.content): render in HTML, with
5058 stderr in red and headers (like the name of the command we're
5059 about to run) in blue. Add link to a second URL (url + "?text=1")
5060 to get just stdout/stderr in text/plain without markup. There is
5061 still a problem with .entries=None causing a crash, it seems to occur
5062 when the logfile is read before it is finished.
5064 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5065 timeout to the keepalives, and use it to explicitly do a
5066 loseConnection instead of waiting for TCP to notice the loss. This
5067 ought to clear up the silent-lossage problem.
5068 (unsafeTracebacks): pass exception tracebacks back to the master,
5069 makes it much easier to debug problems
5071 2004-02-23 Brian Warner <warner@lothar.com>
5073 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5074 the whole command to /bin/sh instead of execve [Johan Dahlin]
5075 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5076 '-r HEAD' [Johan Dahlin]
5077 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5079 * buildbot/changes/changes.py (Change): add links= argument, add
5080 asHTML method [Johan Dahlin]. Modified to make a bit more
5081 XHTMLish. Still not sure how to best use links= .
5083 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5084 Change.asHTML to display the change, not asText
5086 * buildbot/status/html.py (StatusResourceBuilder): web button to
5089 * buildbot/test/test_run.py: test to actually start a buildmaster
5092 * MANIFEST.in: bring back accidentally-dropped test helper files
5094 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5095 that require cvstoys if it is not installed
5097 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5098 values of "bin/trial" [Dave Peticolas]
5099 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5100 tests passed" when we didn't happen to run any tests
5102 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5103 flunkOnFailure [Johan Dahlin]
5105 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5106 multiple instances of the same Step class by suffixing "_2", etc,
5107 to the name until it is unique. This name needs to be unique
5108 because it is used as a key in the dictionary that tracks build
5110 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5113 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5115 2004-01-14 Brian Warner <warner@lothar.com>
5117 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5118 kicked from a channel, log it
5120 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5121 something over whatever IRC channels the buildmaster is currently
5122 connected to. Added to try and track down a problem in which the
5123 master thinks it is still connected but the IRCd doesn't see it. I
5124 used a styles.Versioned this time, so hopefully users won't have
5125 to rebuild their .tap files this time.
5126 * contrib/debug.glade: add a "Poke IRC" button
5127 * contrib/debugclient.py: same
5129 * setup.py: bump to 0.4.2+ while between releases
5131 2004-01-08 Brian Warner <warner@lothar.com>
5133 * setup.py (version): Releasing buildbot-0.4.2
5135 2004-01-08 Brian Warner <warner@lothar.com>
5137 * NEWS: update for 0.4.2 release
5139 * README: document how to run the tests, now that they all pass
5141 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5143 * buildbot/process/step.py (CVS): add a global_options= argument,
5144 which lets you set CVS global options for the command like "-r"
5145 for read-only checkout, or "-R" to avoid writing in the
5147 * buildbot/slavecommand.py (CVSCommand): same
5149 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5150 testing easier (it is turned off when testing, to avoid the
5153 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5154 to make it easier to test: break generateStepID() out to a
5155 separate function, only update statusbag if it exists.
5156 (ShellCommands): create useful text for dict-based commands too.
5158 * test/*, buildbot/test/*: move unit tests under the buildbot/
5160 * setup.py (packages): install buildbot.test too
5162 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5163 * buildbot/test/test_steps.py: fix it, tests pass now
5165 2004-01-06 Brian Warner <warner@lothar.com>
5167 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5168 freshcvs mail uses a slightly different syntax for new
5169 directories. Update parser to handle either.
5170 * test/test_mailparse.py (Test1.testMsg9): test for same
5172 2003-12-21 Brian Warner <warner@lothar.com>
5174 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5175 'warnOnWarnings' so that lintian errors mark the build orange
5177 2003-12-17 Brian Warner <warner@lothar.com>
5179 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5180 messages emitted by Bonsai, contributed by Stephen Davis.
5182 * test/*: moved all tests to use trial instead of unittest. Some
5183 still fail (test_steps, test_slavecommand, and test_process).
5185 * setup.py (version): bump to 0.4.1+ while between releases
5187 2003-12-09 Brian Warner <warner@lothar.com>
5189 * setup.py (version): Releasing buildbot-0.4.1
5191 2003-12-09 Brian Warner <warner@lothar.com>
5193 * NEWS: update for 0.4.1 release
5195 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5196 freebsd builder code a little bit
5198 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5199 don't try to compare attributes of different classes
5200 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5201 (MaildirSource.messageReceived): fix Change delivery
5203 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5204 into the config file's namespace before loading it, like the
5205 documentation claims it does
5206 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5207 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5208 daemon comes back online
5210 2003-12-08 Brian Warner <warner@lothar.com>
5212 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5213 so the example will work with online=0 as well
5215 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5216 fix the __implements__ line
5218 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5219 class a twisted.application.service.Service, use startService to
5222 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5223 directory fd instead of simple open(). I'm sure this used to work,
5224 but the current version of python refuses to open directories with
5227 2003-12-05 Brian Warner <warner@lothar.com>
5229 * setup.py (version): bump to 0.4.0+ while between releases
5231 2003-12-05 Brian Warner <warner@lothar.com>
5233 * setup.py (version): Releasing buildbot-0.4.0
5235 2003-12-05 Brian Warner <warner@lothar.com>
5237 * docs/examples/glib_master.cfg: replace old sample scripts with
5238 new-style config files
5239 * MANIFEST.in: include .cfg files in distribution tarball
5241 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5242 implement a dummy method to avoid the exception that occurs when
5243 freshcvs sends this to us.
5245 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5246 removed the method, as it broke reconnection. Apparently
5247 stopFactory is called each time the connection attempt fails. Must
5249 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5250 attribute before serialization, since without stopFactory the
5251 reconnect timer may still be active and they aren't serializable.
5253 * test/test_mailparse.py (ParseTest): test with 'self' argument
5255 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5256 argument, as these "functions" are invoked like methods from class
5257 attributes and therefore always get an instance as the first
5260 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5261 message: thanks to Stephen Davis for the catch
5263 2003-12-04 Brian Warner <warner@lothar.com>
5265 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5266 twisted's standard ReconnectingClientFactory. Handles both oldcred
5267 and newcred connections. Also has a bug-workaround for
5268 ReconnectingClientFactory serializing its connector when it
5271 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5272 pbutil. Replace makeApp stuff with proper newcred/mktap
5273 makeService(). Don't serialize Ephemerals on shutdown.
5275 * buildbot/changes/changes.py (ChangeMaster): make it a
5276 MultiService and add the sources as children, to get startService
5277 and stopService for free. This also gets rid of the .running flag.
5279 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5280 new pbutil, turn into a TCPClient at the same time (to get
5281 startService for free). Two variants exist: FreshCVSSourceOldcred
5282 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5283 yet, but when it does, we'll be ready).
5284 (FreshCVSSource.notify): handle paths which are empty after the
5285 prefix is stripped. This only happens when the top-level (prefix)
5286 directory is added, at the very beginning of a Repository's life.
5288 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5289 Now the only reconnecting code is in the factory where it belongs.
5290 (Builder.unsubscribe): unregister the disconnect callback when we
5291 delete the builder on command from the master (i.e. when the
5292 buildmaster is reconfigured and that builder goes away). This
5293 fixes a multiple-delete exception when the status client is shut
5295 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5298 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5299 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5301 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5303 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5304 a list of globs (ugh). The testdir will be searched for files
5305 named *.tests and run the tests in the order specified in each of
5306 those files. This allows for "dependancies" between tests to be
5309 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5310 argument to pass to run_maxq.py, instead of a glob.
5312 2003-10-17 Brian Warner <warner@lothar.com>
5314 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5315 files that live in the sandbox
5317 2003-10-15 Brian Warner <warner@lothar.com>
5319 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5320 spelling error in "docs" count-warnings output
5321 (HLint.start): stupid thinko meant .xhtml files were ignored
5323 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5324 tests now that cReactor is banished to the sandbox
5326 2003-10-10 Brian Warner <warner@lothar.com>
5328 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5329 scheme: now .xhtml are sources and .html are generated
5331 2003-10-08 Brian Warner <warner@lothar.com>
5333 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5334 we were ignoring the 'randomly' parameter.
5336 2003-10-01 Brian Warner <warner@lothar.com>
5338 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5339 posix, to kill sub-children of aborted slavecommands.
5341 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5342 Clean up initialization: lastBuildStatus remains None until the
5343 first build has been completed.
5345 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5346 None as a lastBuildStatus
5347 * buildbot/clients/gtkPanes.py: same
5349 * buildbot/status/client.py (StatusClientService): keep
5350 BuilderStatus objects in self.statusbags . These objects now live
5351 here in the StatusClientService and are referenced by the Builder
5352 object, rather than the other way around.
5353 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5354 * buildbot/process/base.py (Builder): same
5355 * test/test_config.py (ConfigTest.testBuilders): same
5357 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5358 an existing builder, leave the statusbag alone. This will preserve the
5361 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5362 hook. This will probably go away in favor of a class in upcoming
5365 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5366 serviceName from newcred FreshCVSNotifiee setup
5368 2003-09-29 Brian Warner <warner@lothar.com>
5370 * buildbot/process/process_twisted.py: switch to new reactor
5372 * docs/examples/twisted_master.cfg: same
5374 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5376 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5377 botmaster reference instead of the oldapp service lookup
5379 * buildbot/master.py (BuildMaster.__init__): give the
5380 StatusClientService a reference to the botmaster to make it easier to
5383 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5385 * buildbot/status/html.py (Box.td): escape hreffy things so you
5386 can have spaces in things like builder names
5387 (StatusResourceBuilder.body)
5388 (WaterfallStatusResource.body)
5389 (WaterfallStatusResource.body0): same
5391 2003-09-25 Brian Warner <warner@lothar.com>
5393 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5394 rearrange the builder list when adding or removing builders: keep
5395 them in the order the user requested.
5396 * test/test_config.py (ConfigTest.testBuilders): verify it
5398 * contrib/debug.glade: give the debug window a name
5400 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5401 now wait on multiple interlocks. Fix code relating to that.
5402 (Builder.checkInterlocks): same
5403 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5405 * buildbot/master.py (BuildMaster.loadConfig): move from
5406 deprecated pb.BrokerFactory to new pb.PBServerFactory
5407 * test/test_config.py (ConfigTest.testWebPathname): same
5409 * docs/examples/twisted_master.cfg: fix interlock declaration
5411 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5412 Interlocks to their Builders into interlock.py .
5413 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5415 * test/test_config.py (ConfigTest.testInterlocks): validate
5418 * buildbot/process/base.py (Builder.__init__): better comments
5419 * buildbot/process/interlock.py (Interlock.__repr__): same
5420 (Interlock.deactivate): add .active flag, move the code that
5421 attaches/detaches builders into the Interlock
5423 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5425 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5426 tests using the new run_maxq.py script, and reporting failures by
5429 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5430 tests, reporting their success or failure in a buildbot-friendly
5433 2003-09-24 Brian Warner <warner@lothar.com>
5435 * docs/examples/twisted_master.cfg: example of a new-style config
5436 file. This lives in the buildmaster base directory as
5439 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5440 button to make the master re-read its config file
5442 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5443 buildmaster configuration from a file. This file can be re-read
5444 later, and the buildmaster will update itself to match the new
5445 desired configuration. Also use new Twisted Application class.
5446 * test/Makefile, test/test_config.py: unit tests for same
5448 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5449 FreshCVSSources comparable, to support reload.
5450 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5452 * buildbot/process/base.py (Builder): make them comparable, make
5453 Interlocks easier to attach, to support reload. Handle
5454 re-attachment of remote slaves.
5455 * buildbot/process/interlock.py (Interlock): same
5457 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5458 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5459 buildmaster taps are now constructed with mktap.
5460 * buildbot/status/client.py (StatusClientService): same
5462 * buildbot/status/words.py: move to new Services, add support to
5463 connect to multiple networks, add reload support, allow nickname
5464 to be configured on a per-network basis
5466 2003-09-20 Brian Warner <warner@lothar.com>
5468 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5469 the freebsd builder, now that the machine has been upgraded and no
5470 longer has python2.2
5472 * setup.py (version): bump to 0.3.5+ while between releases
5474 2003-09-19 Brian Warner <warner@lothar.com>
5476 * setup.py (version): Releasing buildbot-0.3.5
5478 2003-09-19 Brian Warner <warner@lothar.com>
5480 * NEWS: add post-0.3.4 notes
5482 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5484 * MANIFEST.in: add contrib/*
5486 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5487 use a remote root now: cvs.twistedmatrix.com
5489 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5491 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5492 compatibility with old servers
5493 (FreshCVSSource.start): and provide a way to use it
5494 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5496 * docs/examples/twisted_master.py (twisted_app): update to new
5498 (twisted_app): listen on new ~buildbot socket
5499 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5501 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5502 to reduce cvs bandwidth (update instead of full checkout)
5504 2003-09-11 Brian Warner <warner@lothar.com>
5506 * contrib/fakechange.py: demo how to connect to the changemaster
5507 port. You can use this technique to submit changes to the
5508 buildmaster from source control systems that offer a hook to run a
5509 script when changes are committed.
5511 * contrib/debugclient.py: tool to connect to the debug port. You
5512 can use it to force builds, submit fake changes, and wiggle the
5515 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5516 'Dispatcher' realm to handle all the different kinds of
5517 connections and Perspectives: buildslaves, the changemaster port,
5518 the debug port, and the status client port. NewCredPerspectives
5519 now have .attached/.detached methods called with the remote 'mind'
5520 reference, much like old perspectives did. All the pb.Services
5521 turned into ordinary app.ApplicationServices .
5522 (DebugService): went away, DebugPerspectives are now created
5523 directly by the Dispatcher.
5524 (makeApp): changed interface a little bit
5526 * buildbot/changes/changes.py: newcred
5527 * buildbot/status/client.py: newcred
5529 * buildbot/clients/base.py: newcred client side changes
5530 * buildbot/bot.py: ditto
5532 * docs/examples/glib_master.py: handle new makeApp() interface
5533 * docs/examples/twisted_master.py: ditto
5535 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5536 base newcred Perspectives on. This should go away once Twisted
5537 itself provides something sensible.
5540 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5542 * contrib/svn_buildbot.py: A program that you can call from your
5543 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5544 when a change in an SVN repository has happened. See the top of
5545 the file for some minimal usage info.
5547 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5549 * buildbot/slavecommand.py (ArglistCommand): Add new
5550 ArglistCommand that takes an argument list rather than a string as
5551 a parameter. Using a st.split() for argv is very bad.
5553 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5554 update to a particular revision rather than always checking out
5555 (still not very smart about it, there may be cases where the
5556 checkout becomes inconsistent).
5558 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5560 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5561 SVN fetch support. It can checkout (not update!) a specified
5562 revision from a specified repository to a specified directory.
5564 * buildbot/status/progress.py (Expectations.update): Fix an
5565 obvious bug (apparently created by the change described in the
5566 previous ChangeLog message) by moving a check to *after* the
5567 variable it checks is defined.
5570 2003-09-08 Brian Warner <warner@lothar.com>
5572 * buildbot/status/progress.py (Expectations.update): hack to catch
5573 an exception TTimo sees: sometimes the update() method seems to
5574 get called before the step has actually finished, so the .stopTime
5575 is not set, so no totalTime() is available and we average None
5576 with the previous value. Catch this and just don't update the
5577 metrics, and emit a log message.
5579 2003-08-24 Brian Warner <warner@lothar.com>
5581 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5582 parameter to set copydir='original' in CVS commands.
5584 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5586 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5587 which tells the command to maintain a separate original-source CVS
5588 workspace. For each build, this workspace will be updated, then
5589 the tree copied into a new workdir. This reduces CVS bandwidth
5590 (from a full checkout to a mere update) while doubling the local
5591 disk usage (to keep two copies of the tree).
5593 2003-08-21 Brian Warner <warner@lothar.com>
5595 * buildbot/status/event.py (Logfile.addEntry): if the master web
5596 server dies while we're serving a page, request.write raises
5597 pb.DeadReferenceError . Catch this and treat it like a
5598 notifyFinish event by dropping the request.
5600 2003-08-18 Brian Warner <warner@lothar.com>
5602 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5603 (instead of blowing up) if a force-build command is given without
5606 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5607 don't blow up if there aren't yet any Changes in the list
5609 2003-08-02 Brian Warner <warner@lothar.com>
5611 * buildbot/bot.py (updateApplication): don't set the .tap name,
5612 since we shouldn't assume we own the whole .tap file
5614 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5615 'mktap buildbot' (without a subcommand) better
5617 2003-07-29 Brian Warner <warner@lothar.com>
5619 * buildbot/status/words.py
5620 (IrcStatusFactory.clientConnectionLost): when we lose the
5621 connection to the IRC server, schedule a reconnection attempt.
5623 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5624 use shutil.rmtree instead of forking off an "rm -rf" command.
5625 rmtree may take a while and will block until it finishes, so we
5626 use "rm -rf" if available.
5628 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5629 freebsd buildslave badly
5631 * setup.py (version): bump to 0.3.4+ while between releases
5633 2003-07-28 Brian Warner <warner@lothar.com>
5635 * setup.py (version): Releasing buildbot-0.3.4
5637 2003-07-28 Brian Warner <warner@lothar.com>
5639 * NEWS: update in preparation for release
5641 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5642 process.signalProcess instead of os.kill, to improve w32
5645 * docs/examples/twisted_master.py (twisted_app): turn off
5646 win32eventreactor: the tests hang the buildslave badly
5648 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5649 failed builds, since usually the failures are consistent
5651 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5652 add compileOpts/compileOpts2 to reactors build
5654 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5655 (twisted_app): use both default and win32eventreactor on w32 build.
5656 Use both default and kqreactor on freebsd build.
5658 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5659 add compileOpts2, which is put after the build_ext argument. w32
5660 needs "-c mingw32" here.
5662 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5663 touch .acqpath, it goes away in recent Twisted releases
5665 * docs/examples/twisted_master.py (twisted_app): use "python" for
5666 the w32 buildslave, not "python2.2"
5668 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5669 the directory exists.. should hush an exception under w32
5671 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5672 ProcessTerminated -provided values for signal and exitCode rather
5673 than parsing the unix status code directly. This should remove one
5674 more roadblock for a w32-hosted buildslave.
5676 * test/test_mailparse.py: add test cases for Syncmail parser
5678 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5679 temporary compatibility import. Note! Start importing
5680 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5682 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5684 2003-07-27 Brian Warner <warner@lothar.com>
5686 * NEWS: started adding new features
5688 * buildbot/changes/mail.py: start work on Syncmail parser, move
5689 mail sources into their own file
5691 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5692 as implementing IChangeSource
5693 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5695 * buildbot/interfaces.py: define the IChangeSource interface
5697 2003-07-26 Brian Warner <warner@lothar.com>
5699 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5701 2003-06-25 Brian Warner <warner@lothar.com>
5703 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5706 2003-06-17 Brian Warner <warner@lothar.com>
5708 * buildbot/status/words.py: clean up method usage to avoid error
5709 in silly IRC command
5710 (IrcStatusBot.emit_status): round off seconds display
5712 * buildbot/process/base.py (Build): delete the timer when saving
5713 to the .tap file, and restore it (if it should still be running)
5714 upon restore. This should fix the "next build in -34 seconds"
5715 messages that result when the master is restarted while builds are
5716 sitting in the .waiting slot. If the time for the build has
5717 already passed, start it very soon (in 1 second).
5719 * buildbot/status/words.py: more silly commands
5721 * README (REQUIREMENTS): add URLs to all required software
5723 * buildbot/status/words.py ('last'): mention results of, and time
5726 2003-05-28 Brian Warner <warner@lothar.com>
5728 * buildbot/status/words.py: add 'last' command
5729 (IrcStatusBot.emit_status): add current-small text to 'status' output
5731 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5732 (twisted_app): remove spaces from OS-X builder name
5734 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5735 * buildbot/status/words.py: IRC bot should actually be useful now
5737 2003-05-23 Brian Warner <warner@lothar.com>
5739 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5740 "slave information" from $(slavedir)/info/* . These files are
5741 maintained by the slave administrator, and describe the
5742 machine/environment that is hosting the slave. Information from
5743 them is put into the "Builder" HTML page. Still need to establish
5744 a set of well-known filenames and meanings for this data: at the
5745 moment, *all* info/* files are sent to the master, but only
5746 'admin' and 'host' are used on that end.
5747 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5748 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5749 * buildbot/master.py (BotPerspective.got_info): ditto
5751 2003-05-22 Brian Warner <warner@lothar.com>
5753 * setup.py (version): bump version to 0.3.3+ while between releases
5755 2003-05-21 Brian Warner <warner@lothar.com>
5757 * setup.py: Releasing buildbot-0.3.3
5759 2003-05-21 Brian Warner <warner@lothar.com>
5761 * NEWS: 0.3.3 news items
5763 * README: describe --keepalive and life behind a NAT box
5765 * buildbot/bot.py (Bot.connected): implement application-level
5766 keepalives to deal with NAT timeouts, turn them on with
5767 --keepalive option or when SO_KEEPALIVE doesn't work.
5769 * buildbot/master.py (BotPerspective): accept keepalives silently
5771 * buildbot/process/base.py (Build.buildException): CopiedFailures
5772 don't carry as much information as local ones, so don't try to
5773 create a big HTMLized version of them.
5775 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5776 log file when step fails due to an exception, such as when the slave
5779 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5780 --testmodule argument instead of grepping for test-case-name tags
5781 ourselves. Remove FindUnitTests code.
5782 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5784 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5786 2003-05-16 Brian Warner <warner@lothar.com>
5788 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5789 argument to allow things like CFLAGS=-O0 to be passed without relying
5790 upon /bin/sh processing on the slave.
5792 * buildbot/process/step.py (InternalShellCommand.start): send
5794 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5795 'split' instead of letting /bin/sh do it. This should also remove
5796 the need for /bin/sh on the buildslave, making it more likely to
5799 * buildbot/status/html.py: html-escape text in blamelist.
5800 Add "force build" button to the Builder page.
5802 * buildbot/process/step_twisted.py (countFailedTests): look at
5803 last 1000 characters for status line, as import errors can put it
5804 before the -200 point.
5806 2003-05-15 Brian Warner <warner@lothar.com>
5808 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5810 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5811 make 'clobber' a parameter, so it is possible to have builds which
5812 do full tests but do a cvs update instead of hammering the CVS
5813 server with a full checkout each build
5815 * buildbot/process/step.py (InternalShellCommand): bump default
5816 timeout to 20 minutes
5818 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5819 the master to trigger a build. Run it via manhole.
5821 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5822 allow slaves to trigger any build that they host, to make life
5823 easier for slave admins who are testing out new build processes
5825 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5826 don't flunk cReactor or qtreactor on failure, since they fail alot
5827 these days. Do warnOnFailure instead.
5829 * buildbot/process/base.py: change Builder.buildable from a list
5830 into a single slot. When we don't have a slave, new builds (once
5831 they make it past the timeout) are now merged into an existing
5832 buildable one instead of being queued. With this change, a slave
5833 which has been away for a while doesn't get pounded with all the
5834 builds it missed, but instead just does a single build.
5836 2003-05-07 Brian Warner <warner@lothar.com>
5838 * setup.py (version): bump version to 0.3.2+ while between releases
5840 2003-05-07 Brian Warner <warner@lothar.com>
5842 * setup.py: Releasing buildbot-0.3.2
5844 2003-05-07 Brian Warner <warner@lothar.com>
5846 * setup.py: fix major packaging error: include subdirectories!
5848 * NEWS: add changes since last release
5850 * README (REQUIREMENTS): update twisted/python dependencies
5852 * buildbot/status/builder.py (Builder.startBuild): change
5853 BuildProcess API: now they should call startBuild/finishBuild
5854 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5855 keeping a list of builds in the statusbag, to support other kinds of
5857 (Builder.addClient): send current-activity-small to new clients
5858 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5861 * buildbot/status/client.py: drop RemoteReferences at shutdown
5863 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5865 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5866 more debug messages for remote status client
5868 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5869 (.stepFailed): only fire the Deferred once, even if both
5870 stepComplete and stepFailed are called. I think this can happen if
5871 an exception occurs at a weird time.
5873 * buildbot/status/words.py: work-in-progress: IRC status delivery
5875 2003-05-05 Brian Warner <warner@lothar.com>
5877 * docs/examples/twisted_master.py (twisted_app): hush internal
5878 python2.3 distutils deprecation warnings
5879 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5880 add compileOpts= argument which inserts extra args before the
5881 "setup.py build_ext" command. This can be used to give -Wignore
5882 warnings, to hush some internal python-2.3 deprecation messages.
5884 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5885 the ['twisted.test'] default test case to make it easier to change
5888 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5889 * buildbot/clients/gtkPanes.py: ditto
5891 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5892 arg to collapse RunUnitTestsRandomly into RunUnitTests
5893 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5894 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5896 * buildbot/status/html.py (StatusResource): shuffle Resources
5897 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5898 would serve the waterfall display, but the internal links were
5899 only valid on the trailing-slash version. The correct behavior is
5900 for the non-slashed one to serve a Redirect to the slashed one.
5901 This only shows up when the buildbot page is hanging off another
5902 server, like a Twisted-Web distributed server.
5904 * buildbot/status/event.py (Event, RemoteEvent): make Events
5905 pb.Cacheable, with RemoteEvent as the cached version. This removes
5906 a lot of explicit send-an-update code.
5907 * buildbot/status/builder.py (Builder): remove send-update code
5908 * buildbot/status/client.py (ClientBuilder): remove send-update
5909 code, and log errors that occur during callRemote (mostly to catch
5910 InsecureJelly exceptions)
5912 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5913 run Lore with the same python used in the rest of the build
5915 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5917 * buildbot/process/step_twisted.py (HLint): accept 'python'
5918 argument. Catch rc!=0 and mark the step as failed. This marks the
5919 build orange ("has warnings").
5920 (RunUnitTestsJelly): move out to step_twisted2.py
5922 * buildbot/util.py (ignoreStaleRefs): add utility function
5924 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5925 don't fake ETA object, it's too hard to get right
5927 2003-05-02 Brian Warner <warner@lothar.com>
5929 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5931 2003-05-01 Brian Warner <warner@lothar.com>
5933 * buildbot/status/html.py (StatusResource.body): oops, I was
5934 missing a <tr>, causing the waterfall page to be misrendered in
5935 everything except Galeon.
5937 2003-04-29 Brian Warner <warner@lothar.com>
5939 * docs/examples/twisted_master.py: make debuild use python-2.2
5940 explicitly, now that Twisted stopped supporting 2.1
5942 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5943 handle tuple results too. I keep forgetting this, which suggests
5944 it needs to be rethought.
5946 * setup.py (setup): bump version to 0.3.1+ while between releases
5948 2003-04-29 Brian Warner <warner@lothar.com>
5950 * setup.py: Releasing buildbot-0.3.1
5952 2003-04-29 Brian Warner <warner@lothar.com>
5954 * README (SUPPORT): add plea to send questions to the mailing list
5956 * NEWS, MANIFEST.in: add description of recent changes
5958 * docs/examples/twisted_master.py: add the code used to create the
5959 Twisted buildmaster, with passwords and such removed out to a
5962 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5963 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5964 buildmasters to not require CVSToys be installed.
5965 * README, docs/examples/glib_master: update to match the change
5967 * buildbot/clients/base.py, buildbot/bot.py,
5968 buildbot/changes/changes.py, buildbot/pbutil.py: copy
5969 ReconnectingPB from CVSToys distribution to remove CVSToys
5970 dependency for build slaves and status clients. Buildmasters which
5971 use FreshCVSSources still require cvstoys be installed, of course.
5973 2003-04-25 Brian Warner <warner@lothar.com>
5975 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5976 runTestsRandomly arg to turn on trial -z
5978 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5979 experimental code to use trial's machine-parseable output to get
5980 more detailed test results. Still has some major issues.
5981 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5984 * buildbot/status/builder.py (Builder.setCurrentBuild):
5985 anticipating moving build history into statusbag, not used yet
5987 * buildbot/status/tests.py: code to centralize test results,
5988 doesn't work quite yet
5990 * buildbot/status/event.py (Event): use hasattr("setName") instead
5991 of isinstance for now.. need better long-term solution
5993 * buildbot/status/html.py: Remove old imports
5995 2003-04-24 Brian Warner <warner@lothar.com>
5997 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5998 ignore changes under doc/fun/ and sandbox/
6000 * buildbot/process/step_twisted.py: update pushEvent and friends.
6002 * buildbot/status/html.py (Box.td): replace event.buildername with
6003 event.parent.getSwappableName(). Needs more thought.
6005 * buildbot/status/builder.py (Builder): Replace pushEvent and
6006 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6007 Tell events they are being pruned with event.delete().
6009 * buildbot/process/base.py (Build): Remove Builder status-handling
6010 methods. s/pushEvent/setCurrentActivity/.
6012 * buildbot/process/step.py (BuildStep): clean up status delivery.
6013 Gouse builder.statusbag methods instead of intermediate builder
6014 methods. s/updateLastEvent/updateCurrentActivity/.
6015 s/finalizeLastEvent/finishCurrentActivity/. Use
6016 addFileToCurrentActivity for summaryFunction.
6018 * buildbot/status/event.py (Logfile): put data in a Swappable when
6020 (Event): add more setter methods. Remove .buildername, use .parent
6021 and getSwappableName instead (needs more thought).
6023 * buildbot/util.py (Swappable):
6024 * test/test_swap.py: don't bother setting filename at __init__
6025 time, do it later. Change setFilename args to take parent first,
6026 since it provides the most significant part of the filename.
6028 2003-04-23 Brian Warner <warner@lothar.com>
6030 * buildbot/status/event.py (Logfile.addEntry): append to previous
6033 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6034 anticipating Swappable
6035 (InternalShellCommand.remoteUpdate): split out various log-adding
6036 methods so subclasses can snarf stdout separately
6038 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6039 in anticipation of Swappable build logs
6040 (Builder.testsFinished): anticipating TestResults, still disabled
6042 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6045 * buildbot/status/event.py (Logfile): add (disabled) support for
6046 Swappable, not ready for use yet
6048 * buildbot/util.py (Swappable): object which is swapped out to
6049 disk after some period of no use.
6050 * test/test_swap.py: test buildbot.utils.Swappable
6052 2003-04-14 Brian Warner <warner@lothar.com>
6054 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6055 periodic-build timer. Set the .periodicBuildTime on a builder
6056 instance to some number of seconds to activate it.
6058 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6060 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6061 a way that survives result tuples
6063 2003-04-12 Brian Warner <warner@lothar.com>
6065 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6066 return a dict instead of a tuple: allow summarizers to provide
6067 multiple summaries if they want
6068 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6069 (debuildSummarizer): summarize lintian warnings/errors
6071 2003-04-10 Brian Warner <warner@lothar.com>
6073 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6075 2003-04-09 Brian Warner <warner@lothar.com>
6077 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6078 empty summaries: happens when the tests fail so hard they don't emit
6079 a parseable summary line.
6081 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6082 Allow summaryFunction to return None to indicate no summary should
6085 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6086 writing to stale HTTP requests: notice when they disconnect and
6087 remove the request from the list. Also add CacheToFile from
6088 moshez, will be used later.
6090 2003-04-08 Brian Warner <warner@lothar.com>
6092 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6093 should be an int, not a list of strings
6095 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6096 if we weren't actually connected
6098 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6099 to show the tail end of the trial text output
6101 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6102 hook to summarize the results of a ShellCommand
6104 2003-04-07 Brian Warner <warner@lothar.com>
6106 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6107 twisted test suite code into a single class.
6108 * buildbot/process/process_twisted.py: same
6110 2003-04-04 Brian Warner <warner@lothar.com>
6112 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6114 * README (SLAVE): document use of mktap to create slave .tap file
6115 (REQUIREMENTS): describe dependencies
6117 * buildbot/bb_tap.py, buildbot/plugins.tml:
6118 * buildbot/bot.py (updateApplication): Add mktap support for creating
6119 buildslave .tap files
6121 2003-03-28 Brian Warner <warner@lothar.com>
6123 * buildbot/process/step.py (InternalShellCommand.finished): handle
6124 new tuple result values (fix embarrasing bug that appeared during
6127 2003-03-27 Brian Warner <warner@lothar.com>
6129 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6132 2003-03-25 Brian Warner <warner@lothar.com>
6134 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6135 to overall build status
6136 * buildbot/clients/base.py (Builder): improve event printing
6137 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6138 instead of generic ShellCommand
6139 (Build): Add .stopBuild, use it when slave is detached
6141 * buildbot/process/step.py (Configure,Test): give the steps their
6142 own names and status strings
6144 * buildbot/status/html.py (StatusResource): add "show" argument,
6145 lets you limit the set of Builders being displayed.
6147 2003-03-20 Brian Warner <warner@lothar.com>
6149 * buildbot/process/basic.py: removed
6151 2003-03-19 Brian Warner <warner@lothar.com>
6153 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6154 turn off process-docs by default
6156 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6157 when displaying build information without anything in allBuilds[]
6159 * buildbot/bot.py (makeApp): really take password from sys.argv
6161 2003-03-18 Brian Warner <warner@lothar.com>
6163 * buildbot/bot.py (buildApp): take password from sys.argv
6165 * README: replace with more useful text
6167 * setup.py: add a real one
6168 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6170 * docs/PyCon-2003/: added sources for PyCon paper.
6172 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6173 now Build objects control the process and Builder only handles
6174 slave stuff and distribution of changes/status. A new BuildFactory
6175 class creates Build objects on demand.
6177 Created ConfigurableBuild which takes a list of steps to run. This
6178 makes it a lot easier to set up a new kind of build and moves us
6179 closer to being able to configure a build from a web page.
6181 * buildbot/process/step_twisted.py, process_twisted.py: move to
6182 new model. A lot of code went away.
6184 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6185 send lots of empty progress messages to the client.
6187 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6189 2003-02-20 Brian Warner <warner@lothar.com>
6191 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6193 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6194 Twisted bug that prevented non-pty processes from working just got
6195 fixed, and the bug that leaks ptys is still being investigated.
6197 * buildbot/process/step.py (CVS): send timeout arg to slave
6199 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6200 builders coming and going
6201 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6202 from CVSToys, handle lost-buildmaster
6204 * buildbot/status/client.py (StatusClientService.removeBuilder):
6205 Clean up status client protocol: send builders (with references)
6206 as they are created, rather than sending a list and requiring the
6207 client to figure out which ones are new.
6208 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6209 attempts to force a build on an unknown builder
6211 2003-02-19 Brian Warner <warner@lothar.com>
6213 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6214 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6215 Twisted stops leaking them.
6216 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6217 builder goes to an idle state.
6219 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6220 I figure out why CVS commands hang without them, and/or I fix the
6221 hung-command timeout
6223 2003-02-16 Brian Warner <warner@lothar.com>
6225 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6226 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6227 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6228 GenerateDocs now that they are prefixed with WARNING:.
6230 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6231 use manual href target instead of request.childLink
6233 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6234 display every second, but update the ETA every 5 seconds (or
6235 whenever) as remote_progress messages arrive.
6238 2003-02-12 Brian Warner <warner@lothar.com>
6240 * *: import current sources from home CVS repository
6244 # add-log-time-format: add-log-iso8601-time-string