improve test_properties, mitigate the occasional lockup against Twisted-1.3.0
[buildbot.git] / ChangeLog
blob7192b2d8f331cd42f4c1d46b404e169bfe1dcdc4
1 2006-05-28  Brian Warner  <warner@lothar.com>
3         * buildbot/test/test_properties.py (Run.testInterpolate): on the
4         build we use to verify that WithProperties works:
6         ** set flunkOnFailure=True so that build failures get noticed
7         ** set workdir='.' so that the build succeeds, otherwise it is trying
8             to touch 'build/something', and 'build/' doesn't exist because
9             usually that's created by a Source step
10         ** set timeout=10, because Twisted-1.3.0 has a race condition that
11             this test somehow triggers, in which the 'touch' process becomes
12             a zombie and we wait for th etimeout before giving up on it.
14         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
15         to log the Build results and step logs to the twisted log.
16         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
17         what went wrong if a build was expected to succeed but didn't.
19         * buildbot/process/step_twisted.py (Trial): set the default
20         trialMode to '--reporter=bwverbose', which specifies verbose
21         black-and-white text. Back in twisted-1.3/2.0 days we had to use
22         '-to', but those are completely missing in modern Twisteds.
24         * buildbot/scripts/sample.cfg: make the sample Manhole config use
25         a localhost-only port, to encourage better security
27         * docs/buildbot.texinfo (Change Sources): mention
28         darcs_buildbot.py
30         * .darcs-boring: add a Darcs boringfile
32         * README (REQUIREMENTS): stop claiming compatibility with
33         Twisted-1.3.0
35         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
36         sender
38 2006-05-27  Brian Warner  <warner@lothar.com>
40         * buildbot/__init__.py: bump to 0.7.3+ while between releases
41         * docs/buildbot.texinfo: same
43 2006-05-23  Brian Warner  <warner@lothar.com>
45         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
46         * docs/buildbot.texinfo: set version to match
47         * NEWS: update for 0.7.3
49         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
50         give a quick mapping from VC system to possible ChangeSources
51         (Build Properties): add 'buildername'
53         * buildbot/process/base.py (Build.setupStatus): oops, set
54         'buildername' and 'buildnumber' properties
55         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
56         test them
58 2006-05-22  Brian Warner  <warner@lothar.com>
60         * docs/buildbot.texinfo (Build Properties): explain the syntax of
61         property interpolation better
63         * README (INSTALLATION): remove old '-v' argument from recommended
64         trial command line
66         * docs/buildbot.texinfo (ShellCommand): add docs for description=
67         and descriptionDone= arguments. Thanks to Niklaus Giger for the
68         patch. SF#1475494.
70         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
71         'svnversion' instead of grepping the output of 'svn info', much
72         simpler and avoids CR/LF problems on windows. Thanks to Olivier
73         Bonnet for the suggestion.
74         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
75         require the WC_PATH argument, so run 'svnversion .' instead.
77         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
78         aren't supposed to have 'self' in their argument list
80 2006-05-21  Brian Warner  <warner@lothar.com>
82         * buildbot/process/step.py (ShellCommand.start): make
83         testInterpolate pass. I was passing the uninterpolated command to
84         the RemoteShellCommand constructor
85         (ShellCommand._interpolateProperties): oops, handle non-list
86         commands (i.e. strings with multiple words separated by spaces in
87         them) properly, instead of forgetting about them.
89         * buildbot/test/test_properties.py (Run.testInterpolate): new test
90         to actually try to use build properties in a real build. This test
91         fails.
92         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
93         to start and evaluate builds
95         * buildbot/test/test__versions.py: add a pseudo-test to record
96         what version of Twisted/Python/Buildbot are running. This should
97         show up at the beginning of _trial_tmp/test.log, and exists to help
98         debug other problems.
100         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
101         a filename to be served as 'robots.txt' to discourage web spiders.
102         Adapted from a patch by Tobi Vollebregt, thanks!
103         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
104         (Waterfall.test_waterfall): tweak the way that filenames are put
105         into the config file, to accomodate windows pathnames better.
107         * docs/buildbot.texinfo (HTML Waterfall): document it
109         * buildbot/process/process_twisted.py
110         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
111         changed the build process. The new setup.py no longer takes the
112         'all' argument.
113         (FullTwistedBuildFactory.__init__): same
114         (TwistedReactorsBuildFactory.__init__): same
116         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
117         be placed in the [hooks] section of the central repository (the
118         one that everybody pushes changes to).
120 2006-05-20  Brian Warner  <warner@lothar.com>
122         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
123         .darcs-context file, use binary mode. I think this was causing a
124         Darcs failure under windows.
126 2006-05-19  Brian Warner  <warner@lothar.com>
128         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
129         use a timezone string of +0000 and gmtime, since this timestamp is
130         sent to a buildmaster and %z is broken.
132         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
133         string and localtime, since this timestamp will only be consumed
134         locally, and %z is broken.
136         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
137         gmtime, since this timestamp is returned to the buildmaster, and
138         %z is broken.
140 2006-05-18  Brian Warner  <warner@lothar.com>
142         * NEWS: update in preparation for next release
144         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
145         setup-repository and do-we-have-the-vc-tools code into a separate
146         "helper" class, which sticks around in a single module-level
147         object. This seems more likely to continue to work in the future
148         than having it hide in the TestCase and hope that TestCases stick
149         around for a long time.
151         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
152         addremove' has been deprecated in recent versions of mercurial, so
153         use 'hg add' instead
155 2006-05-07  Brian Warner  <warner@lothar.com>
157         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
158         operating under windows, move the file before opening it, since
159         you can't rename a file that somebody has open.
161         * buildbot/process/base.py (Build.setupBuild): if something goes
162         wrong while creating a Step, log the name and arguments, since the
163         error message when you get the number of arguments wrong is really
164         opaque.
166 2006-05-06  Brian Warner  <warner@lothar.com>
168         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
169         bugs in twisted-specific code not covered by my unit tests, this
170         time use 'cmd' argument instead of self.cmd
172         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
173         fix stupid braino: either use startwith or find()==0, not both.
174         (TwistedReactorsBuildFactory.__init__): another dumb typo
176         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
177         mark this test as TODO under windows, since process-killing seems
178         dodgy there. We'll come back to this later and try to fix it
179         properly.
181         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
182         and don't include a timezone
183         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
184         This should avoid the windows-with-verbose-timezone-name problem
185         altogether.
186         (Patch.testPatch): add a test which runs 'patch' with less
187         overhead than the full VCBase.do_patch sequence, to try to isolate
188         a windows test failure. This one uses slave.commands.ShellCommand
189         and 'patch', but none of the VC code.
191         * buildbot/slave/commands.py (getCommand): use which() to find the
192         executables for 'cvs', 'svn', etc. This ought to help under
193         windows.
195         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
196         working directory before starting. If an earlier test failed, the
197         leftover directory would mistakenly flunk a later test.
198         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
199         Make sure that we use the right commandlines if which("tla") picks
200         up "tla.exe" (as it does under windows).
201         (TlaSupport.do_get): factor out this tla-vs-baz difference
202         (TlaSupport.vc_create): more tla-vs-baz differences
204         * buildbot/test/test_slavecommand.py
205         (ShellBase.testShellMissingCommand): stop trying to assert
206         anything about the error message: different shells on different
207         OSes with different languages makes it hard, and it really isn't
208         that interesting of a thing to test anyway.
210         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
211         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
212         "Panther"), because it has a bug which flunks a couple tests in
213         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
214         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
215         able to test that yet.
217 2006-04-30  Brian Warner  <warner@lothar.com>
219         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
220         make sure child commands emit messages in english, so our regexps
221         will match. Thanks to Nikaus Giger for identifying the problems.
222         (VCBase._do_vctest_export_1): mode="export" is not responsible
223         for setting the "got_revision" property, since in many cases it is
224         not convenient to determine.
225         (SVNSupport.capable): when running 'svn --version' to check for
226         ra_local, we want error messages in english
227         * buildbot/test/test_slavecommand.py 
228         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
229         to emit the error message in english
231         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
232         the environment with $LC_ALL="C" so that Commands which need to
233         parse the output of their child processes can obtain it in
234         english.
235         (SVN.parseGotRevision): call "svn info" afterwards instead of
236         watching the output of the "svn update" or "svn checkout".
237         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
238         (Arch.parseGotRevision): same
239         (Bazaar.parseGotRevision): same
240         (Mercurial.parseGotRevision): same
242         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
243         $LC_ALL="C" when running commands under 'buildbot try', too
245         * buildbot/test/__init__.py: remove the global os.environ()
246         setting, instead we do it just for the tests that run commands and
247         need to parse their output.
249         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
250         remove the overly-short .timeout on this test, because non-DNotify
251         platforms must fall back to polling which happens at 10 second
252         intervals, so a 5 second timeout would never succeed.
254 2006-04-24  Brian Warner  <warner@lothar.com>
256         * docs/buildbot.texinfo (Installing the code): update trial
257         invocation, SF#1469116 by Niklaus Giger.
258         (Attributes of Changes): updated branch-name examples to be
259         a bit more realistic, SF#1475240 by Stephen Davis.
261         * contrib/windows/buildbot2.bat: utility wrapper for windows
262         developers, contributed by Nick Trout (after a year of neglect..
263         sorry!). SF#1194231.
265         * buildbot/test/test_vc.py (*.capable): store the actual VC
266         binary's pathname in VCS[vcname], so it can be retrieved later
267         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
268         strip out non-numeric timezone information, specifically the funky
269         German string that his system produced that confuses CVS.
270         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
271         allow Darcs tests to work on windows
272         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
273         procutils.which() everywhere, to allow tryclient to work under
274         windows. Also from Niklaus Giger, SF#1463394.
276         * buildbot/twcompat.py (which): move the replacement for a missing
277         twisted.python.procutils.which from test_vc.py to here, so it can
278         be used in other places too (specifically tryclient.py)
280 2006-04-23  Brian Warner  <warner@lothar.com>
282         * buildbot/status/html.py (StatusResourceBuild.body): replace the
283         bare buildbotURL/projectName line with a proper DIV, along with a
284         CSS class of "title", from Stefan Seefeld (SF#1461675).
285         (WaterfallStatusResource.body0): remove the redundant 'table'
286         class from the table
287         (WaterfallStatusResource.body): same. Also add class="LastBuild"
288         to the top-row TR, and class="Activity" to the second-row TR,
289         rather than putting them in the individual TD nodes.
291         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
292         'got_revision' build property for all VC systems that implement
293         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
295         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
296         to determine which revision we actually obtained
297         (CVS.parseGotRevision): implement this for CVS, which just means
298         to grab a timestamp. Not ideal, and it depends upon the buildslave
299         having a clock that is reasonably well syncronized with the server,
300         but it's better than nothing.
301         (SVN.parseGotRevision): implement it for SVN, which is accurate
302         (Darcs.parseGotRevision): same
303         (Arch.parseGotRevision): same
304         (Bazaar.parseGotRevision): same
305         (Mercurial.parseGotRevision): same
307         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
308         keep a record of all non-stdout/stderr/header/rc status updates,
309         for the benefit of RemoteCommands that send other useful things,
310         like got_revision
311         (Source.commandComplete): put any 'got_revision' status values
312         into a build property of the same name
315         * buildbot/process/step_twisted.py (Trial): update to deal with
316         new ShellCommand refactoring
318         * docs/buildbot.texinfo (Build Properties): document new feature
319         that allows BuildSteps to get/set Build-wide properties like which
320         revision was requested and/or checked out.
322         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
323         * buildbot/status/builder.py (BuildStatus.getProperty): implement
324         it. Note that this bumps the persistenceVersion of the saved Build
325         object, so add the necessary upgrade-old-version logic to include
326         an empty properties dict.
328         * buildbot/process/base.py (Build.setProperty): implement it
329         (Build.getProperty): same
330         (Build.startBuild): change build startup to set 'branch',
331         'revision', and 'slavename' properties at the right time
333         * buildbot/process/step.py (BuildStep.__init__): change setup to
334         require 'build' argument in a better way
335         (LoggingBuildStep): split ShellCommand into two pieces, for better
336         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
337         a single RemoteCommand that sends stdout/stderr status text. It
338         also provides the usual commandComplete / createSummary /
339         evaluateCommand / getText methods to be overridden...
340         (ShellCommand): .. whereas ShellCommand is specifically for
341         running RemoteShellCommands. Other shell-like BuildSteps (like
342         Source) can inherit from LoggingBuildStep instead of ShellCommand
343         (WithProperties): marker class to do build-property interpolation
344         (Source): inherit from LoggingBuildStep instead of ShellCommand
345         (RemoteDummy): same
347         * buildbot/test/test_properties.py: test new functionality
349 2006-04-21  Brian Warner  <warner@lothar.com>
351         * buildbot/test/test_vc.py: rename testBranch to
352         testCheckoutBranch to keep the tests in about the right
353         alphabetical order
355 2006-04-18  Brian Warner  <warner@lothar.com>
357         * docs/buildbot.texinfo (PBListener): improve cross-references
358         between PBListener and 'buildbot statusgui', thanks to John Pye
359         for the suggestion.
361 2006-04-17  Brian Warner  <warner@lothar.com>
363         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
364         running under Twisted-1.3.0, otherwise skipped tests are reported
365         as errors.
367         * all: use isinstance() instead of 'type(x) is foo', suggested by
368         Neal Norwitz
370         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
371         oops, fix a brain-fade from the other week, when making the
372         addStep changes. I changed all the __init__ upcalls to use the
373         wrong superclass name.
374         (FullTwistedBuildFactory.__init__): same
375         (TwistedDebsBuildFactory.__init__): same
376         (TwistedReactorsBuildFactory.__init__): same
377         (TwistedBuild.isFileImportant): use .startswith for clarity,
378         thanks to Neal Norwitz for the suggestions.
380         * contrib/viewcvspoll.py: script to poll a viewcvs database for
381         changes, then deliver them over PB to a remote buildmaster.
383         * contrib/svnpoller.py: added script by John Pye to poll a remote
384         SVN repository (by running 'svn log') from a cronjob, and run
385         'buildbot sendchange' to deliver the changes to a remote
386         buildmaster.
387         * contrib/svn_watcher.py: added script by Niklaus Giger (a
388         modification of svnpoller.py), same purpose, but this one loops
389         internally (rather than expecting to run from a cronjob) and works
390         under windows.
391         * contrib/README.txt: same
393 2006-04-11  Brian Warner  <warner@lothar.com>
395         * all: fix a number of incorrect names and missing imports, thanks
396         to Anthony Baxter for the patch.
397         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
398         remove unused buggy method.
399         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
400         comes from shutil, not "shutils"
401         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
402         (Arch.checkSlaveVersion): same
403         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
404         some disabled code
405         * buildbot/process/step_twisted2.py: add some missing imports
406         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
407         this code used to live in twisted.internet.defer
409 2006-04-10  Brian Warner  <warner@lothar.com>
411         * buildbot/process/step.py (Mercurial): add Mercurial support
412         * buildbot/slave/commands.py (Mercurial): same
413         * buildbot/scripts/tryclient.py (MercurialExtractor): same
414         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
415         not yet tested, but 'try' support *is* covered
416         * docs/buildbot.texinfo (Mercurial): document it
418         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
419         some debugging messages (turned off)
420         * buildbot/test/test_vc.py: improve debug messages
422 2006-04-07  Brian Warner  <warner@lothar.com>
424         * buildbot/test/test_vc.py (which): define our own which() in case
425         we can't import twisted.python.procutils, because procutils doesn't
426         exist in Twisted-1.3
428         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
429         of SlaveLocks for performance tests
431         * docs/examples/twisted_master.cfg: update to match current usage
433         * buildbot/changes/p4poller.py (P4Source): add new arguments:
434         password, p4 binary, pollinterval, maximum history to check.
435         Patch from an anonymous sf.net contributor, SF#1219384.
436         * buildbot/process/step.py (P4Sync.__init__): add username,
437         password, and client arguments.
438         * buildbot/slave/commands.py (P4Sync): same
440 2006-04-05  Brian Warner  <warner@lothar.com>
442         * buildbot/process/factory.py (BuildFactory.addStep): new method
443         to add steps to a BuildFactory. Use it instead of f.steps.append,
444         and you can probably avoid using the s() convenience function.
445         Patch from Neal Norwitz, sf.net #1412605.
446         (other): update all factories to use addStep
447         * buildbot/process/process_twisted.py: update all factories to use
448         addStep.
450 2006-04-03  Brian Warner  <warner@lothar.com>
452         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
453         work under windows too. Adapted from a patch by Niklaus Giger,
454         addresses SF#1463399.
456         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
457         spawned commands emit parseable results in english and not some
458         other language. Patch from Niklaus Giger, SF#1463395.
460         * README (INSTALLATION): discourage users from running unit tests on
461         a "network drive", patch from Niklaus Giger, SF#1463394.
463 2006-03-22  Brian Warner  <warner@lothar.com>
465         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
466         function to turn a repository-relative pathname into a (branch,
467         branch-relative-filename) tuple. Change this function to handle
468         the branch naming policy used by your Subversion repository.
469         Thanks to AllMyData.com for sponsoring this work.
471 2006-03-16  Brian Warner  <warner@lothar.com>
473         * buildbot/scripts/sample.cfg: add python-mode declaration for
474         vim. Thanks to John Pye for the patch.
476         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
477         command line, mention the importance of running 'crontab' as the
478         buildmaster/buildslave user. Thanks to John Pye for the catch.
480 2006-03-13  Brian Warner  <warner@lothar.com>
482         * buildbot/status/words.py (IRC): add an optional password=
483         argument, which will be sent to Nickserv in an IDENTIFY message at
484         login, to claim the nickname. freenode requires this before the
485         bot can sent (or reply to) private messages. Thanks to Clement
486         Stenac for the patch.
487         * docs/buildbot.texinfo (IRC Bot): document it
489         * buildbot/status/builder.py (LogFile.merge): don't write chunks
490         larger than chunkSize. Fixes SF#1349253.
491         * buildbot/test/test_status.py (Log.testLargeSummary): test it
492         (Log.testConsumer): update to match new internal chunking behavior
494 2006-03-12  Brian Warner  <warner@lothar.com>
496         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
498         * buildbot/test/test_maildir.py (MaildirTest): rename the
499         'timeout' method, as it collides with trial's internals
501         * buildbot/scripts/runner.py: add 'buildbot restart' command
502         (stop): don't sys.exit() out of here, otherwise restart can't work
503         * docs/buildbot.texinfo (Shutdown): document it
505         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
506         * buildbot/status/html.py (Waterfall.__init__): same
507         * buildbot/process/builder.py (Builder.startBuild): same
508         * buildbot/process/base.py (BuildRequest): same
509         * buildbot/sourcestamp.py (SourceStamp): same
510         * buildbot/scheduler.py (Nightly): same
512         * buildbot/__init__.py (version): bump to 0.7.2+ while between
513         releases
514         * docs/buildbot.texinfo: same
516 2006-02-17  Brian Warner  <warner@lothar.com>
518         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
519         * docs/buildbot.texinfo: set version number to match
520         * NEWS: update for 0.7.2
522 2006-02-16  Brian Warner  <warner@lothar.com>
524         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
526 2006-02-09  Brian Warner  <warner@lothar.com>
528         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
529         add text to explain per-build branch parameters
530         * NEWS: mention --umask
532 2006-02-08  Brian Warner  <warner@lothar.com>
534         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
535         method
536         (SlaveOptions.optParameters): add --umask, to make it possible to
537         make buildslave-generated files (including build products) be
538         world-readable
539         (slaveTAC): same
540         * buildbot/slave/bot.py (BuildSlave.startService): same
542 2006-01-23  Brian Warner  <warner@lothar.com>
544         * buildbot/status/builder.py: urllib.quote() all URLs that include
545         Builder names, so that builders can include characters like '/'
546         and ' ' without completely breaking the resulting HTML. Thanks to
547         Kevin Turner for the patch.
548         * buildbot/status/html.py: same
549         * buildbot/test/test_web.py (GetURL.testBuild): match changes
551         * NEWS: update in preparation for upcoming release
553 2006-01-18  Brian Warner  <warner@lothar.com>
555         * docs/examples/twisted_master.cfg: update to match the Twisted
556         buildbot: remove python2.2, switch to exarkun's buildslaves,
557         disable the .deb builder until we figure out how to build twisted
558         .debs from SVN, add some ktrace debugging to the OS-X build
559         process and remove the qt build, remove threadless builders,
560         change freebsd builder to use landonf's buildslave.
562 2006-01-12  Brian Warner  <warner@lothar.com>
564         * buildbot/master.py (Manhole.__init__): let port= be a strports
565         specification string, but handle a regular int for backwards
566         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
567         used in master.cfg to limit connections to just the local host.
568         (BuildMaster.loadConfig): same for c['slavePortnum']
569         * buildbot/scheduler.py (Try_Userpass.__init__): same
570         * buildbot/status/client.py (PBListener.__init__): same
571         * buildbot/status/html.py (Waterfall.__init__): same, for both
572         http_port and distrib_port. Include backwards-compatibility checks
573         so distrib_port can be a filename string and still mean unix:/foo
574         * docs/buildbot.texinfo (Setting the slaveport): document it
575         (Debug options): same
576         (HTML Waterfall): same
577         (PBListener): same
578         (try): same
579         * buildbot/test/test_config.py (ConfigTest): test it
581         * buildbot/master.py (BuildMaster.loadConfig): wait for the
582         slaveport's disownServiceParent deferred to fire before opening
583         the new one. Fixes an annoying bug in the unit tests.
585 2006-01-03  Brian Warner  <warner@lothar.com>
587         * buildbot/master.py (BuildMaster): remove the .schedulers
588         attribute, replacing it with an allSchedulers() method that looks
589         for all IService children that implement IScheduler. Having only
590         one parent/child relationship means fewer opportunities for bugs.
591         (BuildMaster.allSchedulers): new method
592         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
593         also fix ugly bug that caused any config-file reload to
594         half-forget about the earlier Schedulers, causing an exception
595         when a Change arrived and was handed to a half-connected
596         Scheduler. The exception was in scheduler.py line 54ish:
597           self.parent.submitBuildSet(bs)
598           exceptions.AttributeError: 'NoneType' object has no attribute
599           'submitBuildSet'
600         (BuildMaster.addChange): update to use allSchedulers()
602         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
603         to work properly with twisted-1.3.0, where you must explicitly
604         include the __implements__ from parent classes
605         (BaseScheduler.__repr__): make it easier to distinguish distinct
606         instances
607         (BaseUpstreamScheduler.__implements__): same
609         * buildbot/status/builder.py (Status.getSchedulers): update to
610         use allSchedulers()
611         * buildbot/test/test_run.py (Run.testMaster): same
612         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
613         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
614         make sure Scheduler instances are left alone when an identical
615         config file is reloaded
616         (ConfigElements.testSchedulers): make sure Schedulers are properly
617         comparable
619         * Makefile (TRIALARGS): my local default Twisted version is now
620         2.1.0, update the trial arguments accordingly
622 2005-12-22  Brian Warner  <warner@lothar.com>
624         * docs/examples/twisted_master.cfg: merge changes from pyr: add
625         new win32 builders
627         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
628         addChange in the parent class, although I suspect this should be
629         fixed better in the future.
631 2005-11-26  Brian Warner  <warner@lothar.com>
633         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
634         explode when branch==None, thanks to Kevin Turner for the catch
635         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
636         it
638         * buildbot/__init__.py (version): bump to 0.7.1+ while between
639         releases
640         * docs/buildbot.texinfo: same
642 2005-11-26  Brian Warner  <warner@lothar.com>
644         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
645         * docs/buildbot.texinfo: set version number to match
647 2005-11-26  Brian Warner  <warner@lothar.com>
649         * NEWS: update for 0.7.1
651         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
652         sure that unsubscribe works even if we never sent an ETA update.
653         Also, don't explode on duplicate unsubscribe.
654         (BuildStepStatus.addLog): make the convenience "return self"-added
655         watcher automatically unsubscribe when the Step finishes.
656         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
657         (BuildStatus.stepStarted): same auto-unsubscribe
658         (BuilderStatus.buildStarted): same auto-unsubscribe
660         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
661         auto-unsubscribe
662         (IStatusReceiver.stepStarted): same
663         (IStatusReceiver.logStarted): same
665         * buildbot/test/test_run.py (Status): move the Status test..
666         * buildbot/test/test_status.py (Subscription): .. to here
668 2005-11-25  Brian Warner  <warner@lothar.com>
670         * NEWS: more updates
672         * buildbot/locks.py: fix the problem in which loading a master.cfg
673         file that changes some Builders (but not all of them) can result
674         in having multiple copies of the same Lock. Now, the real Locks
675         are kept in a table inside the BotMaster, and the Builders/Steps
676         use "LockIDs", which are still instances of MasterLock and
677         SlaveLock. The real Locks are instances of the new RealMasterLock
678         and RealSlaveLock classes.
679         * buildbot/master.py (BotMaster.getLockByID): new method to
680         convert LockIDs into real Locks.
681         * buildbot/process/base.py (Build.startBuild): convert LockIDs
682         into real Locks before building
683         * buildbot/process/step.py (BuildStep.startStep): same
684         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
685         exercises the problem
688         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
689         what Schedulers are available
691         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
692         work by Dobes Vandermeer and hacked mercilessly by me. This offers
693         'cron'-style build scheduling at certain times of day, week,
694         month, or year.
695         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
697         * buildbot/scheduler.py (Scheduler): change fileIsImportant
698         handling: treat self.fileIsImportant more as an attribute that
699         contains a callable than as a method. If the attribute is None,
700         don't call it and assume all filenames are important. It is still
701         possible to provide a fileIsImportant method in a subclass,
702         however.
703         (AnyBranchScheduler): handle fileIsImportant=None, previously it
704         was broken
705         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
706         test using AnyBranchScheduler with fileIsImportant=None
708 2005-11-24  Brian Warner  <warner@lothar.com>
710         * buildbot/test/test_config.py (StartService): don't claim a fixed
711         port number, instead set slavePort=0 on the first pass, figure out
712         what port was allocated, then switch to a config file that uses
713         the allocated port.
715         * buildbot/master.py (BuildMaster.loadConfig): close the old
716         slaveport before opening the new one, because unit tests might
717         replace slavePort=0 with the same allocated portnumber, and if we
718         don't wait for the old port to close first, we get a "port already
719         in use" error. There is a tiny race condition here, but the only
720         threat is from other programs that bind (statically) to the same
721         port number we happened to be allocated, and only if those
722         programs use SO_REUSEADDR, and only if they get control in between
723         reactor turns.
725         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
727         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
728         deleted ChangeSources before adding any new ones
729         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
730         compare_attrs, to make sure that a config-file reload does not
731         unnecessarily replace an unmodified ChangeSource instance
732         * buildbot/test/test_config.py (ConfigTest.testSources): update
734         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
735         mean "don't build anything", and add a warning if it gets used
736         because it isn't actually useful.
738         * contrib/svn_buildbot.py: update example usage to match the port
739         number that gets used by the PBChangeSource
740         * buildbot/scripts/sample.cfg: add example of PBChangeSource
742 2005-11-22  Brian Warner  <warner@lothar.com>
744         * NEWS: start collecting items for next release
746         * buildbot/process/step.py (SVN.computeSourceRevision): assume
747         revisions are strings
748         (P4Sync.computeSourceRevision): same
750         * buildbot/status/html.py (StatusResourceBuild.body): add a link
751         to the Buildbot's overall status page
752         (StatusResourceBuilder.body): same
754 2005-11-15  Brian Warner  <warner@lothar.com>
756         * buildbot/master.py (BuildMaster.loadConfig): serialize the
757         config-file loading, specifically to make sure old StatusTargets
758         are finished shutting down before new ones start up (thus
759         resolving a bug in which changing the Waterfall object would fail
760         because both new and old instances were claiming the same
761         listening port). Also load new Schedulers after all the new
762         Builders are set up, in case they fire off a new build right away.
763         * buildbot/test/test_config.py (StartService): test it
765         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
766         the branch name to the mail body
768         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
769         Without it, a config-file reload fails to update an existing
770         PBChangeSource.
771         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
772         username/passwd to compare_attrs, for the same reason
773         * buildbot/status/html.py (Waterfall): add favicon to
774         compare_attrs, same reason
776 2005-11-05  Brian Warner  <warner@lothar.com>
778         * buildbot/scripts/tryclient.py (createJobfile): stringify the
779         baserev before stuffing it in the jobfile. This resolves problems
780         under SVN (and probably Arch) where revisions are expressed as
781         numbers. I'm inclined to use string-based revisions everywhere in
782         the future, but this fix should be safe for now. Thanks to Steven
783         Walter for the patch.
785         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
786         binary mode when opening pickle files, to make windows work
787         better. Thanks to Dobes Vandermeer for the catch.
788         * buildbot/status/builder.py (BuildStatus.saveYourself): same
789         (BuilderStatus.getBuildByNumber): same
790         (Status.builderAdded): same
791         * buildbot/master.py (BuildMaster.loadChanges): same
793         * buildbot/util.py (Swappable): delete unused leftover code
795         * buildbot/process/step.py (SVN): when building on a non-default
796         branch, add the word "[branch]" to the VC step's description, so
797         it is obvious that we're not building the usual stuff. Likewise,
798         when we are building a specific revision, add the text "rNNN" to
799         indicate what that revision number is. Thanks to Brad Hards and
800         Nathaniel Smith for the suggestion.
801         (Darcs.startVC): same
802         (Arch.startVC): same
803         (Bazaar.startVC): same
805         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
806         typo, caught by Mark Dillavou, closes SF#1216636.
808         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
809         about a test to add some day
811         * docs/examples/twisted_master.cfg: update: bot1 can now handle
812         the 'full-2.3' build, and the 'reactors' build is now run under
813         python-2.4 because the buildslave no longer has gtk/etc bindings
814         for earlier versions.
816 2005-11-03  Brian Warner  <warner@lothar.com>
818         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
819         method, takes an IBuildStatus and rebuilds it. It might make more
820         sense to add this to IBuildControl instead, but that instance goes
821         away completely once the build has finished, and resubmitting
822         builds can take place weeks later.
823         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
824         * buildbot/status/html.py (StatusResourceBuild): also stash an
825         IBuilderControl so we can use resubmitBuild.
826         (StatusResourceBuild.body): render "resubmit" button if we can.
827         Also add hrefs for each BuildStep
828         (StatusResourceBuild.rebuild): add action for "resubmit" button
829         (StatusResourceBuilder.getChild): give it an IBuilderControl
831         * buildbot/status/builder.py (Status.getURLForThing): change the
832         URL for BuildSteps to have a "step-" prefix, so the magic URLs
833         that live as targets of buttons like "stop" and "rebuild" can't
834         collide with them.
835         * buildbot/status/builder.py (Status.getURLForThing): same
836         * buildbot/status/html.py (StatusResourceBuild.getChild): same
837         (StepBox.getBox): same
838         * buildbot/test/test_web.py (GetURL): same
839         (Logfile): same
841         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
842         exclusivity checks after Source.__init__ upcall, so misspelled
843         arguments will be reported more usefully
844         (Darcs.__init__): same
846 2005-10-29  Brian Warner  <warner@lothar.com>
848         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
849         builder. Move the Try scheduler off to a separate port.
851 2005-10-27  Brian Warner  <warner@lothar.com>
853         * buildbot/clients/gtkPanes.py
854         (TwoRowClient.remote_builderRemoved): disappearing Builders used
855         to cause the app to crash, now they don't.
857         * buildbot/clients/debug.py: display the buildmaster's location
858         in the window's title bar
860 2005-10-26  Brian Warner  <warner@lothar.com>
862         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
863         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
864         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
866         * buildbot/status/html.py (td): put a single non-breaking space
867         inside otherwise empty <td> elements, as a workaround for buggy
868         browsers which would optimize them away (along with any associated
869         styles, like the kind that create the waterfall grid borders).
870         Patch from Frerich Raabe.
872         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
873         argv-list as an argument, defaulting to ["-to"], which is
874         appropriate for the Trial that comes with Twisted-2.1.0 and
875         earlier. The Trial in current Twisted SVN wants
876         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
877         defaults to an empty list.
878         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
879         match it, now that trialMode= is a list instead of a single string
881         * buildbot/__init__.py (version): bump to 0.7.0+ while between
882         releases
883         * docs/buildbot.texinfo: same
885 2005-10-24  Brian Warner  <warner@lothar.com>
887         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
888         * docs/buildbot.texinfo: set version number to match
890 2005-10-24  Brian Warner  <warner@lothar.com>
892         * README: update for 0.7.0
893         * NEWS: same
894         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
896         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
897         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
898         send the branch= argument unless the user really provided one, to
899         retain compatibility with older buildmasters that don't accept
900         that argument.
901         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
902         same
904         * docs/buildbot.texinfo: update lots of stuff
906         * buildbot/scripts/runner.py (sendchange): add a --branch argument
907         to the 'buildbot sendchange' command
908         * buildbot/clients/sendchange.py (Sender.send): same
909         * buildbot/changes/pb.py (ChangePerspective): same
910         * buildbot/test/test_changes.py (Sender.testSender): test it
912         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
913         'default_branch' argument names to 'baseURL' and 'defaultBranch',
914         for consistency with other BuildStep arguments that use camelCase.
915         Well, at least more of them use camelCase (like flunkOnWarnings)
916         than don't.. I wish I'd picked one style and stuck with it
917         earlier. Annoying, but it's best done before the release, since
918         these arguments didn't exist at all in 0.6.6 .
919         (Darcs): same
920         * buildbot/test/test_vc.py (SVN.testCheckout): same
921         (Darcs.testPatch): same
922         * docs/buildbot.texinfo (SVN): document the change
923         (Darcs): same, add some build-on-branch docs
924         * docs/examples/twisted_master.cfg: match change
926         * buildbot/process/step.py (BuildStep): rename
927         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
928         how it is normally used.
929         * buildbot/test/test_steps.py (Version.checkCompare): same
931         * buildbot/process/step.py (CVS.startVC): refuse to build
932         update/copy -style builds on a non-default branch with an old
933         buildslave (<=0.6.6) that doesn't know how to do it properly. The
934         concern is that it will do a VC 'update' in an existing tree when
935         it is supposed to be switching branches (and therefore clobbering
936         the tree to do a full checkout), thus building the wrong source.
937         This used to be a warning, but I think the confusion it is likely
938         to cause warrants making it an error.
939         (SVN.startVC): same, also make mode=export on old slaves an error
940         (Darcs.startVC): same
941         (Git.startVC): improve error message for non-Git-enabled slaves
942         (Arch.checkSlaveVersion): same. continue to emit a warning when a
943         specific revision is built on a slave that doesn't pay attention
944         to args['revision'], because for slowly-changing trees it will
945         probably do the right thing, and because we have no way to tell
946         whether we're asking it to build the most recent version or not.
947         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
949         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
950         that 'master' is in host:portnum format, to catch errors sooner
952 2005-10-23  Brian Warner  <warner@lothar.com>
954         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
955         when creating the list of warning messages, include the line
956         immediately after each WARNING: line, since that's usually where
957         the file and line number wind up.
959         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
960         TryScheduler
962         * NEWS: update
964 2005-10-22  Brian Warner  <warner@lothar.com>
966         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
967         patch from Brad Hards
968         * buildbot/status/classic.css: same
969         * buildbot/test/test_web.py (Waterfall): match changes
971         * buildbot/test/test_steps.py (BuildStep.setUp): set
972         nextBuildNumber so the test passes
973         * buildbot/test/test_status.py (MyBuilder): same
975         * buildbot/status/html.py (StatusResourceBuild.body): revision
976         might be numeric, so stringify it before html-escapifying it
977         (CurrentBox.getBox): add a "waiting" state, and show a countdown
978         timer for the upcoming build
979         * buildbot/status/classic.css: add background-color attributes for
980         offline/waiting/building classes
982         * buildbot/status/builder.py (BuildStatus): derive from
983         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
984         the default (i.e. unknown) .slavename to "???" instead of None,
985         since even unknown slavenames need to be printed eventually.
986         (BuilderStatus): also derive from styles.Versioned . More
987         importantly, determine .nextBuildNumber at creation/unpickling
988         time by scanning the directory of saved BuildStatus instances and
989         choosing one larger than the highest-numbered one found. This
990         should fix the problem where random errors during upgrades cause
991         the buildbot to forget about earlier builds. .nextBuildNumber is
992         no longer stored in the pickle.
993         (Status.builderAdded): if we can't unpickle the BuilderStatus,
994         at least log the error. Also call Builder.determineNextBuildNumber
995         once the basedir is set.
997         * buildbot/master.py (BuildMaster.loadChanges): do
998         styles.doUpgrade afterwards, in case I decide to make Changes
999         derived from styles.Versioned some day and forget to make this
1000         change later.
1003         * buildbot/test/test_runner.py (Options.testForceOptions): skip
1004         when running under older pythons (<2.3) in which the shlex module
1005         doesn't have a 'split' function.
1007         * buildbot/process/step.py (ShellCommand.start): make
1008         errorMessages= be a list of strings to stuff in the log before the
1009         command actually starts. This makes it easier to flag multiple
1010         warning messages, e.g. when the Source steps have to deal with an
1011         old buildslave.
1012         (CVS.startVC): handle slaves that don't handle multiple branches
1013         by switching into 'clobber' mode
1014         (SVN.startVC): same. Also reject branches without base_url
1015         (Darcs.startVC): same. Also reject revision= in older slaves
1016         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1017         (Bazaar.startVC): same, and test for baz separately than for arch
1019         * buildbot/slave/commands.py (cvs_ver): document new features
1021         * buildbot/process/step.py (BuildStep.slaveVersion): document it
1022         (BuildStep.slaveVersionNewEnough): more useful utility method
1023         * buildbot/test/test_steps.py (Version): start testing it
1025         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1026         the 'force' command requires python2.3, for the shlex.split method
1028         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1029         since we don't use it anymore. The Twisted buildbot uses a
1030         PBChangeSource now.
1032 2005-10-21  Brian Warner  <warner@lothar.com>
1034         * buildbot/process/process_twisted.py: rework all BuildFactory
1035         classes to take a 'source' step as an argument, instead of
1036         building up the SVN instance in the factory.
1037         * docs/examples/twisted_master.cfg: enable build-on-branch by
1038         providing a base_url and default_branch
1040         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1041         control over --branch and --revision, not that they are always
1042         legal to provide
1043         * buildbot/status/html.py (StatusResourceBuilder.force): same
1044         (StatusResourceBuild.body): display SourceStamp components
1046         * buildbot/scripts/runner.py (ForceOptions): option parser for the
1047         IRC 'force' command, so it can be shared with an eventual
1048         command-line-tool 'buildbot force' mode.
1049         * buildbot/test/test_runner.py (Options.testForceOptions): test it
1051 2005-10-20  Brian Warner  <warner@lothar.com>
1053         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1055         * docs/examples/twisted_master.cfg: update to use Schedulers
1057         * buildbot/scripts/sample.cfg: update with Schedulers
1059         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1060         method specifically for use by HTML "force build" button and the
1061         IRC "force" command. Raises an immediate error if there are no
1062         slaves available.
1063         (IBuilderControl.requestBuild): make this just submit a build, not
1064         try to check for existing slaves or set up any when-finished
1065         Deferreds or anything.
1066         * buildbot/process/builder.py (BuilderControl): same
1067         * buildbot/status/html.py (StatusResourceBuilder.force): same
1068         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1069         * buildbot/test/test_slaves.py: same
1070         * buildbot/test/test_web.py: same
1072 2005-10-19  Brian Warner  <warner@lothar.com>
1074         * docs/examples/twisted_master.cfg: re-sync with reality: bring
1075         back python2.2 tests, turn off OS-X threadedselect-reactor tests
1077 2005-10-18  Brian Warner  <warner@lothar.com>
1079         * buildbot/status/html.py: provide 'status' argument to most
1080         StatusResourceFOO objects
1081         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1082         and Logfiles" section to make the Build page into a more-or-less
1083         comprehensive source of status information about the build
1085         * buildbot/status/mail.py (MailNotifier): include the Build's URL
1086         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1088 2005-10-17  Brian Warner  <warner@lothar.com>
1090         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1091         arguments to accomodate Twisted >=2.1.0 . I will have to figure
1092         out what to do about other projects: the correct options for
1093         recent Twisteds will not work for older ones.
1095 2005-10-15  Brian Warner  <warner@lothar.com>
1097         * buildbot/status/builder.py (Status.getURLForThing): add method
1098         to provide a URL for arbitrary IStatusFoo objects. The idea is to
1099         use this in email/IRC status clients to make them more useful, by
1100         providing the end user with hints on where to learn more about the
1101         object being reported on.
1102         * buildbot/test/test_web.py (GetURL): tests for it
1104 2005-10-14  Brian Warner  <warner@lothar.com>
1106         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1107         fix bug resulting from deferredResult changes
1109 2005-10-13  Brian Warner  <warner@lothar.com>
1111         * buildbot/test/test_changes.py: remove use of deferredResult
1112         * buildbot/test/test_config.py: same
1113         * buildbot/test/test_control.py: same
1114         * buildbot/test/test_status.py: same
1115         * buildbot/test/test_vc.py: this is the only remaining use, since
1116         it gets used at module level. This needs to be replaced by some
1117         sort of class-level run-once routine.
1119         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1121         * lots: implement multiple slaves per Builder, which means multiple
1122         current builds per Builder. Some highlights:
1123         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1124         of (state,currentBuilds) instead of (state,currentBuild)
1125         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1126         (IBuildStatus.getSlavename): new method, so you can tell which
1127         slave got used. This only gets set when the build completes.
1128         (IBuildRequestStatus.getBuilds): new method
1130         * buildbot/process/builder.py (SlaveBuilder): add a .state
1131         attribute to track things like ATTACHING and IDLE and BUILDING,
1132         instead of..
1133         (Builder): .. the .slaves attribute here, which has been turned
1134         into a simple list of available slaves. Added a separate
1135         attaching_slaves list to track ones that are not yet ready for
1136         builds.
1137         (Builder.fireTestEvent): put off the test-event callback for a
1138         reactor turn, to make tests a bit more consistent.
1139         (Ping): cleaned up the slaveping a bit, now it disconnects if the
1140         ping fails due to an exception. This needs work, I'm worried that
1141         a code error could lead to a constantly re-connecting slave.
1142         Especially since I'm trying to move to a distinct remote_ping
1143         method, separate from the remote_print that we currently use.
1144         (BuilderControl.requestBuild): return a convenience Deferred that
1145         provides an IBuildStatus when the build finishes.
1146         (BuilderControl.ping): ping all connected slaves, only return True
1147         if they all respond.
1149         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1150         reconnect when we shut down.
1152         * buildbot/status/builder.py: implement new methods, convert
1153         one-build-at-a-time methods to handle multiple builds
1154         * buildbot/status/*.py: do the same in all default status targets
1155         * buildbot/status/html.py: report the build's slavename in the
1156         per-Build page, report all buildslaves on the per-Builder page
1158         * buildbot/test/test_run.py: update/create tests
1159         * buildbot/test/test_slaves.py: same
1160         * buildbot/test/test_scheduler.py: remove stale test
1162         * docs/buildbot.texinfo: document the new builder-specification
1163         'slavenames' parameter
1165 2005-10-12  Brian Warner  <warner@lothar.com>
1167         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1168         report failure correctly, causing Dependent builds to run when
1169         they shouldn't have.
1170         * buildbot/status/builder.py (BuildSetStatus): same
1171         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1172         (Set.testSuccess): test the both-pass case too
1173         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1174         fix this test: it was ending too early, masking the failure before
1175         (Logger): specialized StatusReceiver to make sure the dependent
1176         builds aren't even started, much less completed.
1178 2005-10-07  Brian Warner  <warner@lothar.com>
1180         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1181         bot.SlaveBuilder being disowned in the middle of a build
1183         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1184         this inherit from StatusReceiver. Also upcall in __init__. This
1185         fixes the embarrasing crash when the new buildSetSubmitted method
1186         is invoked and Waterfall/etc don't implement their own.
1187         * buildbot/test/test_run.py: add a TODO note about a test to catch
1188         just this sort of thing.
1190         * buildbot/process/builder.py (Builder.attached): remove the
1191         already-attached warning, this situation is normal. Add some
1192         comments explaining it.
1194 2005-10-02  Brian Warner  <warner@lothar.com>
1196         * buildbot/changes/maildir.py (Maildir.start): Tolerate
1197         OverflowError when setting up dnotify, because some 64-bit systems
1198         have problems with signed-vs-unsigned constants and trip up on the
1199         DN_MULTISHOT flag. Patch from Brad Hards.
1201 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
1203         * buildbot/process/step.py (BuildStep, ShellCommand): Add
1204         progressMetrics, description, descriptionDone to the 'parms' list,
1205         and make use the 'parms' list from the implementation class
1206         instead of only BuildStep to initialize the parameters.  This
1207         allows buildbot.process.factory.s() to initialize all the parms,
1208         not just those defined in directly by BuildStep.
1210 2005-09-03  Brian Warner  <warner@lothar.com>
1212         * NEWS: start adding items for the next release
1214         * docs/examples/twisted_master.cfg: (sync with reality) turn off
1215         python2.2 tests, change 'Quick' builder to only use python2.3
1217 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
1219         * buildbot/status/html.py (StatusResourceBuilder.body): only show
1220         the "Ping Builder" button if the build control is available; the
1221         user sees an exception otherwise
1223         * docs/buildbot.texinfo (PBChangeSource): fix a typo
1225 2005-09-01  Brian Warner  <warner@lothar.com>
1227         * buildbot/interfaces.py (IBuilderStatus.getState): update
1228         signature, point out that 'build' can be None
1229         (IBuildStatus.getETA): point out ETA can be none
1231         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1232         being None
1233         * buildbot/status/words.py (IrcStatusBot.emit_status): same
1235 2005-08-31  Brian Warner  <warner@lothar.com>
1237         * buildbot/status/base.py (StatusReceiver.builderChangedState):
1238         update to match correct signature: removed 'eta' argument
1239         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1241 2005-08-30  Brian Warner  <warner@lothar.com>
1243         * buildbot/status/builder.py (LogFile): remove the assertion that
1244         blows up when you try to overwrite an existing logfile, instead
1245         just emit a warning. This case gets hit when the buildmaster is
1246         killed and doesn't get a chance to write out the serialized
1247         BuilderStatus object, so the .nextBuildNumber attribute gets out
1248         of date.
1250         * buildbot/scripts/runner.py (sendchange): add --revision_file to
1251         the 'buildbot sendchange' arguments, for the Darcs context file
1252         * docs/buildbot.texinfo (sendchange): document it
1254         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1255         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1256         (IStatus.getSchedulers): new method
1257         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1258         (Status.getSchedulers): implement
1259         * buildbot/process/builder.py (Builder): maintain
1260         BuilderStatus.pendingBuilds
1261         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1262         (TryBase.addChange): Try schedulers should ignore Changes
1264         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1265         for 'try' on CVS/SVN
1266         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1268         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1269         report status properly.
1270         (Try.createJob): implement unique buildset IDs
1272         * buildbot/status/client.py (StatusClientPerspective): add a
1273         perspective_getBuildSets method for the benefit of jobdir-style
1274         'try'.
1275         * docs/buildbot.texinfo (try): more docs
1276         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1277         new test case
1279 2005-08-18  Brian Warner  <warner@lothar.com>
1281         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1282         actually work. It's functional but still kind of clunky. Also, it
1283         only works with the pb-style.. needs to be made to work with the
1284         jobdir-style too.
1286         * buildbot/status/client.py (RemoteBuildSet): new class
1287         (RemoteBuildRequest): same
1288         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1289         object, not the internal BuildStatus object.
1290         (RemoteBuild.remote_subscribe): new method to subscribe to builds
1291         outside of the usual buildStarted() return value.
1292         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1294         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1295         (Try_Userpass_Perspective.perspective_try): return a remotely
1296         usable BuildSetStatus object
1298         * buildbot/interfaces.py (IBuildStatus): remove obsolete
1299         isStarted()/waitUntilStarted()
1301 2005-08-16  Brian Warner  <warner@lothar.com>
1303         * buildbot/status/builder.py: implement IBuildSetStatus and
1304         IBuildRequestStatus, wire them into place.
1305         * buildbot/buildset.py: same. Add ID, move wait-until-finished
1306         methods into the BuildSetStatus object.
1307         * buildbot/interfaces.py: same
1308         (IStatus.getBuildSets): new method to get pending BuildSets
1309         (IStatusReceiver.buildsetSubmitted): new method which hears about
1310         new BuildSets
1311         * buildbot/master.py (BuildMaster.submitBuildSet): same
1312         * buildbot/process/base.py (BuildRequest): same, replace
1313         waitUntilStarted with subscribe/unsubscribe
1314         * buildbot/process/builder.py (BuilderControl.forceBuild): use
1315         subscribe instead of waitUntilStarted
1316         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1317         for new method
1318         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1319         same
1320         * buildbot/test/test_buildreq.py: update for new code
1321         * buildbot/test/test_control.py (Force.testRequest): same
1324         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1325         for Darcs to not use the tempfile module, so it works under
1326         python-2.2 too. We really didn't need the full cleverness of that
1327         module, since the slave has exclusive control of its own builddir.
1329 2005-08-15  Brian Warner  <warner@lothar.com>
1331         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1332         for CVS trees. It doesn't work for non-trunk branches,
1333         unfortunately.
1334         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1335         branch test
1337         * Makefile: make it easier to test against python2.2
1339         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1340         tearDown2, so things like Arch can unregister archives as they're
1341         shutting down. The previous subclass-override-tearDown technique
1342         resulted in a nested maybeWait() and test failures under
1343         Twisted-1.3.0
1345         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1346         where we can (Arch), add a branch= argument to set the branch used
1347         when we can't
1348         (BazExtractor): extract the branch too
1349         (TlaExtractor): same
1350         * buildbot/scripts/runner.py (TryOptions): add --branch
1351         * docs/buildbot.texinfo (try): document --branch/try_branch
1353         * buildbot/slave/commands.py (Darcs): implement get-revision for
1354         Darcs, so that 'try' will work. This requires the tempfile module
1355         from python-2.3 .
1357         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1358         of revisions, branches, and 'try' in the process.
1360 2005-08-11  Brian Warner  <warner@lothar.com>
1362         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1363         this, it got broken at some point in the last few releases
1364         * buildbot/status/words.py (IrcBuildRequest): reply was broken
1365         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1366         specifically the removal of ETA information from the tuple
1368         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1369         warning message
1371         * docs/buildbot.texinfo (try): document both --builder and
1372         'try_builders' in .buildbot/options
1373         * buildbot/scripts/runner.py (TryOptions): add --builder,
1374         accumulate the values into opts['builders']
1375         * buildbot/scripts/tryclient.py (Try.__init__): set builders
1376         * buildbot/test/test_runner.py (Try): add some quick tests to make
1377         sure 'buildbot try --options' and .buildbot/options get parsed
1378         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1379         use --builder control
1381         * docs/buildbot.texinfo (try): add --port argument to PB style
1383         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1384         actual SourceStamp. Still need to extract a branch name, somehow.
1385         (Try): finish implementing the try client side, still need a UI
1386         for specifying which builders to use
1387         (Try.getopt): factor our options/config-file reading
1388         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1389         test it
1390         * buildbot/test/test_vc.py: match SourceStampExtractor change
1392         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1393         causes the twisted log to be sent to stderr
1395         * buildbot/scheduler.py (Try_Userpass): implement the PB style
1397 2005-08-10  Brian Warner  <warner@lothar.com>
1399         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1400         style is 90% done, still missing status reporting or waiting for
1401         the buildsets to finish, and it is completely untested.
1403         * buildbot/trybuild.py: delete file, move contents to ..
1404         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1405         * buildbot/test/test_vc.py: match the move
1407         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1408         of the TryScheduler, no buildsetID or status-tracking support yet
1409         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1411         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1412         possible to set the basedir after __init__ time, so it is easier
1413         to use as a Service-child of the BuildMaster instance
1415         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1416         that delivers messages to its Service parent instead of requiring
1417         a subclass to be useful. This turns out to be much easier to build
1418         unit tests around.
1420         * buildbot/scripts/tryclient.py (createJob): utility code to
1421         create jobfiles, will eventually be used by 'buildbot try'
1423 2005-08-08  Brian Warner  <warner@lothar.com>
1425         * docs/buildbot.texinfo (try): add docs on the
1426         as-yet-unimplemented Try scheduler
1428         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1429         * buildbot/test/test_scheduler.py: .. here
1430         (Scheduling.testTryJobdir): add placeholder test for 'try'
1432         * buildbot/test/test_status.py (Log.testMerge3): update to match new
1433         addEntry merging (>=chunkSize) behavior
1434         (Log.testConsumer): update to handle new callLater(0) behavior
1436         * buildbot/test/test_web.py: rearrange tests a bit, add test for
1437         both the MAX_LENGTH bugfix and the resumeProducing hang.
1439         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1440         put off the actual resumeProducing for a moment with
1441         reactor.callLater(0). This works around a twisted-1.3.0 bug which
1442         causes large logfiles to hang midway through.
1444         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1445         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1446         and to improve memory usage when streaming the file out to a web
1447         browser.
1448         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1449         make this work cleanly
1451 2005-08-03  Brian Warner  <warner@lothar.com>
1453         * buildbot/trybuild.py: new file for 'try' utilities
1454         (getSourceStamp): run in a tree, find out the baserev+patch
1455         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1456         implemented for SVN and Darcs, still working on Arch. I don't know
1457         how to make CVS work yet.
1459         * docs/buildbot.texinfo: document the 'buildbot' command-line
1460         tool, including the not-yet-implemented 'try' feature, and the
1461         in-flux .buildbot/ options directory.
1463 2005-07-20  Brian Warner  <warner@lothar.com>
1465         * buildbot/locks.py: added temporary id() numbers to Lock
1466         descriptions, to track down a not-really-sharing-the-Lock bug
1468         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1470         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1471         needed for python2.2 compatibility
1472         * buildbot/test/test_vc.py: python2.2 compatibility: generators
1473         are from the __future__
1475 2005-07-19  Brian Warner  <warner@lothar.com>
1477         * buildbot/master.py (BuildMaster.loadConfig): give a better error
1478         message when schedulers use unknown builders
1480         * buildbot/process/builder.py (Builder.compareToSetup): make sure
1481         SlaveLock('name') and MasterLock('name') are distinct
1483         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1484         c['schedulers'] in such a way that we can actually accept
1485         Dependent instances
1486         * buildbot/test/test_config.py: check it
1488         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1489         utility method to *all* the Schedulers
1490         (Periodic.listBuilderNames): same
1492         * docs/buildbot.texinfo (Interlocks): update chapter to match
1493         reality
1495         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1496         to make sure that c['sources'], c['schedulers'], and c['status']
1497         are all lists of the appropriate objects, and that the Schedulers
1498         all point to real Builders
1499         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1500         'listBuilderNames' utility method to support this
1501         * buildbot/scheduler.py: implement the utility method
1502         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1504         * docs/buildbot.texinfo: add some @cindex entries
1506         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1507         if it wasn't already set: most tla commands will fail unless one
1508         has been set.
1509         (Arch.createRepository): and disable bazaar's revision cache, since
1510         they cause test failures (the multiple repositories we create all
1511         interfere with each other through the cache)
1513         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1514         bring it properly up to date with twisted-2.0 test guidelines
1516         * buildbot/master.py (BuildMaster): remove references to old
1517         'interlock' module, this caused a bunch of post-merge test
1518         failures
1519         * buildbot/test/test_config.py: same
1520         * buildbot/process/base.py (Build): same
1522         * buildbot/test/test_slaves.py: stubs for new test case
1524         * buildbot/scheduler.py: add test-case-name tag
1525         * buildbot/test/test_buildreq.py: same
1527         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1528         unnecessary init code
1529         (Bot.remote_setBuilderList): match it
1531         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1533         * buildbot/changes/mail.py (parseSyncmail): update comment
1535         * buildbot/test/test_slavecommand.py: disable Shell tests on
1536         platforms that don't suport IReactorProcess
1538         * buildbot/status/builder.py (LogFile): remove the 't' mode from
1539         all places where we open logfiles. It causes OS-X to open the file
1540         in some weird mode that that prevents us from mixing reads and
1541         writes to the same filehandle, which we depend upon to implement
1542         _generateChunks properly. This change doesn't appear to break
1543         win32, on which "b" and "t" are treated differently but a missing
1544         flag seems to be interpreted as "t".
1546 2005-07-18  Brian Warner  <warner@lothar.com>
1548         * buildbot/slave/commands.py (ShellCommand): overhaul
1549         error-handling code, to try and make timeout/interrupt work
1550         properly, and make win32 happier
1551         * buildbot/test/test_slavecommand.py: clean up, stop using
1552         reactor.iterate, add tests for timeout and interrupt
1553         * buildbot/test/sleep.py: utility for a new timeout test
1555         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1556         code from the local-usebranches branch
1558 2005-07-17  Brian Warner  <warner@lothar.com>
1560         * buildbot/process/process_twisted.py
1561         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1562         minutes, to match the other twisted BuildFactories, and don't
1563         excuse failures in c/qt/win32 reactors any more.
1565         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1566         'freebsd' builders, since the buildslaves have been unavailable
1567         for quite a while
1569 2005-07-13  Brian Warner  <warner@lothar.com>
1571         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1572         build-on-branch feature
1574         * buildbot/process/step.py (Darcs.__init__): add base_url and
1575         default_branch arguments, just like SVN
1576         (Arch.__init__): note that the version= argument is really the
1577         default branch name
1579         * buildbot/slave/commands.py (SourceBase): keep track of the
1580         repository+branch that was used for the last checkout in
1581         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1582         match, we clobber the directory and perform a fresh checkout
1583         rather than trying to do an in-place update. This should protect
1584         us against trying to get to branch B by doing an update in a tree
1585         obtained from branch A.
1586         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1587         (SVN.setup): same, just the svnurl
1588         (Darcs.setup): same, just the repourl
1589         (Arch.setup): same, arch coordinates (url), version, and
1590         buildconfig. Also pull the buildconfig from the args dictionary,
1591         which we weren't doing before, so the build-config was effectively
1592         disabled.
1593         (Arch.sourcedirIsUpdateable): don't try to update when we're
1594         moving to a specific revision: arch can't go backwards, so it is
1595         safer to just clobber the tree and checkout a new one at the
1596         desired revision.
1597         (Bazaar.setup): same sourcedata as Arch
1599         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1600         use maybeWait, to work with twisted-1.3.0 and twcompat
1601         (Dependencies.testRun_Pass): same
1603         * buildbot/test/test_vc.py: rearrange, cleanup
1605         * buildbot/twcompat.py: add defer.waitForDeferred and
1606         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1607         can work under twisted-1.3.0 .
1609         * buildbot/test/test_vc.py: rewrite. The sample repositories are
1610         now created at setUp time. This increases the runtime of the test
1611         suite considerably (from 91 seconds to 151), but it removes the
1612         need for an offline tarball, which should solve a problem I've
1613         seen where the test host has a different version of svn than the
1614         tarball build host. The new code also validates that mode=update
1615         really picks up recent commits. This approach will also make it
1616         easier to test out branches, because the code which creates the VC
1617         branches is next to the code which uses them. It will also make it
1618         possible to test some change-notification hooks, by actually
1619         performing a VC commit and watching to see the ChangeSource get
1620         notified.
1622 2005-07-12  Brian Warner  <warner@lothar.com>
1624         * docs/buildbot.texinfo (SVN): add branches example
1625         * docs/Makefile (buildbot.ps): add target for postscript manual
1627         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
1628         * buildbot/test/test_locks.py: same
1630         * buildbot/process/step.py (Darcs): comment about default branches
1632         * buildbot/master.py (BuildMaster.loadConfig): don't look for
1633         c['interlocks'] in the config file, complain if it is present.
1634         Scan all locks in c['builders'] to make sure the Locks they use
1635         are uniquely named.
1636         * buildbot/test/test_config.py: remove old c['interlocks'] test,
1637         add some tests to check for non-uniquely-named Locks
1638         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1639         since the unique-Lock validation code requires it now
1641         * buildbot/locks.py: fix test-case-name
1643         * buildbot/interlock.py: remove old file
1645 2005-07-11  Brian Warner  <warner@lothar.com>
1647         * buildbot/test/test_interlock.py: rename to..
1648         * buildbot/test/test_locks.py: .. something shorter
1650         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1651         versions (after 2.0.1) changed internet.TCPClient to shut down the
1652         connection in stopService. Change the code to handle this
1653         gracefully.
1655         * buildbot/process/base.py (Build): handle whole-Build locks
1656         * buildbot/process/builder.py (Builder.compareToSetup): same
1657         * buildbot/test/test_interlock.py: make tests work
1659         * buildbot/process/step.py (BuildStep.startStep): complain if a
1660         Step tries to claim a lock that's owned by its own Build
1661         (BuildStep.releaseLocks): typo
1663         * buildbot/locks.py (MasterLock): use ComparableMixin so config
1664         file reloads don't replace unchanged Builders
1665         (SlaveLock): same
1666         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1667         rewrite to cover new Locks instead of old c['interlocks']
1668         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1669         slave2 too
1672         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1673         start the master and connect the buildslave
1675         * buildbot/process/step.py (FailingDummy.done): finish with a
1676         FAILURE status rather than raising an exception
1678         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1679         stringify a BuildRequest.reason that is None
1681         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1682         minor fix
1683         * buildbot/status/builder.py (BuildSetStatus): implement enough to
1684         allow scheduler.Dependent to work
1685         * buildbot/buildset.py (BuildSet): set .reason and .results
1687         * buildbot/test/test_interlock.py (Locks.setUp): connect both
1688         slaves, to make the test stop hanging. It still fails, of course,
1689         because I haven't even started to implement Locks.
1691         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1693         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1694         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1695         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1696         (Dependent): new class for downstream build dependencies
1697         * buildbot/test/test_dependencies.py: tests (still failing)
1699         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1701 2005-07-07  Brian Warner  <warner@lothar.com>
1703         * buildbot/test/runutils.py (RunMixin): factored this class out..
1704         * buildbot/test/test_run.py: .. from here
1705         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1706         added new buildbot.locks tests (which all hang right now)
1707         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1708         * buildbot/process/step.py: claim/release per-BuildStep locks
1710         * docs/Makefile: add 'buildbot.html' target
1712         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1713         interpreted as "HEAD", so that all VC steps can accept branch=None
1714         and have it mean the "default branch".
1716         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1718 2005-07-07  Brian Warner  <warner@lothar.com>
1720         * docs/examples/twisted_master.cfg: update to match current usage
1722         * docs/buildbot.texinfo (System Architecture): comment out the
1723         image, it doesn't exist yet and just screws up the HTML manual.
1725 2005-07-05  Brian Warner  <warner@lothar.com>
1727         * debian/.cvsignore: oops, missed one. Removing leftover file.
1729 2005-06-17  Brian Warner  <warner@lothar.com>
1731         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1732         changed its output in 1.2.0, don't mistakenly think that the
1733         subversion we find isn't capable of supporting our tests.
1735         * debian/*: remove the debian/ directory and its contents, to make
1736         life easier for the proper Debian maintainer
1737         * MANIFEST.in: same
1738         * Makefile (release): same
1740 2005-06-07  Brian Warner  <warner@lothar.com>
1742         * everything: create a distinct SourceStamp class to replace the
1743         ungainly 4-tuple, let it handle merging instead of BuildRequest.
1744         Changed the signature of Source.startVC to include the revision
1745         information (instead of passing it through self.args). Implement
1746         branches for SVN (now only Darcs/Git is missing support). Add more
1747         Scheduler tests.
1749 2005-06-06  Brian Warner  <warner@lothar.com>
1751         * everything: rearrange build scheduling. Create a new Scheduler
1752         object (configured in c['schedulers'], which submit BuildSets to a
1753         set of Builders. Builders can now use multiple slaves. Builds can
1754         be run on alternate branches, either requested manually or driven
1755         by changes. This changed some of the Status classes. Interlocks
1756         are out of service until they've been properly split into Locks
1757         and Dependencies. treeStableTimer, isFileImportant, and
1758         periodicBuild have all been moved from the Builder to the
1759         Scheduler.
1760         (BuilderStatus.currentBigState): removed the 'waiting' and
1761         'interlocked' states, removed the 'ETA' argument.
1763 2005-05-24  Brian Warner  <warner@lothar.com>
1765         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1766         erroneously abandons the connection (in clientConnectionFailed)
1767         for non-UserErrors, which means that if we lose the connection due
1768         to a network problem or a timeout, we'll never try to reconnect.
1769         Fix this by not upcalling to the buggy parent method. Note:
1770         twisted-2.0 fixes this, but the function only has 3 lines so it
1771         makes more sense to copy it than to try and detect the buggyness
1772         of the parent class. Fixes SF#1207588.
1774         * buildbot/changes/changes.py (Change.branch): doh! Add a
1775         class-level attribute to accomodate old Change instances that were
1776         pickled before 0.6.5 (where .branch was added for new Changes).
1777         This fixes the exception that occurs when you try to look at an
1778         old Change (through asHTML).
1780         * buildbot/__init__.py (version): bump to 0.6.6+ while between
1781         releases
1783 2005-05-23  Brian Warner  <warner@lothar.com>
1785         * buildbot/__init__.py (version): release 0.6.6
1787 2005-05-23  Brian Warner  <warner@lothar.com>
1789         * NEWS: update for 0.6.6 release
1790         * debian/changelog: same
1792         * buildbot/scripts/runner.py (start): put the basedir in sys.path
1793         before starting: this was done by twistd back when we spawned it,
1794         now that we're importing the pieces and running them in the
1795         current process, we have to do it ourselves. This allows
1796         master.cfg to import files from the same directory without
1797         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1798         Stichele for the catch.
1799         (Options.opt_version): Add a --version command (actually, just make
1800         the existing --version command emit Buildbot's version too)
1802         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1803         fix to make this behave like other LogFiles, this time to handle
1804         existing LogFiles on disk. (add the missing .upgrade method)
1805         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1807 2005-05-21  Brian Warner  <warner@lothar.com>
1809         * buildbot/test/test_runner.py (Create.testMaster): match the
1810         rawstring change in runner.py:masterTAC
1812         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1813         TwistedWords is installed
1814         * buildbot/test/test_status.py: same, with TwistedMail
1816         * buildbot/master.py: remove old IRC/Waterfall imports (used by
1817         some old, deprecated, and removed config keys). This should enable
1818         you to use the base buildbot functionality with Twisted-2.0.0 when
1819         you don't also have TwistedWeb and TwistedWords installed
1821 2005-05-20  Brian Warner  <warner@lothar.com>
1823         * buildbot/scripts/runner.py (run): call sendchange(), not
1824         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1825         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1826         (stop): don't wait for process to die when sending SIGHUP
1827         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1828         directory name gets interpreted, which you don't want
1829         (slaveTAC): same
1831         * buildbot/__init__.py (version): bump to 0.6.5+ while between
1832         releases
1834 2005-05-18  Brian Warner  <warner@lothar.com>
1836         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1838 2005-05-18  Brian Warner  <warner@lothar.com>
1840         * README: update for 0.6.5
1841         * debian/changelog: same
1843         * buildbot/changes/changes.py: rename tag= to branch=, since
1844         that's how we're using it, and my design for the upcoming "build a
1845         specific branch" feature wants it. also, tag= was too CVS-centric
1846         * buildbot/changes/mail.py (parseSyncmail): same
1847         * buildbot/process/base.py (Build.isBranchImportant): same
1848         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1849         * docs/buildbot.texinfo (Attributes of Changes): same
1851         * NEWS: update tag=, update for upcoming release
1853 2005-05-17  Brian Warner  <warner@lothar.com>
1855         * buildbot/scripts/runner.py (stop): actually poll once per
1856         second, instead of re-killing the poor daemon once per second.
1857         Sleep briefly (0.1s) before the first poll, since there's a good
1858         chance we can avoid waiting the full second if the daemon shuts
1859         down quickly. Also remove the sys.exit() at the end.
1860         (start): remove the unneighborly sys.exit()
1862         * Makefile: improve permission-setting to not kick Arch so badly
1864         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1865         default --keepalive=600, since it doesn't hurt very much, and it's
1866         a hassle to discover that you need it.
1867         * buildbot/test/test_runner.py (Create.testSlave): test it
1869         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1870         IRC bot about EXCEPTION
1872         * buildbot/status/client.py (PBListener): upcall more correctly
1874         * buildbot/process/base.py (Build.allStepsDone): if a step caused
1875         an exception mark the overall build with EXCEPTION, not SUCCESS
1877         * buildbot/scripts/runner.py (makefile_sample): remove the leading
1878         newline
1879         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1880         * Makefile: update some release-related stuff
1882         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1883         gets called when there isn't actually an active process, just end
1884         the Command instead of blowing up. I don't know how it gets into
1885         this state, but the twisted win32 buildslave will sometimes hang,
1886         and when it shakes its head and comes back, it thinks it's still
1887         running a Command. The next build causes this command to be
1888         interrupted, but the lack of self.process.pid breaks the interrupt
1889         attempt.
1891         * NEWS: document changes since the last release
1893         * buildbot/scripts/runner.py (start): change 'buildbot start' to
1894         look for Makefile.buildbot instead of a bare Makefile . The
1895         'buildbot start' does not install this file, so you have to
1896         manually copy it if you want to customize startup behavior.
1897         (createMaster): change 'buildbot master' command to create
1898         Makefile.sample instead of Makefile, to create master.cfg.sample
1899         instead of master.cfg (requiring you to copy it before the
1900         buildmaster can be started). Both sample files are kept up to
1901         date, i.e. they are overwritten if they have been changed. The
1902         'buildbot.tac' file is *not* overwritten, but if the new contents
1903         don't match the old, a 'buildbot.tac.new' file is created and the
1904         user is warned. This seems to be a much more sane way to handle
1905         startup files. Also, don't sys.exit(0) when done, so we can run
1906         unit tests against it.
1907         (createSlave): same. Don't overwrite the sample info/ files.
1908         * buildbot/scripts/sample.mk: remove. the contents were pulled
1909         into runner.py, since they need to match the behavior of start()
1910         * setup.py: same
1911         * MANIFEST.in: same
1913         * docs/buildbot.texinfo (Launching the daemons): document it
1914         * buildbot/test/test_runner.py (Create): test it
1916         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1917         version that can handle string-in-string tests, because otherwise
1918         python-2.2 fails the tests. It'd be tremendous if Trial's test
1919         took two strings under 2.2 too.
1921         * everything: fixed all deprecation warnings when running against
1922         Twisted-2.0 . (at least all the ones in buildbot code, there are a
1923         few that come from Twisted itself). This involved putting most of
1924         the Twisted-version specific code in the new buildbot.twcompat
1925         module, and creating some abstract base classes in
1926         buildbot.changes.base and buildbot.status.base (which might be
1927         useful anyway). __implements__ is a nuisance and requires an ugly
1928         'if' clause everywhere.
1930         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1931         delay before finishing the test: it seems that smtp.sendmail
1932         doesn't hang up on the server, so we must wait a moment so it can
1933         hang up on us. This removes the trial warning about an unclean
1934         reactor.
1936 2005-05-16  Brian Warner  <warner@lothar.com>
1938         * buildbot/process/step.py (Source): add 'retry' argument. It is a
1939         tuple of (delay, repeats).
1940         * buildbot/test/test_vc.py (Retry): test it
1941         * docs/buildbot.texinfo (Source Checkout): document it
1942         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1943         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1944         doVCFull() are handled by re-trying the checkout (after a delay)
1945         some number of times.
1946         (ShellCommand._startCommand): make header lines easier to read
1948         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1949         shutdown
1950         (WebTest.test_logfile): make sure master gets shut down, silences
1951         some "unclean reactor" test errors
1953         * buildbot/test/test_changes.py (Sender.tearDown): spin the
1954         reactor once after shutdown, something in certain versions of
1955         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1956         fails, svn-trunk is ok.
1958         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
1959         second win32 error message
1961         * buildbot/test/test_run.py (Status.testSlave): be smarter about
1962         validating the ETA, so the tests don't fail on slow systems
1964 2005-05-15  Brian Warner  <warner@lothar.com>
1966         * buildbot/status/builder.py (HTMLLogFile): make this behave like
1967         the new LogFile class, so upgrading works properly
1968         (LogFileProducer.resumeProducing): survive resumeProducing after
1969         we've exhausted the chunkGenerator
1971         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
1972         logs too
1973         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
1974         (Log.testUpgrade): same
1976         * docs/buildbot.texinfo (Maintenance): describe how to delete old
1977         Builds and logs with a cron job.
1979         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
1980         of the old non-offline LogFile, added code to upgrade these to
1981         new-style contents-live-on-disk instances at load time (in a way
1982         that doesn't invalidate the old Build pickles, so upgrading to
1983         0.6.5 is not a one-way operation). Got rid of everything related
1984         to 'stub' builds.
1985         (LogFile.__init__): create LogFiles with the parent step status,
1986         the log's name, and a builder-relative filename where it can keep
1987         the contents on disk.
1988         (LogFile.hasContents): new method, clients are advised to call it
1989         before getText or getChunks and friends. If it returns False, the
1990         log's contents have been deleted and getText() will raise an
1991         error.
1992         (LogFile.getChunks): made it a generator
1993         (LogFile.subscribeConsumer): new method, takes a Twisted-style
1994         Consumer (except one that takes chunks instead of strings). This
1995         enables streaming of very large logfiles without storing the whole
1996         thing in memory.
1997         (BuildStatus.generateLogfileName): create names like
1998         12-log-compile-output, with a _0 suffix if required to be unique
1999         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2000         or earlier) logfiles into new-style ones
2001         (BuilderStatus): remove everything related to 'stub' builds. There
2002         is now only one build cache, and we don't strip logs from old
2003         builds anymore.
2004         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2005         since we no longer fight to keep it in the cache
2007         * buildbot/status/html.py (TextLog.render_GET): use a
2008         ChunkConsumer to stream the log entries efficiently.
2009         (ChunkConsumer): wrapper which consumes chunks and writes
2010         formatted HTML.
2012         * buildbot/test/test_twisted.py (Parse.testParse): use a
2013         LogFile-like object instead of a real one
2015         * buildbot/test/test_status.py (MyLog): handle new LogFile code
2016         (Log.testMerge3): validate more merge behavior
2017         (Log.testChunks): validate LogFile.getChunks
2018         (Log.testUpgrade): validate old-style LogFile upgrading
2019         (Log.testSubscribe): validate LogFile.subscribe
2020         (Log.testConsumer): validate LogFile.subscribeConsumer
2022         * buildbot/interfaces.py (IStatusLogStub): remove
2023         (IStatusLog.subscribeConsumer): new method
2024         (IStatusLog.hasContents): new method
2025         (IStatusLogConsumer): describes things passed to subscribeConsumer
2027         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2028         the log contents if it does not have any contents.
2029         (StatusResourceBuildStep.body): same
2030         (StatusResourceBuildStep.getChild): give a 404 for empty logs
2032 2005-05-14  Brian Warner  <warner@lothar.com>
2034         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2035         timeouts to try and make the windows metabuildslave not hang
2037 2005-05-13  Mike Taylor  <bear@code-bear.com>
2039         * buildbot/slave/commands.py (rmdirRecursive): added a check
2040         to ensure the path passed into rmdirRecursive actually exists.
2041         On win32 a non-existant path would generate an exception.
2043 2005-05-13  Brian Warner  <warner@lothar.com>
2045         * buildbot/slave/commands.py (rmdirRecursive): replacement for
2046         shutil.rmtree which behaves correctly on windows in the face of
2047         files that you have to chmod before deleting. Thanks to Bear at
2048         the OSAF for the routine.
2049         (SourceBase.doClobber): use rmdirRecursive
2051 2005-05-12  Brian Warner  <warner@lothar.com>
2053         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2054         method generate chunks instead of returning a big list. This
2055         allows the same method to be used for both old LogFile and new
2056         OfflineLogFile.
2057         (OfflineLogFile.getText): use the generator
2058         (OfflineLogFile.subscribe): same
2059         * buildbot/status/html.py (TextLog.resumeProducing): same
2060         * buildbot/interfaces.py (IStatusLog.getChunks): document it
2062         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2063         point out that OfflineLogFile does not currently work with
2064         html.Waterfall . Fixing this is high-priority.
2066         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2067         apparently windows defaults to using stdout
2069         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2070         better message on failure so I can figure out the win32 problem
2072         * buildbot/slave/commands.py (ShellCommand._startCommand): update
2073         log messages to include more useful copies of the command being
2074         run, the argv array, and the child command's environment.
2075         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2077 2005-05-11  Brian Warner  <warner@lothar.com>
2079         * setup.py: oops, install debug.glade so 'buildbot debugclient'
2080         will actually work
2081         * Makefile: update the deb-snapshot version
2083         * docs/buildbot.texinfo: move all .xhtml docs into a new
2084         .texinfo-format document, adding a lot of material in the process.
2085         This is starting to look like a real user's manual. Removed all
2086         the Lore-related files: *.xhtml, *.css, template.tpl .
2087         * docs/Makefile: simple makefile to run 'makeinfo'
2088         * buildbot/scripts/sample.cfg: rearrange slightly
2089         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2091 2005-05-10  Brian Warner  <warner@lothar.com>
2093         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2094         different name for the internal twistw module, handle it.
2096         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2097         * setup.py: .. and stop trying to install it
2099         * buildbot/process/step.py (Git): added support for 'cogito' (aka
2100         'git'), the new linux kernel VC system (http://kernel.org/git/).
2101         Thanks to Brandon Philips for the patch.
2102         * buildbot/slave/commands.py (Git): same
2104 2005-05-06  Brian Warner  <warner@lothar.com>
2106         * buildbot/status/builder.py (OfflineLogFile): replace the default
2107         LogFile with a form that appends its new contents to a disk file
2108         as they arrive. The complete log data is never kept in RAM. This
2109         is the first step towards handling very large (100MB+) logfiles
2110         without choking quite so badly. (The other half is
2111         producer/consumer on the HTML pages).
2112         (BuildStepStatus.addLog): use OfflineLogFile by default
2113         (BuildStatus.getLogfileName): helper code to give the
2114         OfflineLogFile a filename to work with
2116         * buildbot/test/test_status.py (Results.testAddResults): update
2117         tests to handle new asserts
2118         * buildbot/test/test_vc.py (Patch.doPatch): same
2119         * buildbot/test/test_steps.py (BuildStep.setUp): same
2121 2005-05-05  Brian Warner  <warner@lothar.com>
2123         * buildbot/scripts/runner.py (start): if there is no Makefile,
2124         launch the app by importing twistd's internals and calling run(),
2125         rather than spawning a new twistd process. This stands a much
2126         better chance of working under windows.
2127         (stop): kill the process with os.kill instead of spawning
2128         /bin/kill, again to reduce the number of external programs which
2129         windows might not have in the PATH. Also wait up to 5 seconds for
2130         the process to go away, allowing things like 'buildbot stop;
2131         buildbot start' to be reliable in the face of slow shutdowns.
2133         * buildbot/master.py (Dispatcher.__getstate__): remove old
2134         .tap-related methods
2135         (BuildMaster.__getstate__): same
2136         (makeService): same
2137         * buildbot/slave/bot.py (makeService): same
2138         (Options.longdesc): same
2139         * buildbot/scripts/runner.py: copy over some old mktap option text
2141         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2142         'buildbot master' now creates a buildbot.tac file, so there is no
2143         longer a create-instance/save/reload sequence. mktap is dead, long
2144         live twistd -y.
2145         * buildbot/scripts/sample.mk: use twistd -y, not -f
2146         * buildbot/test/test_config.py: remove mktap-based test
2147         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2148         * README: don't reference mktap
2150         * docs/source.xhtml: document some of the attributes that Changes
2151         might have
2153         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2155         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2156         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2157         * buildbot/changes/changes.py (Change)
2158         * buildbot/changes/mail.py (parseSyncmail)
2159         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2160         (Test3.testMsgS5)
2161         * buildbot/process/base.py (Build.isTagImportant)
2162         (Build.addChange)
2165 2005-05-04  Brian Warner  <warner@lothar.com>
2167         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2168         connection after sending the change, so that unit tests don't
2169         complain about sockets being left around
2171         * buildbot/status/html.py (WaterfallStatusResource.body): fix
2172         exception in phase=0 rendering
2173         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2175         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2177         * buildbot/master.py (BuildMaster.loadConfig): finally remove
2178         deprecated config keys: webPortnum, webPathname, irc, manholePort,
2179         and configuring builders with tuples.
2180         * buildbot/test/test_config.py: stop testing compatibility with
2181         deprecated config keys
2182         * buildbot/test/test_run.py: same
2184 2005-05-03  Brian Warner  <warner@lothar.com>
2186         * contrib/arch_buildbot.py: survive if there are no logfiles
2187         (username): just use a string, os.getlogin isn't reliable
2189         * buildbot/scripts/runner.py (sendchange): oops, fix the command
2190         so 'buildbot sendchange' actually works. The earlier test only
2191         covered the internal (non-reactor-running) form.
2193         * contrib/arch_buildbot.py: utility that can run as an Arch hook
2194         script to notify the buildmaster about changes
2196         * buildbot/scripts/runner.py (sendchange): new command to send a
2197         change to a buildbot.changes.pb.PBChangeSource receiver.
2198         * buildbot/test/test_changes.py (Sender): test it
2200         * buildbot/master.py (BuildMaster.startService): mark .readConfig
2201         after any reading of the config file, not just when we do it in
2202         startService. This makes some tests a bit cleaner.
2204         * buildbot/changes/pb.py: add some log messages
2206         * buildbot/process/base.py (Build.startBuild): fix a bug that
2207         caused an exception when the build terminated in the very first
2208         step.
2209         (Build.stepDone): let steps return a status of EXCEPTION. This
2210         terminates the build right away, and sets the build's overall
2211         status to EXCEPTION too.
2212         * buildbot/process/step.py (BuildStep.failed): return a status of
2213         EXCEPTION when that is what has happened.
2215         * buildbot/process/step.py (Arch.computeSourceRevision): finally
2216         implement this, allowing Arch-based projects to get precise
2217         checkouts instead of always using the latest code
2218         (Bazaar): create variant of Arch to let folks use baz instead of
2219         tla. Requires a new buildslave too.
2220         * buildbot/slave/commands.py (Arch): add 'revision' argument
2221         (Bazaar): create variant of Arch that uses baz instead of tla.
2222         Remove the code that extracts the archive name from the
2223         register-archive output, since baz doesn't provide it, and require
2224         the user provide both the archive name and its location.
2225         * buildbot/test/test_vc.py (VC.testBazaar): added tests
2227 2005-05-02  Brian Warner  <warner@lothar.com>
2229         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2230         thanks to Nick Trout.
2232         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2233         deals better with source Makefile coming from a read-only CVS
2234         checkout. Thanks to Nick Trout for the catch.
2236         * buildbot/__init__.py (version): bump to 0.6.4+ while between
2237         releases
2239 2005-04-28  Brian Warner  <warner@lothar.com>
2241         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2243         * debian/changelog: update for 0.6.4
2245 2005-04-28  Brian Warner  <warner@lothar.com>
2247         * README.w32: add a checklist of steps for getting buildbot
2248         running on windows.
2249         * MANIFEST.in: include it in the tarball
2251         * NEWS: update
2253         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2254         broken .tap files from 0.6.3 by getting rid of .services,
2255         .namedServices, and .change_svc at load time.
2257 2005-04-27  Brian Warner  <warner@lothar.com>
2259         * NEWS: update in preparation for new release
2261         * buildbot/test/test_config.py (Save.testSave): don't pull in
2262         twisted.scripts.twistd, we don't need it and it isn't for windows
2263         anyway.
2265         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2266         accomodate win32 which can't do atomic-rename
2268 2005-04-27  Brian Warner  <warner@lothar.com>
2270         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2271         timeouts to help the slow metabuildbot not flunk them so much
2272         (Disconnect.testBuild3): same
2273         (Disconnect.testBuild4): same
2274         (Disconnect.testInterrupt): same
2276         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2277         setup, it was completely broken for new buildmasters (those which
2278         did not have a 'change.pck' already saved. Thanks to Paul Warren
2279         for catching this (embarrassing!) bug.
2280         (Dispatcher.__getstate__): don't save our registered avatar
2281         factories, since they'll be re-populated when the config file is
2282         re-read.
2283         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2284         tests (since the real mktap-generated BuildMaster doesn't save
2285         this attribute).
2286         (BuildMaster.__getstate__): don't save any service children,
2287         they'll all be re-populated when the config file is re-read.
2288         * buildbot/test/test_config.py (Save.testSave): test for this
2290 2005-04-26  Brian Warner  <warner@lothar.com>
2292         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2293         rendered with Blender.. looks a bit nicer.
2294         * buildbot/docs/images/icon.blend: add the Blender file for it
2296         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2297         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2298         running under windows. This appears to be the best way to allow
2299         BuildSteps to do something normal like 'trial -v buildbot.test' or
2300         'make foo' and still expect it to work. The idea is to make the
2301         BuildSteps look as much like what a developer would type when
2302         compiling or testing the tree by hand. This approach probably has
2303         problems when there are spaces in the arguments, so if you've got
2304         windows buildslaves, you'll need to pay close attention to your
2305         commands.
2307         * buildbot/status/html.py (WaterfallStatusResource.body): add the
2308         timezone to the timestamp column.
2309         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2311         * buildbot/scripts/runner.py (loadOptions): do something sane for
2312         windows, I think. We use %APPDATA%/buildbot instead of
2313         ~/.buildbot, but we still search everywhere from the current
2314         directory up to the root for a .buildbot/ subdir. The "is it under
2315         $HOME" security test was replaced with "is it owned by the current
2316         user", which is only performed under posix.
2317         * buildbot/test/test_runner.py (Options.testFindOptions): update
2318         tests to match. The "is it owned by the current user" check is
2319         untested. The test has been re-enabled for windows.
2321         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2322         any "\n" in the expected output with the platform-specific line
2323         separator. Make this separator "\r\n" on PTYs under unix, they
2324         seem to do that and I don't know why
2326         * buildbot/test/test_runner.py (Options.optionsFile): disable on
2327         windows for now, I don't know what ~/.buildbot/ should mean there.
2329         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2330         win32 compatibility, don't use "/tmp"
2331         (Basedir.testChangeBuilddir): remove more unixisms
2333 2005-04-26  Brian Warner  <warner@lothar.com>
2335         * buildbot/test/test_control.py (Force.rmtree): python2.2
2336         compatibility, apparently its shutil.rmtree ignore_errors=
2337         argument is ignored.
2338         * buildbot/test/test_run.py (Run.rmtree): same
2339         (RunMixin.setUp): same
2341         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2342         not os.path.sep
2344         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2345         'substring in string' operator, must use string.find(substr)!=-1
2346         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2347         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2349         * buildbot/scripts/runner.py (loadOptions): add code to search for
2350         ~/.buildbot/, a directory with things like 'options', containing
2351         defaults for various 'buildbot' subcommands. .buildbot/ can be in
2352         the current directory, your $HOME directory, or anywhere
2353         inbetween, as long as you're somewhere inside your home directory.
2354         (debugclient): look in ~/.buildbot/options for master and passwd
2355         (statuslog): look in ~/.buildbot/options for 'masterstatus'
2356         * buildbot/test/test_runner.py (Options.testFindOptions): test it
2358         * buildbot/status/client.py (makeRemote): new approach to making
2359         IRemote(None) be None, which works under Twisted-2.0
2360         * buildbot/test/test_status.py (Client.testAdaptation): test it
2362         * buildbot/status/builder.py (Status.builderAdded): when loading a
2363         pickled BuilderStatus in from disk, set its name after loading.
2364         The config file might have changed its name (but not its
2365         directory) while it wasn't looking.
2366         
2367         * buildbot/process/builder.py (Builder.attached): always return a
2368         Deferred, even if the builder was already attached
2369         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2371 2005-04-25  Brian Warner  <warner@lothar.com>
2373         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2374         category-related exception when announcing a build has finished
2376         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2377         reference no-longer-existent changemaster.sources
2378         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2380         * buildbot/__init__.py (version): bump to 0.6.3+ while between
2381         releases
2383 2005-04-25  Brian Warner  <warner@lothar.com>
2385         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2387         * debian/changelog: update for 0.6.3
2389 2005-04-25  Brian Warner  <warner@lothar.com>
2391         * MANIFEST.in: make sure debug.glade is in the tarball
2393         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2395         * NEWS: update for the imminent 0.6.3 release
2397         * buildbot/status/html.py (HtmlResource.content): make the
2398         stylesheet <link> always point at "buildbot.css".
2399         (StatusResource.getChild): map "buildbot.css" to a static.File
2400         containing whatever css= argument was provided to Waterfall()
2401         (Waterfall): provide the "classic" css as the default.
2402         * docs/waterfall.classic.css: move default CSS from here ..
2403         * buildbot/status/classic.css: .. to here
2405         * MANIFEST.in: make sure classic.css is included in the tarball
2406         * setup.py: and that it is installed too, under buildbot/status/
2408         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2409         the module level, because buildbot.tap files from 0.6.2 don't have
2410         it in their attribute dictionary.
2412         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2413         really exists at startup, might save some confusion somewhere.
2415 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2417         * docs/waterfall.classic.css:
2418           add a stylesheet that's almost the same as the "classic"
2419           buildbot style
2421         * buildbot/status/builder.py:
2422           add EXCEPTION as a result - this is a problem for the bot
2423           maintainer, not a build problem for the changers
2424         * buildbot/process/step.py:
2425           use EXCEPTION instead of FAILURE for exceptions
2426         * buildbot/status/html.py:
2427           add build_get_class to get a class out of a build/buildstep
2428           finish naming the classes
2429           split out sourceNames to changeNames and builderNames so we
2430           can style them separately
2431         * docs/config.xhtml:
2432           finish documenting classes as they are right now
2434         * buildbot/status/html.py:
2435           name the classes as we agreed on IRC
2436         * docs/config.xhtml:
2437           and document them
2439         * buildbot/status/html.py:
2440           same for cssclass->class_
2442         * buildbot/status/html.py:
2443           as decided on IRC, use class_ for the "class" attribute to not
2444           conflict with the class keyword, and clean up the messy **{} stuff.
2446         * buildbot/status/mail.py:
2447           put back "builders" argument, and fix docstring, because the
2448           code *ignores* builders listed in this argument
2450         * buildbot/process/builder.py:
2451           remove FIXME notes - category is now indeed a cvar of BuilderStatus
2453         * docs/config.xhtml:
2454           describe the category argument for builders
2456         * buildbot/status/builder.py:
2457           Fix a silly bug due to merging
2459         * buildbot/process/builder.py:
2460           remove category from the process Builder ...
2461         * buildbot/status/builder.py:
2462           ... and add it to BuilderStatus instead.
2463           Set category on unpickled builder statuses, they might not have it.
2464         * buildbot/master.py:
2465           include category when doing builderAdded
2466         * buildbot/status/mail.py:
2467           return None instead of self for builders we are not interested in.
2468         * buildbot/test/test_run.py:
2469           fix a bug due to only doing deferredResult on "dummy" waiting
2470         * buildbot/test/test_status.py:
2471           add checks for the Mail IStatusReceiver returning None or self
2473         * buildbot/status/html.py:
2474           fix testsuite by prefixing page title with BuildBot
2476         * buildbot/status/builder.py:
2477           have .category in builder status ...
2478         * buildbot/process/builder.py:
2479           ... and set it from Builder
2480         * buildbot/status/html.py:
2481           make .css a class variable 
2482         * buildbot/test/test_status.py:
2483           write more tests to cover our categories stuff ...
2484         * buildbot/status/mail.py:
2485           ... and fix the bug that this uncovered
2487         * buildbot/changes/mail.py:
2488         * buildbot/changes/pb.py:
2489         * buildbot/master.py:
2490         * buildbot/process/base.py:
2491         * buildbot/process/factory.py:
2492         * buildbot/process/interlock.py:
2493         * buildbot/process/step.py:
2494         * buildbot/process/step_twisted.py:
2495         * buildbot/slave/commands.py:
2496         * buildbot/status/builder.py:
2497         * buildbot/status/client.py:
2498         * buildbot/status/html.py:
2499         * buildbot/status/mail.py:
2500         * buildbot/status/progress.py:
2501         * buildbot/test/test_changes.py:
2502         * buildbot/test/test_config.py:
2503         * buildbot/test/test_control.py:
2504         * buildbot/test/test_interlock.py:
2505         * buildbot/test/test_maildir.py:
2506         * buildbot/test/test_mailparse.py:
2507         * buildbot/test/test_run.py:
2508         * buildbot/test/test_slavecommand.py:
2509         * buildbot/test/test_status.py:
2510         * buildbot/test/test_steps.py:
2511         * buildbot/test/test_twisted.py:
2512         * buildbot/test/test_util.py:
2513         * buildbot/test/test_vc.py:
2514         * buildbot/test/test_web.py:
2515         * buildbot/util.py:
2516           add test-case-name at the top of a whole set of files
2518         * buildbot/status/builder.py:
2519           keep order of addition when getting builder names
2520         * buildbot/status/words.py:
2521         * buildbot/test/test_run.py:
2522           add test for getBuilderNames
2524         * buildbot/process/base.py:
2525         * buildbot/process/step.py:
2526         * buildbot/status/builder.py:
2527         * buildbot/status/html.py:
2528           make buildbot css-able
2529           replace the color code for purple with purple, don't understand
2530           why it wasn't purple to start with
2532         * buildbot/status/words.py:
2533           ok, so it doesn't look like BuilderStatus.remote is still valid.
2534           Use what waterfall uses instead.
2536         * buildbot/interfaces.py:
2537         * buildbot/status/builder.py:
2538         * buildbot/status/html.py:
2539         * buildbot/status/mail.py:
2540         * buildbot/status/words.py:
2541         * buildbot/test/test_run.py:
2542           use categories everywhere and make it be a list.  More sensible
2543           for the future.  Also make words actually respect this in
2544           buildFinished.
2546         * buildbot/interfaces.py:
2547           add category argument to getBuilderNames
2548         * buildbot/process/builder.py:
2549         * buildbot/status/builder.py:
2550         * buildbot/status/html.py:
2551         * buildbot/status/mail.py:
2552         * buildbot/status/words.py:
2553         * buildbot/test/test_run.py:
2554           move from specifying builders by name to specifying the category
2556         * buildbot/status/html.py:
2557         * buildbot/status/words.py:
2558           add "builders=" to __init__ of status clients so they can
2559           limit themselves to the given list of builders to report on
2561         * buildbot/status/html.py: set the title to the product name
2563 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
2565         * buildbot/interfaces.py:
2566         * buildbot/status/builder.py:
2567           more documentation.  Hm, not sure if ChangeLog entries make sense
2568           here...
2570 2005-04-23  Brian Warner  <warner@lothar.com>
2572         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2574         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2576         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2577         the sub-commands that log buildmaster status to stdout and to a
2578         GUI window, respectively.
2580         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2581         functionality is working again, but all the step-status and ETA
2582         stuff is missing. Commented out a lot of code pending more
2583         overhaul work.
2585         * buildbot/status/client.py: make sure that IRemote(None) is None
2587         * buildbot/changes/changes.py: import defer, oops
2588         (ChangeMaster): remove the .sources list, rely upon the fact that
2589         MultiServices can be treated as sequences of their children. This
2590         cleans up the add/remove ChangeSource routines a lot, as we keep
2591         exactly one list of the current sources instead of three.
2593         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2594         up an empty ChangeMaster at init time.
2595         (BuildMaster.loadChanges): if there are changes to be had from
2596         disk, replace self.change_svc with the new ones. If not, keep
2597         using the empty ChangeMaster set up in __init__.
2598         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2599         instead of a separate list, makes the code a bit cleaner.
2600         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2601         (ConfigTest.testSources): same, also wait for loadConfig to finish.
2602         Extend the test to make sure we can get rid of the sources when
2603         we're done.
2605 2005-04-22  Brian Warner  <warner@lothar.com>
2607         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2608         and info/host files when making the slave directory
2610         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2611         whendone= argument, just return the Deferred and let the caller do
2612         what they want with it.
2613         (Disconnect.testBuild1): wait for shutdownSlave
2614         (Basedir.testChangeBuilddir): new test to make sure changes to the
2615         builddir actually get propagated to the slave
2617         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2618         explicit method, rather than passing the builddir in __init__ .
2619         Make sure to update self.basedir too, this was broken before.
2620         (Bot.remote_setBuilderList): use b.setBuilddir for both new
2621         builders and for ones that have just had their builddir changed.
2622         (BotFactory): add a class-level .perspective attribute, so
2623         BuildSlave.waitUntilDisconnected won't get upset when the
2624         connection hasn't yet been established
2625         (BuildSlave.__init__): keep track of the bot.Bot instance, so
2626         tests can reach through it to inspect the SlaveBuilders
2628         * buildbot/process/base.py (Build.buildException): explain the
2629         log.err with a log.msg
2630         * buildbot/process/builder.py (Builder.startBuild): same
2631         (Builder._startBuildFailed): improve error message
2633         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2634         occurred because we lost the brand-new connection, retry instead
2635         of giving up. If not, it's probably an authorization failure, and
2636         it makes sense to stop trying. Make sure we log.msg the reason
2637         that we're log.err'ing the failure, otherwise test failures are
2638         really hard to figure out.
2640         * buildbot/master.py: change loadConfig() to return a Deferred
2641         that doesn't fire until the change has been fully implemented.
2642         This means any connected slaves have been updated with the new
2643         builddir. This change makes it easier to test the code which
2644         actually implements this builddir-updating.
2645         (BotPerspective.addBuilder): return Deferred
2646         (BotPerspective.removeBuilder): same
2647         (BotPerspective.attached): same
2648         (BotPerspective._attached): same. finish with remote_print before
2649         starting the getSlaveInfo, instead of doing them in parallel
2650         (BotPerspective.list_done): same
2651         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2652         actually calling slave.disconnect()
2653         (BotMaster.addBuilder): same
2654         (BotMaster.removeBuilder): same
2655         (BuildMaster.loadConfig): same
2656         (BuildMaster.loadConfig_Slaves): same
2657         (BuildMaster.loadConfig_Sources): same
2658         (BuildMaster.loadConfig_Builders): same
2659         (BuildMaster.loadConfig_status): same
2661         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2662         a Deferred that fires when the source is finally removed
2664         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2665         the previous tree on win32, where we have to do it synchronously,
2666         make sure we return a Deferred anyway.
2667         (SourceBase.doCopy): same
2669         * buildbot/scripts/runner.py (statusgui): use the text client for
2670         now, while I rewrite the Gtk one
2671         * buildbot/clients/base.py: strip out old code, leaving just the
2672         basic print-message-on-event functionality. I also remove the
2673         ReconnectingPBClientFactory, but it does at least quit when it
2674         loses the connection instead of going silent
2676 2005-04-21  Brian Warner  <warner@lothar.com>
2678         * Makefile: minor tweaks
2680         * NEWS: point out deprecation warnings, new features for
2681         /usr/bin/buildbot
2683         * buildbot/master.py (BuildMaster.loadConfig): emit
2684         DeprecationWarnings for Builders defined with tuples. Rearrange
2685         code to facility removal of deprecated configuration keys in the
2686         next release.
2688         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2689         'buildbot' command to put a little Makefile in the target that
2690         helps you re-create the buildbot.tap file, start or stop the
2691         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2692         all the files 0600, since they contain passwords.
2693         (start): if there is a Makefile, and /usr/bin/make exists, use
2694         'make start' in preference to a raw twistd command. This lets
2695         slave admins put things like PYTHONPATH variables in their
2696         Makefiles and have them still work when the slave is started with
2697         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2698         be nice to first try the 'make' command and only fall back to
2699         twistd if it fails. TODO: the Makefile's "start" command does not
2700         add the --reactor=win32 argument when running under windows.
2701         (Options.debugclient, Options.statusgui): add sub-commands to launch
2702         the debug client (formerly in contrib/debugclient.py) and the
2703         Gtk status application (currently broken)
2704         * buildbot/clients/debug.py: move from contrib/debugclient.py
2705         * buildbot/clients/debug.glade: same
2707         * buildbot/test/test_trial.py: remove it. This requires some
2708         functionality out of Twisted that isn't there yet, and until then
2709         having it around just confuses things.
2711         * buildbot/test/test_slavecommand.py (Shell): test both with and
2712         without PTYs, and make sure that command output is properly
2713         interleaved in the with-PTY case. I think the without-PTY test
2714         should pass on windows, where we never use PTYs anyway.
2716 2005-04-20  Brian Warner  <warner@lothar.com>
2718         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2720         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2722         * NEWS: start creating entries for the next release
2724         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2726         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2727         (WebTest.test_webPathname): same
2728         (WebTest.test_webPathname_port): same
2729         (WebTest.test_waterfall): use the default favicon rather than
2730         rooting around the filesystem for it. Open the expected-icon file
2731         in binary mode, to make win32 tests happier (thanks to Nick Trout
2732         for the catch)
2733         * buildbot/status/html.py (buildbot_icon): win32 portability
2735         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2736         win32-compatibility fixes from Nick Trout, the "file not found" message
2737         is different under windows
2738         (FakeSlaveBuilder.__init__): clean up setup a bit
2739         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2741 2005-04-19  Brian Warner  <warner@lothar.com>
2743         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2744         skip-if-repositories-are-unavailable test to not kill the trial
2745         that comes with Twisted-1.3.0
2747         * setup.py: install buildbot.png icon file when installing code
2749         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2750         environment used by the command, at least on the child side.
2752         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2753         this method needs to be added and implemented because it gets
2754         called under heavy load. I don't quite understand the
2755         producer/consumer API enough to write it.
2756         (StatusResource.getChild): add a resource for /favicon.ico
2757         (Waterfall.__init__): add favicon= argument
2758         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2759         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2760         (WebTest.test_webPathname): same
2761         (WebTest.test_webPathname_port): same
2762         * docs/config.xhtml: mention favicon=
2763         * buildbot/buildbot.png: add a default icon, dorky as it is
2765 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
2767         * buildbot/master.py:
2768         * buildbot/process/base.py:
2769         * buildbot/process/builder.py:
2770         * buildbot/process/interlock.py:
2771         * buildbot/status/builder.py:
2772         * buildbot/status/html.py:
2773         * buildbot/status/mail.py:
2774         * buildbot/status/words.py:
2775           new documentation while digging through the code
2777 2005-04-17  Brian Warner  <warner@lothar.com>
2779         * general: try to fix file modes on all .py files: a+r, a-x,
2780         but let buildbot/clients/*.py be +x since they're tools
2782         * docs/epyrun (addMod): when an import fails, say why
2784         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2786 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2788         * buildbot/process/base.py:
2789         * buildbot/process/builder.py:
2790         * buildbot/status/builder.py:
2791           new documentation while digging through the code
2793 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2795         * buildbot/changes/changes.py:
2796         * buildbot/changes/p4poller.py:
2797         * buildbot/interfaces.py:
2798         * buildbot/process/base.py:
2799         * buildbot/process/builder.py:
2800         * buildbot/process/step.py:
2801         * buildbot/process/step_twisted.py:
2802         * buildbot/slave/bot.py:
2803         * buildbot/slave/commands.py:
2804         * buildbot/status/builder.py:
2805           fix all docstrings to make epydoc happy.  In the process of fixing
2806           some, I also moved pieces of docs, and removed some deprecated
2807           documentation
2809 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2811         * buildbot/process/builder.py:
2812         * buildbot/process/interlock.py:
2813         * buildbot/process/process_twisted.py:
2814         * buildbot/process/step.py:
2815           BuildProcess -> Build, as it looks like that's what happened
2816         * buildbot/process/base.py:
2817         * buildbot/process/factory.py:
2818           update epydoc stuff
2820 2005-04-17  Brian Warner  <warner@lothar.com>
2822         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2823         update compile command to accomodate the Twisted split.. now
2824         instead of './setup.py build_ext -i', you do './setup.py all
2825         build_ext -i', to run build_ext over all sub-projects.
2826         (FullTwistedBuildFactory): same
2827         (TwistedReactorsBuildFactory): same
2829         * buildbot/status/html.py (TextLog.finished): null out self.req
2830         when we're done, otherwise the reference cycle of TextLog to .req
2831         to .notifications to a Deferred to TextLog.stop keeps them from
2832         being collected, and consumes a huge (610MB on pyramid at last
2833         check) amount of memory.
2835 2005-04-11  Brian Warner  <warner@lothar.com>
2837         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2838         normalize the VC-repository location.. makes SVN happier with
2839         certain test environments.
2841         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2842         RemoteShellCommand gets its own .env dictionary, so that code in
2843         start() doesn't mutate the original. I think this should fix the
2844         step_twisted.Trial problem where multiple identical components
2845         kept getting added to PYTHONPATH= over and over again.
2847         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2848         adding epydoc-format docstrings to many classes. Thanks to Thomas
2849         Vander Stichele for the patches.
2850         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2851         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2852         * buildbot/slave/bot.py, commands.py, registry.py: same
2854 2005-04-05  Brian Warner  <warner@lothar.com>
2856         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2857         preserve timestamps, helps incremental builds of large trees.
2858         Patch from Rene Rivera.
2860         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2861         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2862         for the catch.
2864 2005-04-03  Brian Warner  <warner@lothar.com>
2866         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2867         with one dict, apparently exec has some scoping bugs when used
2868         with both global/local dicts. Thanks to Nathaniel Smith for the
2869         catch.
2871 2005-04-02  Brian Warner  <warner@lothar.com>
2873         * buildbot/process/step_twisted.py (countFailedTests): the new
2874         trial in Twisted-2.0 emits a slightly different status line than
2875         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2876         mistakenly think the test count is unparseable.
2877         (Trial.start): note that for some reason each build causes another
2878         copy of self.testpath to be prepended to PYTHONPATH. This needs to
2879         be fixed but I'm not sure quite where the problem is.
2881 2005-04-01  Brian Warner  <warner@lothar.com>
2883         * buildbot/test/test_run.py (Run.testMaster): change some uses of
2884         deferredResult to avoid hangs/warnings under twisted-2.0
2885         (RunMixin.tearDown): same
2886         (RunMixin.shutdownSlave): same
2887         (Disconnect.testIdle1): same
2888         (Disconnect.testBuild2): same: wait one second after the build
2889         finishes for test to really be done.. this should be cleaned up to
2890         avoid wasting that second. Builder.detach uses a callLater(0),
2891         either that should be done in-line (something else needed that
2892         behavior), or it should return a Deferred that fires when the
2893         builder is really offline.
2894         (Disconnect.testBuild3): same
2895         (Disconnect.testDisappear): same
2897         * buildbot/test/test_web.py: rearrange server-setup and teardown
2898         code to remove unclean-reactor warnings from twisted-2.0
2900         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2901         so the tests don't hang under twisted-2.0
2903 2005-03-31  Brian Warner  <warner@lothar.com>
2905         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2906         caused a warning each time the master changed our set of builders
2908         * buildbot/status/builder.py (BuildStatus.saveYourself): under
2909         w32, don't unlink the file unless it already exists. Thanks to
2910         Baptiste Lepilleur for the catch.
2911         (BuilderStatus.saveYourself): same
2913 2005-02-01  Brian Warner  <warner@lothar.com>
2915         * buildbot/status/html.py (TextLog.getChild): use a /text child
2916         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2917         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2918         logfile as text/plain (no markup, no headers). This replaces the
2919         previous scheme (which used an ?text=1 argument), and gets us back
2920         to a relative link (which works better when the buildbot lives
2921         behind another web server, such as Apache configured as a reverse
2922         proxy). Thanks to Gerald Combs for spotting the problem.
2924         * buildbot/__init__.py (version): bump to 0.6.2+ while between
2925         releases
2927 2004-12-13  Brian Warner  <warner@lothar.com>
2929         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2931         * debian/changelog: update for 0.6.2
2932         * NEWS: finalize for 0.6.2
2934 2004-12-11  Brian Warner  <warner@lothar.com>
2936         * NEWS: bring it up to date
2938         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2939         detection code. Require some sign of life from the buildmaster
2940         every BotFactory.keepaliveInterval seconds. Provoke this
2941         indication at BotFactory.keepaliveTimeout seconds before the
2942         deadline by sending a keepalive request. We don't actually care if
2943         that request is answered in a timely fashion, what we care about
2944         is that .activity() is called before the deadline. .activity() is
2945         triggered by any PB message from the master (including an ack to
2946         one of the slave's status-update messages). With this new scheme,
2947         large status messages over slow pipes are OK, as long as any given
2948         message can be sent (and thus acked) within .keepaliveTimeout
2949         seconds (which defaults to 30).
2950         (SlaveBuilder.remote_startCommand): record activity
2951         (SlaveBuilder.ackUpdate): same
2952         (SlaveBuilder.ackComplete): same
2953         (BotFactory.gotPerspective): same
2954         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2956 2004-12-09  Brian Warner  <warner@lothar.com>
2958         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
2959         debug message
2961         * buildbot/process/step_twisted.py (Trial._commandComplete):
2962         update self.cmd when we start the 'cat test.log' transfer. Without
2963         this, we cannot interrupt the correct RemoteCommand when we lose
2964         the connection.
2966         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
2967         trying to tell the slave to stop the command if we're already
2968         inactive, or if we no longer have a .remote
2970         * buildbot/process/builder.py (Builder._detached): don't let an
2971         exception in currentBuild.stopBuild() prevent the builder from
2972         being marked offline
2974 2004-12-07  Brian Warner  <warner@lothar.com>
2976         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
2977         KeyError that happens when you ask for a non-existent Builder, and
2978         translate it into a UsageError.
2980         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
2981         losing the slave in the middle of a remote step is handled too
2983         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
2984         be a Failure, so be sure to stringify it before using it as the
2985         contents of the 'interrupt' logfile
2986         (RemoteCommand.interrupt): use stringified 'why' in
2987         remote_interruptCommand too, just in case
2989 2004-12-06  Brian Warner  <warner@lothar.com>
2991         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
2992         instead of 'tla update', which is more efficient in case we've
2993         missed a couple of patches since the last update.
2995         * debian/changelog: update for previous (0.6.1) release. Obviously
2996         this needs to be handled better.
2998 2004-12-05  Brian Warner  <warner@lothar.com>
3000         * NEWS: update for stuff since last release
3002         * buildbot/master.py (DebugPerspective.attached): return 'self', to
3003         match the maybeDeferred change in Dispatcher.requestAvatar
3004         * buildbot/changes/pb.py (ChangePerspective.attached): same
3005         * buildbot/status/client.py (StatusClientPerspective.attached): same
3006         * buildbot/process/builder.py (Builder._attached3): same
3007         * buildbot/pbutil.py (NewCredPerspective.attached): same
3009         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3010         the date to the top-most box, if it is not the same as today's
3011         date.
3013         * docs/slave.xhtml: provide a buildslave setup checklist
3015         * docs/source.xhtml (Arch): correct terminology
3017 2004-12-04  Brian Warner  <warner@lothar.com>
3019         * buildbot/test/test_slavecommand.py: use sys.executable instead
3020         of hard-coding 'python' for child commands, might help portability
3022         * docs/examples/twisted_master.cfg: update to current usage
3024         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3025         'stop build' command to the IRC bot
3027         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3028         message that broke PBChangeSource
3030         * buildbot/slave/bot.py: clean up shutdown/lose-master code
3031         (SlaveBuilder): make some attributes class-level, remove the old
3032         "update queue" which existed to support resuming a build after the
3033         master connection was lost. Try to reimplement that feature later.
3034         (SlaveBuilder.stopCommand): clear self.command when the
3035         SlaveCommand finishes, so that we don't try to kill a leftover one
3036         at shutdown time.
3037         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3038         .finishCommand
3040         * buildbot/slave/commands.py (SourceBase): set self.command for
3041         all VC commands, so they can be interrupted.
3043 2004-12-03  Brian Warner  <warner@lothar.com>
3045         * buildbot/master.py: clean up slave-handling code, to handle
3046         slave-disconnect and multiple-connect better
3047         (BotPerspective): make these long-lasting, exactly one per bot
3048         listed in the config file.
3049         (BotPerspective.attached): if a slave connects while an existing
3050         one appears to still be connected, disconnect the old one first.
3051         (BotPerspective.disconnect): new method to forcibly disconnect a
3052         buildslave. Use some hacks to empty the transmit buffer quickly to
3053         avoid the long (20-min?) TCP timeout that could occur if the old
3054         slave has dropped off the net.
3055         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3056         own their own SlaveStatus objects. Remove .attached/.detached, add
3057         .addSlave/.removeSlave, treat slaves like Builders (config file
3058         parsing sends deltas to the BotMaster). Inform the slave
3059         instances, i.e. the BotPerspective, about addBuilder and
3060         removeBuilder.
3061         (BotMaster.getPerspective): turns into a single dict lookup
3062         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3063         which gives BotPerspective.attached a chance to disconnect the old
3064         slave first.
3065         (BuildMaster.loadConfig): add code (disabled) to validate that all
3066         builders use known slaves (listed in c['bots']). The check won't
3067         work with tuple-specified builders, which are deprecated but not
3068         yet invalid, so the check is disabled for now.
3069         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3070         routine, do the add/changed/removed dance with them like we do
3071         with builders.
3072         (BuildMaster.loadConfig_Sources): move source-config into a
3073         separate routine too
3075         * buildbot/status/builder.py (Status.getSlave): get the
3076         SlaveStatus object from the BotPerspective, not the BotMaster.
3078         * buildbot/test/test_run.py: bunch of new tests for losing the
3079         buildslave at various points in the build, handling a slave that
3080         connects multiple times, and making sure we can interrupt a
3081         running build
3083         * buildbot/slave/bot.py (BuildSlave): make it possible to use
3084         something other than 'Bot' for the Bot object, to make certain
3085         test cases easier to write.
3086         (BuildSlave.waitUntilDisconnected): utility method for testing
3088 2004-11-30  Brian Warner  <warner@lothar.com>
3090         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3092         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3093         argument, return a Deferred that always fires with True or False.
3094         I don't use an errback to indicate 'ping failed' so that callers
3095         are free to ignore the deferred without causing spurious errors in
3096         the logs.
3097         * buildbot/process/builder.py (BuilderControl.ping): implement it
3099         * buildbot/test/test_run.py (Status.testDisappear): test ping
3100         (Status.disappearSlave): fix it
3102 2004-11-30  Brian Warner  <warner@lothar.com>
3104         * buildbot/interfaces.py (IBuildControl): add .stopBuild
3105         (IBuilderControl): add .getBuild(num), only works for the current
3106         build, of course, although it might be interesting to offer
3107         something for builds in the .waiting or .interlocked state.
3109         * buildbot/process/base.py (Build): have .stopBuild just do the
3110         interrupt, then let the build die by itself.
3111         (BuildControl): add .stopBuild, and add a point-event named
3112         'interrupt' just after the build so status viewers can tell that
3113         someone killed it.
3114         (BuilderControl): add .getBuild
3116         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3117         stops when you kill it, good for testing
3118         (ShellCommand.interrupt): add a logfile named 'interrupt' which
3119         contains the 'reason' text.
3121         * buildbot/status/html.py: Add Stop Build button, if the build can
3122         still be stopped. Send a Redirect (to the top page) one second
3123         later, hopefully long enough for the interrupt to have an effect.
3124         Move make_row() up to top-level to share it between Stop Build and
3125         Force Build.
3127         * buildbot/slave/commands.py: only kill the child process once
3129         * buildbot/test/test_run.py: add testInterrupt
3131 2004-11-29  Brian Warner  <warner@lothar.com>
3133         * buildbot/process/base.py: Refactor command interruption. The
3134         Build is now responsible for noticing that the slave has gone
3135         away: Build.lostRemote() interrupts the current step and makes
3136         sure that no further ones will be started.
3137         
3138         * buildbot/process/builder.py: When the initial remote_startBuild
3139         message fails, log it: this usually indicates that the slave has
3140         gone away, but we don't really start paying attention until they
3141         fail to respond to the first step's command.
3143         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3144         slave disconnect. Now sports a new interrupt() method. Error
3145         handling was simplified a lot by chaining deferreds, so
3146         remoteFailed/remoteComplete were merged into a single
3147         remoteComplete method (which can now get a Failure object).
3148         Likewise failed/finished were merged into just _finished.
3149         (BuildStep): Add interrupt(why) method, and if why is a
3150         ConnectionLost Failure then the step is failed with some useful
3151         error text.
3153         * buildbot/slave/bot.py: stop the current command when the remote
3154         Step reference is lost, and when the slave is shut down.
3155         (Bot): make it a MultiService, so it can have children. Use
3156         stopService to tell when the slave is shutting down.
3157         (SlaveBuilder): make it a Service, and a child of the Bot. Add
3158         remote_interruptCommand (which asks the current SlaveCommand to
3159         stop but allows it to keep emitting status messages), and
3160         stopCommand (which tells it to shut up and die).
3162         * buildbot/slave/commands.py: make commands interruptible
3163         (ShellCommand.kill): factor out os.kill logic
3164         (Command): factor out setup()
3165         (Command.sendStatus): don't send status if .running is false, this
3166         happens when the command has been halted.
3167         (Command.interrupt): new method, used to tell the command to die
3168         (SlaveShellCommand): implement .interrupt
3169         (DummyCommand): implement .interrupt
3170         (SourceBase, etc): factor out setup(), don't continue substeps if
3171         .interrupted is set
3173         * buildbot/status/builder.py: fix all waitUntilFinished() methods
3174         so they can be called after finishing
3176         * buildbot/test/test_run.py: new tests for disconnect behavior,
3177         refactor slave-shutdown routines, add different kinds of
3178         slave-shutdown
3180 2004-11-27  Brian Warner  <warner@lothar.com>
3182         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3183         method to express ETA time like "2m45s" instead of "165 seconds"
3185 2004-11-24  Brian Warner  <warner@lothar.com>
3187         * buildbot/test/test_vc.py (VC.testArch): unregister the test
3188         archive after the test completes, to avoid cluttering the user's
3189         'tla archives' listing with a bogus entry. Arch doesn't happen to
3190         provide any way to override the use of ~/.arch-params/, so there
3191         isn't a convenient way to avoid touching the setup of the user who
3192         runs the test.
3193         (VC_HTTP.testArchHTTP): same
3195 2004-11-23  Brian Warner  <warner@lothar.com>
3197         * buildbot/status/html.py (TextLog): split render() up into
3198         render_HEAD and render_GET. Use a Producer when sending log
3199         chunks, to reduce memory requirements and avoid sending huge
3200         non-Banana-able strings over web.distrib connections. Requires
3201         peeking under the covers of IStatusLog.
3202         (TextLog.resumeProducing): fix the "as text" link, handle client
3203         disconnects that occur while we're still sending old chunks.
3205         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3206         use defer.succeed, not the non-existent defer.success
3207         (LogFile.waitUntilFinished): same
3208         (LogFile.subscribe): don't add watchers to a finished logfile
3210         * buildbot/__init__.py (version): bump to 0.6.1+ while between
3211         releases
3213 2004-11-23  Brian Warner  <warner@lothar.com>
3215         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3217 2004-11-23  Brian Warner  <warner@lothar.com>
3219         * NEWS: update for the 0.6.1 release
3220         * MANIFEST.in: add new files
3222         * README (INSTALLATION): explain how to enable the extra VC tests
3224         * buildbot/status/builder.py (LogFile): add .runEntries at the class
3225         level to, so old pickled builds can be displayed ok
3227 2004-11-22  Brian Warner  <warner@lothar.com>
3229         * NEWS: summarize updates since last release
3231         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3232         Yoz Grahame. Closes SF#1050138.
3234         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3235         SF#1042563.
3237         * buildbot/process/step_twisted.py (Trial): update docs a bit
3239         * docs/factories.xhtml: fix Trial factory docs to match reality.
3240         Closes: SF#1049758.
3242         * buildbot/process/factory.py (Trial.__init__): add args for
3243         randomly= and recurse=, making them available to instantiators
3244         instead of only to subclassers. Closes: SF#1049759.
3246 2004-11-15  Brian Warner  <warner@lothar.com>
3248         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3249         try to teach the Quick factory to use multiple versions of python
3251 2004-11-12  Brian Warner  <warner@lothar.com>
3253         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3254         safer w32-compatible approach, and only use it on windows
3255         (BuildStatus.saveYourself): same
3257 2004-11-11  Brian Warner  <warner@lothar.com>
3259         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3260         it: one string merge per chunk. There are now separate .entries
3261         and .runEntries lists: when enumerating over all chunks, make sure
3262         to look at both.
3263         * buildbot/test/test_status.py (Log): more tests
3265         * buildbot/status/builder.py (LogFile.addEntry): Merge string
3266         chunks together, up to 10kb per chunk. This ought to cut down on
3267         the CPU-burning overhead of large log files. Thanks to Alexander
3268         Staubo for spotting the problem.
3269         * buildbot/test/test_status.py (Log): tests for same
3271 2004-11-10  Brian Warner  <warner@lothar.com>
3273         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3274         header to outbound mail
3275         * buildbot/test/test_status.py (Mail.testBuild1): test for same
3277 2004-11-08  Brian Warner  <warner@lothar.com>
3279         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3280         can't do os.rename() onto an existing file, so catch the exception
3281         and unlink the target file first. This introduces a slight window
3282         where the existing file could be lost, but the main failure case
3283         (disk full) should still be handled safely.
3284         (BuildStatus.saveYourself): same
3286         * buildbot/changes/pb.py (ChangePerspective): use a configurable
3287         separator character instead of os.sep, because the filenames being
3288         split here are coming from the VC system, which can have a
3289         different pathname convention than the local host. This should
3290         help a buildmaster running on windows that uses a CVS repository
3291         which runs under unix.
3292         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3294         * buildbot/process/step_twisted.py (Trial.createSummary): survive
3295         when there are no test failures to be parsed
3297         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3298         instead of the unix-specific os.system("cp"), thanks to Elliot
3299         Murphy for this and the other buildbot-vs-windows catches.
3300         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3302         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3303         echo the command as it is run
3305         * setup.py: install sample.mk too, not just sample.cfg
3306         (scripts): install contrib/windows/buildbot.bat on windows
3308 2004-11-07  Brian Warner  <warner@lothar.com>
3310         * buildbot/process/builder.py (Builder._detached): clear the
3311         self.currentBuild reference, otherwise the next build will be
3312         skipped because we think the Builder is already in use.
3314         * docs/examples/twisted_master.cfg: update to match current usage
3315         on the Twisted buildbot
3317 2004-10-29  Brian Warner  <warner@lothar.com>
3319         * buildbot/status/mail.py (MailNotifier): fix typo in docs
3321 2004-10-28  Brian Warner  <warner@lothar.com>
3323         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3324         have separate doVCUpdate/doVCFull methods. Catch an update failure
3325         and respond by clobbering the source directory and re-trying. This
3326         will handle local changes (like replacing a file with a directory)
3327         that will cause CVS and SVN updates to fail.
3328         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3330         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3331         python-2.4 warning
3333 2004-10-19  Brian Warner  <warner@lothar.com>
3335         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3337         * buildbot/status/html.py (StatusResourceTestResults): display any
3338         TestResults that the Build might have
3339         (StatusResourceTestResult): and the logs for each TestResult
3340         (StatusResourceBuild): add link from the per-build page
3342 2004-10-15  Brian Warner  <warner@lothar.com>
3344         * buildbot/process/step_twisted.py (Trial.createSummary): parse
3345         the 'problems' portion of stdout, add TestResults to our build
3346         * buildbot/test/test_twisted.py (Parse.testParse): test it
3348         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3349         to retrieve a dict of accumulated test results
3350         (ITestResult): define what a single test result can do
3351         * buildbot/status/builder.py (TestResult): implement ITestResult
3352         (BuildStatus.getTestResults): retrieve dict of TestResults
3353         (BuildStatus.addTestResult): add TestResults
3354         * buildbot/test/test_status.py (Results.testAddResults): test it
3356 2004-10-14  Brian Warner  <warner@lothar.com>
3358         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3359         instead of os.system("rm -rf") for win32 portability
3361         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3362         SignalMixin instead of starting/stopping the reactor, which is
3363         likely to cause problems with other tests
3365         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3366         self.copyComplete() call. Yoz Grahame makes the catch.
3368         * contrib/windows/buildbot.bat: helper script to deal with path
3369         issues. Thanks to Yoz Grahame.
3371         * buildbot/master.py (BuildMaster.startService): don't register a
3372         SIGHUP handler if the signal module has no SIGHUP attribute.
3373         Apparently win32 does this.
3375         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3377         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3378         test if the reactor can't offer UNIX sockets
3380         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3381         error introduced in the last commit. We really need that
3382         metabuildbot :).
3384 2004-10-12  Brian Warner  <warner@lothar.com>
3386         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3387         when describing a maildir source. Thanks to Stephen Davis.
3389         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3390         ETA seconds
3392         * buildbot/scripts/runner.py (createMaster): install Makefile too
3393         (start): add --no_save to 'start' command
3394         * buildbot/scripts/sample.mk: simple convenience Makefile with 
3395         start/stop/reload targets
3397         * buildbot/__init__.py (version): bump to 0.6.0+ while between
3398         releases
3400 2004-09-30  Brian Warner  <warner@lothar.com>
3402         * setup.py: Releasing buildbot-0.6.0
3404 2004-09-30  Brian Warner  <warner@lothar.com>
3406         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3407         test_trial.py from the source tarball until support is complete.
3409         * NEWS: update for 0.6.0 release
3410         * buildbot/__init__.py (version): same
3411         * README: same
3413         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3414         'source' command to tell users where to get the Buildbot source
3416         * docs/examples/*.cfg: update to modern standards
3418         * NEWS: update for release
3420         * buildbot/scripts/runner.py (createMaster): remove the
3421         -shutdown.tap stuff now that it isn't necessary
3422         (createSlave): same
3423         (start): launch buildbot.tap, not buildbot-shutdown.tap
3426         * buildbot/status/mail.py (Domain): shorten class name
3427         (MailNotifier): if lookup= is a string, pass it to Domain()
3428         * buildbot/test/test_status.py (Mail.testBuild1): new class name
3429         (Mail.testBuild2): test the string-to-Domain shortcut
3430         (Mail.testMail): fix test
3433         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3434         example config file
3436         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3437         more attributes on load
3438         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3439         to accomodate the whole waterfall page at once, and the thrashing
3440         results in a lot of unnecessary loads
3441         (BuildStatus.saveYourself): use binary pickles, not fluffy text
3442         (BuilderStatus.saveYourself): same
3443         (BuilderStatus.eventGenerator): stop generating on the first missing
3444         build. We assume that saved builds are deleted oldest-first.
3445         (BuildStepStatus.__getstate__): .progress might not exist
3447         * buildbot/changes/changes.py (ChangeMaster): make it
3448         serializable, in $masterdir/changes.pck
3449         (ChangeMaster.stopService): save on shutdown
3450         * buildbot/master.py (BuildMaster.loadChanges): load at startup
3451         * buildbot/test/test_config.py: load Changes before config file
3454         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3455         "Oh my god, you killed the command" header on a separate line
3457         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3458         skip over corrupted build pickles
3459         (BuilderStatus.getFullBuildByNumber): same
3460         (BuilderStatus.eventGenerator): skip over unavailable builds
3461         (BuildStatus.saveYourself): save builds to a .tmp file first, then
3462         do an atomic rename. This prevents a corrupted pickle when some
3463         internal serialization error occurs.
3464         (BuilderStatus.saveYourself): same
3466         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3467         the timeout for shell commands, it got lost somehow
3469         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3470         run out of build steps, return the rest of the builder events
3472         * buildbot/interfaces.py (IBuilderControl.ping): add method
3474         * buildbot/process/builder.py (BuilderControl.ping): move
3475         slave-ping to BuilderControl, and fix the failure case in the
3476         process (Event.finish() is the verb, Event.finished is the noun).
3478         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3479         through the BuilderControl instead of the BuilderStatus
3480         (EventBox): add adapter for builder.Event, allowing builder events to
3481         be displayed in the waterfall display
3483         * buildbot/master.py (BotMaster.stopService): add a 'master
3484         shutdown' event to the builder's log
3485         (BuildMaster.startService): and a 'master started' on startup
3487         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3488         builder events into the BuildStep event stream
3489         (Status.builderAdded): add a 'builder created' event
3492         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3493         command to announce the completion of a running build
3494         (IrcStatusBot.command_FORCE): announce when the build finishes
3496         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3497         don't evict unfinished builds from the cache: they must stay in
3498         the full-cache until their logfiles have stopped changing. Make
3499         sure the eviction loop terminates if an unfinished build was hit.
3500         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3501         This lets exceptions be dumped in an email status message. Really
3502         we need LogFiles which contain both text and HTML, instead of two
3503         separate classes.
3504         (BuildStatus.__getstate__): handle self.finished=False
3505         (Status.builderAdded): if the pickle is corrupted, abandon the
3506         history and create a new BuilderStatus object.
3508         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3509         self.progress attribute, helped one test which doesn't fully set
3510         up the Build object.
3512         * buildbot/interfaces.py (IStatusLogStub): split out some of the
3513         IStatusLog methods into an Interface that is implemented by "stub"
3514         logs, for which all the actual text chunks are on disk (in the
3515         pickled Build instance). To show the log contents, you must first
3516         adapt the stub log to a full IStatusLog object.
3518         * buildbot/status/builder.py (LogFileStub): create separate stub
3519         log objects, which can be upgraded to a real one if necessary.
3520         (LogFile): make them persistable, and let them stubify themselves
3521         (HTMLLogFile): same
3522         (BuildStepStatus): same
3523         (BuildStatus): same
3524         (BuildStatus.saveYourself): save the whole build out to disk
3525         (BuilderStatus): make it persistable
3526         (BuilderStatus.saveYourself): save the builder to disk
3527         (BuilderStatus.addFullBuildToCache): implement two caches which
3528         hold Build objects: a small one which holds full Builds, and a
3529         larger one which holds "stubbed" Builds (ones with their LogFiles
3530         turned into LogFileStubs). This reduces memory usage by the
3531         buildmaster by not keeping more than a few (default is 2) whole
3532         build logs in RAM all the time.
3533         (BuilderStatus.getBuild): rewrite to pull from disk (through the
3534         cache)
3535         (BuilderStatus.eventGenerator): rewrite since .builds went away
3536         (BuilderStatus.buildStarted): remove the .builds array. Add the
3537         build to the "full" cache when it starts.
3538         (BuilderStatus._buildFinished): save the build to disk when it
3539         finishes
3540         (Status): give it a basedir (same as the BuildMaster's basedir)
3541         where the builder pickles can be saved
3542         (Status.builderAdded): create the BuilderStatus ourselves, by
3543         loading a pickle from disk (or creating a new instance if there
3544         was none on disk). Return the BuilderStatus so the master can glue
3545         it into the new Builder object.
3547         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3548         all BuilderStatuses to save themselves out to disk. This is in
3549         lieu of saving anything important in the main Application pickle
3550          (the -shutdown.tap file).
3551         (BuildMaster.__init__): give Status() a basedir for its files
3552         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3553         to get the BuilderStatus, then give it to the Builder (instead of
3554         doing it the other way around). It's ok if the status announces
3555         the new Builder before it's really ready, as the outside world can
3556         only see the BuilderStatus object anyway (and it is ready before
3557         builderAdded returns). Use the builder's "builddir" (which
3558         normally specifies where the slave will run the builder) as the
3559         master's basedir (for saving serialized builds).
3561         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3562         coerce the logfile to IStatusLog before trying to get the text
3563         chunks out of it. This will pull the full (non-stubified) Build in
3564         from disk if necessary.
3565         (TextLog): fix the adapter registration
3567         * buildbot/test/test_control.py (Force.setUp): create the basedir
3568         * buildbot/test/test_web.py: same
3569         * buildbot/test/test_vc.py (SetupMixin.setUp): same
3570         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3571         * buildbot/test/test_run.py (Run.testMaster): same
3572         (Status.setUp): same
3574 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
3576         * buildbot/status/html.py (Waterfall.__init__): store actual
3577         allowForce flag passed in rather than using True for everyone;
3578         make sure setting it to False doesn't cause a NameError
3579         (Waterfall.setup).
3580         (StatusResourceBuilder.__init__) add the builder name to the page
3581         title.
3582         (StatusResourceBuilder.body) move HTML generation for a name/value
3583         row into a helper method (StatusResourceBuilder.make_row); only
3584         generate the "Force Build" form if allowForce was True and the
3585         slave is connected.  Use class attributes in the generated HTML to
3586         spread a little CSS-joy.
3588 2004-09-28  Brian Warner  <warner@lothar.com>
3590         * buildbot/process/step_twisted.py (Trial.createSummary): fix
3591         warning-scanner to not ignore things like
3592         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3594         * buildbot/status/html.py (StatusResource.control): add some
3595         class-level values for .control in an attempt to make upgrading
3596         smoother
3598         * buildbot/util.py (ComparableMixin): survive missing attributes,
3599         such as when a class is modified and we're comparing old instances
3600         against new ones
3602         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3603         failure handling, remove a redundant try/except block. Don't
3604         return the full traceback to the IRC channel.
3605         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3606         error messages. Get ETA properly.
3608         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3609         the reason, since (at least) IRC message will have <> in them.
3610         (StatusResourceBuilder.__init__): take an IBuilderControl
3611         (StatusResourceBuilder.force): use the IBuilderControl we get in
3612         the constructor instead of trying to make our own. Catch the
3613         new exceptions and ignore them for now (until we make an
3614         intermediate web page where we could show the error message)
3615         (StatusResource): create with an IControl, use it to give an
3616         IBuilderControl to all children
3617         (Waterfall): take an allowForce= option, pass an IControl object
3618         to StatusResource if it is True
3620         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3622         * buildbot/master.py (BotPerspective.perspective_forceBuild):
3623         catch new exceptions and return string forms
3625         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3626         * buildbot/process/builder.py (Builder.forceBuild): raise them
3627         * buildbot/test/test_control.py (Force.testNoSlave): new test
3628         (Force.testBuilderInUse): same
3631         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3633         * buildbot/test/test_run.py: use IControl
3634         * buildbot/test/test_vc.py: same
3636         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3637         to use IControl. Still offline.
3638         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3640         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3641         who=None so periodic builds don't send out status mail
3642         (Builder.forceBuild): include reason in the log message
3643         (BuilderControl.forceBuild): rename 'name' to 'who'
3645         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3646         'who' parameter, but make it None by default so builds forced by
3647         slave admins don't cause status mail to be sent to anybody
3648         (BotMaster.forceBuild): same. this method is deprecated.
3649         (DebugPerspective.perspective_forceBuild): same, use IControl.
3650         (DebugPerspective.perspective_fakeChange): use IControl..
3651         (Dispatcher.requestAvatar): .. so don't set .changemaster
3653         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3654         parameter to avoid confusion with the name of the builder
3657         * buildbot/status/mail.py: refine comment about needing 2.3
3659         * buildbot/status/html.py: move all imports to the top
3661         * buildbot/test/test_control.py: test new interfaces
3662         * buildbot/test/test_run.py (Status): handle new interfaces
3663         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3665         * buildbot/process/base.py (BuildControl): implement IBuildControl
3666         and its lonely getStatus() method
3668         * buildbot/process/builder.py (BuilderControl): implement
3669         IBuilderControl, obtained by adapting the Builder instance
3670         (Builder.startBuild): return a BuilderControl instead of a
3671         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3672         accomplish the same thing.
3674         * buildbot/master.py: move all import statements to the top
3675         (Control): implement IControl, obtained by adapting the
3676         BuildMaster instance.
3678         * buildbot/interfaces.py: add IControl, IBuilderControl, and
3679         IBuildControl. These are used to force builds. Eventually they
3680         will provide ways to reconfigure the Builders, pause or abandon a
3681         Build, and perhaps control the BuildMaster itself.
3683 2004-09-26  Brian Warner  <warner@lothar.com>
3685         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3686         ends up comparing us against something without a .__class__
3688 2004-09-24  Brian Warner  <warner@lothar.com>
3690         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3691         usage text right.
3693         * Makefile: add 'deb-snapshot' target, to create a timestamped
3694         .deb package
3696         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3698 2004-09-23  Brian Warner  <warner@lothar.com>
3700         * buildbot/__init__.py (version): move version string here
3701         * setup.py: get version string from buildbot.version
3702         * buildbot/status/html.py (WaterfallStatusResource.body): add
3703         buildbot version to the page footer
3704         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3705         version when asked
3707         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3708         slaves, let the second know where the first one is coming from
3709         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3710         see our exceptions. It would be nice if there were a way to just
3711         send them the exception type and value, not the full traceback.
3714         * buildbot/status/mail.py (MailNotifier): add a new argument
3715         sendToInterestedUsers=, which can be set to False to disable the
3716         usual send-to-blamelist behavior.
3717         (top): handle python-2.2 which has no email.MIMEMultipart
3718         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3719         (MailNotifier.disownServiceParent): unsubscribe on removal
3721         * buildbot/test/test_status.py (Mail.testBuild2): test it
3724         * buildbot/status/progress.py (Expectations.wavg): tolerate
3725         current=None, which happens when steps start failing badly
3726         * buildbot/test/test_status.py (Progress.testWavg): test for it
3728         * buildbot/process/step.py (SVN.startVC): when the (old) slave
3729         doesn't understand args['revision'], emit a warning instead of
3730         bailing completely. Updating to -rHEAD is probably close enough.
3732         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3734         * buildbot/test/test_status.py: at least import bb.status.client
3735         even if we don't have any test coverage for it yet
3737         * contrib/svn_buildbot.py: don't require python2.3
3738         (main): wait, do require it (for sets.py), but explain how to
3739         make it work under python2.2
3741 2004-09-23  Brian Warner  <warner@lothar.com>
3743         * contrib/svn_buildbot.py: include the revision number in the Change
3745         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3746         using util.now() because FreshCVS is a realtime service
3748         * buildbot/status/event.py: delete dead code
3749         * buildbot/process/step.py: don't import dead Event class
3750         * buildbot/process/step_twisted.py: same
3751         * buildbot/status/builder.py: same
3752         * buildbot/status/client.py: same
3754         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3756         * buildbot/changes/changes.py (Change): set .when from an __init__
3757         argument (which defaults to now()), rather than having
3758         ChangeMaster.addChange set it later.
3759         (ChangeMaster.addChange): same
3761         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3762         (parseSyncmail): same. Just use util.now() for now.
3763         (parseBonsaiMail): parse the timestamp field for when=
3765         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3766         instead of setting .when after the fact
3768 2004-09-22  slyphon
3770         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3771         results when the target project uses retrial. Still under
3772         development.
3773         * buildbot/test/test_trial.py: same
3775 2004-09-21  Brian Warner  <warner@lothar.com>
3777         * buildbot/status/mail.py (MailNotifier.__init__): include
3778         success/warnings/failure in the Subject line
3779         (MailNotifier.buildMessage): add the buildbot's URL to the body,
3780         use step.logname for the addLogs=True attachment filenames
3781         * buildbot/test/test_status.py (Mail): test Subject lines
3782         (Mail.testLogs): test attachment filenames
3784         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3785         accept a 'who' argument from the debug tool
3786         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3787         * contrib/debug.glade: add text box to set 'who'
3789         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3790         .getBuilderName with .getBuilder().getName(), more flexible
3791         (IStatusLog.getName): logs have short names, but you can prefix
3792         them with log.getStep().getName() to make them more useful
3793         * buildbot/status/builder.py: same
3794         * buildbot/status/client.py: same
3795         * buildbot/status/html.py: same
3796         * buildbot/test/test_run.py (Status.testSlave): same
3797         * buildbot/process/step.py: tweak logfile names
3799         * buildbot/status/mail.py (MailNotifier): add lookup, change
3800         argument to extraRecipients. The notifier is now aimed at sending
3801         mail to the people involved in a particular build, with additional
3802         constant recipients as a secondary function.
3804         * buildbot/test/test_status.py: add coverage for IEmailLookup,
3805         including slow-lookup and failing-lookup. Make sure the blamelist
3806         members are included.
3808         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3809         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3810         (IBuildStatus.getInterestedUsers): new method
3811         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3812         * buildbot/status/client.py (remote_getResponsibleUsers): same
3813         * buildbot/status/html.py (StatusResourceBuild.body): same
3814         * buildbot/test/test_run.py (Status.testSlave): same
3816 2004-09-20  Brian Warner  <warner@lothar.com>
3818         * docs/users.xhtml: update concepts
3820         * Makefile: add a convenience makefile, for things like 'make
3821         test'. It is not included in the source tarball.
3823 2004-09-16  Brian Warner  <warner@lothar.com>
3825         * NEWS: mention /usr/bin/buildbot, debian/*
3827         * debian/*: add preliminary debian packaging. Many thanks to
3828         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3829         it considerably since it left their hands, I am responsible for
3830         all breakage that's resulted.
3832         * bin/buildbot: create a top-level 'buildbot' command, to be
3833         installed in /usr/bin/buildbot . For now it's just a simple
3834         frontend to mktap/twistd/kill, but eventually it will be the entry
3835         point to the 'try' command and also a status client. It is also
3836         intended to support the upcoming debian-packaging init.d scripts.
3837         * buildbot/scripts/runner.py: the real work is done here
3838         * buildbot/scripts/__init__.py: need this too
3839         * buildbot/scripts/sample.cfg: this is installed in new
3840         buildmaster directories
3841         * setup.py: install new stuff
3843 2004-09-15  Brian Warner  <warner@lothar.com>
3845         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3846         'file:' schema (the version shipped with OS-X was built without the
3847         ra_local plugin).
3848         (SetupMixin.tearDown): stop the goofy twisted.web timer which
3849         updates the log-timestamp, to make sure it isn't still running after
3850         the test finishes
3852         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3853         values to the config file.
3854         * docs/examples/hello.cfg: add examples
3855         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3856         * buildbot/status/builder.py (Status.getProjectURL): implement them
3857         * buildbot/master.py (BuildMaster.loadConfig): set them from config
3858         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3859         * buildbot/status/html.py (WaterfallStatusResource): display them
3862         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3863         certain error cases don't suffer a secondary exception.
3864         (top): Skip tests if the corresponding VC tool is not installed.
3866         * buildbot/process/factory.py (Trial): introduce separate
3867         'buildpython' and 'trialpython' lists, since trialpython=[] is
3868         what you want to invoke /usr/bin/python, whereas ./setup.py is
3869         less likely to be executable. Add env= parameter to pass options
3870         to test cases (which is how I usually write tests, I don't know if
3871         anyone else does it this way).
3873         * buildbot/process/step_twisted.py (Trial): handle python=None.
3874         Require 'testpath' be a string, not a list. Fix tests= typo.
3875         (Trial.start): sanity-check any PYTHONPATH value for stringness.
3877         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3878         way to deal with the possibility of removing the disconnect notify
3879         twice.
3880         (CVS): add a 'login' parameter to give a password to 'cvs login',
3881         commonly used with pserver methods (where pw="" or pw="guest")
3883         * buildbot/slave/commands.py (SourceBase): move common args
3884         extraction and setup() to __init__, so everything is ready by the
3885         time setup() is called
3886         (CVS.start): call 'cvs login' if a password was supplied
3887         (ShellCommand): special-case PYTHONPATH: prepend the master's
3888         value to any existing slave-local value.
3890         * buildbot/process/builder.py (Builder.updateBigStatus): if we
3891         don't have a remote, mark the builder as Offline. This whole
3892         function should probably go away and be replaced by individual
3893         deltas.
3894         (Builder.buildFinished): return the results to the build-finished
3895         deferred callback, helps with testing
3897 2004-09-14  Brian Warner  <warner@lothar.com>
3899         * buildbot/test/test_vc.py: put all the repositories needed to run
3900         the complete tests into a single small (1.3MB) tarball, so I can
3901         make that tarball available on the buildbot web site. Test HTTP
3902         access (for Arch and Darcs) by spawning a temporary web server
3903         while the test runs.
3905         * docs/users.xhtml: new document, describe Buildbot's limited
3906         understanding of different human users
3908         * buildbot/test/test_vc.py: rearrange test cases a bit
3910         * buildbot/process/step_twisted.py (Trial): handle testpath=
3911         * buildbot/process/factory.py (Trial): update to use step.Trial
3913         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3915         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3916         the overall build text (which gives you 'failed 2 tests' rather
3917         than just 'failed')
3918         (BuildStepStatus.text2): default to [], not None
3920         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3921         must be a list
3923 2004-09-12  Brian Warner  <warner@lothar.com>
3925         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3926         log the whole exception if it's just an AttributeError (old slave)
3928         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3929         so (e.g.) sub-commands can be run in the right directory.
3930         (ShellCommand.start): accept an optional errorMessage= argument
3931         to make life easier for SVN.start
3932         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3933         headers
3934         (ShellCommand.start): move ['dir'] compatibility hack..
3935         (RemoteShellCommand.start): .. to here so everyone can use it
3937         * buildbot/process/step_twisted.py (Trial): use .workdir
3939         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3940         text displayed when debuild fails completely
3941         (Trial): snarf _trial_temp/test.log from the slave and display it
3943 2004-09-11  Brian Warner  <warner@lothar.com>
3945         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3947         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3948         set to 'twisted', so --recurse can find twisted/web/test/*, etc
3950         * buildbot/process/step.py (ShellCommand): call .createSummary
3951         before .evaluateCommand instead of the other way around. This
3952         makes it slightly easier to count warnings and then use that to
3953         set results=WARNINGS
3954         * buildbot/process/step_twisted.py: cosmetic, swap the methods
3956         * buildbot/process/base.py (Build.buildFinished): update status
3957         before doing progress. It's embarrassing for the build to be stuck
3958         in the "building" state when an exceptions occurs elsewhere..
3960         * buildbot/status/progress.py (Expectations.expectedBuildTime):
3961         python2.2 doesn't have 'sum'
3963         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
3964         to prevent clients from accidentally sorting it
3966         * buildbot/master.py (Manhole): add username/password
3967         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
3968         c['manholePort'], deprecate old usage
3969         * docs/config.xhtml: document c['manhole']
3970         * docs/examples/hello.cfg: show example of using a Manhole
3973         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
3974         pretend the slave is up to date
3976         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
3977         the module, overlaps with 'log', the local variable
3979         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
3981         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
3982         new method to let Steps find out the version of their
3983         corresponding SlaveCommand.
3984         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
3985         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
3986         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
3987         (SVN.startVC): same
3988         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
3989         (Arch.startVC): same
3990         (P4Sync.startVC): same
3992         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
3993         Deferred so we can catch errors in remote_startCommand
3994         (RemoteShellCommand.start): same
3996         * docs/examples/twisted_master.cfg: update sample config file
3998         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
3999         after connectionMade() is called, not before. Close stdin at that
4000         point too.
4002         * buildbot/process/process_twisted.py: update to use Trial, clean
4003         up argument passing (move to argv arrays instead of string
4004         commands)
4006         * buildbot/process/step_twisted.py (Trial): new step to replace
4007         RunUnitTests, usable by any trial-using project (not just
4008         Twisted). Arguments have changed, see the docstring for details.
4010         * buildbot/process/base.py (Build.startBuild): this now returns a
4011         Deferred. Exceptions that occur during setupBuild are now
4012         caught better and lead to fewer build_status weirdnesses, like
4013         finishing a build that was never started.
4014         (Build.buildFinished): fire the Deferred instead of calling
4015         builder.buildFinished directly. The callback argument is this
4016         Build, everything else can be extracted from it, including the
4017         new build.results attribute.
4018         * buildbot/process/builder.py (Builder.startBuild): same
4019         (Builder.buildFinished): same, extract results from build
4021         * buildbot/process/step.py (ShellCommands): remove dead code
4023 2004-09-08  Brian Warner  <warner@lothar.com>
4025         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4026         doesn't try to use the leftover patched workdir
4027         (SourceStamp): test source-stamp computation for CVS and SVN
4029         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4030         patched workdir ('touch .buildbot-patched') so we don't try to
4031         update it later
4032         (SourceBase.start): add ['revision'] for all Source steps
4033         (CVS): change args: use ['branch'] for -r, remove ['files']
4034         (CVS.buildVC): fix revision/branch stuff
4035         (SVN): add revision stuff
4037         * buildbot/process/step.py (BuildStep.__init__): reject unknown
4038         kwargs (except 'workdir') to avoid silent spelling errors
4039         (ShellCommand.__init__): same
4040         (Source): new base class for CVS/SVN/etc. Factor out everything
4041         common, add revision computation (perform the checkout with a -D
4042         DATE or -r REVISION that gets exactly the sources described by the
4043         last Change), overridable with step.alwaysUseLatest. Add patch
4044         handling (build.getSourceStamp can trigger the use of a base
4045         revision and a patch).
4046         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4047         * docs/steps.xhtml: update docs
4048         * docs/source.xhtml: mention .checkoutDelay
4049         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4051         * buildbot/process/base.py (Build.setSourceStamp): add a
4052         .sourceStamp attribute to each Build. If set, this indicates that
4053         the build should be done with something other than the most
4054         recent source tree. This will be used to implement "try" builds.
4055         (Build.allChanges): new support method
4056         (Build.lastChangeTime): remove, functionality moved to Source steps
4057         (Build.setupBuild): copy the Step args before adding ['workdir'],
4058         to avoid modifying the BuildFactory (and thus triggering spurious
4059         config changes)
4062         * buildbot/status/html.py: rename s/commits/changes/
4063         (StatusResourceChanges): same
4064         (CommitBox.getBox): same, update URL
4065         (WaterfallStatusResource): same
4066         (StatusResource.getChild): same
4068         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4069         * contrib/debug.glade: add optional 'revision' to the fakeChange
4071         * buildbot/changes/changes.py (html_tmpl): display .revision
4072         (ChangeMaster.addChange): note .revision in log
4073         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4074         accept a ['revision'] attribute
4076         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4078         * buildbot/master.py (BotMaster.getPerspective): update the
4079         .connected flag in SlaveStatus when it connects
4080         (BotMaster.detach): and when it disconnects
4081         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4082         (BuildMaster.loadConfig_Builders): walk old list correctly
4084         * buildbot/test/test_config.py: fix prefix= usage
4086 2004-09-06  Brian Warner  <warner@lothar.com>
4088         * NEWS: mention P4
4090         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4091         poll a P4 depot looking for recent changes. Thanks to Dave
4092         Peticolas for the contribution. Probably needs some testing after
4093         I mangled it.
4095         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4096         requires manual client setup for each buildslave. Rather
4097         experimental. Thanks again to Dave Peticolas.
4098         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4100         * buildbot/changes/changes.py (Change): add a .revision attribute,
4101         which will eventually be used to generate source-stamp values.
4103         * buildbot/process/step.py (RemoteCommand.start): use
4104         notifyOnDisconnect to notice when we lose the slave, then treat it
4105         like an exception. This allows LogFiles to be closed and the build
4106         to be wrapped up normally. Be sure to remove the disconnect
4107         notification when the step completes so we don't accumulate a
4108         bazillion such notifications which will fire weeks later (when the
4109         slave finally disconnects normally). Fixes SF#915807, thanks to
4110         spiv (Andrew Bennetts) for the report.
4111         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4112         really isn't Logged- specific
4113         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4114         header, since it's almost always going to be appended to an
4115         incomplete line
4116         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4117         update test to handle use of notifyOnDisconnect
4119         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4120         don't clear .ETA and .currentBuild when going offline, let the
4121         current build clean up after itself
4123         * buildbot/process/builder.py (Builder.detached): wait a moment
4124         before doing things like stopping the current build, because the
4125         current step will probably notice the disconnect and cleanup the
4126         build by itself
4127         * buildbot/test/test_run.py (Status.tearDown): update test to
4128         handle asynchronous build-detachment
4130         * buildbot/process/base.py (Build.stopBuild): minor shuffles
4132         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4133         hush a debug message
4135 2004-09-05  Brian Warner  <warner@lothar.com>
4137         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4138         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4139         kernels do this: the fcntl module has the F_NOTIFY constant, but
4140         the kernel itself doesn't support the operation. Thanks to Olly
4141         Betts for spotting the problem.
4143         * buildbot/process/step.py (Darcs): new source-checkout command
4144         (Arch): new source-checkout command
4145         (todo_P4): fix constructor syntax, still just a placeholder
4146         * buildbot/test/test_vc.py (VC.testDarcs): test it
4147         (VC.testDarcsHTTP): same, via localhost HTTP
4148         (VC.testArch): same
4149         (VC.testArchHTTP): same
4150         * NEWS: mention new features
4152         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4153         which tells the step to stash stdout text locally (in .stdout).
4154         Slave-side Commands can use this to make decisions based upon the
4155         output of the the ShellCommand (not just the exit code).
4156         (Darcs): New source-checkout command
4157         (Arch): New source-checkout command, uses .keepStdout in one place
4158         where it needs to discover the archive's default name.
4160         * docs/steps.xhtml: Document options taken by Darcs and Arch.
4161         * docs/source.xhtml: add brief descriptions of Darcs and Arch
4162         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4164         * buildbot/process/step.py (ShellCommand.describe): add an
4165         alternate .descriptionDone attribute which provides descriptive
4166         text when the step is complete. .description can be ["compiling"],
4167         for use while the step is running, then .descriptionDone can be
4168         ["compile"], used alone when the step succeeds or with "failed" when
4169         it does not. Updated other steps to use the new text.
4170         * buildbot/process/step_twisted.py: same
4171         * buildbot/test/test_run.py: update tests to match
4173 2004-08-30  Brian Warner  <warner@lothar.com>
4175         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4176         (CVS.__init__): send 'patch' argument to slave
4177         (CVS.start): don't create the LoggedRemoteCommand until start(),
4178         so we can catch a .patch added after __init__
4179         (SVN.__init__): add 'patch' to SVN too
4180         (SVN.start): same
4182         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4183         argument, to let commands push data into the process' stdin pipe.
4184         Move usePTY to a per-instance attribute, and clear it if 'stdin'
4185         is in use, since closing a PTY doesn't really affect the process
4186         in the right way (in particular, I couldn't run /usr/bin/patch
4187         under a pty).
4188         (SourceBase.doPatch): handle 'patch' argument
4190         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4191         both CVS and SVN
4193         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4194         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4195         versions to master
4196         * buildbot/master.py (BotPerspective.got_commands): get command
4197         versions from slave, give to each builder
4198         * buildbot/process/builder.py (Builder.attached): stash slave
4199         command versions in .remoteCommands
4201         * docs/steps.xhtml: bring docs in-line with reality
4203         * buildbot/process/step.py (CVS.__init__): more brutal
4204         compatibility code removal
4205         (SVN.__init__): same
4207         * buildbot/slave/commands.py (SlaveShellCommand): update docs
4208         (SlaveShellCommand.start): require ['workdir'] argument, remove
4209         the ['dir'] fallback (compatibility will come later)
4210         (SourceBase): update docs
4211         (SourceBase.start): remove ['directory'] fallback
4212         (CVS): update docs
4213         (SVN): update docs
4214         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4215         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4216         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4218         * buildbot/process/step.py (RemoteShellCommand.__init__): add
4219         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4220         code.. I will figure out 0.5.0-compatibility hooks later)
4222 2004-08-30  Brian Warner  <warner@lothar.com>
4224         * buildbot/process/process_twisted.py: rewrite in terms of new
4225         BuildFactory base class. It got significantly shorter. Yay
4226         negative code days.
4228         * buildbot/process/step_twisted.py (HLint.start): fix to make it
4229         work with the new "self.build isn't nailed down until we call
4230         step.start()" scheme: specifically, __init__ is called before the
4231         build has decided on which Changes are going in, so we don't scan
4232         build.allFiles() for .xhtml files until start()
4233         (HLint.commandComplete): use getText(), not getStdout()
4234         (RunUnitTests.start): same: don't use .build until start()
4235         (RunUnitTests.describe): oops, don't report (None) when using
4236         the default reactor
4237         (RunUnitTests.commandComplete): use getText()
4238         (RunUnitTests.createSummary): same
4239         (BuildDebs.commandComplete): same
4241         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4242         set args['command'] until start(), since our BuildStep is allowed
4243         to change their mind up until that point
4244         (TreeSize.commandComplete): use getText(), not getStdout()
4246         * docs/examples/twisted_master.cfg: update to current standards
4248         * docs/factories.xhtml: update
4249         * buildbot/process/factory.py: implement all the common factories
4250         described in the docs. The Trial factory doesn't work yet, and
4251         I've probably broken all the process_twisted.py factories in the
4252         process. There are compatibility classes left in for things like
4253         the old BasicBuildFactory, but subclasses of them are unlikely to
4254         work.
4255         * docs/examples/glib_master.cfg: use new BuildFactories
4256         * docs/examples/hello.cfg: same
4258         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4259         explicit 'workdir' args
4261         * buildbot/process/base.py (BuildFactory): move factories to ..
4262         * buildbot/process/factory.py (BuildFactory): .. here
4263         * buildbot/process/process_twisted.py: handle move
4264         * buildbot/test/test_config.py: same
4265         * buildbot/test/test_run.py: same
4266         * buildbot/test/test_steps.py: same
4267         * buildbot/test/test_vc.py: same
4268         * docs/factories.xhtml: same
4270         * NEWS: mention config changes that require updating master.cfg
4272         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4273         argument to all steps that weren't given one already, pointing at
4274         the "build/" directory.
4276         * docs/examples/hello.cfg: remove explicit 'workdir' args
4278         * docs/factories.xhtml: document standard BuildFactory clases,
4279         including a bunch which are have not yet been written
4281 2004-08-29  Brian Warner  <warner@lothar.com>
4283         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4284         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4285         buildbot.status.builder so they aren't quite so internal
4286         * buildbot/process/base.py, buildbot/process/builder.py: same
4287         * buildbot/process/maxq.py, buildbot/process/step.py: same
4288         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4289         * buildbot/status/mail.py, buildbot/test/test_run.py: same
4290         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4292         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4293         to handle new getLogs()-returns-list behavior
4294         (StatusResourceBuildStep.getChild): same
4295         (StepBox.getBox): same
4296         (WaterfallStatusResource.phase0): same
4298         * docs/source.xhtml: document how Buildbot uses version-control
4299         systems (output side: how we get source trees)
4300         * docs/changes.xhtml: rename from sources.xhtml, documents VC
4301         systems (input side: how we learn about Changes)
4303         * buildbot/master.py (Manhole): use ComparableMixin
4304         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4305         * buildbot/changes/mail.py (MaildirSource): same
4306         * buildbot/status/client.py (PBListener): same
4307         * buildbot/status/html.py (Waterfall): same
4308         * buildbot/status/words.py (IRC): same
4310         * NEWS: start describing new features
4312         * buildbot/status/mail.py (MailNotifier): finish implementation.
4313         The message body is still a bit sparse.
4314         * buildbot/test/test_status.py (Mail): test it
4316         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4317         and __hash__ methods I wind up adding everywhere. Specifically
4318         intended to support the buildbot config-file update scheme where
4319         we compare, say, the old list of IStatusTargets against the new
4320         one and don't touch something which shows up on both lists.
4321         * buildbot/test/test_util.py (Compare): test case for it
4323         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4324         return a list instead of a dict
4325         (IBuildStepStatus.getLogs): same. The idea is that steps create
4326         logs with vaguely unique names (although their uniqueness is not
4327         guaranteed). Thus a compilation step should create its sole
4328         logfile with the name 'compile', and contribute it to the
4329         BuildStatus. If a step has two logfiles, try to create them with
4330         different names (like 'test.log' and 'test.summary'), and only
4331         contribute the important ones to the overall BuildStatus.
4332         * buildbot/status/builder.py (Event.getLogs): same
4333         (BuildStepStatus): fix default .text and .results
4334         (BuildStepStatus.addLog): switch to list-like .getLogs()
4335         (BuildStepStatus.stepFinished): same
4336         (BuildStatus.text): fix default .text
4337         (BuildStatus.getLogs): temporary hack to return all logs (from all
4338         child BuildStepStatus objects). Needs to be fixed to only report
4339         the significant ones (as contributed by the steps themselves)
4340         * buildbot/test/test_run.py: handle list-like .getLogs()
4341         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4343 2004-08-28  Brian Warner  <warner@lothar.com>
4345         * buildbot/process/builder.py (Builder.attached): serialize the
4346         attachment process, so the attach-watcher isn't called until the
4347         slave is really available. Add detached watchers too, which makes
4348         testing easier.
4350         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4352         * buildbot/test/test_swap.py: remove dead code
4354         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4355         (ShellCommand.start): treat errors in _startCommand/spawnProcess
4356         sort of as if the command being run exited with a -1. There may
4357         still be some holes in this scheme.
4358         (CVSCommand): add 'revision' tag to the VC commands, make sure the
4359         -r option appears before the module list
4360         * buildbot/process/step.py (CVS): add 'revision' argument
4362         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4363         when sending updates or stepComplete messages to the master, since
4364         we don't currently care whether they arrive or not. When we revamp
4365         the master/slave protocol to really resume interrupted builds,
4366         this will need revisiting.
4367         (lostRemote): remove spurious print
4369         * buildbot/master.py (BotPerspective.attached): serialize the
4370         new-builder interrogation process, to make testing easier
4371         (BotMaster.waitUntilBuilderDetached): convenience function
4373         * buildbot/status/builder.py (BuilderStatus): prune old builds
4374         (BuildStatus.pruneSteps): .. and steps
4375         (BuildStepStatus.pruneLogs): .. and logs
4376         (BuilderStatus.getBuild): handle missing builds
4377         * buildbot/status/html.py (StatusResourceBuild.body): display build
4378         status in the per-build page
4379         (BuildBox.getBox): color finished builds in the per-build box
4381 2004-08-27  Brian Warner  <warner@lothar.com>
4383         * buildbot/status/mail.py (MailNotifier): new notification class,
4384         not yet finished
4386         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4387         variants of a common base class which handles all the mode= logic
4389         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4390         convenience method
4391         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4393 2004-08-26  Brian Warner  <warner@lothar.com>
4395         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4396         interfaces
4398         * buildbot/test/test_run.py: update to new Logfile interface, new
4399         buildbot.slave modules
4400         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4402         * MANIFEST.in: new sample config file
4403         * docs/examples/hello.cfg: same
4405         * buildbot/process/step_twisted.py: remove dead import
4407         * buildbot/process/step.py (RemoteCommand.run): catch errors
4408         during .start
4409         (RemoteCommand.remote_update): ignore updates that arrive after
4410         we've shut down
4411         (RemoteCommand.remote_complete): ignore duplicate complete msgs
4412         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4413         the responsibilities of the subclass's methods
4414         (BuildStep.failed): catch errors during failure processing
4415         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4416         (CVS): move to a mode= argument (described in docstring), rather
4417         than the ungainly clobber=/export=/copydir= combination.
4418         (SVN): add mode= functionality to SVN too
4419         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4421         * buildbot/process/base.py (Build.startNextStep): catch errors
4422         during s.startStep()
4424         * buildbot/clients/base.py: update to new PB client interface.
4425         gtkPanes is still broken
4427         * buildbot/bot.py, buildbot/slavecommand.py: move to..
4428         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4429         * setup.py: add buildbot.slave module
4430         * buildbot/bb_tap.py: handle move
4431         * buildbot/slave/registry.py: place to register commands, w/versions
4432         * buildbot/slave/bot.py: major simplifications
4433         (SlaveBuilder.remote_startCommand): use registry for slave commands,
4434         instead of a fixed table. Eventually this will make the slave more
4435         extensible. Use 'start' method on the command, not .startCommand.
4436         Fix unsafeTracebacks handling (I think).
4437         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4438         helper class with a .start method that returns a Deferred.
4439         SlaveShellCommand is the form reached by the buildmaster. Commands
4440         which use multiple ShellCommands can just chain them as Deferreds,
4441         with some helper methods in Command (_abandonOnFailure and
4442         _checkAbandoned) to bail on rc!=0.
4443         (CVSCommand): prefer new mode= argument
4444         (SVNFetch): add mode= argument
4446         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4447         put a useful reason string on the build
4449         * buildbot/status/builder.py (LogFile): do LogFile right: move the
4450         core functionality into an IStatusLog object
4451         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4452         * buildbot/status/html.py (TextLog): HTML-rendering goes here
4453         (StatusResourceBuild.body): use proper accessor methods
4454         * buildbot/status/client.py (RemoteLog): PB-access goes here
4455         (StatusClientPerspective.perspective_subscribe): add "full" mode,
4456         which delivers log contents too
4457         (PBListener.__cmp__): make PBListeners comparable, thus removeable
4458         * buildbot/status/event.py: remove old Logfile completely
4460         * buildbot/interfaces.py (IStatusLog.subscribe): make the
4461         subscription interface for IStatusLog subscriptions just like all
4462         other the status subscriptions
4463         (IStatusReceiver.logChunk): method called on subscribers
4465 2004-08-24  Brian Warner  <warner@lothar.com>
4467         * buildbot/process/builder.py (Builder._pong): oops, ping response
4468         includes a result (the implicit None returned by remote_print).
4469         Accept it so the _pong method handles the response correctly.
4471 2004-08-06  Brian Warner  <warner@lothar.com>
4473         * buildbot/test/test_config.py: update IRC, PBListener tests
4475         * buildbot/status/client.py (StatusClientPerspective): total
4476         rewrite to match new IStatus interfaces. New subscription scheme.
4477         There are still a few optimizations to make (sending down extra
4478         information with event messages so the client doesn't have to do a
4479         round trip). The logfile-retrieval code is probably still broken.
4480         Moved the PB service into its own port, you can no longer share a
4481         TCP socket between a PBListener and, say, the slaveport (this
4482         should be fixed eventually).
4483         * buildbot/clients/base.py (Client): revamp to match. still needs
4484         a lot of work, but basic event reporting works fine. gtkPanes is
4485         completely broken.
4487         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4488         instance talks to a single irc server. Threw out all the old
4489         multi-server handling code. Still need to add back in
4490         builder-control (i.e. "force build")
4492         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4493         more random text to the as-yet-unreachable per-step page
4495         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4496         rename to stepETAUpdate
4497         (BuildStatus.subscribe): add build-wide ETA updates
4498         (BuilderStatus.getState): remove more cruft
4499         (BuilderStatus.getCurrentBuild): remove more cruft
4500         (BuilderStatus.buildStarted): really handle tuple-subscription
4501         * buildbot/test/test_run.py (Status.testSlave): handle the
4502         stepETAUpdate rename
4504         * buildbot/master.py (BuildMaster): don't add a default
4505         StatusClientService. Don't add a default IrcStatusFactory. Both
4506         are now added through c['status'] in the config file. c['irc'] is
4507         accepted for backwards compatibility, the only quirk is you cannot
4508         use c['irc'] to specify IRC servers on ports other than 6667.
4510         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4511         (IStatusReceiver.buildStarted): allow update-interval on subscribe
4512         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4513         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4516         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4517         the buildmaster to re-read its config file
4520         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4521         find out the port our server is running on
4522         (WebTest.test_webPathname_port): same
4524         * buildbot/test/test_config.py (testWebPortnum): test it
4525         (testWebPathname): ditto
4527         * docs/config.xhtml: document new c['status'] configuration option
4529         * buildbot/status/html.py (Waterfall): new top-level class which
4530         can be added to c['status']. This creates the Site as well as the
4531         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4532         reachable as .parent, for everything.
4534         * buildbot/master.py (Manhole): make it a normal service Child
4535         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4536         webPathname. It will eventually replace c['irc'] and the implicit
4537         PB listener as well. c['webPortnum'] and c['webPathname'] are left
4538         in as (deprecated) backward compatibility hooks for now.
4541         * buildbot/process/builder.py (Builder.buildFinished): don't
4542         inform out builder_status about a finished build, as it finds out
4543         through its child BuildStatus object
4545         * buildbot/status/html.py: extensive revamp. Use adapters to make
4546         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4547         have both starting and finishing times and adjust the waterfall
4548         display accordingly, using spacers if necessary. Use SlaveStatus
4549         to get buildslave info.
4550         (StatusResourceBuildStep): new just-one-step resource, used to get
4551         logfiles. No actual href to it yet.
4553         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4554         the time being, until I get the file-naming scheme right
4556         * buildbot/status/builder.py (Event): clean started/finished names
4557         (BuildStatus.isFinished): .finished is not None is the right test
4558         (BuildStatus.buildStarted): track started/finished times ourselves
4559         (BuilderStatus.getSlave): provide access to SlaveStatus object
4560         (BuilderStatus.getLastFinishedBuild): all builds are now in
4561         .builds, even the currently-running one. Accomodate this change.
4562         (BuilderStatus.eventGenerator): new per-builder event generator.
4563         Returns BuildStepStatus and BuildStatus objects, since they can
4564         both be adapted as necessary.
4565         (BuilderStatus.addEvent): clean up started/finished attributes
4566         (BuilderStatus.startBuild,finishBuild): remove dead code
4567         (SlaveStatus): new object to provide ISlaveStatus
4569         * buildbot/process/step.py (ShellCommand.getColor): actually
4570         return the color instead of setting it ourselves
4571         (CVS.__init__): pull .timeout and .workdir options out of
4572         **kwargs, since BuildStep will ignore them. Without this neither
4573         will be sent to the slave correctly.
4574         (SVN.__init__): same
4576         * buildbot/process/builder.py (Builder): move flags to class-level
4577         attributes
4578         (Builder.attached): remove .remoteInfo, let the BotPerspective and
4579         SlaveStatus handle that
4581         * buildbot/process/base.py (Build.firstEvent): remove dead code
4582         (Build.stopBuild): bugfix
4584         * buildbot/changes/pb.py (PBChangeSource.describe): add method
4586         * buildbot/changes/changes.py (Change): add IStatusEvent methods
4587         (ChangeMaster.eventGenerator): yield Changes, since there are now
4588         Adapters to turn them into HTML boxes
4590         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4591         (BotPerspective.attached): feed a SlaveStatus object
4592         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4593         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4595         * buildbot/interfaces.py: API additions
4596         (ISlaveStatus): place to get slave status
4598 2004-08-04  Brian Warner  <warner@lothar.com>
4600         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4601         the delay finishes, so the step is marked as SUCCESS
4603         * buildbot/test/test_run.py (Status.testSlave): cover more of
4604         IBuildStatus and IBuildStepStatus
4606         * buildbot/status/progress.py (StepProgress): move some flags to
4607         class-level attributes
4608         (StepProgress.remaining): if there are no other progress metrics
4609         to go by, fall back to elapsed time
4610         (StepProgress.setExpectations): take a dict of metrics instead of
4611         a list
4612         (BuildProgress.setExpectationsFrom): pull expectations from the
4613         Expectations, instead of having it push them to the BuildProgress
4614         (Expectations): move some flags to class-level attributes
4615         (Expectations.__init__): copy per-step times from the
4616         BuildProgress too
4617         (Expectations.expectedBuildTime): new method for per-build ETA
4619         * buildbot/status/event.py (Logfile): move some flags to
4620         class-level attributes
4621         (Logfile.logProgressTo): better method name, let step set the
4622         progress axis name (instead of always being "output")
4624         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4625         times directly, rather than depending upon the (possibly missing)
4626         .progress object. Use 'None' to indicate "not started/finished
4627         yet"
4628         (BuildStepStatus.getExpectations): oops, return the full list of
4629         expectations
4630         (BuilderStatus._buildFinished): append finished builds to .builds
4632         * buildbot/process/step.py (BuildStep): add separate .useProgress
4633         flag, since empty .progressMetrics[] still implies that time is a
4634         useful predictor
4635         (CVS): set up the cmd in __init__, instead of waiting for start()
4637         * buildbot/process/base.py (Build.startBuild): disable the 'when'
4638         calculation, this will eventually turn into a proper sourceStamp
4639         (Build.setupBuild): tell the Progress to load from the Expectations,
4640         instead of having the Expectations stuff things into the Progress
4641         (Build.buildException): add a build-level errback to make sure the
4642         build's Deferred fires even in case of exceptions
4644         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4645         the forced build
4646         * buildbot/process/builder.py (Builder.forceBuild): convey the
4647         reason instead of creating a fake Change
4649         * docs/examples/twisted_master.cfg: update to match reality
4651         * buildbot/test/test_config.py, buildbot/test/test_process.py:
4652         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4653         fix or remove broken/breaking tests
4655         * buildbot/status/event.py (Logfile.__len__): remove evil method
4657         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4658         missing .build, for test convenience
4660         * buildbot/process/step_twisted.py: import fixes
4662         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4664         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4665         .statusbag reference
4667         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4668         connection at shutdown, and stop it from reconnecting
4670         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4671         chase down remote-execution bugs
4673         * buildbot/process/step.py: more fixes, remove
4674         BuildStep.setStatus()
4675         * buildbot/status/builder.py: move setStatus() functionality into
4676         BuildStatus.addStep
4677         * buildbot/status/event.py: minor fixes
4679 2004-08-03  Brian Warner  <warner@lothar.com>
4681         * buildbot/process/base.py, buildbot/process/builder.py
4682         * buildbot/process/step.py, buildbot/status/builder.py
4683         * buildbot/status/event.py, buildbot/test/test_run.py:
4684         fix status delivery, get a basic test case working
4685         * buildbot/master.py: finish implementing basic status delivery,
4686         temporarily disable HTML/IRC/PB status sources
4688         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4690         * buildbot/status/progress.py (BuildProgress): remove dead code
4692         * buildbot/interfaces.py
4693         * buildbot/process/base.py, buildbot/process/builder.py
4694         * buildbot/process/step.py, buildbot/process/step_twisted.py
4695         * buildbot/status/builder.py: Complete overhaul of the all
4696         status-delivery code, unifying all types of status clients (HTML,
4697         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4698         look like. This commit is a checkpointing of the work-in-progress:
4699         the input side is mostly done (Builders/Builds sending status
4700         to the BuilderStatus/BuildStatus objects), but the output side has
4701         not yet been started (HTML resources querying BuilderStatus
4702         objects). Things are probably very broken right now and may remain
4703         so for several weeks, I apologize for the disruption.
4705         * buildbot/status/event.py: add a setHTML method to use pre-rendered
4706         HTML as the log's contents. Currently used for exception tracebacks.
4707         * buildbot/status/progress.py: minor spelling changes
4709 2004-08-02  Brian Warner  <warner@lothar.com>
4711         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4712         in mozilla. Also added stylesheets copied from Twisted's docs.
4713         Remember that these files are meant to be run through Lore first.
4714         Thanks to Philipp Frauenfelder for the fixes.
4715         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4716         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4717         * docs/template.tpl: added a Lore template
4719 2004-07-29  Brian Warner  <warner@lothar.com>
4721         * buildbot/interfaces.py: revamp status delivery. This is the
4722         preview: these are the Interfaces that will be provided by new
4723         Builder code, and to which the current HTML/IRC/PB status
4724         displayers will be adapted.
4726         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4727         on the SlaveBuilder, not the Bot.
4728         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4729         SlaveBuilder.usePTY
4730         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4731         set .usePTY on the FakeSlaveBuilder
4733 2004-07-25  Brian Warner  <warner@lothar.com>
4735         * buildbot/changes/freshcvs.py: add some debug log messages
4736         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4737         disabled 'setFilter' syntax
4738         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4739         don't end with a slash
4741         * buildbot/process/base.py (Builder._pong_failed): add TODO note
4743         * setup.py: bump to 0.5.0+ while between releases
4745 2004-07-23  Brian Warner  <warner@lothar.com>
4747         * setup.py (version): Releasing buildbot-0.5.0
4749 2004-07-23  Brian Warner  <warner@lothar.com>
4751         * README: update for 0.5.0 release
4753         * NEWS: update for 0.5.0 release
4755 2004-07-22  Brian Warner  <warner@lothar.com>
4757         * buildbot/slavecommand.py (ShellCommand): make usePTY a
4758         mktap-time configuration flag (--usepty=1, --usepty=0)
4759         * buildbot/bot.py: same
4761         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4762         an 'info' directory being unwanted
4764         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4765         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4766         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4767         and earlier), use a FreshCVSSourceOldcred instead.
4768         (test): simple test routine: connect to server, print changes
4770         * buildbot/changes/changes.py (Change.getTime): make it possible
4771         to print un-timestamped changes
4773         * buildbot/master.py (makeApp): delete ancient dead code
4774         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4775         * buildbot/test/test_config.py (testFindConfigFile): test it
4777         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4778         instead of win32 one
4781         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4782         now takes a dictionary instead of a tuple. See docs/config.xhtml for
4783         details.
4785         * buildbot/process/base.py (Builder.__init__): change constructor
4786         to accept a dictionary of config data, rather than discrete
4787         name/slave/builddir/factory arguments
4789         * docs/examples/twisted_master.cfg: update to new syntax
4790         * docs/examples/glib_master.cfg: same
4791         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4792         rough tests of the new syntax
4794         
4795         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4796         to be an int, which means "run a web.distrib sub-server on a TCP
4797         port". This lets you publish the buildbot status page to a remote
4798         twisted.web server (using distrib.ResourceSubscription). Also
4799         rename the local attributes used to hold these web things so
4800         they're more in touch with reality.
4801         * buildbot/test/test_web.py: test webPortnum and webPathname
4802         * docs/config.xhtml: document this new use of webPathname
4804         * docs/config.xhtml: new document, slightly ahead of reality
4805         
4806         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4807         'prefix' handling: treat it as a simple string to check with
4808         .startswith, instead of treating it as a directory. This allows
4809         sub-directories to be used. If you use prefix=, you should give it
4810         a string that starts just below the CVSROOT and ends with a slash.
4811         This prefix will be stripped from all filenames, and filenames
4812         which do not start with it will be ignored.
4814 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
4816         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4817         and --exclude (inverse of --include).  SVN post-commit hooks
4818         now have total control over which changes get sent to buildbot and which
4819         do not.
4821 2004-07-10  Brian Warner  <warner@lothar.com>
4823         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4824         test case to match new API
4826         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4827         which crashed HTML display when self.entries=[] (needed to
4828         distinguish between [], which means "no entries yet", and None,
4829         which means "the entries have been swapped out to disk, go fetch
4830         them").
4832 2004-07-04  Brian Warner  <warner@lothar.com>
4834         * buildbot/process/step_twisted.py (countFailedTests): Count
4835         skips, expectedFailures, and unexpectedSuccesses. Start scanning
4836         10kb from the end because any import errors are wedged there and
4837         they would make us think the test log was unparseable.
4838         (RunUnitTests.finishStatus): add skip/todo counts to the event box
4840 2004-06-26  Brian Warner  <warner@lothar.com>
4842         * buildbot/process/step_twisted.py (RemovePYCs): turn the
4843         delete-*.pyc command into an actual BuildStep, so we can label it
4844         nicely
4845         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4846         (FullTwistedBuildFactory): same
4848 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
4850         * contrib/fakechange.py: Add an errback when sending the fake 
4851         change, so we know it didn't work.
4853 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
4855         * buildbot/process/step_twisted.py: Delete *.pyc files before
4856         calling trial, so it doesn't catch any old .pyc files whose .py
4857         files have been moved or deleted.
4859         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4860         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4861         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4862         instead of ["twisted.test"], so that the end result is "trial -R
4863         twisted".
4865         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4866         regular expression to match filenames that should be ignored when
4867         changed. Also add a --revision parameter that specifies the
4868         revision to examine, which is useful for debugging.
4870 2004-06-25  Brian Warner  <warner@lothar.com>
4872         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4873         summary of warnings (like DeprecationWarnings), next to the
4874         "summary" file
4876 2004-05-13  Brian Warner  <warner@lothar.com>
4878         * docs/examples/twisted_master.cfg: enable the win32 builder, as
4879         we now have a w32 build slave courtesy of Mike Taylor.
4881         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4882         so broken. Fixed a race condition that tripped up interlocked
4883         builds and caused the status to be stuck at "Interlocked" forever.
4884         The twisted buildbot's one interlocked build just so happened to
4885         never hit this case until recently (the feeding builds both pass
4886         before the interlocked build is attempted.. usually it has to wait
4887         a while).
4888         (Builder._pong_failed): fix method signature
4890         * setup.py: bump to 0.4.3+ while between releases
4892 2004-04-30  Brian Warner  <warner@lothar.com>
4894         * setup.py (version): Releasing buildbot-0.4.3
4896 2004-04-30  Brian Warner  <warner@lothar.com>
4898         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
4900         * README: update for 0.4.3 release
4902         * NEWS: update for 0.4.3 release
4904         * buildbot/master.py (BuildMaster.__getstate__): make sure
4905         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4907         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4908         .trial as a class attribute, for upgrade from 0.4.2
4910         * buildbot/changes/changes.py (Change.links): add .links for
4911         upgrade from 0.4.2
4913         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4914         .textWatchers and .htmlWatchers at save time, since they are both
4915         volatile, should allow smooth 0.4.2 upgrade
4917         * buildbot/process/step.py (CVS.finishStatus): catch failed
4918         CVS/SVN commands so we can make the status box red
4920 2004-04-29  Brian Warner  <warner@lothar.com>
4922         * buildbot/changes/freshcvs.py
4923         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4924         code to do setFilter(), which tells the freshcvs daemon to not
4925         send us stuff that we're not interested in. I will uncomment it
4926         when a new version of CVSToys is available in which setFilter()
4927         actually works, and I get a chance to test it better.
4929         * docs/examples/twisted_master.cfg: start using a PBChangeSource
4931         * buildbot/master.py (Dispatcher): use a registration scheme
4932         instead of hardwired service names
4933         (BuildMaster): keep track of the Dispatcher to support
4934         registration
4936         * buildbot/changes/changes.py (ChangeMaster): create a distinct
4937         PBChangeSource class instead of having it be an undocumented
4938         internal feature of the ChangeMaster. Split out the code into a
4939         new file.
4940         * buildbot/changes/pb.py (PBChangeSource): same
4941         * buildbot/test/test_changes.py: a few tests for PBChangeSource
4943         * docs/{factories|sources|steps}.xhtml: document some pieces
4945         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4946         using FCMaildirSource
4947         (f23osx): update OS-X builder to use python2.3, since the slave
4948         was updated to Panther (10.3.3)
4950 2004-03-21  Brian Warner  <warner@lothar.com>
4952         * buildbot/process/process_twisted.py: factor out doCheckout, change
4953         to use SVN instead of CVS
4955         * buildbot/process/base.py (BasicBuildFactory): refactor to make
4956         an SVN subclass easier
4957         (BasicSVN): subclass which uses Subversion instead of CVS
4959 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
4961         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
4962         of /bin/sh on win32
4963         (CVSCommand.cvsComplete): don't assume chdir worked on win32
4965 2004-02-25  Brian Warner  <warner@lothar.com>
4967         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
4968         is now either a list (which is passed to spawnProcess directly) or
4969         a string (which gets passed to /bin/sh -c). This removes the useSH
4970         flag and the ArgslistCommand class. Also send status header at the
4971         start and end of each command, instead of having the master-side
4972         code do that.
4973         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
4974         -r'. Update to use list-based arguments.
4975         (SVNFetch): use list-based arguments, use ['dir'] argument to
4976         simplify code.
4977         * buildbot/test/test_steps.py (Commands): match changes
4979         * buildbot/process/step.py (InternalShellCommand.words): handle
4980         command lists
4981         (SVN): inherit from CVS, cleanup
4983         * buildbot/status/event.py (Logfile.content): render in HTML, with
4984         stderr in red and headers (like the name of the command we're
4985         about to run) in blue. Add link to a second URL (url + "?text=1")
4986         to get just stdout/stderr in text/plain without markup. There is
4987         still a problem with .entries=None causing a crash, it seems to occur
4988         when the logfile is read before it is finished.
4990         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
4991         timeout to the keepalives, and use it to explicitly do a
4992         loseConnection instead of waiting for TCP to notice the loss. This
4993         ought to clear up the silent-lossage problem.
4994         (unsafeTracebacks): pass exception tracebacks back to the master,
4995         makes it much easier to debug problems
4997 2004-02-23  Brian Warner  <warner@lothar.com>
4999         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5000         the whole command to /bin/sh instead of execve [Johan Dahlin]
5001         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5002         '-r HEAD' [Johan Dahlin]
5003         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5005         * buildbot/changes/changes.py (Change): add links= argument, add
5006         asHTML method [Johan Dahlin]. Modified to make a bit more
5007         XHTMLish. Still not sure how to best use links= .
5009         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
5010         Change.asHTML to display the change, not asText
5012         * buildbot/status/html.py (StatusResourceBuilder): web button to
5013         ping slave
5015         * buildbot/test/test_run.py: test to actually start a buildmaster
5016         and poke at it
5018         * MANIFEST.in: bring back accidentally-dropped test helper files
5020         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5021         that require cvstoys if it is not installed
5023         * buildbot/process/step_twisted.py (RunUnitTests): allow other
5024         values of "bin/trial" [Dave Peticolas]
5025         (RunUnitTests.finishStatus): say "no tests run" instead of "0
5026         tests passed" when we didn't happen to run any tests
5028         * buildbot/process/step.py (Compile): use haltOnFailure instead of
5029         flunkOnFailure [Johan Dahlin]
5031         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5032         multiple instances of the same Step class by suffixing "_2", etc,
5033         to the name until it is unique. This name needs to be unique
5034         because it is used as a key in the dictionary that tracks build
5035         progress.
5036         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5037         add test for it
5039         * buildbot/process/base.py (Builder.ping): add "ping slave" command
5041 2004-01-14  Brian Warner  <warner@lothar.com>
5043         * buildbot/status/words.py (IrcStatusBot): when we leave or get
5044         kicked from a channel, log it
5046         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5047         something over whatever IRC channels the buildmaster is currently
5048         connected to. Added to try and track down a problem in which the
5049         master thinks it is still connected but the IRCd doesn't see it. I
5050         used a styles.Versioned this time, so hopefully users won't have
5051         to rebuild their .tap files this time.
5052         * contrib/debug.glade: add a "Poke IRC" button
5053         * contrib/debugclient.py: same
5055         * setup.py: bump to 0.4.2+ while between releases
5057 2004-01-08  Brian Warner  <warner@lothar.com>
5059         * setup.py (version): Releasing buildbot-0.4.2
5061 2004-01-08  Brian Warner  <warner@lothar.com>
5063         * NEWS: update for 0.4.2 release
5065         * README: document how to run the tests, now that they all pass
5067         * buildbot/changes/maildir.py (Maildir.poll): minor comment
5069         * buildbot/process/step.py (CVS): add a global_options= argument,
5070         which lets you set CVS global options for the command like "-r"
5071         for read-only checkout, or "-R" to avoid writing in the
5072         repository.
5073         * buildbot/slavecommand.py (CVSCommand): same
5075         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5076         testing easier (it is turned off when testing, to avoid the
5077         leftover timer)
5079         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5080         to make it easier to test: break generateStepID() out to a
5081         separate function, only update statusbag if it exists.
5082         (ShellCommands): create useful text for dict-based commands too.
5084         * test/*, buildbot/test/*: move unit tests under the buildbot/
5085         directory
5086         * setup.py (packages): install buildbot.test too
5088         * buildbot/test/test_slavecommand.py: fix it, tests pass now
5089         * buildbot/test/test_steps.py: fix it, tests pass now
5091 2004-01-06  Brian Warner  <warner@lothar.com>
5093         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5094         freshcvs mail uses a slightly different syntax for new
5095         directories. Update parser to handle either.
5096         * test/test_mailparse.py (Test1.testMsg9): test for same
5098 2003-12-21  Brian Warner  <warner@lothar.com>
5100         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5101         'warnOnWarnings' so that lintian errors mark the build orange
5103 2003-12-17  Brian Warner  <warner@lothar.com>
5105         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5106         messages emitted by Bonsai, contributed by Stephen Davis.
5108         * test/*: moved all tests to use trial instead of unittest. Some
5109         still fail (test_steps, test_slavecommand, and test_process).
5111         * setup.py (version): bump to 0.4.1+ while between releases
5113 2003-12-09  Brian Warner  <warner@lothar.com>
5115         * setup.py (version): Releasing buildbot-0.4.1
5117 2003-12-09  Brian Warner  <warner@lothar.com>
5119         * NEWS: update for 0.4.1 release
5121         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5122         freebsd builder code a little bit
5124         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5125         don't try to compare attributes of different classes
5126         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5127         (MaildirSource.messageReceived): fix Change delivery
5129         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5130         into the config file's namespace before loading it, like the
5131         documentation claims it does
5132         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5133         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5134         daemon comes back online
5136 2003-12-08  Brian Warner  <warner@lothar.com>
5138         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5139         so the example will work with online=0 as well
5141         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5142         fix the __implements__ line
5144         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5145         class a twisted.application.service.Service, use startService to
5146         get it moving.
5148         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5149         directory fd instead of simple open(). I'm sure this used to work,
5150         but the current version of python refuses to open directories with
5151         open().
5153 2003-12-05  Brian Warner  <warner@lothar.com>
5155         * setup.py (version): bump to 0.4.0+ while between releases
5157 2003-12-05  Brian Warner  <warner@lothar.com>
5159         * setup.py (version): Releasing buildbot-0.4.0
5161 2003-12-05  Brian Warner  <warner@lothar.com>
5163         * docs/examples/glib_master.cfg: replace old sample scripts with
5164         new-style config files
5165         * MANIFEST.in: include .cfg files in distribution tarball
5167         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5168         implement a dummy method to avoid the exception that occurs when
5169         freshcvs sends this to us.
5171         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5172         removed the method, as it broke reconnection. Apparently
5173         stopFactory is called each time the connection attempt fails. Must
5174         rethink this.
5175         (ReconnectingPBClientFactory.__getstate__): squash the _callID
5176         attribute before serialization, since without stopFactory the
5177         reconnect timer may still be active and they aren't serializable.
5179         * test/test_mailparse.py (ParseTest): test with 'self' argument
5181         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5182         argument, as these "functions" are invoked like methods from class
5183         attributes and therefore always get an instance as the first
5184         argument.
5186         * buildbot/changes/maildir.py (Maildir.start): fix error in error
5187         message: thanks to Stephen Davis for the catch
5189 2003-12-04  Brian Warner  <warner@lothar.com>
5191         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5192         twisted's standard ReconnectingClientFactory. Handles both oldcred
5193         and newcred connections. Also has a bug-workaround for
5194         ReconnectingClientFactory serializing its connector when it
5195         shouldn't.
5197         * buildbot/bot.py (BotFactory): rewrite connection layer with new
5198         pbutil. Replace makeApp stuff with proper newcred/mktap
5199         makeService(). Don't serialize Ephemerals on shutdown.
5201         * buildbot/changes/changes.py (ChangeMaster): make it a
5202         MultiService and add the sources as children, to get startService
5203         and stopService for free. This also gets rid of the .running flag.
5205         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5206         new pbutil, turn into a TCPClient at the same time (to get
5207         startService for free). Two variants exist: FreshCVSSourceOldcred
5208         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5209         yet, but when it does, we'll be ready).
5210         (FreshCVSSource.notify): handle paths which are empty after the
5211         prefix is stripped. This only happens when the top-level (prefix)
5212         directory is added, at the very beginning of a Repository's life.
5214         * buildbot/clients/base.py: use new pbutil, clean up startup code.
5215         Now the only reconnecting code is in the factory where it belongs.
5216         (Builder.unsubscribe): unregister the disconnect callback when we
5217         delete the builder on command from the master (i.e. when the
5218         buildmaster is reconfigured and that builder goes away). This
5219         fixes a multiple-delete exception when the status client is shut
5220         down afterwards.
5221         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5222         base Client. 
5224         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5225         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5227 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
5229         * contrib/run_maxq.py: Accept a testdir as an argument rather than
5230         a list of globs (ugh). The testdir will be searched for files
5231         named *.tests and run the tests in the order specified in each of
5232         those files. This allows for "dependancies" between tests to be
5233         codified.
5235         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5236         argument to pass to run_maxq.py, instead of a glob.
5238 2003-10-17  Brian Warner  <warner@lothar.com>
5240         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5241         files that live in the sandbox
5243 2003-10-15  Brian Warner  <warner@lothar.com>
5245         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5246         spelling error in "docs" count-warnings output
5247         (HLint.start): stupid thinko meant .xhtml files were ignored
5249         * docs/examples/twisted_master.cfg (reactors): disable cReactor
5250         tests now that cReactor is banished to the sandbox
5252 2003-10-10  Brian Warner  <warner@lothar.com>
5254         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5255         scheme: now .xhtml are sources and .html are generated
5257 2003-10-08  Brian Warner  <warner@lothar.com>
5259         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5260         we were ignoring the 'randomly' parameter.
5262 2003-10-01  Brian Warner  <warner@lothar.com>
5264         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5265         posix, to kill sub-children of aborted slavecommands.
5267         * buildbot/status/builder.py: rename Builder to BuilderStatus.
5268         Clean up initialization: lastBuildStatus remains None until the
5269         first build has been completed.
5271         * buildbot/status/html.py (WaterfallStatusResource.body): handle
5272         None as a lastBuildStatus
5273         * buildbot/clients/gtkPanes.py: same
5275         * buildbot/status/client.py (StatusClientService): keep
5276         BuilderStatus objects in self.statusbags . These objects now live
5277         here in the StatusClientService and are referenced by the Builder
5278         object, rather than the other way around.
5279         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5280         * buildbot/process/base.py (Builder): same
5281         * test/test_config.py (ConfigTest.testBuilders): same
5283         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5284         an existing builder, leave the statusbag alone. This will preserve the
5285         event history.
5287         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5288         hook. This will probably go away in favor of a class in upcoming
5289         Twisted versions.
5291         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5292         serviceName from newcred FreshCVSNotifiee setup
5294 2003-09-29  Brian Warner  <warner@lothar.com>
5296         * buildbot/process/process_twisted.py: switch to new reactor
5297         abbreviations
5298         * docs/examples/twisted_master.cfg: same
5300         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5302         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5303         botmaster reference instead of the oldapp service lookup
5305         * buildbot/master.py (BuildMaster.__init__): give the
5306         StatusClientService a reference to the botmaster to make it easier to
5307         force builds
5309 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5311         * buildbot/status/html.py (Box.td): escape hreffy things so you
5312         can have spaces in things like builder names
5313         (StatusResourceBuilder.body)
5314         (WaterfallStatusResource.body)
5315         (WaterfallStatusResource.body0): same
5317 2003-09-25  Brian Warner  <warner@lothar.com>
5319         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5320         rearrange the builder list when adding or removing builders: keep
5321         them in the order the user requested.
5322         * test/test_config.py (ConfigTest.testBuilders): verify it
5324         * contrib/debug.glade: give the debug window a name
5326         * buildbot/process/base.py (Builder.buildTimerFired): builders can
5327         now wait on multiple interlocks. Fix code relating to that.
5328         (Builder.checkInterlocks): same
5329         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5331         * buildbot/master.py (BuildMaster.loadConfig): move from
5332         deprecated pb.BrokerFactory to new pb.PBServerFactory
5333         * test/test_config.py (ConfigTest.testWebPathname): same
5335         * docs/examples/twisted_master.cfg: fix interlock declaration
5337         * buildbot/master.py (BotMaster.addInterlock): move code to attach
5338         Interlocks to their Builders into interlock.py .
5339         (BuildMaster.loadConfig_Interlocks): fix interlock handling
5341         * test/test_config.py (ConfigTest.testInterlocks): validate
5342         interlock handling
5344         * buildbot/process/base.py (Builder.__init__): better comments
5345         * buildbot/process/interlock.py (Interlock.__repr__): same
5346         (Interlock.deactivate): add .active flag, move the code that
5347         attaches/detaches builders into the Interlock
5349 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5351         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5352         tests using the new run_maxq.py script, and reporting failures by
5353         parsing its output.
5355         * contrib/run_maxq.py: Hacky little script for running a set of maxq
5356         tests, reporting their success or failure in a buildbot-friendly 
5357         manner.
5359 2003-09-24  Brian Warner  <warner@lothar.com>
5361         * docs/examples/twisted_master.cfg: example of a new-style config
5362         file. This lives in the buildmaster base directory as
5363         "master.cfg".
5365         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5366         button to make the master re-read its config file
5368         * buildbot/master.py (BuildMaster.loadConfig): new code to load
5369         buildmaster configuration from a file. This file can be re-read
5370         later, and the buildmaster will update itself to match the new
5371         desired configuration. Also use new Twisted Application class.
5372         * test/Makefile, test/test_config.py: unit tests for same
5374         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5375         FreshCVSSources comparable, to support reload.
5376         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5378         * buildbot/process/base.py (Builder): make them comparable, make
5379         Interlocks easier to attach, to support reload. Handle
5380         re-attachment of remote slaves.
5381         * buildbot/process/interlock.py (Interlock): same
5383         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5384         Twisted's new Application class. Requires Twisted >= 1.0.8 .
5385         buildmaster taps are now constructed with mktap.
5386         * buildbot/status/client.py (StatusClientService): same
5388         * buildbot/status/words.py: move to new Services, add support to
5389         connect to multiple networks, add reload support, allow nickname
5390         to be configured on a per-network basis
5392 2003-09-20  Brian Warner  <warner@lothar.com>
5394         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5395         the freebsd builder, now that the machine has been upgraded and no
5396         longer has python2.2
5398         * setup.py (version): bump to 0.3.5+ while between releases
5400 2003-09-19  Brian Warner  <warner@lothar.com>
5402         * setup.py (version): Releasing buildbot-0.3.5
5404 2003-09-19  Brian Warner  <warner@lothar.com>
5406         * NEWS: add post-0.3.4 notes
5408         * README (REQUIREMENTS): note twisted-1.0.7 requirement
5410         * MANIFEST.in: add contrib/*
5412         * docs/examples/twisted_master.py (twisted_app): all build slaves must
5413         use a remote root now: cvs.twistedmatrix.com
5415         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5416         to newcred
5417         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5418         compatibility with old servers
5419         (FreshCVSSource.start): and provide a way to use it
5420         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5422         * docs/examples/twisted_master.py (twisted_app): update to new
5423         makeApp interface.
5424         (twisted_app): listen on new ~buildbot socket
5425         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5427         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5428         to reduce cvs bandwidth (update instead of full checkout)
5430 2003-09-11  Brian Warner  <warner@lothar.com>
5432         * contrib/fakechange.py: demo how to connect to the changemaster
5433         port. You can use this technique to submit changes to the
5434         buildmaster from source control systems that offer a hook to run a
5435         script when changes are committed.
5437         * contrib/debugclient.py: tool to connect to the debug port. You
5438         can use it to force builds, submit fake changes, and wiggle the
5439         builder state
5441         * buildbot/master.py: the Big NewCred Reorganization. Use a single
5442         'Dispatcher' realm to handle all the different kinds of
5443         connections and Perspectives: buildslaves, the changemaster port,
5444         the debug port, and the status client port. NewCredPerspectives
5445         now have .attached/.detached methods called with the remote 'mind'
5446         reference, much like old perspectives did. All the pb.Services
5447         turned into ordinary app.ApplicationServices .
5448         (DebugService): went away, DebugPerspectives are now created
5449         directly by the Dispatcher.
5450         (makeApp): changed interface a little bit
5452         * buildbot/changes/changes.py: newcred
5453         * buildbot/status/client.py: newcred
5455         * buildbot/clients/base.py: newcred client side changes
5456         * buildbot/bot.py: ditto
5458         * docs/examples/glib_master.py: handle new makeApp() interface
5459         * docs/examples/twisted_master.py: ditto
5461         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5462         base newcred Perspectives on. This should go away once Twisted
5463         itself provides something sensible.
5466 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
5468         * contrib/svn_buildbot.py: A program that you can call from your
5469         SVNREPO/hooks/post-commit file that will notify a BuildBot master
5470         when a change in an SVN repository has happened. See the top of
5471         the file for some minimal usage info.
5473 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5475         * buildbot/slavecommand.py (ArglistCommand): Add new
5476         ArglistCommand that takes an argument list rather than a string as
5477         a parameter. Using a st.split() for argv is very bad.
5479         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5480         update to a particular revision rather than always checking out
5481         (still not very smart about it, there may be cases where the
5482         checkout becomes inconsistent).
5484 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5486         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5487         SVN fetch support. It can checkout (not update!) a specified
5488         revision from a specified repository to a specified directory.
5490         * buildbot/status/progress.py (Expectations.update): Fix an
5491         obvious bug (apparently created by the change described in the
5492         previous ChangeLog message) by moving a check to *after* the
5493         variable it checks is defined.
5496 2003-09-08  Brian Warner  <warner@lothar.com>
5498         * buildbot/status/progress.py (Expectations.update): hack to catch
5499         an exception TTimo sees: sometimes the update() method seems to
5500         get called before the step has actually finished, so the .stopTime
5501         is not set, so no totalTime() is available and we average None
5502         with the previous value. Catch this and just don't update the
5503         metrics, and emit a log message.
5505 2003-08-24  Brian Warner  <warner@lothar.com>
5507         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5508         parameter to set copydir='original' in CVS commands.
5510         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5512         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5513         which tells the command to maintain a separate original-source CVS
5514         workspace. For each build, this workspace will be updated, then
5515         the tree copied into a new workdir. This reduces CVS bandwidth
5516         (from a full checkout to a mere update) while doubling the local
5517         disk usage (to keep two copies of the tree).
5519 2003-08-21  Brian Warner  <warner@lothar.com>
5521         * buildbot/status/event.py (Logfile.addEntry): if the master web
5522         server dies while we're serving a page, request.write raises
5523         pb.DeadReferenceError . Catch this and treat it like a
5524         notifyFinish event by dropping the request.
5526 2003-08-18  Brian Warner  <warner@lothar.com>
5528         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5529         (instead of blowing up) if a force-build command is given without
5530         a reason field
5532         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5533         don't blow up if there aren't yet any Changes in the list
5535 2003-08-02  Brian Warner  <warner@lothar.com>
5537         * buildbot/bot.py (updateApplication): don't set the .tap name,
5538         since we shouldn't assume we own the whole .tap file
5540         * buildbot/bb_tap.py (updateApplication): clean up code, detect
5541         'mktap buildbot' (without a subcommand) better
5543 2003-07-29  Brian Warner  <warner@lothar.com>
5545         * buildbot/status/words.py
5546         (IrcStatusFactory.clientConnectionLost): when we lose the
5547         connection to the IRC server, schedule a reconnection attempt.
5549         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5550         use shutil.rmtree instead of forking off an "rm -rf" command.
5551         rmtree may take a while and will block until it finishes, so we
5552         use "rm -rf" if available.
5554         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5555         freebsd buildslave badly
5557         * setup.py (version): bump to 0.3.4+ while between releases
5559 2003-07-28  Brian Warner  <warner@lothar.com>
5561         * setup.py (version): Releasing buildbot-0.3.4
5563 2003-07-28  Brian Warner  <warner@lothar.com>
5565         * NEWS: update in preparation for release
5567         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5568         process.signalProcess instead of os.kill, to improve w32
5569         portability
5571         * docs/examples/twisted_master.py (twisted_app): turn off
5572         win32eventreactor: the tests hang the buildslave badly
5574         * buildbot/process/base.py (Build.buildFinished): update ETA even on
5575         failed builds, since usually the failures are consistent
5577         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5578         add compileOpts/compileOpts2 to reactors build
5580         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5581         (twisted_app): use both default and win32eventreactor on w32 build.
5582         Use both default and kqreactor on freebsd build.
5584         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5585         add compileOpts2, which is put after the build_ext argument. w32
5586         needs "-c mingw32" here.
5588         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5589         touch .acqpath, it goes away in recent Twisted releases
5591         * docs/examples/twisted_master.py (twisted_app): use "python" for
5592         the w32 buildslave, not "python2.2"
5594         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5595         the directory exists.. should hush an exception under w32
5597         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5598         ProcessTerminated -provided values for signal and exitCode rather
5599         than parsing the unix status code directly. This should remove one
5600         more roadblock for a w32-hosted buildslave.
5602         * test/test_mailparse.py: add test cases for Syncmail parser
5604         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5605         temporary compatibility import. Note! Start importing
5606         FCMaildirSource from changes.mail instead of changes.freshcvsmail
5608         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5610 2003-07-27  Brian Warner  <warner@lothar.com>
5612         * NEWS: started adding new features
5614         * buildbot/changes/mail.py: start work on Syncmail parser, move
5615         mail sources into their own file
5617         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5618         as implementing IChangeSource
5619         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5621         * buildbot/interfaces.py: define the IChangeSource interface
5623 2003-07-26  Brian Warner  <warner@lothar.com>
5625         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5627 2003-06-25  Brian Warner  <warner@lothar.com>
5629         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5630         seconds display
5632 2003-06-17  Brian Warner  <warner@lothar.com>
5634         * buildbot/status/words.py: clean up method usage to avoid error
5635         in silly IRC command
5636         (IrcStatusBot.emit_status): round off seconds display
5638         * buildbot/process/base.py (Build): delete the timer when saving
5639         to the .tap file, and restore it (if it should still be running)
5640         upon restore. This should fix the "next build in -34 seconds"
5641         messages that result when the master is restarted while builds are
5642         sitting in the .waiting slot. If the time for the build has
5643         already passed, start it very soon (in 1 second).
5645         * buildbot/status/words.py: more silly commands
5647         * README (REQUIREMENTS): add URLs to all required software
5649         * buildbot/status/words.py ('last'): mention results of, and time
5650         since last build
5652 2003-05-28  Brian Warner  <warner@lothar.com>
5654         * buildbot/status/words.py: add 'last' command
5655         (IrcStatusBot.emit_status): add current-small text to 'status' output
5657         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5658         (twisted_app): remove spaces from OS-X builder name
5660         * buildbot/master.py (makeApp): add knob to turn on IRC bot
5661         * buildbot/status/words.py: IRC bot should actually be useful now
5663 2003-05-23  Brian Warner  <warner@lothar.com>
5665         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5666         "slave information" from $(slavedir)/info/* . These files are
5667         maintained by the slave administrator, and describe the
5668         machine/environment that is hosting the slave. Information from
5669         them is put into the "Builder" HTML page. Still need to establish
5670         a set of well-known filenames and meanings for this data: at the
5671         moment, *all* info/* files are sent to the master, but only
5672         'admin' and 'host' are used on that end.
5673         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5674         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
5675         * buildbot/master.py (BotPerspective.got_info):  ditto
5677 2003-05-22  Brian Warner  <warner@lothar.com>
5679         * setup.py (version): bump version to 0.3.3+ while between releases
5681 2003-05-21  Brian Warner  <warner@lothar.com>
5683         * setup.py: Releasing buildbot-0.3.3
5685 2003-05-21  Brian Warner  <warner@lothar.com>
5687         * NEWS: 0.3.3 news items
5689         * README: describe --keepalive and life behind a NAT box
5691         * buildbot/bot.py (Bot.connected): implement application-level
5692         keepalives to deal with NAT timeouts, turn them on with
5693         --keepalive option or when SO_KEEPALIVE doesn't work.
5695         * buildbot/master.py (BotPerspective): accept keepalives silently
5697         * buildbot/process/base.py (Build.buildException): CopiedFailures
5698         don't carry as much information as local ones, so don't try to
5699         create a big HTMLized version of them.
5701         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5702         log file when step fails due to an exception, such as when the slave
5703         becomes unreachable
5705         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5706         --testmodule argument instead of grepping for test-case-name tags
5707         ourselves. Remove FindUnitTests code.
5708         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5710         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5712 2003-05-16  Brian Warner  <warner@lothar.com>
5714         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5715         argument to allow things like CFLAGS=-O0 to be passed without relying
5716         upon /bin/sh processing on the slave.
5718         * buildbot/process/step.py (InternalShellCommand.start): send
5719         'env' dict to slave
5720         * buildbot/slavecommand.py (ShellCommand.start): create argv with
5721         'split' instead of letting /bin/sh do it. This should also remove
5722         the need for /bin/sh on the buildslave, making it more likely to
5723         work with win32.
5725         * buildbot/status/html.py: html-escape text in blamelist.
5726         Add "force build" button to the Builder page.
5728         * buildbot/process/step_twisted.py (countFailedTests): look at
5729         last 1000 characters for status line, as import errors can put it
5730         before the -200 point.
5732 2003-05-15  Brian Warner  <warner@lothar.com>
5734         * docs/examples/twisted_master.py: use clobber=0 for remote builds
5736         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5737         make 'clobber' a parameter, so it is possible to have builds which
5738         do full tests but do a cvs update instead of hammering the CVS
5739         server with a full checkout each build
5741         * buildbot/process/step.py (InternalShellCommand): bump default
5742         timeout to 20 minutes
5744         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5745         the master to trigger a build. Run it via manhole.
5747         * buildbot/master.py (BotPerspective.perspective_forceBuild):
5748         allow slaves to trigger any build that they host, to make life
5749         easier for slave admins who are testing out new build processes
5751         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5752         don't flunk cReactor or qtreactor on failure, since they fail alot
5753         these days. Do warnOnFailure instead.
5755         * buildbot/process/base.py: change Builder.buildable from a list
5756         into a single slot. When we don't have a slave, new builds (once
5757         they make it past the timeout) are now merged into an existing
5758         buildable one instead of being queued. With this change, a slave
5759         which has been away for a while doesn't get pounded with all the
5760         builds it missed, but instead just does a single build.
5762 2003-05-07  Brian Warner  <warner@lothar.com>
5764         * setup.py (version): bump version to 0.3.2+ while between releases
5766 2003-05-07  Brian Warner  <warner@lothar.com>
5768         * setup.py: Releasing buildbot-0.3.2
5770 2003-05-07  Brian Warner  <warner@lothar.com>
5772         * setup.py: fix major packaging error: include subdirectories!
5773         
5774         * NEWS: add changes since last release
5776         * README (REQUIREMENTS): update twisted/python dependencies
5778         * buildbot/status/builder.py (Builder.startBuild): change
5779         BuildProcess API: now they should call startBuild/finishBuild
5780         instead of pushing firstEvent / setLastBuildStatus. Moving towards
5781         keeping a list of builds in the statusbag, to support other kinds of
5782         status delivery.
5783         (Builder.addClient): send current-activity-small to new clients
5784         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5785         new API
5787         * buildbot/status/client.py: drop RemoteReferences at shutdown
5789         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5791         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5792         more debug messages for remote status client
5794         * buildbot/process/step.py (InternalBuildStep.stepComplete)
5795         (.stepFailed): only fire the Deferred once, even if both
5796         stepComplete and stepFailed are called. I think this can happen if
5797         an exception occurs at a weird time.
5799         * buildbot/status/words.py: work-in-progress: IRC status delivery
5801 2003-05-05  Brian Warner  <warner@lothar.com>
5803         * docs/examples/twisted_master.py (twisted_app): hush internal
5804         python2.3 distutils deprecation warnings
5805         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5806         add compileOpts= argument which inserts extra args before the
5807         "setup.py build_ext" command. This can be used to give -Wignore
5808         warnings, to hush some internal python-2.3 deprecation messages.
5810         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5811         the ['twisted.test'] default test case to make it easier to change
5812         in subclasses
5814         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5815         * buildbot/clients/gtkPanes.py: ditto
5817         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5818         arg to collapse RunUnitTestsRandomly into RunUnitTests
5819         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5820         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5822         * buildbot/status/html.py (StatusResource): shuffle Resources
5823         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5824         would serve the waterfall display, but the internal links were
5825         only valid on the trailing-slash version. The correct behavior is
5826         for the non-slashed one to serve a Redirect to the slashed one.
5827         This only shows up when the buildbot page is hanging off another
5828         server, like a Twisted-Web distributed server.
5830         * buildbot/status/event.py (Event, RemoteEvent): make Events
5831         pb.Cacheable, with RemoteEvent as the cached version. This removes
5832         a lot of explicit send-an-update code.
5833         * buildbot/status/builder.py (Builder): remove send-update code
5834         * buildbot/status/client.py (ClientBuilder): remove send-update
5835         code, and log errors that occur during callRemote (mostly to catch
5836         InsecureJelly exceptions)
5838         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5839         run Lore with the same python used in the rest of the build
5841         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5843         * buildbot/process/step_twisted.py (HLint): accept 'python'
5844         argument. Catch rc!=0 and mark the step as failed. This marks the
5845         build orange ("has warnings").
5846         (RunUnitTestsJelly): move out to step_twisted2.py
5848         * buildbot/util.py (ignoreStaleRefs): add utility function
5850         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5851         don't fake ETA object, it's too hard to get right
5853 2003-05-02  Brian Warner  <warner@lothar.com>
5855         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5857 2003-05-01  Brian Warner  <warner@lothar.com>
5859         * buildbot/status/html.py (StatusResource.body): oops, I was
5860         missing a <tr>, causing the waterfall page to be misrendered in
5861         everything except Galeon.
5863 2003-04-29  Brian Warner  <warner@lothar.com>
5865         * docs/examples/twisted_master.py: make debuild use python-2.2
5866         explicitly, now that Twisted stopped supporting 2.1
5868         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5869         handle tuple results too. I keep forgetting this, which suggests
5870         it needs to be rethought.
5872         * setup.py (setup): bump version to 0.3.1+ while between releases
5873         
5874 2003-04-29  Brian Warner  <warner@lothar.com>
5876         * setup.py: Releasing buildbot-0.3.1
5878 2003-04-29  Brian Warner  <warner@lothar.com>
5880         * README (SUPPORT): add plea to send questions to the mailing list
5882         * NEWS, MANIFEST.in: add description of recent changes
5884         * docs/examples/twisted_master.py: add the code used to create the
5885         Twisted buildmaster, with passwords and such removed out to a
5886         separate file.
5888         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5889         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5890         buildmasters to not require CVSToys be installed.
5891         * README, docs/examples/glib_master: update to match the change
5893         * buildbot/clients/base.py, buildbot/bot.py,
5894         buildbot/changes/changes.py, buildbot/pbutil.py: copy
5895         ReconnectingPB from CVSToys distribution to remove CVSToys
5896         dependency for build slaves and status clients. Buildmasters which
5897         use FreshCVSSources still require cvstoys be installed, of course.
5899 2003-04-25  Brian Warner  <warner@lothar.com>
5901         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5902         runTestsRandomly arg to turn on trial -z
5904         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5905         experimental code to use trial's machine-parseable output to get
5906         more detailed test results. Still has some major issues.
5907         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5908         in random sequence
5910         * buildbot/status/builder.py (Builder.setCurrentBuild):
5911         anticipating moving build history into statusbag, not used yet
5913         * buildbot/status/tests.py: code to centralize test results,
5914         doesn't work quite yet
5916         * buildbot/status/event.py (Event): use hasattr("setName") instead
5917         of isinstance for now.. need better long-term solution
5919         * buildbot/status/html.py: Remove old imports
5921 2003-04-24  Brian Warner  <warner@lothar.com>
5923         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5924         ignore changes under doc/fun/ and sandbox/
5926         * buildbot/process/step_twisted.py: update pushEvent and friends.
5928         * buildbot/status/html.py (Box.td): replace event.buildername with
5929         event.parent.getSwappableName(). Needs more thought.
5931         * buildbot/status/builder.py (Builder): Replace pushEvent and
5932         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5933         Tell events they are being pruned with event.delete().
5935         * buildbot/process/base.py (Build): Remove Builder status-handling
5936         methods. s/pushEvent/setCurrentActivity/.
5938         * buildbot/process/step.py (BuildStep): clean up status delivery.
5939         Gouse builder.statusbag methods instead of intermediate builder
5940         methods. s/updateLastEvent/updateCurrentActivity/.
5941         s/finalizeLastEvent/finishCurrentActivity/. Use
5942         addFileToCurrentActivity for summaryFunction.
5944         * buildbot/status/event.py (Logfile): put data in a Swappable when
5945         .finish is called.
5946         (Event): add more setter methods. Remove .buildername, use .parent
5947         and getSwappableName instead (needs more thought).
5949         * buildbot/util.py (Swappable):
5950         * test/test_swap.py: don't bother setting filename at __init__
5951         time, do it later. Change setFilename args to take parent first,
5952         since it provides the most significant part of the filename.
5954 2003-04-23  Brian Warner  <warner@lothar.com>
5956         * buildbot/status/event.py (Logfile.addEntry): append to previous
5957         entry, if possible
5959         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
5960         anticipating Swappable
5961         (InternalShellCommand.remoteUpdate): split out various log-adding
5962         methods so subclasses can snarf stdout separately
5964         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
5965         in anticipation of Swappable build logs
5966         (Builder.testsFinished): anticipating TestResults, still disabled
5968         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
5969         last 100 events
5971         * buildbot/status/event.py (Logfile): add (disabled) support for
5972         Swappable, not ready for use yet
5974         * buildbot/util.py (Swappable): object which is swapped out to
5975         disk after some period of no use.
5976         * test/test_swap.py: test buildbot.utils.Swappable
5978 2003-04-14  Brian Warner  <warner@lothar.com>
5980         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
5981         periodic-build timer. Set the .periodicBuildTime on a builder
5982         instance to some number of seconds to activate it.
5984         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
5986         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
5987         a way that survives result tuples
5989 2003-04-12  Brian Warner  <warner@lothar.com>
5991         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
5992         return a dict instead of a tuple: allow summarizers to provide
5993         multiple summaries if they want
5994         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
5995         (debuildSummarizer): summarize lintian warnings/errors
5997 2003-04-10  Brian Warner  <warner@lothar.com>
5999         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6001 2003-04-09  Brian Warner  <warner@lothar.com>
6003         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6004         empty summaries: happens when the tests fail so hard they don't emit
6005         a parseable summary line.
6007         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6008         Allow summaryFunction to return None to indicate no summary should
6009         be added.
6011         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6012         writing to stale HTTP requests: notice when they disconnect and
6013         remove the request from the list. Also add CacheToFile from
6014         moshez, will be used later.
6016 2003-04-08  Brian Warner  <warner@lothar.com>
6018         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6019         should be an int, not a list of strings
6021         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6022         if we weren't actually connected
6024         * buildbot/process/step_twisted.py (trialTextSummarizer): function
6025         to show the tail end of the trial text output
6027         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6028         hook to summarize the results of a ShellCommand
6030 2003-04-07  Brian Warner  <warner@lothar.com>
6032         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6033         twisted test suite code into a single class.
6034         * buildbot/process/process_twisted.py: same
6036 2003-04-04  Brian Warner  <warner@lothar.com>
6038         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6040         * README (SLAVE): document use of mktap to create slave .tap file
6041         (REQUIREMENTS): describe dependencies
6043         * buildbot/bb_tap.py, buildbot/plugins.tml:
6044         * buildbot/bot.py (updateApplication): Add mktap support for creating
6045         buildslave .tap files
6047 2003-03-28  Brian Warner  <warner@lothar.com>
6049         * buildbot/process/step.py (InternalShellCommand.finished): handle
6050         new tuple result values (fix embarrasing bug that appeared during
6051         PyCon demo)
6053 2003-03-27  Brian Warner  <warner@lothar.com>
6055         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6056         -making program
6058 2003-03-25  Brian Warner  <warner@lothar.com>
6060         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6061         to overall build status
6062         * buildbot/clients/base.py (Builder): improve event printing
6063         * buildbot/process/base.py (BasicBuildFactory): use specific steps
6064         instead of generic ShellCommand
6065         (Build): Add .stopBuild, use it when slave is detached
6067         * buildbot/process/step.py (Configure,Test): give the steps their
6068         own names and status strings
6070         * buildbot/status/html.py (StatusResource): add "show" argument,
6071         lets you limit the set of Builders being displayed.
6073 2003-03-20  Brian Warner  <warner@lothar.com>
6075         * buildbot/process/basic.py: removed
6077 2003-03-19  Brian Warner  <warner@lothar.com>
6079         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6080         turn off process-docs by default
6082         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6083         when displaying build information without anything in allBuilds[]
6085         * buildbot/bot.py (makeApp): really take password from sys.argv
6087 2003-03-18  Brian Warner  <warner@lothar.com>
6089         * buildbot/bot.py (buildApp): take password from sys.argv
6091         * README: replace with more useful text
6093         * setup.py: add a real one
6094         * MANIFEST.in, .cvsignore: more distutils packaging stuff
6095         
6096         * docs/PyCon-2003/: added sources for PyCon paper.
6098         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6099         now Build objects control the process and Builder only handles
6100         slave stuff and distribution of changes/status. A new BuildFactory
6101         class creates Build objects on demand.
6103         Created ConfigurableBuild which takes a list of steps to run. This
6104         makes it a lot easier to set up a new kind of build and moves us
6105         closer to being able to configure a build from a web page.
6107         * buildbot/process/step_twisted.py, process_twisted.py: move to
6108         new model. A lot of code went away.
6109         
6110         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6111         send lots of empty progress messages to the client.
6113         * buildbot/master.py (makeApp): enforce builder-name uniqueness
6115 2003-02-20  Brian Warner  <warner@lothar.com>
6117         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6119         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6120         Twisted bug that prevented non-pty processes from working just got
6121         fixed, and the bug that leaks ptys is still being investigated.
6123         * buildbot/process/step.py (CVS): send timeout arg to slave
6125         * buildbot/clients/gtkPanes.py: add connection-status row, handle
6126         builders coming and going
6127         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6128         from CVSToys, handle lost-buildmaster
6130         * buildbot/status/client.py (StatusClientService.removeBuilder):
6131         Clean up status client protocol: send builders (with references)
6132         as they are created, rather than sending a list and requiring the
6133         client to figure out which ones are new.
6134         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6135         attempts to force a build on an unknown builder
6137 2003-02-19  Brian Warner  <warner@lothar.com>
6139         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6140         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6141         Twisted stops leaking them.
6142         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6143         builder goes to an idle state.
6145         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6146         I figure out why CVS commands hang without them, and/or I fix the
6147         hung-command timeout
6149 2003-02-16  Brian Warner  <warner@lothar.com>
6151         * buildbot/process/step_twisted.py: bin/hlint went away, replace
6152         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6153         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6154         GenerateDocs now that they are prefixed with WARNING:.
6156         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6157         use manual href target instead of request.childLink
6159         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6160         display every second, but update the ETA every 5 seconds (or
6161         whenever) as remote_progress messages arrive.
6164 2003-02-12  Brian Warner  <warner@lothar.com>
6166         * *: import current sources from home CVS repository
6167         
6169 # Local Variables:
6170 # add-log-time-format: add-log-iso8601-time-string
6171 # End: