1 2006-06-13 Brian Warner <warner@lothar.com>
3 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
4 compatibility with python2.2, which doesn't have the 'substr in
6 (TestP4Poller.makeTime): utility function to construct the
7 timestamp using the same strptime() approach as p4poller does. It
8 turns out that time.mktime() behaves slightly differently under
9 python2.2, probably something to do with the DST flag, and that
10 causes the test to fail under python2.2. (changing the mktime()
11 arguments to have dst=0 instead of -1 caused it to fail under
12 python2.3. Go figure.)
13 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
15 2006-06-12 Brian Warner <warner@lothar.com>
17 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
18 proper Perforce (P4) support. Many many thanks to Scott Lamb for
19 contributing such an excellent patch, including docs and unit
20 tests! This makes it *so* much easier to apply. I had to update
21 test_vc.py to handle some recent refactorings, but everything else
22 applied smoothly. The only remaining thing I'd like to fix would
23 be to remove the hard-wired port 1666 used by p4d, and allow it to
24 claim any unused port. This would allow two copies of the test
25 suite to run on the same host at the same time, as well as
26 allowing the test suite to run while a real (production) p4d was
27 running on the same host. Oh, and maybe we should add a warning to
28 step.P4 that gets emitted if the slave is too old to provide the
29 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
30 * buildbot/slave/commands.py (P4): same
31 (P4Sync): same, some minor updates
32 * buildbot/changes/p4poller.py: same
33 * docs/buildbot.texinfo: same
34 * buildbot/test/test_p4poller.py: same
35 * buildbot/test/test_vc.py (P4): same
37 * setup.py: add Trove classifiers for PyPI
39 2006-06-08 Brian Warner <warner@allmydata.com>
41 * buildbot/status/client.py
42 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
43 changing this from getCurrentBuild() to getCurrentBuilds(). Each
44 build needs to be IRemote'd separately, rather than IRemote'ing
45 the whole list at once. I can't wait until newpb's serialization
46 adapters make this unnecessary.
48 2006-06-06 Brian Warner <warner@lothar.com>
50 * buildbot/process/step.py (WithProperties): make this inherit
51 from ComparableMixin, so that reloading an unchanged config file
52 doesn't cause us to spuriously reload any Builders which use them.
53 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
56 2006-06-03 Brian Warner <warner@lothar.com>
58 * contrib/windows/{setup.py, buildbot_service.py}: add support for
59 running py2exe on windows, contributed by Mark Hammond. Addresses
60 SF#1401121, but I think we still need to include
61 buildbot/scripts/sample.cfg
62 * setup.py: include buildbot_service.py as a script under windows
63 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
64 a py2exe application), get the icon/css datafiles from a different
67 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
68 double-escape the build URL. Thanks to Olivier Bonnet for the
69 patch. Fixes SF#1452801.
71 2006-06-02 Brian Warner <warner@lothar.com>
73 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
74 first six columns of 'svnlook' output, not just the first column,
75 since property changes appear in the other five. Thanks to Olivier
76 Bonnet for the patch. Fixes SF#1398174.
78 2006-06-01 Brian Warner <warner@lothar.com>
80 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
81 the fake build, so that title= has something to be set to
83 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
84 attribute of the "Build #NN" link in the yellow start-the-build
85 box to the build's reason. This means that you get a little
86 tooltip explaining why the build was done when you hover over the
87 yellow box. Thanks to Zandr Milewski for the suggestion.
89 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
90 (Box.setETA): handle ETA=None (by stopping the timer)
91 (Box.update): make the [soon] text less different than the usual
92 text, so the rest of the text doesn't flop around so much. It
93 would be awfully nice to figure out how to center this stuff.
94 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
96 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
97 by default, so that any ShellCommand which fails marks the overall
98 build as a failure. I should have done this from the beginning.
99 Add flunkOnFailure=False to the arguments if you want to turn off
102 2006-05-30 Brian Warner <warner@lothar.com>
104 * buildbot/clients/gtkPanes.py: add a third row: now it shows
105 last-build/current-build/current-step. Show what step is currently
106 running. Show ETA for both the overall build and the current step.
107 Update GTK calls to modern non-deprecated forms. There's still a
108 lot of dead code and debug noise to remove.
110 * buildbot/process/step_twisted.py (Trial): set the step name, so it
111 shows up properly in status displays
113 2006-05-28 Brian Warner <warner@lothar.com>
115 * buildbot/test/test_properties.py (Run.testInterpolate): on the
116 build we use to verify that WithProperties works:
118 ** set flunkOnFailure=True so that build failures get noticed
119 ** set workdir='.' so that the build succeeds, otherwise it is trying
120 to touch 'build/something', and 'build/' doesn't exist because
121 usually that's created by a Source step
122 ** set timeout=10, because Twisted-1.3.0 has a race condition that
123 this test somehow triggers, in which the 'touch' process becomes
124 a zombie and we wait for th etimeout before giving up on it.
126 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
127 to log the Build results and step logs to the twisted log.
128 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
129 what went wrong if a build was expected to succeed but didn't.
131 * buildbot/process/step_twisted.py (Trial): set the default
132 trialMode to '--reporter=bwverbose', which specifies verbose
133 black-and-white text. Back in twisted-1.3/2.0 days we had to use
134 '-to', but those are completely missing in modern Twisteds.
136 * buildbot/scripts/sample.cfg: make the sample Manhole config use
137 a localhost-only port, to encourage better security
139 * docs/buildbot.texinfo (Change Sources): mention
142 * .darcs-boring: add a Darcs boringfile
144 * README (REQUIREMENTS): stop claiming compatibility with
147 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
150 2006-05-27 Brian Warner <warner@lothar.com>
152 * buildbot/__init__.py: bump to 0.7.3+ while between releases
153 * docs/buildbot.texinfo: same
155 2006-05-23 Brian Warner <warner@lothar.com>
157 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
158 * docs/buildbot.texinfo: set version to match
159 * NEWS: update for 0.7.3
161 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
162 give a quick mapping from VC system to possible ChangeSources
163 (Build Properties): add 'buildername'
165 * buildbot/process/base.py (Build.setupStatus): oops, set
166 'buildername' and 'buildnumber' properties
167 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
170 2006-05-22 Brian Warner <warner@lothar.com>
172 * docs/buildbot.texinfo (Build Properties): explain the syntax of
173 property interpolation better
175 * README (INSTALLATION): remove old '-v' argument from recommended
178 * docs/buildbot.texinfo (ShellCommand): add docs for description=
179 and descriptionDone= arguments. Thanks to Niklaus Giger for the
182 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
183 'svnversion' instead of grepping the output of 'svn info', much
184 simpler and avoids CR/LF problems on windows. Thanks to Olivier
185 Bonnet for the suggestion.
186 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
187 require the WC_PATH argument, so run 'svnversion .' instead.
189 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
190 aren't supposed to have 'self' in their argument list
192 2006-05-21 Brian Warner <warner@lothar.com>
194 * buildbot/process/step.py (ShellCommand.start): make
195 testInterpolate pass. I was passing the uninterpolated command to
196 the RemoteShellCommand constructor
197 (ShellCommand._interpolateProperties): oops, handle non-list
198 commands (i.e. strings with multiple words separated by spaces in
199 them) properly, instead of forgetting about them.
201 * buildbot/test/test_properties.py (Run.testInterpolate): new test
202 to actually try to use build properties in a real build. This test
204 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
205 to start and evaluate builds
207 * buildbot/test/test__versions.py: add a pseudo-test to record
208 what version of Twisted/Python/Buildbot are running. This should
209 show up at the beginning of _trial_tmp/test.log, and exists to help
210 debug other problems.
212 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
213 a filename to be served as 'robots.txt' to discourage web spiders.
214 Adapted from a patch by Tobi Vollebregt, thanks!
215 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
216 (Waterfall.test_waterfall): tweak the way that filenames are put
217 into the config file, to accomodate windows pathnames better.
219 * docs/buildbot.texinfo (HTML Waterfall): document it
221 * buildbot/process/process_twisted.py
222 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
223 changed the build process. The new setup.py no longer takes the
225 (FullTwistedBuildFactory.__init__): same
226 (TwistedReactorsBuildFactory.__init__): same
228 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
229 be placed in the [hooks] section of the central repository (the
230 one that everybody pushes changes to).
232 2006-05-20 Brian Warner <warner@lothar.com>
234 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
235 .darcs-context file, use binary mode. I think this was causing a
236 Darcs failure under windows.
238 2006-05-19 Brian Warner <warner@lothar.com>
240 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
241 use a timezone string of +0000 and gmtime, since this timestamp is
242 sent to a buildmaster and %z is broken.
244 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
245 string and localtime, since this timestamp will only be consumed
246 locally, and %z is broken.
248 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
249 gmtime, since this timestamp is returned to the buildmaster, and
252 2006-05-18 Brian Warner <warner@lothar.com>
254 * NEWS: update in preparation for next release
256 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
257 setup-repository and do-we-have-the-vc-tools code into a separate
258 "helper" class, which sticks around in a single module-level
259 object. This seems more likely to continue to work in the future
260 than having it hide in the TestCase and hope that TestCases stick
261 around for a long time.
263 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
264 addremove' has been deprecated in recent versions of mercurial, so
267 2006-05-07 Brian Warner <warner@lothar.com>
269 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
270 operating under windows, move the file before opening it, since
271 you can't rename a file that somebody has open.
273 * buildbot/process/base.py (Build.setupBuild): if something goes
274 wrong while creating a Step, log the name and arguments, since the
275 error message when you get the number of arguments wrong is really
278 2006-05-06 Brian Warner <warner@lothar.com>
280 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
281 bugs in twisted-specific code not covered by my unit tests, this
282 time use 'cmd' argument instead of self.cmd
284 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
285 fix stupid braino: either use startwith or find()==0, not both.
286 (TwistedReactorsBuildFactory.__init__): another dumb typo
288 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
289 mark this test as TODO under windows, since process-killing seems
290 dodgy there. We'll come back to this later and try to fix it
293 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
294 and don't include a timezone
295 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
296 This should avoid the windows-with-verbose-timezone-name problem
298 (Patch.testPatch): add a test which runs 'patch' with less
299 overhead than the full VCBase.do_patch sequence, to try to isolate
300 a windows test failure. This one uses slave.commands.ShellCommand
301 and 'patch', but none of the VC code.
303 * buildbot/slave/commands.py (getCommand): use which() to find the
304 executables for 'cvs', 'svn', etc. This ought to help under
307 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
308 working directory before starting. If an earlier test failed, the
309 leftover directory would mistakenly flunk a later test.
310 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
311 Make sure that we use the right commandlines if which("tla") picks
312 up "tla.exe" (as it does under windows).
313 (TlaSupport.do_get): factor out this tla-vs-baz difference
314 (TlaSupport.vc_create): more tla-vs-baz differences
316 * buildbot/test/test_slavecommand.py
317 (ShellBase.testShellMissingCommand): stop trying to assert
318 anything about the error message: different shells on different
319 OSes with different languages makes it hard, and it really isn't
320 that interesting of a thing to test anyway.
322 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
323 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
324 "Panther"), because it has a bug which flunks a couple tests in
325 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
326 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
327 able to test that yet.
329 2006-04-30 Brian Warner <warner@lothar.com>
331 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
332 make sure child commands emit messages in english, so our regexps
333 will match. Thanks to Nikaus Giger for identifying the problems.
334 (VCBase._do_vctest_export_1): mode="export" is not responsible
335 for setting the "got_revision" property, since in many cases it is
336 not convenient to determine.
337 (SVNSupport.capable): when running 'svn --version' to check for
338 ra_local, we want error messages in english
339 * buildbot/test/test_slavecommand.py
340 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
341 to emit the error message in english
343 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
344 the environment with $LC_ALL="C" so that Commands which need to
345 parse the output of their child processes can obtain it in
347 (SVN.parseGotRevision): call "svn info" afterwards instead of
348 watching the output of the "svn update" or "svn checkout".
349 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
350 (Arch.parseGotRevision): same
351 (Bazaar.parseGotRevision): same
352 (Mercurial.parseGotRevision): same
354 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
355 $LC_ALL="C" when running commands under 'buildbot try', too
357 * buildbot/test/__init__.py: remove the global os.environ()
358 setting, instead we do it just for the tests that run commands and
359 need to parse their output.
361 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
362 remove the overly-short .timeout on this test, because non-DNotify
363 platforms must fall back to polling which happens at 10 second
364 intervals, so a 5 second timeout would never succeed.
366 2006-04-24 Brian Warner <warner@lothar.com>
368 * docs/buildbot.texinfo (Installing the code): update trial
369 invocation, SF#1469116 by Niklaus Giger.
370 (Attributes of Changes): updated branch-name examples to be
371 a bit more realistic, SF#1475240 by Stephen Davis.
373 * contrib/windows/buildbot2.bat: utility wrapper for windows
374 developers, contributed by Nick Trout (after a year of neglect..
377 * buildbot/test/test_vc.py (*.capable): store the actual VC
378 binary's pathname in VCS[vcname], so it can be retrieved later
379 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
380 strip out non-numeric timezone information, specifically the funky
381 German string that his system produced that confuses CVS.
382 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
383 allow Darcs tests to work on windows
384 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
385 procutils.which() everywhere, to allow tryclient to work under
386 windows. Also from Niklaus Giger, SF#1463394.
388 * buildbot/twcompat.py (which): move the replacement for a missing
389 twisted.python.procutils.which from test_vc.py to here, so it can
390 be used in other places too (specifically tryclient.py)
392 2006-04-23 Brian Warner <warner@lothar.com>
394 * buildbot/status/html.py (StatusResourceBuild.body): replace the
395 bare buildbotURL/projectName line with a proper DIV, along with a
396 CSS class of "title", from Stefan Seefeld (SF#1461675).
397 (WaterfallStatusResource.body0): remove the redundant 'table'
399 (WaterfallStatusResource.body): same. Also add class="LastBuild"
400 to the top-row TR, and class="Activity" to the second-row TR,
401 rather than putting them in the individual TD nodes.
403 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
404 'got_revision' build property for all VC systems that implement
405 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
407 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
408 to determine which revision we actually obtained
409 (CVS.parseGotRevision): implement this for CVS, which just means
410 to grab a timestamp. Not ideal, and it depends upon the buildslave
411 having a clock that is reasonably well syncronized with the server,
412 but it's better than nothing.
413 (SVN.parseGotRevision): implement it for SVN, which is accurate
414 (Darcs.parseGotRevision): same
415 (Arch.parseGotRevision): same
416 (Bazaar.parseGotRevision): same
417 (Mercurial.parseGotRevision): same
419 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
420 keep a record of all non-stdout/stderr/header/rc status updates,
421 for the benefit of RemoteCommands that send other useful things,
423 (Source.commandComplete): put any 'got_revision' status values
424 into a build property of the same name
427 * buildbot/process/step_twisted.py (Trial): update to deal with
428 new ShellCommand refactoring
430 * docs/buildbot.texinfo (Build Properties): document new feature
431 that allows BuildSteps to get/set Build-wide properties like which
432 revision was requested and/or checked out.
434 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
435 * buildbot/status/builder.py (BuildStatus.getProperty): implement
436 it. Note that this bumps the persistenceVersion of the saved Build
437 object, so add the necessary upgrade-old-version logic to include
438 an empty properties dict.
440 * buildbot/process/base.py (Build.setProperty): implement it
441 (Build.getProperty): same
442 (Build.startBuild): change build startup to set 'branch',
443 'revision', and 'slavename' properties at the right time
445 * buildbot/process/step.py (BuildStep.__init__): change setup to
446 require 'build' argument in a better way
447 (LoggingBuildStep): split ShellCommand into two pieces, for better
448 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
449 a single RemoteCommand that sends stdout/stderr status text. It
450 also provides the usual commandComplete / createSummary /
451 evaluateCommand / getText methods to be overridden...
452 (ShellCommand): .. whereas ShellCommand is specifically for
453 running RemoteShellCommands. Other shell-like BuildSteps (like
454 Source) can inherit from LoggingBuildStep instead of ShellCommand
455 (WithProperties): marker class to do build-property interpolation
456 (Source): inherit from LoggingBuildStep instead of ShellCommand
459 * buildbot/test/test_properties.py: test new functionality
461 2006-04-21 Brian Warner <warner@lothar.com>
463 * buildbot/test/test_vc.py: rename testBranch to
464 testCheckoutBranch to keep the tests in about the right
467 2006-04-18 Brian Warner <warner@lothar.com>
469 * docs/buildbot.texinfo (PBListener): improve cross-references
470 between PBListener and 'buildbot statusgui', thanks to John Pye
473 2006-04-17 Brian Warner <warner@lothar.com>
475 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
476 running under Twisted-1.3.0, otherwise skipped tests are reported
479 * all: use isinstance() instead of 'type(x) is foo', suggested by
482 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
483 oops, fix a brain-fade from the other week, when making the
484 addStep changes. I changed all the __init__ upcalls to use the
485 wrong superclass name.
486 (FullTwistedBuildFactory.__init__): same
487 (TwistedDebsBuildFactory.__init__): same
488 (TwistedReactorsBuildFactory.__init__): same
489 (TwistedBuild.isFileImportant): use .startswith for clarity,
490 thanks to Neal Norwitz for the suggestions.
492 * contrib/viewcvspoll.py: script to poll a viewcvs database for
493 changes, then deliver them over PB to a remote buildmaster.
495 * contrib/svnpoller.py: added script by John Pye to poll a remote
496 SVN repository (by running 'svn log') from a cronjob, and run
497 'buildbot sendchange' to deliver the changes to a remote
499 * contrib/svn_watcher.py: added script by Niklaus Giger (a
500 modification of svnpoller.py), same purpose, but this one loops
501 internally (rather than expecting to run from a cronjob) and works
503 * contrib/README.txt: same
505 2006-04-11 Brian Warner <warner@lothar.com>
507 * all: fix a number of incorrect names and missing imports, thanks
508 to Anthony Baxter for the patch.
509 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
510 remove unused buggy method.
511 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
512 comes from shutil, not "shutils"
513 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
514 (Arch.checkSlaveVersion): same
515 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
517 * buildbot/process/step_twisted2.py: add some missing imports
518 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
519 this code used to live in twisted.internet.defer
521 2006-04-10 Brian Warner <warner@lothar.com>
523 * buildbot/process/step.py (Mercurial): add Mercurial support
524 * buildbot/slave/commands.py (Mercurial): same
525 * buildbot/scripts/tryclient.py (MercurialExtractor): same
526 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
527 not yet tested, but 'try' support *is* covered
528 * docs/buildbot.texinfo (Mercurial): document it
530 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
531 some debugging messages (turned off)
532 * buildbot/test/test_vc.py: improve debug messages
534 2006-04-07 Brian Warner <warner@lothar.com>
536 * buildbot/test/test_vc.py (which): define our own which() in case
537 we can't import twisted.python.procutils, because procutils doesn't
540 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
541 of SlaveLocks for performance tests
543 * docs/examples/twisted_master.cfg: update to match current usage
545 * buildbot/changes/p4poller.py (P4Source): add new arguments:
546 password, p4 binary, pollinterval, maximum history to check.
547 Patch from an anonymous sf.net contributor, SF#1219384.
548 * buildbot/process/step.py (P4Sync.__init__): add username,
549 password, and client arguments.
550 * buildbot/slave/commands.py (P4Sync): same
552 2006-04-05 Brian Warner <warner@lothar.com>
554 * buildbot/process/factory.py (BuildFactory.addStep): new method
555 to add steps to a BuildFactory. Use it instead of f.steps.append,
556 and you can probably avoid using the s() convenience function.
557 Patch from Neal Norwitz, sf.net #1412605.
558 (other): update all factories to use addStep
559 * buildbot/process/process_twisted.py: update all factories to use
562 2006-04-03 Brian Warner <warner@lothar.com>
564 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
565 work under windows too. Adapted from a patch by Niklaus Giger,
566 addresses SF#1463399.
568 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
569 spawned commands emit parseable results in english and not some
570 other language. Patch from Niklaus Giger, SF#1463395.
572 * README (INSTALLATION): discourage users from running unit tests on
573 a "network drive", patch from Niklaus Giger, SF#1463394.
575 2006-03-22 Brian Warner <warner@lothar.com>
577 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
578 function to turn a repository-relative pathname into a (branch,
579 branch-relative-filename) tuple. Change this function to handle
580 the branch naming policy used by your Subversion repository.
581 Thanks to AllMyData.com for sponsoring this work.
583 2006-03-16 Brian Warner <warner@lothar.com>
585 * buildbot/scripts/sample.cfg: add python-mode declaration for
586 vim. Thanks to John Pye for the patch.
588 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
589 command line, mention the importance of running 'crontab' as the
590 buildmaster/buildslave user. Thanks to John Pye for the catch.
592 2006-03-13 Brian Warner <warner@lothar.com>
594 * buildbot/status/words.py (IRC): add an optional password=
595 argument, which will be sent to Nickserv in an IDENTIFY message at
596 login, to claim the nickname. freenode requires this before the
597 bot can sent (or reply to) private messages. Thanks to Clement
598 Stenac for the patch.
599 * docs/buildbot.texinfo (IRC Bot): document it
601 * buildbot/status/builder.py (LogFile.merge): don't write chunks
602 larger than chunkSize. Fixes SF#1349253.
603 * buildbot/test/test_status.py (Log.testLargeSummary): test it
604 (Log.testConsumer): update to match new internal chunking behavior
606 2006-03-12 Brian Warner <warner@lothar.com>
608 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
610 * buildbot/test/test_maildir.py (MaildirTest): rename the
611 'timeout' method, as it collides with trial's internals
613 * buildbot/scripts/runner.py: add 'buildbot restart' command
614 (stop): don't sys.exit() out of here, otherwise restart can't work
615 * docs/buildbot.texinfo (Shutdown): document it
617 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
618 * buildbot/status/html.py (Waterfall.__init__): same
619 * buildbot/process/builder.py (Builder.startBuild): same
620 * buildbot/process/base.py (BuildRequest): same
621 * buildbot/sourcestamp.py (SourceStamp): same
622 * buildbot/scheduler.py (Nightly): same
624 * buildbot/__init__.py (version): bump to 0.7.2+ while between
626 * docs/buildbot.texinfo: same
628 2006-02-17 Brian Warner <warner@lothar.com>
630 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
631 * docs/buildbot.texinfo: set version number to match
632 * NEWS: update for 0.7.2
634 2006-02-16 Brian Warner <warner@lothar.com>
636 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
638 2006-02-09 Brian Warner <warner@lothar.com>
640 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
641 add text to explain per-build branch parameters
642 * NEWS: mention --umask
644 2006-02-08 Brian Warner <warner@lothar.com>
646 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
648 (SlaveOptions.optParameters): add --umask, to make it possible to
649 make buildslave-generated files (including build products) be
652 * buildbot/slave/bot.py (BuildSlave.startService): same
654 2006-01-23 Brian Warner <warner@lothar.com>
656 * buildbot/status/builder.py: urllib.quote() all URLs that include
657 Builder names, so that builders can include characters like '/'
658 and ' ' without completely breaking the resulting HTML. Thanks to
659 Kevin Turner for the patch.
660 * buildbot/status/html.py: same
661 * buildbot/test/test_web.py (GetURL.testBuild): match changes
663 * NEWS: update in preparation for upcoming release
665 2006-01-18 Brian Warner <warner@lothar.com>
667 * docs/examples/twisted_master.cfg: update to match the Twisted
668 buildbot: remove python2.2, switch to exarkun's buildslaves,
669 disable the .deb builder until we figure out how to build twisted
670 .debs from SVN, add some ktrace debugging to the OS-X build
671 process and remove the qt build, remove threadless builders,
672 change freebsd builder to use landonf's buildslave.
674 2006-01-12 Brian Warner <warner@lothar.com>
676 * buildbot/master.py (Manhole.__init__): let port= be a strports
677 specification string, but handle a regular int for backwards
678 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
679 used in master.cfg to limit connections to just the local host.
680 (BuildMaster.loadConfig): same for c['slavePortnum']
681 * buildbot/scheduler.py (Try_Userpass.__init__): same
682 * buildbot/status/client.py (PBListener.__init__): same
683 * buildbot/status/html.py (Waterfall.__init__): same, for both
684 http_port and distrib_port. Include backwards-compatibility checks
685 so distrib_port can be a filename string and still mean unix:/foo
686 * docs/buildbot.texinfo (Setting the slaveport): document it
687 (Debug options): same
688 (HTML Waterfall): same
691 * buildbot/test/test_config.py (ConfigTest): test it
693 * buildbot/master.py (BuildMaster.loadConfig): wait for the
694 slaveport's disownServiceParent deferred to fire before opening
695 the new one. Fixes an annoying bug in the unit tests.
697 2006-01-03 Brian Warner <warner@lothar.com>
699 * buildbot/master.py (BuildMaster): remove the .schedulers
700 attribute, replacing it with an allSchedulers() method that looks
701 for all IService children that implement IScheduler. Having only
702 one parent/child relationship means fewer opportunities for bugs.
703 (BuildMaster.allSchedulers): new method
704 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
705 also fix ugly bug that caused any config-file reload to
706 half-forget about the earlier Schedulers, causing an exception
707 when a Change arrived and was handed to a half-connected
708 Scheduler. The exception was in scheduler.py line 54ish:
709 self.parent.submitBuildSet(bs)
710 exceptions.AttributeError: 'NoneType' object has no attribute
712 (BuildMaster.addChange): update to use allSchedulers()
714 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
715 to work properly with twisted-1.3.0, where you must explicitly
716 include the __implements__ from parent classes
717 (BaseScheduler.__repr__): make it easier to distinguish distinct
719 (BaseUpstreamScheduler.__implements__): same
721 * buildbot/status/builder.py (Status.getSchedulers): update to
723 * buildbot/test/test_run.py (Run.testMaster): same
724 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
725 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
726 make sure Scheduler instances are left alone when an identical
727 config file is reloaded
728 (ConfigElements.testSchedulers): make sure Schedulers are properly
731 * Makefile (TRIALARGS): my local default Twisted version is now
732 2.1.0, update the trial arguments accordingly
734 2005-12-22 Brian Warner <warner@lothar.com>
736 * docs/examples/twisted_master.cfg: merge changes from pyr: add
739 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
740 addChange in the parent class, although I suspect this should be
741 fixed better in the future.
743 2005-11-26 Brian Warner <warner@lothar.com>
745 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
746 explode when branch==None, thanks to Kevin Turner for the catch
747 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
750 * buildbot/__init__.py (version): bump to 0.7.1+ while between
752 * docs/buildbot.texinfo: same
754 2005-11-26 Brian Warner <warner@lothar.com>
756 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
757 * docs/buildbot.texinfo: set version number to match
759 2005-11-26 Brian Warner <warner@lothar.com>
761 * NEWS: update for 0.7.1
763 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
764 sure that unsubscribe works even if we never sent an ETA update.
765 Also, don't explode on duplicate unsubscribe.
766 (BuildStepStatus.addLog): make the convenience "return self"-added
767 watcher automatically unsubscribe when the Step finishes.
768 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
769 (BuildStatus.stepStarted): same auto-unsubscribe
770 (BuilderStatus.buildStarted): same auto-unsubscribe
772 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
774 (IStatusReceiver.stepStarted): same
775 (IStatusReceiver.logStarted): same
777 * buildbot/test/test_run.py (Status): move the Status test..
778 * buildbot/test/test_status.py (Subscription): .. to here
780 2005-11-25 Brian Warner <warner@lothar.com>
784 * buildbot/locks.py: fix the problem in which loading a master.cfg
785 file that changes some Builders (but not all of them) can result
786 in having multiple copies of the same Lock. Now, the real Locks
787 are kept in a table inside the BotMaster, and the Builders/Steps
788 use "LockIDs", which are still instances of MasterLock and
789 SlaveLock. The real Locks are instances of the new RealMasterLock
790 and RealSlaveLock classes.
791 * buildbot/master.py (BotMaster.getLockByID): new method to
792 convert LockIDs into real Locks.
793 * buildbot/process/base.py (Build.startBuild): convert LockIDs
794 into real Locks before building
795 * buildbot/process/step.py (BuildStep.startStep): same
796 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
797 exercises the problem
800 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
801 what Schedulers are available
803 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
804 work by Dobes Vandermeer and hacked mercilessly by me. This offers
805 'cron'-style build scheduling at certain times of day, week,
807 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
809 * buildbot/scheduler.py (Scheduler): change fileIsImportant
810 handling: treat self.fileIsImportant more as an attribute that
811 contains a callable than as a method. If the attribute is None,
812 don't call it and assume all filenames are important. It is still
813 possible to provide a fileIsImportant method in a subclass,
815 (AnyBranchScheduler): handle fileIsImportant=None, previously it
817 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
818 test using AnyBranchScheduler with fileIsImportant=None
820 2005-11-24 Brian Warner <warner@lothar.com>
822 * buildbot/test/test_config.py (StartService): don't claim a fixed
823 port number, instead set slavePort=0 on the first pass, figure out
824 what port was allocated, then switch to a config file that uses
827 * buildbot/master.py (BuildMaster.loadConfig): close the old
828 slaveport before opening the new one, because unit tests might
829 replace slavePort=0 with the same allocated portnumber, and if we
830 don't wait for the old port to close first, we get a "port already
831 in use" error. There is a tiny race condition here, but the only
832 threat is from other programs that bind (statically) to the same
833 port number we happened to be allocated, and only if those
834 programs use SO_REUSEADDR, and only if they get control in between
837 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
839 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
840 deleted ChangeSources before adding any new ones
841 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
842 compare_attrs, to make sure that a config-file reload does not
843 unnecessarily replace an unmodified ChangeSource instance
844 * buildbot/test/test_config.py (ConfigTest.testSources): update
846 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
847 mean "don't build anything", and add a warning if it gets used
848 because it isn't actually useful.
850 * contrib/svn_buildbot.py: update example usage to match the port
851 number that gets used by the PBChangeSource
852 * buildbot/scripts/sample.cfg: add example of PBChangeSource
854 2005-11-22 Brian Warner <warner@lothar.com>
856 * NEWS: start collecting items for next release
858 * buildbot/process/step.py (SVN.computeSourceRevision): assume
859 revisions are strings
860 (P4Sync.computeSourceRevision): same
862 * buildbot/status/html.py (StatusResourceBuild.body): add a link
863 to the Buildbot's overall status page
864 (StatusResourceBuilder.body): same
866 2005-11-15 Brian Warner <warner@lothar.com>
868 * buildbot/master.py (BuildMaster.loadConfig): serialize the
869 config-file loading, specifically to make sure old StatusTargets
870 are finished shutting down before new ones start up (thus
871 resolving a bug in which changing the Waterfall object would fail
872 because both new and old instances were claiming the same
873 listening port). Also load new Schedulers after all the new
874 Builders are set up, in case they fire off a new build right away.
875 * buildbot/test/test_config.py (StartService): test it
877 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
878 the branch name to the mail body
880 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
881 Without it, a config-file reload fails to update an existing
883 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
884 username/passwd to compare_attrs, for the same reason
885 * buildbot/status/html.py (Waterfall): add favicon to
886 compare_attrs, same reason
888 2005-11-05 Brian Warner <warner@lothar.com>
890 * buildbot/scripts/tryclient.py (createJobfile): stringify the
891 baserev before stuffing it in the jobfile. This resolves problems
892 under SVN (and probably Arch) where revisions are expressed as
893 numbers. I'm inclined to use string-based revisions everywhere in
894 the future, but this fix should be safe for now. Thanks to Steven
895 Walter for the patch.
897 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
898 binary mode when opening pickle files, to make windows work
899 better. Thanks to Dobes Vandermeer for the catch.
900 * buildbot/status/builder.py (BuildStatus.saveYourself): same
901 (BuilderStatus.getBuildByNumber): same
902 (Status.builderAdded): same
903 * buildbot/master.py (BuildMaster.loadChanges): same
905 * buildbot/util.py (Swappable): delete unused leftover code
907 * buildbot/process/step.py (SVN): when building on a non-default
908 branch, add the word "[branch]" to the VC step's description, so
909 it is obvious that we're not building the usual stuff. Likewise,
910 when we are building a specific revision, add the text "rNNN" to
911 indicate what that revision number is. Thanks to Brad Hards and
912 Nathaniel Smith for the suggestion.
913 (Darcs.startVC): same
915 (Bazaar.startVC): same
917 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
918 typo, caught by Mark Dillavou, closes SF#1216636.
920 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
921 about a test to add some day
923 * docs/examples/twisted_master.cfg: update: bot1 can now handle
924 the 'full-2.3' build, and the 'reactors' build is now run under
925 python-2.4 because the buildslave no longer has gtk/etc bindings
926 for earlier versions.
928 2005-11-03 Brian Warner <warner@lothar.com>
930 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
931 method, takes an IBuildStatus and rebuilds it. It might make more
932 sense to add this to IBuildControl instead, but that instance goes
933 away completely once the build has finished, and resubmitting
934 builds can take place weeks later.
935 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
936 * buildbot/status/html.py (StatusResourceBuild): also stash an
937 IBuilderControl so we can use resubmitBuild.
938 (StatusResourceBuild.body): render "resubmit" button if we can.
939 Also add hrefs for each BuildStep
940 (StatusResourceBuild.rebuild): add action for "resubmit" button
941 (StatusResourceBuilder.getChild): give it an IBuilderControl
943 * buildbot/status/builder.py (Status.getURLForThing): change the
944 URL for BuildSteps to have a "step-" prefix, so the magic URLs
945 that live as targets of buttons like "stop" and "rebuild" can't
947 * buildbot/status/builder.py (Status.getURLForThing): same
948 * buildbot/status/html.py (StatusResourceBuild.getChild): same
949 (StepBox.getBox): same
950 * buildbot/test/test_web.py (GetURL): same
953 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
954 exclusivity checks after Source.__init__ upcall, so misspelled
955 arguments will be reported more usefully
956 (Darcs.__init__): same
958 2005-10-29 Brian Warner <warner@lothar.com>
960 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
961 builder. Move the Try scheduler off to a separate port.
963 2005-10-27 Brian Warner <warner@lothar.com>
965 * buildbot/clients/gtkPanes.py
966 (TwoRowClient.remote_builderRemoved): disappearing Builders used
967 to cause the app to crash, now they don't.
969 * buildbot/clients/debug.py: display the buildmaster's location
970 in the window's title bar
972 2005-10-26 Brian Warner <warner@lothar.com>
974 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
975 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
976 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
978 * buildbot/status/html.py (td): put a single non-breaking space
979 inside otherwise empty <td> elements, as a workaround for buggy
980 browsers which would optimize them away (along with any associated
981 styles, like the kind that create the waterfall grid borders).
982 Patch from Frerich Raabe.
984 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
985 argv-list as an argument, defaulting to ["-to"], which is
986 appropriate for the Trial that comes with Twisted-2.1.0 and
987 earlier. The Trial in current Twisted SVN wants
988 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
989 defaults to an empty list.
990 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
991 match it, now that trialMode= is a list instead of a single string
993 * buildbot/__init__.py (version): bump to 0.7.0+ while between
995 * docs/buildbot.texinfo: same
997 2005-10-24 Brian Warner <warner@lothar.com>
999 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1000 * docs/buildbot.texinfo: set version number to match
1002 2005-10-24 Brian Warner <warner@lothar.com>
1004 * README: update for 0.7.0
1006 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1008 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1009 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1010 send the branch= argument unless the user really provided one, to
1011 retain compatibility with older buildmasters that don't accept
1013 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1016 * docs/buildbot.texinfo: update lots of stuff
1018 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1019 to the 'buildbot sendchange' command
1020 * buildbot/clients/sendchange.py (Sender.send): same
1021 * buildbot/changes/pb.py (ChangePerspective): same
1022 * buildbot/test/test_changes.py (Sender.testSender): test it
1024 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1025 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1026 for consistency with other BuildStep arguments that use camelCase.
1027 Well, at least more of them use camelCase (like flunkOnWarnings)
1028 than don't.. I wish I'd picked one style and stuck with it
1029 earlier. Annoying, but it's best done before the release, since
1030 these arguments didn't exist at all in 0.6.6 .
1032 * buildbot/test/test_vc.py (SVN.testCheckout): same
1033 (Darcs.testPatch): same
1034 * docs/buildbot.texinfo (SVN): document the change
1035 (Darcs): same, add some build-on-branch docs
1036 * docs/examples/twisted_master.cfg: match change
1038 * buildbot/process/step.py (BuildStep): rename
1039 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1040 how it is normally used.
1041 * buildbot/test/test_steps.py (Version.checkCompare): same
1043 * buildbot/process/step.py (CVS.startVC): refuse to build
1044 update/copy -style builds on a non-default branch with an old
1045 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1046 concern is that it will do a VC 'update' in an existing tree when
1047 it is supposed to be switching branches (and therefore clobbering
1048 the tree to do a full checkout), thus building the wrong source.
1049 This used to be a warning, but I think the confusion it is likely
1050 to cause warrants making it an error.
1051 (SVN.startVC): same, also make mode=export on old slaves an error
1052 (Darcs.startVC): same
1053 (Git.startVC): improve error message for non-Git-enabled slaves
1054 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1055 specific revision is built on a slave that doesn't pay attention
1056 to args['revision'], because for slowly-changing trees it will
1057 probably do the right thing, and because we have no way to tell
1058 whether we're asking it to build the most recent version or not.
1059 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1061 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1062 that 'master' is in host:portnum format, to catch errors sooner
1064 2005-10-23 Brian Warner <warner@lothar.com>
1066 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1067 when creating the list of warning messages, include the line
1068 immediately after each WARNING: line, since that's usually where
1069 the file and line number wind up.
1071 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1076 2005-10-22 Brian Warner <warner@lothar.com>
1078 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1079 patch from Brad Hards
1080 * buildbot/status/classic.css: same
1081 * buildbot/test/test_web.py (Waterfall): match changes
1083 * buildbot/test/test_steps.py (BuildStep.setUp): set
1084 nextBuildNumber so the test passes
1085 * buildbot/test/test_status.py (MyBuilder): same
1087 * buildbot/status/html.py (StatusResourceBuild.body): revision
1088 might be numeric, so stringify it before html-escapifying it
1089 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1090 timer for the upcoming build
1091 * buildbot/status/classic.css: add background-color attributes for
1092 offline/waiting/building classes
1094 * buildbot/status/builder.py (BuildStatus): derive from
1095 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1096 the default (i.e. unknown) .slavename to "???" instead of None,
1097 since even unknown slavenames need to be printed eventually.
1098 (BuilderStatus): also derive from styles.Versioned . More
1099 importantly, determine .nextBuildNumber at creation/unpickling
1100 time by scanning the directory of saved BuildStatus instances and
1101 choosing one larger than the highest-numbered one found. This
1102 should fix the problem where random errors during upgrades cause
1103 the buildbot to forget about earlier builds. .nextBuildNumber is
1104 no longer stored in the pickle.
1105 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1106 at least log the error. Also call Builder.determineNextBuildNumber
1107 once the basedir is set.
1109 * buildbot/master.py (BuildMaster.loadChanges): do
1110 styles.doUpgrade afterwards, in case I decide to make Changes
1111 derived from styles.Versioned some day and forget to make this
1115 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1116 when running under older pythons (<2.3) in which the shlex module
1117 doesn't have a 'split' function.
1119 * buildbot/process/step.py (ShellCommand.start): make
1120 errorMessages= be a list of strings to stuff in the log before the
1121 command actually starts. This makes it easier to flag multiple
1122 warning messages, e.g. when the Source steps have to deal with an
1124 (CVS.startVC): handle slaves that don't handle multiple branches
1125 by switching into 'clobber' mode
1126 (SVN.startVC): same. Also reject branches without base_url
1127 (Darcs.startVC): same. Also reject revision= in older slaves
1128 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1129 (Bazaar.startVC): same, and test for baz separately than for arch
1131 * buildbot/slave/commands.py (cvs_ver): document new features
1133 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1134 (BuildStep.slaveVersionNewEnough): more useful utility method
1135 * buildbot/test/test_steps.py (Version): start testing it
1137 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1138 the 'force' command requires python2.3, for the shlex.split method
1140 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1141 since we don't use it anymore. The Twisted buildbot uses a
1144 2005-10-21 Brian Warner <warner@lothar.com>
1146 * buildbot/process/process_twisted.py: rework all BuildFactory
1147 classes to take a 'source' step as an argument, instead of
1148 building up the SVN instance in the factory.
1149 * docs/examples/twisted_master.cfg: enable build-on-branch by
1150 providing a base_url and default_branch
1152 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1153 control over --branch and --revision, not that they are always
1155 * buildbot/status/html.py (StatusResourceBuilder.force): same
1156 (StatusResourceBuild.body): display SourceStamp components
1158 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1159 IRC 'force' command, so it can be shared with an eventual
1160 command-line-tool 'buildbot force' mode.
1161 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1163 2005-10-20 Brian Warner <warner@lothar.com>
1165 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1167 * docs/examples/twisted_master.cfg: update to use Schedulers
1169 * buildbot/scripts/sample.cfg: update with Schedulers
1171 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1172 method specifically for use by HTML "force build" button and the
1173 IRC "force" command. Raises an immediate error if there are no
1175 (IBuilderControl.requestBuild): make this just submit a build, not
1176 try to check for existing slaves or set up any when-finished
1177 Deferreds or anything.
1178 * buildbot/process/builder.py (BuilderControl): same
1179 * buildbot/status/html.py (StatusResourceBuilder.force): same
1180 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1181 * buildbot/test/test_slaves.py: same
1182 * buildbot/test/test_web.py: same
1184 2005-10-19 Brian Warner <warner@lothar.com>
1186 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1187 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1189 2005-10-18 Brian Warner <warner@lothar.com>
1191 * buildbot/status/html.py: provide 'status' argument to most
1192 StatusResourceFOO objects
1193 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1194 and Logfiles" section to make the Build page into a more-or-less
1195 comprehensive source of status information about the build
1197 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1198 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1200 2005-10-17 Brian Warner <warner@lothar.com>
1202 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1203 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1204 out what to do about other projects: the correct options for
1205 recent Twisteds will not work for older ones.
1207 2005-10-15 Brian Warner <warner@lothar.com>
1209 * buildbot/status/builder.py (Status.getURLForThing): add method
1210 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1211 use this in email/IRC status clients to make them more useful, by
1212 providing the end user with hints on where to learn more about the
1213 object being reported on.
1214 * buildbot/test/test_web.py (GetURL): tests for it
1216 2005-10-14 Brian Warner <warner@lothar.com>
1218 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1219 fix bug resulting from deferredResult changes
1221 2005-10-13 Brian Warner <warner@lothar.com>
1223 * buildbot/test/test_changes.py: remove use of deferredResult
1224 * buildbot/test/test_config.py: same
1225 * buildbot/test/test_control.py: same
1226 * buildbot/test/test_status.py: same
1227 * buildbot/test/test_vc.py: this is the only remaining use, since
1228 it gets used at module level. This needs to be replaced by some
1229 sort of class-level run-once routine.
1231 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1233 * lots: implement multiple slaves per Builder, which means multiple
1234 current builds per Builder. Some highlights:
1235 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1236 of (state,currentBuilds) instead of (state,currentBuild)
1237 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1238 (IBuildStatus.getSlavename): new method, so you can tell which
1239 slave got used. This only gets set when the build completes.
1240 (IBuildRequestStatus.getBuilds): new method
1242 * buildbot/process/builder.py (SlaveBuilder): add a .state
1243 attribute to track things like ATTACHING and IDLE and BUILDING,
1245 (Builder): .. the .slaves attribute here, which has been turned
1246 into a simple list of available slaves. Added a separate
1247 attaching_slaves list to track ones that are not yet ready for
1249 (Builder.fireTestEvent): put off the test-event callback for a
1250 reactor turn, to make tests a bit more consistent.
1251 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1252 ping fails due to an exception. This needs work, I'm worried that
1253 a code error could lead to a constantly re-connecting slave.
1254 Especially since I'm trying to move to a distinct remote_ping
1255 method, separate from the remote_print that we currently use.
1256 (BuilderControl.requestBuild): return a convenience Deferred that
1257 provides an IBuildStatus when the build finishes.
1258 (BuilderControl.ping): ping all connected slaves, only return True
1259 if they all respond.
1261 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1262 reconnect when we shut down.
1264 * buildbot/status/builder.py: implement new methods, convert
1265 one-build-at-a-time methods to handle multiple builds
1266 * buildbot/status/*.py: do the same in all default status targets
1267 * buildbot/status/html.py: report the build's slavename in the
1268 per-Build page, report all buildslaves on the per-Builder page
1270 * buildbot/test/test_run.py: update/create tests
1271 * buildbot/test/test_slaves.py: same
1272 * buildbot/test/test_scheduler.py: remove stale test
1274 * docs/buildbot.texinfo: document the new builder-specification
1275 'slavenames' parameter
1277 2005-10-12 Brian Warner <warner@lothar.com>
1279 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1280 report failure correctly, causing Dependent builds to run when
1281 they shouldn't have.
1282 * buildbot/status/builder.py (BuildSetStatus): same
1283 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1284 (Set.testSuccess): test the both-pass case too
1285 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1286 fix this test: it was ending too early, masking the failure before
1287 (Logger): specialized StatusReceiver to make sure the dependent
1288 builds aren't even started, much less completed.
1290 2005-10-07 Brian Warner <warner@lothar.com>
1292 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1293 bot.SlaveBuilder being disowned in the middle of a build
1295 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1296 this inherit from StatusReceiver. Also upcall in __init__. This
1297 fixes the embarrasing crash when the new buildSetSubmitted method
1298 is invoked and Waterfall/etc don't implement their own.
1299 * buildbot/test/test_run.py: add a TODO note about a test to catch
1300 just this sort of thing.
1302 * buildbot/process/builder.py (Builder.attached): remove the
1303 already-attached warning, this situation is normal. Add some
1304 comments explaining it.
1306 2005-10-02 Brian Warner <warner@lothar.com>
1308 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1309 OverflowError when setting up dnotify, because some 64-bit systems
1310 have problems with signed-vs-unsigned constants and trip up on the
1311 DN_MULTISHOT flag. Patch from Brad Hards.
1313 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1315 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1316 progressMetrics, description, descriptionDone to the 'parms' list,
1317 and make use the 'parms' list from the implementation class
1318 instead of only BuildStep to initialize the parameters. This
1319 allows buildbot.process.factory.s() to initialize all the parms,
1320 not just those defined in directly by BuildStep.
1322 2005-09-03 Brian Warner <warner@lothar.com>
1324 * NEWS: start adding items for the next release
1326 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1327 python2.2 tests, change 'Quick' builder to only use python2.3
1329 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1331 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1332 the "Ping Builder" button if the build control is available; the
1333 user sees an exception otherwise
1335 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1337 2005-09-01 Brian Warner <warner@lothar.com>
1339 * buildbot/interfaces.py (IBuilderStatus.getState): update
1340 signature, point out that 'build' can be None
1341 (IBuildStatus.getETA): point out ETA can be none
1343 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1345 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1347 2005-08-31 Brian Warner <warner@lothar.com>
1349 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1350 update to match correct signature: removed 'eta' argument
1351 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1353 2005-08-30 Brian Warner <warner@lothar.com>
1355 * buildbot/status/builder.py (LogFile): remove the assertion that
1356 blows up when you try to overwrite an existing logfile, instead
1357 just emit a warning. This case gets hit when the buildmaster is
1358 killed and doesn't get a chance to write out the serialized
1359 BuilderStatus object, so the .nextBuildNumber attribute gets out
1362 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1363 the 'buildbot sendchange' arguments, for the Darcs context file
1364 * docs/buildbot.texinfo (sendchange): document it
1366 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1367 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1368 (IStatus.getSchedulers): new method
1369 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1370 (Status.getSchedulers): implement
1371 * buildbot/process/builder.py (Builder): maintain
1372 BuilderStatus.pendingBuilds
1373 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1374 (TryBase.addChange): Try schedulers should ignore Changes
1376 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1377 for 'try' on CVS/SVN
1378 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1380 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1381 report status properly.
1382 (Try.createJob): implement unique buildset IDs
1384 * buildbot/status/client.py (StatusClientPerspective): add a
1385 perspective_getBuildSets method for the benefit of jobdir-style
1387 * docs/buildbot.texinfo (try): more docs
1388 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1391 2005-08-18 Brian Warner <warner@lothar.com>
1393 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1394 actually work. It's functional but still kind of clunky. Also, it
1395 only works with the pb-style.. needs to be made to work with the
1398 * buildbot/status/client.py (RemoteBuildSet): new class
1399 (RemoteBuildRequest): same
1400 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1401 object, not the internal BuildStatus object.
1402 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1403 outside of the usual buildStarted() return value.
1404 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1406 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1407 (Try_Userpass_Perspective.perspective_try): return a remotely
1408 usable BuildSetStatus object
1410 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1411 isStarted()/waitUntilStarted()
1413 2005-08-16 Brian Warner <warner@lothar.com>
1415 * buildbot/status/builder.py: implement IBuildSetStatus and
1416 IBuildRequestStatus, wire them into place.
1417 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1418 methods into the BuildSetStatus object.
1419 * buildbot/interfaces.py: same
1420 (IStatus.getBuildSets): new method to get pending BuildSets
1421 (IStatusReceiver.buildsetSubmitted): new method which hears about
1423 * buildbot/master.py (BuildMaster.submitBuildSet): same
1424 * buildbot/process/base.py (BuildRequest): same, replace
1425 waitUntilStarted with subscribe/unsubscribe
1426 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1427 subscribe instead of waitUntilStarted
1428 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1430 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1432 * buildbot/test/test_buildreq.py: update for new code
1433 * buildbot/test/test_control.py (Force.testRequest): same
1436 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1437 for Darcs to not use the tempfile module, so it works under
1438 python-2.2 too. We really didn't need the full cleverness of that
1439 module, since the slave has exclusive control of its own builddir.
1441 2005-08-15 Brian Warner <warner@lothar.com>
1443 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1444 for CVS trees. It doesn't work for non-trunk branches,
1446 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1449 * Makefile: make it easier to test against python2.2
1451 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1452 tearDown2, so things like Arch can unregister archives as they're
1453 shutting down. The previous subclass-override-tearDown technique
1454 resulted in a nested maybeWait() and test failures under
1457 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1458 where we can (Arch), add a branch= argument to set the branch used
1460 (BazExtractor): extract the branch too
1461 (TlaExtractor): same
1462 * buildbot/scripts/runner.py (TryOptions): add --branch
1463 * docs/buildbot.texinfo (try): document --branch/try_branch
1465 * buildbot/slave/commands.py (Darcs): implement get-revision for
1466 Darcs, so that 'try' will work. This requires the tempfile module
1469 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1470 of revisions, branches, and 'try' in the process.
1472 2005-08-11 Brian Warner <warner@lothar.com>
1474 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1475 this, it got broken at some point in the last few releases
1476 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1477 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1478 specifically the removal of ETA information from the tuple
1480 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1483 * docs/buildbot.texinfo (try): document both --builder and
1484 'try_builders' in .buildbot/options
1485 * buildbot/scripts/runner.py (TryOptions): add --builder,
1486 accumulate the values into opts['builders']
1487 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1488 * buildbot/test/test_runner.py (Try): add some quick tests to make
1489 sure 'buildbot try --options' and .buildbot/options get parsed
1490 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1491 use --builder control
1493 * docs/buildbot.texinfo (try): add --port argument to PB style
1495 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1496 actual SourceStamp. Still need to extract a branch name, somehow.
1497 (Try): finish implementing the try client side, still need a UI
1498 for specifying which builders to use
1499 (Try.getopt): factor our options/config-file reading
1500 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1502 * buildbot/test/test_vc.py: match SourceStampExtractor change
1504 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1505 causes the twisted log to be sent to stderr
1507 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1509 2005-08-10 Brian Warner <warner@lothar.com>
1511 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1512 style is 90% done, still missing status reporting or waiting for
1513 the buildsets to finish, and it is completely untested.
1515 * buildbot/trybuild.py: delete file, move contents to ..
1516 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1517 * buildbot/test/test_vc.py: match the move
1519 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1520 of the TryScheduler, no buildsetID or status-tracking support yet
1521 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1523 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1524 possible to set the basedir after __init__ time, so it is easier
1525 to use as a Service-child of the BuildMaster instance
1527 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1528 that delivers messages to its Service parent instead of requiring
1529 a subclass to be useful. This turns out to be much easier to build
1532 * buildbot/scripts/tryclient.py (createJob): utility code to
1533 create jobfiles, will eventually be used by 'buildbot try'
1535 2005-08-08 Brian Warner <warner@lothar.com>
1537 * docs/buildbot.texinfo (try): add docs on the
1538 as-yet-unimplemented Try scheduler
1540 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1541 * buildbot/test/test_scheduler.py: .. here
1542 (Scheduling.testTryJobdir): add placeholder test for 'try'
1544 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1545 addEntry merging (>=chunkSize) behavior
1546 (Log.testConsumer): update to handle new callLater(0) behavior
1548 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1549 both the MAX_LENGTH bugfix and the resumeProducing hang.
1551 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1552 put off the actual resumeProducing for a moment with
1553 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1554 causes large logfiles to hang midway through.
1556 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1557 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1558 and to improve memory usage when streaming the file out to a web
1560 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1561 make this work cleanly
1563 2005-08-03 Brian Warner <warner@lothar.com>
1565 * buildbot/trybuild.py: new file for 'try' utilities
1566 (getSourceStamp): run in a tree, find out the baserev+patch
1567 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1568 implemented for SVN and Darcs, still working on Arch. I don't know
1569 how to make CVS work yet.
1571 * docs/buildbot.texinfo: document the 'buildbot' command-line
1572 tool, including the not-yet-implemented 'try' feature, and the
1573 in-flux .buildbot/ options directory.
1575 2005-07-20 Brian Warner <warner@lothar.com>
1577 * buildbot/locks.py: added temporary id() numbers to Lock
1578 descriptions, to track down a not-really-sharing-the-Lock bug
1580 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1582 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1583 needed for python2.2 compatibility
1584 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1585 are from the __future__
1587 2005-07-19 Brian Warner <warner@lothar.com>
1589 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1590 message when schedulers use unknown builders
1592 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1593 SlaveLock('name') and MasterLock('name') are distinct
1595 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1596 c['schedulers'] in such a way that we can actually accept
1598 * buildbot/test/test_config.py: check it
1600 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1601 utility method to *all* the Schedulers
1602 (Periodic.listBuilderNames): same
1604 * docs/buildbot.texinfo (Interlocks): update chapter to match
1607 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1608 to make sure that c['sources'], c['schedulers'], and c['status']
1609 are all lists of the appropriate objects, and that the Schedulers
1610 all point to real Builders
1611 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1612 'listBuilderNames' utility method to support this
1613 * buildbot/scheduler.py: implement the utility method
1614 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1616 * docs/buildbot.texinfo: add some @cindex entries
1618 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1619 if it wasn't already set: most tla commands will fail unless one
1621 (Arch.createRepository): and disable bazaar's revision cache, since
1622 they cause test failures (the multiple repositories we create all
1623 interfere with each other through the cache)
1625 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1626 bring it properly up to date with twisted-2.0 test guidelines
1628 * buildbot/master.py (BuildMaster): remove references to old
1629 'interlock' module, this caused a bunch of post-merge test
1631 * buildbot/test/test_config.py: same
1632 * buildbot/process/base.py (Build): same
1634 * buildbot/test/test_slaves.py: stubs for new test case
1636 * buildbot/scheduler.py: add test-case-name tag
1637 * buildbot/test/test_buildreq.py: same
1639 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1640 unnecessary init code
1641 (Bot.remote_setBuilderList): match it
1643 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1645 * buildbot/changes/mail.py (parseSyncmail): update comment
1647 * buildbot/test/test_slavecommand.py: disable Shell tests on
1648 platforms that don't suport IReactorProcess
1650 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1651 all places where we open logfiles. It causes OS-X to open the file
1652 in some weird mode that that prevents us from mixing reads and
1653 writes to the same filehandle, which we depend upon to implement
1654 _generateChunks properly. This change doesn't appear to break
1655 win32, on which "b" and "t" are treated differently but a missing
1656 flag seems to be interpreted as "t".
1658 2005-07-18 Brian Warner <warner@lothar.com>
1660 * buildbot/slave/commands.py (ShellCommand): overhaul
1661 error-handling code, to try and make timeout/interrupt work
1662 properly, and make win32 happier
1663 * buildbot/test/test_slavecommand.py: clean up, stop using
1664 reactor.iterate, add tests for timeout and interrupt
1665 * buildbot/test/sleep.py: utility for a new timeout test
1667 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1668 code from the local-usebranches branch
1670 2005-07-17 Brian Warner <warner@lothar.com>
1672 * buildbot/process/process_twisted.py
1673 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1674 minutes, to match the other twisted BuildFactories, and don't
1675 excuse failures in c/qt/win32 reactors any more.
1677 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1678 'freebsd' builders, since the buildslaves have been unavailable
1681 2005-07-13 Brian Warner <warner@lothar.com>
1683 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1684 build-on-branch feature
1686 * buildbot/process/step.py (Darcs.__init__): add base_url and
1687 default_branch arguments, just like SVN
1688 (Arch.__init__): note that the version= argument is really the
1691 * buildbot/slave/commands.py (SourceBase): keep track of the
1692 repository+branch that was used for the last checkout in
1693 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1694 match, we clobber the directory and perform a fresh checkout
1695 rather than trying to do an in-place update. This should protect
1696 us against trying to get to branch B by doing an update in a tree
1697 obtained from branch A.
1698 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1699 (SVN.setup): same, just the svnurl
1700 (Darcs.setup): same, just the repourl
1701 (Arch.setup): same, arch coordinates (url), version, and
1702 buildconfig. Also pull the buildconfig from the args dictionary,
1703 which we weren't doing before, so the build-config was effectively
1705 (Arch.sourcedirIsUpdateable): don't try to update when we're
1706 moving to a specific revision: arch can't go backwards, so it is
1707 safer to just clobber the tree and checkout a new one at the
1709 (Bazaar.setup): same sourcedata as Arch
1711 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1712 use maybeWait, to work with twisted-1.3.0 and twcompat
1713 (Dependencies.testRun_Pass): same
1715 * buildbot/test/test_vc.py: rearrange, cleanup
1717 * buildbot/twcompat.py: add defer.waitForDeferred and
1718 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1719 can work under twisted-1.3.0 .
1721 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1722 now created at setUp time. This increases the runtime of the test
1723 suite considerably (from 91 seconds to 151), but it removes the
1724 need for an offline tarball, which should solve a problem I've
1725 seen where the test host has a different version of svn than the
1726 tarball build host. The new code also validates that mode=update
1727 really picks up recent commits. This approach will also make it
1728 easier to test out branches, because the code which creates the VC
1729 branches is next to the code which uses them. It will also make it
1730 possible to test some change-notification hooks, by actually
1731 performing a VC commit and watching to see the ChangeSource get
1734 2005-07-12 Brian Warner <warner@lothar.com>
1736 * docs/buildbot.texinfo (SVN): add branches example
1737 * docs/Makefile (buildbot.ps): add target for postscript manual
1739 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1740 * buildbot/test/test_locks.py: same
1742 * buildbot/process/step.py (Darcs): comment about default branches
1744 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1745 c['interlocks'] in the config file, complain if it is present.
1746 Scan all locks in c['builders'] to make sure the Locks they use
1748 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1749 add some tests to check for non-uniquely-named Locks
1750 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1751 since the unique-Lock validation code requires it now
1753 * buildbot/locks.py: fix test-case-name
1755 * buildbot/interlock.py: remove old file
1757 2005-07-11 Brian Warner <warner@lothar.com>
1759 * buildbot/test/test_interlock.py: rename to..
1760 * buildbot/test/test_locks.py: .. something shorter
1762 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1763 versions (after 2.0.1) changed internet.TCPClient to shut down the
1764 connection in stopService. Change the code to handle this
1767 * buildbot/process/base.py (Build): handle whole-Build locks
1768 * buildbot/process/builder.py (Builder.compareToSetup): same
1769 * buildbot/test/test_interlock.py: make tests work
1771 * buildbot/process/step.py (BuildStep.startStep): complain if a
1772 Step tries to claim a lock that's owned by its own Build
1773 (BuildStep.releaseLocks): typo
1775 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1776 file reloads don't replace unchanged Builders
1778 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1779 rewrite to cover new Locks instead of old c['interlocks']
1780 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1784 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1785 start the master and connect the buildslave
1787 * buildbot/process/step.py (FailingDummy.done): finish with a
1788 FAILURE status rather than raising an exception
1790 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1791 stringify a BuildRequest.reason that is None
1793 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1795 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1796 allow scheduler.Dependent to work
1797 * buildbot/buildset.py (BuildSet): set .reason and .results
1799 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1800 slaves, to make the test stop hanging. It still fails, of course,
1801 because I haven't even started to implement Locks.
1803 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1805 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1806 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1807 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1808 (Dependent): new class for downstream build dependencies
1809 * buildbot/test/test_dependencies.py: tests (still failing)
1811 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1813 2005-07-07 Brian Warner <warner@lothar.com>
1815 * buildbot/test/runutils.py (RunMixin): factored this class out..
1816 * buildbot/test/test_run.py: .. from here
1817 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1818 added new buildbot.locks tests (which all hang right now)
1819 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1820 * buildbot/process/step.py: claim/release per-BuildStep locks
1822 * docs/Makefile: add 'buildbot.html' target
1824 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1825 interpreted as "HEAD", so that all VC steps can accept branch=None
1826 and have it mean the "default branch".
1828 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1830 2005-07-07 Brian Warner <warner@lothar.com>
1832 * docs/examples/twisted_master.cfg: update to match current usage
1834 * docs/buildbot.texinfo (System Architecture): comment out the
1835 image, it doesn't exist yet and just screws up the HTML manual.
1837 2005-07-05 Brian Warner <warner@lothar.com>
1839 * debian/.cvsignore: oops, missed one. Removing leftover file.
1841 2005-06-17 Brian Warner <warner@lothar.com>
1843 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1844 changed its output in 1.2.0, don't mistakenly think that the
1845 subversion we find isn't capable of supporting our tests.
1847 * debian/*: remove the debian/ directory and its contents, to make
1848 life easier for the proper Debian maintainer
1850 * Makefile (release): same
1852 2005-06-07 Brian Warner <warner@lothar.com>
1854 * everything: create a distinct SourceStamp class to replace the
1855 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1856 Changed the signature of Source.startVC to include the revision
1857 information (instead of passing it through self.args). Implement
1858 branches for SVN (now only Darcs/Git is missing support). Add more
1861 2005-06-06 Brian Warner <warner@lothar.com>
1863 * everything: rearrange build scheduling. Create a new Scheduler
1864 object (configured in c['schedulers'], which submit BuildSets to a
1865 set of Builders. Builders can now use multiple slaves. Builds can
1866 be run on alternate branches, either requested manually or driven
1867 by changes. This changed some of the Status classes. Interlocks
1868 are out of service until they've been properly split into Locks
1869 and Dependencies. treeStableTimer, isFileImportant, and
1870 periodicBuild have all been moved from the Builder to the
1872 (BuilderStatus.currentBigState): removed the 'waiting' and
1873 'interlocked' states, removed the 'ETA' argument.
1875 2005-05-24 Brian Warner <warner@lothar.com>
1877 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1878 erroneously abandons the connection (in clientConnectionFailed)
1879 for non-UserErrors, which means that if we lose the connection due
1880 to a network problem or a timeout, we'll never try to reconnect.
1881 Fix this by not upcalling to the buggy parent method. Note:
1882 twisted-2.0 fixes this, but the function only has 3 lines so it
1883 makes more sense to copy it than to try and detect the buggyness
1884 of the parent class. Fixes SF#1207588.
1886 * buildbot/changes/changes.py (Change.branch): doh! Add a
1887 class-level attribute to accomodate old Change instances that were
1888 pickled before 0.6.5 (where .branch was added for new Changes).
1889 This fixes the exception that occurs when you try to look at an
1890 old Change (through asHTML).
1892 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1895 2005-05-23 Brian Warner <warner@lothar.com>
1897 * buildbot/__init__.py (version): release 0.6.6
1899 2005-05-23 Brian Warner <warner@lothar.com>
1901 * NEWS: update for 0.6.6 release
1902 * debian/changelog: same
1904 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1905 before starting: this was done by twistd back when we spawned it,
1906 now that we're importing the pieces and running them in the
1907 current process, we have to do it ourselves. This allows
1908 master.cfg to import files from the same directory without
1909 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1910 Stichele for the catch.
1911 (Options.opt_version): Add a --version command (actually, just make
1912 the existing --version command emit Buildbot's version too)
1914 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1915 fix to make this behave like other LogFiles, this time to handle
1916 existing LogFiles on disk. (add the missing .upgrade method)
1917 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1919 2005-05-21 Brian Warner <warner@lothar.com>
1921 * buildbot/test/test_runner.py (Create.testMaster): match the
1922 rawstring change in runner.py:masterTAC
1924 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1925 TwistedWords is installed
1926 * buildbot/test/test_status.py: same, with TwistedMail
1928 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1929 some old, deprecated, and removed config keys). This should enable
1930 you to use the base buildbot functionality with Twisted-2.0.0 when
1931 you don't also have TwistedWeb and TwistedWords installed
1933 2005-05-20 Brian Warner <warner@lothar.com>
1935 * buildbot/scripts/runner.py (run): call sendchange(), not
1936 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1937 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1938 (stop): don't wait for process to die when sending SIGHUP
1939 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1940 directory name gets interpreted, which you don't want
1943 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1946 2005-05-18 Brian Warner <warner@lothar.com>
1948 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1950 2005-05-18 Brian Warner <warner@lothar.com>
1952 * README: update for 0.6.5
1953 * debian/changelog: same
1955 * buildbot/changes/changes.py: rename tag= to branch=, since
1956 that's how we're using it, and my design for the upcoming "build a
1957 specific branch" feature wants it. also, tag= was too CVS-centric
1958 * buildbot/changes/mail.py (parseSyncmail): same
1959 * buildbot/process/base.py (Build.isBranchImportant): same
1960 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1961 * docs/buildbot.texinfo (Attributes of Changes): same
1963 * NEWS: update tag=, update for upcoming release
1965 2005-05-17 Brian Warner <warner@lothar.com>
1967 * buildbot/scripts/runner.py (stop): actually poll once per
1968 second, instead of re-killing the poor daemon once per second.
1969 Sleep briefly (0.1s) before the first poll, since there's a good
1970 chance we can avoid waiting the full second if the daemon shuts
1971 down quickly. Also remove the sys.exit() at the end.
1972 (start): remove the unneighborly sys.exit()
1974 * Makefile: improve permission-setting to not kick Arch so badly
1976 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1977 default --keepalive=600, since it doesn't hurt very much, and it's
1978 a hassle to discover that you need it.
1979 * buildbot/test/test_runner.py (Create.testSlave): test it
1981 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1982 IRC bot about EXCEPTION
1984 * buildbot/status/client.py (PBListener): upcall more correctly
1986 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1987 an exception mark the overall build with EXCEPTION, not SUCCESS
1989 * buildbot/scripts/runner.py (makefile_sample): remove the leading
1991 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1992 * Makefile: update some release-related stuff
1994 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1995 gets called when there isn't actually an active process, just end
1996 the Command instead of blowing up. I don't know how it gets into
1997 this state, but the twisted win32 buildslave will sometimes hang,
1998 and when it shakes its head and comes back, it thinks it's still
1999 running a Command. The next build causes this command to be
2000 interrupted, but the lack of self.process.pid breaks the interrupt
2003 * NEWS: document changes since the last release
2005 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2006 look for Makefile.buildbot instead of a bare Makefile . The
2007 'buildbot start' does not install this file, so you have to
2008 manually copy it if you want to customize startup behavior.
2009 (createMaster): change 'buildbot master' command to create
2010 Makefile.sample instead of Makefile, to create master.cfg.sample
2011 instead of master.cfg (requiring you to copy it before the
2012 buildmaster can be started). Both sample files are kept up to
2013 date, i.e. they are overwritten if they have been changed. The
2014 'buildbot.tac' file is *not* overwritten, but if the new contents
2015 don't match the old, a 'buildbot.tac.new' file is created and the
2016 user is warned. This seems to be a much more sane way to handle
2017 startup files. Also, don't sys.exit(0) when done, so we can run
2018 unit tests against it.
2019 (createSlave): same. Don't overwrite the sample info/ files.
2020 * buildbot/scripts/sample.mk: remove. the contents were pulled
2021 into runner.py, since they need to match the behavior of start()
2025 * docs/buildbot.texinfo (Launching the daemons): document it
2026 * buildbot/test/test_runner.py (Create): test it
2028 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2029 version that can handle string-in-string tests, because otherwise
2030 python-2.2 fails the tests. It'd be tremendous if Trial's test
2031 took two strings under 2.2 too.
2033 * everything: fixed all deprecation warnings when running against
2034 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2035 few that come from Twisted itself). This involved putting most of
2036 the Twisted-version specific code in the new buildbot.twcompat
2037 module, and creating some abstract base classes in
2038 buildbot.changes.base and buildbot.status.base (which might be
2039 useful anyway). __implements__ is a nuisance and requires an ugly
2040 'if' clause everywhere.
2042 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2043 delay before finishing the test: it seems that smtp.sendmail
2044 doesn't hang up on the server, so we must wait a moment so it can
2045 hang up on us. This removes the trial warning about an unclean
2048 2005-05-16 Brian Warner <warner@lothar.com>
2050 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2051 tuple of (delay, repeats).
2052 * buildbot/test/test_vc.py (Retry): test it
2053 * docs/buildbot.texinfo (Source Checkout): document it
2054 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2055 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2056 doVCFull() are handled by re-trying the checkout (after a delay)
2057 some number of times.
2058 (ShellCommand._startCommand): make header lines easier to read
2060 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2062 (WebTest.test_logfile): make sure master gets shut down, silences
2063 some "unclean reactor" test errors
2065 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2066 reactor once after shutdown, something in certain versions of
2067 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2068 fails, svn-trunk is ok.
2070 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2071 second win32 error message
2073 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2074 validating the ETA, so the tests don't fail on slow systems
2076 2005-05-15 Brian Warner <warner@lothar.com>
2078 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2079 the new LogFile class, so upgrading works properly
2080 (LogFileProducer.resumeProducing): survive resumeProducing after
2081 we've exhausted the chunkGenerator
2083 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2085 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2086 (Log.testUpgrade): same
2088 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2089 Builds and logs with a cron job.
2091 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2092 of the old non-offline LogFile, added code to upgrade these to
2093 new-style contents-live-on-disk instances at load time (in a way
2094 that doesn't invalidate the old Build pickles, so upgrading to
2095 0.6.5 is not a one-way operation). Got rid of everything related
2097 (LogFile.__init__): create LogFiles with the parent step status,
2098 the log's name, and a builder-relative filename where it can keep
2099 the contents on disk.
2100 (LogFile.hasContents): new method, clients are advised to call it
2101 before getText or getChunks and friends. If it returns False, the
2102 log's contents have been deleted and getText() will raise an
2104 (LogFile.getChunks): made it a generator
2105 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2106 Consumer (except one that takes chunks instead of strings). This
2107 enables streaming of very large logfiles without storing the whole
2109 (BuildStatus.generateLogfileName): create names like
2110 12-log-compile-output, with a _0 suffix if required to be unique
2111 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2112 or earlier) logfiles into new-style ones
2113 (BuilderStatus): remove everything related to 'stub' builds. There
2114 is now only one build cache, and we don't strip logs from old
2116 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2117 since we no longer fight to keep it in the cache
2119 * buildbot/status/html.py (TextLog.render_GET): use a
2120 ChunkConsumer to stream the log entries efficiently.
2121 (ChunkConsumer): wrapper which consumes chunks and writes
2124 * buildbot/test/test_twisted.py (Parse.testParse): use a
2125 LogFile-like object instead of a real one
2127 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2128 (Log.testMerge3): validate more merge behavior
2129 (Log.testChunks): validate LogFile.getChunks
2130 (Log.testUpgrade): validate old-style LogFile upgrading
2131 (Log.testSubscribe): validate LogFile.subscribe
2132 (Log.testConsumer): validate LogFile.subscribeConsumer
2134 * buildbot/interfaces.py (IStatusLogStub): remove
2135 (IStatusLog.subscribeConsumer): new method
2136 (IStatusLog.hasContents): new method
2137 (IStatusLogConsumer): describes things passed to subscribeConsumer
2139 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2140 the log contents if it does not have any contents.
2141 (StatusResourceBuildStep.body): same
2142 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2144 2005-05-14 Brian Warner <warner@lothar.com>
2146 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2147 timeouts to try and make the windows metabuildslave not hang
2149 2005-05-13 Mike Taylor <bear@code-bear.com>
2151 * buildbot/slave/commands.py (rmdirRecursive): added a check
2152 to ensure the path passed into rmdirRecursive actually exists.
2153 On win32 a non-existant path would generate an exception.
2155 2005-05-13 Brian Warner <warner@lothar.com>
2157 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2158 shutil.rmtree which behaves correctly on windows in the face of
2159 files that you have to chmod before deleting. Thanks to Bear at
2160 the OSAF for the routine.
2161 (SourceBase.doClobber): use rmdirRecursive
2163 2005-05-12 Brian Warner <warner@lothar.com>
2165 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2166 method generate chunks instead of returning a big list. This
2167 allows the same method to be used for both old LogFile and new
2169 (OfflineLogFile.getText): use the generator
2170 (OfflineLogFile.subscribe): same
2171 * buildbot/status/html.py (TextLog.resumeProducing): same
2172 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2174 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2175 point out that OfflineLogFile does not currently work with
2176 html.Waterfall . Fixing this is high-priority.
2178 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2179 apparently windows defaults to using stdout
2181 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2182 better message on failure so I can figure out the win32 problem
2184 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2185 log messages to include more useful copies of the command being
2186 run, the argv array, and the child command's environment.
2187 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2189 2005-05-11 Brian Warner <warner@lothar.com>
2191 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2193 * Makefile: update the deb-snapshot version
2195 * docs/buildbot.texinfo: move all .xhtml docs into a new
2196 .texinfo-format document, adding a lot of material in the process.
2197 This is starting to look like a real user's manual. Removed all
2198 the Lore-related files: *.xhtml, *.css, template.tpl .
2199 * docs/Makefile: simple makefile to run 'makeinfo'
2200 * buildbot/scripts/sample.cfg: rearrange slightly
2201 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2203 2005-05-10 Brian Warner <warner@lothar.com>
2205 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2206 different name for the internal twistw module, handle it.
2208 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2209 * setup.py: .. and stop trying to install it
2211 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2212 'git'), the new linux kernel VC system (http://kernel.org/git/).
2213 Thanks to Brandon Philips for the patch.
2214 * buildbot/slave/commands.py (Git): same
2216 2005-05-06 Brian Warner <warner@lothar.com>
2218 * buildbot/status/builder.py (OfflineLogFile): replace the default
2219 LogFile with a form that appends its new contents to a disk file
2220 as they arrive. The complete log data is never kept in RAM. This
2221 is the first step towards handling very large (100MB+) logfiles
2222 without choking quite so badly. (The other half is
2223 producer/consumer on the HTML pages).
2224 (BuildStepStatus.addLog): use OfflineLogFile by default
2225 (BuildStatus.getLogfileName): helper code to give the
2226 OfflineLogFile a filename to work with
2228 * buildbot/test/test_status.py (Results.testAddResults): update
2229 tests to handle new asserts
2230 * buildbot/test/test_vc.py (Patch.doPatch): same
2231 * buildbot/test/test_steps.py (BuildStep.setUp): same
2233 2005-05-05 Brian Warner <warner@lothar.com>
2235 * buildbot/scripts/runner.py (start): if there is no Makefile,
2236 launch the app by importing twistd's internals and calling run(),
2237 rather than spawning a new twistd process. This stands a much
2238 better chance of working under windows.
2239 (stop): kill the process with os.kill instead of spawning
2240 /bin/kill, again to reduce the number of external programs which
2241 windows might not have in the PATH. Also wait up to 5 seconds for
2242 the process to go away, allowing things like 'buildbot stop;
2243 buildbot start' to be reliable in the face of slow shutdowns.
2245 * buildbot/master.py (Dispatcher.__getstate__): remove old
2246 .tap-related methods
2247 (BuildMaster.__getstate__): same
2249 * buildbot/slave/bot.py (makeService): same
2250 (Options.longdesc): same
2251 * buildbot/scripts/runner.py: copy over some old mktap option text
2253 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2254 'buildbot master' now creates a buildbot.tac file, so there is no
2255 longer a create-instance/save/reload sequence. mktap is dead, long
2257 * buildbot/scripts/sample.mk: use twistd -y, not -f
2258 * buildbot/test/test_config.py: remove mktap-based test
2259 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2260 * README: don't reference mktap
2262 * docs/source.xhtml: document some of the attributes that Changes
2265 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2267 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2268 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2269 * buildbot/changes/changes.py (Change)
2270 * buildbot/changes/mail.py (parseSyncmail)
2271 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2273 * buildbot/process/base.py (Build.isTagImportant)
2277 2005-05-04 Brian Warner <warner@lothar.com>
2279 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2280 connection after sending the change, so that unit tests don't
2281 complain about sockets being left around
2283 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2284 exception in phase=0 rendering
2285 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2287 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2289 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2290 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2291 and configuring builders with tuples.
2292 * buildbot/test/test_config.py: stop testing compatibility with
2293 deprecated config keys
2294 * buildbot/test/test_run.py: same
2296 2005-05-03 Brian Warner <warner@lothar.com>
2298 * contrib/arch_buildbot.py: survive if there are no logfiles
2299 (username): just use a string, os.getlogin isn't reliable
2301 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2302 so 'buildbot sendchange' actually works. The earlier test only
2303 covered the internal (non-reactor-running) form.
2305 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2306 script to notify the buildmaster about changes
2308 * buildbot/scripts/runner.py (sendchange): new command to send a
2309 change to a buildbot.changes.pb.PBChangeSource receiver.
2310 * buildbot/test/test_changes.py (Sender): test it
2312 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2313 after any reading of the config file, not just when we do it in
2314 startService. This makes some tests a bit cleaner.
2316 * buildbot/changes/pb.py: add some log messages
2318 * buildbot/process/base.py (Build.startBuild): fix a bug that
2319 caused an exception when the build terminated in the very first
2321 (Build.stepDone): let steps return a status of EXCEPTION. This
2322 terminates the build right away, and sets the build's overall
2323 status to EXCEPTION too.
2324 * buildbot/process/step.py (BuildStep.failed): return a status of
2325 EXCEPTION when that is what has happened.
2327 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2328 implement this, allowing Arch-based projects to get precise
2329 checkouts instead of always using the latest code
2330 (Bazaar): create variant of Arch to let folks use baz instead of
2331 tla. Requires a new buildslave too.
2332 * buildbot/slave/commands.py (Arch): add 'revision' argument
2333 (Bazaar): create variant of Arch that uses baz instead of tla.
2334 Remove the code that extracts the archive name from the
2335 register-archive output, since baz doesn't provide it, and require
2336 the user provide both the archive name and its location.
2337 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2339 2005-05-02 Brian Warner <warner@lothar.com>
2341 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2342 thanks to Nick Trout.
2344 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2345 deals better with source Makefile coming from a read-only CVS
2346 checkout. Thanks to Nick Trout for the catch.
2348 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2351 2005-04-28 Brian Warner <warner@lothar.com>
2353 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2355 * debian/changelog: update for 0.6.4
2357 2005-04-28 Brian Warner <warner@lothar.com>
2359 * README.w32: add a checklist of steps for getting buildbot
2361 * MANIFEST.in: include it in the tarball
2365 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2366 broken .tap files from 0.6.3 by getting rid of .services,
2367 .namedServices, and .change_svc at load time.
2369 2005-04-27 Brian Warner <warner@lothar.com>
2371 * NEWS: update in preparation for new release
2373 * buildbot/test/test_config.py (Save.testSave): don't pull in
2374 twisted.scripts.twistd, we don't need it and it isn't for windows
2377 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2378 accomodate win32 which can't do atomic-rename
2380 2005-04-27 Brian Warner <warner@lothar.com>
2382 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2383 timeouts to help the slow metabuildbot not flunk them so much
2384 (Disconnect.testBuild3): same
2385 (Disconnect.testBuild4): same
2386 (Disconnect.testInterrupt): same
2388 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2389 setup, it was completely broken for new buildmasters (those which
2390 did not have a 'change.pck' already saved. Thanks to Paul Warren
2391 for catching this (embarrassing!) bug.
2392 (Dispatcher.__getstate__): don't save our registered avatar
2393 factories, since they'll be re-populated when the config file is
2395 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2396 tests (since the real mktap-generated BuildMaster doesn't save
2398 (BuildMaster.__getstate__): don't save any service children,
2399 they'll all be re-populated when the config file is re-read.
2400 * buildbot/test/test_config.py (Save.testSave): test for this
2402 2005-04-26 Brian Warner <warner@lothar.com>
2404 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2405 rendered with Blender.. looks a bit nicer.
2406 * buildbot/docs/images/icon.blend: add the Blender file for it
2408 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2409 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2410 running under windows. This appears to be the best way to allow
2411 BuildSteps to do something normal like 'trial -v buildbot.test' or
2412 'make foo' and still expect it to work. The idea is to make the
2413 BuildSteps look as much like what a developer would type when
2414 compiling or testing the tree by hand. This approach probably has
2415 problems when there are spaces in the arguments, so if you've got
2416 windows buildslaves, you'll need to pay close attention to your
2419 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2420 timezone to the timestamp column.
2421 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2423 * buildbot/scripts/runner.py (loadOptions): do something sane for
2424 windows, I think. We use %APPDATA%/buildbot instead of
2425 ~/.buildbot, but we still search everywhere from the current
2426 directory up to the root for a .buildbot/ subdir. The "is it under
2427 $HOME" security test was replaced with "is it owned by the current
2428 user", which is only performed under posix.
2429 * buildbot/test/test_runner.py (Options.testFindOptions): update
2430 tests to match. The "is it owned by the current user" check is
2431 untested. The test has been re-enabled for windows.
2433 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2434 any "\n" in the expected output with the platform-specific line
2435 separator. Make this separator "\r\n" on PTYs under unix, they
2436 seem to do that and I don't know why
2438 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2439 windows for now, I don't know what ~/.buildbot/ should mean there.
2441 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2442 win32 compatibility, don't use "/tmp"
2443 (Basedir.testChangeBuilddir): remove more unixisms
2445 2005-04-26 Brian Warner <warner@lothar.com>
2447 * buildbot/test/test_control.py (Force.rmtree): python2.2
2448 compatibility, apparently its shutil.rmtree ignore_errors=
2449 argument is ignored.
2450 * buildbot/test/test_run.py (Run.rmtree): same
2451 (RunMixin.setUp): same
2453 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2456 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2457 'substring in string' operator, must use string.find(substr)!=-1
2458 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2459 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2461 * buildbot/scripts/runner.py (loadOptions): add code to search for
2462 ~/.buildbot/, a directory with things like 'options', containing
2463 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2464 the current directory, your $HOME directory, or anywhere
2465 inbetween, as long as you're somewhere inside your home directory.
2466 (debugclient): look in ~/.buildbot/options for master and passwd
2467 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2468 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2470 * buildbot/status/client.py (makeRemote): new approach to making
2471 IRemote(None) be None, which works under Twisted-2.0
2472 * buildbot/test/test_status.py (Client.testAdaptation): test it
2474 * buildbot/status/builder.py (Status.builderAdded): when loading a
2475 pickled BuilderStatus in from disk, set its name after loading.
2476 The config file might have changed its name (but not its
2477 directory) while it wasn't looking.
2479 * buildbot/process/builder.py (Builder.attached): always return a
2480 Deferred, even if the builder was already attached
2481 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2483 2005-04-25 Brian Warner <warner@lothar.com>
2485 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2486 category-related exception when announcing a build has finished
2488 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2489 reference no-longer-existent changemaster.sources
2490 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2492 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2495 2005-04-25 Brian Warner <warner@lothar.com>
2497 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2499 * debian/changelog: update for 0.6.3
2501 2005-04-25 Brian Warner <warner@lothar.com>
2503 * MANIFEST.in: make sure debug.glade is in the tarball
2505 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2507 * NEWS: update for the imminent 0.6.3 release
2509 * buildbot/status/html.py (HtmlResource.content): make the
2510 stylesheet <link> always point at "buildbot.css".
2511 (StatusResource.getChild): map "buildbot.css" to a static.File
2512 containing whatever css= argument was provided to Waterfall()
2513 (Waterfall): provide the "classic" css as the default.
2514 * docs/waterfall.classic.css: move default CSS from here ..
2515 * buildbot/status/classic.css: .. to here
2517 * MANIFEST.in: make sure classic.css is included in the tarball
2518 * setup.py: and that it is installed too, under buildbot/status/
2520 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2521 the module level, because buildbot.tap files from 0.6.2 don't have
2522 it in their attribute dictionary.
2524 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2525 really exists at startup, might save some confusion somewhere.
2527 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2529 * docs/waterfall.classic.css:
2530 add a stylesheet that's almost the same as the "classic"
2533 * buildbot/status/builder.py:
2534 add EXCEPTION as a result - this is a problem for the bot
2535 maintainer, not a build problem for the changers
2536 * buildbot/process/step.py:
2537 use EXCEPTION instead of FAILURE for exceptions
2538 * buildbot/status/html.py:
2539 add build_get_class to get a class out of a build/buildstep
2540 finish naming the classes
2541 split out sourceNames to changeNames and builderNames so we
2542 can style them separately
2543 * docs/config.xhtml:
2544 finish documenting classes as they are right now
2546 * buildbot/status/html.py:
2547 name the classes as we agreed on IRC
2548 * docs/config.xhtml:
2551 * buildbot/status/html.py:
2552 same for cssclass->class_
2554 * buildbot/status/html.py:
2555 as decided on IRC, use class_ for the "class" attribute to not
2556 conflict with the class keyword, and clean up the messy **{} stuff.
2558 * buildbot/status/mail.py:
2559 put back "builders" argument, and fix docstring, because the
2560 code *ignores* builders listed in this argument
2562 * buildbot/process/builder.py:
2563 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2565 * docs/config.xhtml:
2566 describe the category argument for builders
2568 * buildbot/status/builder.py:
2569 Fix a silly bug due to merging
2571 * buildbot/process/builder.py:
2572 remove category from the process Builder ...
2573 * buildbot/status/builder.py:
2574 ... and add it to BuilderStatus instead.
2575 Set category on unpickled builder statuses, they might not have it.
2576 * buildbot/master.py:
2577 include category when doing builderAdded
2578 * buildbot/status/mail.py:
2579 return None instead of self for builders we are not interested in.
2580 * buildbot/test/test_run.py:
2581 fix a bug due to only doing deferredResult on "dummy" waiting
2582 * buildbot/test/test_status.py:
2583 add checks for the Mail IStatusReceiver returning None or self
2585 * buildbot/status/html.py:
2586 fix testsuite by prefixing page title with BuildBot
2588 * buildbot/status/builder.py:
2589 have .category in builder status ...
2590 * buildbot/process/builder.py:
2591 ... and set it from Builder
2592 * buildbot/status/html.py:
2593 make .css a class variable
2594 * buildbot/test/test_status.py:
2595 write more tests to cover our categories stuff ...
2596 * buildbot/status/mail.py:
2597 ... and fix the bug that this uncovered
2599 * buildbot/changes/mail.py:
2600 * buildbot/changes/pb.py:
2601 * buildbot/master.py:
2602 * buildbot/process/base.py:
2603 * buildbot/process/factory.py:
2604 * buildbot/process/interlock.py:
2605 * buildbot/process/step.py:
2606 * buildbot/process/step_twisted.py:
2607 * buildbot/slave/commands.py:
2608 * buildbot/status/builder.py:
2609 * buildbot/status/client.py:
2610 * buildbot/status/html.py:
2611 * buildbot/status/mail.py:
2612 * buildbot/status/progress.py:
2613 * buildbot/test/test_changes.py:
2614 * buildbot/test/test_config.py:
2615 * buildbot/test/test_control.py:
2616 * buildbot/test/test_interlock.py:
2617 * buildbot/test/test_maildir.py:
2618 * buildbot/test/test_mailparse.py:
2619 * buildbot/test/test_run.py:
2620 * buildbot/test/test_slavecommand.py:
2621 * buildbot/test/test_status.py:
2622 * buildbot/test/test_steps.py:
2623 * buildbot/test/test_twisted.py:
2624 * buildbot/test/test_util.py:
2625 * buildbot/test/test_vc.py:
2626 * buildbot/test/test_web.py:
2628 add test-case-name at the top of a whole set of files
2630 * buildbot/status/builder.py:
2631 keep order of addition when getting builder names
2632 * buildbot/status/words.py:
2633 * buildbot/test/test_run.py:
2634 add test for getBuilderNames
2636 * buildbot/process/base.py:
2637 * buildbot/process/step.py:
2638 * buildbot/status/builder.py:
2639 * buildbot/status/html.py:
2640 make buildbot css-able
2641 replace the color code for purple with purple, don't understand
2642 why it wasn't purple to start with
2644 * buildbot/status/words.py:
2645 ok, so it doesn't look like BuilderStatus.remote is still valid.
2646 Use what waterfall uses instead.
2648 * buildbot/interfaces.py:
2649 * buildbot/status/builder.py:
2650 * buildbot/status/html.py:
2651 * buildbot/status/mail.py:
2652 * buildbot/status/words.py:
2653 * buildbot/test/test_run.py:
2654 use categories everywhere and make it be a list. More sensible
2655 for the future. Also make words actually respect this in
2658 * buildbot/interfaces.py:
2659 add category argument to getBuilderNames
2660 * buildbot/process/builder.py:
2661 * buildbot/status/builder.py:
2662 * buildbot/status/html.py:
2663 * buildbot/status/mail.py:
2664 * buildbot/status/words.py:
2665 * buildbot/test/test_run.py:
2666 move from specifying builders by name to specifying the category
2668 * buildbot/status/html.py:
2669 * buildbot/status/words.py:
2670 add "builders=" to __init__ of status clients so they can
2671 limit themselves to the given list of builders to report on
2673 * buildbot/status/html.py: set the title to the product name
2675 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2677 * buildbot/interfaces.py:
2678 * buildbot/status/builder.py:
2679 more documentation. Hm, not sure if ChangeLog entries make sense
2682 2005-04-23 Brian Warner <warner@lothar.com>
2684 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2686 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2688 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2689 the sub-commands that log buildmaster status to stdout and to a
2690 GUI window, respectively.
2692 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2693 functionality is working again, but all the step-status and ETA
2694 stuff is missing. Commented out a lot of code pending more
2697 * buildbot/status/client.py: make sure that IRemote(None) is None
2699 * buildbot/changes/changes.py: import defer, oops
2700 (ChangeMaster): remove the .sources list, rely upon the fact that
2701 MultiServices can be treated as sequences of their children. This
2702 cleans up the add/remove ChangeSource routines a lot, as we keep
2703 exactly one list of the current sources instead of three.
2705 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2706 up an empty ChangeMaster at init time.
2707 (BuildMaster.loadChanges): if there are changes to be had from
2708 disk, replace self.change_svc with the new ones. If not, keep
2709 using the empty ChangeMaster set up in __init__.
2710 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2711 instead of a separate list, makes the code a bit cleaner.
2712 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2713 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2714 Extend the test to make sure we can get rid of the sources when
2717 2005-04-22 Brian Warner <warner@lothar.com>
2719 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2720 and info/host files when making the slave directory
2722 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2723 whendone= argument, just return the Deferred and let the caller do
2724 what they want with it.
2725 (Disconnect.testBuild1): wait for shutdownSlave
2726 (Basedir.testChangeBuilddir): new test to make sure changes to the
2727 builddir actually get propagated to the slave
2729 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2730 explicit method, rather than passing the builddir in __init__ .
2731 Make sure to update self.basedir too, this was broken before.
2732 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2733 builders and for ones that have just had their builddir changed.
2734 (BotFactory): add a class-level .perspective attribute, so
2735 BuildSlave.waitUntilDisconnected won't get upset when the
2736 connection hasn't yet been established
2737 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2738 tests can reach through it to inspect the SlaveBuilders
2740 * buildbot/process/base.py (Build.buildException): explain the
2741 log.err with a log.msg
2742 * buildbot/process/builder.py (Builder.startBuild): same
2743 (Builder._startBuildFailed): improve error message
2745 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2746 occurred because we lost the brand-new connection, retry instead
2747 of giving up. If not, it's probably an authorization failure, and
2748 it makes sense to stop trying. Make sure we log.msg the reason
2749 that we're log.err'ing the failure, otherwise test failures are
2750 really hard to figure out.
2752 * buildbot/master.py: change loadConfig() to return a Deferred
2753 that doesn't fire until the change has been fully implemented.
2754 This means any connected slaves have been updated with the new
2755 builddir. This change makes it easier to test the code which
2756 actually implements this builddir-updating.
2757 (BotPerspective.addBuilder): return Deferred
2758 (BotPerspective.removeBuilder): same
2759 (BotPerspective.attached): same
2760 (BotPerspective._attached): same. finish with remote_print before
2761 starting the getSlaveInfo, instead of doing them in parallel
2762 (BotPerspective.list_done): same
2763 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2764 actually calling slave.disconnect()
2765 (BotMaster.addBuilder): same
2766 (BotMaster.removeBuilder): same
2767 (BuildMaster.loadConfig): same
2768 (BuildMaster.loadConfig_Slaves): same
2769 (BuildMaster.loadConfig_Sources): same
2770 (BuildMaster.loadConfig_Builders): same
2771 (BuildMaster.loadConfig_status): same
2773 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2774 a Deferred that fires when the source is finally removed
2776 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2777 the previous tree on win32, where we have to do it synchronously,
2778 make sure we return a Deferred anyway.
2779 (SourceBase.doCopy): same
2781 * buildbot/scripts/runner.py (statusgui): use the text client for
2782 now, while I rewrite the Gtk one
2783 * buildbot/clients/base.py: strip out old code, leaving just the
2784 basic print-message-on-event functionality. I also remove the
2785 ReconnectingPBClientFactory, but it does at least quit when it
2786 loses the connection instead of going silent
2788 2005-04-21 Brian Warner <warner@lothar.com>
2790 * Makefile: minor tweaks
2792 * NEWS: point out deprecation warnings, new features for
2795 * buildbot/master.py (BuildMaster.loadConfig): emit
2796 DeprecationWarnings for Builders defined with tuples. Rearrange
2797 code to facility removal of deprecated configuration keys in the
2800 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2801 'buildbot' command to put a little Makefile in the target that
2802 helps you re-create the buildbot.tap file, start or stop the
2803 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2804 all the files 0600, since they contain passwords.
2805 (start): if there is a Makefile, and /usr/bin/make exists, use
2806 'make start' in preference to a raw twistd command. This lets
2807 slave admins put things like PYTHONPATH variables in their
2808 Makefiles and have them still work when the slave is started with
2809 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2810 be nice to first try the 'make' command and only fall back to
2811 twistd if it fails. TODO: the Makefile's "start" command does not
2812 add the --reactor=win32 argument when running under windows.
2813 (Options.debugclient, Options.statusgui): add sub-commands to launch
2814 the debug client (formerly in contrib/debugclient.py) and the
2815 Gtk status application (currently broken)
2816 * buildbot/clients/debug.py: move from contrib/debugclient.py
2817 * buildbot/clients/debug.glade: same
2819 * buildbot/test/test_trial.py: remove it. This requires some
2820 functionality out of Twisted that isn't there yet, and until then
2821 having it around just confuses things.
2823 * buildbot/test/test_slavecommand.py (Shell): test both with and
2824 without PTYs, and make sure that command output is properly
2825 interleaved in the with-PTY case. I think the without-PTY test
2826 should pass on windows, where we never use PTYs anyway.
2828 2005-04-20 Brian Warner <warner@lothar.com>
2830 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2832 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2834 * NEWS: start creating entries for the next release
2836 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2838 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2839 (WebTest.test_webPathname): same
2840 (WebTest.test_webPathname_port): same
2841 (WebTest.test_waterfall): use the default favicon rather than
2842 rooting around the filesystem for it. Open the expected-icon file
2843 in binary mode, to make win32 tests happier (thanks to Nick Trout
2845 * buildbot/status/html.py (buildbot_icon): win32 portability
2847 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2848 win32-compatibility fixes from Nick Trout, the "file not found" message
2849 is different under windows
2850 (FakeSlaveBuilder.__init__): clean up setup a bit
2851 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2853 2005-04-19 Brian Warner <warner@lothar.com>
2855 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2856 skip-if-repositories-are-unavailable test to not kill the trial
2857 that comes with Twisted-1.3.0
2859 * setup.py: install buildbot.png icon file when installing code
2861 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2862 environment used by the command, at least on the child side.
2864 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2865 this method needs to be added and implemented because it gets
2866 called under heavy load. I don't quite understand the
2867 producer/consumer API enough to write it.
2868 (StatusResource.getChild): add a resource for /favicon.ico
2869 (Waterfall.__init__): add favicon= argument
2870 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2871 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2872 (WebTest.test_webPathname): same
2873 (WebTest.test_webPathname_port): same
2874 * docs/config.xhtml: mention favicon=
2875 * buildbot/buildbot.png: add a default icon, dorky as it is
2877 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2879 * buildbot/master.py:
2880 * buildbot/process/base.py:
2881 * buildbot/process/builder.py:
2882 * buildbot/process/interlock.py:
2883 * buildbot/status/builder.py:
2884 * buildbot/status/html.py:
2885 * buildbot/status/mail.py:
2886 * buildbot/status/words.py:
2887 new documentation while digging through the code
2889 2005-04-17 Brian Warner <warner@lothar.com>
2891 * general: try to fix file modes on all .py files: a+r, a-x,
2892 but let buildbot/clients/*.py be +x since they're tools
2894 * docs/epyrun (addMod): when an import fails, say why
2896 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2898 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2900 * buildbot/process/base.py:
2901 * buildbot/process/builder.py:
2902 * buildbot/status/builder.py:
2903 new documentation while digging through the code
2905 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2907 * buildbot/changes/changes.py:
2908 * buildbot/changes/p4poller.py:
2909 * buildbot/interfaces.py:
2910 * buildbot/process/base.py:
2911 * buildbot/process/builder.py:
2912 * buildbot/process/step.py:
2913 * buildbot/process/step_twisted.py:
2914 * buildbot/slave/bot.py:
2915 * buildbot/slave/commands.py:
2916 * buildbot/status/builder.py:
2917 fix all docstrings to make epydoc happy. In the process of fixing
2918 some, I also moved pieces of docs, and removed some deprecated
2921 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2923 * buildbot/process/builder.py:
2924 * buildbot/process/interlock.py:
2925 * buildbot/process/process_twisted.py:
2926 * buildbot/process/step.py:
2927 BuildProcess -> Build, as it looks like that's what happened
2928 * buildbot/process/base.py:
2929 * buildbot/process/factory.py:
2932 2005-04-17 Brian Warner <warner@lothar.com>
2934 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2935 update compile command to accomodate the Twisted split.. now
2936 instead of './setup.py build_ext -i', you do './setup.py all
2937 build_ext -i', to run build_ext over all sub-projects.
2938 (FullTwistedBuildFactory): same
2939 (TwistedReactorsBuildFactory): same
2941 * buildbot/status/html.py (TextLog.finished): null out self.req
2942 when we're done, otherwise the reference cycle of TextLog to .req
2943 to .notifications to a Deferred to TextLog.stop keeps them from
2944 being collected, and consumes a huge (610MB on pyramid at last
2945 check) amount of memory.
2947 2005-04-11 Brian Warner <warner@lothar.com>
2949 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2950 normalize the VC-repository location.. makes SVN happier with
2951 certain test environments.
2953 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2954 RemoteShellCommand gets its own .env dictionary, so that code in
2955 start() doesn't mutate the original. I think this should fix the
2956 step_twisted.Trial problem where multiple identical components
2957 kept getting added to PYTHONPATH= over and over again.
2959 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2960 adding epydoc-format docstrings to many classes. Thanks to Thomas
2961 Vander Stichele for the patches.
2962 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2963 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2964 * buildbot/slave/bot.py, commands.py, registry.py: same
2966 2005-04-05 Brian Warner <warner@lothar.com>
2968 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2969 preserve timestamps, helps incremental builds of large trees.
2970 Patch from Rene Rivera.
2972 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2973 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2976 2005-04-03 Brian Warner <warner@lothar.com>
2978 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2979 with one dict, apparently exec has some scoping bugs when used
2980 with both global/local dicts. Thanks to Nathaniel Smith for the
2983 2005-04-02 Brian Warner <warner@lothar.com>
2985 * buildbot/process/step_twisted.py (countFailedTests): the new
2986 trial in Twisted-2.0 emits a slightly different status line than
2987 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2988 mistakenly think the test count is unparseable.
2989 (Trial.start): note that for some reason each build causes another
2990 copy of self.testpath to be prepended to PYTHONPATH. This needs to
2991 be fixed but I'm not sure quite where the problem is.
2993 2005-04-01 Brian Warner <warner@lothar.com>
2995 * buildbot/test/test_run.py (Run.testMaster): change some uses of
2996 deferredResult to avoid hangs/warnings under twisted-2.0
2997 (RunMixin.tearDown): same
2998 (RunMixin.shutdownSlave): same
2999 (Disconnect.testIdle1): same
3000 (Disconnect.testBuild2): same: wait one second after the build
3001 finishes for test to really be done.. this should be cleaned up to
3002 avoid wasting that second. Builder.detach uses a callLater(0),
3003 either that should be done in-line (something else needed that
3004 behavior), or it should return a Deferred that fires when the
3005 builder is really offline.
3006 (Disconnect.testBuild3): same
3007 (Disconnect.testDisappear): same
3009 * buildbot/test/test_web.py: rearrange server-setup and teardown
3010 code to remove unclean-reactor warnings from twisted-2.0
3012 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3013 so the tests don't hang under twisted-2.0
3015 2005-03-31 Brian Warner <warner@lothar.com>
3017 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3018 caused a warning each time the master changed our set of builders
3020 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3021 w32, don't unlink the file unless it already exists. Thanks to
3022 Baptiste Lepilleur for the catch.
3023 (BuilderStatus.saveYourself): same
3025 2005-02-01 Brian Warner <warner@lothar.com>
3027 * buildbot/status/html.py (TextLog.getChild): use a /text child
3028 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3029 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3030 logfile as text/plain (no markup, no headers). This replaces the
3031 previous scheme (which used an ?text=1 argument), and gets us back
3032 to a relative link (which works better when the buildbot lives
3033 behind another web server, such as Apache configured as a reverse
3034 proxy). Thanks to Gerald Combs for spotting the problem.
3036 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3039 2004-12-13 Brian Warner <warner@lothar.com>
3041 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3043 * debian/changelog: update for 0.6.2
3044 * NEWS: finalize for 0.6.2
3046 2004-12-11 Brian Warner <warner@lothar.com>
3048 * NEWS: bring it up to date
3050 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3051 detection code. Require some sign of life from the buildmaster
3052 every BotFactory.keepaliveInterval seconds. Provoke this
3053 indication at BotFactory.keepaliveTimeout seconds before the
3054 deadline by sending a keepalive request. We don't actually care if
3055 that request is answered in a timely fashion, what we care about
3056 is that .activity() is called before the deadline. .activity() is
3057 triggered by any PB message from the master (including an ack to
3058 one of the slave's status-update messages). With this new scheme,
3059 large status messages over slow pipes are OK, as long as any given
3060 message can be sent (and thus acked) within .keepaliveTimeout
3061 seconds (which defaults to 30).
3062 (SlaveBuilder.remote_startCommand): record activity
3063 (SlaveBuilder.ackUpdate): same
3064 (SlaveBuilder.ackComplete): same
3065 (BotFactory.gotPerspective): same
3066 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3068 2004-12-09 Brian Warner <warner@lothar.com>
3070 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3073 * buildbot/process/step_twisted.py (Trial._commandComplete):
3074 update self.cmd when we start the 'cat test.log' transfer. Without
3075 this, we cannot interrupt the correct RemoteCommand when we lose
3078 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3079 trying to tell the slave to stop the command if we're already
3080 inactive, or if we no longer have a .remote
3082 * buildbot/process/builder.py (Builder._detached): don't let an
3083 exception in currentBuild.stopBuild() prevent the builder from
3084 being marked offline
3086 2004-12-07 Brian Warner <warner@lothar.com>
3088 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3089 KeyError that happens when you ask for a non-existent Builder, and
3090 translate it into a UsageError.
3092 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3093 losing the slave in the middle of a remote step is handled too
3095 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3096 be a Failure, so be sure to stringify it before using it as the
3097 contents of the 'interrupt' logfile
3098 (RemoteCommand.interrupt): use stringified 'why' in
3099 remote_interruptCommand too, just in case
3101 2004-12-06 Brian Warner <warner@lothar.com>
3103 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3104 instead of 'tla update', which is more efficient in case we've
3105 missed a couple of patches since the last update.
3107 * debian/changelog: update for previous (0.6.1) release. Obviously
3108 this needs to be handled better.
3110 2004-12-05 Brian Warner <warner@lothar.com>
3112 * NEWS: update for stuff since last release
3114 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3115 match the maybeDeferred change in Dispatcher.requestAvatar
3116 * buildbot/changes/pb.py (ChangePerspective.attached): same
3117 * buildbot/status/client.py (StatusClientPerspective.attached): same
3118 * buildbot/process/builder.py (Builder._attached3): same
3119 * buildbot/pbutil.py (NewCredPerspective.attached): same
3121 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3122 the date to the top-most box, if it is not the same as today's
3125 * docs/slave.xhtml: provide a buildslave setup checklist
3127 * docs/source.xhtml (Arch): correct terminology
3129 2004-12-04 Brian Warner <warner@lothar.com>
3131 * buildbot/test/test_slavecommand.py: use sys.executable instead
3132 of hard-coding 'python' for child commands, might help portability
3134 * docs/examples/twisted_master.cfg: update to current usage
3136 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3137 'stop build' command to the IRC bot
3139 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3140 message that broke PBChangeSource
3142 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3143 (SlaveBuilder): make some attributes class-level, remove the old
3144 "update queue" which existed to support resuming a build after the
3145 master connection was lost. Try to reimplement that feature later.
3146 (SlaveBuilder.stopCommand): clear self.command when the
3147 SlaveCommand finishes, so that we don't try to kill a leftover one
3149 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3152 * buildbot/slave/commands.py (SourceBase): set self.command for
3153 all VC commands, so they can be interrupted.
3155 2004-12-03 Brian Warner <warner@lothar.com>
3157 * buildbot/master.py: clean up slave-handling code, to handle
3158 slave-disconnect and multiple-connect better
3159 (BotPerspective): make these long-lasting, exactly one per bot
3160 listed in the config file.
3161 (BotPerspective.attached): if a slave connects while an existing
3162 one appears to still be connected, disconnect the old one first.
3163 (BotPerspective.disconnect): new method to forcibly disconnect a
3164 buildslave. Use some hacks to empty the transmit buffer quickly to
3165 avoid the long (20-min?) TCP timeout that could occur if the old
3166 slave has dropped off the net.
3167 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3168 own their own SlaveStatus objects. Remove .attached/.detached, add
3169 .addSlave/.removeSlave, treat slaves like Builders (config file
3170 parsing sends deltas to the BotMaster). Inform the slave
3171 instances, i.e. the BotPerspective, about addBuilder and
3173 (BotMaster.getPerspective): turns into a single dict lookup
3174 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3175 which gives BotPerspective.attached a chance to disconnect the old
3177 (BuildMaster.loadConfig): add code (disabled) to validate that all
3178 builders use known slaves (listed in c['bots']). The check won't
3179 work with tuple-specified builders, which are deprecated but not
3180 yet invalid, so the check is disabled for now.
3181 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3182 routine, do the add/changed/removed dance with them like we do
3184 (BuildMaster.loadConfig_Sources): move source-config into a
3185 separate routine too
3187 * buildbot/status/builder.py (Status.getSlave): get the
3188 SlaveStatus object from the BotPerspective, not the BotMaster.
3190 * buildbot/test/test_run.py: bunch of new tests for losing the
3191 buildslave at various points in the build, handling a slave that
3192 connects multiple times, and making sure we can interrupt a
3195 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3196 something other than 'Bot' for the Bot object, to make certain
3197 test cases easier to write.
3198 (BuildSlave.waitUntilDisconnected): utility method for testing
3200 2004-11-30 Brian Warner <warner@lothar.com>
3202 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3204 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3205 argument, return a Deferred that always fires with True or False.
3206 I don't use an errback to indicate 'ping failed' so that callers
3207 are free to ignore the deferred without causing spurious errors in
3209 * buildbot/process/builder.py (BuilderControl.ping): implement it
3211 * buildbot/test/test_run.py (Status.testDisappear): test ping
3212 (Status.disappearSlave): fix it
3214 2004-11-30 Brian Warner <warner@lothar.com>
3216 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3217 (IBuilderControl): add .getBuild(num), only works for the current
3218 build, of course, although it might be interesting to offer
3219 something for builds in the .waiting or .interlocked state.
3221 * buildbot/process/base.py (Build): have .stopBuild just do the
3222 interrupt, then let the build die by itself.
3223 (BuildControl): add .stopBuild, and add a point-event named
3224 'interrupt' just after the build so status viewers can tell that
3226 (BuilderControl): add .getBuild
3228 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3229 stops when you kill it, good for testing
3230 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3231 contains the 'reason' text.
3233 * buildbot/status/html.py: Add Stop Build button, if the build can
3234 still be stopped. Send a Redirect (to the top page) one second
3235 later, hopefully long enough for the interrupt to have an effect.
3236 Move make_row() up to top-level to share it between Stop Build and
3239 * buildbot/slave/commands.py: only kill the child process once
3241 * buildbot/test/test_run.py: add testInterrupt
3243 2004-11-29 Brian Warner <warner@lothar.com>
3245 * buildbot/process/base.py: Refactor command interruption. The
3246 Build is now responsible for noticing that the slave has gone
3247 away: Build.lostRemote() interrupts the current step and makes
3248 sure that no further ones will be started.
3250 * buildbot/process/builder.py: When the initial remote_startBuild
3251 message fails, log it: this usually indicates that the slave has
3252 gone away, but we don't really start paying attention until they
3253 fail to respond to the first step's command.
3255 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3256 slave disconnect. Now sports a new interrupt() method. Error
3257 handling was simplified a lot by chaining deferreds, so
3258 remoteFailed/remoteComplete were merged into a single
3259 remoteComplete method (which can now get a Failure object).
3260 Likewise failed/finished were merged into just _finished.
3261 (BuildStep): Add interrupt(why) method, and if why is a
3262 ConnectionLost Failure then the step is failed with some useful
3265 * buildbot/slave/bot.py: stop the current command when the remote
3266 Step reference is lost, and when the slave is shut down.
3267 (Bot): make it a MultiService, so it can have children. Use
3268 stopService to tell when the slave is shutting down.
3269 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3270 remote_interruptCommand (which asks the current SlaveCommand to
3271 stop but allows it to keep emitting status messages), and
3272 stopCommand (which tells it to shut up and die).
3274 * buildbot/slave/commands.py: make commands interruptible
3275 (ShellCommand.kill): factor out os.kill logic
3276 (Command): factor out setup()
3277 (Command.sendStatus): don't send status if .running is false, this
3278 happens when the command has been halted.
3279 (Command.interrupt): new method, used to tell the command to die
3280 (SlaveShellCommand): implement .interrupt
3281 (DummyCommand): implement .interrupt
3282 (SourceBase, etc): factor out setup(), don't continue substeps if
3285 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3286 so they can be called after finishing
3288 * buildbot/test/test_run.py: new tests for disconnect behavior,
3289 refactor slave-shutdown routines, add different kinds of
3292 2004-11-27 Brian Warner <warner@lothar.com>
3294 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3295 method to express ETA time like "2m45s" instead of "165 seconds"
3297 2004-11-24 Brian Warner <warner@lothar.com>
3299 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3300 archive after the test completes, to avoid cluttering the user's
3301 'tla archives' listing with a bogus entry. Arch doesn't happen to
3302 provide any way to override the use of ~/.arch-params/, so there
3303 isn't a convenient way to avoid touching the setup of the user who
3305 (VC_HTTP.testArchHTTP): same
3307 2004-11-23 Brian Warner <warner@lothar.com>
3309 * buildbot/status/html.py (TextLog): split render() up into
3310 render_HEAD and render_GET. Use a Producer when sending log
3311 chunks, to reduce memory requirements and avoid sending huge
3312 non-Banana-able strings over web.distrib connections. Requires
3313 peeking under the covers of IStatusLog.
3314 (TextLog.resumeProducing): fix the "as text" link, handle client
3315 disconnects that occur while we're still sending old chunks.
3317 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3318 use defer.succeed, not the non-existent defer.success
3319 (LogFile.waitUntilFinished): same
3320 (LogFile.subscribe): don't add watchers to a finished logfile
3322 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3325 2004-11-23 Brian Warner <warner@lothar.com>
3327 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3329 2004-11-23 Brian Warner <warner@lothar.com>
3331 * NEWS: update for the 0.6.1 release
3332 * MANIFEST.in: add new files
3334 * README (INSTALLATION): explain how to enable the extra VC tests
3336 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3337 level to, so old pickled builds can be displayed ok
3339 2004-11-22 Brian Warner <warner@lothar.com>
3341 * NEWS: summarize updates since last release
3343 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3344 Yoz Grahame. Closes SF#1050138.
3346 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3349 * buildbot/process/step_twisted.py (Trial): update docs a bit
3351 * docs/factories.xhtml: fix Trial factory docs to match reality.
3354 * buildbot/process/factory.py (Trial.__init__): add args for
3355 randomly= and recurse=, making them available to instantiators
3356 instead of only to subclassers. Closes: SF#1049759.
3358 2004-11-15 Brian Warner <warner@lothar.com>
3360 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3361 try to teach the Quick factory to use multiple versions of python
3363 2004-11-12 Brian Warner <warner@lothar.com>
3365 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3366 safer w32-compatible approach, and only use it on windows
3367 (BuildStatus.saveYourself): same
3369 2004-11-11 Brian Warner <warner@lothar.com>
3371 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3372 it: one string merge per chunk. There are now separate .entries
3373 and .runEntries lists: when enumerating over all chunks, make sure
3375 * buildbot/test/test_status.py (Log): more tests
3377 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3378 chunks together, up to 10kb per chunk. This ought to cut down on
3379 the CPU-burning overhead of large log files. Thanks to Alexander
3380 Staubo for spotting the problem.
3381 * buildbot/test/test_status.py (Log): tests for same
3383 2004-11-10 Brian Warner <warner@lothar.com>
3385 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3386 header to outbound mail
3387 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3389 2004-11-08 Brian Warner <warner@lothar.com>
3391 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3392 can't do os.rename() onto an existing file, so catch the exception
3393 and unlink the target file first. This introduces a slight window
3394 where the existing file could be lost, but the main failure case
3395 (disk full) should still be handled safely.
3396 (BuildStatus.saveYourself): same
3398 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3399 separator character instead of os.sep, because the filenames being
3400 split here are coming from the VC system, which can have a
3401 different pathname convention than the local host. This should
3402 help a buildmaster running on windows that uses a CVS repository
3403 which runs under unix.
3404 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3406 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3407 when there are no test failures to be parsed
3409 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3410 instead of the unix-specific os.system("cp"), thanks to Elliot
3411 Murphy for this and the other buildbot-vs-windows catches.
3412 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3414 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3415 echo the command as it is run
3417 * setup.py: install sample.mk too, not just sample.cfg
3418 (scripts): install contrib/windows/buildbot.bat on windows
3420 2004-11-07 Brian Warner <warner@lothar.com>
3422 * buildbot/process/builder.py (Builder._detached): clear the
3423 self.currentBuild reference, otherwise the next build will be
3424 skipped because we think the Builder is already in use.
3426 * docs/examples/twisted_master.cfg: update to match current usage
3427 on the Twisted buildbot
3429 2004-10-29 Brian Warner <warner@lothar.com>
3431 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3433 2004-10-28 Brian Warner <warner@lothar.com>
3435 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3436 have separate doVCUpdate/doVCFull methods. Catch an update failure
3437 and respond by clobbering the source directory and re-trying. This
3438 will handle local changes (like replacing a file with a directory)
3439 that will cause CVS and SVN updates to fail.
3440 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3442 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3445 2004-10-19 Brian Warner <warner@lothar.com>
3447 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3449 * buildbot/status/html.py (StatusResourceTestResults): display any
3450 TestResults that the Build might have
3451 (StatusResourceTestResult): and the logs for each TestResult
3452 (StatusResourceBuild): add link from the per-build page
3454 2004-10-15 Brian Warner <warner@lothar.com>
3456 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3457 the 'problems' portion of stdout, add TestResults to our build
3458 * buildbot/test/test_twisted.py (Parse.testParse): test it
3460 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3461 to retrieve a dict of accumulated test results
3462 (ITestResult): define what a single test result can do
3463 * buildbot/status/builder.py (TestResult): implement ITestResult
3464 (BuildStatus.getTestResults): retrieve dict of TestResults
3465 (BuildStatus.addTestResult): add TestResults
3466 * buildbot/test/test_status.py (Results.testAddResults): test it
3468 2004-10-14 Brian Warner <warner@lothar.com>
3470 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3471 instead of os.system("rm -rf") for win32 portability
3473 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3474 SignalMixin instead of starting/stopping the reactor, which is
3475 likely to cause problems with other tests
3477 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3478 self.copyComplete() call. Yoz Grahame makes the catch.
3480 * contrib/windows/buildbot.bat: helper script to deal with path
3481 issues. Thanks to Yoz Grahame.
3483 * buildbot/master.py (BuildMaster.startService): don't register a
3484 SIGHUP handler if the signal module has no SIGHUP attribute.
3485 Apparently win32 does this.
3487 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3489 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3490 test if the reactor can't offer UNIX sockets
3492 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3493 error introduced in the last commit. We really need that
3496 2004-10-12 Brian Warner <warner@lothar.com>
3498 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3499 when describing a maildir source. Thanks to Stephen Davis.
3501 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3504 * buildbot/scripts/runner.py (createMaster): install Makefile too
3505 (start): add --no_save to 'start' command
3506 * buildbot/scripts/sample.mk: simple convenience Makefile with
3507 start/stop/reload targets
3509 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3512 2004-09-30 Brian Warner <warner@lothar.com>
3514 * setup.py: Releasing buildbot-0.6.0
3516 2004-09-30 Brian Warner <warner@lothar.com>
3518 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3519 test_trial.py from the source tarball until support is complete.
3521 * NEWS: update for 0.6.0 release
3522 * buildbot/__init__.py (version): same
3525 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3526 'source' command to tell users where to get the Buildbot source
3528 * docs/examples/*.cfg: update to modern standards
3530 * NEWS: update for release
3532 * buildbot/scripts/runner.py (createMaster): remove the
3533 -shutdown.tap stuff now that it isn't necessary
3535 (start): launch buildbot.tap, not buildbot-shutdown.tap
3538 * buildbot/status/mail.py (Domain): shorten class name
3539 (MailNotifier): if lookup= is a string, pass it to Domain()
3540 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3541 (Mail.testBuild2): test the string-to-Domain shortcut
3542 (Mail.testMail): fix test
3545 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3548 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3549 more attributes on load
3550 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3551 to accomodate the whole waterfall page at once, and the thrashing
3552 results in a lot of unnecessary loads
3553 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3554 (BuilderStatus.saveYourself): same
3555 (BuilderStatus.eventGenerator): stop generating on the first missing
3556 build. We assume that saved builds are deleted oldest-first.
3557 (BuildStepStatus.__getstate__): .progress might not exist
3559 * buildbot/changes/changes.py (ChangeMaster): make it
3560 serializable, in $masterdir/changes.pck
3561 (ChangeMaster.stopService): save on shutdown
3562 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3563 * buildbot/test/test_config.py: load Changes before config file
3566 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3567 "Oh my god, you killed the command" header on a separate line
3569 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3570 skip over corrupted build pickles
3571 (BuilderStatus.getFullBuildByNumber): same
3572 (BuilderStatus.eventGenerator): skip over unavailable builds
3573 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3574 do an atomic rename. This prevents a corrupted pickle when some
3575 internal serialization error occurs.
3576 (BuilderStatus.saveYourself): same
3578 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3579 the timeout for shell commands, it got lost somehow
3581 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3582 run out of build steps, return the rest of the builder events
3584 * buildbot/interfaces.py (IBuilderControl.ping): add method
3586 * buildbot/process/builder.py (BuilderControl.ping): move
3587 slave-ping to BuilderControl, and fix the failure case in the
3588 process (Event.finish() is the verb, Event.finished is the noun).
3590 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3591 through the BuilderControl instead of the BuilderStatus
3592 (EventBox): add adapter for builder.Event, allowing builder events to
3593 be displayed in the waterfall display
3595 * buildbot/master.py (BotMaster.stopService): add a 'master
3596 shutdown' event to the builder's log
3597 (BuildMaster.startService): and a 'master started' on startup
3599 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3600 builder events into the BuildStep event stream
3601 (Status.builderAdded): add a 'builder created' event
3604 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3605 command to announce the completion of a running build
3606 (IrcStatusBot.command_FORCE): announce when the build finishes
3608 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3609 don't evict unfinished builds from the cache: they must stay in
3610 the full-cache until their logfiles have stopped changing. Make
3611 sure the eviction loop terminates if an unfinished build was hit.
3612 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3613 This lets exceptions be dumped in an email status message. Really
3614 we need LogFiles which contain both text and HTML, instead of two
3616 (BuildStatus.__getstate__): handle self.finished=False
3617 (Status.builderAdded): if the pickle is corrupted, abandon the
3618 history and create a new BuilderStatus object.
3620 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3621 self.progress attribute, helped one test which doesn't fully set
3622 up the Build object.
3624 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3625 IStatusLog methods into an Interface that is implemented by "stub"
3626 logs, for which all the actual text chunks are on disk (in the
3627 pickled Build instance). To show the log contents, you must first
3628 adapt the stub log to a full IStatusLog object.
3630 * buildbot/status/builder.py (LogFileStub): create separate stub
3631 log objects, which can be upgraded to a real one if necessary.
3632 (LogFile): make them persistable, and let them stubify themselves
3634 (BuildStepStatus): same
3636 (BuildStatus.saveYourself): save the whole build out to disk
3637 (BuilderStatus): make it persistable
3638 (BuilderStatus.saveYourself): save the builder to disk
3639 (BuilderStatus.addFullBuildToCache): implement two caches which
3640 hold Build objects: a small one which holds full Builds, and a
3641 larger one which holds "stubbed" Builds (ones with their LogFiles
3642 turned into LogFileStubs). This reduces memory usage by the
3643 buildmaster by not keeping more than a few (default is 2) whole
3644 build logs in RAM all the time.
3645 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3647 (BuilderStatus.eventGenerator): rewrite since .builds went away
3648 (BuilderStatus.buildStarted): remove the .builds array. Add the
3649 build to the "full" cache when it starts.
3650 (BuilderStatus._buildFinished): save the build to disk when it
3652 (Status): give it a basedir (same as the BuildMaster's basedir)
3653 where the builder pickles can be saved
3654 (Status.builderAdded): create the BuilderStatus ourselves, by
3655 loading a pickle from disk (or creating a new instance if there
3656 was none on disk). Return the BuilderStatus so the master can glue
3657 it into the new Builder object.
3659 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3660 all BuilderStatuses to save themselves out to disk. This is in
3661 lieu of saving anything important in the main Application pickle
3662 (the -shutdown.tap file).
3663 (BuildMaster.__init__): give Status() a basedir for its files
3664 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3665 to get the BuilderStatus, then give it to the Builder (instead of
3666 doing it the other way around). It's ok if the status announces
3667 the new Builder before it's really ready, as the outside world can
3668 only see the BuilderStatus object anyway (and it is ready before
3669 builderAdded returns). Use the builder's "builddir" (which
3670 normally specifies where the slave will run the builder) as the
3671 master's basedir (for saving serialized builds).
3673 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3674 coerce the logfile to IStatusLog before trying to get the text
3675 chunks out of it. This will pull the full (non-stubified) Build in
3676 from disk if necessary.
3677 (TextLog): fix the adapter registration
3679 * buildbot/test/test_control.py (Force.setUp): create the basedir
3680 * buildbot/test/test_web.py: same
3681 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3682 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3683 * buildbot/test/test_run.py (Run.testMaster): same
3684 (Status.setUp): same
3686 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3688 * buildbot/status/html.py (Waterfall.__init__): store actual
3689 allowForce flag passed in rather than using True for everyone;
3690 make sure setting it to False doesn't cause a NameError
3692 (StatusResourceBuilder.__init__) add the builder name to the page
3694 (StatusResourceBuilder.body) move HTML generation for a name/value
3695 row into a helper method (StatusResourceBuilder.make_row); only
3696 generate the "Force Build" form if allowForce was True and the
3697 slave is connected. Use class attributes in the generated HTML to
3698 spread a little CSS-joy.
3700 2004-09-28 Brian Warner <warner@lothar.com>
3702 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3703 warning-scanner to not ignore things like
3704 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3706 * buildbot/status/html.py (StatusResource.control): add some
3707 class-level values for .control in an attempt to make upgrading
3710 * buildbot/util.py (ComparableMixin): survive missing attributes,
3711 such as when a class is modified and we're comparing old instances
3714 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3715 failure handling, remove a redundant try/except block. Don't
3716 return the full traceback to the IRC channel.
3717 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3718 error messages. Get ETA properly.
3720 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3721 the reason, since (at least) IRC message will have <> in them.
3722 (StatusResourceBuilder.__init__): take an IBuilderControl
3723 (StatusResourceBuilder.force): use the IBuilderControl we get in
3724 the constructor instead of trying to make our own. Catch the
3725 new exceptions and ignore them for now (until we make an
3726 intermediate web page where we could show the error message)
3727 (StatusResource): create with an IControl, use it to give an
3728 IBuilderControl to all children
3729 (Waterfall): take an allowForce= option, pass an IControl object
3730 to StatusResource if it is True
3732 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3734 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3735 catch new exceptions and return string forms
3737 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3738 * buildbot/process/builder.py (Builder.forceBuild): raise them
3739 * buildbot/test/test_control.py (Force.testNoSlave): new test
3740 (Force.testBuilderInUse): same
3743 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3745 * buildbot/test/test_run.py: use IControl
3746 * buildbot/test/test_vc.py: same
3748 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3749 to use IControl. Still offline.
3750 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3752 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3753 who=None so periodic builds don't send out status mail
3754 (Builder.forceBuild): include reason in the log message
3755 (BuilderControl.forceBuild): rename 'name' to 'who'
3757 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3758 'who' parameter, but make it None by default so builds forced by
3759 slave admins don't cause status mail to be sent to anybody
3760 (BotMaster.forceBuild): same. this method is deprecated.
3761 (DebugPerspective.perspective_forceBuild): same, use IControl.
3762 (DebugPerspective.perspective_fakeChange): use IControl..
3763 (Dispatcher.requestAvatar): .. so don't set .changemaster
3765 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3766 parameter to avoid confusion with the name of the builder
3769 * buildbot/status/mail.py: refine comment about needing 2.3
3771 * buildbot/status/html.py: move all imports to the top
3773 * buildbot/test/test_control.py: test new interfaces
3774 * buildbot/test/test_run.py (Status): handle new interfaces
3775 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3777 * buildbot/process/base.py (BuildControl): implement IBuildControl
3778 and its lonely getStatus() method
3780 * buildbot/process/builder.py (BuilderControl): implement
3781 IBuilderControl, obtained by adapting the Builder instance
3782 (Builder.startBuild): return a BuilderControl instead of a
3783 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3784 accomplish the same thing.
3786 * buildbot/master.py: move all import statements to the top
3787 (Control): implement IControl, obtained by adapting the
3788 BuildMaster instance.
3790 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3791 IBuildControl. These are used to force builds. Eventually they
3792 will provide ways to reconfigure the Builders, pause or abandon a
3793 Build, and perhaps control the BuildMaster itself.
3795 2004-09-26 Brian Warner <warner@lothar.com>
3797 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3798 ends up comparing us against something without a .__class__
3800 2004-09-24 Brian Warner <warner@lothar.com>
3802 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3805 * Makefile: add 'deb-snapshot' target, to create a timestamped
3808 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3810 2004-09-23 Brian Warner <warner@lothar.com>
3812 * buildbot/__init__.py (version): move version string here
3813 * setup.py: get version string from buildbot.version
3814 * buildbot/status/html.py (WaterfallStatusResource.body): add
3815 buildbot version to the page footer
3816 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3819 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3820 slaves, let the second know where the first one is coming from
3821 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3822 see our exceptions. It would be nice if there were a way to just
3823 send them the exception type and value, not the full traceback.
3826 * buildbot/status/mail.py (MailNotifier): add a new argument
3827 sendToInterestedUsers=, which can be set to False to disable the
3828 usual send-to-blamelist behavior.
3829 (top): handle python-2.2 which has no email.MIMEMultipart
3830 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3831 (MailNotifier.disownServiceParent): unsubscribe on removal
3833 * buildbot/test/test_status.py (Mail.testBuild2): test it
3836 * buildbot/status/progress.py (Expectations.wavg): tolerate
3837 current=None, which happens when steps start failing badly
3838 * buildbot/test/test_status.py (Progress.testWavg): test for it
3840 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3841 doesn't understand args['revision'], emit a warning instead of
3842 bailing completely. Updating to -rHEAD is probably close enough.
3844 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3846 * buildbot/test/test_status.py: at least import bb.status.client
3847 even if we don't have any test coverage for it yet
3849 * contrib/svn_buildbot.py: don't require python2.3
3850 (main): wait, do require it (for sets.py), but explain how to
3851 make it work under python2.2
3853 2004-09-23 Brian Warner <warner@lothar.com>
3855 * contrib/svn_buildbot.py: include the revision number in the Change
3857 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3858 using util.now() because FreshCVS is a realtime service
3860 * buildbot/status/event.py: delete dead code
3861 * buildbot/process/step.py: don't import dead Event class
3862 * buildbot/process/step_twisted.py: same
3863 * buildbot/status/builder.py: same
3864 * buildbot/status/client.py: same
3866 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3868 * buildbot/changes/changes.py (Change): set .when from an __init__
3869 argument (which defaults to now()), rather than having
3870 ChangeMaster.addChange set it later.
3871 (ChangeMaster.addChange): same
3873 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3874 (parseSyncmail): same. Just use util.now() for now.
3875 (parseBonsaiMail): parse the timestamp field for when=
3877 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3878 instead of setting .when after the fact
3882 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3883 results when the target project uses retrial. Still under
3885 * buildbot/test/test_trial.py: same
3887 2004-09-21 Brian Warner <warner@lothar.com>
3889 * buildbot/status/mail.py (MailNotifier.__init__): include
3890 success/warnings/failure in the Subject line
3891 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3892 use step.logname for the addLogs=True attachment filenames
3893 * buildbot/test/test_status.py (Mail): test Subject lines
3894 (Mail.testLogs): test attachment filenames
3896 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3897 accept a 'who' argument from the debug tool
3898 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3899 * contrib/debug.glade: add text box to set 'who'
3901 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3902 .getBuilderName with .getBuilder().getName(), more flexible
3903 (IStatusLog.getName): logs have short names, but you can prefix
3904 them with log.getStep().getName() to make them more useful
3905 * buildbot/status/builder.py: same
3906 * buildbot/status/client.py: same
3907 * buildbot/status/html.py: same
3908 * buildbot/test/test_run.py (Status.testSlave): same
3909 * buildbot/process/step.py: tweak logfile names
3911 * buildbot/status/mail.py (MailNotifier): add lookup, change
3912 argument to extraRecipients. The notifier is now aimed at sending
3913 mail to the people involved in a particular build, with additional
3914 constant recipients as a secondary function.
3916 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3917 including slow-lookup and failing-lookup. Make sure the blamelist
3918 members are included.
3920 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3921 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3922 (IBuildStatus.getInterestedUsers): new method
3923 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3924 * buildbot/status/client.py (remote_getResponsibleUsers): same
3925 * buildbot/status/html.py (StatusResourceBuild.body): same
3926 * buildbot/test/test_run.py (Status.testSlave): same
3928 2004-09-20 Brian Warner <warner@lothar.com>
3930 * docs/users.xhtml: update concepts
3932 * Makefile: add a convenience makefile, for things like 'make
3933 test'. It is not included in the source tarball.
3935 2004-09-16 Brian Warner <warner@lothar.com>
3937 * NEWS: mention /usr/bin/buildbot, debian/*
3939 * debian/*: add preliminary debian packaging. Many thanks to
3940 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3941 it considerably since it left their hands, I am responsible for
3942 all breakage that's resulted.
3944 * bin/buildbot: create a top-level 'buildbot' command, to be
3945 installed in /usr/bin/buildbot . For now it's just a simple
3946 frontend to mktap/twistd/kill, but eventually it will be the entry
3947 point to the 'try' command and also a status client. It is also
3948 intended to support the upcoming debian-packaging init.d scripts.
3949 * buildbot/scripts/runner.py: the real work is done here
3950 * buildbot/scripts/__init__.py: need this too
3951 * buildbot/scripts/sample.cfg: this is installed in new
3952 buildmaster directories
3953 * setup.py: install new stuff
3955 2004-09-15 Brian Warner <warner@lothar.com>
3957 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3958 'file:' schema (the version shipped with OS-X was built without the
3960 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3961 updates the log-timestamp, to make sure it isn't still running after
3964 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3965 values to the config file.
3966 * docs/examples/hello.cfg: add examples
3967 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3968 * buildbot/status/builder.py (Status.getProjectURL): implement them
3969 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3970 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3971 * buildbot/status/html.py (WaterfallStatusResource): display them
3974 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3975 certain error cases don't suffer a secondary exception.
3976 (top): Skip tests if the corresponding VC tool is not installed.
3978 * buildbot/process/factory.py (Trial): introduce separate
3979 'buildpython' and 'trialpython' lists, since trialpython=[] is
3980 what you want to invoke /usr/bin/python, whereas ./setup.py is
3981 less likely to be executable. Add env= parameter to pass options
3982 to test cases (which is how I usually write tests, I don't know if
3983 anyone else does it this way).
3985 * buildbot/process/step_twisted.py (Trial): handle python=None.
3986 Require 'testpath' be a string, not a list. Fix tests= typo.
3987 (Trial.start): sanity-check any PYTHONPATH value for stringness.
3989 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3990 way to deal with the possibility of removing the disconnect notify
3992 (CVS): add a 'login' parameter to give a password to 'cvs login',
3993 commonly used with pserver methods (where pw="" or pw="guest")
3995 * buildbot/slave/commands.py (SourceBase): move common args
3996 extraction and setup() to __init__, so everything is ready by the
3997 time setup() is called
3998 (CVS.start): call 'cvs login' if a password was supplied
3999 (ShellCommand): special-case PYTHONPATH: prepend the master's
4000 value to any existing slave-local value.
4002 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4003 don't have a remote, mark the builder as Offline. This whole
4004 function should probably go away and be replaced by individual
4006 (Builder.buildFinished): return the results to the build-finished
4007 deferred callback, helps with testing
4009 2004-09-14 Brian Warner <warner@lothar.com>
4011 * buildbot/test/test_vc.py: put all the repositories needed to run
4012 the complete tests into a single small (1.3MB) tarball, so I can
4013 make that tarball available on the buildbot web site. Test HTTP
4014 access (for Arch and Darcs) by spawning a temporary web server
4015 while the test runs.
4017 * docs/users.xhtml: new document, describe Buildbot's limited
4018 understanding of different human users
4020 * buildbot/test/test_vc.py: rearrange test cases a bit
4022 * buildbot/process/step_twisted.py (Trial): handle testpath=
4023 * buildbot/process/factory.py (Trial): update to use step.Trial
4025 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4027 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4028 the overall build text (which gives you 'failed 2 tests' rather
4030 (BuildStepStatus.text2): default to [], not None
4032 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4035 2004-09-12 Brian Warner <warner@lothar.com>
4037 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4038 log the whole exception if it's just an AttributeError (old slave)
4040 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4041 so (e.g.) sub-commands can be run in the right directory.
4042 (ShellCommand.start): accept an optional errorMessage= argument
4043 to make life easier for SVN.start
4044 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4046 (ShellCommand.start): move ['dir'] compatibility hack..
4047 (RemoteShellCommand.start): .. to here so everyone can use it
4049 * buildbot/process/step_twisted.py (Trial): use .workdir
4051 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4052 text displayed when debuild fails completely
4053 (Trial): snarf _trial_temp/test.log from the slave and display it
4055 2004-09-11 Brian Warner <warner@lothar.com>
4057 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4059 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4060 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4062 * buildbot/process/step.py (ShellCommand): call .createSummary
4063 before .evaluateCommand instead of the other way around. This
4064 makes it slightly easier to count warnings and then use that to
4065 set results=WARNINGS
4066 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4068 * buildbot/process/base.py (Build.buildFinished): update status
4069 before doing progress. It's embarrassing for the build to be stuck
4070 in the "building" state when an exceptions occurs elsewhere..
4072 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4073 python2.2 doesn't have 'sum'
4075 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4076 to prevent clients from accidentally sorting it
4078 * buildbot/master.py (Manhole): add username/password
4079 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4080 c['manholePort'], deprecate old usage
4081 * docs/config.xhtml: document c['manhole']
4082 * docs/examples/hello.cfg: show example of using a Manhole
4085 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4086 pretend the slave is up to date
4088 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4089 the module, overlaps with 'log', the local variable
4091 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4093 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4094 new method to let Steps find out the version of their
4095 corresponding SlaveCommand.
4096 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4097 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4098 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4100 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4101 (Arch.startVC): same
4102 (P4Sync.startVC): same
4104 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4105 Deferred so we can catch errors in remote_startCommand
4106 (RemoteShellCommand.start): same
4108 * docs/examples/twisted_master.cfg: update sample config file
4110 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4111 after connectionMade() is called, not before. Close stdin at that
4114 * buildbot/process/process_twisted.py: update to use Trial, clean
4115 up argument passing (move to argv arrays instead of string
4118 * buildbot/process/step_twisted.py (Trial): new step to replace
4119 RunUnitTests, usable by any trial-using project (not just
4120 Twisted). Arguments have changed, see the docstring for details.
4122 * buildbot/process/base.py (Build.startBuild): this now returns a
4123 Deferred. Exceptions that occur during setupBuild are now
4124 caught better and lead to fewer build_status weirdnesses, like
4125 finishing a build that was never started.
4126 (Build.buildFinished): fire the Deferred instead of calling
4127 builder.buildFinished directly. The callback argument is this
4128 Build, everything else can be extracted from it, including the
4129 new build.results attribute.
4130 * buildbot/process/builder.py (Builder.startBuild): same
4131 (Builder.buildFinished): same, extract results from build
4133 * buildbot/process/step.py (ShellCommands): remove dead code
4135 2004-09-08 Brian Warner <warner@lothar.com>
4137 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4138 doesn't try to use the leftover patched workdir
4139 (SourceStamp): test source-stamp computation for CVS and SVN
4141 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4142 patched workdir ('touch .buildbot-patched') so we don't try to
4144 (SourceBase.start): add ['revision'] for all Source steps
4145 (CVS): change args: use ['branch'] for -r, remove ['files']
4146 (CVS.buildVC): fix revision/branch stuff
4147 (SVN): add revision stuff
4149 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4150 kwargs (except 'workdir') to avoid silent spelling errors
4151 (ShellCommand.__init__): same
4152 (Source): new base class for CVS/SVN/etc. Factor out everything
4153 common, add revision computation (perform the checkout with a -D
4154 DATE or -r REVISION that gets exactly the sources described by the
4155 last Change), overridable with step.alwaysUseLatest. Add patch
4156 handling (build.getSourceStamp can trigger the use of a base
4157 revision and a patch).
4158 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4159 * docs/steps.xhtml: update docs
4160 * docs/source.xhtml: mention .checkoutDelay
4161 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4163 * buildbot/process/base.py (Build.setSourceStamp): add a
4164 .sourceStamp attribute to each Build. If set, this indicates that
4165 the build should be done with something other than the most
4166 recent source tree. This will be used to implement "try" builds.
4167 (Build.allChanges): new support method
4168 (Build.lastChangeTime): remove, functionality moved to Source steps
4169 (Build.setupBuild): copy the Step args before adding ['workdir'],
4170 to avoid modifying the BuildFactory (and thus triggering spurious
4174 * buildbot/status/html.py: rename s/commits/changes/
4175 (StatusResourceChanges): same
4176 (CommitBox.getBox): same, update URL
4177 (WaterfallStatusResource): same
4178 (StatusResource.getChild): same
4180 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4181 * contrib/debug.glade: add optional 'revision' to the fakeChange
4183 * buildbot/changes/changes.py (html_tmpl): display .revision
4184 (ChangeMaster.addChange): note .revision in log
4185 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4186 accept a ['revision'] attribute
4188 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4190 * buildbot/master.py (BotMaster.getPerspective): update the
4191 .connected flag in SlaveStatus when it connects
4192 (BotMaster.detach): and when it disconnects
4193 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4194 (BuildMaster.loadConfig_Builders): walk old list correctly
4196 * buildbot/test/test_config.py: fix prefix= usage
4198 2004-09-06 Brian Warner <warner@lothar.com>
4202 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4203 poll a P4 depot looking for recent changes. Thanks to Dave
4204 Peticolas for the contribution. Probably needs some testing after
4207 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4208 requires manual client setup for each buildslave. Rather
4209 experimental. Thanks again to Dave Peticolas.
4210 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4212 * buildbot/changes/changes.py (Change): add a .revision attribute,
4213 which will eventually be used to generate source-stamp values.
4215 * buildbot/process/step.py (RemoteCommand.start): use
4216 notifyOnDisconnect to notice when we lose the slave, then treat it
4217 like an exception. This allows LogFiles to be closed and the build
4218 to be wrapped up normally. Be sure to remove the disconnect
4219 notification when the step completes so we don't accumulate a
4220 bazillion such notifications which will fire weeks later (when the
4221 slave finally disconnects normally). Fixes SF#915807, thanks to
4222 spiv (Andrew Bennetts) for the report.
4223 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4224 really isn't Logged- specific
4225 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4226 header, since it's almost always going to be appended to an
4228 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4229 update test to handle use of notifyOnDisconnect
4231 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4232 don't clear .ETA and .currentBuild when going offline, let the
4233 current build clean up after itself
4235 * buildbot/process/builder.py (Builder.detached): wait a moment
4236 before doing things like stopping the current build, because the
4237 current step will probably notice the disconnect and cleanup the
4239 * buildbot/test/test_run.py (Status.tearDown): update test to
4240 handle asynchronous build-detachment
4242 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4244 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4245 hush a debug message
4247 2004-09-05 Brian Warner <warner@lothar.com>
4249 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4250 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4251 kernels do this: the fcntl module has the F_NOTIFY constant, but
4252 the kernel itself doesn't support the operation. Thanks to Olly
4253 Betts for spotting the problem.
4255 * buildbot/process/step.py (Darcs): new source-checkout command
4256 (Arch): new source-checkout command
4257 (todo_P4): fix constructor syntax, still just a placeholder
4258 * buildbot/test/test_vc.py (VC.testDarcs): test it
4259 (VC.testDarcsHTTP): same, via localhost HTTP
4261 (VC.testArchHTTP): same
4262 * NEWS: mention new features
4264 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4265 which tells the step to stash stdout text locally (in .stdout).
4266 Slave-side Commands can use this to make decisions based upon the
4267 output of the the ShellCommand (not just the exit code).
4268 (Darcs): New source-checkout command
4269 (Arch): New source-checkout command, uses .keepStdout in one place
4270 where it needs to discover the archive's default name.
4272 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4273 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4274 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4276 * buildbot/process/step.py (ShellCommand.describe): add an
4277 alternate .descriptionDone attribute which provides descriptive
4278 text when the step is complete. .description can be ["compiling"],
4279 for use while the step is running, then .descriptionDone can be
4280 ["compile"], used alone when the step succeeds or with "failed" when
4281 it does not. Updated other steps to use the new text.
4282 * buildbot/process/step_twisted.py: same
4283 * buildbot/test/test_run.py: update tests to match
4285 2004-08-30 Brian Warner <warner@lothar.com>
4287 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4288 (CVS.__init__): send 'patch' argument to slave
4289 (CVS.start): don't create the LoggedRemoteCommand until start(),
4290 so we can catch a .patch added after __init__
4291 (SVN.__init__): add 'patch' to SVN too
4294 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4295 argument, to let commands push data into the process' stdin pipe.
4296 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4297 is in use, since closing a PTY doesn't really affect the process
4298 in the right way (in particular, I couldn't run /usr/bin/patch
4300 (SourceBase.doPatch): handle 'patch' argument
4302 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4305 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4306 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4308 * buildbot/master.py (BotPerspective.got_commands): get command
4309 versions from slave, give to each builder
4310 * buildbot/process/builder.py (Builder.attached): stash slave
4311 command versions in .remoteCommands
4313 * docs/steps.xhtml: bring docs in-line with reality
4315 * buildbot/process/step.py (CVS.__init__): more brutal
4316 compatibility code removal
4317 (SVN.__init__): same
4319 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4320 (SlaveShellCommand.start): require ['workdir'] argument, remove
4321 the ['dir'] fallback (compatibility will come later)
4322 (SourceBase): update docs
4323 (SourceBase.start): remove ['directory'] fallback
4326 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4327 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4328 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4330 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4331 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4332 code.. I will figure out 0.5.0-compatibility hooks later)
4334 2004-08-30 Brian Warner <warner@lothar.com>
4336 * buildbot/process/process_twisted.py: rewrite in terms of new
4337 BuildFactory base class. It got significantly shorter. Yay
4340 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4341 work with the new "self.build isn't nailed down until we call
4342 step.start()" scheme: specifically, __init__ is called before the
4343 build has decided on which Changes are going in, so we don't scan
4344 build.allFiles() for .xhtml files until start()
4345 (HLint.commandComplete): use getText(), not getStdout()
4346 (RunUnitTests.start): same: don't use .build until start()
4347 (RunUnitTests.describe): oops, don't report (None) when using
4349 (RunUnitTests.commandComplete): use getText()
4350 (RunUnitTests.createSummary): same
4351 (BuildDebs.commandComplete): same
4353 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4354 set args['command'] until start(), since our BuildStep is allowed
4355 to change their mind up until that point
4356 (TreeSize.commandComplete): use getText(), not getStdout()
4358 * docs/examples/twisted_master.cfg: update to current standards
4360 * docs/factories.xhtml: update
4361 * buildbot/process/factory.py: implement all the common factories
4362 described in the docs. The Trial factory doesn't work yet, and
4363 I've probably broken all the process_twisted.py factories in the
4364 process. There are compatibility classes left in for things like
4365 the old BasicBuildFactory, but subclasses of them are unlikely to
4367 * docs/examples/glib_master.cfg: use new BuildFactories
4368 * docs/examples/hello.cfg: same
4370 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4371 explicit 'workdir' args
4373 * buildbot/process/base.py (BuildFactory): move factories to ..
4374 * buildbot/process/factory.py (BuildFactory): .. here
4375 * buildbot/process/process_twisted.py: handle move
4376 * buildbot/test/test_config.py: same
4377 * buildbot/test/test_run.py: same
4378 * buildbot/test/test_steps.py: same
4379 * buildbot/test/test_vc.py: same
4380 * docs/factories.xhtml: same
4382 * NEWS: mention config changes that require updating master.cfg
4384 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4385 argument to all steps that weren't given one already, pointing at
4386 the "build/" directory.
4388 * docs/examples/hello.cfg: remove explicit 'workdir' args
4390 * docs/factories.xhtml: document standard BuildFactory clases,
4391 including a bunch which are have not yet been written
4393 2004-08-29 Brian Warner <warner@lothar.com>
4395 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4396 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4397 buildbot.status.builder so they aren't quite so internal
4398 * buildbot/process/base.py, buildbot/process/builder.py: same
4399 * buildbot/process/maxq.py, buildbot/process/step.py: same
4400 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4401 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4402 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4404 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4405 to handle new getLogs()-returns-list behavior
4406 (StatusResourceBuildStep.getChild): same
4407 (StepBox.getBox): same
4408 (WaterfallStatusResource.phase0): same
4410 * docs/source.xhtml: document how Buildbot uses version-control
4411 systems (output side: how we get source trees)
4412 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4413 systems (input side: how we learn about Changes)
4415 * buildbot/master.py (Manhole): use ComparableMixin
4416 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4417 * buildbot/changes/mail.py (MaildirSource): same
4418 * buildbot/status/client.py (PBListener): same
4419 * buildbot/status/html.py (Waterfall): same
4420 * buildbot/status/words.py (IRC): same
4422 * NEWS: start describing new features
4424 * buildbot/status/mail.py (MailNotifier): finish implementation.
4425 The message body is still a bit sparse.
4426 * buildbot/test/test_status.py (Mail): test it
4428 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4429 and __hash__ methods I wind up adding everywhere. Specifically
4430 intended to support the buildbot config-file update scheme where
4431 we compare, say, the old list of IStatusTargets against the new
4432 one and don't touch something which shows up on both lists.
4433 * buildbot/test/test_util.py (Compare): test case for it
4435 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4436 return a list instead of a dict
4437 (IBuildStepStatus.getLogs): same. The idea is that steps create
4438 logs with vaguely unique names (although their uniqueness is not
4439 guaranteed). Thus a compilation step should create its sole
4440 logfile with the name 'compile', and contribute it to the
4441 BuildStatus. If a step has two logfiles, try to create them with
4442 different names (like 'test.log' and 'test.summary'), and only
4443 contribute the important ones to the overall BuildStatus.
4444 * buildbot/status/builder.py (Event.getLogs): same
4445 (BuildStepStatus): fix default .text and .results
4446 (BuildStepStatus.addLog): switch to list-like .getLogs()
4447 (BuildStepStatus.stepFinished): same
4448 (BuildStatus.text): fix default .text
4449 (BuildStatus.getLogs): temporary hack to return all logs (from all
4450 child BuildStepStatus objects). Needs to be fixed to only report
4451 the significant ones (as contributed by the steps themselves)
4452 * buildbot/test/test_run.py: handle list-like .getLogs()
4453 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4455 2004-08-28 Brian Warner <warner@lothar.com>
4457 * buildbot/process/builder.py (Builder.attached): serialize the
4458 attachment process, so the attach-watcher isn't called until the
4459 slave is really available. Add detached watchers too, which makes
4462 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4464 * buildbot/test/test_swap.py: remove dead code
4466 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4467 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4468 sort of as if the command being run exited with a -1. There may
4469 still be some holes in this scheme.
4470 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4471 -r option appears before the module list
4472 * buildbot/process/step.py (CVS): add 'revision' argument
4474 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4475 when sending updates or stepComplete messages to the master, since
4476 we don't currently care whether they arrive or not. When we revamp
4477 the master/slave protocol to really resume interrupted builds,
4478 this will need revisiting.
4479 (lostRemote): remove spurious print
4481 * buildbot/master.py (BotPerspective.attached): serialize the
4482 new-builder interrogation process, to make testing easier
4483 (BotMaster.waitUntilBuilderDetached): convenience function
4485 * buildbot/status/builder.py (BuilderStatus): prune old builds
4486 (BuildStatus.pruneSteps): .. and steps
4487 (BuildStepStatus.pruneLogs): .. and logs
4488 (BuilderStatus.getBuild): handle missing builds
4489 * buildbot/status/html.py (StatusResourceBuild.body): display build
4490 status in the per-build page
4491 (BuildBox.getBox): color finished builds in the per-build box
4493 2004-08-27 Brian Warner <warner@lothar.com>
4495 * buildbot/status/mail.py (MailNotifier): new notification class,
4498 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4499 variants of a common base class which handles all the mode= logic
4501 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4503 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4505 2004-08-26 Brian Warner <warner@lothar.com>
4507 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4510 * buildbot/test/test_run.py: update to new Logfile interface, new
4511 buildbot.slave modules
4512 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4514 * MANIFEST.in: new sample config file
4515 * docs/examples/hello.cfg: same
4517 * buildbot/process/step_twisted.py: remove dead import
4519 * buildbot/process/step.py (RemoteCommand.run): catch errors
4521 (RemoteCommand.remote_update): ignore updates that arrive after
4523 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4524 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4525 the responsibilities of the subclass's methods
4526 (BuildStep.failed): catch errors during failure processing
4527 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4528 (CVS): move to a mode= argument (described in docstring), rather
4529 than the ungainly clobber=/export=/copydir= combination.
4530 (SVN): add mode= functionality to SVN too
4531 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4533 * buildbot/process/base.py (Build.startNextStep): catch errors
4534 during s.startStep()
4536 * buildbot/clients/base.py: update to new PB client interface.
4537 gtkPanes is still broken
4539 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4540 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4541 * setup.py: add buildbot.slave module
4542 * buildbot/bb_tap.py: handle move
4543 * buildbot/slave/registry.py: place to register commands, w/versions
4544 * buildbot/slave/bot.py: major simplifications
4545 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4546 instead of a fixed table. Eventually this will make the slave more
4547 extensible. Use 'start' method on the command, not .startCommand.
4548 Fix unsafeTracebacks handling (I think).
4549 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4550 helper class with a .start method that returns a Deferred.
4551 SlaveShellCommand is the form reached by the buildmaster. Commands
4552 which use multiple ShellCommands can just chain them as Deferreds,
4553 with some helper methods in Command (_abandonOnFailure and
4554 _checkAbandoned) to bail on rc!=0.
4555 (CVSCommand): prefer new mode= argument
4556 (SVNFetch): add mode= argument
4558 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4559 put a useful reason string on the build
4561 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4562 core functionality into an IStatusLog object
4563 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4564 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4565 (StatusResourceBuild.body): use proper accessor methods
4566 * buildbot/status/client.py (RemoteLog): PB-access goes here
4567 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4568 which delivers log contents too
4569 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4570 * buildbot/status/event.py: remove old Logfile completely
4572 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4573 subscription interface for IStatusLog subscriptions just like all
4574 other the status subscriptions
4575 (IStatusReceiver.logChunk): method called on subscribers
4577 2004-08-24 Brian Warner <warner@lothar.com>
4579 * buildbot/process/builder.py (Builder._pong): oops, ping response
4580 includes a result (the implicit None returned by remote_print).
4581 Accept it so the _pong method handles the response correctly.
4583 2004-08-06 Brian Warner <warner@lothar.com>
4585 * buildbot/test/test_config.py: update IRC, PBListener tests
4587 * buildbot/status/client.py (StatusClientPerspective): total
4588 rewrite to match new IStatus interfaces. New subscription scheme.
4589 There are still a few optimizations to make (sending down extra
4590 information with event messages so the client doesn't have to do a
4591 round trip). The logfile-retrieval code is probably still broken.
4592 Moved the PB service into its own port, you can no longer share a
4593 TCP socket between a PBListener and, say, the slaveport (this
4594 should be fixed eventually).
4595 * buildbot/clients/base.py (Client): revamp to match. still needs
4596 a lot of work, but basic event reporting works fine. gtkPanes is
4599 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4600 instance talks to a single irc server. Threw out all the old
4601 multi-server handling code. Still need to add back in
4602 builder-control (i.e. "force build")
4604 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4605 more random text to the as-yet-unreachable per-step page
4607 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4608 rename to stepETAUpdate
4609 (BuildStatus.subscribe): add build-wide ETA updates
4610 (BuilderStatus.getState): remove more cruft
4611 (BuilderStatus.getCurrentBuild): remove more cruft
4612 (BuilderStatus.buildStarted): really handle tuple-subscription
4613 * buildbot/test/test_run.py (Status.testSlave): handle the
4614 stepETAUpdate rename
4616 * buildbot/master.py (BuildMaster): don't add a default
4617 StatusClientService. Don't add a default IrcStatusFactory. Both
4618 are now added through c['status'] in the config file. c['irc'] is
4619 accepted for backwards compatibility, the only quirk is you cannot
4620 use c['irc'] to specify IRC servers on ports other than 6667.
4622 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4623 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4624 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4625 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4628 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4629 the buildmaster to re-read its config file
4632 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4633 find out the port our server is running on
4634 (WebTest.test_webPathname_port): same
4636 * buildbot/test/test_config.py (testWebPortnum): test it
4637 (testWebPathname): ditto
4639 * docs/config.xhtml: document new c['status'] configuration option
4641 * buildbot/status/html.py (Waterfall): new top-level class which
4642 can be added to c['status']. This creates the Site as well as the
4643 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4644 reachable as .parent, for everything.
4646 * buildbot/master.py (Manhole): make it a normal service Child
4647 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4648 webPathname. It will eventually replace c['irc'] and the implicit
4649 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4650 in as (deprecated) backward compatibility hooks for now.
4653 * buildbot/process/builder.py (Builder.buildFinished): don't
4654 inform out builder_status about a finished build, as it finds out
4655 through its child BuildStatus object
4657 * buildbot/status/html.py: extensive revamp. Use adapters to make
4658 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4659 have both starting and finishing times and adjust the waterfall
4660 display accordingly, using spacers if necessary. Use SlaveStatus
4661 to get buildslave info.
4662 (StatusResourceBuildStep): new just-one-step resource, used to get
4663 logfiles. No actual href to it yet.
4665 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4666 the time being, until I get the file-naming scheme right
4668 * buildbot/status/builder.py (Event): clean started/finished names
4669 (BuildStatus.isFinished): .finished is not None is the right test
4670 (BuildStatus.buildStarted): track started/finished times ourselves
4671 (BuilderStatus.getSlave): provide access to SlaveStatus object
4672 (BuilderStatus.getLastFinishedBuild): all builds are now in
4673 .builds, even the currently-running one. Accomodate this change.
4674 (BuilderStatus.eventGenerator): new per-builder event generator.
4675 Returns BuildStepStatus and BuildStatus objects, since they can
4676 both be adapted as necessary.
4677 (BuilderStatus.addEvent): clean up started/finished attributes
4678 (BuilderStatus.startBuild,finishBuild): remove dead code
4679 (SlaveStatus): new object to provide ISlaveStatus
4681 * buildbot/process/step.py (ShellCommand.getColor): actually
4682 return the color instead of setting it ourselves
4683 (CVS.__init__): pull .timeout and .workdir options out of
4684 **kwargs, since BuildStep will ignore them. Without this neither
4685 will be sent to the slave correctly.
4686 (SVN.__init__): same
4688 * buildbot/process/builder.py (Builder): move flags to class-level
4690 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4691 SlaveStatus handle that
4693 * buildbot/process/base.py (Build.firstEvent): remove dead code
4694 (Build.stopBuild): bugfix
4696 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4698 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4699 (ChangeMaster.eventGenerator): yield Changes, since there are now
4700 Adapters to turn them into HTML boxes
4702 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4703 (BotPerspective.attached): feed a SlaveStatus object
4704 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4705 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4707 * buildbot/interfaces.py: API additions
4708 (ISlaveStatus): place to get slave status
4710 2004-08-04 Brian Warner <warner@lothar.com>
4712 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4713 the delay finishes, so the step is marked as SUCCESS
4715 * buildbot/test/test_run.py (Status.testSlave): cover more of
4716 IBuildStatus and IBuildStepStatus
4718 * buildbot/status/progress.py (StepProgress): move some flags to
4719 class-level attributes
4720 (StepProgress.remaining): if there are no other progress metrics
4721 to go by, fall back to elapsed time
4722 (StepProgress.setExpectations): take a dict of metrics instead of
4724 (BuildProgress.setExpectationsFrom): pull expectations from the
4725 Expectations, instead of having it push them to the BuildProgress
4726 (Expectations): move some flags to class-level attributes
4727 (Expectations.__init__): copy per-step times from the
4729 (Expectations.expectedBuildTime): new method for per-build ETA
4731 * buildbot/status/event.py (Logfile): move some flags to
4732 class-level attributes
4733 (Logfile.logProgressTo): better method name, let step set the
4734 progress axis name (instead of always being "output")
4736 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4737 times directly, rather than depending upon the (possibly missing)
4738 .progress object. Use 'None' to indicate "not started/finished
4740 (BuildStepStatus.getExpectations): oops, return the full list of
4742 (BuilderStatus._buildFinished): append finished builds to .builds
4744 * buildbot/process/step.py (BuildStep): add separate .useProgress
4745 flag, since empty .progressMetrics[] still implies that time is a
4747 (CVS): set up the cmd in __init__, instead of waiting for start()
4749 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4750 calculation, this will eventually turn into a proper sourceStamp
4751 (Build.setupBuild): tell the Progress to load from the Expectations,
4752 instead of having the Expectations stuff things into the Progress
4753 (Build.buildException): add a build-level errback to make sure the
4754 build's Deferred fires even in case of exceptions
4756 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4758 * buildbot/process/builder.py (Builder.forceBuild): convey the
4759 reason instead of creating a fake Change
4761 * docs/examples/twisted_master.cfg: update to match reality
4763 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4764 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4765 fix or remove broken/breaking tests
4767 * buildbot/status/event.py (Logfile.__len__): remove evil method
4769 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4770 missing .build, for test convenience
4772 * buildbot/process/step_twisted.py: import fixes
4774 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4776 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4777 .statusbag reference
4779 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4780 connection at shutdown, and stop it from reconnecting
4782 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4783 chase down remote-execution bugs
4785 * buildbot/process/step.py: more fixes, remove
4786 BuildStep.setStatus()
4787 * buildbot/status/builder.py: move setStatus() functionality into
4789 * buildbot/status/event.py: minor fixes
4791 2004-08-03 Brian Warner <warner@lothar.com>
4793 * buildbot/process/base.py, buildbot/process/builder.py
4794 * buildbot/process/step.py, buildbot/status/builder.py
4795 * buildbot/status/event.py, buildbot/test/test_run.py:
4796 fix status delivery, get a basic test case working
4797 * buildbot/master.py: finish implementing basic status delivery,
4798 temporarily disable HTML/IRC/PB status sources
4800 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4802 * buildbot/status/progress.py (BuildProgress): remove dead code
4804 * buildbot/interfaces.py
4805 * buildbot/process/base.py, buildbot/process/builder.py
4806 * buildbot/process/step.py, buildbot/process/step_twisted.py
4807 * buildbot/status/builder.py: Complete overhaul of the all
4808 status-delivery code, unifying all types of status clients (HTML,
4809 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4810 look like. This commit is a checkpointing of the work-in-progress:
4811 the input side is mostly done (Builders/Builds sending status
4812 to the BuilderStatus/BuildStatus objects), but the output side has
4813 not yet been started (HTML resources querying BuilderStatus
4814 objects). Things are probably very broken right now and may remain
4815 so for several weeks, I apologize for the disruption.
4817 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4818 HTML as the log's contents. Currently used for exception tracebacks.
4819 * buildbot/status/progress.py: minor spelling changes
4821 2004-08-02 Brian Warner <warner@lothar.com>
4823 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4824 in mozilla. Also added stylesheets copied from Twisted's docs.
4825 Remember that these files are meant to be run through Lore first.
4826 Thanks to Philipp Frauenfelder for the fixes.
4827 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4828 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4829 * docs/template.tpl: added a Lore template
4831 2004-07-29 Brian Warner <warner@lothar.com>
4833 * buildbot/interfaces.py: revamp status delivery. This is the
4834 preview: these are the Interfaces that will be provided by new
4835 Builder code, and to which the current HTML/IRC/PB status
4836 displayers will be adapted.
4838 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4839 on the SlaveBuilder, not the Bot.
4840 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4842 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4843 set .usePTY on the FakeSlaveBuilder
4845 2004-07-25 Brian Warner <warner@lothar.com>
4847 * buildbot/changes/freshcvs.py: add some debug log messages
4848 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4849 disabled 'setFilter' syntax
4850 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4851 don't end with a slash
4853 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4855 * setup.py: bump to 0.5.0+ while between releases
4857 2004-07-23 Brian Warner <warner@lothar.com>
4859 * setup.py (version): Releasing buildbot-0.5.0
4861 2004-07-23 Brian Warner <warner@lothar.com>
4863 * README: update for 0.5.0 release
4865 * NEWS: update for 0.5.0 release
4867 2004-07-22 Brian Warner <warner@lothar.com>
4869 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4870 mktap-time configuration flag (--usepty=1, --usepty=0)
4871 * buildbot/bot.py: same
4873 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4874 an 'info' directory being unwanted
4876 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4877 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4878 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4879 and earlier), use a FreshCVSSourceOldcred instead.
4880 (test): simple test routine: connect to server, print changes
4882 * buildbot/changes/changes.py (Change.getTime): make it possible
4883 to print un-timestamped changes
4885 * buildbot/master.py (makeApp): delete ancient dead code
4886 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4887 * buildbot/test/test_config.py (testFindConfigFile): test it
4889 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4890 instead of win32 one
4893 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4894 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4897 * buildbot/process/base.py (Builder.__init__): change constructor
4898 to accept a dictionary of config data, rather than discrete
4899 name/slave/builddir/factory arguments
4901 * docs/examples/twisted_master.cfg: update to new syntax
4902 * docs/examples/glib_master.cfg: same
4903 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4904 rough tests of the new syntax
4907 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4908 to be an int, which means "run a web.distrib sub-server on a TCP
4909 port". This lets you publish the buildbot status page to a remote
4910 twisted.web server (using distrib.ResourceSubscription). Also
4911 rename the local attributes used to hold these web things so
4912 they're more in touch with reality.
4913 * buildbot/test/test_web.py: test webPortnum and webPathname
4914 * docs/config.xhtml: document this new use of webPathname
4916 * docs/config.xhtml: new document, slightly ahead of reality
4918 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4919 'prefix' handling: treat it as a simple string to check with
4920 .startswith, instead of treating it as a directory. This allows
4921 sub-directories to be used. If you use prefix=, you should give it
4922 a string that starts just below the CVSROOT and ends with a slash.
4923 This prefix will be stripped from all filenames, and filenames
4924 which do not start with it will be ignored.
4926 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4928 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4929 and --exclude (inverse of --include). SVN post-commit hooks
4930 now have total control over which changes get sent to buildbot and which
4933 2004-07-10 Brian Warner <warner@lothar.com>
4935 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4936 test case to match new API
4938 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4939 which crashed HTML display when self.entries=[] (needed to
4940 distinguish between [], which means "no entries yet", and None,
4941 which means "the entries have been swapped out to disk, go fetch
4944 2004-07-04 Brian Warner <warner@lothar.com>
4946 * buildbot/process/step_twisted.py (countFailedTests): Count
4947 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4948 10kb from the end because any import errors are wedged there and
4949 they would make us think the test log was unparseable.
4950 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4952 2004-06-26 Brian Warner <warner@lothar.com>
4954 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4955 delete-*.pyc command into an actual BuildStep, so we can label it
4957 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4958 (FullTwistedBuildFactory): same
4960 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4962 * contrib/fakechange.py: Add an errback when sending the fake
4963 change, so we know it didn't work.
4965 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4967 * buildbot/process/step_twisted.py: Delete *.pyc files before
4968 calling trial, so it doesn't catch any old .pyc files whose .py
4969 files have been moved or deleted.
4971 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4972 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4973 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4974 instead of ["twisted.test"], so that the end result is "trial -R
4977 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4978 regular expression to match filenames that should be ignored when
4979 changed. Also add a --revision parameter that specifies the
4980 revision to examine, which is useful for debugging.
4982 2004-06-25 Brian Warner <warner@lothar.com>
4984 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4985 summary of warnings (like DeprecationWarnings), next to the
4988 2004-05-13 Brian Warner <warner@lothar.com>
4990 * docs/examples/twisted_master.cfg: enable the win32 builder, as
4991 we now have a w32 build slave courtesy of Mike Taylor.
4993 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4994 so broken. Fixed a race condition that tripped up interlocked
4995 builds and caused the status to be stuck at "Interlocked" forever.
4996 The twisted buildbot's one interlocked build just so happened to
4997 never hit this case until recently (the feeding builds both pass
4998 before the interlocked build is attempted.. usually it has to wait
5000 (Builder._pong_failed): fix method signature
5002 * setup.py: bump to 0.4.3+ while between releases
5004 2004-04-30 Brian Warner <warner@lothar.com>
5006 * setup.py (version): Releasing buildbot-0.4.3
5008 2004-04-30 Brian Warner <warner@lothar.com>
5010 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5012 * README: update for 0.4.3 release
5014 * NEWS: update for 0.4.3 release
5016 * buildbot/master.py (BuildMaster.__getstate__): make sure
5017 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5019 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5020 .trial as a class attribute, for upgrade from 0.4.2
5022 * buildbot/changes/changes.py (Change.links): add .links for
5025 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5026 .textWatchers and .htmlWatchers at save time, since they are both
5027 volatile, should allow smooth 0.4.2 upgrade
5029 * buildbot/process/step.py (CVS.finishStatus): catch failed
5030 CVS/SVN commands so we can make the status box red
5032 2004-04-29 Brian Warner <warner@lothar.com>
5034 * buildbot/changes/freshcvs.py
5035 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5036 code to do setFilter(), which tells the freshcvs daemon to not
5037 send us stuff that we're not interested in. I will uncomment it
5038 when a new version of CVSToys is available in which setFilter()
5039 actually works, and I get a chance to test it better.
5041 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5043 * buildbot/master.py (Dispatcher): use a registration scheme
5044 instead of hardwired service names
5045 (BuildMaster): keep track of the Dispatcher to support
5048 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5049 PBChangeSource class instead of having it be an undocumented
5050 internal feature of the ChangeMaster. Split out the code into a
5052 * buildbot/changes/pb.py (PBChangeSource): same
5053 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5055 * docs/{factories|sources|steps}.xhtml: document some pieces
5057 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5058 using FCMaildirSource
5059 (f23osx): update OS-X builder to use python2.3, since the slave
5060 was updated to Panther (10.3.3)
5062 2004-03-21 Brian Warner <warner@lothar.com>
5064 * buildbot/process/process_twisted.py: factor out doCheckout, change
5065 to use SVN instead of CVS
5067 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5068 an SVN subclass easier
5069 (BasicSVN): subclass which uses Subversion instead of CVS
5071 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5073 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5075 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5077 2004-02-25 Brian Warner <warner@lothar.com>
5079 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5080 is now either a list (which is passed to spawnProcess directly) or
5081 a string (which gets passed to /bin/sh -c). This removes the useSH
5082 flag and the ArgslistCommand class. Also send status header at the
5083 start and end of each command, instead of having the master-side
5085 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5086 -r'. Update to use list-based arguments.
5087 (SVNFetch): use list-based arguments, use ['dir'] argument to
5089 * buildbot/test/test_steps.py (Commands): match changes
5091 * buildbot/process/step.py (InternalShellCommand.words): handle
5093 (SVN): inherit from CVS, cleanup
5095 * buildbot/status/event.py (Logfile.content): render in HTML, with
5096 stderr in red and headers (like the name of the command we're
5097 about to run) in blue. Add link to a second URL (url + "?text=1")
5098 to get just stdout/stderr in text/plain without markup. There is
5099 still a problem with .entries=None causing a crash, it seems to occur
5100 when the logfile is read before it is finished.
5102 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5103 timeout to the keepalives, and use it to explicitly do a
5104 loseConnection instead of waiting for TCP to notice the loss. This
5105 ought to clear up the silent-lossage problem.
5106 (unsafeTracebacks): pass exception tracebacks back to the master,
5107 makes it much easier to debug problems
5109 2004-02-23 Brian Warner <warner@lothar.com>
5111 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5112 the whole command to /bin/sh instead of execve [Johan Dahlin]
5113 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5114 '-r HEAD' [Johan Dahlin]
5115 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5117 * buildbot/changes/changes.py (Change): add links= argument, add
5118 asHTML method [Johan Dahlin]. Modified to make a bit more
5119 XHTMLish. Still not sure how to best use links= .
5121 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5122 Change.asHTML to display the change, not asText
5124 * buildbot/status/html.py (StatusResourceBuilder): web button to
5127 * buildbot/test/test_run.py: test to actually start a buildmaster
5130 * MANIFEST.in: bring back accidentally-dropped test helper files
5132 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5133 that require cvstoys if it is not installed
5135 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5136 values of "bin/trial" [Dave Peticolas]
5137 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5138 tests passed" when we didn't happen to run any tests
5140 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5141 flunkOnFailure [Johan Dahlin]
5143 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5144 multiple instances of the same Step class by suffixing "_2", etc,
5145 to the name until it is unique. This name needs to be unique
5146 because it is used as a key in the dictionary that tracks build
5148 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5151 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5153 2004-01-14 Brian Warner <warner@lothar.com>
5155 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5156 kicked from a channel, log it
5158 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5159 something over whatever IRC channels the buildmaster is currently
5160 connected to. Added to try and track down a problem in which the
5161 master thinks it is still connected but the IRCd doesn't see it. I
5162 used a styles.Versioned this time, so hopefully users won't have
5163 to rebuild their .tap files this time.
5164 * contrib/debug.glade: add a "Poke IRC" button
5165 * contrib/debugclient.py: same
5167 * setup.py: bump to 0.4.2+ while between releases
5169 2004-01-08 Brian Warner <warner@lothar.com>
5171 * setup.py (version): Releasing buildbot-0.4.2
5173 2004-01-08 Brian Warner <warner@lothar.com>
5175 * NEWS: update for 0.4.2 release
5177 * README: document how to run the tests, now that they all pass
5179 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5181 * buildbot/process/step.py (CVS): add a global_options= argument,
5182 which lets you set CVS global options for the command like "-r"
5183 for read-only checkout, or "-R" to avoid writing in the
5185 * buildbot/slavecommand.py (CVSCommand): same
5187 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5188 testing easier (it is turned off when testing, to avoid the
5191 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5192 to make it easier to test: break generateStepID() out to a
5193 separate function, only update statusbag if it exists.
5194 (ShellCommands): create useful text for dict-based commands too.
5196 * test/*, buildbot/test/*: move unit tests under the buildbot/
5198 * setup.py (packages): install buildbot.test too
5200 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5201 * buildbot/test/test_steps.py: fix it, tests pass now
5203 2004-01-06 Brian Warner <warner@lothar.com>
5205 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5206 freshcvs mail uses a slightly different syntax for new
5207 directories. Update parser to handle either.
5208 * test/test_mailparse.py (Test1.testMsg9): test for same
5210 2003-12-21 Brian Warner <warner@lothar.com>
5212 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5213 'warnOnWarnings' so that lintian errors mark the build orange
5215 2003-12-17 Brian Warner <warner@lothar.com>
5217 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5218 messages emitted by Bonsai, contributed by Stephen Davis.
5220 * test/*: moved all tests to use trial instead of unittest. Some
5221 still fail (test_steps, test_slavecommand, and test_process).
5223 * setup.py (version): bump to 0.4.1+ while between releases
5225 2003-12-09 Brian Warner <warner@lothar.com>
5227 * setup.py (version): Releasing buildbot-0.4.1
5229 2003-12-09 Brian Warner <warner@lothar.com>
5231 * NEWS: update for 0.4.1 release
5233 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5234 freebsd builder code a little bit
5236 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5237 don't try to compare attributes of different classes
5238 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5239 (MaildirSource.messageReceived): fix Change delivery
5241 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5242 into the config file's namespace before loading it, like the
5243 documentation claims it does
5244 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5245 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5246 daemon comes back online
5248 2003-12-08 Brian Warner <warner@lothar.com>
5250 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5251 so the example will work with online=0 as well
5253 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5254 fix the __implements__ line
5256 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5257 class a twisted.application.service.Service, use startService to
5260 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5261 directory fd instead of simple open(). I'm sure this used to work,
5262 but the current version of python refuses to open directories with
5265 2003-12-05 Brian Warner <warner@lothar.com>
5267 * setup.py (version): bump to 0.4.0+ while between releases
5269 2003-12-05 Brian Warner <warner@lothar.com>
5271 * setup.py (version): Releasing buildbot-0.4.0
5273 2003-12-05 Brian Warner <warner@lothar.com>
5275 * docs/examples/glib_master.cfg: replace old sample scripts with
5276 new-style config files
5277 * MANIFEST.in: include .cfg files in distribution tarball
5279 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5280 implement a dummy method to avoid the exception that occurs when
5281 freshcvs sends this to us.
5283 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5284 removed the method, as it broke reconnection. Apparently
5285 stopFactory is called each time the connection attempt fails. Must
5287 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5288 attribute before serialization, since without stopFactory the
5289 reconnect timer may still be active and they aren't serializable.
5291 * test/test_mailparse.py (ParseTest): test with 'self' argument
5293 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5294 argument, as these "functions" are invoked like methods from class
5295 attributes and therefore always get an instance as the first
5298 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5299 message: thanks to Stephen Davis for the catch
5301 2003-12-04 Brian Warner <warner@lothar.com>
5303 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5304 twisted's standard ReconnectingClientFactory. Handles both oldcred
5305 and newcred connections. Also has a bug-workaround for
5306 ReconnectingClientFactory serializing its connector when it
5309 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5310 pbutil. Replace makeApp stuff with proper newcred/mktap
5311 makeService(). Don't serialize Ephemerals on shutdown.
5313 * buildbot/changes/changes.py (ChangeMaster): make it a
5314 MultiService and add the sources as children, to get startService
5315 and stopService for free. This also gets rid of the .running flag.
5317 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5318 new pbutil, turn into a TCPClient at the same time (to get
5319 startService for free). Two variants exist: FreshCVSSourceOldcred
5320 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5321 yet, but when it does, we'll be ready).
5322 (FreshCVSSource.notify): handle paths which are empty after the
5323 prefix is stripped. This only happens when the top-level (prefix)
5324 directory is added, at the very beginning of a Repository's life.
5326 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5327 Now the only reconnecting code is in the factory where it belongs.
5328 (Builder.unsubscribe): unregister the disconnect callback when we
5329 delete the builder on command from the master (i.e. when the
5330 buildmaster is reconfigured and that builder goes away). This
5331 fixes a multiple-delete exception when the status client is shut
5333 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5336 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5337 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5339 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5341 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5342 a list of globs (ugh). The testdir will be searched for files
5343 named *.tests and run the tests in the order specified in each of
5344 those files. This allows for "dependancies" between tests to be
5347 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5348 argument to pass to run_maxq.py, instead of a glob.
5350 2003-10-17 Brian Warner <warner@lothar.com>
5352 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5353 files that live in the sandbox
5355 2003-10-15 Brian Warner <warner@lothar.com>
5357 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5358 spelling error in "docs" count-warnings output
5359 (HLint.start): stupid thinko meant .xhtml files were ignored
5361 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5362 tests now that cReactor is banished to the sandbox
5364 2003-10-10 Brian Warner <warner@lothar.com>
5366 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5367 scheme: now .xhtml are sources and .html are generated
5369 2003-10-08 Brian Warner <warner@lothar.com>
5371 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5372 we were ignoring the 'randomly' parameter.
5374 2003-10-01 Brian Warner <warner@lothar.com>
5376 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5377 posix, to kill sub-children of aborted slavecommands.
5379 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5380 Clean up initialization: lastBuildStatus remains None until the
5381 first build has been completed.
5383 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5384 None as a lastBuildStatus
5385 * buildbot/clients/gtkPanes.py: same
5387 * buildbot/status/client.py (StatusClientService): keep
5388 BuilderStatus objects in self.statusbags . These objects now live
5389 here in the StatusClientService and are referenced by the Builder
5390 object, rather than the other way around.
5391 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5392 * buildbot/process/base.py (Builder): same
5393 * test/test_config.py (ConfigTest.testBuilders): same
5395 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5396 an existing builder, leave the statusbag alone. This will preserve the
5399 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5400 hook. This will probably go away in favor of a class in upcoming
5403 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5404 serviceName from newcred FreshCVSNotifiee setup
5406 2003-09-29 Brian Warner <warner@lothar.com>
5408 * buildbot/process/process_twisted.py: switch to new reactor
5410 * docs/examples/twisted_master.cfg: same
5412 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5414 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5415 botmaster reference instead of the oldapp service lookup
5417 * buildbot/master.py (BuildMaster.__init__): give the
5418 StatusClientService a reference to the botmaster to make it easier to
5421 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5423 * buildbot/status/html.py (Box.td): escape hreffy things so you
5424 can have spaces in things like builder names
5425 (StatusResourceBuilder.body)
5426 (WaterfallStatusResource.body)
5427 (WaterfallStatusResource.body0): same
5429 2003-09-25 Brian Warner <warner@lothar.com>
5431 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5432 rearrange the builder list when adding or removing builders: keep
5433 them in the order the user requested.
5434 * test/test_config.py (ConfigTest.testBuilders): verify it
5436 * contrib/debug.glade: give the debug window a name
5438 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5439 now wait on multiple interlocks. Fix code relating to that.
5440 (Builder.checkInterlocks): same
5441 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5443 * buildbot/master.py (BuildMaster.loadConfig): move from
5444 deprecated pb.BrokerFactory to new pb.PBServerFactory
5445 * test/test_config.py (ConfigTest.testWebPathname): same
5447 * docs/examples/twisted_master.cfg: fix interlock declaration
5449 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5450 Interlocks to their Builders into interlock.py .
5451 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5453 * test/test_config.py (ConfigTest.testInterlocks): validate
5456 * buildbot/process/base.py (Builder.__init__): better comments
5457 * buildbot/process/interlock.py (Interlock.__repr__): same
5458 (Interlock.deactivate): add .active flag, move the code that
5459 attaches/detaches builders into the Interlock
5461 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5463 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5464 tests using the new run_maxq.py script, and reporting failures by
5467 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5468 tests, reporting their success or failure in a buildbot-friendly
5471 2003-09-24 Brian Warner <warner@lothar.com>
5473 * docs/examples/twisted_master.cfg: example of a new-style config
5474 file. This lives in the buildmaster base directory as
5477 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5478 button to make the master re-read its config file
5480 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5481 buildmaster configuration from a file. This file can be re-read
5482 later, and the buildmaster will update itself to match the new
5483 desired configuration. Also use new Twisted Application class.
5484 * test/Makefile, test/test_config.py: unit tests for same
5486 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5487 FreshCVSSources comparable, to support reload.
5488 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5490 * buildbot/process/base.py (Builder): make them comparable, make
5491 Interlocks easier to attach, to support reload. Handle
5492 re-attachment of remote slaves.
5493 * buildbot/process/interlock.py (Interlock): same
5495 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5496 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5497 buildmaster taps are now constructed with mktap.
5498 * buildbot/status/client.py (StatusClientService): same
5500 * buildbot/status/words.py: move to new Services, add support to
5501 connect to multiple networks, add reload support, allow nickname
5502 to be configured on a per-network basis
5504 2003-09-20 Brian Warner <warner@lothar.com>
5506 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5507 the freebsd builder, now that the machine has been upgraded and no
5508 longer has python2.2
5510 * setup.py (version): bump to 0.3.5+ while between releases
5512 2003-09-19 Brian Warner <warner@lothar.com>
5514 * setup.py (version): Releasing buildbot-0.3.5
5516 2003-09-19 Brian Warner <warner@lothar.com>
5518 * NEWS: add post-0.3.4 notes
5520 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5522 * MANIFEST.in: add contrib/*
5524 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5525 use a remote root now: cvs.twistedmatrix.com
5527 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5529 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5530 compatibility with old servers
5531 (FreshCVSSource.start): and provide a way to use it
5532 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5534 * docs/examples/twisted_master.py (twisted_app): update to new
5536 (twisted_app): listen on new ~buildbot socket
5537 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5539 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5540 to reduce cvs bandwidth (update instead of full checkout)
5542 2003-09-11 Brian Warner <warner@lothar.com>
5544 * contrib/fakechange.py: demo how to connect to the changemaster
5545 port. You can use this technique to submit changes to the
5546 buildmaster from source control systems that offer a hook to run a
5547 script when changes are committed.
5549 * contrib/debugclient.py: tool to connect to the debug port. You
5550 can use it to force builds, submit fake changes, and wiggle the
5553 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5554 'Dispatcher' realm to handle all the different kinds of
5555 connections and Perspectives: buildslaves, the changemaster port,
5556 the debug port, and the status client port. NewCredPerspectives
5557 now have .attached/.detached methods called with the remote 'mind'
5558 reference, much like old perspectives did. All the pb.Services
5559 turned into ordinary app.ApplicationServices .
5560 (DebugService): went away, DebugPerspectives are now created
5561 directly by the Dispatcher.
5562 (makeApp): changed interface a little bit
5564 * buildbot/changes/changes.py: newcred
5565 * buildbot/status/client.py: newcred
5567 * buildbot/clients/base.py: newcred client side changes
5568 * buildbot/bot.py: ditto
5570 * docs/examples/glib_master.py: handle new makeApp() interface
5571 * docs/examples/twisted_master.py: ditto
5573 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5574 base newcred Perspectives on. This should go away once Twisted
5575 itself provides something sensible.
5578 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5580 * contrib/svn_buildbot.py: A program that you can call from your
5581 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5582 when a change in an SVN repository has happened. See the top of
5583 the file for some minimal usage info.
5585 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5587 * buildbot/slavecommand.py (ArglistCommand): Add new
5588 ArglistCommand that takes an argument list rather than a string as
5589 a parameter. Using a st.split() for argv is very bad.
5591 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5592 update to a particular revision rather than always checking out
5593 (still not very smart about it, there may be cases where the
5594 checkout becomes inconsistent).
5596 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5598 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5599 SVN fetch support. It can checkout (not update!) a specified
5600 revision from a specified repository to a specified directory.
5602 * buildbot/status/progress.py (Expectations.update): Fix an
5603 obvious bug (apparently created by the change described in the
5604 previous ChangeLog message) by moving a check to *after* the
5605 variable it checks is defined.
5608 2003-09-08 Brian Warner <warner@lothar.com>
5610 * buildbot/status/progress.py (Expectations.update): hack to catch
5611 an exception TTimo sees: sometimes the update() method seems to
5612 get called before the step has actually finished, so the .stopTime
5613 is not set, so no totalTime() is available and we average None
5614 with the previous value. Catch this and just don't update the
5615 metrics, and emit a log message.
5617 2003-08-24 Brian Warner <warner@lothar.com>
5619 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5620 parameter to set copydir='original' in CVS commands.
5622 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5624 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5625 which tells the command to maintain a separate original-source CVS
5626 workspace. For each build, this workspace will be updated, then
5627 the tree copied into a new workdir. This reduces CVS bandwidth
5628 (from a full checkout to a mere update) while doubling the local
5629 disk usage (to keep two copies of the tree).
5631 2003-08-21 Brian Warner <warner@lothar.com>
5633 * buildbot/status/event.py (Logfile.addEntry): if the master web
5634 server dies while we're serving a page, request.write raises
5635 pb.DeadReferenceError . Catch this and treat it like a
5636 notifyFinish event by dropping the request.
5638 2003-08-18 Brian Warner <warner@lothar.com>
5640 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5641 (instead of blowing up) if a force-build command is given without
5644 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5645 don't blow up if there aren't yet any Changes in the list
5647 2003-08-02 Brian Warner <warner@lothar.com>
5649 * buildbot/bot.py (updateApplication): don't set the .tap name,
5650 since we shouldn't assume we own the whole .tap file
5652 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5653 'mktap buildbot' (without a subcommand) better
5655 2003-07-29 Brian Warner <warner@lothar.com>
5657 * buildbot/status/words.py
5658 (IrcStatusFactory.clientConnectionLost): when we lose the
5659 connection to the IRC server, schedule a reconnection attempt.
5661 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5662 use shutil.rmtree instead of forking off an "rm -rf" command.
5663 rmtree may take a while and will block until it finishes, so we
5664 use "rm -rf" if available.
5666 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5667 freebsd buildslave badly
5669 * setup.py (version): bump to 0.3.4+ while between releases
5671 2003-07-28 Brian Warner <warner@lothar.com>
5673 * setup.py (version): Releasing buildbot-0.3.4
5675 2003-07-28 Brian Warner <warner@lothar.com>
5677 * NEWS: update in preparation for release
5679 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5680 process.signalProcess instead of os.kill, to improve w32
5683 * docs/examples/twisted_master.py (twisted_app): turn off
5684 win32eventreactor: the tests hang the buildslave badly
5686 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5687 failed builds, since usually the failures are consistent
5689 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5690 add compileOpts/compileOpts2 to reactors build
5692 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5693 (twisted_app): use both default and win32eventreactor on w32 build.
5694 Use both default and kqreactor on freebsd build.
5696 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5697 add compileOpts2, which is put after the build_ext argument. w32
5698 needs "-c mingw32" here.
5700 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5701 touch .acqpath, it goes away in recent Twisted releases
5703 * docs/examples/twisted_master.py (twisted_app): use "python" for
5704 the w32 buildslave, not "python2.2"
5706 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5707 the directory exists.. should hush an exception under w32
5709 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5710 ProcessTerminated -provided values for signal and exitCode rather
5711 than parsing the unix status code directly. This should remove one
5712 more roadblock for a w32-hosted buildslave.
5714 * test/test_mailparse.py: add test cases for Syncmail parser
5716 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5717 temporary compatibility import. Note! Start importing
5718 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5720 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5722 2003-07-27 Brian Warner <warner@lothar.com>
5724 * NEWS: started adding new features
5726 * buildbot/changes/mail.py: start work on Syncmail parser, move
5727 mail sources into their own file
5729 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5730 as implementing IChangeSource
5731 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5733 * buildbot/interfaces.py: define the IChangeSource interface
5735 2003-07-26 Brian Warner <warner@lothar.com>
5737 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5739 2003-06-25 Brian Warner <warner@lothar.com>
5741 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5744 2003-06-17 Brian Warner <warner@lothar.com>
5746 * buildbot/status/words.py: clean up method usage to avoid error
5747 in silly IRC command
5748 (IrcStatusBot.emit_status): round off seconds display
5750 * buildbot/process/base.py (Build): delete the timer when saving
5751 to the .tap file, and restore it (if it should still be running)
5752 upon restore. This should fix the "next build in -34 seconds"
5753 messages that result when the master is restarted while builds are
5754 sitting in the .waiting slot. If the time for the build has
5755 already passed, start it very soon (in 1 second).
5757 * buildbot/status/words.py: more silly commands
5759 * README (REQUIREMENTS): add URLs to all required software
5761 * buildbot/status/words.py ('last'): mention results of, and time
5764 2003-05-28 Brian Warner <warner@lothar.com>
5766 * buildbot/status/words.py: add 'last' command
5767 (IrcStatusBot.emit_status): add current-small text to 'status' output
5769 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5770 (twisted_app): remove spaces from OS-X builder name
5772 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5773 * buildbot/status/words.py: IRC bot should actually be useful now
5775 2003-05-23 Brian Warner <warner@lothar.com>
5777 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5778 "slave information" from $(slavedir)/info/* . These files are
5779 maintained by the slave administrator, and describe the
5780 machine/environment that is hosting the slave. Information from
5781 them is put into the "Builder" HTML page. Still need to establish
5782 a set of well-known filenames and meanings for this data: at the
5783 moment, *all* info/* files are sent to the master, but only
5784 'admin' and 'host' are used on that end.
5785 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5786 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5787 * buildbot/master.py (BotPerspective.got_info): ditto
5789 2003-05-22 Brian Warner <warner@lothar.com>
5791 * setup.py (version): bump version to 0.3.3+ while between releases
5793 2003-05-21 Brian Warner <warner@lothar.com>
5795 * setup.py: Releasing buildbot-0.3.3
5797 2003-05-21 Brian Warner <warner@lothar.com>
5799 * NEWS: 0.3.3 news items
5801 * README: describe --keepalive and life behind a NAT box
5803 * buildbot/bot.py (Bot.connected): implement application-level
5804 keepalives to deal with NAT timeouts, turn them on with
5805 --keepalive option or when SO_KEEPALIVE doesn't work.
5807 * buildbot/master.py (BotPerspective): accept keepalives silently
5809 * buildbot/process/base.py (Build.buildException): CopiedFailures
5810 don't carry as much information as local ones, so don't try to
5811 create a big HTMLized version of them.
5813 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5814 log file when step fails due to an exception, such as when the slave
5817 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5818 --testmodule argument instead of grepping for test-case-name tags
5819 ourselves. Remove FindUnitTests code.
5820 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5822 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5824 2003-05-16 Brian Warner <warner@lothar.com>
5826 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5827 argument to allow things like CFLAGS=-O0 to be passed without relying
5828 upon /bin/sh processing on the slave.
5830 * buildbot/process/step.py (InternalShellCommand.start): send
5832 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5833 'split' instead of letting /bin/sh do it. This should also remove
5834 the need for /bin/sh on the buildslave, making it more likely to
5837 * buildbot/status/html.py: html-escape text in blamelist.
5838 Add "force build" button to the Builder page.
5840 * buildbot/process/step_twisted.py (countFailedTests): look at
5841 last 1000 characters for status line, as import errors can put it
5842 before the -200 point.
5844 2003-05-15 Brian Warner <warner@lothar.com>
5846 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5848 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5849 make 'clobber' a parameter, so it is possible to have builds which
5850 do full tests but do a cvs update instead of hammering the CVS
5851 server with a full checkout each build
5853 * buildbot/process/step.py (InternalShellCommand): bump default
5854 timeout to 20 minutes
5856 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5857 the master to trigger a build. Run it via manhole.
5859 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5860 allow slaves to trigger any build that they host, to make life
5861 easier for slave admins who are testing out new build processes
5863 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5864 don't flunk cReactor or qtreactor on failure, since they fail alot
5865 these days. Do warnOnFailure instead.
5867 * buildbot/process/base.py: change Builder.buildable from a list
5868 into a single slot. When we don't have a slave, new builds (once
5869 they make it past the timeout) are now merged into an existing
5870 buildable one instead of being queued. With this change, a slave
5871 which has been away for a while doesn't get pounded with all the
5872 builds it missed, but instead just does a single build.
5874 2003-05-07 Brian Warner <warner@lothar.com>
5876 * setup.py (version): bump version to 0.3.2+ while between releases
5878 2003-05-07 Brian Warner <warner@lothar.com>
5880 * setup.py: Releasing buildbot-0.3.2
5882 2003-05-07 Brian Warner <warner@lothar.com>
5884 * setup.py: fix major packaging error: include subdirectories!
5886 * NEWS: add changes since last release
5888 * README (REQUIREMENTS): update twisted/python dependencies
5890 * buildbot/status/builder.py (Builder.startBuild): change
5891 BuildProcess API: now they should call startBuild/finishBuild
5892 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5893 keeping a list of builds in the statusbag, to support other kinds of
5895 (Builder.addClient): send current-activity-small to new clients
5896 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5899 * buildbot/status/client.py: drop RemoteReferences at shutdown
5901 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5903 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5904 more debug messages for remote status client
5906 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5907 (.stepFailed): only fire the Deferred once, even if both
5908 stepComplete and stepFailed are called. I think this can happen if
5909 an exception occurs at a weird time.
5911 * buildbot/status/words.py: work-in-progress: IRC status delivery
5913 2003-05-05 Brian Warner <warner@lothar.com>
5915 * docs/examples/twisted_master.py (twisted_app): hush internal
5916 python2.3 distutils deprecation warnings
5917 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5918 add compileOpts= argument which inserts extra args before the
5919 "setup.py build_ext" command. This can be used to give -Wignore
5920 warnings, to hush some internal python-2.3 deprecation messages.
5922 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5923 the ['twisted.test'] default test case to make it easier to change
5926 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5927 * buildbot/clients/gtkPanes.py: ditto
5929 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5930 arg to collapse RunUnitTestsRandomly into RunUnitTests
5931 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5932 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5934 * buildbot/status/html.py (StatusResource): shuffle Resources
5935 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5936 would serve the waterfall display, but the internal links were
5937 only valid on the trailing-slash version. The correct behavior is
5938 for the non-slashed one to serve a Redirect to the slashed one.
5939 This only shows up when the buildbot page is hanging off another
5940 server, like a Twisted-Web distributed server.
5942 * buildbot/status/event.py (Event, RemoteEvent): make Events
5943 pb.Cacheable, with RemoteEvent as the cached version. This removes
5944 a lot of explicit send-an-update code.
5945 * buildbot/status/builder.py (Builder): remove send-update code
5946 * buildbot/status/client.py (ClientBuilder): remove send-update
5947 code, and log errors that occur during callRemote (mostly to catch
5948 InsecureJelly exceptions)
5950 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5951 run Lore with the same python used in the rest of the build
5953 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5955 * buildbot/process/step_twisted.py (HLint): accept 'python'
5956 argument. Catch rc!=0 and mark the step as failed. This marks the
5957 build orange ("has warnings").
5958 (RunUnitTestsJelly): move out to step_twisted2.py
5960 * buildbot/util.py (ignoreStaleRefs): add utility function
5962 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5963 don't fake ETA object, it's too hard to get right
5965 2003-05-02 Brian Warner <warner@lothar.com>
5967 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5969 2003-05-01 Brian Warner <warner@lothar.com>
5971 * buildbot/status/html.py (StatusResource.body): oops, I was
5972 missing a <tr>, causing the waterfall page to be misrendered in
5973 everything except Galeon.
5975 2003-04-29 Brian Warner <warner@lothar.com>
5977 * docs/examples/twisted_master.py: make debuild use python-2.2
5978 explicitly, now that Twisted stopped supporting 2.1
5980 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5981 handle tuple results too. I keep forgetting this, which suggests
5982 it needs to be rethought.
5984 * setup.py (setup): bump version to 0.3.1+ while between releases
5986 2003-04-29 Brian Warner <warner@lothar.com>
5988 * setup.py: Releasing buildbot-0.3.1
5990 2003-04-29 Brian Warner <warner@lothar.com>
5992 * README (SUPPORT): add plea to send questions to the mailing list
5994 * NEWS, MANIFEST.in: add description of recent changes
5996 * docs/examples/twisted_master.py: add the code used to create the
5997 Twisted buildmaster, with passwords and such removed out to a
6000 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6001 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6002 buildmasters to not require CVSToys be installed.
6003 * README, docs/examples/glib_master: update to match the change
6005 * buildbot/clients/base.py, buildbot/bot.py,
6006 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6007 ReconnectingPB from CVSToys distribution to remove CVSToys
6008 dependency for build slaves and status clients. Buildmasters which
6009 use FreshCVSSources still require cvstoys be installed, of course.
6011 2003-04-25 Brian Warner <warner@lothar.com>
6013 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6014 runTestsRandomly arg to turn on trial -z
6016 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6017 experimental code to use trial's machine-parseable output to get
6018 more detailed test results. Still has some major issues.
6019 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6022 * buildbot/status/builder.py (Builder.setCurrentBuild):
6023 anticipating moving build history into statusbag, not used yet
6025 * buildbot/status/tests.py: code to centralize test results,
6026 doesn't work quite yet
6028 * buildbot/status/event.py (Event): use hasattr("setName") instead
6029 of isinstance for now.. need better long-term solution
6031 * buildbot/status/html.py: Remove old imports
6033 2003-04-24 Brian Warner <warner@lothar.com>
6035 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6036 ignore changes under doc/fun/ and sandbox/
6038 * buildbot/process/step_twisted.py: update pushEvent and friends.
6040 * buildbot/status/html.py (Box.td): replace event.buildername with
6041 event.parent.getSwappableName(). Needs more thought.
6043 * buildbot/status/builder.py (Builder): Replace pushEvent and
6044 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6045 Tell events they are being pruned with event.delete().
6047 * buildbot/process/base.py (Build): Remove Builder status-handling
6048 methods. s/pushEvent/setCurrentActivity/.
6050 * buildbot/process/step.py (BuildStep): clean up status delivery.
6051 Gouse builder.statusbag methods instead of intermediate builder
6052 methods. s/updateLastEvent/updateCurrentActivity/.
6053 s/finalizeLastEvent/finishCurrentActivity/. Use
6054 addFileToCurrentActivity for summaryFunction.
6056 * buildbot/status/event.py (Logfile): put data in a Swappable when
6058 (Event): add more setter methods. Remove .buildername, use .parent
6059 and getSwappableName instead (needs more thought).
6061 * buildbot/util.py (Swappable):
6062 * test/test_swap.py: don't bother setting filename at __init__
6063 time, do it later. Change setFilename args to take parent first,
6064 since it provides the most significant part of the filename.
6066 2003-04-23 Brian Warner <warner@lothar.com>
6068 * buildbot/status/event.py (Logfile.addEntry): append to previous
6071 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6072 anticipating Swappable
6073 (InternalShellCommand.remoteUpdate): split out various log-adding
6074 methods so subclasses can snarf stdout separately
6076 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6077 in anticipation of Swappable build logs
6078 (Builder.testsFinished): anticipating TestResults, still disabled
6080 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6083 * buildbot/status/event.py (Logfile): add (disabled) support for
6084 Swappable, not ready for use yet
6086 * buildbot/util.py (Swappable): object which is swapped out to
6087 disk after some period of no use.
6088 * test/test_swap.py: test buildbot.utils.Swappable
6090 2003-04-14 Brian Warner <warner@lothar.com>
6092 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6093 periodic-build timer. Set the .periodicBuildTime on a builder
6094 instance to some number of seconds to activate it.
6096 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6098 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6099 a way that survives result tuples
6101 2003-04-12 Brian Warner <warner@lothar.com>
6103 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6104 return a dict instead of a tuple: allow summarizers to provide
6105 multiple summaries if they want
6106 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6107 (debuildSummarizer): summarize lintian warnings/errors
6109 2003-04-10 Brian Warner <warner@lothar.com>
6111 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6113 2003-04-09 Brian Warner <warner@lothar.com>
6115 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6116 empty summaries: happens when the tests fail so hard they don't emit
6117 a parseable summary line.
6119 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6120 Allow summaryFunction to return None to indicate no summary should
6123 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6124 writing to stale HTTP requests: notice when they disconnect and
6125 remove the request from the list. Also add CacheToFile from
6126 moshez, will be used later.
6128 2003-04-08 Brian Warner <warner@lothar.com>
6130 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6131 should be an int, not a list of strings
6133 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6134 if we weren't actually connected
6136 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6137 to show the tail end of the trial text output
6139 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6140 hook to summarize the results of a ShellCommand
6142 2003-04-07 Brian Warner <warner@lothar.com>
6144 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6145 twisted test suite code into a single class.
6146 * buildbot/process/process_twisted.py: same
6148 2003-04-04 Brian Warner <warner@lothar.com>
6150 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6152 * README (SLAVE): document use of mktap to create slave .tap file
6153 (REQUIREMENTS): describe dependencies
6155 * buildbot/bb_tap.py, buildbot/plugins.tml:
6156 * buildbot/bot.py (updateApplication): Add mktap support for creating
6157 buildslave .tap files
6159 2003-03-28 Brian Warner <warner@lothar.com>
6161 * buildbot/process/step.py (InternalShellCommand.finished): handle
6162 new tuple result values (fix embarrasing bug that appeared during
6165 2003-03-27 Brian Warner <warner@lothar.com>
6167 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6170 2003-03-25 Brian Warner <warner@lothar.com>
6172 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6173 to overall build status
6174 * buildbot/clients/base.py (Builder): improve event printing
6175 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6176 instead of generic ShellCommand
6177 (Build): Add .stopBuild, use it when slave is detached
6179 * buildbot/process/step.py (Configure,Test): give the steps their
6180 own names and status strings
6182 * buildbot/status/html.py (StatusResource): add "show" argument,
6183 lets you limit the set of Builders being displayed.
6185 2003-03-20 Brian Warner <warner@lothar.com>
6187 * buildbot/process/basic.py: removed
6189 2003-03-19 Brian Warner <warner@lothar.com>
6191 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6192 turn off process-docs by default
6194 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6195 when displaying build information without anything in allBuilds[]
6197 * buildbot/bot.py (makeApp): really take password from sys.argv
6199 2003-03-18 Brian Warner <warner@lothar.com>
6201 * buildbot/bot.py (buildApp): take password from sys.argv
6203 * README: replace with more useful text
6205 * setup.py: add a real one
6206 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6208 * docs/PyCon-2003/: added sources for PyCon paper.
6210 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6211 now Build objects control the process and Builder only handles
6212 slave stuff and distribution of changes/status. A new BuildFactory
6213 class creates Build objects on demand.
6215 Created ConfigurableBuild which takes a list of steps to run. This
6216 makes it a lot easier to set up a new kind of build and moves us
6217 closer to being able to configure a build from a web page.
6219 * buildbot/process/step_twisted.py, process_twisted.py: move to
6220 new model. A lot of code went away.
6222 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6223 send lots of empty progress messages to the client.
6225 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6227 2003-02-20 Brian Warner <warner@lothar.com>
6229 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6231 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6232 Twisted bug that prevented non-pty processes from working just got
6233 fixed, and the bug that leaks ptys is still being investigated.
6235 * buildbot/process/step.py (CVS): send timeout arg to slave
6237 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6238 builders coming and going
6239 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6240 from CVSToys, handle lost-buildmaster
6242 * buildbot/status/client.py (StatusClientService.removeBuilder):
6243 Clean up status client protocol: send builders (with references)
6244 as they are created, rather than sending a list and requiring the
6245 client to figure out which ones are new.
6246 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6247 attempts to force a build on an unknown builder
6249 2003-02-19 Brian Warner <warner@lothar.com>
6251 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6252 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6253 Twisted stops leaking them.
6254 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6255 builder goes to an idle state.
6257 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6258 I figure out why CVS commands hang without them, and/or I fix the
6259 hung-command timeout
6261 2003-02-16 Brian Warner <warner@lothar.com>
6263 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6264 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6265 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6266 GenerateDocs now that they are prefixed with WARNING:.
6268 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6269 use manual href target instead of request.childLink
6271 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6272 display every second, but update the ETA every 5 seconds (or
6273 whenever) as remote_progress messages arrive.
6276 2003-02-12 Brian Warner <warner@lothar.com>
6278 * *: import current sources from home CVS repository
6282 # add-log-time-format: add-log-iso8601-time-string