add ILogFile/ILogObserver
[buildbot.git] / ChangeLog
blob0f7986ef765c824c406a54a53f505fe4af7cfdab
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
16         str' feature.
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):
65         add a test for it
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
76         place than usual.
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
111         this behavior.
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
151         darcs_buildbot.py
153         * .darcs-boring: add a Darcs boringfile
155         * README (REQUIREMENTS): stop claiming compatibility with
156         Twisted-1.3.0
158         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
159         sender
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):
179         test them
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
187         trial command line
189         * docs/buildbot.texinfo (ShellCommand): add docs for description=
190         and descriptionDone= arguments. Thanks to Niklaus Giger for the
191         patch. SF#1475494.
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
214         fails.
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
235         'all' argument.
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
261         %z is broken.
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
276         use 'hg add' instead
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
287         opaque.
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
302         properly.
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
308         altogether.
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
316         windows.
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
357         english.
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..
386         sorry!). SF#1194231.
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'
409         class from the 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,
433         like got_revision
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
468         (RemoteDummy): same
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
476         alphabetical order
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
482         for the suggestion.
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
488         as errors.
490         * all: use isinstance() instead of 'type(x) is foo', suggested by
491         Neal Norwitz
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
509         buildmaster.
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
513         under windows.
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
527         some disabled code
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
549         exist in Twisted-1.3
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
571         addStep.
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
636         releases
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
658         method
659         (SlaveOptions.optParameters): add --umask, to make it possible to
660         make buildslave-generated files (including build products) be
661         world-readable
662         (slaveTAC): same
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
700         (PBListener): same
701         (try): 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
722           'submitBuildSet'
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
729         instances
730         (BaseUpstreamScheduler.__implements__): same
732         * buildbot/status/builder.py (Status.getSchedulers): update to
733         use allSchedulers()
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
740         comparable
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
748         new win32 builders
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
759         it
761         * buildbot/__init__.py (version): bump to 0.7.1+ while between
762         releases
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
784         auto-unsubscribe
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>
793         * NEWS: more updates
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,
817         month, or year.
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,
825         however.
826         (AnyBranchScheduler): handle fileIsImportant=None, previously it
827         was broken
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
836         the allocated port.
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
846         reactor turns.
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
893         PBChangeSource.
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
925         (Arch.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
957         collide with them.
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
962         (Logfile): 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
1005         releases
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
1016         * NEWS: same
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
1023         that argument.
1024         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1025         same
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 .
1042         (Darcs): same
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
1083         TryScheduler
1085         * NEWS: update
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
1123         change later.
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
1134         old buildslave.
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
1153         PBChangeSource now.
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
1165         legal to provide
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
1185         slaves available.
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,
1255         instead of..
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
1259         builds.
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
1355         being None
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
1371         of date.
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
1397         'try'.
1398         * docs/buildbot.texinfo (try): more docs
1399         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1400         new test case
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
1407         jobdir-style too.
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
1433         new BuildSets
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
1440         for new method
1441         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1442         same
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,
1456         unfortunately.
1457         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1458         branch test
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
1466         Twisted-1.3.0
1468         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1469         where we can (Arch), add a branch= argument to set the branch used
1470         when we can't
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
1478         from python-2.3 .
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
1492         warning message
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):
1512         test it
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
1541         unit tests around.
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
1570         browser.
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
1608         Dependent instances
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
1616         reality
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
1631         has been set.
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
1641         failures
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
1690         for quite a while
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
1700         default branch name
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
1715         disabled.
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
1719         desired revision.
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
1743         notified.
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
1758         are uniquely named.
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
1776         gracefully.
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
1788         (SlaveLock): same
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
1792         slave2 too
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):
1805         minor fix
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
1860         * MANIFEST.in: same
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
1870         Scheduler tests.
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
1882         Scheduler.
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
1904         releases
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
1952         (slaveTAC): same
1954         * buildbot/__init__.py (version): bump to 0.6.5+ while between
1955         releases
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
2001         newline
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
2012         attempt.
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()
2033         * setup.py: same
2034         * MANIFEST.in: same
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
2057         reactor.
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
2072         shutdown
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
2095         logs too
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
2107         to 'stub' builds.
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
2114         error.
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
2119         thing in memory.
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
2126         builds anymore.
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
2133         formatted HTML.
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
2179         OfflineLogFile.
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'
2203         will actually work
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
2259         (makeService): 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
2267         live twistd -y.
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
2274         might have
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)
2283         (Test3.testMsgS5)
2284         * buildbot/process/base.py (Build.isTagImportant)
2285         (Build.addChange)
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
2331         step.
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
2360         releases
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
2371         running on windows.
2372         * MANIFEST.in: include it in the tarball
2374         * NEWS: update
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
2386         anyway.
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
2405         re-read.
2406         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2407         tests (since the real mktap-generated BuildMaster doesn't save
2408         this attribute).
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
2428         commands.
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
2465         not os.path.sep
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.
2489         
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
2504         releases
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"
2542           buildbot style
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:
2560           and document them
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:
2638         * buildbot/util.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
2667           buildFinished.
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
2691           here...
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
2706         overhaul work.
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
2726         we're done.
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
2804         /usr/bin/buildbot
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
2809         next release.
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
2855         for the catch)
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
2930           documentation
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:
2941           update epydoc stuff
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
2985         for the catch.
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
2992         catch.
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
3048         releases
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
3082         debug message
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
3087         the connection.
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
3134         date.
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
3159         at shutdown time.
3160         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3161         .finishCommand
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
3183         removeBuilder.
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
3187         slave first.
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
3194         with builders.
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
3204         running build
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
3219         the logs.
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
3236         someone killed it.
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
3248         Force Build.
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.
3260         
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
3274         error text.
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
3294         .interrupted is set
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
3301         slave-shutdown
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
3315         runs the test.
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
3334         releases
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
3358         SF#1042563.
3360         * buildbot/process/step_twisted.py (Trial): update docs a bit
3362         * docs/factories.xhtml: fix Trial factory docs to match reality.
3363         Closes: SF#1049758.
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
3385         to look at both.
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
3454         python-2.4 warning
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
3505         metabuildbot :).
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
3513         ETA seconds
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
3521         releases
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
3534         * README: 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
3545         (createSlave): same
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
3557         example config file
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
3626         separate classes.
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
3644         (HTMLLogFile): same
3645         (BuildStepStatus): same
3646         (BuildStatus): 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
3657         cache)
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
3662         finishes
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
3702         (Waterfall.setup).
3703         (StatusResourceBuilder.__init__) add the builder name to the page
3704         title.
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
3719         smoother
3721         * buildbot/util.py (ComparableMixin): survive missing attributes,
3722         such as when a class is modified and we're comparing old instances
3723         against new ones
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
3814         usage text right.
3816         * Makefile: add 'deb-snapshot' target, to create a timestamped
3817         .deb package
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
3828         version when asked
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
3891 2004-09-22  slyphon
3893         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3894         results when the target project uses retrial. Still under
3895         development.
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
3970         ra_local plugin).
3971         (SetupMixin.tearDown): stop the goofy twisted.web timer which
3972         updates the log-timestamp, to make sure it isn't still running after
3973         the test finishes
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
4002         twice.
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
4016         deltas.
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
4040         than just 'failed')
4041         (BuildStepStatus.text2): default to [], not None
4043         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4044         must be a list
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
4056         headers
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
4110         (SVN.startVC): same
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
4123         point too.
4125         * buildbot/process/process_twisted.py: update to use Trial, clean
4126         up argument passing (move to argv arrays instead of string
4127         commands)
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
4154         update it later
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
4182         config changes)
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>
4211         * NEWS: mention P4
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
4216         I mangled it.
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
4238         incomplete line
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
4249         build by itself
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
4271         (VC.testArch): same
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
4303         (SVN.start): same
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
4310         under a pty).
4311         (SourceBase.doPatch): handle 'patch' argument
4313         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4314         both CVS and SVN
4316         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4317         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4318         versions to master
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
4335         (CVS): update docs
4336         (SVN): update docs
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
4349         negative code days.
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
4359         the default reactor
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
4377         work.
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
4471         testing easier.
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,
4507         not yet finished
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
4513         convenience method
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
4519         interfaces
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
4531         during .start
4532         (RemoteCommand.remote_update): ignore updates that arrive after
4533         we've shut down
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
4608         completely broken.
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
4700         attributes
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
4734         a list
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
4739         BuildProgress too
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
4750         yet"
4751         (BuildStepStatus.getExpectations): oops, return the full list of
4752         expectations
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
4757         useful predictor
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
4768         the forced build
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
4799         BuildStatus.addStep
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
4852         SlaveBuilder.usePTY
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
4906         details.
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
4917         
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
4928         
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
4942         do not.
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
4953         them").
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
4967         nicely
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
4986         twisted".
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
4997         "summary" file
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
5010         a while).
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
5034         upgrade from 0.4.2
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
5057         registration
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
5062         new file.
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
5085         of /bin/sh on win32
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
5095         code do that.
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
5099         simplify code.
5100         * buildbot/test/test_steps.py (Commands): match changes
5102         * buildbot/process/step.py (InternalShellCommand.words): handle
5103         command lists
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
5136         ping slave
5138         * buildbot/test/test_run.py: test to actually start a buildmaster
5139         and poke at it
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
5158         progress.
5159         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5160         add test for it
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
5195         repository.
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
5200         leftover timer)
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/
5208         directory
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
5269         get it moving.
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
5274         open().
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
5297         rethink this.
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
5307         argument.
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
5318         shouldn't.
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
5343         down afterwards.
5344         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5345         base Client. 
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
5356         codified.
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
5408         event history.
5410         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5411         hook. This will probably go away in favor of a class in upcoming
5412         Twisted versions.
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
5420         abbreviations
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
5430         force builds
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
5465         interlock handling
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
5476         parsing its output.
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 
5480         manner.
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
5486         "master.cfg".
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
5539         to newcred
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
5546         makeApp interface.
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
5562         builder state
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
5653         a reason field
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
5692         portability
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
5753         seconds display
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
5773         since last build
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
5826         becomes unreachable
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
5842         'env' dict to slave
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
5846         work with win32.
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!
5896         
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
5905         status delivery.
5906         (Builder.addClient): send current-activity-small to new clients
5907         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5908         new API
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
5935         in subclasses
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
5996         
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
6009         separate file.
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
6031         in random sequence
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
6068         .finish is called.
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
6080         entry, if possible
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
6092         last 100 events
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
6132         be added.
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
6174         PyCon demo)
6176 2003-03-27  Brian Warner  <warner@lothar.com>
6178         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6179         -making program
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
6218         
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.
6232         
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
6290         
6292 # Local Variables:
6293 # add-log-time-format: add-log-iso8601-time-string
6294 # End: