1 2006-06-14 Brian Warner <warner@lothar.com>
3 * buildbot/interfaces.py (ILogFile): add the Interface used from
4 the BuildStep towards the LogFile
5 (ILogObserver): and the one provided by a LogObserver
6 * buildbot/status/builder.py (LogFile): implement it
8 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
9 HEADER constants here ..
10 * buildbot/status/builder.py (STDOUT): .. from here
12 2006-06-13 Brian Warner <warner@lothar.com>
14 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
15 compatibility with python2.2, which doesn't have the 'substr in
17 (TestP4Poller.makeTime): utility function to construct the
18 timestamp using the same strptime() approach as p4poller does. It
19 turns out that time.mktime() behaves slightly differently under
20 python2.2, probably something to do with the DST flag, and that
21 causes the test to fail under python2.2. (changing the mktime()
22 arguments to have dst=0 instead of -1 caused it to fail under
23 python2.3. Go figure.)
24 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
26 2006-06-12 Brian Warner <warner@lothar.com>
28 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
29 proper Perforce (P4) support. Many many thanks to Scott Lamb for
30 contributing such an excellent patch, including docs and unit
31 tests! This makes it *so* much easier to apply. I had to update
32 test_vc.py to handle some recent refactorings, but everything else
33 applied smoothly. The only remaining thing I'd like to fix would
34 be to remove the hard-wired port 1666 used by p4d, and allow it to
35 claim any unused port. This would allow two copies of the test
36 suite to run on the same host at the same time, as well as
37 allowing the test suite to run while a real (production) p4d was
38 running on the same host. Oh, and maybe we should add a warning to
39 step.P4 that gets emitted if the slave is too old to provide the
40 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
41 * buildbot/slave/commands.py (P4): same
42 (P4Sync): same, some minor updates
43 * buildbot/changes/p4poller.py: same
44 * docs/buildbot.texinfo: same
45 * buildbot/test/test_p4poller.py: same
46 * buildbot/test/test_vc.py (P4): same
48 * setup.py: add Trove classifiers for PyPI
50 2006-06-08 Brian Warner <warner@allmydata.com>
52 * buildbot/status/client.py
53 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
54 changing this from getCurrentBuild() to getCurrentBuilds(). Each
55 build needs to be IRemote'd separately, rather than IRemote'ing
56 the whole list at once. I can't wait until newpb's serialization
57 adapters make this unnecessary.
59 2006-06-06 Brian Warner <warner@lothar.com>
61 * buildbot/process/step.py (WithProperties): make this inherit
62 from ComparableMixin, so that reloading an unchanged config file
63 doesn't cause us to spuriously reload any Builders which use them.
64 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
67 2006-06-03 Brian Warner <warner@lothar.com>
69 * contrib/windows/{setup.py, buildbot_service.py}: add support for
70 running py2exe on windows, contributed by Mark Hammond. Addresses
71 SF#1401121, but I think we still need to include
72 buildbot/scripts/sample.cfg
73 * setup.py: include buildbot_service.py as a script under windows
74 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
75 a py2exe application), get the icon/css datafiles from a different
78 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
79 double-escape the build URL. Thanks to Olivier Bonnet for the
80 patch. Fixes SF#1452801.
82 2006-06-02 Brian Warner <warner@lothar.com>
84 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
85 first six columns of 'svnlook' output, not just the first column,
86 since property changes appear in the other five. Thanks to Olivier
87 Bonnet for the patch. Fixes SF#1398174.
89 2006-06-01 Brian Warner <warner@lothar.com>
91 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
92 the fake build, so that title= has something to be set to
94 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
95 attribute of the "Build #NN" link in the yellow start-the-build
96 box to the build's reason. This means that you get a little
97 tooltip explaining why the build was done when you hover over the
98 yellow box. Thanks to Zandr Milewski for the suggestion.
100 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
101 (Box.setETA): handle ETA=None (by stopping the timer)
102 (Box.update): make the [soon] text less different than the usual
103 text, so the rest of the text doesn't flop around so much. It
104 would be awfully nice to figure out how to center this stuff.
105 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
107 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
108 by default, so that any ShellCommand which fails marks the overall
109 build as a failure. I should have done this from the beginning.
110 Add flunkOnFailure=False to the arguments if you want to turn off
113 2006-05-30 Brian Warner <warner@lothar.com>
115 * buildbot/clients/gtkPanes.py: add a third row: now it shows
116 last-build/current-build/current-step. Show what step is currently
117 running. Show ETA for both the overall build and the current step.
118 Update GTK calls to modern non-deprecated forms. There's still a
119 lot of dead code and debug noise to remove.
121 * buildbot/process/step_twisted.py (Trial): set the step name, so it
122 shows up properly in status displays
124 2006-05-28 Brian Warner <warner@lothar.com>
126 * buildbot/test/test_properties.py (Run.testInterpolate): on the
127 build we use to verify that WithProperties works:
129 ** set flunkOnFailure=True so that build failures get noticed
130 ** set workdir='.' so that the build succeeds, otherwise it is trying
131 to touch 'build/something', and 'build/' doesn't exist because
132 usually that's created by a Source step
133 ** set timeout=10, because Twisted-1.3.0 has a race condition that
134 this test somehow triggers, in which the 'touch' process becomes
135 a zombie and we wait for th etimeout before giving up on it.
137 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
138 to log the Build results and step logs to the twisted log.
139 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
140 what went wrong if a build was expected to succeed but didn't.
142 * buildbot/process/step_twisted.py (Trial): set the default
143 trialMode to '--reporter=bwverbose', which specifies verbose
144 black-and-white text. Back in twisted-1.3/2.0 days we had to use
145 '-to', but those are completely missing in modern Twisteds.
147 * buildbot/scripts/sample.cfg: make the sample Manhole config use
148 a localhost-only port, to encourage better security
150 * docs/buildbot.texinfo (Change Sources): mention
153 * .darcs-boring: add a Darcs boringfile
155 * README (REQUIREMENTS): stop claiming compatibility with
158 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
161 2006-05-27 Brian Warner <warner@lothar.com>
163 * buildbot/__init__.py: bump to 0.7.3+ while between releases
164 * docs/buildbot.texinfo: same
166 2006-05-23 Brian Warner <warner@lothar.com>
168 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
169 * docs/buildbot.texinfo: set version to match
170 * NEWS: update for 0.7.3
172 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
173 give a quick mapping from VC system to possible ChangeSources
174 (Build Properties): add 'buildername'
176 * buildbot/process/base.py (Build.setupStatus): oops, set
177 'buildername' and 'buildnumber' properties
178 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
181 2006-05-22 Brian Warner <warner@lothar.com>
183 * docs/buildbot.texinfo (Build Properties): explain the syntax of
184 property interpolation better
186 * README (INSTALLATION): remove old '-v' argument from recommended
189 * docs/buildbot.texinfo (ShellCommand): add docs for description=
190 and descriptionDone= arguments. Thanks to Niklaus Giger for the
193 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
194 'svnversion' instead of grepping the output of 'svn info', much
195 simpler and avoids CR/LF problems on windows. Thanks to Olivier
196 Bonnet for the suggestion.
197 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
198 require the WC_PATH argument, so run 'svnversion .' instead.
200 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
201 aren't supposed to have 'self' in their argument list
203 2006-05-21 Brian Warner <warner@lothar.com>
205 * buildbot/process/step.py (ShellCommand.start): make
206 testInterpolate pass. I was passing the uninterpolated command to
207 the RemoteShellCommand constructor
208 (ShellCommand._interpolateProperties): oops, handle non-list
209 commands (i.e. strings with multiple words separated by spaces in
210 them) properly, instead of forgetting about them.
212 * buildbot/test/test_properties.py (Run.testInterpolate): new test
213 to actually try to use build properties in a real build. This test
215 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
216 to start and evaluate builds
218 * buildbot/test/test__versions.py: add a pseudo-test to record
219 what version of Twisted/Python/Buildbot are running. This should
220 show up at the beginning of _trial_tmp/test.log, and exists to help
221 debug other problems.
223 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
224 a filename to be served as 'robots.txt' to discourage web spiders.
225 Adapted from a patch by Tobi Vollebregt, thanks!
226 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
227 (Waterfall.test_waterfall): tweak the way that filenames are put
228 into the config file, to accomodate windows pathnames better.
230 * docs/buildbot.texinfo (HTML Waterfall): document it
232 * buildbot/process/process_twisted.py
233 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
234 changed the build process. The new setup.py no longer takes the
236 (FullTwistedBuildFactory.__init__): same
237 (TwistedReactorsBuildFactory.__init__): same
239 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
240 be placed in the [hooks] section of the central repository (the
241 one that everybody pushes changes to).
243 2006-05-20 Brian Warner <warner@lothar.com>
245 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
246 .darcs-context file, use binary mode. I think this was causing a
247 Darcs failure under windows.
249 2006-05-19 Brian Warner <warner@lothar.com>
251 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
252 use a timezone string of +0000 and gmtime, since this timestamp is
253 sent to a buildmaster and %z is broken.
255 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
256 string and localtime, since this timestamp will only be consumed
257 locally, and %z is broken.
259 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
260 gmtime, since this timestamp is returned to the buildmaster, and
263 2006-05-18 Brian Warner <warner@lothar.com>
265 * NEWS: update in preparation for next release
267 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
268 setup-repository and do-we-have-the-vc-tools code into a separate
269 "helper" class, which sticks around in a single module-level
270 object. This seems more likely to continue to work in the future
271 than having it hide in the TestCase and hope that TestCases stick
272 around for a long time.
274 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
275 addremove' has been deprecated in recent versions of mercurial, so
278 2006-05-07 Brian Warner <warner@lothar.com>
280 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
281 operating under windows, move the file before opening it, since
282 you can't rename a file that somebody has open.
284 * buildbot/process/base.py (Build.setupBuild): if something goes
285 wrong while creating a Step, log the name and arguments, since the
286 error message when you get the number of arguments wrong is really
289 2006-05-06 Brian Warner <warner@lothar.com>
291 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
292 bugs in twisted-specific code not covered by my unit tests, this
293 time use 'cmd' argument instead of self.cmd
295 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
296 fix stupid braino: either use startwith or find()==0, not both.
297 (TwistedReactorsBuildFactory.__init__): another dumb typo
299 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
300 mark this test as TODO under windows, since process-killing seems
301 dodgy there. We'll come back to this later and try to fix it
304 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
305 and don't include a timezone
306 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
307 This should avoid the windows-with-verbose-timezone-name problem
309 (Patch.testPatch): add a test which runs 'patch' with less
310 overhead than the full VCBase.do_patch sequence, to try to isolate
311 a windows test failure. This one uses slave.commands.ShellCommand
312 and 'patch', but none of the VC code.
314 * buildbot/slave/commands.py (getCommand): use which() to find the
315 executables for 'cvs', 'svn', etc. This ought to help under
318 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
319 working directory before starting. If an earlier test failed, the
320 leftover directory would mistakenly flunk a later test.
321 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
322 Make sure that we use the right commandlines if which("tla") picks
323 up "tla.exe" (as it does under windows).
324 (TlaSupport.do_get): factor out this tla-vs-baz difference
325 (TlaSupport.vc_create): more tla-vs-baz differences
327 * buildbot/test/test_slavecommand.py
328 (ShellBase.testShellMissingCommand): stop trying to assert
329 anything about the error message: different shells on different
330 OSes with different languages makes it hard, and it really isn't
331 that interesting of a thing to test anyway.
333 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
334 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
335 "Panther"), because it has a bug which flunks a couple tests in
336 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
337 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
338 able to test that yet.
340 2006-04-30 Brian Warner <warner@lothar.com>
342 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
343 make sure child commands emit messages in english, so our regexps
344 will match. Thanks to Nikaus Giger for identifying the problems.
345 (VCBase._do_vctest_export_1): mode="export" is not responsible
346 for setting the "got_revision" property, since in many cases it is
347 not convenient to determine.
348 (SVNSupport.capable): when running 'svn --version' to check for
349 ra_local, we want error messages in english
350 * buildbot/test/test_slavecommand.py
351 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
352 to emit the error message in english
354 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
355 the environment with $LC_ALL="C" so that Commands which need to
356 parse the output of their child processes can obtain it in
358 (SVN.parseGotRevision): call "svn info" afterwards instead of
359 watching the output of the "svn update" or "svn checkout".
360 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
361 (Arch.parseGotRevision): same
362 (Bazaar.parseGotRevision): same
363 (Mercurial.parseGotRevision): same
365 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
366 $LC_ALL="C" when running commands under 'buildbot try', too
368 * buildbot/test/__init__.py: remove the global os.environ()
369 setting, instead we do it just for the tests that run commands and
370 need to parse their output.
372 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
373 remove the overly-short .timeout on this test, because non-DNotify
374 platforms must fall back to polling which happens at 10 second
375 intervals, so a 5 second timeout would never succeed.
377 2006-04-24 Brian Warner <warner@lothar.com>
379 * docs/buildbot.texinfo (Installing the code): update trial
380 invocation, SF#1469116 by Niklaus Giger.
381 (Attributes of Changes): updated branch-name examples to be
382 a bit more realistic, SF#1475240 by Stephen Davis.
384 * contrib/windows/buildbot2.bat: utility wrapper for windows
385 developers, contributed by Nick Trout (after a year of neglect..
388 * buildbot/test/test_vc.py (*.capable): store the actual VC
389 binary's pathname in VCS[vcname], so it can be retrieved later
390 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
391 strip out non-numeric timezone information, specifically the funky
392 German string that his system produced that confuses CVS.
393 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
394 allow Darcs tests to work on windows
395 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
396 procutils.which() everywhere, to allow tryclient to work under
397 windows. Also from Niklaus Giger, SF#1463394.
399 * buildbot/twcompat.py (which): move the replacement for a missing
400 twisted.python.procutils.which from test_vc.py to here, so it can
401 be used in other places too (specifically tryclient.py)
403 2006-04-23 Brian Warner <warner@lothar.com>
405 * buildbot/status/html.py (StatusResourceBuild.body): replace the
406 bare buildbotURL/projectName line with a proper DIV, along with a
407 CSS class of "title", from Stefan Seefeld (SF#1461675).
408 (WaterfallStatusResource.body0): remove the redundant 'table'
410 (WaterfallStatusResource.body): same. Also add class="LastBuild"
411 to the top-row TR, and class="Activity" to the second-row TR,
412 rather than putting them in the individual TD nodes.
414 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
415 'got_revision' build property for all VC systems that implement
416 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
418 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
419 to determine which revision we actually obtained
420 (CVS.parseGotRevision): implement this for CVS, which just means
421 to grab a timestamp. Not ideal, and it depends upon the buildslave
422 having a clock that is reasonably well syncronized with the server,
423 but it's better than nothing.
424 (SVN.parseGotRevision): implement it for SVN, which is accurate
425 (Darcs.parseGotRevision): same
426 (Arch.parseGotRevision): same
427 (Bazaar.parseGotRevision): same
428 (Mercurial.parseGotRevision): same
430 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
431 keep a record of all non-stdout/stderr/header/rc status updates,
432 for the benefit of RemoteCommands that send other useful things,
434 (Source.commandComplete): put any 'got_revision' status values
435 into a build property of the same name
438 * buildbot/process/step_twisted.py (Trial): update to deal with
439 new ShellCommand refactoring
441 * docs/buildbot.texinfo (Build Properties): document new feature
442 that allows BuildSteps to get/set Build-wide properties like which
443 revision was requested and/or checked out.
445 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
446 * buildbot/status/builder.py (BuildStatus.getProperty): implement
447 it. Note that this bumps the persistenceVersion of the saved Build
448 object, so add the necessary upgrade-old-version logic to include
449 an empty properties dict.
451 * buildbot/process/base.py (Build.setProperty): implement it
452 (Build.getProperty): same
453 (Build.startBuild): change build startup to set 'branch',
454 'revision', and 'slavename' properties at the right time
456 * buildbot/process/step.py (BuildStep.__init__): change setup to
457 require 'build' argument in a better way
458 (LoggingBuildStep): split ShellCommand into two pieces, for better
459 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
460 a single RemoteCommand that sends stdout/stderr status text. It
461 also provides the usual commandComplete / createSummary /
462 evaluateCommand / getText methods to be overridden...
463 (ShellCommand): .. whereas ShellCommand is specifically for
464 running RemoteShellCommands. Other shell-like BuildSteps (like
465 Source) can inherit from LoggingBuildStep instead of ShellCommand
466 (WithProperties): marker class to do build-property interpolation
467 (Source): inherit from LoggingBuildStep instead of ShellCommand
470 * buildbot/test/test_properties.py: test new functionality
472 2006-04-21 Brian Warner <warner@lothar.com>
474 * buildbot/test/test_vc.py: rename testBranch to
475 testCheckoutBranch to keep the tests in about the right
478 2006-04-18 Brian Warner <warner@lothar.com>
480 * docs/buildbot.texinfo (PBListener): improve cross-references
481 between PBListener and 'buildbot statusgui', thanks to John Pye
484 2006-04-17 Brian Warner <warner@lothar.com>
486 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
487 running under Twisted-1.3.0, otherwise skipped tests are reported
490 * all: use isinstance() instead of 'type(x) is foo', suggested by
493 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
494 oops, fix a brain-fade from the other week, when making the
495 addStep changes. I changed all the __init__ upcalls to use the
496 wrong superclass name.
497 (FullTwistedBuildFactory.__init__): same
498 (TwistedDebsBuildFactory.__init__): same
499 (TwistedReactorsBuildFactory.__init__): same
500 (TwistedBuild.isFileImportant): use .startswith for clarity,
501 thanks to Neal Norwitz for the suggestions.
503 * contrib/viewcvspoll.py: script to poll a viewcvs database for
504 changes, then deliver them over PB to a remote buildmaster.
506 * contrib/svnpoller.py: added script by John Pye to poll a remote
507 SVN repository (by running 'svn log') from a cronjob, and run
508 'buildbot sendchange' to deliver the changes to a remote
510 * contrib/svn_watcher.py: added script by Niklaus Giger (a
511 modification of svnpoller.py), same purpose, but this one loops
512 internally (rather than expecting to run from a cronjob) and works
514 * contrib/README.txt: same
516 2006-04-11 Brian Warner <warner@lothar.com>
518 * all: fix a number of incorrect names and missing imports, thanks
519 to Anthony Baxter for the patch.
520 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
521 remove unused buggy method.
522 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
523 comes from shutil, not "shutils"
524 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
525 (Arch.checkSlaveVersion): same
526 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
528 * buildbot/process/step_twisted2.py: add some missing imports
529 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
530 this code used to live in twisted.internet.defer
532 2006-04-10 Brian Warner <warner@lothar.com>
534 * buildbot/process/step.py (Mercurial): add Mercurial support
535 * buildbot/slave/commands.py (Mercurial): same
536 * buildbot/scripts/tryclient.py (MercurialExtractor): same
537 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
538 not yet tested, but 'try' support *is* covered
539 * docs/buildbot.texinfo (Mercurial): document it
541 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
542 some debugging messages (turned off)
543 * buildbot/test/test_vc.py: improve debug messages
545 2006-04-07 Brian Warner <warner@lothar.com>
547 * buildbot/test/test_vc.py (which): define our own which() in case
548 we can't import twisted.python.procutils, because procutils doesn't
551 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
552 of SlaveLocks for performance tests
554 * docs/examples/twisted_master.cfg: update to match current usage
556 * buildbot/changes/p4poller.py (P4Source): add new arguments:
557 password, p4 binary, pollinterval, maximum history to check.
558 Patch from an anonymous sf.net contributor, SF#1219384.
559 * buildbot/process/step.py (P4Sync.__init__): add username,
560 password, and client arguments.
561 * buildbot/slave/commands.py (P4Sync): same
563 2006-04-05 Brian Warner <warner@lothar.com>
565 * buildbot/process/factory.py (BuildFactory.addStep): new method
566 to add steps to a BuildFactory. Use it instead of f.steps.append,
567 and you can probably avoid using the s() convenience function.
568 Patch from Neal Norwitz, sf.net #1412605.
569 (other): update all factories to use addStep
570 * buildbot/process/process_twisted.py: update all factories to use
573 2006-04-03 Brian Warner <warner@lothar.com>
575 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
576 work under windows too. Adapted from a patch by Niklaus Giger,
577 addresses SF#1463399.
579 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
580 spawned commands emit parseable results in english and not some
581 other language. Patch from Niklaus Giger, SF#1463395.
583 * README (INSTALLATION): discourage users from running unit tests on
584 a "network drive", patch from Niklaus Giger, SF#1463394.
586 2006-03-22 Brian Warner <warner@lothar.com>
588 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
589 function to turn a repository-relative pathname into a (branch,
590 branch-relative-filename) tuple. Change this function to handle
591 the branch naming policy used by your Subversion repository.
592 Thanks to AllMyData.com for sponsoring this work.
594 2006-03-16 Brian Warner <warner@lothar.com>
596 * buildbot/scripts/sample.cfg: add python-mode declaration for
597 vim. Thanks to John Pye for the patch.
599 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
600 command line, mention the importance of running 'crontab' as the
601 buildmaster/buildslave user. Thanks to John Pye for the catch.
603 2006-03-13 Brian Warner <warner@lothar.com>
605 * buildbot/status/words.py (IRC): add an optional password=
606 argument, which will be sent to Nickserv in an IDENTIFY message at
607 login, to claim the nickname. freenode requires this before the
608 bot can sent (or reply to) private messages. Thanks to Clement
609 Stenac for the patch.
610 * docs/buildbot.texinfo (IRC Bot): document it
612 * buildbot/status/builder.py (LogFile.merge): don't write chunks
613 larger than chunkSize. Fixes SF#1349253.
614 * buildbot/test/test_status.py (Log.testLargeSummary): test it
615 (Log.testConsumer): update to match new internal chunking behavior
617 2006-03-12 Brian Warner <warner@lothar.com>
619 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
621 * buildbot/test/test_maildir.py (MaildirTest): rename the
622 'timeout' method, as it collides with trial's internals
624 * buildbot/scripts/runner.py: add 'buildbot restart' command
625 (stop): don't sys.exit() out of here, otherwise restart can't work
626 * docs/buildbot.texinfo (Shutdown): document it
628 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
629 * buildbot/status/html.py (Waterfall.__init__): same
630 * buildbot/process/builder.py (Builder.startBuild): same
631 * buildbot/process/base.py (BuildRequest): same
632 * buildbot/sourcestamp.py (SourceStamp): same
633 * buildbot/scheduler.py (Nightly): same
635 * buildbot/__init__.py (version): bump to 0.7.2+ while between
637 * docs/buildbot.texinfo: same
639 2006-02-17 Brian Warner <warner@lothar.com>
641 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
642 * docs/buildbot.texinfo: set version number to match
643 * NEWS: update for 0.7.2
645 2006-02-16 Brian Warner <warner@lothar.com>
647 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
649 2006-02-09 Brian Warner <warner@lothar.com>
651 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
652 add text to explain per-build branch parameters
653 * NEWS: mention --umask
655 2006-02-08 Brian Warner <warner@lothar.com>
657 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
659 (SlaveOptions.optParameters): add --umask, to make it possible to
660 make buildslave-generated files (including build products) be
663 * buildbot/slave/bot.py (BuildSlave.startService): same
665 2006-01-23 Brian Warner <warner@lothar.com>
667 * buildbot/status/builder.py: urllib.quote() all URLs that include
668 Builder names, so that builders can include characters like '/'
669 and ' ' without completely breaking the resulting HTML. Thanks to
670 Kevin Turner for the patch.
671 * buildbot/status/html.py: same
672 * buildbot/test/test_web.py (GetURL.testBuild): match changes
674 * NEWS: update in preparation for upcoming release
676 2006-01-18 Brian Warner <warner@lothar.com>
678 * docs/examples/twisted_master.cfg: update to match the Twisted
679 buildbot: remove python2.2, switch to exarkun's buildslaves,
680 disable the .deb builder until we figure out how to build twisted
681 .debs from SVN, add some ktrace debugging to the OS-X build
682 process and remove the qt build, remove threadless builders,
683 change freebsd builder to use landonf's buildslave.
685 2006-01-12 Brian Warner <warner@lothar.com>
687 * buildbot/master.py (Manhole.__init__): let port= be a strports
688 specification string, but handle a regular int for backwards
689 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
690 used in master.cfg to limit connections to just the local host.
691 (BuildMaster.loadConfig): same for c['slavePortnum']
692 * buildbot/scheduler.py (Try_Userpass.__init__): same
693 * buildbot/status/client.py (PBListener.__init__): same
694 * buildbot/status/html.py (Waterfall.__init__): same, for both
695 http_port and distrib_port. Include backwards-compatibility checks
696 so distrib_port can be a filename string and still mean unix:/foo
697 * docs/buildbot.texinfo (Setting the slaveport): document it
698 (Debug options): same
699 (HTML Waterfall): same
702 * buildbot/test/test_config.py (ConfigTest): test it
704 * buildbot/master.py (BuildMaster.loadConfig): wait for the
705 slaveport's disownServiceParent deferred to fire before opening
706 the new one. Fixes an annoying bug in the unit tests.
708 2006-01-03 Brian Warner <warner@lothar.com>
710 * buildbot/master.py (BuildMaster): remove the .schedulers
711 attribute, replacing it with an allSchedulers() method that looks
712 for all IService children that implement IScheduler. Having only
713 one parent/child relationship means fewer opportunities for bugs.
714 (BuildMaster.allSchedulers): new method
715 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
716 also fix ugly bug that caused any config-file reload to
717 half-forget about the earlier Schedulers, causing an exception
718 when a Change arrived and was handed to a half-connected
719 Scheduler. The exception was in scheduler.py line 54ish:
720 self.parent.submitBuildSet(bs)
721 exceptions.AttributeError: 'NoneType' object has no attribute
723 (BuildMaster.addChange): update to use allSchedulers()
725 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
726 to work properly with twisted-1.3.0, where you must explicitly
727 include the __implements__ from parent classes
728 (BaseScheduler.__repr__): make it easier to distinguish distinct
730 (BaseUpstreamScheduler.__implements__): same
732 * buildbot/status/builder.py (Status.getSchedulers): update to
734 * buildbot/test/test_run.py (Run.testMaster): same
735 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
736 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
737 make sure Scheduler instances are left alone when an identical
738 config file is reloaded
739 (ConfigElements.testSchedulers): make sure Schedulers are properly
742 * Makefile (TRIALARGS): my local default Twisted version is now
743 2.1.0, update the trial arguments accordingly
745 2005-12-22 Brian Warner <warner@lothar.com>
747 * docs/examples/twisted_master.cfg: merge changes from pyr: add
750 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
751 addChange in the parent class, although I suspect this should be
752 fixed better in the future.
754 2005-11-26 Brian Warner <warner@lothar.com>
756 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
757 explode when branch==None, thanks to Kevin Turner for the catch
758 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
761 * buildbot/__init__.py (version): bump to 0.7.1+ while between
763 * docs/buildbot.texinfo: same
765 2005-11-26 Brian Warner <warner@lothar.com>
767 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
768 * docs/buildbot.texinfo: set version number to match
770 2005-11-26 Brian Warner <warner@lothar.com>
772 * NEWS: update for 0.7.1
774 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
775 sure that unsubscribe works even if we never sent an ETA update.
776 Also, don't explode on duplicate unsubscribe.
777 (BuildStepStatus.addLog): make the convenience "return self"-added
778 watcher automatically unsubscribe when the Step finishes.
779 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
780 (BuildStatus.stepStarted): same auto-unsubscribe
781 (BuilderStatus.buildStarted): same auto-unsubscribe
783 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
785 (IStatusReceiver.stepStarted): same
786 (IStatusReceiver.logStarted): same
788 * buildbot/test/test_run.py (Status): move the Status test..
789 * buildbot/test/test_status.py (Subscription): .. to here
791 2005-11-25 Brian Warner <warner@lothar.com>
795 * buildbot/locks.py: fix the problem in which loading a master.cfg
796 file that changes some Builders (but not all of them) can result
797 in having multiple copies of the same Lock. Now, the real Locks
798 are kept in a table inside the BotMaster, and the Builders/Steps
799 use "LockIDs", which are still instances of MasterLock and
800 SlaveLock. The real Locks are instances of the new RealMasterLock
801 and RealSlaveLock classes.
802 * buildbot/master.py (BotMaster.getLockByID): new method to
803 convert LockIDs into real Locks.
804 * buildbot/process/base.py (Build.startBuild): convert LockIDs
805 into real Locks before building
806 * buildbot/process/step.py (BuildStep.startStep): same
807 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
808 exercises the problem
811 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
812 what Schedulers are available
814 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
815 work by Dobes Vandermeer and hacked mercilessly by me. This offers
816 'cron'-style build scheduling at certain times of day, week,
818 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
820 * buildbot/scheduler.py (Scheduler): change fileIsImportant
821 handling: treat self.fileIsImportant more as an attribute that
822 contains a callable than as a method. If the attribute is None,
823 don't call it and assume all filenames are important. It is still
824 possible to provide a fileIsImportant method in a subclass,
826 (AnyBranchScheduler): handle fileIsImportant=None, previously it
828 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
829 test using AnyBranchScheduler with fileIsImportant=None
831 2005-11-24 Brian Warner <warner@lothar.com>
833 * buildbot/test/test_config.py (StartService): don't claim a fixed
834 port number, instead set slavePort=0 on the first pass, figure out
835 what port was allocated, then switch to a config file that uses
838 * buildbot/master.py (BuildMaster.loadConfig): close the old
839 slaveport before opening the new one, because unit tests might
840 replace slavePort=0 with the same allocated portnumber, and if we
841 don't wait for the old port to close first, we get a "port already
842 in use" error. There is a tiny race condition here, but the only
843 threat is from other programs that bind (statically) to the same
844 port number we happened to be allocated, and only if those
845 programs use SO_REUSEADDR, and only if they get control in between
848 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
850 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
851 deleted ChangeSources before adding any new ones
852 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
853 compare_attrs, to make sure that a config-file reload does not
854 unnecessarily replace an unmodified ChangeSource instance
855 * buildbot/test/test_config.py (ConfigTest.testSources): update
857 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
858 mean "don't build anything", and add a warning if it gets used
859 because it isn't actually useful.
861 * contrib/svn_buildbot.py: update example usage to match the port
862 number that gets used by the PBChangeSource
863 * buildbot/scripts/sample.cfg: add example of PBChangeSource
865 2005-11-22 Brian Warner <warner@lothar.com>
867 * NEWS: start collecting items for next release
869 * buildbot/process/step.py (SVN.computeSourceRevision): assume
870 revisions are strings
871 (P4Sync.computeSourceRevision): same
873 * buildbot/status/html.py (StatusResourceBuild.body): add a link
874 to the Buildbot's overall status page
875 (StatusResourceBuilder.body): same
877 2005-11-15 Brian Warner <warner@lothar.com>
879 * buildbot/master.py (BuildMaster.loadConfig): serialize the
880 config-file loading, specifically to make sure old StatusTargets
881 are finished shutting down before new ones start up (thus
882 resolving a bug in which changing the Waterfall object would fail
883 because both new and old instances were claiming the same
884 listening port). Also load new Schedulers after all the new
885 Builders are set up, in case they fire off a new build right away.
886 * buildbot/test/test_config.py (StartService): test it
888 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
889 the branch name to the mail body
891 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
892 Without it, a config-file reload fails to update an existing
894 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
895 username/passwd to compare_attrs, for the same reason
896 * buildbot/status/html.py (Waterfall): add favicon to
897 compare_attrs, same reason
899 2005-11-05 Brian Warner <warner@lothar.com>
901 * buildbot/scripts/tryclient.py (createJobfile): stringify the
902 baserev before stuffing it in the jobfile. This resolves problems
903 under SVN (and probably Arch) where revisions are expressed as
904 numbers. I'm inclined to use string-based revisions everywhere in
905 the future, but this fix should be safe for now. Thanks to Steven
906 Walter for the patch.
908 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
909 binary mode when opening pickle files, to make windows work
910 better. Thanks to Dobes Vandermeer for the catch.
911 * buildbot/status/builder.py (BuildStatus.saveYourself): same
912 (BuilderStatus.getBuildByNumber): same
913 (Status.builderAdded): same
914 * buildbot/master.py (BuildMaster.loadChanges): same
916 * buildbot/util.py (Swappable): delete unused leftover code
918 * buildbot/process/step.py (SVN): when building on a non-default
919 branch, add the word "[branch]" to the VC step's description, so
920 it is obvious that we're not building the usual stuff. Likewise,
921 when we are building a specific revision, add the text "rNNN" to
922 indicate what that revision number is. Thanks to Brad Hards and
923 Nathaniel Smith for the suggestion.
924 (Darcs.startVC): same
926 (Bazaar.startVC): same
928 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
929 typo, caught by Mark Dillavou, closes SF#1216636.
931 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
932 about a test to add some day
934 * docs/examples/twisted_master.cfg: update: bot1 can now handle
935 the 'full-2.3' build, and the 'reactors' build is now run under
936 python-2.4 because the buildslave no longer has gtk/etc bindings
937 for earlier versions.
939 2005-11-03 Brian Warner <warner@lothar.com>
941 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
942 method, takes an IBuildStatus and rebuilds it. It might make more
943 sense to add this to IBuildControl instead, but that instance goes
944 away completely once the build has finished, and resubmitting
945 builds can take place weeks later.
946 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
947 * buildbot/status/html.py (StatusResourceBuild): also stash an
948 IBuilderControl so we can use resubmitBuild.
949 (StatusResourceBuild.body): render "resubmit" button if we can.
950 Also add hrefs for each BuildStep
951 (StatusResourceBuild.rebuild): add action for "resubmit" button
952 (StatusResourceBuilder.getChild): give it an IBuilderControl
954 * buildbot/status/builder.py (Status.getURLForThing): change the
955 URL for BuildSteps to have a "step-" prefix, so the magic URLs
956 that live as targets of buttons like "stop" and "rebuild" can't
958 * buildbot/status/builder.py (Status.getURLForThing): same
959 * buildbot/status/html.py (StatusResourceBuild.getChild): same
960 (StepBox.getBox): same
961 * buildbot/test/test_web.py (GetURL): same
964 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
965 exclusivity checks after Source.__init__ upcall, so misspelled
966 arguments will be reported more usefully
967 (Darcs.__init__): same
969 2005-10-29 Brian Warner <warner@lothar.com>
971 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
972 builder. Move the Try scheduler off to a separate port.
974 2005-10-27 Brian Warner <warner@lothar.com>
976 * buildbot/clients/gtkPanes.py
977 (TwoRowClient.remote_builderRemoved): disappearing Builders used
978 to cause the app to crash, now they don't.
980 * buildbot/clients/debug.py: display the buildmaster's location
981 in the window's title bar
983 2005-10-26 Brian Warner <warner@lothar.com>
985 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
986 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
987 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
989 * buildbot/status/html.py (td): put a single non-breaking space
990 inside otherwise empty <td> elements, as a workaround for buggy
991 browsers which would optimize them away (along with any associated
992 styles, like the kind that create the waterfall grid borders).
993 Patch from Frerich Raabe.
995 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
996 argv-list as an argument, defaulting to ["-to"], which is
997 appropriate for the Trial that comes with Twisted-2.1.0 and
998 earlier. The Trial in current Twisted SVN wants
999 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1000 defaults to an empty list.
1001 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1002 match it, now that trialMode= is a list instead of a single string
1004 * buildbot/__init__.py (version): bump to 0.7.0+ while between
1006 * docs/buildbot.texinfo: same
1008 2005-10-24 Brian Warner <warner@lothar.com>
1010 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1011 * docs/buildbot.texinfo: set version number to match
1013 2005-10-24 Brian Warner <warner@lothar.com>
1015 * README: update for 0.7.0
1017 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1019 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1020 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1021 send the branch= argument unless the user really provided one, to
1022 retain compatibility with older buildmasters that don't accept
1024 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1027 * docs/buildbot.texinfo: update lots of stuff
1029 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1030 to the 'buildbot sendchange' command
1031 * buildbot/clients/sendchange.py (Sender.send): same
1032 * buildbot/changes/pb.py (ChangePerspective): same
1033 * buildbot/test/test_changes.py (Sender.testSender): test it
1035 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1036 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1037 for consistency with other BuildStep arguments that use camelCase.
1038 Well, at least more of them use camelCase (like flunkOnWarnings)
1039 than don't.. I wish I'd picked one style and stuck with it
1040 earlier. Annoying, but it's best done before the release, since
1041 these arguments didn't exist at all in 0.6.6 .
1043 * buildbot/test/test_vc.py (SVN.testCheckout): same
1044 (Darcs.testPatch): same
1045 * docs/buildbot.texinfo (SVN): document the change
1046 (Darcs): same, add some build-on-branch docs
1047 * docs/examples/twisted_master.cfg: match change
1049 * buildbot/process/step.py (BuildStep): rename
1050 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1051 how it is normally used.
1052 * buildbot/test/test_steps.py (Version.checkCompare): same
1054 * buildbot/process/step.py (CVS.startVC): refuse to build
1055 update/copy -style builds on a non-default branch with an old
1056 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1057 concern is that it will do a VC 'update' in an existing tree when
1058 it is supposed to be switching branches (and therefore clobbering
1059 the tree to do a full checkout), thus building the wrong source.
1060 This used to be a warning, but I think the confusion it is likely
1061 to cause warrants making it an error.
1062 (SVN.startVC): same, also make mode=export on old slaves an error
1063 (Darcs.startVC): same
1064 (Git.startVC): improve error message for non-Git-enabled slaves
1065 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1066 specific revision is built on a slave that doesn't pay attention
1067 to args['revision'], because for slowly-changing trees it will
1068 probably do the right thing, and because we have no way to tell
1069 whether we're asking it to build the most recent version or not.
1070 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1072 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1073 that 'master' is in host:portnum format, to catch errors sooner
1075 2005-10-23 Brian Warner <warner@lothar.com>
1077 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1078 when creating the list of warning messages, include the line
1079 immediately after each WARNING: line, since that's usually where
1080 the file and line number wind up.
1082 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1087 2005-10-22 Brian Warner <warner@lothar.com>
1089 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1090 patch from Brad Hards
1091 * buildbot/status/classic.css: same
1092 * buildbot/test/test_web.py (Waterfall): match changes
1094 * buildbot/test/test_steps.py (BuildStep.setUp): set
1095 nextBuildNumber so the test passes
1096 * buildbot/test/test_status.py (MyBuilder): same
1098 * buildbot/status/html.py (StatusResourceBuild.body): revision
1099 might be numeric, so stringify it before html-escapifying it
1100 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1101 timer for the upcoming build
1102 * buildbot/status/classic.css: add background-color attributes for
1103 offline/waiting/building classes
1105 * buildbot/status/builder.py (BuildStatus): derive from
1106 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1107 the default (i.e. unknown) .slavename to "???" instead of None,
1108 since even unknown slavenames need to be printed eventually.
1109 (BuilderStatus): also derive from styles.Versioned . More
1110 importantly, determine .nextBuildNumber at creation/unpickling
1111 time by scanning the directory of saved BuildStatus instances and
1112 choosing one larger than the highest-numbered one found. This
1113 should fix the problem where random errors during upgrades cause
1114 the buildbot to forget about earlier builds. .nextBuildNumber is
1115 no longer stored in the pickle.
1116 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1117 at least log the error. Also call Builder.determineNextBuildNumber
1118 once the basedir is set.
1120 * buildbot/master.py (BuildMaster.loadChanges): do
1121 styles.doUpgrade afterwards, in case I decide to make Changes
1122 derived from styles.Versioned some day and forget to make this
1126 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1127 when running under older pythons (<2.3) in which the shlex module
1128 doesn't have a 'split' function.
1130 * buildbot/process/step.py (ShellCommand.start): make
1131 errorMessages= be a list of strings to stuff in the log before the
1132 command actually starts. This makes it easier to flag multiple
1133 warning messages, e.g. when the Source steps have to deal with an
1135 (CVS.startVC): handle slaves that don't handle multiple branches
1136 by switching into 'clobber' mode
1137 (SVN.startVC): same. Also reject branches without base_url
1138 (Darcs.startVC): same. Also reject revision= in older slaves
1139 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1140 (Bazaar.startVC): same, and test for baz separately than for arch
1142 * buildbot/slave/commands.py (cvs_ver): document new features
1144 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1145 (BuildStep.slaveVersionNewEnough): more useful utility method
1146 * buildbot/test/test_steps.py (Version): start testing it
1148 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1149 the 'force' command requires python2.3, for the shlex.split method
1151 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1152 since we don't use it anymore. The Twisted buildbot uses a
1155 2005-10-21 Brian Warner <warner@lothar.com>
1157 * buildbot/process/process_twisted.py: rework all BuildFactory
1158 classes to take a 'source' step as an argument, instead of
1159 building up the SVN instance in the factory.
1160 * docs/examples/twisted_master.cfg: enable build-on-branch by
1161 providing a base_url and default_branch
1163 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1164 control over --branch and --revision, not that they are always
1166 * buildbot/status/html.py (StatusResourceBuilder.force): same
1167 (StatusResourceBuild.body): display SourceStamp components
1169 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1170 IRC 'force' command, so it can be shared with an eventual
1171 command-line-tool 'buildbot force' mode.
1172 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1174 2005-10-20 Brian Warner <warner@lothar.com>
1176 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1178 * docs/examples/twisted_master.cfg: update to use Schedulers
1180 * buildbot/scripts/sample.cfg: update with Schedulers
1182 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1183 method specifically for use by HTML "force build" button and the
1184 IRC "force" command. Raises an immediate error if there are no
1186 (IBuilderControl.requestBuild): make this just submit a build, not
1187 try to check for existing slaves or set up any when-finished
1188 Deferreds or anything.
1189 * buildbot/process/builder.py (BuilderControl): same
1190 * buildbot/status/html.py (StatusResourceBuilder.force): same
1191 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1192 * buildbot/test/test_slaves.py: same
1193 * buildbot/test/test_web.py: same
1195 2005-10-19 Brian Warner <warner@lothar.com>
1197 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1198 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1200 2005-10-18 Brian Warner <warner@lothar.com>
1202 * buildbot/status/html.py: provide 'status' argument to most
1203 StatusResourceFOO objects
1204 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1205 and Logfiles" section to make the Build page into a more-or-less
1206 comprehensive source of status information about the build
1208 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1209 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1211 2005-10-17 Brian Warner <warner@lothar.com>
1213 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1214 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1215 out what to do about other projects: the correct options for
1216 recent Twisteds will not work for older ones.
1218 2005-10-15 Brian Warner <warner@lothar.com>
1220 * buildbot/status/builder.py (Status.getURLForThing): add method
1221 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1222 use this in email/IRC status clients to make them more useful, by
1223 providing the end user with hints on where to learn more about the
1224 object being reported on.
1225 * buildbot/test/test_web.py (GetURL): tests for it
1227 2005-10-14 Brian Warner <warner@lothar.com>
1229 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1230 fix bug resulting from deferredResult changes
1232 2005-10-13 Brian Warner <warner@lothar.com>
1234 * buildbot/test/test_changes.py: remove use of deferredResult
1235 * buildbot/test/test_config.py: same
1236 * buildbot/test/test_control.py: same
1237 * buildbot/test/test_status.py: same
1238 * buildbot/test/test_vc.py: this is the only remaining use, since
1239 it gets used at module level. This needs to be replaced by some
1240 sort of class-level run-once routine.
1242 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1244 * lots: implement multiple slaves per Builder, which means multiple
1245 current builds per Builder. Some highlights:
1246 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1247 of (state,currentBuilds) instead of (state,currentBuild)
1248 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1249 (IBuildStatus.getSlavename): new method, so you can tell which
1250 slave got used. This only gets set when the build completes.
1251 (IBuildRequestStatus.getBuilds): new method
1253 * buildbot/process/builder.py (SlaveBuilder): add a .state
1254 attribute to track things like ATTACHING and IDLE and BUILDING,
1256 (Builder): .. the .slaves attribute here, which has been turned
1257 into a simple list of available slaves. Added a separate
1258 attaching_slaves list to track ones that are not yet ready for
1260 (Builder.fireTestEvent): put off the test-event callback for a
1261 reactor turn, to make tests a bit more consistent.
1262 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1263 ping fails due to an exception. This needs work, I'm worried that
1264 a code error could lead to a constantly re-connecting slave.
1265 Especially since I'm trying to move to a distinct remote_ping
1266 method, separate from the remote_print that we currently use.
1267 (BuilderControl.requestBuild): return a convenience Deferred that
1268 provides an IBuildStatus when the build finishes.
1269 (BuilderControl.ping): ping all connected slaves, only return True
1270 if they all respond.
1272 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1273 reconnect when we shut down.
1275 * buildbot/status/builder.py: implement new methods, convert
1276 one-build-at-a-time methods to handle multiple builds
1277 * buildbot/status/*.py: do the same in all default status targets
1278 * buildbot/status/html.py: report the build's slavename in the
1279 per-Build page, report all buildslaves on the per-Builder page
1281 * buildbot/test/test_run.py: update/create tests
1282 * buildbot/test/test_slaves.py: same
1283 * buildbot/test/test_scheduler.py: remove stale test
1285 * docs/buildbot.texinfo: document the new builder-specification
1286 'slavenames' parameter
1288 2005-10-12 Brian Warner <warner@lothar.com>
1290 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1291 report failure correctly, causing Dependent builds to run when
1292 they shouldn't have.
1293 * buildbot/status/builder.py (BuildSetStatus): same
1294 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1295 (Set.testSuccess): test the both-pass case too
1296 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1297 fix this test: it was ending too early, masking the failure before
1298 (Logger): specialized StatusReceiver to make sure the dependent
1299 builds aren't even started, much less completed.
1301 2005-10-07 Brian Warner <warner@lothar.com>
1303 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1304 bot.SlaveBuilder being disowned in the middle of a build
1306 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1307 this inherit from StatusReceiver. Also upcall in __init__. This
1308 fixes the embarrasing crash when the new buildSetSubmitted method
1309 is invoked and Waterfall/etc don't implement their own.
1310 * buildbot/test/test_run.py: add a TODO note about a test to catch
1311 just this sort of thing.
1313 * buildbot/process/builder.py (Builder.attached): remove the
1314 already-attached warning, this situation is normal. Add some
1315 comments explaining it.
1317 2005-10-02 Brian Warner <warner@lothar.com>
1319 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1320 OverflowError when setting up dnotify, because some 64-bit systems
1321 have problems with signed-vs-unsigned constants and trip up on the
1322 DN_MULTISHOT flag. Patch from Brad Hards.
1324 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1326 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1327 progressMetrics, description, descriptionDone to the 'parms' list,
1328 and make use the 'parms' list from the implementation class
1329 instead of only BuildStep to initialize the parameters. This
1330 allows buildbot.process.factory.s() to initialize all the parms,
1331 not just those defined in directly by BuildStep.
1333 2005-09-03 Brian Warner <warner@lothar.com>
1335 * NEWS: start adding items for the next release
1337 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1338 python2.2 tests, change 'Quick' builder to only use python2.3
1340 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1342 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1343 the "Ping Builder" button if the build control is available; the
1344 user sees an exception otherwise
1346 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1348 2005-09-01 Brian Warner <warner@lothar.com>
1350 * buildbot/interfaces.py (IBuilderStatus.getState): update
1351 signature, point out that 'build' can be None
1352 (IBuildStatus.getETA): point out ETA can be none
1354 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1356 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1358 2005-08-31 Brian Warner <warner@lothar.com>
1360 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1361 update to match correct signature: removed 'eta' argument
1362 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1364 2005-08-30 Brian Warner <warner@lothar.com>
1366 * buildbot/status/builder.py (LogFile): remove the assertion that
1367 blows up when you try to overwrite an existing logfile, instead
1368 just emit a warning. This case gets hit when the buildmaster is
1369 killed and doesn't get a chance to write out the serialized
1370 BuilderStatus object, so the .nextBuildNumber attribute gets out
1373 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1374 the 'buildbot sendchange' arguments, for the Darcs context file
1375 * docs/buildbot.texinfo (sendchange): document it
1377 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1378 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1379 (IStatus.getSchedulers): new method
1380 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1381 (Status.getSchedulers): implement
1382 * buildbot/process/builder.py (Builder): maintain
1383 BuilderStatus.pendingBuilds
1384 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1385 (TryBase.addChange): Try schedulers should ignore Changes
1387 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1388 for 'try' on CVS/SVN
1389 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1391 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1392 report status properly.
1393 (Try.createJob): implement unique buildset IDs
1395 * buildbot/status/client.py (StatusClientPerspective): add a
1396 perspective_getBuildSets method for the benefit of jobdir-style
1398 * docs/buildbot.texinfo (try): more docs
1399 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1402 2005-08-18 Brian Warner <warner@lothar.com>
1404 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1405 actually work. It's functional but still kind of clunky. Also, it
1406 only works with the pb-style.. needs to be made to work with the
1409 * buildbot/status/client.py (RemoteBuildSet): new class
1410 (RemoteBuildRequest): same
1411 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1412 object, not the internal BuildStatus object.
1413 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1414 outside of the usual buildStarted() return value.
1415 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1417 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1418 (Try_Userpass_Perspective.perspective_try): return a remotely
1419 usable BuildSetStatus object
1421 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1422 isStarted()/waitUntilStarted()
1424 2005-08-16 Brian Warner <warner@lothar.com>
1426 * buildbot/status/builder.py: implement IBuildSetStatus and
1427 IBuildRequestStatus, wire them into place.
1428 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1429 methods into the BuildSetStatus object.
1430 * buildbot/interfaces.py: same
1431 (IStatus.getBuildSets): new method to get pending BuildSets
1432 (IStatusReceiver.buildsetSubmitted): new method which hears about
1434 * buildbot/master.py (BuildMaster.submitBuildSet): same
1435 * buildbot/process/base.py (BuildRequest): same, replace
1436 waitUntilStarted with subscribe/unsubscribe
1437 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1438 subscribe instead of waitUntilStarted
1439 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1441 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1443 * buildbot/test/test_buildreq.py: update for new code
1444 * buildbot/test/test_control.py (Force.testRequest): same
1447 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1448 for Darcs to not use the tempfile module, so it works under
1449 python-2.2 too. We really didn't need the full cleverness of that
1450 module, since the slave has exclusive control of its own builddir.
1452 2005-08-15 Brian Warner <warner@lothar.com>
1454 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1455 for CVS trees. It doesn't work for non-trunk branches,
1457 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1460 * Makefile: make it easier to test against python2.2
1462 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1463 tearDown2, so things like Arch can unregister archives as they're
1464 shutting down. The previous subclass-override-tearDown technique
1465 resulted in a nested maybeWait() and test failures under
1468 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1469 where we can (Arch), add a branch= argument to set the branch used
1471 (BazExtractor): extract the branch too
1472 (TlaExtractor): same
1473 * buildbot/scripts/runner.py (TryOptions): add --branch
1474 * docs/buildbot.texinfo (try): document --branch/try_branch
1476 * buildbot/slave/commands.py (Darcs): implement get-revision for
1477 Darcs, so that 'try' will work. This requires the tempfile module
1480 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1481 of revisions, branches, and 'try' in the process.
1483 2005-08-11 Brian Warner <warner@lothar.com>
1485 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1486 this, it got broken at some point in the last few releases
1487 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1488 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1489 specifically the removal of ETA information from the tuple
1491 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1494 * docs/buildbot.texinfo (try): document both --builder and
1495 'try_builders' in .buildbot/options
1496 * buildbot/scripts/runner.py (TryOptions): add --builder,
1497 accumulate the values into opts['builders']
1498 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1499 * buildbot/test/test_runner.py (Try): add some quick tests to make
1500 sure 'buildbot try --options' and .buildbot/options get parsed
1501 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1502 use --builder control
1504 * docs/buildbot.texinfo (try): add --port argument to PB style
1506 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1507 actual SourceStamp. Still need to extract a branch name, somehow.
1508 (Try): finish implementing the try client side, still need a UI
1509 for specifying which builders to use
1510 (Try.getopt): factor our options/config-file reading
1511 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1513 * buildbot/test/test_vc.py: match SourceStampExtractor change
1515 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1516 causes the twisted log to be sent to stderr
1518 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1520 2005-08-10 Brian Warner <warner@lothar.com>
1522 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1523 style is 90% done, still missing status reporting or waiting for
1524 the buildsets to finish, and it is completely untested.
1526 * buildbot/trybuild.py: delete file, move contents to ..
1527 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1528 * buildbot/test/test_vc.py: match the move
1530 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1531 of the TryScheduler, no buildsetID or status-tracking support yet
1532 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1534 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1535 possible to set the basedir after __init__ time, so it is easier
1536 to use as a Service-child of the BuildMaster instance
1538 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1539 that delivers messages to its Service parent instead of requiring
1540 a subclass to be useful. This turns out to be much easier to build
1543 * buildbot/scripts/tryclient.py (createJob): utility code to
1544 create jobfiles, will eventually be used by 'buildbot try'
1546 2005-08-08 Brian Warner <warner@lothar.com>
1548 * docs/buildbot.texinfo (try): add docs on the
1549 as-yet-unimplemented Try scheduler
1551 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1552 * buildbot/test/test_scheduler.py: .. here
1553 (Scheduling.testTryJobdir): add placeholder test for 'try'
1555 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1556 addEntry merging (>=chunkSize) behavior
1557 (Log.testConsumer): update to handle new callLater(0) behavior
1559 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1560 both the MAX_LENGTH bugfix and the resumeProducing hang.
1562 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1563 put off the actual resumeProducing for a moment with
1564 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1565 causes large logfiles to hang midway through.
1567 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1568 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1569 and to improve memory usage when streaming the file out to a web
1571 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1572 make this work cleanly
1574 2005-08-03 Brian Warner <warner@lothar.com>
1576 * buildbot/trybuild.py: new file for 'try' utilities
1577 (getSourceStamp): run in a tree, find out the baserev+patch
1578 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1579 implemented for SVN and Darcs, still working on Arch. I don't know
1580 how to make CVS work yet.
1582 * docs/buildbot.texinfo: document the 'buildbot' command-line
1583 tool, including the not-yet-implemented 'try' feature, and the
1584 in-flux .buildbot/ options directory.
1586 2005-07-20 Brian Warner <warner@lothar.com>
1588 * buildbot/locks.py: added temporary id() numbers to Lock
1589 descriptions, to track down a not-really-sharing-the-Lock bug
1591 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1593 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1594 needed for python2.2 compatibility
1595 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1596 are from the __future__
1598 2005-07-19 Brian Warner <warner@lothar.com>
1600 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1601 message when schedulers use unknown builders
1603 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1604 SlaveLock('name') and MasterLock('name') are distinct
1606 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1607 c['schedulers'] in such a way that we can actually accept
1609 * buildbot/test/test_config.py: check it
1611 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1612 utility method to *all* the Schedulers
1613 (Periodic.listBuilderNames): same
1615 * docs/buildbot.texinfo (Interlocks): update chapter to match
1618 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1619 to make sure that c['sources'], c['schedulers'], and c['status']
1620 are all lists of the appropriate objects, and that the Schedulers
1621 all point to real Builders
1622 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1623 'listBuilderNames' utility method to support this
1624 * buildbot/scheduler.py: implement the utility method
1625 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1627 * docs/buildbot.texinfo: add some @cindex entries
1629 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1630 if it wasn't already set: most tla commands will fail unless one
1632 (Arch.createRepository): and disable bazaar's revision cache, since
1633 they cause test failures (the multiple repositories we create all
1634 interfere with each other through the cache)
1636 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1637 bring it properly up to date with twisted-2.0 test guidelines
1639 * buildbot/master.py (BuildMaster): remove references to old
1640 'interlock' module, this caused a bunch of post-merge test
1642 * buildbot/test/test_config.py: same
1643 * buildbot/process/base.py (Build): same
1645 * buildbot/test/test_slaves.py: stubs for new test case
1647 * buildbot/scheduler.py: add test-case-name tag
1648 * buildbot/test/test_buildreq.py: same
1650 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1651 unnecessary init code
1652 (Bot.remote_setBuilderList): match it
1654 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1656 * buildbot/changes/mail.py (parseSyncmail): update comment
1658 * buildbot/test/test_slavecommand.py: disable Shell tests on
1659 platforms that don't suport IReactorProcess
1661 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1662 all places where we open logfiles. It causes OS-X to open the file
1663 in some weird mode that that prevents us from mixing reads and
1664 writes to the same filehandle, which we depend upon to implement
1665 _generateChunks properly. This change doesn't appear to break
1666 win32, on which "b" and "t" are treated differently but a missing
1667 flag seems to be interpreted as "t".
1669 2005-07-18 Brian Warner <warner@lothar.com>
1671 * buildbot/slave/commands.py (ShellCommand): overhaul
1672 error-handling code, to try and make timeout/interrupt work
1673 properly, and make win32 happier
1674 * buildbot/test/test_slavecommand.py: clean up, stop using
1675 reactor.iterate, add tests for timeout and interrupt
1676 * buildbot/test/sleep.py: utility for a new timeout test
1678 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1679 code from the local-usebranches branch
1681 2005-07-17 Brian Warner <warner@lothar.com>
1683 * buildbot/process/process_twisted.py
1684 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1685 minutes, to match the other twisted BuildFactories, and don't
1686 excuse failures in c/qt/win32 reactors any more.
1688 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1689 'freebsd' builders, since the buildslaves have been unavailable
1692 2005-07-13 Brian Warner <warner@lothar.com>
1694 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1695 build-on-branch feature
1697 * buildbot/process/step.py (Darcs.__init__): add base_url and
1698 default_branch arguments, just like SVN
1699 (Arch.__init__): note that the version= argument is really the
1702 * buildbot/slave/commands.py (SourceBase): keep track of the
1703 repository+branch that was used for the last checkout in
1704 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1705 match, we clobber the directory and perform a fresh checkout
1706 rather than trying to do an in-place update. This should protect
1707 us against trying to get to branch B by doing an update in a tree
1708 obtained from branch A.
1709 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1710 (SVN.setup): same, just the svnurl
1711 (Darcs.setup): same, just the repourl
1712 (Arch.setup): same, arch coordinates (url), version, and
1713 buildconfig. Also pull the buildconfig from the args dictionary,
1714 which we weren't doing before, so the build-config was effectively
1716 (Arch.sourcedirIsUpdateable): don't try to update when we're
1717 moving to a specific revision: arch can't go backwards, so it is
1718 safer to just clobber the tree and checkout a new one at the
1720 (Bazaar.setup): same sourcedata as Arch
1722 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1723 use maybeWait, to work with twisted-1.3.0 and twcompat
1724 (Dependencies.testRun_Pass): same
1726 * buildbot/test/test_vc.py: rearrange, cleanup
1728 * buildbot/twcompat.py: add defer.waitForDeferred and
1729 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1730 can work under twisted-1.3.0 .
1732 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1733 now created at setUp time. This increases the runtime of the test
1734 suite considerably (from 91 seconds to 151), but it removes the
1735 need for an offline tarball, which should solve a problem I've
1736 seen where the test host has a different version of svn than the
1737 tarball build host. The new code also validates that mode=update
1738 really picks up recent commits. This approach will also make it
1739 easier to test out branches, because the code which creates the VC
1740 branches is next to the code which uses them. It will also make it
1741 possible to test some change-notification hooks, by actually
1742 performing a VC commit and watching to see the ChangeSource get
1745 2005-07-12 Brian Warner <warner@lothar.com>
1747 * docs/buildbot.texinfo (SVN): add branches example
1748 * docs/Makefile (buildbot.ps): add target for postscript manual
1750 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1751 * buildbot/test/test_locks.py: same
1753 * buildbot/process/step.py (Darcs): comment about default branches
1755 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1756 c['interlocks'] in the config file, complain if it is present.
1757 Scan all locks in c['builders'] to make sure the Locks they use
1759 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1760 add some tests to check for non-uniquely-named Locks
1761 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1762 since the unique-Lock validation code requires it now
1764 * buildbot/locks.py: fix test-case-name
1766 * buildbot/interlock.py: remove old file
1768 2005-07-11 Brian Warner <warner@lothar.com>
1770 * buildbot/test/test_interlock.py: rename to..
1771 * buildbot/test/test_locks.py: .. something shorter
1773 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1774 versions (after 2.0.1) changed internet.TCPClient to shut down the
1775 connection in stopService. Change the code to handle this
1778 * buildbot/process/base.py (Build): handle whole-Build locks
1779 * buildbot/process/builder.py (Builder.compareToSetup): same
1780 * buildbot/test/test_interlock.py: make tests work
1782 * buildbot/process/step.py (BuildStep.startStep): complain if a
1783 Step tries to claim a lock that's owned by its own Build
1784 (BuildStep.releaseLocks): typo
1786 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1787 file reloads don't replace unchanged Builders
1789 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1790 rewrite to cover new Locks instead of old c['interlocks']
1791 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1795 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1796 start the master and connect the buildslave
1798 * buildbot/process/step.py (FailingDummy.done): finish with a
1799 FAILURE status rather than raising an exception
1801 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1802 stringify a BuildRequest.reason that is None
1804 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1806 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1807 allow scheduler.Dependent to work
1808 * buildbot/buildset.py (BuildSet): set .reason and .results
1810 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1811 slaves, to make the test stop hanging. It still fails, of course,
1812 because I haven't even started to implement Locks.
1814 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1816 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1817 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1818 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1819 (Dependent): new class for downstream build dependencies
1820 * buildbot/test/test_dependencies.py: tests (still failing)
1822 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1824 2005-07-07 Brian Warner <warner@lothar.com>
1826 * buildbot/test/runutils.py (RunMixin): factored this class out..
1827 * buildbot/test/test_run.py: .. from here
1828 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1829 added new buildbot.locks tests (which all hang right now)
1830 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1831 * buildbot/process/step.py: claim/release per-BuildStep locks
1833 * docs/Makefile: add 'buildbot.html' target
1835 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1836 interpreted as "HEAD", so that all VC steps can accept branch=None
1837 and have it mean the "default branch".
1839 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1841 2005-07-07 Brian Warner <warner@lothar.com>
1843 * docs/examples/twisted_master.cfg: update to match current usage
1845 * docs/buildbot.texinfo (System Architecture): comment out the
1846 image, it doesn't exist yet and just screws up the HTML manual.
1848 2005-07-05 Brian Warner <warner@lothar.com>
1850 * debian/.cvsignore: oops, missed one. Removing leftover file.
1852 2005-06-17 Brian Warner <warner@lothar.com>
1854 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1855 changed its output in 1.2.0, don't mistakenly think that the
1856 subversion we find isn't capable of supporting our tests.
1858 * debian/*: remove the debian/ directory and its contents, to make
1859 life easier for the proper Debian maintainer
1861 * Makefile (release): same
1863 2005-06-07 Brian Warner <warner@lothar.com>
1865 * everything: create a distinct SourceStamp class to replace the
1866 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1867 Changed the signature of Source.startVC to include the revision
1868 information (instead of passing it through self.args). Implement
1869 branches for SVN (now only Darcs/Git is missing support). Add more
1872 2005-06-06 Brian Warner <warner@lothar.com>
1874 * everything: rearrange build scheduling. Create a new Scheduler
1875 object (configured in c['schedulers'], which submit BuildSets to a
1876 set of Builders. Builders can now use multiple slaves. Builds can
1877 be run on alternate branches, either requested manually or driven
1878 by changes. This changed some of the Status classes. Interlocks
1879 are out of service until they've been properly split into Locks
1880 and Dependencies. treeStableTimer, isFileImportant, and
1881 periodicBuild have all been moved from the Builder to the
1883 (BuilderStatus.currentBigState): removed the 'waiting' and
1884 'interlocked' states, removed the 'ETA' argument.
1886 2005-05-24 Brian Warner <warner@lothar.com>
1888 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1889 erroneously abandons the connection (in clientConnectionFailed)
1890 for non-UserErrors, which means that if we lose the connection due
1891 to a network problem or a timeout, we'll never try to reconnect.
1892 Fix this by not upcalling to the buggy parent method. Note:
1893 twisted-2.0 fixes this, but the function only has 3 lines so it
1894 makes more sense to copy it than to try and detect the buggyness
1895 of the parent class. Fixes SF#1207588.
1897 * buildbot/changes/changes.py (Change.branch): doh! Add a
1898 class-level attribute to accomodate old Change instances that were
1899 pickled before 0.6.5 (where .branch was added for new Changes).
1900 This fixes the exception that occurs when you try to look at an
1901 old Change (through asHTML).
1903 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1906 2005-05-23 Brian Warner <warner@lothar.com>
1908 * buildbot/__init__.py (version): release 0.6.6
1910 2005-05-23 Brian Warner <warner@lothar.com>
1912 * NEWS: update for 0.6.6 release
1913 * debian/changelog: same
1915 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1916 before starting: this was done by twistd back when we spawned it,
1917 now that we're importing the pieces and running them in the
1918 current process, we have to do it ourselves. This allows
1919 master.cfg to import files from the same directory without
1920 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1921 Stichele for the catch.
1922 (Options.opt_version): Add a --version command (actually, just make
1923 the existing --version command emit Buildbot's version too)
1925 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1926 fix to make this behave like other LogFiles, this time to handle
1927 existing LogFiles on disk. (add the missing .upgrade method)
1928 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1930 2005-05-21 Brian Warner <warner@lothar.com>
1932 * buildbot/test/test_runner.py (Create.testMaster): match the
1933 rawstring change in runner.py:masterTAC
1935 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1936 TwistedWords is installed
1937 * buildbot/test/test_status.py: same, with TwistedMail
1939 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1940 some old, deprecated, and removed config keys). This should enable
1941 you to use the base buildbot functionality with Twisted-2.0.0 when
1942 you don't also have TwistedWeb and TwistedWords installed
1944 2005-05-20 Brian Warner <warner@lothar.com>
1946 * buildbot/scripts/runner.py (run): call sendchange(), not
1947 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1948 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1949 (stop): don't wait for process to die when sending SIGHUP
1950 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1951 directory name gets interpreted, which you don't want
1954 * buildbot/__init__.py (version): bump to 0.6.5+ while between
1957 2005-05-18 Brian Warner <warner@lothar.com>
1959 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1961 2005-05-18 Brian Warner <warner@lothar.com>
1963 * README: update for 0.6.5
1964 * debian/changelog: same
1966 * buildbot/changes/changes.py: rename tag= to branch=, since
1967 that's how we're using it, and my design for the upcoming "build a
1968 specific branch" feature wants it. also, tag= was too CVS-centric
1969 * buildbot/changes/mail.py (parseSyncmail): same
1970 * buildbot/process/base.py (Build.isBranchImportant): same
1971 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1972 * docs/buildbot.texinfo (Attributes of Changes): same
1974 * NEWS: update tag=, update for upcoming release
1976 2005-05-17 Brian Warner <warner@lothar.com>
1978 * buildbot/scripts/runner.py (stop): actually poll once per
1979 second, instead of re-killing the poor daemon once per second.
1980 Sleep briefly (0.1s) before the first poll, since there's a good
1981 chance we can avoid waiting the full second if the daemon shuts
1982 down quickly. Also remove the sys.exit() at the end.
1983 (start): remove the unneighborly sys.exit()
1985 * Makefile: improve permission-setting to not kick Arch so badly
1987 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1988 default --keepalive=600, since it doesn't hurt very much, and it's
1989 a hassle to discover that you need it.
1990 * buildbot/test/test_runner.py (Create.testSlave): test it
1992 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1993 IRC bot about EXCEPTION
1995 * buildbot/status/client.py (PBListener): upcall more correctly
1997 * buildbot/process/base.py (Build.allStepsDone): if a step caused
1998 an exception mark the overall build with EXCEPTION, not SUCCESS
2000 * buildbot/scripts/runner.py (makefile_sample): remove the leading
2002 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2003 * Makefile: update some release-related stuff
2005 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2006 gets called when there isn't actually an active process, just end
2007 the Command instead of blowing up. I don't know how it gets into
2008 this state, but the twisted win32 buildslave will sometimes hang,
2009 and when it shakes its head and comes back, it thinks it's still
2010 running a Command. The next build causes this command to be
2011 interrupted, but the lack of self.process.pid breaks the interrupt
2014 * NEWS: document changes since the last release
2016 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2017 look for Makefile.buildbot instead of a bare Makefile . The
2018 'buildbot start' does not install this file, so you have to
2019 manually copy it if you want to customize startup behavior.
2020 (createMaster): change 'buildbot master' command to create
2021 Makefile.sample instead of Makefile, to create master.cfg.sample
2022 instead of master.cfg (requiring you to copy it before the
2023 buildmaster can be started). Both sample files are kept up to
2024 date, i.e. they are overwritten if they have been changed. The
2025 'buildbot.tac' file is *not* overwritten, but if the new contents
2026 don't match the old, a 'buildbot.tac.new' file is created and the
2027 user is warned. This seems to be a much more sane way to handle
2028 startup files. Also, don't sys.exit(0) when done, so we can run
2029 unit tests against it.
2030 (createSlave): same. Don't overwrite the sample info/ files.
2031 * buildbot/scripts/sample.mk: remove. the contents were pulled
2032 into runner.py, since they need to match the behavior of start()
2036 * docs/buildbot.texinfo (Launching the daemons): document it
2037 * buildbot/test/test_runner.py (Create): test it
2039 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2040 version that can handle string-in-string tests, because otherwise
2041 python-2.2 fails the tests. It'd be tremendous if Trial's test
2042 took two strings under 2.2 too.
2044 * everything: fixed all deprecation warnings when running against
2045 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2046 few that come from Twisted itself). This involved putting most of
2047 the Twisted-version specific code in the new buildbot.twcompat
2048 module, and creating some abstract base classes in
2049 buildbot.changes.base and buildbot.status.base (which might be
2050 useful anyway). __implements__ is a nuisance and requires an ugly
2051 'if' clause everywhere.
2053 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2054 delay before finishing the test: it seems that smtp.sendmail
2055 doesn't hang up on the server, so we must wait a moment so it can
2056 hang up on us. This removes the trial warning about an unclean
2059 2005-05-16 Brian Warner <warner@lothar.com>
2061 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2062 tuple of (delay, repeats).
2063 * buildbot/test/test_vc.py (Retry): test it
2064 * docs/buildbot.texinfo (Source Checkout): document it
2065 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2066 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2067 doVCFull() are handled by re-trying the checkout (after a delay)
2068 some number of times.
2069 (ShellCommand._startCommand): make header lines easier to read
2071 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2073 (WebTest.test_logfile): make sure master gets shut down, silences
2074 some "unclean reactor" test errors
2076 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2077 reactor once after shutdown, something in certain versions of
2078 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2079 fails, svn-trunk is ok.
2081 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2082 second win32 error message
2084 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2085 validating the ETA, so the tests don't fail on slow systems
2087 2005-05-15 Brian Warner <warner@lothar.com>
2089 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2090 the new LogFile class, so upgrading works properly
2091 (LogFileProducer.resumeProducing): survive resumeProducing after
2092 we've exhausted the chunkGenerator
2094 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2096 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2097 (Log.testUpgrade): same
2099 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2100 Builds and logs with a cron job.
2102 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2103 of the old non-offline LogFile, added code to upgrade these to
2104 new-style contents-live-on-disk instances at load time (in a way
2105 that doesn't invalidate the old Build pickles, so upgrading to
2106 0.6.5 is not a one-way operation). Got rid of everything related
2108 (LogFile.__init__): create LogFiles with the parent step status,
2109 the log's name, and a builder-relative filename where it can keep
2110 the contents on disk.
2111 (LogFile.hasContents): new method, clients are advised to call it
2112 before getText or getChunks and friends. If it returns False, the
2113 log's contents have been deleted and getText() will raise an
2115 (LogFile.getChunks): made it a generator
2116 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2117 Consumer (except one that takes chunks instead of strings). This
2118 enables streaming of very large logfiles without storing the whole
2120 (BuildStatus.generateLogfileName): create names like
2121 12-log-compile-output, with a _0 suffix if required to be unique
2122 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2123 or earlier) logfiles into new-style ones
2124 (BuilderStatus): remove everything related to 'stub' builds. There
2125 is now only one build cache, and we don't strip logs from old
2127 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2128 since we no longer fight to keep it in the cache
2130 * buildbot/status/html.py (TextLog.render_GET): use a
2131 ChunkConsumer to stream the log entries efficiently.
2132 (ChunkConsumer): wrapper which consumes chunks and writes
2135 * buildbot/test/test_twisted.py (Parse.testParse): use a
2136 LogFile-like object instead of a real one
2138 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2139 (Log.testMerge3): validate more merge behavior
2140 (Log.testChunks): validate LogFile.getChunks
2141 (Log.testUpgrade): validate old-style LogFile upgrading
2142 (Log.testSubscribe): validate LogFile.subscribe
2143 (Log.testConsumer): validate LogFile.subscribeConsumer
2145 * buildbot/interfaces.py (IStatusLogStub): remove
2146 (IStatusLog.subscribeConsumer): new method
2147 (IStatusLog.hasContents): new method
2148 (IStatusLogConsumer): describes things passed to subscribeConsumer
2150 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2151 the log contents if it does not have any contents.
2152 (StatusResourceBuildStep.body): same
2153 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2155 2005-05-14 Brian Warner <warner@lothar.com>
2157 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2158 timeouts to try and make the windows metabuildslave not hang
2160 2005-05-13 Mike Taylor <bear@code-bear.com>
2162 * buildbot/slave/commands.py (rmdirRecursive): added a check
2163 to ensure the path passed into rmdirRecursive actually exists.
2164 On win32 a non-existant path would generate an exception.
2166 2005-05-13 Brian Warner <warner@lothar.com>
2168 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2169 shutil.rmtree which behaves correctly on windows in the face of
2170 files that you have to chmod before deleting. Thanks to Bear at
2171 the OSAF for the routine.
2172 (SourceBase.doClobber): use rmdirRecursive
2174 2005-05-12 Brian Warner <warner@lothar.com>
2176 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2177 method generate chunks instead of returning a big list. This
2178 allows the same method to be used for both old LogFile and new
2180 (OfflineLogFile.getText): use the generator
2181 (OfflineLogFile.subscribe): same
2182 * buildbot/status/html.py (TextLog.resumeProducing): same
2183 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2185 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2186 point out that OfflineLogFile does not currently work with
2187 html.Waterfall . Fixing this is high-priority.
2189 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2190 apparently windows defaults to using stdout
2192 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2193 better message on failure so I can figure out the win32 problem
2195 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2196 log messages to include more useful copies of the command being
2197 run, the argv array, and the child command's environment.
2198 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2200 2005-05-11 Brian Warner <warner@lothar.com>
2202 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2204 * Makefile: update the deb-snapshot version
2206 * docs/buildbot.texinfo: move all .xhtml docs into a new
2207 .texinfo-format document, adding a lot of material in the process.
2208 This is starting to look like a real user's manual. Removed all
2209 the Lore-related files: *.xhtml, *.css, template.tpl .
2210 * docs/Makefile: simple makefile to run 'makeinfo'
2211 * buildbot/scripts/sample.cfg: rearrange slightly
2212 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2214 2005-05-10 Brian Warner <warner@lothar.com>
2216 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2217 different name for the internal twistw module, handle it.
2219 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2220 * setup.py: .. and stop trying to install it
2222 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2223 'git'), the new linux kernel VC system (http://kernel.org/git/).
2224 Thanks to Brandon Philips for the patch.
2225 * buildbot/slave/commands.py (Git): same
2227 2005-05-06 Brian Warner <warner@lothar.com>
2229 * buildbot/status/builder.py (OfflineLogFile): replace the default
2230 LogFile with a form that appends its new contents to a disk file
2231 as they arrive. The complete log data is never kept in RAM. This
2232 is the first step towards handling very large (100MB+) logfiles
2233 without choking quite so badly. (The other half is
2234 producer/consumer on the HTML pages).
2235 (BuildStepStatus.addLog): use OfflineLogFile by default
2236 (BuildStatus.getLogfileName): helper code to give the
2237 OfflineLogFile a filename to work with
2239 * buildbot/test/test_status.py (Results.testAddResults): update
2240 tests to handle new asserts
2241 * buildbot/test/test_vc.py (Patch.doPatch): same
2242 * buildbot/test/test_steps.py (BuildStep.setUp): same
2244 2005-05-05 Brian Warner <warner@lothar.com>
2246 * buildbot/scripts/runner.py (start): if there is no Makefile,
2247 launch the app by importing twistd's internals and calling run(),
2248 rather than spawning a new twistd process. This stands a much
2249 better chance of working under windows.
2250 (stop): kill the process with os.kill instead of spawning
2251 /bin/kill, again to reduce the number of external programs which
2252 windows might not have in the PATH. Also wait up to 5 seconds for
2253 the process to go away, allowing things like 'buildbot stop;
2254 buildbot start' to be reliable in the face of slow shutdowns.
2256 * buildbot/master.py (Dispatcher.__getstate__): remove old
2257 .tap-related methods
2258 (BuildMaster.__getstate__): same
2260 * buildbot/slave/bot.py (makeService): same
2261 (Options.longdesc): same
2262 * buildbot/scripts/runner.py: copy over some old mktap option text
2264 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2265 'buildbot master' now creates a buildbot.tac file, so there is no
2266 longer a create-instance/save/reload sequence. mktap is dead, long
2268 * buildbot/scripts/sample.mk: use twistd -y, not -f
2269 * buildbot/test/test_config.py: remove mktap-based test
2270 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2271 * README: don't reference mktap
2273 * docs/source.xhtml: document some of the attributes that Changes
2276 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2278 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2279 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2280 * buildbot/changes/changes.py (Change)
2281 * buildbot/changes/mail.py (parseSyncmail)
2282 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2284 * buildbot/process/base.py (Build.isTagImportant)
2288 2005-05-04 Brian Warner <warner@lothar.com>
2290 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2291 connection after sending the change, so that unit tests don't
2292 complain about sockets being left around
2294 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2295 exception in phase=0 rendering
2296 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2298 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2300 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2301 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2302 and configuring builders with tuples.
2303 * buildbot/test/test_config.py: stop testing compatibility with
2304 deprecated config keys
2305 * buildbot/test/test_run.py: same
2307 2005-05-03 Brian Warner <warner@lothar.com>
2309 * contrib/arch_buildbot.py: survive if there are no logfiles
2310 (username): just use a string, os.getlogin isn't reliable
2312 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2313 so 'buildbot sendchange' actually works. The earlier test only
2314 covered the internal (non-reactor-running) form.
2316 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2317 script to notify the buildmaster about changes
2319 * buildbot/scripts/runner.py (sendchange): new command to send a
2320 change to a buildbot.changes.pb.PBChangeSource receiver.
2321 * buildbot/test/test_changes.py (Sender): test it
2323 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2324 after any reading of the config file, not just when we do it in
2325 startService. This makes some tests a bit cleaner.
2327 * buildbot/changes/pb.py: add some log messages
2329 * buildbot/process/base.py (Build.startBuild): fix a bug that
2330 caused an exception when the build terminated in the very first
2332 (Build.stepDone): let steps return a status of EXCEPTION. This
2333 terminates the build right away, and sets the build's overall
2334 status to EXCEPTION too.
2335 * buildbot/process/step.py (BuildStep.failed): return a status of
2336 EXCEPTION when that is what has happened.
2338 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2339 implement this, allowing Arch-based projects to get precise
2340 checkouts instead of always using the latest code
2341 (Bazaar): create variant of Arch to let folks use baz instead of
2342 tla. Requires a new buildslave too.
2343 * buildbot/slave/commands.py (Arch): add 'revision' argument
2344 (Bazaar): create variant of Arch that uses baz instead of tla.
2345 Remove the code that extracts the archive name from the
2346 register-archive output, since baz doesn't provide it, and require
2347 the user provide both the archive name and its location.
2348 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2350 2005-05-02 Brian Warner <warner@lothar.com>
2352 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2353 thanks to Nick Trout.
2355 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2356 deals better with source Makefile coming from a read-only CVS
2357 checkout. Thanks to Nick Trout for the catch.
2359 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2362 2005-04-28 Brian Warner <warner@lothar.com>
2364 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2366 * debian/changelog: update for 0.6.4
2368 2005-04-28 Brian Warner <warner@lothar.com>
2370 * README.w32: add a checklist of steps for getting buildbot
2372 * MANIFEST.in: include it in the tarball
2376 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2377 broken .tap files from 0.6.3 by getting rid of .services,
2378 .namedServices, and .change_svc at load time.
2380 2005-04-27 Brian Warner <warner@lothar.com>
2382 * NEWS: update in preparation for new release
2384 * buildbot/test/test_config.py (Save.testSave): don't pull in
2385 twisted.scripts.twistd, we don't need it and it isn't for windows
2388 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2389 accomodate win32 which can't do atomic-rename
2391 2005-04-27 Brian Warner <warner@lothar.com>
2393 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2394 timeouts to help the slow metabuildbot not flunk them so much
2395 (Disconnect.testBuild3): same
2396 (Disconnect.testBuild4): same
2397 (Disconnect.testInterrupt): same
2399 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2400 setup, it was completely broken for new buildmasters (those which
2401 did not have a 'change.pck' already saved. Thanks to Paul Warren
2402 for catching this (embarrassing!) bug.
2403 (Dispatcher.__getstate__): don't save our registered avatar
2404 factories, since they'll be re-populated when the config file is
2406 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2407 tests (since the real mktap-generated BuildMaster doesn't save
2409 (BuildMaster.__getstate__): don't save any service children,
2410 they'll all be re-populated when the config file is re-read.
2411 * buildbot/test/test_config.py (Save.testSave): test for this
2413 2005-04-26 Brian Warner <warner@lothar.com>
2415 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2416 rendered with Blender.. looks a bit nicer.
2417 * buildbot/docs/images/icon.blend: add the Blender file for it
2419 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2420 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2421 running under windows. This appears to be the best way to allow
2422 BuildSteps to do something normal like 'trial -v buildbot.test' or
2423 'make foo' and still expect it to work. The idea is to make the
2424 BuildSteps look as much like what a developer would type when
2425 compiling or testing the tree by hand. This approach probably has
2426 problems when there are spaces in the arguments, so if you've got
2427 windows buildslaves, you'll need to pay close attention to your
2430 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2431 timezone to the timestamp column.
2432 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2434 * buildbot/scripts/runner.py (loadOptions): do something sane for
2435 windows, I think. We use %APPDATA%/buildbot instead of
2436 ~/.buildbot, but we still search everywhere from the current
2437 directory up to the root for a .buildbot/ subdir. The "is it under
2438 $HOME" security test was replaced with "is it owned by the current
2439 user", which is only performed under posix.
2440 * buildbot/test/test_runner.py (Options.testFindOptions): update
2441 tests to match. The "is it owned by the current user" check is
2442 untested. The test has been re-enabled for windows.
2444 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2445 any "\n" in the expected output with the platform-specific line
2446 separator. Make this separator "\r\n" on PTYs under unix, they
2447 seem to do that and I don't know why
2449 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2450 windows for now, I don't know what ~/.buildbot/ should mean there.
2452 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2453 win32 compatibility, don't use "/tmp"
2454 (Basedir.testChangeBuilddir): remove more unixisms
2456 2005-04-26 Brian Warner <warner@lothar.com>
2458 * buildbot/test/test_control.py (Force.rmtree): python2.2
2459 compatibility, apparently its shutil.rmtree ignore_errors=
2460 argument is ignored.
2461 * buildbot/test/test_run.py (Run.rmtree): same
2462 (RunMixin.setUp): same
2464 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2467 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2468 'substring in string' operator, must use string.find(substr)!=-1
2469 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2470 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2472 * buildbot/scripts/runner.py (loadOptions): add code to search for
2473 ~/.buildbot/, a directory with things like 'options', containing
2474 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2475 the current directory, your $HOME directory, or anywhere
2476 inbetween, as long as you're somewhere inside your home directory.
2477 (debugclient): look in ~/.buildbot/options for master and passwd
2478 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2479 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2481 * buildbot/status/client.py (makeRemote): new approach to making
2482 IRemote(None) be None, which works under Twisted-2.0
2483 * buildbot/test/test_status.py (Client.testAdaptation): test it
2485 * buildbot/status/builder.py (Status.builderAdded): when loading a
2486 pickled BuilderStatus in from disk, set its name after loading.
2487 The config file might have changed its name (but not its
2488 directory) while it wasn't looking.
2490 * buildbot/process/builder.py (Builder.attached): always return a
2491 Deferred, even if the builder was already attached
2492 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2494 2005-04-25 Brian Warner <warner@lothar.com>
2496 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2497 category-related exception when announcing a build has finished
2499 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2500 reference no-longer-existent changemaster.sources
2501 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2503 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2506 2005-04-25 Brian Warner <warner@lothar.com>
2508 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2510 * debian/changelog: update for 0.6.3
2512 2005-04-25 Brian Warner <warner@lothar.com>
2514 * MANIFEST.in: make sure debug.glade is in the tarball
2516 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2518 * NEWS: update for the imminent 0.6.3 release
2520 * buildbot/status/html.py (HtmlResource.content): make the
2521 stylesheet <link> always point at "buildbot.css".
2522 (StatusResource.getChild): map "buildbot.css" to a static.File
2523 containing whatever css= argument was provided to Waterfall()
2524 (Waterfall): provide the "classic" css as the default.
2525 * docs/waterfall.classic.css: move default CSS from here ..
2526 * buildbot/status/classic.css: .. to here
2528 * MANIFEST.in: make sure classic.css is included in the tarball
2529 * setup.py: and that it is installed too, under buildbot/status/
2531 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2532 the module level, because buildbot.tap files from 0.6.2 don't have
2533 it in their attribute dictionary.
2535 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2536 really exists at startup, might save some confusion somewhere.
2538 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2540 * docs/waterfall.classic.css:
2541 add a stylesheet that's almost the same as the "classic"
2544 * buildbot/status/builder.py:
2545 add EXCEPTION as a result - this is a problem for the bot
2546 maintainer, not a build problem for the changers
2547 * buildbot/process/step.py:
2548 use EXCEPTION instead of FAILURE for exceptions
2549 * buildbot/status/html.py:
2550 add build_get_class to get a class out of a build/buildstep
2551 finish naming the classes
2552 split out sourceNames to changeNames and builderNames so we
2553 can style them separately
2554 * docs/config.xhtml:
2555 finish documenting classes as they are right now
2557 * buildbot/status/html.py:
2558 name the classes as we agreed on IRC
2559 * docs/config.xhtml:
2562 * buildbot/status/html.py:
2563 same for cssclass->class_
2565 * buildbot/status/html.py:
2566 as decided on IRC, use class_ for the "class" attribute to not
2567 conflict with the class keyword, and clean up the messy **{} stuff.
2569 * buildbot/status/mail.py:
2570 put back "builders" argument, and fix docstring, because the
2571 code *ignores* builders listed in this argument
2573 * buildbot/process/builder.py:
2574 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2576 * docs/config.xhtml:
2577 describe the category argument for builders
2579 * buildbot/status/builder.py:
2580 Fix a silly bug due to merging
2582 * buildbot/process/builder.py:
2583 remove category from the process Builder ...
2584 * buildbot/status/builder.py:
2585 ... and add it to BuilderStatus instead.
2586 Set category on unpickled builder statuses, they might not have it.
2587 * buildbot/master.py:
2588 include category when doing builderAdded
2589 * buildbot/status/mail.py:
2590 return None instead of self for builders we are not interested in.
2591 * buildbot/test/test_run.py:
2592 fix a bug due to only doing deferredResult on "dummy" waiting
2593 * buildbot/test/test_status.py:
2594 add checks for the Mail IStatusReceiver returning None or self
2596 * buildbot/status/html.py:
2597 fix testsuite by prefixing page title with BuildBot
2599 * buildbot/status/builder.py:
2600 have .category in builder status ...
2601 * buildbot/process/builder.py:
2602 ... and set it from Builder
2603 * buildbot/status/html.py:
2604 make .css a class variable
2605 * buildbot/test/test_status.py:
2606 write more tests to cover our categories stuff ...
2607 * buildbot/status/mail.py:
2608 ... and fix the bug that this uncovered
2610 * buildbot/changes/mail.py:
2611 * buildbot/changes/pb.py:
2612 * buildbot/master.py:
2613 * buildbot/process/base.py:
2614 * buildbot/process/factory.py:
2615 * buildbot/process/interlock.py:
2616 * buildbot/process/step.py:
2617 * buildbot/process/step_twisted.py:
2618 * buildbot/slave/commands.py:
2619 * buildbot/status/builder.py:
2620 * buildbot/status/client.py:
2621 * buildbot/status/html.py:
2622 * buildbot/status/mail.py:
2623 * buildbot/status/progress.py:
2624 * buildbot/test/test_changes.py:
2625 * buildbot/test/test_config.py:
2626 * buildbot/test/test_control.py:
2627 * buildbot/test/test_interlock.py:
2628 * buildbot/test/test_maildir.py:
2629 * buildbot/test/test_mailparse.py:
2630 * buildbot/test/test_run.py:
2631 * buildbot/test/test_slavecommand.py:
2632 * buildbot/test/test_status.py:
2633 * buildbot/test/test_steps.py:
2634 * buildbot/test/test_twisted.py:
2635 * buildbot/test/test_util.py:
2636 * buildbot/test/test_vc.py:
2637 * buildbot/test/test_web.py:
2639 add test-case-name at the top of a whole set of files
2641 * buildbot/status/builder.py:
2642 keep order of addition when getting builder names
2643 * buildbot/status/words.py:
2644 * buildbot/test/test_run.py:
2645 add test for getBuilderNames
2647 * buildbot/process/base.py:
2648 * buildbot/process/step.py:
2649 * buildbot/status/builder.py:
2650 * buildbot/status/html.py:
2651 make buildbot css-able
2652 replace the color code for purple with purple, don't understand
2653 why it wasn't purple to start with
2655 * buildbot/status/words.py:
2656 ok, so it doesn't look like BuilderStatus.remote is still valid.
2657 Use what waterfall uses instead.
2659 * buildbot/interfaces.py:
2660 * buildbot/status/builder.py:
2661 * buildbot/status/html.py:
2662 * buildbot/status/mail.py:
2663 * buildbot/status/words.py:
2664 * buildbot/test/test_run.py:
2665 use categories everywhere and make it be a list. More sensible
2666 for the future. Also make words actually respect this in
2669 * buildbot/interfaces.py:
2670 add category argument to getBuilderNames
2671 * buildbot/process/builder.py:
2672 * buildbot/status/builder.py:
2673 * buildbot/status/html.py:
2674 * buildbot/status/mail.py:
2675 * buildbot/status/words.py:
2676 * buildbot/test/test_run.py:
2677 move from specifying builders by name to specifying the category
2679 * buildbot/status/html.py:
2680 * buildbot/status/words.py:
2681 add "builders=" to __init__ of status clients so they can
2682 limit themselves to the given list of builders to report on
2684 * buildbot/status/html.py: set the title to the product name
2686 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2688 * buildbot/interfaces.py:
2689 * buildbot/status/builder.py:
2690 more documentation. Hm, not sure if ChangeLog entries make sense
2693 2005-04-23 Brian Warner <warner@lothar.com>
2695 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2697 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2699 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2700 the sub-commands that log buildmaster status to stdout and to a
2701 GUI window, respectively.
2703 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2704 functionality is working again, but all the step-status and ETA
2705 stuff is missing. Commented out a lot of code pending more
2708 * buildbot/status/client.py: make sure that IRemote(None) is None
2710 * buildbot/changes/changes.py: import defer, oops
2711 (ChangeMaster): remove the .sources list, rely upon the fact that
2712 MultiServices can be treated as sequences of their children. This
2713 cleans up the add/remove ChangeSource routines a lot, as we keep
2714 exactly one list of the current sources instead of three.
2716 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2717 up an empty ChangeMaster at init time.
2718 (BuildMaster.loadChanges): if there are changes to be had from
2719 disk, replace self.change_svc with the new ones. If not, keep
2720 using the empty ChangeMaster set up in __init__.
2721 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2722 instead of a separate list, makes the code a bit cleaner.
2723 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2724 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2725 Extend the test to make sure we can get rid of the sources when
2728 2005-04-22 Brian Warner <warner@lothar.com>
2730 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2731 and info/host files when making the slave directory
2733 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2734 whendone= argument, just return the Deferred and let the caller do
2735 what they want with it.
2736 (Disconnect.testBuild1): wait for shutdownSlave
2737 (Basedir.testChangeBuilddir): new test to make sure changes to the
2738 builddir actually get propagated to the slave
2740 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2741 explicit method, rather than passing the builddir in __init__ .
2742 Make sure to update self.basedir too, this was broken before.
2743 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2744 builders and for ones that have just had their builddir changed.
2745 (BotFactory): add a class-level .perspective attribute, so
2746 BuildSlave.waitUntilDisconnected won't get upset when the
2747 connection hasn't yet been established
2748 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2749 tests can reach through it to inspect the SlaveBuilders
2751 * buildbot/process/base.py (Build.buildException): explain the
2752 log.err with a log.msg
2753 * buildbot/process/builder.py (Builder.startBuild): same
2754 (Builder._startBuildFailed): improve error message
2756 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2757 occurred because we lost the brand-new connection, retry instead
2758 of giving up. If not, it's probably an authorization failure, and
2759 it makes sense to stop trying. Make sure we log.msg the reason
2760 that we're log.err'ing the failure, otherwise test failures are
2761 really hard to figure out.
2763 * buildbot/master.py: change loadConfig() to return a Deferred
2764 that doesn't fire until the change has been fully implemented.
2765 This means any connected slaves have been updated with the new
2766 builddir. This change makes it easier to test the code which
2767 actually implements this builddir-updating.
2768 (BotPerspective.addBuilder): return Deferred
2769 (BotPerspective.removeBuilder): same
2770 (BotPerspective.attached): same
2771 (BotPerspective._attached): same. finish with remote_print before
2772 starting the getSlaveInfo, instead of doing them in parallel
2773 (BotPerspective.list_done): same
2774 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2775 actually calling slave.disconnect()
2776 (BotMaster.addBuilder): same
2777 (BotMaster.removeBuilder): same
2778 (BuildMaster.loadConfig): same
2779 (BuildMaster.loadConfig_Slaves): same
2780 (BuildMaster.loadConfig_Sources): same
2781 (BuildMaster.loadConfig_Builders): same
2782 (BuildMaster.loadConfig_status): same
2784 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2785 a Deferred that fires when the source is finally removed
2787 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2788 the previous tree on win32, where we have to do it synchronously,
2789 make sure we return a Deferred anyway.
2790 (SourceBase.doCopy): same
2792 * buildbot/scripts/runner.py (statusgui): use the text client for
2793 now, while I rewrite the Gtk one
2794 * buildbot/clients/base.py: strip out old code, leaving just the
2795 basic print-message-on-event functionality. I also remove the
2796 ReconnectingPBClientFactory, but it does at least quit when it
2797 loses the connection instead of going silent
2799 2005-04-21 Brian Warner <warner@lothar.com>
2801 * Makefile: minor tweaks
2803 * NEWS: point out deprecation warnings, new features for
2806 * buildbot/master.py (BuildMaster.loadConfig): emit
2807 DeprecationWarnings for Builders defined with tuples. Rearrange
2808 code to facility removal of deprecated configuration keys in the
2811 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2812 'buildbot' command to put a little Makefile in the target that
2813 helps you re-create the buildbot.tap file, start or stop the
2814 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2815 all the files 0600, since they contain passwords.
2816 (start): if there is a Makefile, and /usr/bin/make exists, use
2817 'make start' in preference to a raw twistd command. This lets
2818 slave admins put things like PYTHONPATH variables in their
2819 Makefiles and have them still work when the slave is started with
2820 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2821 be nice to first try the 'make' command and only fall back to
2822 twistd if it fails. TODO: the Makefile's "start" command does not
2823 add the --reactor=win32 argument when running under windows.
2824 (Options.debugclient, Options.statusgui): add sub-commands to launch
2825 the debug client (formerly in contrib/debugclient.py) and the
2826 Gtk status application (currently broken)
2827 * buildbot/clients/debug.py: move from contrib/debugclient.py
2828 * buildbot/clients/debug.glade: same
2830 * buildbot/test/test_trial.py: remove it. This requires some
2831 functionality out of Twisted that isn't there yet, and until then
2832 having it around just confuses things.
2834 * buildbot/test/test_slavecommand.py (Shell): test both with and
2835 without PTYs, and make sure that command output is properly
2836 interleaved in the with-PTY case. I think the without-PTY test
2837 should pass on windows, where we never use PTYs anyway.
2839 2005-04-20 Brian Warner <warner@lothar.com>
2841 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2843 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2845 * NEWS: start creating entries for the next release
2847 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2849 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2850 (WebTest.test_webPathname): same
2851 (WebTest.test_webPathname_port): same
2852 (WebTest.test_waterfall): use the default favicon rather than
2853 rooting around the filesystem for it. Open the expected-icon file
2854 in binary mode, to make win32 tests happier (thanks to Nick Trout
2856 * buildbot/status/html.py (buildbot_icon): win32 portability
2858 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2859 win32-compatibility fixes from Nick Trout, the "file not found" message
2860 is different under windows
2861 (FakeSlaveBuilder.__init__): clean up setup a bit
2862 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2864 2005-04-19 Brian Warner <warner@lothar.com>
2866 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2867 skip-if-repositories-are-unavailable test to not kill the trial
2868 that comes with Twisted-1.3.0
2870 * setup.py: install buildbot.png icon file when installing code
2872 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2873 environment used by the command, at least on the child side.
2875 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2876 this method needs to be added and implemented because it gets
2877 called under heavy load. I don't quite understand the
2878 producer/consumer API enough to write it.
2879 (StatusResource.getChild): add a resource for /favicon.ico
2880 (Waterfall.__init__): add favicon= argument
2881 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2882 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2883 (WebTest.test_webPathname): same
2884 (WebTest.test_webPathname_port): same
2885 * docs/config.xhtml: mention favicon=
2886 * buildbot/buildbot.png: add a default icon, dorky as it is
2888 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2890 * buildbot/master.py:
2891 * buildbot/process/base.py:
2892 * buildbot/process/builder.py:
2893 * buildbot/process/interlock.py:
2894 * buildbot/status/builder.py:
2895 * buildbot/status/html.py:
2896 * buildbot/status/mail.py:
2897 * buildbot/status/words.py:
2898 new documentation while digging through the code
2900 2005-04-17 Brian Warner <warner@lothar.com>
2902 * general: try to fix file modes on all .py files: a+r, a-x,
2903 but let buildbot/clients/*.py be +x since they're tools
2905 * docs/epyrun (addMod): when an import fails, say why
2907 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2909 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2911 * buildbot/process/base.py:
2912 * buildbot/process/builder.py:
2913 * buildbot/status/builder.py:
2914 new documentation while digging through the code
2916 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2918 * buildbot/changes/changes.py:
2919 * buildbot/changes/p4poller.py:
2920 * buildbot/interfaces.py:
2921 * buildbot/process/base.py:
2922 * buildbot/process/builder.py:
2923 * buildbot/process/step.py:
2924 * buildbot/process/step_twisted.py:
2925 * buildbot/slave/bot.py:
2926 * buildbot/slave/commands.py:
2927 * buildbot/status/builder.py:
2928 fix all docstrings to make epydoc happy. In the process of fixing
2929 some, I also moved pieces of docs, and removed some deprecated
2932 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2934 * buildbot/process/builder.py:
2935 * buildbot/process/interlock.py:
2936 * buildbot/process/process_twisted.py:
2937 * buildbot/process/step.py:
2938 BuildProcess -> Build, as it looks like that's what happened
2939 * buildbot/process/base.py:
2940 * buildbot/process/factory.py:
2943 2005-04-17 Brian Warner <warner@lothar.com>
2945 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2946 update compile command to accomodate the Twisted split.. now
2947 instead of './setup.py build_ext -i', you do './setup.py all
2948 build_ext -i', to run build_ext over all sub-projects.
2949 (FullTwistedBuildFactory): same
2950 (TwistedReactorsBuildFactory): same
2952 * buildbot/status/html.py (TextLog.finished): null out self.req
2953 when we're done, otherwise the reference cycle of TextLog to .req
2954 to .notifications to a Deferred to TextLog.stop keeps them from
2955 being collected, and consumes a huge (610MB on pyramid at last
2956 check) amount of memory.
2958 2005-04-11 Brian Warner <warner@lothar.com>
2960 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2961 normalize the VC-repository location.. makes SVN happier with
2962 certain test environments.
2964 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2965 RemoteShellCommand gets its own .env dictionary, so that code in
2966 start() doesn't mutate the original. I think this should fix the
2967 step_twisted.Trial problem where multiple identical components
2968 kept getting added to PYTHONPATH= over and over again.
2970 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2971 adding epydoc-format docstrings to many classes. Thanks to Thomas
2972 Vander Stichele for the patches.
2973 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2974 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2975 * buildbot/slave/bot.py, commands.py, registry.py: same
2977 2005-04-05 Brian Warner <warner@lothar.com>
2979 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2980 preserve timestamps, helps incremental builds of large trees.
2981 Patch from Rene Rivera.
2983 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2984 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2987 2005-04-03 Brian Warner <warner@lothar.com>
2989 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2990 with one dict, apparently exec has some scoping bugs when used
2991 with both global/local dicts. Thanks to Nathaniel Smith for the
2994 2005-04-02 Brian Warner <warner@lothar.com>
2996 * buildbot/process/step_twisted.py (countFailedTests): the new
2997 trial in Twisted-2.0 emits a slightly different status line than
2998 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2999 mistakenly think the test count is unparseable.
3000 (Trial.start): note that for some reason each build causes another
3001 copy of self.testpath to be prepended to PYTHONPATH. This needs to
3002 be fixed but I'm not sure quite where the problem is.
3004 2005-04-01 Brian Warner <warner@lothar.com>
3006 * buildbot/test/test_run.py (Run.testMaster): change some uses of
3007 deferredResult to avoid hangs/warnings under twisted-2.0
3008 (RunMixin.tearDown): same
3009 (RunMixin.shutdownSlave): same
3010 (Disconnect.testIdle1): same
3011 (Disconnect.testBuild2): same: wait one second after the build
3012 finishes for test to really be done.. this should be cleaned up to
3013 avoid wasting that second. Builder.detach uses a callLater(0),
3014 either that should be done in-line (something else needed that
3015 behavior), or it should return a Deferred that fires when the
3016 builder is really offline.
3017 (Disconnect.testBuild3): same
3018 (Disconnect.testDisappear): same
3020 * buildbot/test/test_web.py: rearrange server-setup and teardown
3021 code to remove unclean-reactor warnings from twisted-2.0
3023 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3024 so the tests don't hang under twisted-2.0
3026 2005-03-31 Brian Warner <warner@lothar.com>
3028 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3029 caused a warning each time the master changed our set of builders
3031 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3032 w32, don't unlink the file unless it already exists. Thanks to
3033 Baptiste Lepilleur for the catch.
3034 (BuilderStatus.saveYourself): same
3036 2005-02-01 Brian Warner <warner@lothar.com>
3038 * buildbot/status/html.py (TextLog.getChild): use a /text child
3039 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3040 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3041 logfile as text/plain (no markup, no headers). This replaces the
3042 previous scheme (which used an ?text=1 argument), and gets us back
3043 to a relative link (which works better when the buildbot lives
3044 behind another web server, such as Apache configured as a reverse
3045 proxy). Thanks to Gerald Combs for spotting the problem.
3047 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3050 2004-12-13 Brian Warner <warner@lothar.com>
3052 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3054 * debian/changelog: update for 0.6.2
3055 * NEWS: finalize for 0.6.2
3057 2004-12-11 Brian Warner <warner@lothar.com>
3059 * NEWS: bring it up to date
3061 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3062 detection code. Require some sign of life from the buildmaster
3063 every BotFactory.keepaliveInterval seconds. Provoke this
3064 indication at BotFactory.keepaliveTimeout seconds before the
3065 deadline by sending a keepalive request. We don't actually care if
3066 that request is answered in a timely fashion, what we care about
3067 is that .activity() is called before the deadline. .activity() is
3068 triggered by any PB message from the master (including an ack to
3069 one of the slave's status-update messages). With this new scheme,
3070 large status messages over slow pipes are OK, as long as any given
3071 message can be sent (and thus acked) within .keepaliveTimeout
3072 seconds (which defaults to 30).
3073 (SlaveBuilder.remote_startCommand): record activity
3074 (SlaveBuilder.ackUpdate): same
3075 (SlaveBuilder.ackComplete): same
3076 (BotFactory.gotPerspective): same
3077 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3079 2004-12-09 Brian Warner <warner@lothar.com>
3081 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3084 * buildbot/process/step_twisted.py (Trial._commandComplete):
3085 update self.cmd when we start the 'cat test.log' transfer. Without
3086 this, we cannot interrupt the correct RemoteCommand when we lose
3089 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3090 trying to tell the slave to stop the command if we're already
3091 inactive, or if we no longer have a .remote
3093 * buildbot/process/builder.py (Builder._detached): don't let an
3094 exception in currentBuild.stopBuild() prevent the builder from
3095 being marked offline
3097 2004-12-07 Brian Warner <warner@lothar.com>
3099 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3100 KeyError that happens when you ask for a non-existent Builder, and
3101 translate it into a UsageError.
3103 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3104 losing the slave in the middle of a remote step is handled too
3106 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3107 be a Failure, so be sure to stringify it before using it as the
3108 contents of the 'interrupt' logfile
3109 (RemoteCommand.interrupt): use stringified 'why' in
3110 remote_interruptCommand too, just in case
3112 2004-12-06 Brian Warner <warner@lothar.com>
3114 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3115 instead of 'tla update', which is more efficient in case we've
3116 missed a couple of patches since the last update.
3118 * debian/changelog: update for previous (0.6.1) release. Obviously
3119 this needs to be handled better.
3121 2004-12-05 Brian Warner <warner@lothar.com>
3123 * NEWS: update for stuff since last release
3125 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3126 match the maybeDeferred change in Dispatcher.requestAvatar
3127 * buildbot/changes/pb.py (ChangePerspective.attached): same
3128 * buildbot/status/client.py (StatusClientPerspective.attached): same
3129 * buildbot/process/builder.py (Builder._attached3): same
3130 * buildbot/pbutil.py (NewCredPerspective.attached): same
3132 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3133 the date to the top-most box, if it is not the same as today's
3136 * docs/slave.xhtml: provide a buildslave setup checklist
3138 * docs/source.xhtml (Arch): correct terminology
3140 2004-12-04 Brian Warner <warner@lothar.com>
3142 * buildbot/test/test_slavecommand.py: use sys.executable instead
3143 of hard-coding 'python' for child commands, might help portability
3145 * docs/examples/twisted_master.cfg: update to current usage
3147 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3148 'stop build' command to the IRC bot
3150 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3151 message that broke PBChangeSource
3153 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3154 (SlaveBuilder): make some attributes class-level, remove the old
3155 "update queue" which existed to support resuming a build after the
3156 master connection was lost. Try to reimplement that feature later.
3157 (SlaveBuilder.stopCommand): clear self.command when the
3158 SlaveCommand finishes, so that we don't try to kill a leftover one
3160 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3163 * buildbot/slave/commands.py (SourceBase): set self.command for
3164 all VC commands, so they can be interrupted.
3166 2004-12-03 Brian Warner <warner@lothar.com>
3168 * buildbot/master.py: clean up slave-handling code, to handle
3169 slave-disconnect and multiple-connect better
3170 (BotPerspective): make these long-lasting, exactly one per bot
3171 listed in the config file.
3172 (BotPerspective.attached): if a slave connects while an existing
3173 one appears to still be connected, disconnect the old one first.
3174 (BotPerspective.disconnect): new method to forcibly disconnect a
3175 buildslave. Use some hacks to empty the transmit buffer quickly to
3176 avoid the long (20-min?) TCP timeout that could occur if the old
3177 slave has dropped off the net.
3178 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3179 own their own SlaveStatus objects. Remove .attached/.detached, add
3180 .addSlave/.removeSlave, treat slaves like Builders (config file
3181 parsing sends deltas to the BotMaster). Inform the slave
3182 instances, i.e. the BotPerspective, about addBuilder and
3184 (BotMaster.getPerspective): turns into a single dict lookup
3185 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3186 which gives BotPerspective.attached a chance to disconnect the old
3188 (BuildMaster.loadConfig): add code (disabled) to validate that all
3189 builders use known slaves (listed in c['bots']). The check won't
3190 work with tuple-specified builders, which are deprecated but not
3191 yet invalid, so the check is disabled for now.
3192 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3193 routine, do the add/changed/removed dance with them like we do
3195 (BuildMaster.loadConfig_Sources): move source-config into a
3196 separate routine too
3198 * buildbot/status/builder.py (Status.getSlave): get the
3199 SlaveStatus object from the BotPerspective, not the BotMaster.
3201 * buildbot/test/test_run.py: bunch of new tests for losing the
3202 buildslave at various points in the build, handling a slave that
3203 connects multiple times, and making sure we can interrupt a
3206 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3207 something other than 'Bot' for the Bot object, to make certain
3208 test cases easier to write.
3209 (BuildSlave.waitUntilDisconnected): utility method for testing
3211 2004-11-30 Brian Warner <warner@lothar.com>
3213 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3215 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3216 argument, return a Deferred that always fires with True or False.
3217 I don't use an errback to indicate 'ping failed' so that callers
3218 are free to ignore the deferred without causing spurious errors in
3220 * buildbot/process/builder.py (BuilderControl.ping): implement it
3222 * buildbot/test/test_run.py (Status.testDisappear): test ping
3223 (Status.disappearSlave): fix it
3225 2004-11-30 Brian Warner <warner@lothar.com>
3227 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3228 (IBuilderControl): add .getBuild(num), only works for the current
3229 build, of course, although it might be interesting to offer
3230 something for builds in the .waiting or .interlocked state.
3232 * buildbot/process/base.py (Build): have .stopBuild just do the
3233 interrupt, then let the build die by itself.
3234 (BuildControl): add .stopBuild, and add a point-event named
3235 'interrupt' just after the build so status viewers can tell that
3237 (BuilderControl): add .getBuild
3239 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3240 stops when you kill it, good for testing
3241 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3242 contains the 'reason' text.
3244 * buildbot/status/html.py: Add Stop Build button, if the build can
3245 still be stopped. Send a Redirect (to the top page) one second
3246 later, hopefully long enough for the interrupt to have an effect.
3247 Move make_row() up to top-level to share it between Stop Build and
3250 * buildbot/slave/commands.py: only kill the child process once
3252 * buildbot/test/test_run.py: add testInterrupt
3254 2004-11-29 Brian Warner <warner@lothar.com>
3256 * buildbot/process/base.py: Refactor command interruption. The
3257 Build is now responsible for noticing that the slave has gone
3258 away: Build.lostRemote() interrupts the current step and makes
3259 sure that no further ones will be started.
3261 * buildbot/process/builder.py: When the initial remote_startBuild
3262 message fails, log it: this usually indicates that the slave has
3263 gone away, but we don't really start paying attention until they
3264 fail to respond to the first step's command.
3266 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3267 slave disconnect. Now sports a new interrupt() method. Error
3268 handling was simplified a lot by chaining deferreds, so
3269 remoteFailed/remoteComplete were merged into a single
3270 remoteComplete method (which can now get a Failure object).
3271 Likewise failed/finished were merged into just _finished.
3272 (BuildStep): Add interrupt(why) method, and if why is a
3273 ConnectionLost Failure then the step is failed with some useful
3276 * buildbot/slave/bot.py: stop the current command when the remote
3277 Step reference is lost, and when the slave is shut down.
3278 (Bot): make it a MultiService, so it can have children. Use
3279 stopService to tell when the slave is shutting down.
3280 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3281 remote_interruptCommand (which asks the current SlaveCommand to
3282 stop but allows it to keep emitting status messages), and
3283 stopCommand (which tells it to shut up and die).
3285 * buildbot/slave/commands.py: make commands interruptible
3286 (ShellCommand.kill): factor out os.kill logic
3287 (Command): factor out setup()
3288 (Command.sendStatus): don't send status if .running is false, this
3289 happens when the command has been halted.
3290 (Command.interrupt): new method, used to tell the command to die
3291 (SlaveShellCommand): implement .interrupt
3292 (DummyCommand): implement .interrupt
3293 (SourceBase, etc): factor out setup(), don't continue substeps if
3296 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3297 so they can be called after finishing
3299 * buildbot/test/test_run.py: new tests for disconnect behavior,
3300 refactor slave-shutdown routines, add different kinds of
3303 2004-11-27 Brian Warner <warner@lothar.com>
3305 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3306 method to express ETA time like "2m45s" instead of "165 seconds"
3308 2004-11-24 Brian Warner <warner@lothar.com>
3310 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3311 archive after the test completes, to avoid cluttering the user's
3312 'tla archives' listing with a bogus entry. Arch doesn't happen to
3313 provide any way to override the use of ~/.arch-params/, so there
3314 isn't a convenient way to avoid touching the setup of the user who
3316 (VC_HTTP.testArchHTTP): same
3318 2004-11-23 Brian Warner <warner@lothar.com>
3320 * buildbot/status/html.py (TextLog): split render() up into
3321 render_HEAD and render_GET. Use a Producer when sending log
3322 chunks, to reduce memory requirements and avoid sending huge
3323 non-Banana-able strings over web.distrib connections. Requires
3324 peeking under the covers of IStatusLog.
3325 (TextLog.resumeProducing): fix the "as text" link, handle client
3326 disconnects that occur while we're still sending old chunks.
3328 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3329 use defer.succeed, not the non-existent defer.success
3330 (LogFile.waitUntilFinished): same
3331 (LogFile.subscribe): don't add watchers to a finished logfile
3333 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3336 2004-11-23 Brian Warner <warner@lothar.com>
3338 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3340 2004-11-23 Brian Warner <warner@lothar.com>
3342 * NEWS: update for the 0.6.1 release
3343 * MANIFEST.in: add new files
3345 * README (INSTALLATION): explain how to enable the extra VC tests
3347 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3348 level to, so old pickled builds can be displayed ok
3350 2004-11-22 Brian Warner <warner@lothar.com>
3352 * NEWS: summarize updates since last release
3354 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3355 Yoz Grahame. Closes SF#1050138.
3357 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3360 * buildbot/process/step_twisted.py (Trial): update docs a bit
3362 * docs/factories.xhtml: fix Trial factory docs to match reality.
3365 * buildbot/process/factory.py (Trial.__init__): add args for
3366 randomly= and recurse=, making them available to instantiators
3367 instead of only to subclassers. Closes: SF#1049759.
3369 2004-11-15 Brian Warner <warner@lothar.com>
3371 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3372 try to teach the Quick factory to use multiple versions of python
3374 2004-11-12 Brian Warner <warner@lothar.com>
3376 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3377 safer w32-compatible approach, and only use it on windows
3378 (BuildStatus.saveYourself): same
3380 2004-11-11 Brian Warner <warner@lothar.com>
3382 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3383 it: one string merge per chunk. There are now separate .entries
3384 and .runEntries lists: when enumerating over all chunks, make sure
3386 * buildbot/test/test_status.py (Log): more tests
3388 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3389 chunks together, up to 10kb per chunk. This ought to cut down on
3390 the CPU-burning overhead of large log files. Thanks to Alexander
3391 Staubo for spotting the problem.
3392 * buildbot/test/test_status.py (Log): tests for same
3394 2004-11-10 Brian Warner <warner@lothar.com>
3396 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3397 header to outbound mail
3398 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3400 2004-11-08 Brian Warner <warner@lothar.com>
3402 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3403 can't do os.rename() onto an existing file, so catch the exception
3404 and unlink the target file first. This introduces a slight window
3405 where the existing file could be lost, but the main failure case
3406 (disk full) should still be handled safely.
3407 (BuildStatus.saveYourself): same
3409 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3410 separator character instead of os.sep, because the filenames being
3411 split here are coming from the VC system, which can have a
3412 different pathname convention than the local host. This should
3413 help a buildmaster running on windows that uses a CVS repository
3414 which runs under unix.
3415 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3417 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3418 when there are no test failures to be parsed
3420 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3421 instead of the unix-specific os.system("cp"), thanks to Elliot
3422 Murphy for this and the other buildbot-vs-windows catches.
3423 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3425 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3426 echo the command as it is run
3428 * setup.py: install sample.mk too, not just sample.cfg
3429 (scripts): install contrib/windows/buildbot.bat on windows
3431 2004-11-07 Brian Warner <warner@lothar.com>
3433 * buildbot/process/builder.py (Builder._detached): clear the
3434 self.currentBuild reference, otherwise the next build will be
3435 skipped because we think the Builder is already in use.
3437 * docs/examples/twisted_master.cfg: update to match current usage
3438 on the Twisted buildbot
3440 2004-10-29 Brian Warner <warner@lothar.com>
3442 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3444 2004-10-28 Brian Warner <warner@lothar.com>
3446 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3447 have separate doVCUpdate/doVCFull methods. Catch an update failure
3448 and respond by clobbering the source directory and re-trying. This
3449 will handle local changes (like replacing a file with a directory)
3450 that will cause CVS and SVN updates to fail.
3451 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3453 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3456 2004-10-19 Brian Warner <warner@lothar.com>
3458 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3460 * buildbot/status/html.py (StatusResourceTestResults): display any
3461 TestResults that the Build might have
3462 (StatusResourceTestResult): and the logs for each TestResult
3463 (StatusResourceBuild): add link from the per-build page
3465 2004-10-15 Brian Warner <warner@lothar.com>
3467 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3468 the 'problems' portion of stdout, add TestResults to our build
3469 * buildbot/test/test_twisted.py (Parse.testParse): test it
3471 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3472 to retrieve a dict of accumulated test results
3473 (ITestResult): define what a single test result can do
3474 * buildbot/status/builder.py (TestResult): implement ITestResult
3475 (BuildStatus.getTestResults): retrieve dict of TestResults
3476 (BuildStatus.addTestResult): add TestResults
3477 * buildbot/test/test_status.py (Results.testAddResults): test it
3479 2004-10-14 Brian Warner <warner@lothar.com>
3481 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3482 instead of os.system("rm -rf") for win32 portability
3484 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3485 SignalMixin instead of starting/stopping the reactor, which is
3486 likely to cause problems with other tests
3488 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3489 self.copyComplete() call. Yoz Grahame makes the catch.
3491 * contrib/windows/buildbot.bat: helper script to deal with path
3492 issues. Thanks to Yoz Grahame.
3494 * buildbot/master.py (BuildMaster.startService): don't register a
3495 SIGHUP handler if the signal module has no SIGHUP attribute.
3496 Apparently win32 does this.
3498 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3500 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3501 test if the reactor can't offer UNIX sockets
3503 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3504 error introduced in the last commit. We really need that
3507 2004-10-12 Brian Warner <warner@lothar.com>
3509 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3510 when describing a maildir source. Thanks to Stephen Davis.
3512 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3515 * buildbot/scripts/runner.py (createMaster): install Makefile too
3516 (start): add --no_save to 'start' command
3517 * buildbot/scripts/sample.mk: simple convenience Makefile with
3518 start/stop/reload targets
3520 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3523 2004-09-30 Brian Warner <warner@lothar.com>
3525 * setup.py: Releasing buildbot-0.6.0
3527 2004-09-30 Brian Warner <warner@lothar.com>
3529 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3530 test_trial.py from the source tarball until support is complete.
3532 * NEWS: update for 0.6.0 release
3533 * buildbot/__init__.py (version): same
3536 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3537 'source' command to tell users where to get the Buildbot source
3539 * docs/examples/*.cfg: update to modern standards
3541 * NEWS: update for release
3543 * buildbot/scripts/runner.py (createMaster): remove the
3544 -shutdown.tap stuff now that it isn't necessary
3546 (start): launch buildbot.tap, not buildbot-shutdown.tap
3549 * buildbot/status/mail.py (Domain): shorten class name
3550 (MailNotifier): if lookup= is a string, pass it to Domain()
3551 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3552 (Mail.testBuild2): test the string-to-Domain shortcut
3553 (Mail.testMail): fix test
3556 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3559 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3560 more attributes on load
3561 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3562 to accomodate the whole waterfall page at once, and the thrashing
3563 results in a lot of unnecessary loads
3564 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3565 (BuilderStatus.saveYourself): same
3566 (BuilderStatus.eventGenerator): stop generating on the first missing
3567 build. We assume that saved builds are deleted oldest-first.
3568 (BuildStepStatus.__getstate__): .progress might not exist
3570 * buildbot/changes/changes.py (ChangeMaster): make it
3571 serializable, in $masterdir/changes.pck
3572 (ChangeMaster.stopService): save on shutdown
3573 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3574 * buildbot/test/test_config.py: load Changes before config file
3577 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3578 "Oh my god, you killed the command" header on a separate line
3580 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3581 skip over corrupted build pickles
3582 (BuilderStatus.getFullBuildByNumber): same
3583 (BuilderStatus.eventGenerator): skip over unavailable builds
3584 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3585 do an atomic rename. This prevents a corrupted pickle when some
3586 internal serialization error occurs.
3587 (BuilderStatus.saveYourself): same
3589 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3590 the timeout for shell commands, it got lost somehow
3592 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3593 run out of build steps, return the rest of the builder events
3595 * buildbot/interfaces.py (IBuilderControl.ping): add method
3597 * buildbot/process/builder.py (BuilderControl.ping): move
3598 slave-ping to BuilderControl, and fix the failure case in the
3599 process (Event.finish() is the verb, Event.finished is the noun).
3601 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3602 through the BuilderControl instead of the BuilderStatus
3603 (EventBox): add adapter for builder.Event, allowing builder events to
3604 be displayed in the waterfall display
3606 * buildbot/master.py (BotMaster.stopService): add a 'master
3607 shutdown' event to the builder's log
3608 (BuildMaster.startService): and a 'master started' on startup
3610 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3611 builder events into the BuildStep event stream
3612 (Status.builderAdded): add a 'builder created' event
3615 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3616 command to announce the completion of a running build
3617 (IrcStatusBot.command_FORCE): announce when the build finishes
3619 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3620 don't evict unfinished builds from the cache: they must stay in
3621 the full-cache until their logfiles have stopped changing. Make
3622 sure the eviction loop terminates if an unfinished build was hit.
3623 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3624 This lets exceptions be dumped in an email status message. Really
3625 we need LogFiles which contain both text and HTML, instead of two
3627 (BuildStatus.__getstate__): handle self.finished=False
3628 (Status.builderAdded): if the pickle is corrupted, abandon the
3629 history and create a new BuilderStatus object.
3631 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3632 self.progress attribute, helped one test which doesn't fully set
3633 up the Build object.
3635 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3636 IStatusLog methods into an Interface that is implemented by "stub"
3637 logs, for which all the actual text chunks are on disk (in the
3638 pickled Build instance). To show the log contents, you must first
3639 adapt the stub log to a full IStatusLog object.
3641 * buildbot/status/builder.py (LogFileStub): create separate stub
3642 log objects, which can be upgraded to a real one if necessary.
3643 (LogFile): make them persistable, and let them stubify themselves
3645 (BuildStepStatus): same
3647 (BuildStatus.saveYourself): save the whole build out to disk
3648 (BuilderStatus): make it persistable
3649 (BuilderStatus.saveYourself): save the builder to disk
3650 (BuilderStatus.addFullBuildToCache): implement two caches which
3651 hold Build objects: a small one which holds full Builds, and a
3652 larger one which holds "stubbed" Builds (ones with their LogFiles
3653 turned into LogFileStubs). This reduces memory usage by the
3654 buildmaster by not keeping more than a few (default is 2) whole
3655 build logs in RAM all the time.
3656 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3658 (BuilderStatus.eventGenerator): rewrite since .builds went away
3659 (BuilderStatus.buildStarted): remove the .builds array. Add the
3660 build to the "full" cache when it starts.
3661 (BuilderStatus._buildFinished): save the build to disk when it
3663 (Status): give it a basedir (same as the BuildMaster's basedir)
3664 where the builder pickles can be saved
3665 (Status.builderAdded): create the BuilderStatus ourselves, by
3666 loading a pickle from disk (or creating a new instance if there
3667 was none on disk). Return the BuilderStatus so the master can glue
3668 it into the new Builder object.
3670 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3671 all BuilderStatuses to save themselves out to disk. This is in
3672 lieu of saving anything important in the main Application pickle
3673 (the -shutdown.tap file).
3674 (BuildMaster.__init__): give Status() a basedir for its files
3675 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3676 to get the BuilderStatus, then give it to the Builder (instead of
3677 doing it the other way around). It's ok if the status announces
3678 the new Builder before it's really ready, as the outside world can
3679 only see the BuilderStatus object anyway (and it is ready before
3680 builderAdded returns). Use the builder's "builddir" (which
3681 normally specifies where the slave will run the builder) as the
3682 master's basedir (for saving serialized builds).
3684 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3685 coerce the logfile to IStatusLog before trying to get the text
3686 chunks out of it. This will pull the full (non-stubified) Build in
3687 from disk if necessary.
3688 (TextLog): fix the adapter registration
3690 * buildbot/test/test_control.py (Force.setUp): create the basedir
3691 * buildbot/test/test_web.py: same
3692 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3693 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3694 * buildbot/test/test_run.py (Run.testMaster): same
3695 (Status.setUp): same
3697 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3699 * buildbot/status/html.py (Waterfall.__init__): store actual
3700 allowForce flag passed in rather than using True for everyone;
3701 make sure setting it to False doesn't cause a NameError
3703 (StatusResourceBuilder.__init__) add the builder name to the page
3705 (StatusResourceBuilder.body) move HTML generation for a name/value
3706 row into a helper method (StatusResourceBuilder.make_row); only
3707 generate the "Force Build" form if allowForce was True and the
3708 slave is connected. Use class attributes in the generated HTML to
3709 spread a little CSS-joy.
3711 2004-09-28 Brian Warner <warner@lothar.com>
3713 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3714 warning-scanner to not ignore things like
3715 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3717 * buildbot/status/html.py (StatusResource.control): add some
3718 class-level values for .control in an attempt to make upgrading
3721 * buildbot/util.py (ComparableMixin): survive missing attributes,
3722 such as when a class is modified and we're comparing old instances
3725 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3726 failure handling, remove a redundant try/except block. Don't
3727 return the full traceback to the IRC channel.
3728 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3729 error messages. Get ETA properly.
3731 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3732 the reason, since (at least) IRC message will have <> in them.
3733 (StatusResourceBuilder.__init__): take an IBuilderControl
3734 (StatusResourceBuilder.force): use the IBuilderControl we get in
3735 the constructor instead of trying to make our own. Catch the
3736 new exceptions and ignore them for now (until we make an
3737 intermediate web page where we could show the error message)
3738 (StatusResource): create with an IControl, use it to give an
3739 IBuilderControl to all children
3740 (Waterfall): take an allowForce= option, pass an IControl object
3741 to StatusResource if it is True
3743 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3745 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3746 catch new exceptions and return string forms
3748 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3749 * buildbot/process/builder.py (Builder.forceBuild): raise them
3750 * buildbot/test/test_control.py (Force.testNoSlave): new test
3751 (Force.testBuilderInUse): same
3754 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3756 * buildbot/test/test_run.py: use IControl
3757 * buildbot/test/test_vc.py: same
3759 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3760 to use IControl. Still offline.
3761 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3763 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3764 who=None so periodic builds don't send out status mail
3765 (Builder.forceBuild): include reason in the log message
3766 (BuilderControl.forceBuild): rename 'name' to 'who'
3768 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3769 'who' parameter, but make it None by default so builds forced by
3770 slave admins don't cause status mail to be sent to anybody
3771 (BotMaster.forceBuild): same. this method is deprecated.
3772 (DebugPerspective.perspective_forceBuild): same, use IControl.
3773 (DebugPerspective.perspective_fakeChange): use IControl..
3774 (Dispatcher.requestAvatar): .. so don't set .changemaster
3776 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3777 parameter to avoid confusion with the name of the builder
3780 * buildbot/status/mail.py: refine comment about needing 2.3
3782 * buildbot/status/html.py: move all imports to the top
3784 * buildbot/test/test_control.py: test new interfaces
3785 * buildbot/test/test_run.py (Status): handle new interfaces
3786 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3788 * buildbot/process/base.py (BuildControl): implement IBuildControl
3789 and its lonely getStatus() method
3791 * buildbot/process/builder.py (BuilderControl): implement
3792 IBuilderControl, obtained by adapting the Builder instance
3793 (Builder.startBuild): return a BuilderControl instead of a
3794 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3795 accomplish the same thing.
3797 * buildbot/master.py: move all import statements to the top
3798 (Control): implement IControl, obtained by adapting the
3799 BuildMaster instance.
3801 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3802 IBuildControl. These are used to force builds. Eventually they
3803 will provide ways to reconfigure the Builders, pause or abandon a
3804 Build, and perhaps control the BuildMaster itself.
3806 2004-09-26 Brian Warner <warner@lothar.com>
3808 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3809 ends up comparing us against something without a .__class__
3811 2004-09-24 Brian Warner <warner@lothar.com>
3813 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3816 * Makefile: add 'deb-snapshot' target, to create a timestamped
3819 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3821 2004-09-23 Brian Warner <warner@lothar.com>
3823 * buildbot/__init__.py (version): move version string here
3824 * setup.py: get version string from buildbot.version
3825 * buildbot/status/html.py (WaterfallStatusResource.body): add
3826 buildbot version to the page footer
3827 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3830 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3831 slaves, let the second know where the first one is coming from
3832 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3833 see our exceptions. It would be nice if there were a way to just
3834 send them the exception type and value, not the full traceback.
3837 * buildbot/status/mail.py (MailNotifier): add a new argument
3838 sendToInterestedUsers=, which can be set to False to disable the
3839 usual send-to-blamelist behavior.
3840 (top): handle python-2.2 which has no email.MIMEMultipart
3841 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3842 (MailNotifier.disownServiceParent): unsubscribe on removal
3844 * buildbot/test/test_status.py (Mail.testBuild2): test it
3847 * buildbot/status/progress.py (Expectations.wavg): tolerate
3848 current=None, which happens when steps start failing badly
3849 * buildbot/test/test_status.py (Progress.testWavg): test for it
3851 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3852 doesn't understand args['revision'], emit a warning instead of
3853 bailing completely. Updating to -rHEAD is probably close enough.
3855 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3857 * buildbot/test/test_status.py: at least import bb.status.client
3858 even if we don't have any test coverage for it yet
3860 * contrib/svn_buildbot.py: don't require python2.3
3861 (main): wait, do require it (for sets.py), but explain how to
3862 make it work under python2.2
3864 2004-09-23 Brian Warner <warner@lothar.com>
3866 * contrib/svn_buildbot.py: include the revision number in the Change
3868 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3869 using util.now() because FreshCVS is a realtime service
3871 * buildbot/status/event.py: delete dead code
3872 * buildbot/process/step.py: don't import dead Event class
3873 * buildbot/process/step_twisted.py: same
3874 * buildbot/status/builder.py: same
3875 * buildbot/status/client.py: same
3877 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3879 * buildbot/changes/changes.py (Change): set .when from an __init__
3880 argument (which defaults to now()), rather than having
3881 ChangeMaster.addChange set it later.
3882 (ChangeMaster.addChange): same
3884 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3885 (parseSyncmail): same. Just use util.now() for now.
3886 (parseBonsaiMail): parse the timestamp field for when=
3888 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3889 instead of setting .when after the fact
3893 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3894 results when the target project uses retrial. Still under
3896 * buildbot/test/test_trial.py: same
3898 2004-09-21 Brian Warner <warner@lothar.com>
3900 * buildbot/status/mail.py (MailNotifier.__init__): include
3901 success/warnings/failure in the Subject line
3902 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3903 use step.logname for the addLogs=True attachment filenames
3904 * buildbot/test/test_status.py (Mail): test Subject lines
3905 (Mail.testLogs): test attachment filenames
3907 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3908 accept a 'who' argument from the debug tool
3909 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3910 * contrib/debug.glade: add text box to set 'who'
3912 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3913 .getBuilderName with .getBuilder().getName(), more flexible
3914 (IStatusLog.getName): logs have short names, but you can prefix
3915 them with log.getStep().getName() to make them more useful
3916 * buildbot/status/builder.py: same
3917 * buildbot/status/client.py: same
3918 * buildbot/status/html.py: same
3919 * buildbot/test/test_run.py (Status.testSlave): same
3920 * buildbot/process/step.py: tweak logfile names
3922 * buildbot/status/mail.py (MailNotifier): add lookup, change
3923 argument to extraRecipients. The notifier is now aimed at sending
3924 mail to the people involved in a particular build, with additional
3925 constant recipients as a secondary function.
3927 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3928 including slow-lookup and failing-lookup. Make sure the blamelist
3929 members are included.
3931 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3932 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3933 (IBuildStatus.getInterestedUsers): new method
3934 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3935 * buildbot/status/client.py (remote_getResponsibleUsers): same
3936 * buildbot/status/html.py (StatusResourceBuild.body): same
3937 * buildbot/test/test_run.py (Status.testSlave): same
3939 2004-09-20 Brian Warner <warner@lothar.com>
3941 * docs/users.xhtml: update concepts
3943 * Makefile: add a convenience makefile, for things like 'make
3944 test'. It is not included in the source tarball.
3946 2004-09-16 Brian Warner <warner@lothar.com>
3948 * NEWS: mention /usr/bin/buildbot, debian/*
3950 * debian/*: add preliminary debian packaging. Many thanks to
3951 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3952 it considerably since it left their hands, I am responsible for
3953 all breakage that's resulted.
3955 * bin/buildbot: create a top-level 'buildbot' command, to be
3956 installed in /usr/bin/buildbot . For now it's just a simple
3957 frontend to mktap/twistd/kill, but eventually it will be the entry
3958 point to the 'try' command and also a status client. It is also
3959 intended to support the upcoming debian-packaging init.d scripts.
3960 * buildbot/scripts/runner.py: the real work is done here
3961 * buildbot/scripts/__init__.py: need this too
3962 * buildbot/scripts/sample.cfg: this is installed in new
3963 buildmaster directories
3964 * setup.py: install new stuff
3966 2004-09-15 Brian Warner <warner@lothar.com>
3968 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3969 'file:' schema (the version shipped with OS-X was built without the
3971 (SetupMixin.tearDown): stop the goofy twisted.web timer which
3972 updates the log-timestamp, to make sure it isn't still running after
3975 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3976 values to the config file.
3977 * docs/examples/hello.cfg: add examples
3978 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3979 * buildbot/status/builder.py (Status.getProjectURL): implement them
3980 * buildbot/master.py (BuildMaster.loadConfig): set them from config
3981 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3982 * buildbot/status/html.py (WaterfallStatusResource): display them
3985 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3986 certain error cases don't suffer a secondary exception.
3987 (top): Skip tests if the corresponding VC tool is not installed.
3989 * buildbot/process/factory.py (Trial): introduce separate
3990 'buildpython' and 'trialpython' lists, since trialpython=[] is
3991 what you want to invoke /usr/bin/python, whereas ./setup.py is
3992 less likely to be executable. Add env= parameter to pass options
3993 to test cases (which is how I usually write tests, I don't know if
3994 anyone else does it this way).
3996 * buildbot/process/step_twisted.py (Trial): handle python=None.
3997 Require 'testpath' be a string, not a list. Fix tests= typo.
3998 (Trial.start): sanity-check any PYTHONPATH value for stringness.
4000 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4001 way to deal with the possibility of removing the disconnect notify
4003 (CVS): add a 'login' parameter to give a password to 'cvs login',
4004 commonly used with pserver methods (where pw="" or pw="guest")
4006 * buildbot/slave/commands.py (SourceBase): move common args
4007 extraction and setup() to __init__, so everything is ready by the
4008 time setup() is called
4009 (CVS.start): call 'cvs login' if a password was supplied
4010 (ShellCommand): special-case PYTHONPATH: prepend the master's
4011 value to any existing slave-local value.
4013 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4014 don't have a remote, mark the builder as Offline. This whole
4015 function should probably go away and be replaced by individual
4017 (Builder.buildFinished): return the results to the build-finished
4018 deferred callback, helps with testing
4020 2004-09-14 Brian Warner <warner@lothar.com>
4022 * buildbot/test/test_vc.py: put all the repositories needed to run
4023 the complete tests into a single small (1.3MB) tarball, so I can
4024 make that tarball available on the buildbot web site. Test HTTP
4025 access (for Arch and Darcs) by spawning a temporary web server
4026 while the test runs.
4028 * docs/users.xhtml: new document, describe Buildbot's limited
4029 understanding of different human users
4031 * buildbot/test/test_vc.py: rearrange test cases a bit
4033 * buildbot/process/step_twisted.py (Trial): handle testpath=
4034 * buildbot/process/factory.py (Trial): update to use step.Trial
4036 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4038 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4039 the overall build text (which gives you 'failed 2 tests' rather
4041 (BuildStepStatus.text2): default to [], not None
4043 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4046 2004-09-12 Brian Warner <warner@lothar.com>
4048 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4049 log the whole exception if it's just an AttributeError (old slave)
4051 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4052 so (e.g.) sub-commands can be run in the right directory.
4053 (ShellCommand.start): accept an optional errorMessage= argument
4054 to make life easier for SVN.start
4055 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4057 (ShellCommand.start): move ['dir'] compatibility hack..
4058 (RemoteShellCommand.start): .. to here so everyone can use it
4060 * buildbot/process/step_twisted.py (Trial): use .workdir
4062 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4063 text displayed when debuild fails completely
4064 (Trial): snarf _trial_temp/test.log from the slave and display it
4066 2004-09-11 Brian Warner <warner@lothar.com>
4068 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4070 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4071 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4073 * buildbot/process/step.py (ShellCommand): call .createSummary
4074 before .evaluateCommand instead of the other way around. This
4075 makes it slightly easier to count warnings and then use that to
4076 set results=WARNINGS
4077 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4079 * buildbot/process/base.py (Build.buildFinished): update status
4080 before doing progress. It's embarrassing for the build to be stuck
4081 in the "building" state when an exceptions occurs elsewhere..
4083 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4084 python2.2 doesn't have 'sum'
4086 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4087 to prevent clients from accidentally sorting it
4089 * buildbot/master.py (Manhole): add username/password
4090 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4091 c['manholePort'], deprecate old usage
4092 * docs/config.xhtml: document c['manhole']
4093 * docs/examples/hello.cfg: show example of using a Manhole
4096 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4097 pretend the slave is up to date
4099 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4100 the module, overlaps with 'log', the local variable
4102 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4104 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4105 new method to let Steps find out the version of their
4106 corresponding SlaveCommand.
4107 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4108 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4109 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4111 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4112 (Arch.startVC): same
4113 (P4Sync.startVC): same
4115 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4116 Deferred so we can catch errors in remote_startCommand
4117 (RemoteShellCommand.start): same
4119 * docs/examples/twisted_master.cfg: update sample config file
4121 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4122 after connectionMade() is called, not before. Close stdin at that
4125 * buildbot/process/process_twisted.py: update to use Trial, clean
4126 up argument passing (move to argv arrays instead of string
4129 * buildbot/process/step_twisted.py (Trial): new step to replace
4130 RunUnitTests, usable by any trial-using project (not just
4131 Twisted). Arguments have changed, see the docstring for details.
4133 * buildbot/process/base.py (Build.startBuild): this now returns a
4134 Deferred. Exceptions that occur during setupBuild are now
4135 caught better and lead to fewer build_status weirdnesses, like
4136 finishing a build that was never started.
4137 (Build.buildFinished): fire the Deferred instead of calling
4138 builder.buildFinished directly. The callback argument is this
4139 Build, everything else can be extracted from it, including the
4140 new build.results attribute.
4141 * buildbot/process/builder.py (Builder.startBuild): same
4142 (Builder.buildFinished): same, extract results from build
4144 * buildbot/process/step.py (ShellCommands): remove dead code
4146 2004-09-08 Brian Warner <warner@lothar.com>
4148 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4149 doesn't try to use the leftover patched workdir
4150 (SourceStamp): test source-stamp computation for CVS and SVN
4152 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4153 patched workdir ('touch .buildbot-patched') so we don't try to
4155 (SourceBase.start): add ['revision'] for all Source steps
4156 (CVS): change args: use ['branch'] for -r, remove ['files']
4157 (CVS.buildVC): fix revision/branch stuff
4158 (SVN): add revision stuff
4160 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4161 kwargs (except 'workdir') to avoid silent spelling errors
4162 (ShellCommand.__init__): same
4163 (Source): new base class for CVS/SVN/etc. Factor out everything
4164 common, add revision computation (perform the checkout with a -D
4165 DATE or -r REVISION that gets exactly the sources described by the
4166 last Change), overridable with step.alwaysUseLatest. Add patch
4167 handling (build.getSourceStamp can trigger the use of a base
4168 revision and a patch).
4169 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4170 * docs/steps.xhtml: update docs
4171 * docs/source.xhtml: mention .checkoutDelay
4172 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4174 * buildbot/process/base.py (Build.setSourceStamp): add a
4175 .sourceStamp attribute to each Build. If set, this indicates that
4176 the build should be done with something other than the most
4177 recent source tree. This will be used to implement "try" builds.
4178 (Build.allChanges): new support method
4179 (Build.lastChangeTime): remove, functionality moved to Source steps
4180 (Build.setupBuild): copy the Step args before adding ['workdir'],
4181 to avoid modifying the BuildFactory (and thus triggering spurious
4185 * buildbot/status/html.py: rename s/commits/changes/
4186 (StatusResourceChanges): same
4187 (CommitBox.getBox): same, update URL
4188 (WaterfallStatusResource): same
4189 (StatusResource.getChild): same
4191 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4192 * contrib/debug.glade: add optional 'revision' to the fakeChange
4194 * buildbot/changes/changes.py (html_tmpl): display .revision
4195 (ChangeMaster.addChange): note .revision in log
4196 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4197 accept a ['revision'] attribute
4199 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4201 * buildbot/master.py (BotMaster.getPerspective): update the
4202 .connected flag in SlaveStatus when it connects
4203 (BotMaster.detach): and when it disconnects
4204 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4205 (BuildMaster.loadConfig_Builders): walk old list correctly
4207 * buildbot/test/test_config.py: fix prefix= usage
4209 2004-09-06 Brian Warner <warner@lothar.com>
4213 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4214 poll a P4 depot looking for recent changes. Thanks to Dave
4215 Peticolas for the contribution. Probably needs some testing after
4218 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4219 requires manual client setup for each buildslave. Rather
4220 experimental. Thanks again to Dave Peticolas.
4221 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4223 * buildbot/changes/changes.py (Change): add a .revision attribute,
4224 which will eventually be used to generate source-stamp values.
4226 * buildbot/process/step.py (RemoteCommand.start): use
4227 notifyOnDisconnect to notice when we lose the slave, then treat it
4228 like an exception. This allows LogFiles to be closed and the build
4229 to be wrapped up normally. Be sure to remove the disconnect
4230 notification when the step completes so we don't accumulate a
4231 bazillion such notifications which will fire weeks later (when the
4232 slave finally disconnects normally). Fixes SF#915807, thanks to
4233 spiv (Andrew Bennetts) for the report.
4234 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4235 really isn't Logged- specific
4236 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4237 header, since it's almost always going to be appended to an
4239 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4240 update test to handle use of notifyOnDisconnect
4242 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4243 don't clear .ETA and .currentBuild when going offline, let the
4244 current build clean up after itself
4246 * buildbot/process/builder.py (Builder.detached): wait a moment
4247 before doing things like stopping the current build, because the
4248 current step will probably notice the disconnect and cleanup the
4250 * buildbot/test/test_run.py (Status.tearDown): update test to
4251 handle asynchronous build-detachment
4253 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4255 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4256 hush a debug message
4258 2004-09-05 Brian Warner <warner@lothar.com>
4260 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4261 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4262 kernels do this: the fcntl module has the F_NOTIFY constant, but
4263 the kernel itself doesn't support the operation. Thanks to Olly
4264 Betts for spotting the problem.
4266 * buildbot/process/step.py (Darcs): new source-checkout command
4267 (Arch): new source-checkout command
4268 (todo_P4): fix constructor syntax, still just a placeholder
4269 * buildbot/test/test_vc.py (VC.testDarcs): test it
4270 (VC.testDarcsHTTP): same, via localhost HTTP
4272 (VC.testArchHTTP): same
4273 * NEWS: mention new features
4275 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4276 which tells the step to stash stdout text locally (in .stdout).
4277 Slave-side Commands can use this to make decisions based upon the
4278 output of the the ShellCommand (not just the exit code).
4279 (Darcs): New source-checkout command
4280 (Arch): New source-checkout command, uses .keepStdout in one place
4281 where it needs to discover the archive's default name.
4283 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4284 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4285 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4287 * buildbot/process/step.py (ShellCommand.describe): add an
4288 alternate .descriptionDone attribute which provides descriptive
4289 text when the step is complete. .description can be ["compiling"],
4290 for use while the step is running, then .descriptionDone can be
4291 ["compile"], used alone when the step succeeds or with "failed" when
4292 it does not. Updated other steps to use the new text.
4293 * buildbot/process/step_twisted.py: same
4294 * buildbot/test/test_run.py: update tests to match
4296 2004-08-30 Brian Warner <warner@lothar.com>
4298 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4299 (CVS.__init__): send 'patch' argument to slave
4300 (CVS.start): don't create the LoggedRemoteCommand until start(),
4301 so we can catch a .patch added after __init__
4302 (SVN.__init__): add 'patch' to SVN too
4305 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4306 argument, to let commands push data into the process' stdin pipe.
4307 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4308 is in use, since closing a PTY doesn't really affect the process
4309 in the right way (in particular, I couldn't run /usr/bin/patch
4311 (SourceBase.doPatch): handle 'patch' argument
4313 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4316 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4317 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4319 * buildbot/master.py (BotPerspective.got_commands): get command
4320 versions from slave, give to each builder
4321 * buildbot/process/builder.py (Builder.attached): stash slave
4322 command versions in .remoteCommands
4324 * docs/steps.xhtml: bring docs in-line with reality
4326 * buildbot/process/step.py (CVS.__init__): more brutal
4327 compatibility code removal
4328 (SVN.__init__): same
4330 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4331 (SlaveShellCommand.start): require ['workdir'] argument, remove
4332 the ['dir'] fallback (compatibility will come later)
4333 (SourceBase): update docs
4334 (SourceBase.start): remove ['directory'] fallback
4337 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4338 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4339 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4341 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4342 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4343 code.. I will figure out 0.5.0-compatibility hooks later)
4345 2004-08-30 Brian Warner <warner@lothar.com>
4347 * buildbot/process/process_twisted.py: rewrite in terms of new
4348 BuildFactory base class. It got significantly shorter. Yay
4351 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4352 work with the new "self.build isn't nailed down until we call
4353 step.start()" scheme: specifically, __init__ is called before the
4354 build has decided on which Changes are going in, so we don't scan
4355 build.allFiles() for .xhtml files until start()
4356 (HLint.commandComplete): use getText(), not getStdout()
4357 (RunUnitTests.start): same: don't use .build until start()
4358 (RunUnitTests.describe): oops, don't report (None) when using
4360 (RunUnitTests.commandComplete): use getText()
4361 (RunUnitTests.createSummary): same
4362 (BuildDebs.commandComplete): same
4364 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4365 set args['command'] until start(), since our BuildStep is allowed
4366 to change their mind up until that point
4367 (TreeSize.commandComplete): use getText(), not getStdout()
4369 * docs/examples/twisted_master.cfg: update to current standards
4371 * docs/factories.xhtml: update
4372 * buildbot/process/factory.py: implement all the common factories
4373 described in the docs. The Trial factory doesn't work yet, and
4374 I've probably broken all the process_twisted.py factories in the
4375 process. There are compatibility classes left in for things like
4376 the old BasicBuildFactory, but subclasses of them are unlikely to
4378 * docs/examples/glib_master.cfg: use new BuildFactories
4379 * docs/examples/hello.cfg: same
4381 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4382 explicit 'workdir' args
4384 * buildbot/process/base.py (BuildFactory): move factories to ..
4385 * buildbot/process/factory.py (BuildFactory): .. here
4386 * buildbot/process/process_twisted.py: handle move
4387 * buildbot/test/test_config.py: same
4388 * buildbot/test/test_run.py: same
4389 * buildbot/test/test_steps.py: same
4390 * buildbot/test/test_vc.py: same
4391 * docs/factories.xhtml: same
4393 * NEWS: mention config changes that require updating master.cfg
4395 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4396 argument to all steps that weren't given one already, pointing at
4397 the "build/" directory.
4399 * docs/examples/hello.cfg: remove explicit 'workdir' args
4401 * docs/factories.xhtml: document standard BuildFactory clases,
4402 including a bunch which are have not yet been written
4404 2004-08-29 Brian Warner <warner@lothar.com>
4406 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4407 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4408 buildbot.status.builder so they aren't quite so internal
4409 * buildbot/process/base.py, buildbot/process/builder.py: same
4410 * buildbot/process/maxq.py, buildbot/process/step.py: same
4411 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4412 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4413 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4415 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4416 to handle new getLogs()-returns-list behavior
4417 (StatusResourceBuildStep.getChild): same
4418 (StepBox.getBox): same
4419 (WaterfallStatusResource.phase0): same
4421 * docs/source.xhtml: document how Buildbot uses version-control
4422 systems (output side: how we get source trees)
4423 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4424 systems (input side: how we learn about Changes)
4426 * buildbot/master.py (Manhole): use ComparableMixin
4427 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4428 * buildbot/changes/mail.py (MaildirSource): same
4429 * buildbot/status/client.py (PBListener): same
4430 * buildbot/status/html.py (Waterfall): same
4431 * buildbot/status/words.py (IRC): same
4433 * NEWS: start describing new features
4435 * buildbot/status/mail.py (MailNotifier): finish implementation.
4436 The message body is still a bit sparse.
4437 * buildbot/test/test_status.py (Mail): test it
4439 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4440 and __hash__ methods I wind up adding everywhere. Specifically
4441 intended to support the buildbot config-file update scheme where
4442 we compare, say, the old list of IStatusTargets against the new
4443 one and don't touch something which shows up on both lists.
4444 * buildbot/test/test_util.py (Compare): test case for it
4446 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4447 return a list instead of a dict
4448 (IBuildStepStatus.getLogs): same. The idea is that steps create
4449 logs with vaguely unique names (although their uniqueness is not
4450 guaranteed). Thus a compilation step should create its sole
4451 logfile with the name 'compile', and contribute it to the
4452 BuildStatus. If a step has two logfiles, try to create them with
4453 different names (like 'test.log' and 'test.summary'), and only
4454 contribute the important ones to the overall BuildStatus.
4455 * buildbot/status/builder.py (Event.getLogs): same
4456 (BuildStepStatus): fix default .text and .results
4457 (BuildStepStatus.addLog): switch to list-like .getLogs()
4458 (BuildStepStatus.stepFinished): same
4459 (BuildStatus.text): fix default .text
4460 (BuildStatus.getLogs): temporary hack to return all logs (from all
4461 child BuildStepStatus objects). Needs to be fixed to only report
4462 the significant ones (as contributed by the steps themselves)
4463 * buildbot/test/test_run.py: handle list-like .getLogs()
4464 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4466 2004-08-28 Brian Warner <warner@lothar.com>
4468 * buildbot/process/builder.py (Builder.attached): serialize the
4469 attachment process, so the attach-watcher isn't called until the
4470 slave is really available. Add detached watchers too, which makes
4473 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4475 * buildbot/test/test_swap.py: remove dead code
4477 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4478 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4479 sort of as if the command being run exited with a -1. There may
4480 still be some holes in this scheme.
4481 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4482 -r option appears before the module list
4483 * buildbot/process/step.py (CVS): add 'revision' argument
4485 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4486 when sending updates or stepComplete messages to the master, since
4487 we don't currently care whether they arrive or not. When we revamp
4488 the master/slave protocol to really resume interrupted builds,
4489 this will need revisiting.
4490 (lostRemote): remove spurious print
4492 * buildbot/master.py (BotPerspective.attached): serialize the
4493 new-builder interrogation process, to make testing easier
4494 (BotMaster.waitUntilBuilderDetached): convenience function
4496 * buildbot/status/builder.py (BuilderStatus): prune old builds
4497 (BuildStatus.pruneSteps): .. and steps
4498 (BuildStepStatus.pruneLogs): .. and logs
4499 (BuilderStatus.getBuild): handle missing builds
4500 * buildbot/status/html.py (StatusResourceBuild.body): display build
4501 status in the per-build page
4502 (BuildBox.getBox): color finished builds in the per-build box
4504 2004-08-27 Brian Warner <warner@lothar.com>
4506 * buildbot/status/mail.py (MailNotifier): new notification class,
4509 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4510 variants of a common base class which handles all the mode= logic
4512 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4514 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4516 2004-08-26 Brian Warner <warner@lothar.com>
4518 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4521 * buildbot/test/test_run.py: update to new Logfile interface, new
4522 buildbot.slave modules
4523 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4525 * MANIFEST.in: new sample config file
4526 * docs/examples/hello.cfg: same
4528 * buildbot/process/step_twisted.py: remove dead import
4530 * buildbot/process/step.py (RemoteCommand.run): catch errors
4532 (RemoteCommand.remote_update): ignore updates that arrive after
4534 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4535 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4536 the responsibilities of the subclass's methods
4537 (BuildStep.failed): catch errors during failure processing
4538 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4539 (CVS): move to a mode= argument (described in docstring), rather
4540 than the ungainly clobber=/export=/copydir= combination.
4541 (SVN): add mode= functionality to SVN too
4542 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4544 * buildbot/process/base.py (Build.startNextStep): catch errors
4545 during s.startStep()
4547 * buildbot/clients/base.py: update to new PB client interface.
4548 gtkPanes is still broken
4550 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4551 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4552 * setup.py: add buildbot.slave module
4553 * buildbot/bb_tap.py: handle move
4554 * buildbot/slave/registry.py: place to register commands, w/versions
4555 * buildbot/slave/bot.py: major simplifications
4556 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4557 instead of a fixed table. Eventually this will make the slave more
4558 extensible. Use 'start' method on the command, not .startCommand.
4559 Fix unsafeTracebacks handling (I think).
4560 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4561 helper class with a .start method that returns a Deferred.
4562 SlaveShellCommand is the form reached by the buildmaster. Commands
4563 which use multiple ShellCommands can just chain them as Deferreds,
4564 with some helper methods in Command (_abandonOnFailure and
4565 _checkAbandoned) to bail on rc!=0.
4566 (CVSCommand): prefer new mode= argument
4567 (SVNFetch): add mode= argument
4569 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4570 put a useful reason string on the build
4572 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4573 core functionality into an IStatusLog object
4574 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4575 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4576 (StatusResourceBuild.body): use proper accessor methods
4577 * buildbot/status/client.py (RemoteLog): PB-access goes here
4578 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4579 which delivers log contents too
4580 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4581 * buildbot/status/event.py: remove old Logfile completely
4583 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4584 subscription interface for IStatusLog subscriptions just like all
4585 other the status subscriptions
4586 (IStatusReceiver.logChunk): method called on subscribers
4588 2004-08-24 Brian Warner <warner@lothar.com>
4590 * buildbot/process/builder.py (Builder._pong): oops, ping response
4591 includes a result (the implicit None returned by remote_print).
4592 Accept it so the _pong method handles the response correctly.
4594 2004-08-06 Brian Warner <warner@lothar.com>
4596 * buildbot/test/test_config.py: update IRC, PBListener tests
4598 * buildbot/status/client.py (StatusClientPerspective): total
4599 rewrite to match new IStatus interfaces. New subscription scheme.
4600 There are still a few optimizations to make (sending down extra
4601 information with event messages so the client doesn't have to do a
4602 round trip). The logfile-retrieval code is probably still broken.
4603 Moved the PB service into its own port, you can no longer share a
4604 TCP socket between a PBListener and, say, the slaveport (this
4605 should be fixed eventually).
4606 * buildbot/clients/base.py (Client): revamp to match. still needs
4607 a lot of work, but basic event reporting works fine. gtkPanes is
4610 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4611 instance talks to a single irc server. Threw out all the old
4612 multi-server handling code. Still need to add back in
4613 builder-control (i.e. "force build")
4615 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4616 more random text to the as-yet-unreachable per-step page
4618 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4619 rename to stepETAUpdate
4620 (BuildStatus.subscribe): add build-wide ETA updates
4621 (BuilderStatus.getState): remove more cruft
4622 (BuilderStatus.getCurrentBuild): remove more cruft
4623 (BuilderStatus.buildStarted): really handle tuple-subscription
4624 * buildbot/test/test_run.py (Status.testSlave): handle the
4625 stepETAUpdate rename
4627 * buildbot/master.py (BuildMaster): don't add a default
4628 StatusClientService. Don't add a default IrcStatusFactory. Both
4629 are now added through c['status'] in the config file. c['irc'] is
4630 accepted for backwards compatibility, the only quirk is you cannot
4631 use c['irc'] to specify IRC servers on ports other than 6667.
4633 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4634 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4635 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4636 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4639 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4640 the buildmaster to re-read its config file
4643 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4644 find out the port our server is running on
4645 (WebTest.test_webPathname_port): same
4647 * buildbot/test/test_config.py (testWebPortnum): test it
4648 (testWebPathname): ditto
4650 * docs/config.xhtml: document new c['status'] configuration option
4652 * buildbot/status/html.py (Waterfall): new top-level class which
4653 can be added to c['status']. This creates the Site as well as the
4654 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4655 reachable as .parent, for everything.
4657 * buildbot/master.py (Manhole): make it a normal service Child
4658 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4659 webPathname. It will eventually replace c['irc'] and the implicit
4660 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4661 in as (deprecated) backward compatibility hooks for now.
4664 * buildbot/process/builder.py (Builder.buildFinished): don't
4665 inform out builder_status about a finished build, as it finds out
4666 through its child BuildStatus object
4668 * buildbot/status/html.py: extensive revamp. Use adapters to make
4669 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4670 have both starting and finishing times and adjust the waterfall
4671 display accordingly, using spacers if necessary. Use SlaveStatus
4672 to get buildslave info.
4673 (StatusResourceBuildStep): new just-one-step resource, used to get
4674 logfiles. No actual href to it yet.
4676 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4677 the time being, until I get the file-naming scheme right
4679 * buildbot/status/builder.py (Event): clean started/finished names
4680 (BuildStatus.isFinished): .finished is not None is the right test
4681 (BuildStatus.buildStarted): track started/finished times ourselves
4682 (BuilderStatus.getSlave): provide access to SlaveStatus object
4683 (BuilderStatus.getLastFinishedBuild): all builds are now in
4684 .builds, even the currently-running one. Accomodate this change.
4685 (BuilderStatus.eventGenerator): new per-builder event generator.
4686 Returns BuildStepStatus and BuildStatus objects, since they can
4687 both be adapted as necessary.
4688 (BuilderStatus.addEvent): clean up started/finished attributes
4689 (BuilderStatus.startBuild,finishBuild): remove dead code
4690 (SlaveStatus): new object to provide ISlaveStatus
4692 * buildbot/process/step.py (ShellCommand.getColor): actually
4693 return the color instead of setting it ourselves
4694 (CVS.__init__): pull .timeout and .workdir options out of
4695 **kwargs, since BuildStep will ignore them. Without this neither
4696 will be sent to the slave correctly.
4697 (SVN.__init__): same
4699 * buildbot/process/builder.py (Builder): move flags to class-level
4701 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4702 SlaveStatus handle that
4704 * buildbot/process/base.py (Build.firstEvent): remove dead code
4705 (Build.stopBuild): bugfix
4707 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4709 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4710 (ChangeMaster.eventGenerator): yield Changes, since there are now
4711 Adapters to turn them into HTML boxes
4713 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4714 (BotPerspective.attached): feed a SlaveStatus object
4715 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4716 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4718 * buildbot/interfaces.py: API additions
4719 (ISlaveStatus): place to get slave status
4721 2004-08-04 Brian Warner <warner@lothar.com>
4723 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4724 the delay finishes, so the step is marked as SUCCESS
4726 * buildbot/test/test_run.py (Status.testSlave): cover more of
4727 IBuildStatus and IBuildStepStatus
4729 * buildbot/status/progress.py (StepProgress): move some flags to
4730 class-level attributes
4731 (StepProgress.remaining): if there are no other progress metrics
4732 to go by, fall back to elapsed time
4733 (StepProgress.setExpectations): take a dict of metrics instead of
4735 (BuildProgress.setExpectationsFrom): pull expectations from the
4736 Expectations, instead of having it push them to the BuildProgress
4737 (Expectations): move some flags to class-level attributes
4738 (Expectations.__init__): copy per-step times from the
4740 (Expectations.expectedBuildTime): new method for per-build ETA
4742 * buildbot/status/event.py (Logfile): move some flags to
4743 class-level attributes
4744 (Logfile.logProgressTo): better method name, let step set the
4745 progress axis name (instead of always being "output")
4747 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4748 times directly, rather than depending upon the (possibly missing)
4749 .progress object. Use 'None' to indicate "not started/finished
4751 (BuildStepStatus.getExpectations): oops, return the full list of
4753 (BuilderStatus._buildFinished): append finished builds to .builds
4755 * buildbot/process/step.py (BuildStep): add separate .useProgress
4756 flag, since empty .progressMetrics[] still implies that time is a
4758 (CVS): set up the cmd in __init__, instead of waiting for start()
4760 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4761 calculation, this will eventually turn into a proper sourceStamp
4762 (Build.setupBuild): tell the Progress to load from the Expectations,
4763 instead of having the Expectations stuff things into the Progress
4764 (Build.buildException): add a build-level errback to make sure the
4765 build's Deferred fires even in case of exceptions
4767 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4769 * buildbot/process/builder.py (Builder.forceBuild): convey the
4770 reason instead of creating a fake Change
4772 * docs/examples/twisted_master.cfg: update to match reality
4774 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4775 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4776 fix or remove broken/breaking tests
4778 * buildbot/status/event.py (Logfile.__len__): remove evil method
4780 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4781 missing .build, for test convenience
4783 * buildbot/process/step_twisted.py: import fixes
4785 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4787 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4788 .statusbag reference
4790 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4791 connection at shutdown, and stop it from reconnecting
4793 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4794 chase down remote-execution bugs
4796 * buildbot/process/step.py: more fixes, remove
4797 BuildStep.setStatus()
4798 * buildbot/status/builder.py: move setStatus() functionality into
4800 * buildbot/status/event.py: minor fixes
4802 2004-08-03 Brian Warner <warner@lothar.com>
4804 * buildbot/process/base.py, buildbot/process/builder.py
4805 * buildbot/process/step.py, buildbot/status/builder.py
4806 * buildbot/status/event.py, buildbot/test/test_run.py:
4807 fix status delivery, get a basic test case working
4808 * buildbot/master.py: finish implementing basic status delivery,
4809 temporarily disable HTML/IRC/PB status sources
4811 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4813 * buildbot/status/progress.py (BuildProgress): remove dead code
4815 * buildbot/interfaces.py
4816 * buildbot/process/base.py, buildbot/process/builder.py
4817 * buildbot/process/step.py, buildbot/process/step_twisted.py
4818 * buildbot/status/builder.py: Complete overhaul of the all
4819 status-delivery code, unifying all types of status clients (HTML,
4820 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4821 look like. This commit is a checkpointing of the work-in-progress:
4822 the input side is mostly done (Builders/Builds sending status
4823 to the BuilderStatus/BuildStatus objects), but the output side has
4824 not yet been started (HTML resources querying BuilderStatus
4825 objects). Things are probably very broken right now and may remain
4826 so for several weeks, I apologize for the disruption.
4828 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4829 HTML as the log's contents. Currently used for exception tracebacks.
4830 * buildbot/status/progress.py: minor spelling changes
4832 2004-08-02 Brian Warner <warner@lothar.com>
4834 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4835 in mozilla. Also added stylesheets copied from Twisted's docs.
4836 Remember that these files are meant to be run through Lore first.
4837 Thanks to Philipp Frauenfelder for the fixes.
4838 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4839 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4840 * docs/template.tpl: added a Lore template
4842 2004-07-29 Brian Warner <warner@lothar.com>
4844 * buildbot/interfaces.py: revamp status delivery. This is the
4845 preview: these are the Interfaces that will be provided by new
4846 Builder code, and to which the current HTML/IRC/PB status
4847 displayers will be adapted.
4849 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4850 on the SlaveBuilder, not the Bot.
4851 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4853 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4854 set .usePTY on the FakeSlaveBuilder
4856 2004-07-25 Brian Warner <warner@lothar.com>
4858 * buildbot/changes/freshcvs.py: add some debug log messages
4859 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4860 disabled 'setFilter' syntax
4861 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4862 don't end with a slash
4864 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4866 * setup.py: bump to 0.5.0+ while between releases
4868 2004-07-23 Brian Warner <warner@lothar.com>
4870 * setup.py (version): Releasing buildbot-0.5.0
4872 2004-07-23 Brian Warner <warner@lothar.com>
4874 * README: update for 0.5.0 release
4876 * NEWS: update for 0.5.0 release
4878 2004-07-22 Brian Warner <warner@lothar.com>
4880 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4881 mktap-time configuration flag (--usepty=1, --usepty=0)
4882 * buildbot/bot.py: same
4884 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4885 an 'info' directory being unwanted
4887 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4888 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4889 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4890 and earlier), use a FreshCVSSourceOldcred instead.
4891 (test): simple test routine: connect to server, print changes
4893 * buildbot/changes/changes.py (Change.getTime): make it possible
4894 to print un-timestamped changes
4896 * buildbot/master.py (makeApp): delete ancient dead code
4897 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4898 * buildbot/test/test_config.py (testFindConfigFile): test it
4900 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4901 instead of win32 one
4904 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4905 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4908 * buildbot/process/base.py (Builder.__init__): change constructor
4909 to accept a dictionary of config data, rather than discrete
4910 name/slave/builddir/factory arguments
4912 * docs/examples/twisted_master.cfg: update to new syntax
4913 * docs/examples/glib_master.cfg: same
4914 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4915 rough tests of the new syntax
4918 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4919 to be an int, which means "run a web.distrib sub-server on a TCP
4920 port". This lets you publish the buildbot status page to a remote
4921 twisted.web server (using distrib.ResourceSubscription). Also
4922 rename the local attributes used to hold these web things so
4923 they're more in touch with reality.
4924 * buildbot/test/test_web.py: test webPortnum and webPathname
4925 * docs/config.xhtml: document this new use of webPathname
4927 * docs/config.xhtml: new document, slightly ahead of reality
4929 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4930 'prefix' handling: treat it as a simple string to check with
4931 .startswith, instead of treating it as a directory. This allows
4932 sub-directories to be used. If you use prefix=, you should give it
4933 a string that starts just below the CVSROOT and ends with a slash.
4934 This prefix will be stripped from all filenames, and filenames
4935 which do not start with it will be ignored.
4937 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4939 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4940 and --exclude (inverse of --include). SVN post-commit hooks
4941 now have total control over which changes get sent to buildbot and which
4944 2004-07-10 Brian Warner <warner@lothar.com>
4946 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4947 test case to match new API
4949 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4950 which crashed HTML display when self.entries=[] (needed to
4951 distinguish between [], which means "no entries yet", and None,
4952 which means "the entries have been swapped out to disk, go fetch
4955 2004-07-04 Brian Warner <warner@lothar.com>
4957 * buildbot/process/step_twisted.py (countFailedTests): Count
4958 skips, expectedFailures, and unexpectedSuccesses. Start scanning
4959 10kb from the end because any import errors are wedged there and
4960 they would make us think the test log was unparseable.
4961 (RunUnitTests.finishStatus): add skip/todo counts to the event box
4963 2004-06-26 Brian Warner <warner@lothar.com>
4965 * buildbot/process/step_twisted.py (RemovePYCs): turn the
4966 delete-*.pyc command into an actual BuildStep, so we can label it
4968 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4969 (FullTwistedBuildFactory): same
4971 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
4973 * contrib/fakechange.py: Add an errback when sending the fake
4974 change, so we know it didn't work.
4976 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
4978 * buildbot/process/step_twisted.py: Delete *.pyc files before
4979 calling trial, so it doesn't catch any old .pyc files whose .py
4980 files have been moved or deleted.
4982 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4983 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4984 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4985 instead of ["twisted.test"], so that the end result is "trial -R
4988 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4989 regular expression to match filenames that should be ignored when
4990 changed. Also add a --revision parameter that specifies the
4991 revision to examine, which is useful for debugging.
4993 2004-06-25 Brian Warner <warner@lothar.com>
4995 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4996 summary of warnings (like DeprecationWarnings), next to the
4999 2004-05-13 Brian Warner <warner@lothar.com>
5001 * docs/examples/twisted_master.cfg: enable the win32 builder, as
5002 we now have a w32 build slave courtesy of Mike Taylor.
5004 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5005 so broken. Fixed a race condition that tripped up interlocked
5006 builds and caused the status to be stuck at "Interlocked" forever.
5007 The twisted buildbot's one interlocked build just so happened to
5008 never hit this case until recently (the feeding builds both pass
5009 before the interlocked build is attempted.. usually it has to wait
5011 (Builder._pong_failed): fix method signature
5013 * setup.py: bump to 0.4.3+ while between releases
5015 2004-04-30 Brian Warner <warner@lothar.com>
5017 * setup.py (version): Releasing buildbot-0.4.3
5019 2004-04-30 Brian Warner <warner@lothar.com>
5021 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5023 * README: update for 0.4.3 release
5025 * NEWS: update for 0.4.3 release
5027 * buildbot/master.py (BuildMaster.__getstate__): make sure
5028 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5030 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5031 .trial as a class attribute, for upgrade from 0.4.2
5033 * buildbot/changes/changes.py (Change.links): add .links for
5036 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5037 .textWatchers and .htmlWatchers at save time, since they are both
5038 volatile, should allow smooth 0.4.2 upgrade
5040 * buildbot/process/step.py (CVS.finishStatus): catch failed
5041 CVS/SVN commands so we can make the status box red
5043 2004-04-29 Brian Warner <warner@lothar.com>
5045 * buildbot/changes/freshcvs.py
5046 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5047 code to do setFilter(), which tells the freshcvs daemon to not
5048 send us stuff that we're not interested in. I will uncomment it
5049 when a new version of CVSToys is available in which setFilter()
5050 actually works, and I get a chance to test it better.
5052 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5054 * buildbot/master.py (Dispatcher): use a registration scheme
5055 instead of hardwired service names
5056 (BuildMaster): keep track of the Dispatcher to support
5059 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5060 PBChangeSource class instead of having it be an undocumented
5061 internal feature of the ChangeMaster. Split out the code into a
5063 * buildbot/changes/pb.py (PBChangeSource): same
5064 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5066 * docs/{factories|sources|steps}.xhtml: document some pieces
5068 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5069 using FCMaildirSource
5070 (f23osx): update OS-X builder to use python2.3, since the slave
5071 was updated to Panther (10.3.3)
5073 2004-03-21 Brian Warner <warner@lothar.com>
5075 * buildbot/process/process_twisted.py: factor out doCheckout, change
5076 to use SVN instead of CVS
5078 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5079 an SVN subclass easier
5080 (BasicSVN): subclass which uses Subversion instead of CVS
5082 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5084 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5086 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5088 2004-02-25 Brian Warner <warner@lothar.com>
5090 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5091 is now either a list (which is passed to spawnProcess directly) or
5092 a string (which gets passed to /bin/sh -c). This removes the useSH
5093 flag and the ArgslistCommand class. Also send status header at the
5094 start and end of each command, instead of having the master-side
5096 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5097 -r'. Update to use list-based arguments.
5098 (SVNFetch): use list-based arguments, use ['dir'] argument to
5100 * buildbot/test/test_steps.py (Commands): match changes
5102 * buildbot/process/step.py (InternalShellCommand.words): handle
5104 (SVN): inherit from CVS, cleanup
5106 * buildbot/status/event.py (Logfile.content): render in HTML, with
5107 stderr in red and headers (like the name of the command we're
5108 about to run) in blue. Add link to a second URL (url + "?text=1")
5109 to get just stdout/stderr in text/plain without markup. There is
5110 still a problem with .entries=None causing a crash, it seems to occur
5111 when the logfile is read before it is finished.
5113 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5114 timeout to the keepalives, and use it to explicitly do a
5115 loseConnection instead of waiting for TCP to notice the loss. This
5116 ought to clear up the silent-lossage problem.
5117 (unsafeTracebacks): pass exception tracebacks back to the master,
5118 makes it much easier to debug problems
5120 2004-02-23 Brian Warner <warner@lothar.com>
5122 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5123 the whole command to /bin/sh instead of execve [Johan Dahlin]
5124 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5125 '-r HEAD' [Johan Dahlin]
5126 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5128 * buildbot/changes/changes.py (Change): add links= argument, add
5129 asHTML method [Johan Dahlin]. Modified to make a bit more
5130 XHTMLish. Still not sure how to best use links= .
5132 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5133 Change.asHTML to display the change, not asText
5135 * buildbot/status/html.py (StatusResourceBuilder): web button to
5138 * buildbot/test/test_run.py: test to actually start a buildmaster
5141 * MANIFEST.in: bring back accidentally-dropped test helper files
5143 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5144 that require cvstoys if it is not installed
5146 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5147 values of "bin/trial" [Dave Peticolas]
5148 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5149 tests passed" when we didn't happen to run any tests
5151 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5152 flunkOnFailure [Johan Dahlin]
5154 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5155 multiple instances of the same Step class by suffixing "_2", etc,
5156 to the name until it is unique. This name needs to be unique
5157 because it is used as a key in the dictionary that tracks build
5159 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5162 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5164 2004-01-14 Brian Warner <warner@lothar.com>
5166 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5167 kicked from a channel, log it
5169 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5170 something over whatever IRC channels the buildmaster is currently
5171 connected to. Added to try and track down a problem in which the
5172 master thinks it is still connected but the IRCd doesn't see it. I
5173 used a styles.Versioned this time, so hopefully users won't have
5174 to rebuild their .tap files this time.
5175 * contrib/debug.glade: add a "Poke IRC" button
5176 * contrib/debugclient.py: same
5178 * setup.py: bump to 0.4.2+ while between releases
5180 2004-01-08 Brian Warner <warner@lothar.com>
5182 * setup.py (version): Releasing buildbot-0.4.2
5184 2004-01-08 Brian Warner <warner@lothar.com>
5186 * NEWS: update for 0.4.2 release
5188 * README: document how to run the tests, now that they all pass
5190 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5192 * buildbot/process/step.py (CVS): add a global_options= argument,
5193 which lets you set CVS global options for the command like "-r"
5194 for read-only checkout, or "-R" to avoid writing in the
5196 * buildbot/slavecommand.py (CVSCommand): same
5198 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5199 testing easier (it is turned off when testing, to avoid the
5202 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5203 to make it easier to test: break generateStepID() out to a
5204 separate function, only update statusbag if it exists.
5205 (ShellCommands): create useful text for dict-based commands too.
5207 * test/*, buildbot/test/*: move unit tests under the buildbot/
5209 * setup.py (packages): install buildbot.test too
5211 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5212 * buildbot/test/test_steps.py: fix it, tests pass now
5214 2004-01-06 Brian Warner <warner@lothar.com>
5216 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5217 freshcvs mail uses a slightly different syntax for new
5218 directories. Update parser to handle either.
5219 * test/test_mailparse.py (Test1.testMsg9): test for same
5221 2003-12-21 Brian Warner <warner@lothar.com>
5223 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5224 'warnOnWarnings' so that lintian errors mark the build orange
5226 2003-12-17 Brian Warner <warner@lothar.com>
5228 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5229 messages emitted by Bonsai, contributed by Stephen Davis.
5231 * test/*: moved all tests to use trial instead of unittest. Some
5232 still fail (test_steps, test_slavecommand, and test_process).
5234 * setup.py (version): bump to 0.4.1+ while between releases
5236 2003-12-09 Brian Warner <warner@lothar.com>
5238 * setup.py (version): Releasing buildbot-0.4.1
5240 2003-12-09 Brian Warner <warner@lothar.com>
5242 * NEWS: update for 0.4.1 release
5244 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5245 freebsd builder code a little bit
5247 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5248 don't try to compare attributes of different classes
5249 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5250 (MaildirSource.messageReceived): fix Change delivery
5252 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5253 into the config file's namespace before loading it, like the
5254 documentation claims it does
5255 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5256 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5257 daemon comes back online
5259 2003-12-08 Brian Warner <warner@lothar.com>
5261 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5262 so the example will work with online=0 as well
5264 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5265 fix the __implements__ line
5267 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5268 class a twisted.application.service.Service, use startService to
5271 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5272 directory fd instead of simple open(). I'm sure this used to work,
5273 but the current version of python refuses to open directories with
5276 2003-12-05 Brian Warner <warner@lothar.com>
5278 * setup.py (version): bump to 0.4.0+ while between releases
5280 2003-12-05 Brian Warner <warner@lothar.com>
5282 * setup.py (version): Releasing buildbot-0.4.0
5284 2003-12-05 Brian Warner <warner@lothar.com>
5286 * docs/examples/glib_master.cfg: replace old sample scripts with
5287 new-style config files
5288 * MANIFEST.in: include .cfg files in distribution tarball
5290 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5291 implement a dummy method to avoid the exception that occurs when
5292 freshcvs sends this to us.
5294 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5295 removed the method, as it broke reconnection. Apparently
5296 stopFactory is called each time the connection attempt fails. Must
5298 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5299 attribute before serialization, since without stopFactory the
5300 reconnect timer may still be active and they aren't serializable.
5302 * test/test_mailparse.py (ParseTest): test with 'self' argument
5304 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5305 argument, as these "functions" are invoked like methods from class
5306 attributes and therefore always get an instance as the first
5309 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5310 message: thanks to Stephen Davis for the catch
5312 2003-12-04 Brian Warner <warner@lothar.com>
5314 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5315 twisted's standard ReconnectingClientFactory. Handles both oldcred
5316 and newcred connections. Also has a bug-workaround for
5317 ReconnectingClientFactory serializing its connector when it
5320 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5321 pbutil. Replace makeApp stuff with proper newcred/mktap
5322 makeService(). Don't serialize Ephemerals on shutdown.
5324 * buildbot/changes/changes.py (ChangeMaster): make it a
5325 MultiService and add the sources as children, to get startService
5326 and stopService for free. This also gets rid of the .running flag.
5328 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5329 new pbutil, turn into a TCPClient at the same time (to get
5330 startService for free). Two variants exist: FreshCVSSourceOldcred
5331 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5332 yet, but when it does, we'll be ready).
5333 (FreshCVSSource.notify): handle paths which are empty after the
5334 prefix is stripped. This only happens when the top-level (prefix)
5335 directory is added, at the very beginning of a Repository's life.
5337 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5338 Now the only reconnecting code is in the factory where it belongs.
5339 (Builder.unsubscribe): unregister the disconnect callback when we
5340 delete the builder on command from the master (i.e. when the
5341 buildmaster is reconfigured and that builder goes away). This
5342 fixes a multiple-delete exception when the status client is shut
5344 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5347 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5348 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5350 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5352 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5353 a list of globs (ugh). The testdir will be searched for files
5354 named *.tests and run the tests in the order specified in each of
5355 those files. This allows for "dependancies" between tests to be
5358 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5359 argument to pass to run_maxq.py, instead of a glob.
5361 2003-10-17 Brian Warner <warner@lothar.com>
5363 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5364 files that live in the sandbox
5366 2003-10-15 Brian Warner <warner@lothar.com>
5368 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5369 spelling error in "docs" count-warnings output
5370 (HLint.start): stupid thinko meant .xhtml files were ignored
5372 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5373 tests now that cReactor is banished to the sandbox
5375 2003-10-10 Brian Warner <warner@lothar.com>
5377 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5378 scheme: now .xhtml are sources and .html are generated
5380 2003-10-08 Brian Warner <warner@lothar.com>
5382 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5383 we were ignoring the 'randomly' parameter.
5385 2003-10-01 Brian Warner <warner@lothar.com>
5387 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5388 posix, to kill sub-children of aborted slavecommands.
5390 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5391 Clean up initialization: lastBuildStatus remains None until the
5392 first build has been completed.
5394 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5395 None as a lastBuildStatus
5396 * buildbot/clients/gtkPanes.py: same
5398 * buildbot/status/client.py (StatusClientService): keep
5399 BuilderStatus objects in self.statusbags . These objects now live
5400 here in the StatusClientService and are referenced by the Builder
5401 object, rather than the other way around.
5402 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5403 * buildbot/process/base.py (Builder): same
5404 * test/test_config.py (ConfigTest.testBuilders): same
5406 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5407 an existing builder, leave the statusbag alone. This will preserve the
5410 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5411 hook. This will probably go away in favor of a class in upcoming
5414 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5415 serviceName from newcred FreshCVSNotifiee setup
5417 2003-09-29 Brian Warner <warner@lothar.com>
5419 * buildbot/process/process_twisted.py: switch to new reactor
5421 * docs/examples/twisted_master.cfg: same
5423 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5425 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5426 botmaster reference instead of the oldapp service lookup
5428 * buildbot/master.py (BuildMaster.__init__): give the
5429 StatusClientService a reference to the botmaster to make it easier to
5432 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5434 * buildbot/status/html.py (Box.td): escape hreffy things so you
5435 can have spaces in things like builder names
5436 (StatusResourceBuilder.body)
5437 (WaterfallStatusResource.body)
5438 (WaterfallStatusResource.body0): same
5440 2003-09-25 Brian Warner <warner@lothar.com>
5442 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5443 rearrange the builder list when adding or removing builders: keep
5444 them in the order the user requested.
5445 * test/test_config.py (ConfigTest.testBuilders): verify it
5447 * contrib/debug.glade: give the debug window a name
5449 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5450 now wait on multiple interlocks. Fix code relating to that.
5451 (Builder.checkInterlocks): same
5452 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5454 * buildbot/master.py (BuildMaster.loadConfig): move from
5455 deprecated pb.BrokerFactory to new pb.PBServerFactory
5456 * test/test_config.py (ConfigTest.testWebPathname): same
5458 * docs/examples/twisted_master.cfg: fix interlock declaration
5460 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5461 Interlocks to their Builders into interlock.py .
5462 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5464 * test/test_config.py (ConfigTest.testInterlocks): validate
5467 * buildbot/process/base.py (Builder.__init__): better comments
5468 * buildbot/process/interlock.py (Interlock.__repr__): same
5469 (Interlock.deactivate): add .active flag, move the code that
5470 attaches/detaches builders into the Interlock
5472 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5474 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5475 tests using the new run_maxq.py script, and reporting failures by
5478 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5479 tests, reporting their success or failure in a buildbot-friendly
5482 2003-09-24 Brian Warner <warner@lothar.com>
5484 * docs/examples/twisted_master.cfg: example of a new-style config
5485 file. This lives in the buildmaster base directory as
5488 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5489 button to make the master re-read its config file
5491 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5492 buildmaster configuration from a file. This file can be re-read
5493 later, and the buildmaster will update itself to match the new
5494 desired configuration. Also use new Twisted Application class.
5495 * test/Makefile, test/test_config.py: unit tests for same
5497 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5498 FreshCVSSources comparable, to support reload.
5499 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5501 * buildbot/process/base.py (Builder): make them comparable, make
5502 Interlocks easier to attach, to support reload. Handle
5503 re-attachment of remote slaves.
5504 * buildbot/process/interlock.py (Interlock): same
5506 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5507 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5508 buildmaster taps are now constructed with mktap.
5509 * buildbot/status/client.py (StatusClientService): same
5511 * buildbot/status/words.py: move to new Services, add support to
5512 connect to multiple networks, add reload support, allow nickname
5513 to be configured on a per-network basis
5515 2003-09-20 Brian Warner <warner@lothar.com>
5517 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5518 the freebsd builder, now that the machine has been upgraded and no
5519 longer has python2.2
5521 * setup.py (version): bump to 0.3.5+ while between releases
5523 2003-09-19 Brian Warner <warner@lothar.com>
5525 * setup.py (version): Releasing buildbot-0.3.5
5527 2003-09-19 Brian Warner <warner@lothar.com>
5529 * NEWS: add post-0.3.4 notes
5531 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5533 * MANIFEST.in: add contrib/*
5535 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5536 use a remote root now: cvs.twistedmatrix.com
5538 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5540 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5541 compatibility with old servers
5542 (FreshCVSSource.start): and provide a way to use it
5543 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5545 * docs/examples/twisted_master.py (twisted_app): update to new
5547 (twisted_app): listen on new ~buildbot socket
5548 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5550 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5551 to reduce cvs bandwidth (update instead of full checkout)
5553 2003-09-11 Brian Warner <warner@lothar.com>
5555 * contrib/fakechange.py: demo how to connect to the changemaster
5556 port. You can use this technique to submit changes to the
5557 buildmaster from source control systems that offer a hook to run a
5558 script when changes are committed.
5560 * contrib/debugclient.py: tool to connect to the debug port. You
5561 can use it to force builds, submit fake changes, and wiggle the
5564 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5565 'Dispatcher' realm to handle all the different kinds of
5566 connections and Perspectives: buildslaves, the changemaster port,
5567 the debug port, and the status client port. NewCredPerspectives
5568 now have .attached/.detached methods called with the remote 'mind'
5569 reference, much like old perspectives did. All the pb.Services
5570 turned into ordinary app.ApplicationServices .
5571 (DebugService): went away, DebugPerspectives are now created
5572 directly by the Dispatcher.
5573 (makeApp): changed interface a little bit
5575 * buildbot/changes/changes.py: newcred
5576 * buildbot/status/client.py: newcred
5578 * buildbot/clients/base.py: newcred client side changes
5579 * buildbot/bot.py: ditto
5581 * docs/examples/glib_master.py: handle new makeApp() interface
5582 * docs/examples/twisted_master.py: ditto
5584 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5585 base newcred Perspectives on. This should go away once Twisted
5586 itself provides something sensible.
5589 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5591 * contrib/svn_buildbot.py: A program that you can call from your
5592 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5593 when a change in an SVN repository has happened. See the top of
5594 the file for some minimal usage info.
5596 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5598 * buildbot/slavecommand.py (ArglistCommand): Add new
5599 ArglistCommand that takes an argument list rather than a string as
5600 a parameter. Using a st.split() for argv is very bad.
5602 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5603 update to a particular revision rather than always checking out
5604 (still not very smart about it, there may be cases where the
5605 checkout becomes inconsistent).
5607 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5609 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5610 SVN fetch support. It can checkout (not update!) a specified
5611 revision from a specified repository to a specified directory.
5613 * buildbot/status/progress.py (Expectations.update): Fix an
5614 obvious bug (apparently created by the change described in the
5615 previous ChangeLog message) by moving a check to *after* the
5616 variable it checks is defined.
5619 2003-09-08 Brian Warner <warner@lothar.com>
5621 * buildbot/status/progress.py (Expectations.update): hack to catch
5622 an exception TTimo sees: sometimes the update() method seems to
5623 get called before the step has actually finished, so the .stopTime
5624 is not set, so no totalTime() is available and we average None
5625 with the previous value. Catch this and just don't update the
5626 metrics, and emit a log message.
5628 2003-08-24 Brian Warner <warner@lothar.com>
5630 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5631 parameter to set copydir='original' in CVS commands.
5633 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5635 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5636 which tells the command to maintain a separate original-source CVS
5637 workspace. For each build, this workspace will be updated, then
5638 the tree copied into a new workdir. This reduces CVS bandwidth
5639 (from a full checkout to a mere update) while doubling the local
5640 disk usage (to keep two copies of the tree).
5642 2003-08-21 Brian Warner <warner@lothar.com>
5644 * buildbot/status/event.py (Logfile.addEntry): if the master web
5645 server dies while we're serving a page, request.write raises
5646 pb.DeadReferenceError . Catch this and treat it like a
5647 notifyFinish event by dropping the request.
5649 2003-08-18 Brian Warner <warner@lothar.com>
5651 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5652 (instead of blowing up) if a force-build command is given without
5655 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5656 don't blow up if there aren't yet any Changes in the list
5658 2003-08-02 Brian Warner <warner@lothar.com>
5660 * buildbot/bot.py (updateApplication): don't set the .tap name,
5661 since we shouldn't assume we own the whole .tap file
5663 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5664 'mktap buildbot' (without a subcommand) better
5666 2003-07-29 Brian Warner <warner@lothar.com>
5668 * buildbot/status/words.py
5669 (IrcStatusFactory.clientConnectionLost): when we lose the
5670 connection to the IRC server, schedule a reconnection attempt.
5672 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5673 use shutil.rmtree instead of forking off an "rm -rf" command.
5674 rmtree may take a while and will block until it finishes, so we
5675 use "rm -rf" if available.
5677 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5678 freebsd buildslave badly
5680 * setup.py (version): bump to 0.3.4+ while between releases
5682 2003-07-28 Brian Warner <warner@lothar.com>
5684 * setup.py (version): Releasing buildbot-0.3.4
5686 2003-07-28 Brian Warner <warner@lothar.com>
5688 * NEWS: update in preparation for release
5690 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5691 process.signalProcess instead of os.kill, to improve w32
5694 * docs/examples/twisted_master.py (twisted_app): turn off
5695 win32eventreactor: the tests hang the buildslave badly
5697 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5698 failed builds, since usually the failures are consistent
5700 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5701 add compileOpts/compileOpts2 to reactors build
5703 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5704 (twisted_app): use both default and win32eventreactor on w32 build.
5705 Use both default and kqreactor on freebsd build.
5707 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5708 add compileOpts2, which is put after the build_ext argument. w32
5709 needs "-c mingw32" here.
5711 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5712 touch .acqpath, it goes away in recent Twisted releases
5714 * docs/examples/twisted_master.py (twisted_app): use "python" for
5715 the w32 buildslave, not "python2.2"
5717 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5718 the directory exists.. should hush an exception under w32
5720 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5721 ProcessTerminated -provided values for signal and exitCode rather
5722 than parsing the unix status code directly. This should remove one
5723 more roadblock for a w32-hosted buildslave.
5725 * test/test_mailparse.py: add test cases for Syncmail parser
5727 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5728 temporary compatibility import. Note! Start importing
5729 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5731 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5733 2003-07-27 Brian Warner <warner@lothar.com>
5735 * NEWS: started adding new features
5737 * buildbot/changes/mail.py: start work on Syncmail parser, move
5738 mail sources into their own file
5740 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5741 as implementing IChangeSource
5742 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5744 * buildbot/interfaces.py: define the IChangeSource interface
5746 2003-07-26 Brian Warner <warner@lothar.com>
5748 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5750 2003-06-25 Brian Warner <warner@lothar.com>
5752 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5755 2003-06-17 Brian Warner <warner@lothar.com>
5757 * buildbot/status/words.py: clean up method usage to avoid error
5758 in silly IRC command
5759 (IrcStatusBot.emit_status): round off seconds display
5761 * buildbot/process/base.py (Build): delete the timer when saving
5762 to the .tap file, and restore it (if it should still be running)
5763 upon restore. This should fix the "next build in -34 seconds"
5764 messages that result when the master is restarted while builds are
5765 sitting in the .waiting slot. If the time for the build has
5766 already passed, start it very soon (in 1 second).
5768 * buildbot/status/words.py: more silly commands
5770 * README (REQUIREMENTS): add URLs to all required software
5772 * buildbot/status/words.py ('last'): mention results of, and time
5775 2003-05-28 Brian Warner <warner@lothar.com>
5777 * buildbot/status/words.py: add 'last' command
5778 (IrcStatusBot.emit_status): add current-small text to 'status' output
5780 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5781 (twisted_app): remove spaces from OS-X builder name
5783 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5784 * buildbot/status/words.py: IRC bot should actually be useful now
5786 2003-05-23 Brian Warner <warner@lothar.com>
5788 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5789 "slave information" from $(slavedir)/info/* . These files are
5790 maintained by the slave administrator, and describe the
5791 machine/environment that is hosting the slave. Information from
5792 them is put into the "Builder" HTML page. Still need to establish
5793 a set of well-known filenames and meanings for this data: at the
5794 moment, *all* info/* files are sent to the master, but only
5795 'admin' and 'host' are used on that end.
5796 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5797 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5798 * buildbot/master.py (BotPerspective.got_info): ditto
5800 2003-05-22 Brian Warner <warner@lothar.com>
5802 * setup.py (version): bump version to 0.3.3+ while between releases
5804 2003-05-21 Brian Warner <warner@lothar.com>
5806 * setup.py: Releasing buildbot-0.3.3
5808 2003-05-21 Brian Warner <warner@lothar.com>
5810 * NEWS: 0.3.3 news items
5812 * README: describe --keepalive and life behind a NAT box
5814 * buildbot/bot.py (Bot.connected): implement application-level
5815 keepalives to deal with NAT timeouts, turn them on with
5816 --keepalive option or when SO_KEEPALIVE doesn't work.
5818 * buildbot/master.py (BotPerspective): accept keepalives silently
5820 * buildbot/process/base.py (Build.buildException): CopiedFailures
5821 don't carry as much information as local ones, so don't try to
5822 create a big HTMLized version of them.
5824 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5825 log file when step fails due to an exception, such as when the slave
5828 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5829 --testmodule argument instead of grepping for test-case-name tags
5830 ourselves. Remove FindUnitTests code.
5831 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5833 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5835 2003-05-16 Brian Warner <warner@lothar.com>
5837 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5838 argument to allow things like CFLAGS=-O0 to be passed without relying
5839 upon /bin/sh processing on the slave.
5841 * buildbot/process/step.py (InternalShellCommand.start): send
5843 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5844 'split' instead of letting /bin/sh do it. This should also remove
5845 the need for /bin/sh on the buildslave, making it more likely to
5848 * buildbot/status/html.py: html-escape text in blamelist.
5849 Add "force build" button to the Builder page.
5851 * buildbot/process/step_twisted.py (countFailedTests): look at
5852 last 1000 characters for status line, as import errors can put it
5853 before the -200 point.
5855 2003-05-15 Brian Warner <warner@lothar.com>
5857 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5859 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5860 make 'clobber' a parameter, so it is possible to have builds which
5861 do full tests but do a cvs update instead of hammering the CVS
5862 server with a full checkout each build
5864 * buildbot/process/step.py (InternalShellCommand): bump default
5865 timeout to 20 minutes
5867 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5868 the master to trigger a build. Run it via manhole.
5870 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5871 allow slaves to trigger any build that they host, to make life
5872 easier for slave admins who are testing out new build processes
5874 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5875 don't flunk cReactor or qtreactor on failure, since they fail alot
5876 these days. Do warnOnFailure instead.
5878 * buildbot/process/base.py: change Builder.buildable from a list
5879 into a single slot. When we don't have a slave, new builds (once
5880 they make it past the timeout) are now merged into an existing
5881 buildable one instead of being queued. With this change, a slave
5882 which has been away for a while doesn't get pounded with all the
5883 builds it missed, but instead just does a single build.
5885 2003-05-07 Brian Warner <warner@lothar.com>
5887 * setup.py (version): bump version to 0.3.2+ while between releases
5889 2003-05-07 Brian Warner <warner@lothar.com>
5891 * setup.py: Releasing buildbot-0.3.2
5893 2003-05-07 Brian Warner <warner@lothar.com>
5895 * setup.py: fix major packaging error: include subdirectories!
5897 * NEWS: add changes since last release
5899 * README (REQUIREMENTS): update twisted/python dependencies
5901 * buildbot/status/builder.py (Builder.startBuild): change
5902 BuildProcess API: now they should call startBuild/finishBuild
5903 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5904 keeping a list of builds in the statusbag, to support other kinds of
5906 (Builder.addClient): send current-activity-small to new clients
5907 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5910 * buildbot/status/client.py: drop RemoteReferences at shutdown
5912 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5914 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5915 more debug messages for remote status client
5917 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5918 (.stepFailed): only fire the Deferred once, even if both
5919 stepComplete and stepFailed are called. I think this can happen if
5920 an exception occurs at a weird time.
5922 * buildbot/status/words.py: work-in-progress: IRC status delivery
5924 2003-05-05 Brian Warner <warner@lothar.com>
5926 * docs/examples/twisted_master.py (twisted_app): hush internal
5927 python2.3 distutils deprecation warnings
5928 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5929 add compileOpts= argument which inserts extra args before the
5930 "setup.py build_ext" command. This can be used to give -Wignore
5931 warnings, to hush some internal python-2.3 deprecation messages.
5933 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5934 the ['twisted.test'] default test case to make it easier to change
5937 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5938 * buildbot/clients/gtkPanes.py: ditto
5940 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5941 arg to collapse RunUnitTestsRandomly into RunUnitTests
5942 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5943 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5945 * buildbot/status/html.py (StatusResource): shuffle Resources
5946 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5947 would serve the waterfall display, but the internal links were
5948 only valid on the trailing-slash version. The correct behavior is
5949 for the non-slashed one to serve a Redirect to the slashed one.
5950 This only shows up when the buildbot page is hanging off another
5951 server, like a Twisted-Web distributed server.
5953 * buildbot/status/event.py (Event, RemoteEvent): make Events
5954 pb.Cacheable, with RemoteEvent as the cached version. This removes
5955 a lot of explicit send-an-update code.
5956 * buildbot/status/builder.py (Builder): remove send-update code
5957 * buildbot/status/client.py (ClientBuilder): remove send-update
5958 code, and log errors that occur during callRemote (mostly to catch
5959 InsecureJelly exceptions)
5961 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5962 run Lore with the same python used in the rest of the build
5964 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5966 * buildbot/process/step_twisted.py (HLint): accept 'python'
5967 argument. Catch rc!=0 and mark the step as failed. This marks the
5968 build orange ("has warnings").
5969 (RunUnitTestsJelly): move out to step_twisted2.py
5971 * buildbot/util.py (ignoreStaleRefs): add utility function
5973 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5974 don't fake ETA object, it's too hard to get right
5976 2003-05-02 Brian Warner <warner@lothar.com>
5978 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5980 2003-05-01 Brian Warner <warner@lothar.com>
5982 * buildbot/status/html.py (StatusResource.body): oops, I was
5983 missing a <tr>, causing the waterfall page to be misrendered in
5984 everything except Galeon.
5986 2003-04-29 Brian Warner <warner@lothar.com>
5988 * docs/examples/twisted_master.py: make debuild use python-2.2
5989 explicitly, now that Twisted stopped supporting 2.1
5991 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5992 handle tuple results too. I keep forgetting this, which suggests
5993 it needs to be rethought.
5995 * setup.py (setup): bump version to 0.3.1+ while between releases
5997 2003-04-29 Brian Warner <warner@lothar.com>
5999 * setup.py: Releasing buildbot-0.3.1
6001 2003-04-29 Brian Warner <warner@lothar.com>
6003 * README (SUPPORT): add plea to send questions to the mailing list
6005 * NEWS, MANIFEST.in: add description of recent changes
6007 * docs/examples/twisted_master.py: add the code used to create the
6008 Twisted buildmaster, with passwords and such removed out to a
6011 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6012 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6013 buildmasters to not require CVSToys be installed.
6014 * README, docs/examples/glib_master: update to match the change
6016 * buildbot/clients/base.py, buildbot/bot.py,
6017 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6018 ReconnectingPB from CVSToys distribution to remove CVSToys
6019 dependency for build slaves and status clients. Buildmasters which
6020 use FreshCVSSources still require cvstoys be installed, of course.
6022 2003-04-25 Brian Warner <warner@lothar.com>
6024 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6025 runTestsRandomly arg to turn on trial -z
6027 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6028 experimental code to use trial's machine-parseable output to get
6029 more detailed test results. Still has some major issues.
6030 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6033 * buildbot/status/builder.py (Builder.setCurrentBuild):
6034 anticipating moving build history into statusbag, not used yet
6036 * buildbot/status/tests.py: code to centralize test results,
6037 doesn't work quite yet
6039 * buildbot/status/event.py (Event): use hasattr("setName") instead
6040 of isinstance for now.. need better long-term solution
6042 * buildbot/status/html.py: Remove old imports
6044 2003-04-24 Brian Warner <warner@lothar.com>
6046 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6047 ignore changes under doc/fun/ and sandbox/
6049 * buildbot/process/step_twisted.py: update pushEvent and friends.
6051 * buildbot/status/html.py (Box.td): replace event.buildername with
6052 event.parent.getSwappableName(). Needs more thought.
6054 * buildbot/status/builder.py (Builder): Replace pushEvent and
6055 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6056 Tell events they are being pruned with event.delete().
6058 * buildbot/process/base.py (Build): Remove Builder status-handling
6059 methods. s/pushEvent/setCurrentActivity/.
6061 * buildbot/process/step.py (BuildStep): clean up status delivery.
6062 Gouse builder.statusbag methods instead of intermediate builder
6063 methods. s/updateLastEvent/updateCurrentActivity/.
6064 s/finalizeLastEvent/finishCurrentActivity/. Use
6065 addFileToCurrentActivity for summaryFunction.
6067 * buildbot/status/event.py (Logfile): put data in a Swappable when
6069 (Event): add more setter methods. Remove .buildername, use .parent
6070 and getSwappableName instead (needs more thought).
6072 * buildbot/util.py (Swappable):
6073 * test/test_swap.py: don't bother setting filename at __init__
6074 time, do it later. Change setFilename args to take parent first,
6075 since it provides the most significant part of the filename.
6077 2003-04-23 Brian Warner <warner@lothar.com>
6079 * buildbot/status/event.py (Logfile.addEntry): append to previous
6082 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6083 anticipating Swappable
6084 (InternalShellCommand.remoteUpdate): split out various log-adding
6085 methods so subclasses can snarf stdout separately
6087 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6088 in anticipation of Swappable build logs
6089 (Builder.testsFinished): anticipating TestResults, still disabled
6091 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6094 * buildbot/status/event.py (Logfile): add (disabled) support for
6095 Swappable, not ready for use yet
6097 * buildbot/util.py (Swappable): object which is swapped out to
6098 disk after some period of no use.
6099 * test/test_swap.py: test buildbot.utils.Swappable
6101 2003-04-14 Brian Warner <warner@lothar.com>
6103 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6104 periodic-build timer. Set the .periodicBuildTime on a builder
6105 instance to some number of seconds to activate it.
6107 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6109 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6110 a way that survives result tuples
6112 2003-04-12 Brian Warner <warner@lothar.com>
6114 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6115 return a dict instead of a tuple: allow summarizers to provide
6116 multiple summaries if they want
6117 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6118 (debuildSummarizer): summarize lintian warnings/errors
6120 2003-04-10 Brian Warner <warner@lothar.com>
6122 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6124 2003-04-09 Brian Warner <warner@lothar.com>
6126 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6127 empty summaries: happens when the tests fail so hard they don't emit
6128 a parseable summary line.
6130 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6131 Allow summaryFunction to return None to indicate no summary should
6134 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6135 writing to stale HTTP requests: notice when they disconnect and
6136 remove the request from the list. Also add CacheToFile from
6137 moshez, will be used later.
6139 2003-04-08 Brian Warner <warner@lothar.com>
6141 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6142 should be an int, not a list of strings
6144 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6145 if we weren't actually connected
6147 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6148 to show the tail end of the trial text output
6150 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6151 hook to summarize the results of a ShellCommand
6153 2003-04-07 Brian Warner <warner@lothar.com>
6155 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6156 twisted test suite code into a single class.
6157 * buildbot/process/process_twisted.py: same
6159 2003-04-04 Brian Warner <warner@lothar.com>
6161 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6163 * README (SLAVE): document use of mktap to create slave .tap file
6164 (REQUIREMENTS): describe dependencies
6166 * buildbot/bb_tap.py, buildbot/plugins.tml:
6167 * buildbot/bot.py (updateApplication): Add mktap support for creating
6168 buildslave .tap files
6170 2003-03-28 Brian Warner <warner@lothar.com>
6172 * buildbot/process/step.py (InternalShellCommand.finished): handle
6173 new tuple result values (fix embarrasing bug that appeared during
6176 2003-03-27 Brian Warner <warner@lothar.com>
6178 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6181 2003-03-25 Brian Warner <warner@lothar.com>
6183 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6184 to overall build status
6185 * buildbot/clients/base.py (Builder): improve event printing
6186 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6187 instead of generic ShellCommand
6188 (Build): Add .stopBuild, use it when slave is detached
6190 * buildbot/process/step.py (Configure,Test): give the steps their
6191 own names and status strings
6193 * buildbot/status/html.py (StatusResource): add "show" argument,
6194 lets you limit the set of Builders being displayed.
6196 2003-03-20 Brian Warner <warner@lothar.com>
6198 * buildbot/process/basic.py: removed
6200 2003-03-19 Brian Warner <warner@lothar.com>
6202 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6203 turn off process-docs by default
6205 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6206 when displaying build information without anything in allBuilds[]
6208 * buildbot/bot.py (makeApp): really take password from sys.argv
6210 2003-03-18 Brian Warner <warner@lothar.com>
6212 * buildbot/bot.py (buildApp): take password from sys.argv
6214 * README: replace with more useful text
6216 * setup.py: add a real one
6217 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6219 * docs/PyCon-2003/: added sources for PyCon paper.
6221 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6222 now Build objects control the process and Builder only handles
6223 slave stuff and distribution of changes/status. A new BuildFactory
6224 class creates Build objects on demand.
6226 Created ConfigurableBuild which takes a list of steps to run. This
6227 makes it a lot easier to set up a new kind of build and moves us
6228 closer to being able to configure a build from a web page.
6230 * buildbot/process/step_twisted.py, process_twisted.py: move to
6231 new model. A lot of code went away.
6233 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6234 send lots of empty progress messages to the client.
6236 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6238 2003-02-20 Brian Warner <warner@lothar.com>
6240 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6242 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6243 Twisted bug that prevented non-pty processes from working just got
6244 fixed, and the bug that leaks ptys is still being investigated.
6246 * buildbot/process/step.py (CVS): send timeout arg to slave
6248 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6249 builders coming and going
6250 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6251 from CVSToys, handle lost-buildmaster
6253 * buildbot/status/client.py (StatusClientService.removeBuilder):
6254 Clean up status client protocol: send builders (with references)
6255 as they are created, rather than sending a list and requiring the
6256 client to figure out which ones are new.
6257 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6258 attempts to force a build on an unknown builder
6260 2003-02-19 Brian Warner <warner@lothar.com>
6262 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6263 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6264 Twisted stops leaking them.
6265 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6266 builder goes to an idle state.
6268 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6269 I figure out why CVS commands hang without them, and/or I fix the
6270 hung-command timeout
6272 2003-02-16 Brian Warner <warner@lothar.com>
6274 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6275 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6276 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6277 GenerateDocs now that they are prefixed with WARNING:.
6279 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6280 use manual href target instead of request.childLink
6282 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6283 display every second, but update the ETA every 5 seconds (or
6284 whenever) as remote_progress messages arrive.
6287 2003-02-12 Brian Warner <warner@lothar.com>
6289 * *: import current sources from home CVS repository
6293 # add-log-time-format: add-log-iso8601-time-string