statusgui improvements
[buildbot.git] / ChangeLog
blob0085110ffb90e8bed1fe5c4af75c8a93797c6141
1 2006-06-01  Brian Warner  <warner@lothar.com>
3         * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
4         (Box.setETA): handle ETA=None (by stopping the timer)
5         (Box.update): make the [soon] text less different than the usual
6         text, so the rest of the text doesn't flop around so much. It
7         would be awfully nice to figure out how to center this stuff.
8         (ThreeRowBuilder.stepETAUpdate): more debugging printouts
10         * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
11         by default, so that any ShellCommand which fails marks the overall
12         build as a failure. I should have done this from the beginning.
13         Add flunkOnFailure=False to the arguments if you want to turn off
14         this behavior.
16 2006-05-30  Brian Warner  <warner@lothar.com>
18         * buildbot/clients/gtkPanes.py: add a third row: now it shows
19         last-build/current-build/current-step. Show what step is currently
20         running. Show ETA for both the overall build and the current step.
21         Update GTK calls to modern non-deprecated forms. There's still a
22         lot of dead code and debug noise to remove.
24         * buildbot/process/step_twisted.py (Trial): set the step name, so it
25         shows up properly in status displays
27 2006-05-28  Brian Warner  <warner@lothar.com>
29         * buildbot/test/test_properties.py (Run.testInterpolate): on the
30         build we use to verify that WithProperties works:
32         ** set flunkOnFailure=True so that build failures get noticed
33         ** set workdir='.' so that the build succeeds, otherwise it is trying
34             to touch 'build/something', and 'build/' doesn't exist because
35             usually that's created by a Source step
36         ** set timeout=10, because Twisted-1.3.0 has a race condition that
37             this test somehow triggers, in which the 'touch' process becomes
38             a zombie and we wait for th etimeout before giving up on it.
40         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
41         to log the Build results and step logs to the twisted log.
42         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
43         what went wrong if a build was expected to succeed but didn't.
45         * buildbot/process/step_twisted.py (Trial): set the default
46         trialMode to '--reporter=bwverbose', which specifies verbose
47         black-and-white text. Back in twisted-1.3/2.0 days we had to use
48         '-to', but those are completely missing in modern Twisteds.
50         * buildbot/scripts/sample.cfg: make the sample Manhole config use
51         a localhost-only port, to encourage better security
53         * docs/buildbot.texinfo (Change Sources): mention
54         darcs_buildbot.py
56         * .darcs-boring: add a Darcs boringfile
58         * README (REQUIREMENTS): stop claiming compatibility with
59         Twisted-1.3.0
61         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
62         sender
64 2006-05-27  Brian Warner  <warner@lothar.com>
66         * buildbot/__init__.py: bump to 0.7.3+ while between releases
67         * docs/buildbot.texinfo: same
69 2006-05-23  Brian Warner  <warner@lothar.com>
71         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
72         * docs/buildbot.texinfo: set version to match
73         * NEWS: update for 0.7.3
75         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
76         give a quick mapping from VC system to possible ChangeSources
77         (Build Properties): add 'buildername'
79         * buildbot/process/base.py (Build.setupStatus): oops, set
80         'buildername' and 'buildnumber' properties
81         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
82         test them
84 2006-05-22  Brian Warner  <warner@lothar.com>
86         * docs/buildbot.texinfo (Build Properties): explain the syntax of
87         property interpolation better
89         * README (INSTALLATION): remove old '-v' argument from recommended
90         trial command line
92         * docs/buildbot.texinfo (ShellCommand): add docs for description=
93         and descriptionDone= arguments. Thanks to Niklaus Giger for the
94         patch. SF#1475494.
96         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
97         'svnversion' instead of grepping the output of 'svn info', much
98         simpler and avoids CR/LF problems on windows. Thanks to Olivier
99         Bonnet for the suggestion.
100         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
101         require the WC_PATH argument, so run 'svnversion .' instead.
103         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
104         aren't supposed to have 'self' in their argument list
106 2006-05-21  Brian Warner  <warner@lothar.com>
108         * buildbot/process/step.py (ShellCommand.start): make
109         testInterpolate pass. I was passing the uninterpolated command to
110         the RemoteShellCommand constructor
111         (ShellCommand._interpolateProperties): oops, handle non-list
112         commands (i.e. strings with multiple words separated by spaces in
113         them) properly, instead of forgetting about them.
115         * buildbot/test/test_properties.py (Run.testInterpolate): new test
116         to actually try to use build properties in a real build. This test
117         fails.
118         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
119         to start and evaluate builds
121         * buildbot/test/test__versions.py: add a pseudo-test to record
122         what version of Twisted/Python/Buildbot are running. This should
123         show up at the beginning of _trial_tmp/test.log, and exists to help
124         debug other problems.
126         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
127         a filename to be served as 'robots.txt' to discourage web spiders.
128         Adapted from a patch by Tobi Vollebregt, thanks!
129         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
130         (Waterfall.test_waterfall): tweak the way that filenames are put
131         into the config file, to accomodate windows pathnames better.
133         * docs/buildbot.texinfo (HTML Waterfall): document it
135         * buildbot/process/process_twisted.py
136         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
137         changed the build process. The new setup.py no longer takes the
138         'all' argument.
139         (FullTwistedBuildFactory.__init__): same
140         (TwistedReactorsBuildFactory.__init__): same
142         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
143         be placed in the [hooks] section of the central repository (the
144         one that everybody pushes changes to).
146 2006-05-20  Brian Warner  <warner@lothar.com>
148         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
149         .darcs-context file, use binary mode. I think this was causing a
150         Darcs failure under windows.
152 2006-05-19  Brian Warner  <warner@lothar.com>
154         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
155         use a timezone string of +0000 and gmtime, since this timestamp is
156         sent to a buildmaster and %z is broken.
158         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
159         string and localtime, since this timestamp will only be consumed
160         locally, and %z is broken.
162         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
163         gmtime, since this timestamp is returned to the buildmaster, and
164         %z is broken.
166 2006-05-18  Brian Warner  <warner@lothar.com>
168         * NEWS: update in preparation for next release
170         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
171         setup-repository and do-we-have-the-vc-tools code into a separate
172         "helper" class, which sticks around in a single module-level
173         object. This seems more likely to continue to work in the future
174         than having it hide in the TestCase and hope that TestCases stick
175         around for a long time.
177         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
178         addremove' has been deprecated in recent versions of mercurial, so
179         use 'hg add' instead
181 2006-05-07  Brian Warner  <warner@lothar.com>
183         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
184         operating under windows, move the file before opening it, since
185         you can't rename a file that somebody has open.
187         * buildbot/process/base.py (Build.setupBuild): if something goes
188         wrong while creating a Step, log the name and arguments, since the
189         error message when you get the number of arguments wrong is really
190         opaque.
192 2006-05-06  Brian Warner  <warner@lothar.com>
194         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
195         bugs in twisted-specific code not covered by my unit tests, this
196         time use 'cmd' argument instead of self.cmd
198         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
199         fix stupid braino: either use startwith or find()==0, not both.
200         (TwistedReactorsBuildFactory.__init__): another dumb typo
202         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
203         mark this test as TODO under windows, since process-killing seems
204         dodgy there. We'll come back to this later and try to fix it
205         properly.
207         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
208         and don't include a timezone
209         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
210         This should avoid the windows-with-verbose-timezone-name problem
211         altogether.
212         (Patch.testPatch): add a test which runs 'patch' with less
213         overhead than the full VCBase.do_patch sequence, to try to isolate
214         a windows test failure. This one uses slave.commands.ShellCommand
215         and 'patch', but none of the VC code.
217         * buildbot/slave/commands.py (getCommand): use which() to find the
218         executables for 'cvs', 'svn', etc. This ought to help under
219         windows.
221         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
222         working directory before starting. If an earlier test failed, the
223         leftover directory would mistakenly flunk a later test.
224         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
225         Make sure that we use the right commandlines if which("tla") picks
226         up "tla.exe" (as it does under windows).
227         (TlaSupport.do_get): factor out this tla-vs-baz difference
228         (TlaSupport.vc_create): more tla-vs-baz differences
230         * buildbot/test/test_slavecommand.py
231         (ShellBase.testShellMissingCommand): stop trying to assert
232         anything about the error message: different shells on different
233         OSes with different languages makes it hard, and it really isn't
234         that interesting of a thing to test anyway.
236         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
237         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
238         "Panther"), because it has a bug which flunks a couple tests in
239         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
240         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
241         able to test that yet.
243 2006-04-30  Brian Warner  <warner@lothar.com>
245         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
246         make sure child commands emit messages in english, so our regexps
247         will match. Thanks to Nikaus Giger for identifying the problems.
248         (VCBase._do_vctest_export_1): mode="export" is not responsible
249         for setting the "got_revision" property, since in many cases it is
250         not convenient to determine.
251         (SVNSupport.capable): when running 'svn --version' to check for
252         ra_local, we want error messages in english
253         * buildbot/test/test_slavecommand.py 
254         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
255         to emit the error message in english
257         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
258         the environment with $LC_ALL="C" so that Commands which need to
259         parse the output of their child processes can obtain it in
260         english.
261         (SVN.parseGotRevision): call "svn info" afterwards instead of
262         watching the output of the "svn update" or "svn checkout".
263         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
264         (Arch.parseGotRevision): same
265         (Bazaar.parseGotRevision): same
266         (Mercurial.parseGotRevision): same
268         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
269         $LC_ALL="C" when running commands under 'buildbot try', too
271         * buildbot/test/__init__.py: remove the global os.environ()
272         setting, instead we do it just for the tests that run commands and
273         need to parse their output.
275         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
276         remove the overly-short .timeout on this test, because non-DNotify
277         platforms must fall back to polling which happens at 10 second
278         intervals, so a 5 second timeout would never succeed.
280 2006-04-24  Brian Warner  <warner@lothar.com>
282         * docs/buildbot.texinfo (Installing the code): update trial
283         invocation, SF#1469116 by Niklaus Giger.
284         (Attributes of Changes): updated branch-name examples to be
285         a bit more realistic, SF#1475240 by Stephen Davis.
287         * contrib/windows/buildbot2.bat: utility wrapper for windows
288         developers, contributed by Nick Trout (after a year of neglect..
289         sorry!). SF#1194231.
291         * buildbot/test/test_vc.py (*.capable): store the actual VC
292         binary's pathname in VCS[vcname], so it can be retrieved later
293         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
294         strip out non-numeric timezone information, specifically the funky
295         German string that his system produced that confuses CVS.
296         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
297         allow Darcs tests to work on windows
298         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
299         procutils.which() everywhere, to allow tryclient to work under
300         windows. Also from Niklaus Giger, SF#1463394.
302         * buildbot/twcompat.py (which): move the replacement for a missing
303         twisted.python.procutils.which from test_vc.py to here, so it can
304         be used in other places too (specifically tryclient.py)
306 2006-04-23  Brian Warner  <warner@lothar.com>
308         * buildbot/status/html.py (StatusResourceBuild.body): replace the
309         bare buildbotURL/projectName line with a proper DIV, along with a
310         CSS class of "title", from Stefan Seefeld (SF#1461675).
311         (WaterfallStatusResource.body0): remove the redundant 'table'
312         class from the table
313         (WaterfallStatusResource.body): same. Also add class="LastBuild"
314         to the top-row TR, and class="Activity" to the second-row TR,
315         rather than putting them in the individual TD nodes.
317         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
318         'got_revision' build property for all VC systems that implement
319         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
321         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
322         to determine which revision we actually obtained
323         (CVS.parseGotRevision): implement this for CVS, which just means
324         to grab a timestamp. Not ideal, and it depends upon the buildslave
325         having a clock that is reasonably well syncronized with the server,
326         but it's better than nothing.
327         (SVN.parseGotRevision): implement it for SVN, which is accurate
328         (Darcs.parseGotRevision): same
329         (Arch.parseGotRevision): same
330         (Bazaar.parseGotRevision): same
331         (Mercurial.parseGotRevision): same
333         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
334         keep a record of all non-stdout/stderr/header/rc status updates,
335         for the benefit of RemoteCommands that send other useful things,
336         like got_revision
337         (Source.commandComplete): put any 'got_revision' status values
338         into a build property of the same name
341         * buildbot/process/step_twisted.py (Trial): update to deal with
342         new ShellCommand refactoring
344         * docs/buildbot.texinfo (Build Properties): document new feature
345         that allows BuildSteps to get/set Build-wide properties like which
346         revision was requested and/or checked out.
348         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
349         * buildbot/status/builder.py (BuildStatus.getProperty): implement
350         it. Note that this bumps the persistenceVersion of the saved Build
351         object, so add the necessary upgrade-old-version logic to include
352         an empty properties dict.
354         * buildbot/process/base.py (Build.setProperty): implement it
355         (Build.getProperty): same
356         (Build.startBuild): change build startup to set 'branch',
357         'revision', and 'slavename' properties at the right time
359         * buildbot/process/step.py (BuildStep.__init__): change setup to
360         require 'build' argument in a better way
361         (LoggingBuildStep): split ShellCommand into two pieces, for better
362         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
363         a single RemoteCommand that sends stdout/stderr status text. It
364         also provides the usual commandComplete / createSummary /
365         evaluateCommand / getText methods to be overridden...
366         (ShellCommand): .. whereas ShellCommand is specifically for
367         running RemoteShellCommands. Other shell-like BuildSteps (like
368         Source) can inherit from LoggingBuildStep instead of ShellCommand
369         (WithProperties): marker class to do build-property interpolation
370         (Source): inherit from LoggingBuildStep instead of ShellCommand
371         (RemoteDummy): same
373         * buildbot/test/test_properties.py: test new functionality
375 2006-04-21  Brian Warner  <warner@lothar.com>
377         * buildbot/test/test_vc.py: rename testBranch to
378         testCheckoutBranch to keep the tests in about the right
379         alphabetical order
381 2006-04-18  Brian Warner  <warner@lothar.com>
383         * docs/buildbot.texinfo (PBListener): improve cross-references
384         between PBListener and 'buildbot statusgui', thanks to John Pye
385         for the suggestion.
387 2006-04-17  Brian Warner  <warner@lothar.com>
389         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
390         running under Twisted-1.3.0, otherwise skipped tests are reported
391         as errors.
393         * all: use isinstance() instead of 'type(x) is foo', suggested by
394         Neal Norwitz
396         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
397         oops, fix a brain-fade from the other week, when making the
398         addStep changes. I changed all the __init__ upcalls to use the
399         wrong superclass name.
400         (FullTwistedBuildFactory.__init__): same
401         (TwistedDebsBuildFactory.__init__): same
402         (TwistedReactorsBuildFactory.__init__): same
403         (TwistedBuild.isFileImportant): use .startswith for clarity,
404         thanks to Neal Norwitz for the suggestions.
406         * contrib/viewcvspoll.py: script to poll a viewcvs database for
407         changes, then deliver them over PB to a remote buildmaster.
409         * contrib/svnpoller.py: added script by John Pye to poll a remote
410         SVN repository (by running 'svn log') from a cronjob, and run
411         'buildbot sendchange' to deliver the changes to a remote
412         buildmaster.
413         * contrib/svn_watcher.py: added script by Niklaus Giger (a
414         modification of svnpoller.py), same purpose, but this one loops
415         internally (rather than expecting to run from a cronjob) and works
416         under windows.
417         * contrib/README.txt: same
419 2006-04-11  Brian Warner  <warner@lothar.com>
421         * all: fix a number of incorrect names and missing imports, thanks
422         to Anthony Baxter for the patch.
423         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
424         remove unused buggy method.
425         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
426         comes from shutil, not "shutils"
427         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
428         (Arch.checkSlaveVersion): same
429         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
430         some disabled code
431         * buildbot/process/step_twisted2.py: add some missing imports
432         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
433         this code used to live in twisted.internet.defer
435 2006-04-10  Brian Warner  <warner@lothar.com>
437         * buildbot/process/step.py (Mercurial): add Mercurial support
438         * buildbot/slave/commands.py (Mercurial): same
439         * buildbot/scripts/tryclient.py (MercurialExtractor): same
440         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
441         not yet tested, but 'try' support *is* covered
442         * docs/buildbot.texinfo (Mercurial): document it
444         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
445         some debugging messages (turned off)
446         * buildbot/test/test_vc.py: improve debug messages
448 2006-04-07  Brian Warner  <warner@lothar.com>
450         * buildbot/test/test_vc.py (which): define our own which() in case
451         we can't import twisted.python.procutils, because procutils doesn't
452         exist in Twisted-1.3
454         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
455         of SlaveLocks for performance tests
457         * docs/examples/twisted_master.cfg: update to match current usage
459         * buildbot/changes/p4poller.py (P4Source): add new arguments:
460         password, p4 binary, pollinterval, maximum history to check.
461         Patch from an anonymous sf.net contributor, SF#1219384.
462         * buildbot/process/step.py (P4Sync.__init__): add username,
463         password, and client arguments.
464         * buildbot/slave/commands.py (P4Sync): same
466 2006-04-05  Brian Warner  <warner@lothar.com>
468         * buildbot/process/factory.py (BuildFactory.addStep): new method
469         to add steps to a BuildFactory. Use it instead of f.steps.append,
470         and you can probably avoid using the s() convenience function.
471         Patch from Neal Norwitz, sf.net #1412605.
472         (other): update all factories to use addStep
473         * buildbot/process/process_twisted.py: update all factories to use
474         addStep.
476 2006-04-03  Brian Warner  <warner@lothar.com>
478         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
479         work under windows too. Adapted from a patch by Niklaus Giger,
480         addresses SF#1463399.
482         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
483         spawned commands emit parseable results in english and not some
484         other language. Patch from Niklaus Giger, SF#1463395.
486         * README (INSTALLATION): discourage users from running unit tests on
487         a "network drive", patch from Niklaus Giger, SF#1463394.
489 2006-03-22  Brian Warner  <warner@lothar.com>
491         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
492         function to turn a repository-relative pathname into a (branch,
493         branch-relative-filename) tuple. Change this function to handle
494         the branch naming policy used by your Subversion repository.
495         Thanks to AllMyData.com for sponsoring this work.
497 2006-03-16  Brian Warner  <warner@lothar.com>
499         * buildbot/scripts/sample.cfg: add python-mode declaration for
500         vim. Thanks to John Pye for the patch.
502         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
503         command line, mention the importance of running 'crontab' as the
504         buildmaster/buildslave user. Thanks to John Pye for the catch.
506 2006-03-13  Brian Warner  <warner@lothar.com>
508         * buildbot/status/words.py (IRC): add an optional password=
509         argument, which will be sent to Nickserv in an IDENTIFY message at
510         login, to claim the nickname. freenode requires this before the
511         bot can sent (or reply to) private messages. Thanks to Clement
512         Stenac for the patch.
513         * docs/buildbot.texinfo (IRC Bot): document it
515         * buildbot/status/builder.py (LogFile.merge): don't write chunks
516         larger than chunkSize. Fixes SF#1349253.
517         * buildbot/test/test_status.py (Log.testLargeSummary): test it
518         (Log.testConsumer): update to match new internal chunking behavior
520 2006-03-12  Brian Warner  <warner@lothar.com>
522         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
524         * buildbot/test/test_maildir.py (MaildirTest): rename the
525         'timeout' method, as it collides with trial's internals
527         * buildbot/scripts/runner.py: add 'buildbot restart' command
528         (stop): don't sys.exit() out of here, otherwise restart can't work
529         * docs/buildbot.texinfo (Shutdown): document it
531         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
532         * buildbot/status/html.py (Waterfall.__init__): same
533         * buildbot/process/builder.py (Builder.startBuild): same
534         * buildbot/process/base.py (BuildRequest): same
535         * buildbot/sourcestamp.py (SourceStamp): same
536         * buildbot/scheduler.py (Nightly): same
538         * buildbot/__init__.py (version): bump to 0.7.2+ while between
539         releases
540         * docs/buildbot.texinfo: same
542 2006-02-17  Brian Warner  <warner@lothar.com>
544         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
545         * docs/buildbot.texinfo: set version number to match
546         * NEWS: update for 0.7.2
548 2006-02-16  Brian Warner  <warner@lothar.com>
550         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
552 2006-02-09  Brian Warner  <warner@lothar.com>
554         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
555         add text to explain per-build branch parameters
556         * NEWS: mention --umask
558 2006-02-08  Brian Warner  <warner@lothar.com>
560         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
561         method
562         (SlaveOptions.optParameters): add --umask, to make it possible to
563         make buildslave-generated files (including build products) be
564         world-readable
565         (slaveTAC): same
566         * buildbot/slave/bot.py (BuildSlave.startService): same
568 2006-01-23  Brian Warner  <warner@lothar.com>
570         * buildbot/status/builder.py: urllib.quote() all URLs that include
571         Builder names, so that builders can include characters like '/'
572         and ' ' without completely breaking the resulting HTML. Thanks to
573         Kevin Turner for the patch.
574         * buildbot/status/html.py: same
575         * buildbot/test/test_web.py (GetURL.testBuild): match changes
577         * NEWS: update in preparation for upcoming release
579 2006-01-18  Brian Warner  <warner@lothar.com>
581         * docs/examples/twisted_master.cfg: update to match the Twisted
582         buildbot: remove python2.2, switch to exarkun's buildslaves,
583         disable the .deb builder until we figure out how to build twisted
584         .debs from SVN, add some ktrace debugging to the OS-X build
585         process and remove the qt build, remove threadless builders,
586         change freebsd builder to use landonf's buildslave.
588 2006-01-12  Brian Warner  <warner@lothar.com>
590         * buildbot/master.py (Manhole.__init__): let port= be a strports
591         specification string, but handle a regular int for backwards
592         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
593         used in master.cfg to limit connections to just the local host.
594         (BuildMaster.loadConfig): same for c['slavePortnum']
595         * buildbot/scheduler.py (Try_Userpass.__init__): same
596         * buildbot/status/client.py (PBListener.__init__): same
597         * buildbot/status/html.py (Waterfall.__init__): same, for both
598         http_port and distrib_port. Include backwards-compatibility checks
599         so distrib_port can be a filename string and still mean unix:/foo
600         * docs/buildbot.texinfo (Setting the slaveport): document it
601         (Debug options): same
602         (HTML Waterfall): same
603         (PBListener): same
604         (try): same
605         * buildbot/test/test_config.py (ConfigTest): test it
607         * buildbot/master.py (BuildMaster.loadConfig): wait for the
608         slaveport's disownServiceParent deferred to fire before opening
609         the new one. Fixes an annoying bug in the unit tests.
611 2006-01-03  Brian Warner  <warner@lothar.com>
613         * buildbot/master.py (BuildMaster): remove the .schedulers
614         attribute, replacing it with an allSchedulers() method that looks
615         for all IService children that implement IScheduler. Having only
616         one parent/child relationship means fewer opportunities for bugs.
617         (BuildMaster.allSchedulers): new method
618         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
619         also fix ugly bug that caused any config-file reload to
620         half-forget about the earlier Schedulers, causing an exception
621         when a Change arrived and was handed to a half-connected
622         Scheduler. The exception was in scheduler.py line 54ish:
623           self.parent.submitBuildSet(bs)
624           exceptions.AttributeError: 'NoneType' object has no attribute
625           'submitBuildSet'
626         (BuildMaster.addChange): update to use allSchedulers()
628         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
629         to work properly with twisted-1.3.0, where you must explicitly
630         include the __implements__ from parent classes
631         (BaseScheduler.__repr__): make it easier to distinguish distinct
632         instances
633         (BaseUpstreamScheduler.__implements__): same
635         * buildbot/status/builder.py (Status.getSchedulers): update to
636         use allSchedulers()
637         * buildbot/test/test_run.py (Run.testMaster): same
638         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
639         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
640         make sure Scheduler instances are left alone when an identical
641         config file is reloaded
642         (ConfigElements.testSchedulers): make sure Schedulers are properly
643         comparable
645         * Makefile (TRIALARGS): my local default Twisted version is now
646         2.1.0, update the trial arguments accordingly
648 2005-12-22  Brian Warner  <warner@lothar.com>
650         * docs/examples/twisted_master.cfg: merge changes from pyr: add
651         new win32 builders
653         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
654         addChange in the parent class, although I suspect this should be
655         fixed better in the future.
657 2005-11-26  Brian Warner  <warner@lothar.com>
659         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
660         explode when branch==None, thanks to Kevin Turner for the catch
661         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
662         it
664         * buildbot/__init__.py (version): bump to 0.7.1+ while between
665         releases
666         * docs/buildbot.texinfo: same
668 2005-11-26  Brian Warner  <warner@lothar.com>
670         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
671         * docs/buildbot.texinfo: set version number to match
673 2005-11-26  Brian Warner  <warner@lothar.com>
675         * NEWS: update for 0.7.1
677         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
678         sure that unsubscribe works even if we never sent an ETA update.
679         Also, don't explode on duplicate unsubscribe.
680         (BuildStepStatus.addLog): make the convenience "return self"-added
681         watcher automatically unsubscribe when the Step finishes.
682         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
683         (BuildStatus.stepStarted): same auto-unsubscribe
684         (BuilderStatus.buildStarted): same auto-unsubscribe
686         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
687         auto-unsubscribe
688         (IStatusReceiver.stepStarted): same
689         (IStatusReceiver.logStarted): same
691         * buildbot/test/test_run.py (Status): move the Status test..
692         * buildbot/test/test_status.py (Subscription): .. to here
694 2005-11-25  Brian Warner  <warner@lothar.com>
696         * NEWS: more updates
698         * buildbot/locks.py: fix the problem in which loading a master.cfg
699         file that changes some Builders (but not all of them) can result
700         in having multiple copies of the same Lock. Now, the real Locks
701         are kept in a table inside the BotMaster, and the Builders/Steps
702         use "LockIDs", which are still instances of MasterLock and
703         SlaveLock. The real Locks are instances of the new RealMasterLock
704         and RealSlaveLock classes.
705         * buildbot/master.py (BotMaster.getLockByID): new method to
706         convert LockIDs into real Locks.
707         * buildbot/process/base.py (Build.startBuild): convert LockIDs
708         into real Locks before building
709         * buildbot/process/step.py (BuildStep.startStep): same
710         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
711         exercises the problem
714         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
715         what Schedulers are available
717         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
718         work by Dobes Vandermeer and hacked mercilessly by me. This offers
719         'cron'-style build scheduling at certain times of day, week,
720         month, or year.
721         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
723         * buildbot/scheduler.py (Scheduler): change fileIsImportant
724         handling: treat self.fileIsImportant more as an attribute that
725         contains a callable than as a method. If the attribute is None,
726         don't call it and assume all filenames are important. It is still
727         possible to provide a fileIsImportant method in a subclass,
728         however.
729         (AnyBranchScheduler): handle fileIsImportant=None, previously it
730         was broken
731         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
732         test using AnyBranchScheduler with fileIsImportant=None
734 2005-11-24  Brian Warner  <warner@lothar.com>
736         * buildbot/test/test_config.py (StartService): don't claim a fixed
737         port number, instead set slavePort=0 on the first pass, figure out
738         what port was allocated, then switch to a config file that uses
739         the allocated port.
741         * buildbot/master.py (BuildMaster.loadConfig): close the old
742         slaveport before opening the new one, because unit tests might
743         replace slavePort=0 with the same allocated portnumber, and if we
744         don't wait for the old port to close first, we get a "port already
745         in use" error. There is a tiny race condition here, but the only
746         threat is from other programs that bind (statically) to the same
747         port number we happened to be allocated, and only if those
748         programs use SO_REUSEADDR, and only if they get control in between
749         reactor turns.
751         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
753         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
754         deleted ChangeSources before adding any new ones
755         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
756         compare_attrs, to make sure that a config-file reload does not
757         unnecessarily replace an unmodified ChangeSource instance
758         * buildbot/test/test_config.py (ConfigTest.testSources): update
760         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
761         mean "don't build anything", and add a warning if it gets used
762         because it isn't actually useful.
764         * contrib/svn_buildbot.py: update example usage to match the port
765         number that gets used by the PBChangeSource
766         * buildbot/scripts/sample.cfg: add example of PBChangeSource
768 2005-11-22  Brian Warner  <warner@lothar.com>
770         * NEWS: start collecting items for next release
772         * buildbot/process/step.py (SVN.computeSourceRevision): assume
773         revisions are strings
774         (P4Sync.computeSourceRevision): same
776         * buildbot/status/html.py (StatusResourceBuild.body): add a link
777         to the Buildbot's overall status page
778         (StatusResourceBuilder.body): same
780 2005-11-15  Brian Warner  <warner@lothar.com>
782         * buildbot/master.py (BuildMaster.loadConfig): serialize the
783         config-file loading, specifically to make sure old StatusTargets
784         are finished shutting down before new ones start up (thus
785         resolving a bug in which changing the Waterfall object would fail
786         because both new and old instances were claiming the same
787         listening port). Also load new Schedulers after all the new
788         Builders are set up, in case they fire off a new build right away.
789         * buildbot/test/test_config.py (StartService): test it
791         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
792         the branch name to the mail body
794         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
795         Without it, a config-file reload fails to update an existing
796         PBChangeSource.
797         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
798         username/passwd to compare_attrs, for the same reason
799         * buildbot/status/html.py (Waterfall): add favicon to
800         compare_attrs, same reason
802 2005-11-05  Brian Warner  <warner@lothar.com>
804         * buildbot/scripts/tryclient.py (createJobfile): stringify the
805         baserev before stuffing it in the jobfile. This resolves problems
806         under SVN (and probably Arch) where revisions are expressed as
807         numbers. I'm inclined to use string-based revisions everywhere in
808         the future, but this fix should be safe for now. Thanks to Steven
809         Walter for the patch.
811         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
812         binary mode when opening pickle files, to make windows work
813         better. Thanks to Dobes Vandermeer for the catch.
814         * buildbot/status/builder.py (BuildStatus.saveYourself): same
815         (BuilderStatus.getBuildByNumber): same
816         (Status.builderAdded): same
817         * buildbot/master.py (BuildMaster.loadChanges): same
819         * buildbot/util.py (Swappable): delete unused leftover code
821         * buildbot/process/step.py (SVN): when building on a non-default
822         branch, add the word "[branch]" to the VC step's description, so
823         it is obvious that we're not building the usual stuff. Likewise,
824         when we are building a specific revision, add the text "rNNN" to
825         indicate what that revision number is. Thanks to Brad Hards and
826         Nathaniel Smith for the suggestion.
827         (Darcs.startVC): same
828         (Arch.startVC): same
829         (Bazaar.startVC): same
831         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
832         typo, caught by Mark Dillavou, closes SF#1216636.
834         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
835         about a test to add some day
837         * docs/examples/twisted_master.cfg: update: bot1 can now handle
838         the 'full-2.3' build, and the 'reactors' build is now run under
839         python-2.4 because the buildslave no longer has gtk/etc bindings
840         for earlier versions.
842 2005-11-03  Brian Warner  <warner@lothar.com>
844         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
845         method, takes an IBuildStatus and rebuilds it. It might make more
846         sense to add this to IBuildControl instead, but that instance goes
847         away completely once the build has finished, and resubmitting
848         builds can take place weeks later.
849         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
850         * buildbot/status/html.py (StatusResourceBuild): also stash an
851         IBuilderControl so we can use resubmitBuild.
852         (StatusResourceBuild.body): render "resubmit" button if we can.
853         Also add hrefs for each BuildStep
854         (StatusResourceBuild.rebuild): add action for "resubmit" button
855         (StatusResourceBuilder.getChild): give it an IBuilderControl
857         * buildbot/status/builder.py (Status.getURLForThing): change the
858         URL for BuildSteps to have a "step-" prefix, so the magic URLs
859         that live as targets of buttons like "stop" and "rebuild" can't
860         collide with them.
861         * buildbot/status/builder.py (Status.getURLForThing): same
862         * buildbot/status/html.py (StatusResourceBuild.getChild): same
863         (StepBox.getBox): same
864         * buildbot/test/test_web.py (GetURL): same
865         (Logfile): same
867         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
868         exclusivity checks after Source.__init__ upcall, so misspelled
869         arguments will be reported more usefully
870         (Darcs.__init__): same
872 2005-10-29  Brian Warner  <warner@lothar.com>
874         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
875         builder. Move the Try scheduler off to a separate port.
877 2005-10-27  Brian Warner  <warner@lothar.com>
879         * buildbot/clients/gtkPanes.py
880         (TwoRowClient.remote_builderRemoved): disappearing Builders used
881         to cause the app to crash, now they don't.
883         * buildbot/clients/debug.py: display the buildmaster's location
884         in the window's title bar
886 2005-10-26  Brian Warner  <warner@lothar.com>
888         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
889         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
890         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
892         * buildbot/status/html.py (td): put a single non-breaking space
893         inside otherwise empty <td> elements, as a workaround for buggy
894         browsers which would optimize them away (along with any associated
895         styles, like the kind that create the waterfall grid borders).
896         Patch from Frerich Raabe.
898         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
899         argv-list as an argument, defaulting to ["-to"], which is
900         appropriate for the Trial that comes with Twisted-2.1.0 and
901         earlier. The Trial in current Twisted SVN wants
902         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
903         defaults to an empty list.
904         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
905         match it, now that trialMode= is a list instead of a single string
907         * buildbot/__init__.py (version): bump to 0.7.0+ while between
908         releases
909         * docs/buildbot.texinfo: same
911 2005-10-24  Brian Warner  <warner@lothar.com>
913         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
914         * docs/buildbot.texinfo: set version number to match
916 2005-10-24  Brian Warner  <warner@lothar.com>
918         * README: update for 0.7.0
919         * NEWS: same
920         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
922         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
923         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
924         send the branch= argument unless the user really provided one, to
925         retain compatibility with older buildmasters that don't accept
926         that argument.
927         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
928         same
930         * docs/buildbot.texinfo: update lots of stuff
932         * buildbot/scripts/runner.py (sendchange): add a --branch argument
933         to the 'buildbot sendchange' command
934         * buildbot/clients/sendchange.py (Sender.send): same
935         * buildbot/changes/pb.py (ChangePerspective): same
936         * buildbot/test/test_changes.py (Sender.testSender): test it
938         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
939         'default_branch' argument names to 'baseURL' and 'defaultBranch',
940         for consistency with other BuildStep arguments that use camelCase.
941         Well, at least more of them use camelCase (like flunkOnWarnings)
942         than don't.. I wish I'd picked one style and stuck with it
943         earlier. Annoying, but it's best done before the release, since
944         these arguments didn't exist at all in 0.6.6 .
945         (Darcs): same
946         * buildbot/test/test_vc.py (SVN.testCheckout): same
947         (Darcs.testPatch): same
948         * docs/buildbot.texinfo (SVN): document the change
949         (Darcs): same, add some build-on-branch docs
950         * docs/examples/twisted_master.cfg: match change
952         * buildbot/process/step.py (BuildStep): rename
953         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
954         how it is normally used.
955         * buildbot/test/test_steps.py (Version.checkCompare): same
957         * buildbot/process/step.py (CVS.startVC): refuse to build
958         update/copy -style builds on a non-default branch with an old
959         buildslave (<=0.6.6) that doesn't know how to do it properly. The
960         concern is that it will do a VC 'update' in an existing tree when
961         it is supposed to be switching branches (and therefore clobbering
962         the tree to do a full checkout), thus building the wrong source.
963         This used to be a warning, but I think the confusion it is likely
964         to cause warrants making it an error.
965         (SVN.startVC): same, also make mode=export on old slaves an error
966         (Darcs.startVC): same
967         (Git.startVC): improve error message for non-Git-enabled slaves
968         (Arch.checkSlaveVersion): same. continue to emit a warning when a
969         specific revision is built on a slave that doesn't pay attention
970         to args['revision'], because for slowly-changing trees it will
971         probably do the right thing, and because we have no way to tell
972         whether we're asking it to build the most recent version or not.
973         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
975         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
976         that 'master' is in host:portnum format, to catch errors sooner
978 2005-10-23  Brian Warner  <warner@lothar.com>
980         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
981         when creating the list of warning messages, include the line
982         immediately after each WARNING: line, since that's usually where
983         the file and line number wind up.
985         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
986         TryScheduler
988         * NEWS: update
990 2005-10-22  Brian Warner  <warner@lothar.com>
992         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
993         patch from Brad Hards
994         * buildbot/status/classic.css: same
995         * buildbot/test/test_web.py (Waterfall): match changes
997         * buildbot/test/test_steps.py (BuildStep.setUp): set
998         nextBuildNumber so the test passes
999         * buildbot/test/test_status.py (MyBuilder): same
1001         * buildbot/status/html.py (StatusResourceBuild.body): revision
1002         might be numeric, so stringify it before html-escapifying it
1003         (CurrentBox.getBox): add a "waiting" state, and show a countdown
1004         timer for the upcoming build
1005         * buildbot/status/classic.css: add background-color attributes for
1006         offline/waiting/building classes
1008         * buildbot/status/builder.py (BuildStatus): derive from
1009         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1010         the default (i.e. unknown) .slavename to "???" instead of None,
1011         since even unknown slavenames need to be printed eventually.
1012         (BuilderStatus): also derive from styles.Versioned . More
1013         importantly, determine .nextBuildNumber at creation/unpickling
1014         time by scanning the directory of saved BuildStatus instances and
1015         choosing one larger than the highest-numbered one found. This
1016         should fix the problem where random errors during upgrades cause
1017         the buildbot to forget about earlier builds. .nextBuildNumber is
1018         no longer stored in the pickle.
1019         (Status.builderAdded): if we can't unpickle the BuilderStatus,
1020         at least log the error. Also call Builder.determineNextBuildNumber
1021         once the basedir is set.
1023         * buildbot/master.py (BuildMaster.loadChanges): do
1024         styles.doUpgrade afterwards, in case I decide to make Changes
1025         derived from styles.Versioned some day and forget to make this
1026         change later.
1029         * buildbot/test/test_runner.py (Options.testForceOptions): skip
1030         when running under older pythons (<2.3) in which the shlex module
1031         doesn't have a 'split' function.
1033         * buildbot/process/step.py (ShellCommand.start): make
1034         errorMessages= be a list of strings to stuff in the log before the
1035         command actually starts. This makes it easier to flag multiple
1036         warning messages, e.g. when the Source steps have to deal with an
1037         old buildslave.
1038         (CVS.startVC): handle slaves that don't handle multiple branches
1039         by switching into 'clobber' mode
1040         (SVN.startVC): same. Also reject branches without base_url
1041         (Darcs.startVC): same. Also reject revision= in older slaves
1042         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1043         (Bazaar.startVC): same, and test for baz separately than for arch
1045         * buildbot/slave/commands.py (cvs_ver): document new features
1047         * buildbot/process/step.py (BuildStep.slaveVersion): document it
1048         (BuildStep.slaveVersionNewEnough): more useful utility method
1049         * buildbot/test/test_steps.py (Version): start testing it
1051         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1052         the 'force' command requires python2.3, for the shlex.split method
1054         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1055         since we don't use it anymore. The Twisted buildbot uses a
1056         PBChangeSource now.
1058 2005-10-21  Brian Warner  <warner@lothar.com>
1060         * buildbot/process/process_twisted.py: rework all BuildFactory
1061         classes to take a 'source' step as an argument, instead of
1062         building up the SVN instance in the factory.
1063         * docs/examples/twisted_master.cfg: enable build-on-branch by
1064         providing a base_url and default_branch
1066         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1067         control over --branch and --revision, not that they are always
1068         legal to provide
1069         * buildbot/status/html.py (StatusResourceBuilder.force): same
1070         (StatusResourceBuild.body): display SourceStamp components
1072         * buildbot/scripts/runner.py (ForceOptions): option parser for the
1073         IRC 'force' command, so it can be shared with an eventual
1074         command-line-tool 'buildbot force' mode.
1075         * buildbot/test/test_runner.py (Options.testForceOptions): test it
1077 2005-10-20  Brian Warner  <warner@lothar.com>
1079         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1081         * docs/examples/twisted_master.cfg: update to use Schedulers
1083         * buildbot/scripts/sample.cfg: update with Schedulers
1085         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1086         method specifically for use by HTML "force build" button and the
1087         IRC "force" command. Raises an immediate error if there are no
1088         slaves available.
1089         (IBuilderControl.requestBuild): make this just submit a build, not
1090         try to check for existing slaves or set up any when-finished
1091         Deferreds or anything.
1092         * buildbot/process/builder.py (BuilderControl): same
1093         * buildbot/status/html.py (StatusResourceBuilder.force): same
1094         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1095         * buildbot/test/test_slaves.py: same
1096         * buildbot/test/test_web.py: same
1098 2005-10-19  Brian Warner  <warner@lothar.com>
1100         * docs/examples/twisted_master.cfg: re-sync with reality: bring
1101         back python2.2 tests, turn off OS-X threadedselect-reactor tests
1103 2005-10-18  Brian Warner  <warner@lothar.com>
1105         * buildbot/status/html.py: provide 'status' argument to most
1106         StatusResourceFOO objects
1107         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1108         and Logfiles" section to make the Build page into a more-or-less
1109         comprehensive source of status information about the build
1111         * buildbot/status/mail.py (MailNotifier): include the Build's URL
1112         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1114 2005-10-17  Brian Warner  <warner@lothar.com>
1116         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1117         arguments to accomodate Twisted >=2.1.0 . I will have to figure
1118         out what to do about other projects: the correct options for
1119         recent Twisteds will not work for older ones.
1121 2005-10-15  Brian Warner  <warner@lothar.com>
1123         * buildbot/status/builder.py (Status.getURLForThing): add method
1124         to provide a URL for arbitrary IStatusFoo objects. The idea is to
1125         use this in email/IRC status clients to make them more useful, by
1126         providing the end user with hints on where to learn more about the
1127         object being reported on.
1128         * buildbot/test/test_web.py (GetURL): tests for it
1130 2005-10-14  Brian Warner  <warner@lothar.com>
1132         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1133         fix bug resulting from deferredResult changes
1135 2005-10-13  Brian Warner  <warner@lothar.com>
1137         * buildbot/test/test_changes.py: remove use of deferredResult
1138         * buildbot/test/test_config.py: same
1139         * buildbot/test/test_control.py: same
1140         * buildbot/test/test_status.py: same
1141         * buildbot/test/test_vc.py: this is the only remaining use, since
1142         it gets used at module level. This needs to be replaced by some
1143         sort of class-level run-once routine.
1145         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1147         * lots: implement multiple slaves per Builder, which means multiple
1148         current builds per Builder. Some highlights:
1149         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1150         of (state,currentBuilds) instead of (state,currentBuild)
1151         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1152         (IBuildStatus.getSlavename): new method, so you can tell which
1153         slave got used. This only gets set when the build completes.
1154         (IBuildRequestStatus.getBuilds): new method
1156         * buildbot/process/builder.py (SlaveBuilder): add a .state
1157         attribute to track things like ATTACHING and IDLE and BUILDING,
1158         instead of..
1159         (Builder): .. the .slaves attribute here, which has been turned
1160         into a simple list of available slaves. Added a separate
1161         attaching_slaves list to track ones that are not yet ready for
1162         builds.
1163         (Builder.fireTestEvent): put off the test-event callback for a
1164         reactor turn, to make tests a bit more consistent.
1165         (Ping): cleaned up the slaveping a bit, now it disconnects if the
1166         ping fails due to an exception. This needs work, I'm worried that
1167         a code error could lead to a constantly re-connecting slave.
1168         Especially since I'm trying to move to a distinct remote_ping
1169         method, separate from the remote_print that we currently use.
1170         (BuilderControl.requestBuild): return a convenience Deferred that
1171         provides an IBuildStatus when the build finishes.
1172         (BuilderControl.ping): ping all connected slaves, only return True
1173         if they all respond.
1175         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1176         reconnect when we shut down.
1178         * buildbot/status/builder.py: implement new methods, convert
1179         one-build-at-a-time methods to handle multiple builds
1180         * buildbot/status/*.py: do the same in all default status targets
1181         * buildbot/status/html.py: report the build's slavename in the
1182         per-Build page, report all buildslaves on the per-Builder page
1184         * buildbot/test/test_run.py: update/create tests
1185         * buildbot/test/test_slaves.py: same
1186         * buildbot/test/test_scheduler.py: remove stale test
1188         * docs/buildbot.texinfo: document the new builder-specification
1189         'slavenames' parameter
1191 2005-10-12  Brian Warner  <warner@lothar.com>
1193         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1194         report failure correctly, causing Dependent builds to run when
1195         they shouldn't have.
1196         * buildbot/status/builder.py (BuildSetStatus): same
1197         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1198         (Set.testSuccess): test the both-pass case too
1199         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1200         fix this test: it was ending too early, masking the failure before
1201         (Logger): specialized StatusReceiver to make sure the dependent
1202         builds aren't even started, much less completed.
1204 2005-10-07  Brian Warner  <warner@lothar.com>
1206         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1207         bot.SlaveBuilder being disowned in the middle of a build
1209         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1210         this inherit from StatusReceiver. Also upcall in __init__. This
1211         fixes the embarrasing crash when the new buildSetSubmitted method
1212         is invoked and Waterfall/etc don't implement their own.
1213         * buildbot/test/test_run.py: add a TODO note about a test to catch
1214         just this sort of thing.
1216         * buildbot/process/builder.py (Builder.attached): remove the
1217         already-attached warning, this situation is normal. Add some
1218         comments explaining it.
1220 2005-10-02  Brian Warner  <warner@lothar.com>
1222         * buildbot/changes/maildir.py (Maildir.start): Tolerate
1223         OverflowError when setting up dnotify, because some 64-bit systems
1224         have problems with signed-vs-unsigned constants and trip up on the
1225         DN_MULTISHOT flag. Patch from Brad Hards.
1227 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
1229         * buildbot/process/step.py (BuildStep, ShellCommand): Add
1230         progressMetrics, description, descriptionDone to the 'parms' list,
1231         and make use the 'parms' list from the implementation class
1232         instead of only BuildStep to initialize the parameters.  This
1233         allows buildbot.process.factory.s() to initialize all the parms,
1234         not just those defined in directly by BuildStep.
1236 2005-09-03  Brian Warner  <warner@lothar.com>
1238         * NEWS: start adding items for the next release
1240         * docs/examples/twisted_master.cfg: (sync with reality) turn off
1241         python2.2 tests, change 'Quick' builder to only use python2.3
1243 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
1245         * buildbot/status/html.py (StatusResourceBuilder.body): only show
1246         the "Ping Builder" button if the build control is available; the
1247         user sees an exception otherwise
1249         * docs/buildbot.texinfo (PBChangeSource): fix a typo
1251 2005-09-01  Brian Warner  <warner@lothar.com>
1253         * buildbot/interfaces.py (IBuilderStatus.getState): update
1254         signature, point out that 'build' can be None
1255         (IBuildStatus.getETA): point out ETA can be none
1257         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1258         being None
1259         * buildbot/status/words.py (IrcStatusBot.emit_status): same
1261 2005-08-31  Brian Warner  <warner@lothar.com>
1263         * buildbot/status/base.py (StatusReceiver.builderChangedState):
1264         update to match correct signature: removed 'eta' argument
1265         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1267 2005-08-30  Brian Warner  <warner@lothar.com>
1269         * buildbot/status/builder.py (LogFile): remove the assertion that
1270         blows up when you try to overwrite an existing logfile, instead
1271         just emit a warning. This case gets hit when the buildmaster is
1272         killed and doesn't get a chance to write out the serialized
1273         BuilderStatus object, so the .nextBuildNumber attribute gets out
1274         of date.
1276         * buildbot/scripts/runner.py (sendchange): add --revision_file to
1277         the 'buildbot sendchange' arguments, for the Darcs context file
1278         * docs/buildbot.texinfo (sendchange): document it
1280         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1281         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1282         (IStatus.getSchedulers): new method
1283         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1284         (Status.getSchedulers): implement
1285         * buildbot/process/builder.py (Builder): maintain
1286         BuilderStatus.pendingBuilds
1287         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1288         (TryBase.addChange): Try schedulers should ignore Changes
1290         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1291         for 'try' on CVS/SVN
1292         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1294         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1295         report status properly.
1296         (Try.createJob): implement unique buildset IDs
1298         * buildbot/status/client.py (StatusClientPerspective): add a
1299         perspective_getBuildSets method for the benefit of jobdir-style
1300         'try'.
1301         * docs/buildbot.texinfo (try): more docs
1302         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1303         new test case
1305 2005-08-18  Brian Warner  <warner@lothar.com>
1307         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1308         actually work. It's functional but still kind of clunky. Also, it
1309         only works with the pb-style.. needs to be made to work with the
1310         jobdir-style too.
1312         * buildbot/status/client.py (RemoteBuildSet): new class
1313         (RemoteBuildRequest): same
1314         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1315         object, not the internal BuildStatus object.
1316         (RemoteBuild.remote_subscribe): new method to subscribe to builds
1317         outside of the usual buildStarted() return value.
1318         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1320         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1321         (Try_Userpass_Perspective.perspective_try): return a remotely
1322         usable BuildSetStatus object
1324         * buildbot/interfaces.py (IBuildStatus): remove obsolete
1325         isStarted()/waitUntilStarted()
1327 2005-08-16  Brian Warner  <warner@lothar.com>
1329         * buildbot/status/builder.py: implement IBuildSetStatus and
1330         IBuildRequestStatus, wire them into place.
1331         * buildbot/buildset.py: same. Add ID, move wait-until-finished
1332         methods into the BuildSetStatus object.
1333         * buildbot/interfaces.py: same
1334         (IStatus.getBuildSets): new method to get pending BuildSets
1335         (IStatusReceiver.buildsetSubmitted): new method which hears about
1336         new BuildSets
1337         * buildbot/master.py (BuildMaster.submitBuildSet): same
1338         * buildbot/process/base.py (BuildRequest): same, replace
1339         waitUntilStarted with subscribe/unsubscribe
1340         * buildbot/process/builder.py (BuilderControl.forceBuild): use
1341         subscribe instead of waitUntilStarted
1342         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1343         for new method
1344         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1345         same
1346         * buildbot/test/test_buildreq.py: update for new code
1347         * buildbot/test/test_control.py (Force.testRequest): same
1350         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1351         for Darcs to not use the tempfile module, so it works under
1352         python-2.2 too. We really didn't need the full cleverness of that
1353         module, since the slave has exclusive control of its own builddir.
1355 2005-08-15  Brian Warner  <warner@lothar.com>
1357         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1358         for CVS trees. It doesn't work for non-trunk branches,
1359         unfortunately.
1360         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1361         branch test
1363         * Makefile: make it easier to test against python2.2
1365         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1366         tearDown2, so things like Arch can unregister archives as they're
1367         shutting down. The previous subclass-override-tearDown technique
1368         resulted in a nested maybeWait() and test failures under
1369         Twisted-1.3.0
1371         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1372         where we can (Arch), add a branch= argument to set the branch used
1373         when we can't
1374         (BazExtractor): extract the branch too
1375         (TlaExtractor): same
1376         * buildbot/scripts/runner.py (TryOptions): add --branch
1377         * docs/buildbot.texinfo (try): document --branch/try_branch
1379         * buildbot/slave/commands.py (Darcs): implement get-revision for
1380         Darcs, so that 'try' will work. This requires the tempfile module
1381         from python-2.3 .
1383         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1384         of revisions, branches, and 'try' in the process.
1386 2005-08-11  Brian Warner  <warner@lothar.com>
1388         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1389         this, it got broken at some point in the last few releases
1390         * buildbot/status/words.py (IrcBuildRequest): reply was broken
1391         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1392         specifically the removal of ETA information from the tuple
1394         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1395         warning message
1397         * docs/buildbot.texinfo (try): document both --builder and
1398         'try_builders' in .buildbot/options
1399         * buildbot/scripts/runner.py (TryOptions): add --builder,
1400         accumulate the values into opts['builders']
1401         * buildbot/scripts/tryclient.py (Try.__init__): set builders
1402         * buildbot/test/test_runner.py (Try): add some quick tests to make
1403         sure 'buildbot try --options' and .buildbot/options get parsed
1404         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1405         use --builder control
1407         * docs/buildbot.texinfo (try): add --port argument to PB style
1409         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1410         actual SourceStamp. Still need to extract a branch name, somehow.
1411         (Try): finish implementing the try client side, still need a UI
1412         for specifying which builders to use
1413         (Try.getopt): factor our options/config-file reading
1414         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1415         test it
1416         * buildbot/test/test_vc.py: match SourceStampExtractor change
1418         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1419         causes the twisted log to be sent to stderr
1421         * buildbot/scheduler.py (Try_Userpass): implement the PB style
1423 2005-08-10  Brian Warner  <warner@lothar.com>
1425         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1426         style is 90% done, still missing status reporting or waiting for
1427         the buildsets to finish, and it is completely untested.
1429         * buildbot/trybuild.py: delete file, move contents to ..
1430         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1431         * buildbot/test/test_vc.py: match the move
1433         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1434         of the TryScheduler, no buildsetID or status-tracking support yet
1435         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1437         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1438         possible to set the basedir after __init__ time, so it is easier
1439         to use as a Service-child of the BuildMaster instance
1441         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1442         that delivers messages to its Service parent instead of requiring
1443         a subclass to be useful. This turns out to be much easier to build
1444         unit tests around.
1446         * buildbot/scripts/tryclient.py (createJob): utility code to
1447         create jobfiles, will eventually be used by 'buildbot try'
1449 2005-08-08  Brian Warner  <warner@lothar.com>
1451         * docs/buildbot.texinfo (try): add docs on the
1452         as-yet-unimplemented Try scheduler
1454         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1455         * buildbot/test/test_scheduler.py: .. here
1456         (Scheduling.testTryJobdir): add placeholder test for 'try'
1458         * buildbot/test/test_status.py (Log.testMerge3): update to match new
1459         addEntry merging (>=chunkSize) behavior
1460         (Log.testConsumer): update to handle new callLater(0) behavior
1462         * buildbot/test/test_web.py: rearrange tests a bit, add test for
1463         both the MAX_LENGTH bugfix and the resumeProducing hang.
1465         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1466         put off the actual resumeProducing for a moment with
1467         reactor.callLater(0). This works around a twisted-1.3.0 bug which
1468         causes large logfiles to hang midway through.
1470         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1471         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1472         and to improve memory usage when streaming the file out to a web
1473         browser.
1474         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1475         make this work cleanly
1477 2005-08-03  Brian Warner  <warner@lothar.com>
1479         * buildbot/trybuild.py: new file for 'try' utilities
1480         (getSourceStamp): run in a tree, find out the baserev+patch
1481         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1482         implemented for SVN and Darcs, still working on Arch. I don't know
1483         how to make CVS work yet.
1485         * docs/buildbot.texinfo: document the 'buildbot' command-line
1486         tool, including the not-yet-implemented 'try' feature, and the
1487         in-flux .buildbot/ options directory.
1489 2005-07-20  Brian Warner  <warner@lothar.com>
1491         * buildbot/locks.py: added temporary id() numbers to Lock
1492         descriptions, to track down a not-really-sharing-the-Lock bug
1494         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1496         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1497         needed for python2.2 compatibility
1498         * buildbot/test/test_vc.py: python2.2 compatibility: generators
1499         are from the __future__
1501 2005-07-19  Brian Warner  <warner@lothar.com>
1503         * buildbot/master.py (BuildMaster.loadConfig): give a better error
1504         message when schedulers use unknown builders
1506         * buildbot/process/builder.py (Builder.compareToSetup): make sure
1507         SlaveLock('name') and MasterLock('name') are distinct
1509         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1510         c['schedulers'] in such a way that we can actually accept
1511         Dependent instances
1512         * buildbot/test/test_config.py: check it
1514         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1515         utility method to *all* the Schedulers
1516         (Periodic.listBuilderNames): same
1518         * docs/buildbot.texinfo (Interlocks): update chapter to match
1519         reality
1521         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1522         to make sure that c['sources'], c['schedulers'], and c['status']
1523         are all lists of the appropriate objects, and that the Schedulers
1524         all point to real Builders
1525         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1526         'listBuilderNames' utility method to support this
1527         * buildbot/scheduler.py: implement the utility method
1528         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1530         * docs/buildbot.texinfo: add some @cindex entries
1532         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1533         if it wasn't already set: most tla commands will fail unless one
1534         has been set.
1535         (Arch.createRepository): and disable bazaar's revision cache, since
1536         they cause test failures (the multiple repositories we create all
1537         interfere with each other through the cache)
1539         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1540         bring it properly up to date with twisted-2.0 test guidelines
1542         * buildbot/master.py (BuildMaster): remove references to old
1543         'interlock' module, this caused a bunch of post-merge test
1544         failures
1545         * buildbot/test/test_config.py: same
1546         * buildbot/process/base.py (Build): same
1548         * buildbot/test/test_slaves.py: stubs for new test case
1550         * buildbot/scheduler.py: add test-case-name tag
1551         * buildbot/test/test_buildreq.py: same
1553         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1554         unnecessary init code
1555         (Bot.remote_setBuilderList): match it
1557         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1559         * buildbot/changes/mail.py (parseSyncmail): update comment
1561         * buildbot/test/test_slavecommand.py: disable Shell tests on
1562         platforms that don't suport IReactorProcess
1564         * buildbot/status/builder.py (LogFile): remove the 't' mode from
1565         all places where we open logfiles. It causes OS-X to open the file
1566         in some weird mode that that prevents us from mixing reads and
1567         writes to the same filehandle, which we depend upon to implement
1568         _generateChunks properly. This change doesn't appear to break
1569         win32, on which "b" and "t" are treated differently but a missing
1570         flag seems to be interpreted as "t".
1572 2005-07-18  Brian Warner  <warner@lothar.com>
1574         * buildbot/slave/commands.py (ShellCommand): overhaul
1575         error-handling code, to try and make timeout/interrupt work
1576         properly, and make win32 happier
1577         * buildbot/test/test_slavecommand.py: clean up, stop using
1578         reactor.iterate, add tests for timeout and interrupt
1579         * buildbot/test/sleep.py: utility for a new timeout test
1581         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1582         code from the local-usebranches branch
1584 2005-07-17  Brian Warner  <warner@lothar.com>
1586         * buildbot/process/process_twisted.py
1587         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1588         minutes, to match the other twisted BuildFactories, and don't
1589         excuse failures in c/qt/win32 reactors any more.
1591         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1592         'freebsd' builders, since the buildslaves have been unavailable
1593         for quite a while
1595 2005-07-13  Brian Warner  <warner@lothar.com>
1597         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1598         build-on-branch feature
1600         * buildbot/process/step.py (Darcs.__init__): add base_url and
1601         default_branch arguments, just like SVN
1602         (Arch.__init__): note that the version= argument is really the
1603         default branch name
1605         * buildbot/slave/commands.py (SourceBase): keep track of the
1606         repository+branch that was used for the last checkout in
1607         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1608         match, we clobber the directory and perform a fresh checkout
1609         rather than trying to do an in-place update. This should protect
1610         us against trying to get to branch B by doing an update in a tree
1611         obtained from branch A.
1612         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1613         (SVN.setup): same, just the svnurl
1614         (Darcs.setup): same, just the repourl
1615         (Arch.setup): same, arch coordinates (url), version, and
1616         buildconfig. Also pull the buildconfig from the args dictionary,
1617         which we weren't doing before, so the build-config was effectively
1618         disabled.
1619         (Arch.sourcedirIsUpdateable): don't try to update when we're
1620         moving to a specific revision: arch can't go backwards, so it is
1621         safer to just clobber the tree and checkout a new one at the
1622         desired revision.
1623         (Bazaar.setup): same sourcedata as Arch
1625         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1626         use maybeWait, to work with twisted-1.3.0 and twcompat
1627         (Dependencies.testRun_Pass): same
1629         * buildbot/test/test_vc.py: rearrange, cleanup
1631         * buildbot/twcompat.py: add defer.waitForDeferred and
1632         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1633         can work under twisted-1.3.0 .
1635         * buildbot/test/test_vc.py: rewrite. The sample repositories are
1636         now created at setUp time. This increases the runtime of the test
1637         suite considerably (from 91 seconds to 151), but it removes the
1638         need for an offline tarball, which should solve a problem I've
1639         seen where the test host has a different version of svn than the
1640         tarball build host. The new code also validates that mode=update
1641         really picks up recent commits. This approach will also make it
1642         easier to test out branches, because the code which creates the VC
1643         branches is next to the code which uses them. It will also make it
1644         possible to test some change-notification hooks, by actually
1645         performing a VC commit and watching to see the ChangeSource get
1646         notified.
1648 2005-07-12  Brian Warner  <warner@lothar.com>
1650         * docs/buildbot.texinfo (SVN): add branches example
1651         * docs/Makefile (buildbot.ps): add target for postscript manual
1653         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
1654         * buildbot/test/test_locks.py: same
1656         * buildbot/process/step.py (Darcs): comment about default branches
1658         * buildbot/master.py (BuildMaster.loadConfig): don't look for
1659         c['interlocks'] in the config file, complain if it is present.
1660         Scan all locks in c['builders'] to make sure the Locks they use
1661         are uniquely named.
1662         * buildbot/test/test_config.py: remove old c['interlocks'] test,
1663         add some tests to check for non-uniquely-named Locks
1664         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1665         since the unique-Lock validation code requires it now
1667         * buildbot/locks.py: fix test-case-name
1669         * buildbot/interlock.py: remove old file
1671 2005-07-11  Brian Warner  <warner@lothar.com>
1673         * buildbot/test/test_interlock.py: rename to..
1674         * buildbot/test/test_locks.py: .. something shorter
1676         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1677         versions (after 2.0.1) changed internet.TCPClient to shut down the
1678         connection in stopService. Change the code to handle this
1679         gracefully.
1681         * buildbot/process/base.py (Build): handle whole-Build locks
1682         * buildbot/process/builder.py (Builder.compareToSetup): same
1683         * buildbot/test/test_interlock.py: make tests work
1685         * buildbot/process/step.py (BuildStep.startStep): complain if a
1686         Step tries to claim a lock that's owned by its own Build
1687         (BuildStep.releaseLocks): typo
1689         * buildbot/locks.py (MasterLock): use ComparableMixin so config
1690         file reloads don't replace unchanged Builders
1691         (SlaveLock): same
1692         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1693         rewrite to cover new Locks instead of old c['interlocks']
1694         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1695         slave2 too
1698         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1699         start the master and connect the buildslave
1701         * buildbot/process/step.py (FailingDummy.done): finish with a
1702         FAILURE status rather than raising an exception
1704         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1705         stringify a BuildRequest.reason that is None
1707         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1708         minor fix
1709         * buildbot/status/builder.py (BuildSetStatus): implement enough to
1710         allow scheduler.Dependent to work
1711         * buildbot/buildset.py (BuildSet): set .reason and .results
1713         * buildbot/test/test_interlock.py (Locks.setUp): connect both
1714         slaves, to make the test stop hanging. It still fails, of course,
1715         because I haven't even started to implement Locks.
1717         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1719         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1720         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1721         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1722         (Dependent): new class for downstream build dependencies
1723         * buildbot/test/test_dependencies.py: tests (still failing)
1725         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1727 2005-07-07  Brian Warner  <warner@lothar.com>
1729         * buildbot/test/runutils.py (RunMixin): factored this class out..
1730         * buildbot/test/test_run.py: .. from here
1731         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1732         added new buildbot.locks tests (which all hang right now)
1733         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1734         * buildbot/process/step.py: claim/release per-BuildStep locks
1736         * docs/Makefile: add 'buildbot.html' target
1738         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1739         interpreted as "HEAD", so that all VC steps can accept branch=None
1740         and have it mean the "default branch".
1742         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1744 2005-07-07  Brian Warner  <warner@lothar.com>
1746         * docs/examples/twisted_master.cfg: update to match current usage
1748         * docs/buildbot.texinfo (System Architecture): comment out the
1749         image, it doesn't exist yet and just screws up the HTML manual.
1751 2005-07-05  Brian Warner  <warner@lothar.com>
1753         * debian/.cvsignore: oops, missed one. Removing leftover file.
1755 2005-06-17  Brian Warner  <warner@lothar.com>
1757         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1758         changed its output in 1.2.0, don't mistakenly think that the
1759         subversion we find isn't capable of supporting our tests.
1761         * debian/*: remove the debian/ directory and its contents, to make
1762         life easier for the proper Debian maintainer
1763         * MANIFEST.in: same
1764         * Makefile (release): same
1766 2005-06-07  Brian Warner  <warner@lothar.com>
1768         * everything: create a distinct SourceStamp class to replace the
1769         ungainly 4-tuple, let it handle merging instead of BuildRequest.
1770         Changed the signature of Source.startVC to include the revision
1771         information (instead of passing it through self.args). Implement
1772         branches for SVN (now only Darcs/Git is missing support). Add more
1773         Scheduler tests.
1775 2005-06-06  Brian Warner  <warner@lothar.com>
1777         * everything: rearrange build scheduling. Create a new Scheduler
1778         object (configured in c['schedulers'], which submit BuildSets to a
1779         set of Builders. Builders can now use multiple slaves. Builds can
1780         be run on alternate branches, either requested manually or driven
1781         by changes. This changed some of the Status classes. Interlocks
1782         are out of service until they've been properly split into Locks
1783         and Dependencies. treeStableTimer, isFileImportant, and
1784         periodicBuild have all been moved from the Builder to the
1785         Scheduler.
1786         (BuilderStatus.currentBigState): removed the 'waiting' and
1787         'interlocked' states, removed the 'ETA' argument.
1789 2005-05-24  Brian Warner  <warner@lothar.com>
1791         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1792         erroneously abandons the connection (in clientConnectionFailed)
1793         for non-UserErrors, which means that if we lose the connection due
1794         to a network problem or a timeout, we'll never try to reconnect.
1795         Fix this by not upcalling to the buggy parent method. Note:
1796         twisted-2.0 fixes this, but the function only has 3 lines so it
1797         makes more sense to copy it than to try and detect the buggyness
1798         of the parent class. Fixes SF#1207588.
1800         * buildbot/changes/changes.py (Change.branch): doh! Add a
1801         class-level attribute to accomodate old Change instances that were
1802         pickled before 0.6.5 (where .branch was added for new Changes).
1803         This fixes the exception that occurs when you try to look at an
1804         old Change (through asHTML).
1806         * buildbot/__init__.py (version): bump to 0.6.6+ while between
1807         releases
1809 2005-05-23  Brian Warner  <warner@lothar.com>
1811         * buildbot/__init__.py (version): release 0.6.6
1813 2005-05-23  Brian Warner  <warner@lothar.com>
1815         * NEWS: update for 0.6.6 release
1816         * debian/changelog: same
1818         * buildbot/scripts/runner.py (start): put the basedir in sys.path
1819         before starting: this was done by twistd back when we spawned it,
1820         now that we're importing the pieces and running them in the
1821         current process, we have to do it ourselves. This allows
1822         master.cfg to import files from the same directory without
1823         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1824         Stichele for the catch.
1825         (Options.opt_version): Add a --version command (actually, just make
1826         the existing --version command emit Buildbot's version too)
1828         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1829         fix to make this behave like other LogFiles, this time to handle
1830         existing LogFiles on disk. (add the missing .upgrade method)
1831         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1833 2005-05-21  Brian Warner  <warner@lothar.com>
1835         * buildbot/test/test_runner.py (Create.testMaster): match the
1836         rawstring change in runner.py:masterTAC
1838         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1839         TwistedWords is installed
1840         * buildbot/test/test_status.py: same, with TwistedMail
1842         * buildbot/master.py: remove old IRC/Waterfall imports (used by
1843         some old, deprecated, and removed config keys). This should enable
1844         you to use the base buildbot functionality with Twisted-2.0.0 when
1845         you don't also have TwistedWeb and TwistedWords installed
1847 2005-05-20  Brian Warner  <warner@lothar.com>
1849         * buildbot/scripts/runner.py (run): call sendchange(), not
1850         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1851         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1852         (stop): don't wait for process to die when sending SIGHUP
1853         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1854         directory name gets interpreted, which you don't want
1855         (slaveTAC): same
1857         * buildbot/__init__.py (version): bump to 0.6.5+ while between
1858         releases
1860 2005-05-18  Brian Warner  <warner@lothar.com>
1862         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1864 2005-05-18  Brian Warner  <warner@lothar.com>
1866         * README: update for 0.6.5
1867         * debian/changelog: same
1869         * buildbot/changes/changes.py: rename tag= to branch=, since
1870         that's how we're using it, and my design for the upcoming "build a
1871         specific branch" feature wants it. also, tag= was too CVS-centric
1872         * buildbot/changes/mail.py (parseSyncmail): same
1873         * buildbot/process/base.py (Build.isBranchImportant): same
1874         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1875         * docs/buildbot.texinfo (Attributes of Changes): same
1877         * NEWS: update tag=, update for upcoming release
1879 2005-05-17  Brian Warner  <warner@lothar.com>
1881         * buildbot/scripts/runner.py (stop): actually poll once per
1882         second, instead of re-killing the poor daemon once per second.
1883         Sleep briefly (0.1s) before the first poll, since there's a good
1884         chance we can avoid waiting the full second if the daemon shuts
1885         down quickly. Also remove the sys.exit() at the end.
1886         (start): remove the unneighborly sys.exit()
1888         * Makefile: improve permission-setting to not kick Arch so badly
1890         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1891         default --keepalive=600, since it doesn't hurt very much, and it's
1892         a hassle to discover that you need it.
1893         * buildbot/test/test_runner.py (Create.testSlave): test it
1895         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1896         IRC bot about EXCEPTION
1898         * buildbot/status/client.py (PBListener): upcall more correctly
1900         * buildbot/process/base.py (Build.allStepsDone): if a step caused
1901         an exception mark the overall build with EXCEPTION, not SUCCESS
1903         * buildbot/scripts/runner.py (makefile_sample): remove the leading
1904         newline
1905         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1906         * Makefile: update some release-related stuff
1908         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1909         gets called when there isn't actually an active process, just end
1910         the Command instead of blowing up. I don't know how it gets into
1911         this state, but the twisted win32 buildslave will sometimes hang,
1912         and when it shakes its head and comes back, it thinks it's still
1913         running a Command. The next build causes this command to be
1914         interrupted, but the lack of self.process.pid breaks the interrupt
1915         attempt.
1917         * NEWS: document changes since the last release
1919         * buildbot/scripts/runner.py (start): change 'buildbot start' to
1920         look for Makefile.buildbot instead of a bare Makefile . The
1921         'buildbot start' does not install this file, so you have to
1922         manually copy it if you want to customize startup behavior.
1923         (createMaster): change 'buildbot master' command to create
1924         Makefile.sample instead of Makefile, to create master.cfg.sample
1925         instead of master.cfg (requiring you to copy it before the
1926         buildmaster can be started). Both sample files are kept up to
1927         date, i.e. they are overwritten if they have been changed. The
1928         'buildbot.tac' file is *not* overwritten, but if the new contents
1929         don't match the old, a 'buildbot.tac.new' file is created and the
1930         user is warned. This seems to be a much more sane way to handle
1931         startup files. Also, don't sys.exit(0) when done, so we can run
1932         unit tests against it.
1933         (createSlave): same. Don't overwrite the sample info/ files.
1934         * buildbot/scripts/sample.mk: remove. the contents were pulled
1935         into runner.py, since they need to match the behavior of start()
1936         * setup.py: same
1937         * MANIFEST.in: same
1939         * docs/buildbot.texinfo (Launching the daemons): document it
1940         * buildbot/test/test_runner.py (Create): test it
1942         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1943         version that can handle string-in-string tests, because otherwise
1944         python-2.2 fails the tests. It'd be tremendous if Trial's test
1945         took two strings under 2.2 too.
1947         * everything: fixed all deprecation warnings when running against
1948         Twisted-2.0 . (at least all the ones in buildbot code, there are a
1949         few that come from Twisted itself). This involved putting most of
1950         the Twisted-version specific code in the new buildbot.twcompat
1951         module, and creating some abstract base classes in
1952         buildbot.changes.base and buildbot.status.base (which might be
1953         useful anyway). __implements__ is a nuisance and requires an ugly
1954         'if' clause everywhere.
1956         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1957         delay before finishing the test: it seems that smtp.sendmail
1958         doesn't hang up on the server, so we must wait a moment so it can
1959         hang up on us. This removes the trial warning about an unclean
1960         reactor.
1962 2005-05-16  Brian Warner  <warner@lothar.com>
1964         * buildbot/process/step.py (Source): add 'retry' argument. It is a
1965         tuple of (delay, repeats).
1966         * buildbot/test/test_vc.py (Retry): test it
1967         * docs/buildbot.texinfo (Source Checkout): document it
1968         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1969         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1970         doVCFull() are handled by re-trying the checkout (after a delay)
1971         some number of times.
1972         (ShellCommand._startCommand): make header lines easier to read
1974         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1975         shutdown
1976         (WebTest.test_logfile): make sure master gets shut down, silences
1977         some "unclean reactor" test errors
1979         * buildbot/test/test_changes.py (Sender.tearDown): spin the
1980         reactor once after shutdown, something in certain versions of
1981         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1982         fails, svn-trunk is ok.
1984         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
1985         second win32 error message
1987         * buildbot/test/test_run.py (Status.testSlave): be smarter about
1988         validating the ETA, so the tests don't fail on slow systems
1990 2005-05-15  Brian Warner  <warner@lothar.com>
1992         * buildbot/status/builder.py (HTMLLogFile): make this behave like
1993         the new LogFile class, so upgrading works properly
1994         (LogFileProducer.resumeProducing): survive resumeProducing after
1995         we've exhausted the chunkGenerator
1997         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
1998         logs too
1999         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2000         (Log.testUpgrade): same
2002         * docs/buildbot.texinfo (Maintenance): describe how to delete old
2003         Builds and logs with a cron job.
2005         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2006         of the old non-offline LogFile, added code to upgrade these to
2007         new-style contents-live-on-disk instances at load time (in a way
2008         that doesn't invalidate the old Build pickles, so upgrading to
2009         0.6.5 is not a one-way operation). Got rid of everything related
2010         to 'stub' builds.
2011         (LogFile.__init__): create LogFiles with the parent step status,
2012         the log's name, and a builder-relative filename where it can keep
2013         the contents on disk.
2014         (LogFile.hasContents): new method, clients are advised to call it
2015         before getText or getChunks and friends. If it returns False, the
2016         log's contents have been deleted and getText() will raise an
2017         error.
2018         (LogFile.getChunks): made it a generator
2019         (LogFile.subscribeConsumer): new method, takes a Twisted-style
2020         Consumer (except one that takes chunks instead of strings). This
2021         enables streaming of very large logfiles without storing the whole
2022         thing in memory.
2023         (BuildStatus.generateLogfileName): create names like
2024         12-log-compile-output, with a _0 suffix if required to be unique
2025         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2026         or earlier) logfiles into new-style ones
2027         (BuilderStatus): remove everything related to 'stub' builds. There
2028         is now only one build cache, and we don't strip logs from old
2029         builds anymore.
2030         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2031         since we no longer fight to keep it in the cache
2033         * buildbot/status/html.py (TextLog.render_GET): use a
2034         ChunkConsumer to stream the log entries efficiently.
2035         (ChunkConsumer): wrapper which consumes chunks and writes
2036         formatted HTML.
2038         * buildbot/test/test_twisted.py (Parse.testParse): use a
2039         LogFile-like object instead of a real one
2041         * buildbot/test/test_status.py (MyLog): handle new LogFile code
2042         (Log.testMerge3): validate more merge behavior
2043         (Log.testChunks): validate LogFile.getChunks
2044         (Log.testUpgrade): validate old-style LogFile upgrading
2045         (Log.testSubscribe): validate LogFile.subscribe
2046         (Log.testConsumer): validate LogFile.subscribeConsumer
2048         * buildbot/interfaces.py (IStatusLogStub): remove
2049         (IStatusLog.subscribeConsumer): new method
2050         (IStatusLog.hasContents): new method
2051         (IStatusLogConsumer): describes things passed to subscribeConsumer
2053         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2054         the log contents if it does not have any contents.
2055         (StatusResourceBuildStep.body): same
2056         (StatusResourceBuildStep.getChild): give a 404 for empty logs
2058 2005-05-14  Brian Warner  <warner@lothar.com>
2060         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2061         timeouts to try and make the windows metabuildslave not hang
2063 2005-05-13  Mike Taylor  <bear@code-bear.com>
2065         * buildbot/slave/commands.py (rmdirRecursive): added a check
2066         to ensure the path passed into rmdirRecursive actually exists.
2067         On win32 a non-existant path would generate an exception.
2069 2005-05-13  Brian Warner  <warner@lothar.com>
2071         * buildbot/slave/commands.py (rmdirRecursive): replacement for
2072         shutil.rmtree which behaves correctly on windows in the face of
2073         files that you have to chmod before deleting. Thanks to Bear at
2074         the OSAF for the routine.
2075         (SourceBase.doClobber): use rmdirRecursive
2077 2005-05-12  Brian Warner  <warner@lothar.com>
2079         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2080         method generate chunks instead of returning a big list. This
2081         allows the same method to be used for both old LogFile and new
2082         OfflineLogFile.
2083         (OfflineLogFile.getText): use the generator
2084         (OfflineLogFile.subscribe): same
2085         * buildbot/status/html.py (TextLog.resumeProducing): same
2086         * buildbot/interfaces.py (IStatusLog.getChunks): document it
2088         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2089         point out that OfflineLogFile does not currently work with
2090         html.Waterfall . Fixing this is high-priority.
2092         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2093         apparently windows defaults to using stdout
2095         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2096         better message on failure so I can figure out the win32 problem
2098         * buildbot/slave/commands.py (ShellCommand._startCommand): update
2099         log messages to include more useful copies of the command being
2100         run, the argv array, and the child command's environment.
2101         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2103 2005-05-11  Brian Warner  <warner@lothar.com>
2105         * setup.py: oops, install debug.glade so 'buildbot debugclient'
2106         will actually work
2107         * Makefile: update the deb-snapshot version
2109         * docs/buildbot.texinfo: move all .xhtml docs into a new
2110         .texinfo-format document, adding a lot of material in the process.
2111         This is starting to look like a real user's manual. Removed all
2112         the Lore-related files: *.xhtml, *.css, template.tpl .
2113         * docs/Makefile: simple makefile to run 'makeinfo'
2114         * buildbot/scripts/sample.cfg: rearrange slightly
2115         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2117 2005-05-10  Brian Warner  <warner@lothar.com>
2119         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2120         different name for the internal twistw module, handle it.
2122         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2123         * setup.py: .. and stop trying to install it
2125         * buildbot/process/step.py (Git): added support for 'cogito' (aka
2126         'git'), the new linux kernel VC system (http://kernel.org/git/).
2127         Thanks to Brandon Philips for the patch.
2128         * buildbot/slave/commands.py (Git): same
2130 2005-05-06  Brian Warner  <warner@lothar.com>
2132         * buildbot/status/builder.py (OfflineLogFile): replace the default
2133         LogFile with a form that appends its new contents to a disk file
2134         as they arrive. The complete log data is never kept in RAM. This
2135         is the first step towards handling very large (100MB+) logfiles
2136         without choking quite so badly. (The other half is
2137         producer/consumer on the HTML pages).
2138         (BuildStepStatus.addLog): use OfflineLogFile by default
2139         (BuildStatus.getLogfileName): helper code to give the
2140         OfflineLogFile a filename to work with
2142         * buildbot/test/test_status.py (Results.testAddResults): update
2143         tests to handle new asserts
2144         * buildbot/test/test_vc.py (Patch.doPatch): same
2145         * buildbot/test/test_steps.py (BuildStep.setUp): same
2147 2005-05-05  Brian Warner  <warner@lothar.com>
2149         * buildbot/scripts/runner.py (start): if there is no Makefile,
2150         launch the app by importing twistd's internals and calling run(),
2151         rather than spawning a new twistd process. This stands a much
2152         better chance of working under windows.
2153         (stop): kill the process with os.kill instead of spawning
2154         /bin/kill, again to reduce the number of external programs which
2155         windows might not have in the PATH. Also wait up to 5 seconds for
2156         the process to go away, allowing things like 'buildbot stop;
2157         buildbot start' to be reliable in the face of slow shutdowns.
2159         * buildbot/master.py (Dispatcher.__getstate__): remove old
2160         .tap-related methods
2161         (BuildMaster.__getstate__): same
2162         (makeService): same
2163         * buildbot/slave/bot.py (makeService): same
2164         (Options.longdesc): same
2165         * buildbot/scripts/runner.py: copy over some old mktap option text
2167         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2168         'buildbot master' now creates a buildbot.tac file, so there is no
2169         longer a create-instance/save/reload sequence. mktap is dead, long
2170         live twistd -y.
2171         * buildbot/scripts/sample.mk: use twistd -y, not -f
2172         * buildbot/test/test_config.py: remove mktap-based test
2173         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2174         * README: don't reference mktap
2176         * docs/source.xhtml: document some of the attributes that Changes
2177         might have
2179         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2181         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2182         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2183         * buildbot/changes/changes.py (Change)
2184         * buildbot/changes/mail.py (parseSyncmail)
2185         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2186         (Test3.testMsgS5)
2187         * buildbot/process/base.py (Build.isTagImportant)
2188         (Build.addChange)
2191 2005-05-04  Brian Warner  <warner@lothar.com>
2193         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2194         connection after sending the change, so that unit tests don't
2195         complain about sockets being left around
2197         * buildbot/status/html.py (WaterfallStatusResource.body): fix
2198         exception in phase=0 rendering
2199         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2201         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2203         * buildbot/master.py (BuildMaster.loadConfig): finally remove
2204         deprecated config keys: webPortnum, webPathname, irc, manholePort,
2205         and configuring builders with tuples.
2206         * buildbot/test/test_config.py: stop testing compatibility with
2207         deprecated config keys
2208         * buildbot/test/test_run.py: same
2210 2005-05-03  Brian Warner  <warner@lothar.com>
2212         * contrib/arch_buildbot.py: survive if there are no logfiles
2213         (username): just use a string, os.getlogin isn't reliable
2215         * buildbot/scripts/runner.py (sendchange): oops, fix the command
2216         so 'buildbot sendchange' actually works. The earlier test only
2217         covered the internal (non-reactor-running) form.
2219         * contrib/arch_buildbot.py: utility that can run as an Arch hook
2220         script to notify the buildmaster about changes
2222         * buildbot/scripts/runner.py (sendchange): new command to send a
2223         change to a buildbot.changes.pb.PBChangeSource receiver.
2224         * buildbot/test/test_changes.py (Sender): test it
2226         * buildbot/master.py (BuildMaster.startService): mark .readConfig
2227         after any reading of the config file, not just when we do it in
2228         startService. This makes some tests a bit cleaner.
2230         * buildbot/changes/pb.py: add some log messages
2232         * buildbot/process/base.py (Build.startBuild): fix a bug that
2233         caused an exception when the build terminated in the very first
2234         step.
2235         (Build.stepDone): let steps return a status of EXCEPTION. This
2236         terminates the build right away, and sets the build's overall
2237         status to EXCEPTION too.
2238         * buildbot/process/step.py (BuildStep.failed): return a status of
2239         EXCEPTION when that is what has happened.
2241         * buildbot/process/step.py (Arch.computeSourceRevision): finally
2242         implement this, allowing Arch-based projects to get precise
2243         checkouts instead of always using the latest code
2244         (Bazaar): create variant of Arch to let folks use baz instead of
2245         tla. Requires a new buildslave too.
2246         * buildbot/slave/commands.py (Arch): add 'revision' argument
2247         (Bazaar): create variant of Arch that uses baz instead of tla.
2248         Remove the code that extracts the archive name from the
2249         register-archive output, since baz doesn't provide it, and require
2250         the user provide both the archive name and its location.
2251         * buildbot/test/test_vc.py (VC.testBazaar): added tests
2253 2005-05-02  Brian Warner  <warner@lothar.com>
2255         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2256         thanks to Nick Trout.
2258         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2259         deals better with source Makefile coming from a read-only CVS
2260         checkout. Thanks to Nick Trout for the catch.
2262         * buildbot/__init__.py (version): bump to 0.6.4+ while between
2263         releases
2265 2005-04-28  Brian Warner  <warner@lothar.com>
2267         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2269         * debian/changelog: update for 0.6.4
2271 2005-04-28  Brian Warner  <warner@lothar.com>
2273         * README.w32: add a checklist of steps for getting buildbot
2274         running on windows.
2275         * MANIFEST.in: include it in the tarball
2277         * NEWS: update
2279         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2280         broken .tap files from 0.6.3 by getting rid of .services,
2281         .namedServices, and .change_svc at load time.
2283 2005-04-27  Brian Warner  <warner@lothar.com>
2285         * NEWS: update in preparation for new release
2287         * buildbot/test/test_config.py (Save.testSave): don't pull in
2288         twisted.scripts.twistd, we don't need it and it isn't for windows
2289         anyway.
2291         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2292         accomodate win32 which can't do atomic-rename
2294 2005-04-27  Brian Warner  <warner@lothar.com>
2296         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2297         timeouts to help the slow metabuildbot not flunk them so much
2298         (Disconnect.testBuild3): same
2299         (Disconnect.testBuild4): same
2300         (Disconnect.testInterrupt): same
2302         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2303         setup, it was completely broken for new buildmasters (those which
2304         did not have a 'change.pck' already saved. Thanks to Paul Warren
2305         for catching this (embarrassing!) bug.
2306         (Dispatcher.__getstate__): don't save our registered avatar
2307         factories, since they'll be re-populated when the config file is
2308         re-read.
2309         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2310         tests (since the real mktap-generated BuildMaster doesn't save
2311         this attribute).
2312         (BuildMaster.__getstate__): don't save any service children,
2313         they'll all be re-populated when the config file is re-read.
2314         * buildbot/test/test_config.py (Save.testSave): test for this
2316 2005-04-26  Brian Warner  <warner@lothar.com>
2318         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2319         rendered with Blender.. looks a bit nicer.
2320         * buildbot/docs/images/icon.blend: add the Blender file for it
2322         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2323         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2324         running under windows. This appears to be the best way to allow
2325         BuildSteps to do something normal like 'trial -v buildbot.test' or
2326         'make foo' and still expect it to work. The idea is to make the
2327         BuildSteps look as much like what a developer would type when
2328         compiling or testing the tree by hand. This approach probably has
2329         problems when there are spaces in the arguments, so if you've got
2330         windows buildslaves, you'll need to pay close attention to your
2331         commands.
2333         * buildbot/status/html.py (WaterfallStatusResource.body): add the
2334         timezone to the timestamp column.
2335         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2337         * buildbot/scripts/runner.py (loadOptions): do something sane for
2338         windows, I think. We use %APPDATA%/buildbot instead of
2339         ~/.buildbot, but we still search everywhere from the current
2340         directory up to the root for a .buildbot/ subdir. The "is it under
2341         $HOME" security test was replaced with "is it owned by the current
2342         user", which is only performed under posix.
2343         * buildbot/test/test_runner.py (Options.testFindOptions): update
2344         tests to match. The "is it owned by the current user" check is
2345         untested. The test has been re-enabled for windows.
2347         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2348         any "\n" in the expected output with the platform-specific line
2349         separator. Make this separator "\r\n" on PTYs under unix, they
2350         seem to do that and I don't know why
2352         * buildbot/test/test_runner.py (Options.optionsFile): disable on
2353         windows for now, I don't know what ~/.buildbot/ should mean there.
2355         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2356         win32 compatibility, don't use "/tmp"
2357         (Basedir.testChangeBuilddir): remove more unixisms
2359 2005-04-26  Brian Warner  <warner@lothar.com>
2361         * buildbot/test/test_control.py (Force.rmtree): python2.2
2362         compatibility, apparently its shutil.rmtree ignore_errors=
2363         argument is ignored.
2364         * buildbot/test/test_run.py (Run.rmtree): same
2365         (RunMixin.setUp): same
2367         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2368         not os.path.sep
2370         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2371         'substring in string' operator, must use string.find(substr)!=-1
2372         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2373         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2375         * buildbot/scripts/runner.py (loadOptions): add code to search for
2376         ~/.buildbot/, a directory with things like 'options', containing
2377         defaults for various 'buildbot' subcommands. .buildbot/ can be in
2378         the current directory, your $HOME directory, or anywhere
2379         inbetween, as long as you're somewhere inside your home directory.
2380         (debugclient): look in ~/.buildbot/options for master and passwd
2381         (statuslog): look in ~/.buildbot/options for 'masterstatus'
2382         * buildbot/test/test_runner.py (Options.testFindOptions): test it
2384         * buildbot/status/client.py (makeRemote): new approach to making
2385         IRemote(None) be None, which works under Twisted-2.0
2386         * buildbot/test/test_status.py (Client.testAdaptation): test it
2388         * buildbot/status/builder.py (Status.builderAdded): when loading a
2389         pickled BuilderStatus in from disk, set its name after loading.
2390         The config file might have changed its name (but not its
2391         directory) while it wasn't looking.
2392         
2393         * buildbot/process/builder.py (Builder.attached): always return a
2394         Deferred, even if the builder was already attached
2395         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2397 2005-04-25  Brian Warner  <warner@lothar.com>
2399         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2400         category-related exception when announcing a build has finished
2402         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2403         reference no-longer-existent changemaster.sources
2404         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2406         * buildbot/__init__.py (version): bump to 0.6.3+ while between
2407         releases
2409 2005-04-25  Brian Warner  <warner@lothar.com>
2411         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2413         * debian/changelog: update for 0.6.3
2415 2005-04-25  Brian Warner  <warner@lothar.com>
2417         * MANIFEST.in: make sure debug.glade is in the tarball
2419         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2421         * NEWS: update for the imminent 0.6.3 release
2423         * buildbot/status/html.py (HtmlResource.content): make the
2424         stylesheet <link> always point at "buildbot.css".
2425         (StatusResource.getChild): map "buildbot.css" to a static.File
2426         containing whatever css= argument was provided to Waterfall()
2427         (Waterfall): provide the "classic" css as the default.
2428         * docs/waterfall.classic.css: move default CSS from here ..
2429         * buildbot/status/classic.css: .. to here
2431         * MANIFEST.in: make sure classic.css is included in the tarball
2432         * setup.py: and that it is installed too, under buildbot/status/
2434         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2435         the module level, because buildbot.tap files from 0.6.2 don't have
2436         it in their attribute dictionary.
2438         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2439         really exists at startup, might save some confusion somewhere.
2441 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2443         * docs/waterfall.classic.css:
2444           add a stylesheet that's almost the same as the "classic"
2445           buildbot style
2447         * buildbot/status/builder.py:
2448           add EXCEPTION as a result - this is a problem for the bot
2449           maintainer, not a build problem for the changers
2450         * buildbot/process/step.py:
2451           use EXCEPTION instead of FAILURE for exceptions
2452         * buildbot/status/html.py:
2453           add build_get_class to get a class out of a build/buildstep
2454           finish naming the classes
2455           split out sourceNames to changeNames and builderNames so we
2456           can style them separately
2457         * docs/config.xhtml:
2458           finish documenting classes as they are right now
2460         * buildbot/status/html.py:
2461           name the classes as we agreed on IRC
2462         * docs/config.xhtml:
2463           and document them
2465         * buildbot/status/html.py:
2466           same for cssclass->class_
2468         * buildbot/status/html.py:
2469           as decided on IRC, use class_ for the "class" attribute to not
2470           conflict with the class keyword, and clean up the messy **{} stuff.
2472         * buildbot/status/mail.py:
2473           put back "builders" argument, and fix docstring, because the
2474           code *ignores* builders listed in this argument
2476         * buildbot/process/builder.py:
2477           remove FIXME notes - category is now indeed a cvar of BuilderStatus
2479         * docs/config.xhtml:
2480           describe the category argument for builders
2482         * buildbot/status/builder.py:
2483           Fix a silly bug due to merging
2485         * buildbot/process/builder.py:
2486           remove category from the process Builder ...
2487         * buildbot/status/builder.py:
2488           ... and add it to BuilderStatus instead.
2489           Set category on unpickled builder statuses, they might not have it.
2490         * buildbot/master.py:
2491           include category when doing builderAdded
2492         * buildbot/status/mail.py:
2493           return None instead of self for builders we are not interested in.
2494         * buildbot/test/test_run.py:
2495           fix a bug due to only doing deferredResult on "dummy" waiting
2496         * buildbot/test/test_status.py:
2497           add checks for the Mail IStatusReceiver returning None or self
2499         * buildbot/status/html.py:
2500           fix testsuite by prefixing page title with BuildBot
2502         * buildbot/status/builder.py:
2503           have .category in builder status ...
2504         * buildbot/process/builder.py:
2505           ... and set it from Builder
2506         * buildbot/status/html.py:
2507           make .css a class variable 
2508         * buildbot/test/test_status.py:
2509           write more tests to cover our categories stuff ...
2510         * buildbot/status/mail.py:
2511           ... and fix the bug that this uncovered
2513         * buildbot/changes/mail.py:
2514         * buildbot/changes/pb.py:
2515         * buildbot/master.py:
2516         * buildbot/process/base.py:
2517         * buildbot/process/factory.py:
2518         * buildbot/process/interlock.py:
2519         * buildbot/process/step.py:
2520         * buildbot/process/step_twisted.py:
2521         * buildbot/slave/commands.py:
2522         * buildbot/status/builder.py:
2523         * buildbot/status/client.py:
2524         * buildbot/status/html.py:
2525         * buildbot/status/mail.py:
2526         * buildbot/status/progress.py:
2527         * buildbot/test/test_changes.py:
2528         * buildbot/test/test_config.py:
2529         * buildbot/test/test_control.py:
2530         * buildbot/test/test_interlock.py:
2531         * buildbot/test/test_maildir.py:
2532         * buildbot/test/test_mailparse.py:
2533         * buildbot/test/test_run.py:
2534         * buildbot/test/test_slavecommand.py:
2535         * buildbot/test/test_status.py:
2536         * buildbot/test/test_steps.py:
2537         * buildbot/test/test_twisted.py:
2538         * buildbot/test/test_util.py:
2539         * buildbot/test/test_vc.py:
2540         * buildbot/test/test_web.py:
2541         * buildbot/util.py:
2542           add test-case-name at the top of a whole set of files
2544         * buildbot/status/builder.py:
2545           keep order of addition when getting builder names
2546         * buildbot/status/words.py:
2547         * buildbot/test/test_run.py:
2548           add test for getBuilderNames
2550         * buildbot/process/base.py:
2551         * buildbot/process/step.py:
2552         * buildbot/status/builder.py:
2553         * buildbot/status/html.py:
2554           make buildbot css-able
2555           replace the color code for purple with purple, don't understand
2556           why it wasn't purple to start with
2558         * buildbot/status/words.py:
2559           ok, so it doesn't look like BuilderStatus.remote is still valid.
2560           Use what waterfall uses instead.
2562         * buildbot/interfaces.py:
2563         * buildbot/status/builder.py:
2564         * buildbot/status/html.py:
2565         * buildbot/status/mail.py:
2566         * buildbot/status/words.py:
2567         * buildbot/test/test_run.py:
2568           use categories everywhere and make it be a list.  More sensible
2569           for the future.  Also make words actually respect this in
2570           buildFinished.
2572         * buildbot/interfaces.py:
2573           add category argument to getBuilderNames
2574         * buildbot/process/builder.py:
2575         * buildbot/status/builder.py:
2576         * buildbot/status/html.py:
2577         * buildbot/status/mail.py:
2578         * buildbot/status/words.py:
2579         * buildbot/test/test_run.py:
2580           move from specifying builders by name to specifying the category
2582         * buildbot/status/html.py:
2583         * buildbot/status/words.py:
2584           add "builders=" to __init__ of status clients so they can
2585           limit themselves to the given list of builders to report on
2587         * buildbot/status/html.py: set the title to the product name
2589 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
2591         * buildbot/interfaces.py:
2592         * buildbot/status/builder.py:
2593           more documentation.  Hm, not sure if ChangeLog entries make sense
2594           here...
2596 2005-04-23  Brian Warner  <warner@lothar.com>
2598         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2600         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2602         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2603         the sub-commands that log buildmaster status to stdout and to a
2604         GUI window, respectively.
2606         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2607         functionality is working again, but all the step-status and ETA
2608         stuff is missing. Commented out a lot of code pending more
2609         overhaul work.
2611         * buildbot/status/client.py: make sure that IRemote(None) is None
2613         * buildbot/changes/changes.py: import defer, oops
2614         (ChangeMaster): remove the .sources list, rely upon the fact that
2615         MultiServices can be treated as sequences of their children. This
2616         cleans up the add/remove ChangeSource routines a lot, as we keep
2617         exactly one list of the current sources instead of three.
2619         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2620         up an empty ChangeMaster at init time.
2621         (BuildMaster.loadChanges): if there are changes to be had from
2622         disk, replace self.change_svc with the new ones. If not, keep
2623         using the empty ChangeMaster set up in __init__.
2624         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2625         instead of a separate list, makes the code a bit cleaner.
2626         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2627         (ConfigTest.testSources): same, also wait for loadConfig to finish.
2628         Extend the test to make sure we can get rid of the sources when
2629         we're done.
2631 2005-04-22  Brian Warner  <warner@lothar.com>
2633         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2634         and info/host files when making the slave directory
2636         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2637         whendone= argument, just return the Deferred and let the caller do
2638         what they want with it.
2639         (Disconnect.testBuild1): wait for shutdownSlave
2640         (Basedir.testChangeBuilddir): new test to make sure changes to the
2641         builddir actually get propagated to the slave
2643         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2644         explicit method, rather than passing the builddir in __init__ .
2645         Make sure to update self.basedir too, this was broken before.
2646         (Bot.remote_setBuilderList): use b.setBuilddir for both new
2647         builders and for ones that have just had their builddir changed.
2648         (BotFactory): add a class-level .perspective attribute, so
2649         BuildSlave.waitUntilDisconnected won't get upset when the
2650         connection hasn't yet been established
2651         (BuildSlave.__init__): keep track of the bot.Bot instance, so
2652         tests can reach through it to inspect the SlaveBuilders
2654         * buildbot/process/base.py (Build.buildException): explain the
2655         log.err with a log.msg
2656         * buildbot/process/builder.py (Builder.startBuild): same
2657         (Builder._startBuildFailed): improve error message
2659         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2660         occurred because we lost the brand-new connection, retry instead
2661         of giving up. If not, it's probably an authorization failure, and
2662         it makes sense to stop trying. Make sure we log.msg the reason
2663         that we're log.err'ing the failure, otherwise test failures are
2664         really hard to figure out.
2666         * buildbot/master.py: change loadConfig() to return a Deferred
2667         that doesn't fire until the change has been fully implemented.
2668         This means any connected slaves have been updated with the new
2669         builddir. This change makes it easier to test the code which
2670         actually implements this builddir-updating.
2671         (BotPerspective.addBuilder): return Deferred
2672         (BotPerspective.removeBuilder): same
2673         (BotPerspective.attached): same
2674         (BotPerspective._attached): same. finish with remote_print before
2675         starting the getSlaveInfo, instead of doing them in parallel
2676         (BotPerspective.list_done): same
2677         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2678         actually calling slave.disconnect()
2679         (BotMaster.addBuilder): same
2680         (BotMaster.removeBuilder): same
2681         (BuildMaster.loadConfig): same
2682         (BuildMaster.loadConfig_Slaves): same
2683         (BuildMaster.loadConfig_Sources): same
2684         (BuildMaster.loadConfig_Builders): same
2685         (BuildMaster.loadConfig_status): same
2687         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2688         a Deferred that fires when the source is finally removed
2690         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2691         the previous tree on win32, where we have to do it synchronously,
2692         make sure we return a Deferred anyway.
2693         (SourceBase.doCopy): same
2695         * buildbot/scripts/runner.py (statusgui): use the text client for
2696         now, while I rewrite the Gtk one
2697         * buildbot/clients/base.py: strip out old code, leaving just the
2698         basic print-message-on-event functionality. I also remove the
2699         ReconnectingPBClientFactory, but it does at least quit when it
2700         loses the connection instead of going silent
2702 2005-04-21  Brian Warner  <warner@lothar.com>
2704         * Makefile: minor tweaks
2706         * NEWS: point out deprecation warnings, new features for
2707         /usr/bin/buildbot
2709         * buildbot/master.py (BuildMaster.loadConfig): emit
2710         DeprecationWarnings for Builders defined with tuples. Rearrange
2711         code to facility removal of deprecated configuration keys in the
2712         next release.
2714         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2715         'buildbot' command to put a little Makefile in the target that
2716         helps you re-create the buildbot.tap file, start or stop the
2717         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2718         all the files 0600, since they contain passwords.
2719         (start): if there is a Makefile, and /usr/bin/make exists, use
2720         'make start' in preference to a raw twistd command. This lets
2721         slave admins put things like PYTHONPATH variables in their
2722         Makefiles and have them still work when the slave is started with
2723         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2724         be nice to first try the 'make' command and only fall back to
2725         twistd if it fails. TODO: the Makefile's "start" command does not
2726         add the --reactor=win32 argument when running under windows.
2727         (Options.debugclient, Options.statusgui): add sub-commands to launch
2728         the debug client (formerly in contrib/debugclient.py) and the
2729         Gtk status application (currently broken)
2730         * buildbot/clients/debug.py: move from contrib/debugclient.py
2731         * buildbot/clients/debug.glade: same
2733         * buildbot/test/test_trial.py: remove it. This requires some
2734         functionality out of Twisted that isn't there yet, and until then
2735         having it around just confuses things.
2737         * buildbot/test/test_slavecommand.py (Shell): test both with and
2738         without PTYs, and make sure that command output is properly
2739         interleaved in the with-PTY case. I think the without-PTY test
2740         should pass on windows, where we never use PTYs anyway.
2742 2005-04-20  Brian Warner  <warner@lothar.com>
2744         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2746         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2748         * NEWS: start creating entries for the next release
2750         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2752         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2753         (WebTest.test_webPathname): same
2754         (WebTest.test_webPathname_port): same
2755         (WebTest.test_waterfall): use the default favicon rather than
2756         rooting around the filesystem for it. Open the expected-icon file
2757         in binary mode, to make win32 tests happier (thanks to Nick Trout
2758         for the catch)
2759         * buildbot/status/html.py (buildbot_icon): win32 portability
2761         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2762         win32-compatibility fixes from Nick Trout, the "file not found" message
2763         is different under windows
2764         (FakeSlaveBuilder.__init__): clean up setup a bit
2765         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2767 2005-04-19  Brian Warner  <warner@lothar.com>
2769         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2770         skip-if-repositories-are-unavailable test to not kill the trial
2771         that comes with Twisted-1.3.0
2773         * setup.py: install buildbot.png icon file when installing code
2775         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2776         environment used by the command, at least on the child side.
2778         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2779         this method needs to be added and implemented because it gets
2780         called under heavy load. I don't quite understand the
2781         producer/consumer API enough to write it.
2782         (StatusResource.getChild): add a resource for /favicon.ico
2783         (Waterfall.__init__): add favicon= argument
2784         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2785         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2786         (WebTest.test_webPathname): same
2787         (WebTest.test_webPathname_port): same
2788         * docs/config.xhtml: mention favicon=
2789         * buildbot/buildbot.png: add a default icon, dorky as it is
2791 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
2793         * buildbot/master.py:
2794         * buildbot/process/base.py:
2795         * buildbot/process/builder.py:
2796         * buildbot/process/interlock.py:
2797         * buildbot/status/builder.py:
2798         * buildbot/status/html.py:
2799         * buildbot/status/mail.py:
2800         * buildbot/status/words.py:
2801           new documentation while digging through the code
2803 2005-04-17  Brian Warner  <warner@lothar.com>
2805         * general: try to fix file modes on all .py files: a+r, a-x,
2806         but let buildbot/clients/*.py be +x since they're tools
2808         * docs/epyrun (addMod): when an import fails, say why
2810         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2812 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2814         * buildbot/process/base.py:
2815         * buildbot/process/builder.py:
2816         * buildbot/status/builder.py:
2817           new documentation while digging through the code
2819 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2821         * buildbot/changes/changes.py:
2822         * buildbot/changes/p4poller.py:
2823         * buildbot/interfaces.py:
2824         * buildbot/process/base.py:
2825         * buildbot/process/builder.py:
2826         * buildbot/process/step.py:
2827         * buildbot/process/step_twisted.py:
2828         * buildbot/slave/bot.py:
2829         * buildbot/slave/commands.py:
2830         * buildbot/status/builder.py:
2831           fix all docstrings to make epydoc happy.  In the process of fixing
2832           some, I also moved pieces of docs, and removed some deprecated
2833           documentation
2835 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2837         * buildbot/process/builder.py:
2838         * buildbot/process/interlock.py:
2839         * buildbot/process/process_twisted.py:
2840         * buildbot/process/step.py:
2841           BuildProcess -> Build, as it looks like that's what happened
2842         * buildbot/process/base.py:
2843         * buildbot/process/factory.py:
2844           update epydoc stuff
2846 2005-04-17  Brian Warner  <warner@lothar.com>
2848         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2849         update compile command to accomodate the Twisted split.. now
2850         instead of './setup.py build_ext -i', you do './setup.py all
2851         build_ext -i', to run build_ext over all sub-projects.
2852         (FullTwistedBuildFactory): same
2853         (TwistedReactorsBuildFactory): same
2855         * buildbot/status/html.py (TextLog.finished): null out self.req
2856         when we're done, otherwise the reference cycle of TextLog to .req
2857         to .notifications to a Deferred to TextLog.stop keeps them from
2858         being collected, and consumes a huge (610MB on pyramid at last
2859         check) amount of memory.
2861 2005-04-11  Brian Warner  <warner@lothar.com>
2863         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2864         normalize the VC-repository location.. makes SVN happier with
2865         certain test environments.
2867         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2868         RemoteShellCommand gets its own .env dictionary, so that code in
2869         start() doesn't mutate the original. I think this should fix the
2870         step_twisted.Trial problem where multiple identical components
2871         kept getting added to PYTHONPATH= over and over again.
2873         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2874         adding epydoc-format docstrings to many classes. Thanks to Thomas
2875         Vander Stichele for the patches.
2876         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2877         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2878         * buildbot/slave/bot.py, commands.py, registry.py: same
2880 2005-04-05  Brian Warner  <warner@lothar.com>
2882         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2883         preserve timestamps, helps incremental builds of large trees.
2884         Patch from Rene Rivera.
2886         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2887         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2888         for the catch.
2890 2005-04-03  Brian Warner  <warner@lothar.com>
2892         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2893         with one dict, apparently exec has some scoping bugs when used
2894         with both global/local dicts. Thanks to Nathaniel Smith for the
2895         catch.
2897 2005-04-02  Brian Warner  <warner@lothar.com>
2899         * buildbot/process/step_twisted.py (countFailedTests): the new
2900         trial in Twisted-2.0 emits a slightly different status line than
2901         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2902         mistakenly think the test count is unparseable.
2903         (Trial.start): note that for some reason each build causes another
2904         copy of self.testpath to be prepended to PYTHONPATH. This needs to
2905         be fixed but I'm not sure quite where the problem is.
2907 2005-04-01  Brian Warner  <warner@lothar.com>
2909         * buildbot/test/test_run.py (Run.testMaster): change some uses of
2910         deferredResult to avoid hangs/warnings under twisted-2.0
2911         (RunMixin.tearDown): same
2912         (RunMixin.shutdownSlave): same
2913         (Disconnect.testIdle1): same
2914         (Disconnect.testBuild2): same: wait one second after the build
2915         finishes for test to really be done.. this should be cleaned up to
2916         avoid wasting that second. Builder.detach uses a callLater(0),
2917         either that should be done in-line (something else needed that
2918         behavior), or it should return a Deferred that fires when the
2919         builder is really offline.
2920         (Disconnect.testBuild3): same
2921         (Disconnect.testDisappear): same
2923         * buildbot/test/test_web.py: rearrange server-setup and teardown
2924         code to remove unclean-reactor warnings from twisted-2.0
2926         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2927         so the tests don't hang under twisted-2.0
2929 2005-03-31  Brian Warner  <warner@lothar.com>
2931         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2932         caused a warning each time the master changed our set of builders
2934         * buildbot/status/builder.py (BuildStatus.saveYourself): under
2935         w32, don't unlink the file unless it already exists. Thanks to
2936         Baptiste Lepilleur for the catch.
2937         (BuilderStatus.saveYourself): same
2939 2005-02-01  Brian Warner  <warner@lothar.com>
2941         * buildbot/status/html.py (TextLog.getChild): use a /text child
2942         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2943         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2944         logfile as text/plain (no markup, no headers). This replaces the
2945         previous scheme (which used an ?text=1 argument), and gets us back
2946         to a relative link (which works better when the buildbot lives
2947         behind another web server, such as Apache configured as a reverse
2948         proxy). Thanks to Gerald Combs for spotting the problem.
2950         * buildbot/__init__.py (version): bump to 0.6.2+ while between
2951         releases
2953 2004-12-13  Brian Warner  <warner@lothar.com>
2955         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2957         * debian/changelog: update for 0.6.2
2958         * NEWS: finalize for 0.6.2
2960 2004-12-11  Brian Warner  <warner@lothar.com>
2962         * NEWS: bring it up to date
2964         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2965         detection code. Require some sign of life from the buildmaster
2966         every BotFactory.keepaliveInterval seconds. Provoke this
2967         indication at BotFactory.keepaliveTimeout seconds before the
2968         deadline by sending a keepalive request. We don't actually care if
2969         that request is answered in a timely fashion, what we care about
2970         is that .activity() is called before the deadline. .activity() is
2971         triggered by any PB message from the master (including an ack to
2972         one of the slave's status-update messages). With this new scheme,
2973         large status messages over slow pipes are OK, as long as any given
2974         message can be sent (and thus acked) within .keepaliveTimeout
2975         seconds (which defaults to 30).
2976         (SlaveBuilder.remote_startCommand): record activity
2977         (SlaveBuilder.ackUpdate): same
2978         (SlaveBuilder.ackComplete): same
2979         (BotFactory.gotPerspective): same
2980         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2982 2004-12-09  Brian Warner  <warner@lothar.com>
2984         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
2985         debug message
2987         * buildbot/process/step_twisted.py (Trial._commandComplete):
2988         update self.cmd when we start the 'cat test.log' transfer. Without
2989         this, we cannot interrupt the correct RemoteCommand when we lose
2990         the connection.
2992         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
2993         trying to tell the slave to stop the command if we're already
2994         inactive, or if we no longer have a .remote
2996         * buildbot/process/builder.py (Builder._detached): don't let an
2997         exception in currentBuild.stopBuild() prevent the builder from
2998         being marked offline
3000 2004-12-07  Brian Warner  <warner@lothar.com>
3002         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3003         KeyError that happens when you ask for a non-existent Builder, and
3004         translate it into a UsageError.
3006         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3007         losing the slave in the middle of a remote step is handled too
3009         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3010         be a Failure, so be sure to stringify it before using it as the
3011         contents of the 'interrupt' logfile
3012         (RemoteCommand.interrupt): use stringified 'why' in
3013         remote_interruptCommand too, just in case
3015 2004-12-06  Brian Warner  <warner@lothar.com>
3017         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3018         instead of 'tla update', which is more efficient in case we've
3019         missed a couple of patches since the last update.
3021         * debian/changelog: update for previous (0.6.1) release. Obviously
3022         this needs to be handled better.
3024 2004-12-05  Brian Warner  <warner@lothar.com>
3026         * NEWS: update for stuff since last release
3028         * buildbot/master.py (DebugPerspective.attached): return 'self', to
3029         match the maybeDeferred change in Dispatcher.requestAvatar
3030         * buildbot/changes/pb.py (ChangePerspective.attached): same
3031         * buildbot/status/client.py (StatusClientPerspective.attached): same
3032         * buildbot/process/builder.py (Builder._attached3): same
3033         * buildbot/pbutil.py (NewCredPerspective.attached): same
3035         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3036         the date to the top-most box, if it is not the same as today's
3037         date.
3039         * docs/slave.xhtml: provide a buildslave setup checklist
3041         * docs/source.xhtml (Arch): correct terminology
3043 2004-12-04  Brian Warner  <warner@lothar.com>
3045         * buildbot/test/test_slavecommand.py: use sys.executable instead
3046         of hard-coding 'python' for child commands, might help portability
3048         * docs/examples/twisted_master.cfg: update to current usage
3050         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3051         'stop build' command to the IRC bot
3053         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3054         message that broke PBChangeSource
3056         * buildbot/slave/bot.py: clean up shutdown/lose-master code
3057         (SlaveBuilder): make some attributes class-level, remove the old
3058         "update queue" which existed to support resuming a build after the
3059         master connection was lost. Try to reimplement that feature later.
3060         (SlaveBuilder.stopCommand): clear self.command when the
3061         SlaveCommand finishes, so that we don't try to kill a leftover one
3062         at shutdown time.
3063         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3064         .finishCommand
3066         * buildbot/slave/commands.py (SourceBase): set self.command for
3067         all VC commands, so they can be interrupted.
3069 2004-12-03  Brian Warner  <warner@lothar.com>
3071         * buildbot/master.py: clean up slave-handling code, to handle
3072         slave-disconnect and multiple-connect better
3073         (BotPerspective): make these long-lasting, exactly one per bot
3074         listed in the config file.
3075         (BotPerspective.attached): if a slave connects while an existing
3076         one appears to still be connected, disconnect the old one first.
3077         (BotPerspective.disconnect): new method to forcibly disconnect a
3078         buildslave. Use some hacks to empty the transmit buffer quickly to
3079         avoid the long (20-min?) TCP timeout that could occur if the old
3080         slave has dropped off the net.
3081         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3082         own their own SlaveStatus objects. Remove .attached/.detached, add
3083         .addSlave/.removeSlave, treat slaves like Builders (config file
3084         parsing sends deltas to the BotMaster). Inform the slave
3085         instances, i.e. the BotPerspective, about addBuilder and
3086         removeBuilder.
3087         (BotMaster.getPerspective): turns into a single dict lookup
3088         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3089         which gives BotPerspective.attached a chance to disconnect the old
3090         slave first.
3091         (BuildMaster.loadConfig): add code (disabled) to validate that all
3092         builders use known slaves (listed in c['bots']). The check won't
3093         work with tuple-specified builders, which are deprecated but not
3094         yet invalid, so the check is disabled for now.
3095         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3096         routine, do the add/changed/removed dance with them like we do
3097         with builders.
3098         (BuildMaster.loadConfig_Sources): move source-config into a
3099         separate routine too
3101         * buildbot/status/builder.py (Status.getSlave): get the
3102         SlaveStatus object from the BotPerspective, not the BotMaster.
3104         * buildbot/test/test_run.py: bunch of new tests for losing the
3105         buildslave at various points in the build, handling a slave that
3106         connects multiple times, and making sure we can interrupt a
3107         running build
3109         * buildbot/slave/bot.py (BuildSlave): make it possible to use
3110         something other than 'Bot' for the Bot object, to make certain
3111         test cases easier to write.
3112         (BuildSlave.waitUntilDisconnected): utility method for testing
3114 2004-11-30  Brian Warner  <warner@lothar.com>
3116         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3118         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3119         argument, return a Deferred that always fires with True or False.
3120         I don't use an errback to indicate 'ping failed' so that callers
3121         are free to ignore the deferred without causing spurious errors in
3122         the logs.
3123         * buildbot/process/builder.py (BuilderControl.ping): implement it
3125         * buildbot/test/test_run.py (Status.testDisappear): test ping
3126         (Status.disappearSlave): fix it
3128 2004-11-30  Brian Warner  <warner@lothar.com>
3130         * buildbot/interfaces.py (IBuildControl): add .stopBuild
3131         (IBuilderControl): add .getBuild(num), only works for the current
3132         build, of course, although it might be interesting to offer
3133         something for builds in the .waiting or .interlocked state.
3135         * buildbot/process/base.py (Build): have .stopBuild just do the
3136         interrupt, then let the build die by itself.
3137         (BuildControl): add .stopBuild, and add a point-event named
3138         'interrupt' just after the build so status viewers can tell that
3139         someone killed it.
3140         (BuilderControl): add .getBuild
3142         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3143         stops when you kill it, good for testing
3144         (ShellCommand.interrupt): add a logfile named 'interrupt' which
3145         contains the 'reason' text.
3147         * buildbot/status/html.py: Add Stop Build button, if the build can
3148         still be stopped. Send a Redirect (to the top page) one second
3149         later, hopefully long enough for the interrupt to have an effect.
3150         Move make_row() up to top-level to share it between Stop Build and
3151         Force Build.
3153         * buildbot/slave/commands.py: only kill the child process once
3155         * buildbot/test/test_run.py: add testInterrupt
3157 2004-11-29  Brian Warner  <warner@lothar.com>
3159         * buildbot/process/base.py: Refactor command interruption. The
3160         Build is now responsible for noticing that the slave has gone
3161         away: Build.lostRemote() interrupts the current step and makes
3162         sure that no further ones will be started.
3163         
3164         * buildbot/process/builder.py: When the initial remote_startBuild
3165         message fails, log it: this usually indicates that the slave has
3166         gone away, but we don't really start paying attention until they
3167         fail to respond to the first step's command.
3169         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3170         slave disconnect. Now sports a new interrupt() method. Error
3171         handling was simplified a lot by chaining deferreds, so
3172         remoteFailed/remoteComplete were merged into a single
3173         remoteComplete method (which can now get a Failure object).
3174         Likewise failed/finished were merged into just _finished.
3175         (BuildStep): Add interrupt(why) method, and if why is a
3176         ConnectionLost Failure then the step is failed with some useful
3177         error text.
3179         * buildbot/slave/bot.py: stop the current command when the remote
3180         Step reference is lost, and when the slave is shut down.
3181         (Bot): make it a MultiService, so it can have children. Use
3182         stopService to tell when the slave is shutting down.
3183         (SlaveBuilder): make it a Service, and a child of the Bot. Add
3184         remote_interruptCommand (which asks the current SlaveCommand to
3185         stop but allows it to keep emitting status messages), and
3186         stopCommand (which tells it to shut up and die).
3188         * buildbot/slave/commands.py: make commands interruptible
3189         (ShellCommand.kill): factor out os.kill logic
3190         (Command): factor out setup()
3191         (Command.sendStatus): don't send status if .running is false, this
3192         happens when the command has been halted.
3193         (Command.interrupt): new method, used to tell the command to die
3194         (SlaveShellCommand): implement .interrupt
3195         (DummyCommand): implement .interrupt
3196         (SourceBase, etc): factor out setup(), don't continue substeps if
3197         .interrupted is set
3199         * buildbot/status/builder.py: fix all waitUntilFinished() methods
3200         so they can be called after finishing
3202         * buildbot/test/test_run.py: new tests for disconnect behavior,
3203         refactor slave-shutdown routines, add different kinds of
3204         slave-shutdown
3206 2004-11-27  Brian Warner  <warner@lothar.com>
3208         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3209         method to express ETA time like "2m45s" instead of "165 seconds"
3211 2004-11-24  Brian Warner  <warner@lothar.com>
3213         * buildbot/test/test_vc.py (VC.testArch): unregister the test
3214         archive after the test completes, to avoid cluttering the user's
3215         'tla archives' listing with a bogus entry. Arch doesn't happen to
3216         provide any way to override the use of ~/.arch-params/, so there
3217         isn't a convenient way to avoid touching the setup of the user who
3218         runs the test.
3219         (VC_HTTP.testArchHTTP): same
3221 2004-11-23  Brian Warner  <warner@lothar.com>
3223         * buildbot/status/html.py (TextLog): split render() up into
3224         render_HEAD and render_GET. Use a Producer when sending log
3225         chunks, to reduce memory requirements and avoid sending huge
3226         non-Banana-able strings over web.distrib connections. Requires
3227         peeking under the covers of IStatusLog.
3228         (TextLog.resumeProducing): fix the "as text" link, handle client
3229         disconnects that occur while we're still sending old chunks.
3231         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3232         use defer.succeed, not the non-existent defer.success
3233         (LogFile.waitUntilFinished): same
3234         (LogFile.subscribe): don't add watchers to a finished logfile
3236         * buildbot/__init__.py (version): bump to 0.6.1+ while between
3237         releases
3239 2004-11-23  Brian Warner  <warner@lothar.com>
3241         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3243 2004-11-23  Brian Warner  <warner@lothar.com>
3245         * NEWS: update for the 0.6.1 release
3246         * MANIFEST.in: add new files
3248         * README (INSTALLATION): explain how to enable the extra VC tests
3250         * buildbot/status/builder.py (LogFile): add .runEntries at the class
3251         level to, so old pickled builds can be displayed ok
3253 2004-11-22  Brian Warner  <warner@lothar.com>
3255         * NEWS: summarize updates since last release
3257         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3258         Yoz Grahame. Closes SF#1050138.
3260         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3261         SF#1042563.
3263         * buildbot/process/step_twisted.py (Trial): update docs a bit
3265         * docs/factories.xhtml: fix Trial factory docs to match reality.
3266         Closes: SF#1049758.
3268         * buildbot/process/factory.py (Trial.__init__): add args for
3269         randomly= and recurse=, making them available to instantiators
3270         instead of only to subclassers. Closes: SF#1049759.
3272 2004-11-15  Brian Warner  <warner@lothar.com>
3274         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3275         try to teach the Quick factory to use multiple versions of python
3277 2004-11-12  Brian Warner  <warner@lothar.com>
3279         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3280         safer w32-compatible approach, and only use it on windows
3281         (BuildStatus.saveYourself): same
3283 2004-11-11  Brian Warner  <warner@lothar.com>
3285         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3286         it: one string merge per chunk. There are now separate .entries
3287         and .runEntries lists: when enumerating over all chunks, make sure
3288         to look at both.
3289         * buildbot/test/test_status.py (Log): more tests
3291         * buildbot/status/builder.py (LogFile.addEntry): Merge string
3292         chunks together, up to 10kb per chunk. This ought to cut down on
3293         the CPU-burning overhead of large log files. Thanks to Alexander
3294         Staubo for spotting the problem.
3295         * buildbot/test/test_status.py (Log): tests for same
3297 2004-11-10  Brian Warner  <warner@lothar.com>
3299         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3300         header to outbound mail
3301         * buildbot/test/test_status.py (Mail.testBuild1): test for same
3303 2004-11-08  Brian Warner  <warner@lothar.com>
3305         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3306         can't do os.rename() onto an existing file, so catch the exception
3307         and unlink the target file first. This introduces a slight window
3308         where the existing file could be lost, but the main failure case
3309         (disk full) should still be handled safely.
3310         (BuildStatus.saveYourself): same
3312         * buildbot/changes/pb.py (ChangePerspective): use a configurable
3313         separator character instead of os.sep, because the filenames being
3314         split here are coming from the VC system, which can have a
3315         different pathname convention than the local host. This should
3316         help a buildmaster running on windows that uses a CVS repository
3317         which runs under unix.
3318         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3320         * buildbot/process/step_twisted.py (Trial.createSummary): survive
3321         when there are no test failures to be parsed
3323         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3324         instead of the unix-specific os.system("cp"), thanks to Elliot
3325         Murphy for this and the other buildbot-vs-windows catches.
3326         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3328         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3329         echo the command as it is run
3331         * setup.py: install sample.mk too, not just sample.cfg
3332         (scripts): install contrib/windows/buildbot.bat on windows
3334 2004-11-07  Brian Warner  <warner@lothar.com>
3336         * buildbot/process/builder.py (Builder._detached): clear the
3337         self.currentBuild reference, otherwise the next build will be
3338         skipped because we think the Builder is already in use.
3340         * docs/examples/twisted_master.cfg: update to match current usage
3341         on the Twisted buildbot
3343 2004-10-29  Brian Warner  <warner@lothar.com>
3345         * buildbot/status/mail.py (MailNotifier): fix typo in docs
3347 2004-10-28  Brian Warner  <warner@lothar.com>
3349         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3350         have separate doVCUpdate/doVCFull methods. Catch an update failure
3351         and respond by clobbering the source directory and re-trying. This
3352         will handle local changes (like replacing a file with a directory)
3353         that will cause CVS and SVN updates to fail.
3354         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3356         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3357         python-2.4 warning
3359 2004-10-19  Brian Warner  <warner@lothar.com>
3361         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3363         * buildbot/status/html.py (StatusResourceTestResults): display any
3364         TestResults that the Build might have
3365         (StatusResourceTestResult): and the logs for each TestResult
3366         (StatusResourceBuild): add link from the per-build page
3368 2004-10-15  Brian Warner  <warner@lothar.com>
3370         * buildbot/process/step_twisted.py (Trial.createSummary): parse
3371         the 'problems' portion of stdout, add TestResults to our build
3372         * buildbot/test/test_twisted.py (Parse.testParse): test it
3374         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3375         to retrieve a dict of accumulated test results
3376         (ITestResult): define what a single test result can do
3377         * buildbot/status/builder.py (TestResult): implement ITestResult
3378         (BuildStatus.getTestResults): retrieve dict of TestResults
3379         (BuildStatus.addTestResult): add TestResults
3380         * buildbot/test/test_status.py (Results.testAddResults): test it
3382 2004-10-14  Brian Warner  <warner@lothar.com>
3384         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3385         instead of os.system("rm -rf") for win32 portability
3387         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3388         SignalMixin instead of starting/stopping the reactor, which is
3389         likely to cause problems with other tests
3391         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3392         self.copyComplete() call. Yoz Grahame makes the catch.
3394         * contrib/windows/buildbot.bat: helper script to deal with path
3395         issues. Thanks to Yoz Grahame.
3397         * buildbot/master.py (BuildMaster.startService): don't register a
3398         SIGHUP handler if the signal module has no SIGHUP attribute.
3399         Apparently win32 does this.
3401         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3403         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3404         test if the reactor can't offer UNIX sockets
3406         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3407         error introduced in the last commit. We really need that
3408         metabuildbot :).
3410 2004-10-12  Brian Warner  <warner@lothar.com>
3412         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3413         when describing a maildir source. Thanks to Stephen Davis.
3415         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3416         ETA seconds
3418         * buildbot/scripts/runner.py (createMaster): install Makefile too
3419         (start): add --no_save to 'start' command
3420         * buildbot/scripts/sample.mk: simple convenience Makefile with 
3421         start/stop/reload targets
3423         * buildbot/__init__.py (version): bump to 0.6.0+ while between
3424         releases
3426 2004-09-30  Brian Warner  <warner@lothar.com>
3428         * setup.py: Releasing buildbot-0.6.0
3430 2004-09-30  Brian Warner  <warner@lothar.com>
3432         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3433         test_trial.py from the source tarball until support is complete.
3435         * NEWS: update for 0.6.0 release
3436         * buildbot/__init__.py (version): same
3437         * README: same
3439         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3440         'source' command to tell users where to get the Buildbot source
3442         * docs/examples/*.cfg: update to modern standards
3444         * NEWS: update for release
3446         * buildbot/scripts/runner.py (createMaster): remove the
3447         -shutdown.tap stuff now that it isn't necessary
3448         (createSlave): same
3449         (start): launch buildbot.tap, not buildbot-shutdown.tap
3452         * buildbot/status/mail.py (Domain): shorten class name
3453         (MailNotifier): if lookup= is a string, pass it to Domain()
3454         * buildbot/test/test_status.py (Mail.testBuild1): new class name
3455         (Mail.testBuild2): test the string-to-Domain shortcut
3456         (Mail.testMail): fix test
3459         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3460         example config file
3462         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3463         more attributes on load
3464         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3465         to accomodate the whole waterfall page at once, and the thrashing
3466         results in a lot of unnecessary loads
3467         (BuildStatus.saveYourself): use binary pickles, not fluffy text
3468         (BuilderStatus.saveYourself): same
3469         (BuilderStatus.eventGenerator): stop generating on the first missing
3470         build. We assume that saved builds are deleted oldest-first.
3471         (BuildStepStatus.__getstate__): .progress might not exist
3473         * buildbot/changes/changes.py (ChangeMaster): make it
3474         serializable, in $masterdir/changes.pck
3475         (ChangeMaster.stopService): save on shutdown
3476         * buildbot/master.py (BuildMaster.loadChanges): load at startup
3477         * buildbot/test/test_config.py: load Changes before config file
3480         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3481         "Oh my god, you killed the command" header on a separate line
3483         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3484         skip over corrupted build pickles
3485         (BuilderStatus.getFullBuildByNumber): same
3486         (BuilderStatus.eventGenerator): skip over unavailable builds
3487         (BuildStatus.saveYourself): save builds to a .tmp file first, then
3488         do an atomic rename. This prevents a corrupted pickle when some
3489         internal serialization error occurs.
3490         (BuilderStatus.saveYourself): same
3492         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3493         the timeout for shell commands, it got lost somehow
3495         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3496         run out of build steps, return the rest of the builder events
3498         * buildbot/interfaces.py (IBuilderControl.ping): add method
3500         * buildbot/process/builder.py (BuilderControl.ping): move
3501         slave-ping to BuilderControl, and fix the failure case in the
3502         process (Event.finish() is the verb, Event.finished is the noun).
3504         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3505         through the BuilderControl instead of the BuilderStatus
3506         (EventBox): add adapter for builder.Event, allowing builder events to
3507         be displayed in the waterfall display
3509         * buildbot/master.py (BotMaster.stopService): add a 'master
3510         shutdown' event to the builder's log
3511         (BuildMaster.startService): and a 'master started' on startup
3513         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3514         builder events into the BuildStep event stream
3515         (Status.builderAdded): add a 'builder created' event
3518         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3519         command to announce the completion of a running build
3520         (IrcStatusBot.command_FORCE): announce when the build finishes
3522         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3523         don't evict unfinished builds from the cache: they must stay in
3524         the full-cache until their logfiles have stopped changing. Make
3525         sure the eviction loop terminates if an unfinished build was hit.
3526         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3527         This lets exceptions be dumped in an email status message. Really
3528         we need LogFiles which contain both text and HTML, instead of two
3529         separate classes.
3530         (BuildStatus.__getstate__): handle self.finished=False
3531         (Status.builderAdded): if the pickle is corrupted, abandon the
3532         history and create a new BuilderStatus object.
3534         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3535         self.progress attribute, helped one test which doesn't fully set
3536         up the Build object.
3538         * buildbot/interfaces.py (IStatusLogStub): split out some of the
3539         IStatusLog methods into an Interface that is implemented by "stub"
3540         logs, for which all the actual text chunks are on disk (in the
3541         pickled Build instance). To show the log contents, you must first
3542         adapt the stub log to a full IStatusLog object.
3544         * buildbot/status/builder.py (LogFileStub): create separate stub
3545         log objects, which can be upgraded to a real one if necessary.
3546         (LogFile): make them persistable, and let them stubify themselves
3547         (HTMLLogFile): same
3548         (BuildStepStatus): same
3549         (BuildStatus): same
3550         (BuildStatus.saveYourself): save the whole build out to disk
3551         (BuilderStatus): make it persistable
3552         (BuilderStatus.saveYourself): save the builder to disk
3553         (BuilderStatus.addFullBuildToCache): implement two caches which
3554         hold Build objects: a small one which holds full Builds, and a
3555         larger one which holds "stubbed" Builds (ones with their LogFiles
3556         turned into LogFileStubs). This reduces memory usage by the
3557         buildmaster by not keeping more than a few (default is 2) whole
3558         build logs in RAM all the time.
3559         (BuilderStatus.getBuild): rewrite to pull from disk (through the
3560         cache)
3561         (BuilderStatus.eventGenerator): rewrite since .builds went away
3562         (BuilderStatus.buildStarted): remove the .builds array. Add the
3563         build to the "full" cache when it starts.
3564         (BuilderStatus._buildFinished): save the build to disk when it
3565         finishes
3566         (Status): give it a basedir (same as the BuildMaster's basedir)
3567         where the builder pickles can be saved
3568         (Status.builderAdded): create the BuilderStatus ourselves, by
3569         loading a pickle from disk (or creating a new instance if there
3570         was none on disk). Return the BuilderStatus so the master can glue
3571         it into the new Builder object.
3573         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3574         all BuilderStatuses to save themselves out to disk. This is in
3575         lieu of saving anything important in the main Application pickle
3576          (the -shutdown.tap file).
3577         (BuildMaster.__init__): give Status() a basedir for its files
3578         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3579         to get the BuilderStatus, then give it to the Builder (instead of
3580         doing it the other way around). It's ok if the status announces
3581         the new Builder before it's really ready, as the outside world can
3582         only see the BuilderStatus object anyway (and it is ready before
3583         builderAdded returns). Use the builder's "builddir" (which
3584         normally specifies where the slave will run the builder) as the
3585         master's basedir (for saving serialized builds).
3587         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3588         coerce the logfile to IStatusLog before trying to get the text
3589         chunks out of it. This will pull the full (non-stubified) Build in
3590         from disk if necessary.
3591         (TextLog): fix the adapter registration
3593         * buildbot/test/test_control.py (Force.setUp): create the basedir
3594         * buildbot/test/test_web.py: same
3595         * buildbot/test/test_vc.py (SetupMixin.setUp): same
3596         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3597         * buildbot/test/test_run.py (Run.testMaster): same
3598         (Status.setUp): same
3600 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
3602         * buildbot/status/html.py (Waterfall.__init__): store actual
3603         allowForce flag passed in rather than using True for everyone;
3604         make sure setting it to False doesn't cause a NameError
3605         (Waterfall.setup).
3606         (StatusResourceBuilder.__init__) add the builder name to the page
3607         title.
3608         (StatusResourceBuilder.body) move HTML generation for a name/value
3609         row into a helper method (StatusResourceBuilder.make_row); only
3610         generate the "Force Build" form if allowForce was True and the
3611         slave is connected.  Use class attributes in the generated HTML to
3612         spread a little CSS-joy.
3614 2004-09-28  Brian Warner  <warner@lothar.com>
3616         * buildbot/process/step_twisted.py (Trial.createSummary): fix
3617         warning-scanner to not ignore things like
3618         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3620         * buildbot/status/html.py (StatusResource.control): add some
3621         class-level values for .control in an attempt to make upgrading
3622         smoother
3624         * buildbot/util.py (ComparableMixin): survive missing attributes,
3625         such as when a class is modified and we're comparing old instances
3626         against new ones
3628         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3629         failure handling, remove a redundant try/except block. Don't
3630         return the full traceback to the IRC channel.
3631         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3632         error messages. Get ETA properly.
3634         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3635         the reason, since (at least) IRC message will have <> in them.
3636         (StatusResourceBuilder.__init__): take an IBuilderControl
3637         (StatusResourceBuilder.force): use the IBuilderControl we get in
3638         the constructor instead of trying to make our own. Catch the
3639         new exceptions and ignore them for now (until we make an
3640         intermediate web page where we could show the error message)
3641         (StatusResource): create with an IControl, use it to give an
3642         IBuilderControl to all children
3643         (Waterfall): take an allowForce= option, pass an IControl object
3644         to StatusResource if it is True
3646         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3648         * buildbot/master.py (BotPerspective.perspective_forceBuild):
3649         catch new exceptions and return string forms
3651         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3652         * buildbot/process/builder.py (Builder.forceBuild): raise them
3653         * buildbot/test/test_control.py (Force.testNoSlave): new test
3654         (Force.testBuilderInUse): same
3657         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3659         * buildbot/test/test_run.py: use IControl
3660         * buildbot/test/test_vc.py: same
3662         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3663         to use IControl. Still offline.
3664         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3666         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3667         who=None so periodic builds don't send out status mail
3668         (Builder.forceBuild): include reason in the log message
3669         (BuilderControl.forceBuild): rename 'name' to 'who'
3671         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3672         'who' parameter, but make it None by default so builds forced by
3673         slave admins don't cause status mail to be sent to anybody
3674         (BotMaster.forceBuild): same. this method is deprecated.
3675         (DebugPerspective.perspective_forceBuild): same, use IControl.
3676         (DebugPerspective.perspective_fakeChange): use IControl..
3677         (Dispatcher.requestAvatar): .. so don't set .changemaster
3679         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3680         parameter to avoid confusion with the name of the builder
3683         * buildbot/status/mail.py: refine comment about needing 2.3
3685         * buildbot/status/html.py: move all imports to the top
3687         * buildbot/test/test_control.py: test new interfaces
3688         * buildbot/test/test_run.py (Status): handle new interfaces
3689         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3691         * buildbot/process/base.py (BuildControl): implement IBuildControl
3692         and its lonely getStatus() method
3694         * buildbot/process/builder.py (BuilderControl): implement
3695         IBuilderControl, obtained by adapting the Builder instance
3696         (Builder.startBuild): return a BuilderControl instead of a
3697         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3698         accomplish the same thing.
3700         * buildbot/master.py: move all import statements to the top
3701         (Control): implement IControl, obtained by adapting the
3702         BuildMaster instance.
3704         * buildbot/interfaces.py: add IControl, IBuilderControl, and
3705         IBuildControl. These are used to force builds. Eventually they
3706         will provide ways to reconfigure the Builders, pause or abandon a
3707         Build, and perhaps control the BuildMaster itself.
3709 2004-09-26  Brian Warner  <warner@lothar.com>
3711         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3712         ends up comparing us against something without a .__class__
3714 2004-09-24  Brian Warner  <warner@lothar.com>
3716         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3717         usage text right.
3719         * Makefile: add 'deb-snapshot' target, to create a timestamped
3720         .deb package
3722         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3724 2004-09-23  Brian Warner  <warner@lothar.com>
3726         * buildbot/__init__.py (version): move version string here
3727         * setup.py: get version string from buildbot.version
3728         * buildbot/status/html.py (WaterfallStatusResource.body): add
3729         buildbot version to the page footer
3730         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3731         version when asked
3733         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3734         slaves, let the second know where the first one is coming from
3735         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3736         see our exceptions. It would be nice if there were a way to just
3737         send them the exception type and value, not the full traceback.
3740         * buildbot/status/mail.py (MailNotifier): add a new argument
3741         sendToInterestedUsers=, which can be set to False to disable the
3742         usual send-to-blamelist behavior.
3743         (top): handle python-2.2 which has no email.MIMEMultipart
3744         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3745         (MailNotifier.disownServiceParent): unsubscribe on removal
3747         * buildbot/test/test_status.py (Mail.testBuild2): test it
3750         * buildbot/status/progress.py (Expectations.wavg): tolerate
3751         current=None, which happens when steps start failing badly
3752         * buildbot/test/test_status.py (Progress.testWavg): test for it
3754         * buildbot/process/step.py (SVN.startVC): when the (old) slave
3755         doesn't understand args['revision'], emit a warning instead of
3756         bailing completely. Updating to -rHEAD is probably close enough.
3758         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3760         * buildbot/test/test_status.py: at least import bb.status.client
3761         even if we don't have any test coverage for it yet
3763         * contrib/svn_buildbot.py: don't require python2.3
3764         (main): wait, do require it (for sets.py), but explain how to
3765         make it work under python2.2
3767 2004-09-23  Brian Warner  <warner@lothar.com>
3769         * contrib/svn_buildbot.py: include the revision number in the Change
3771         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3772         using util.now() because FreshCVS is a realtime service
3774         * buildbot/status/event.py: delete dead code
3775         * buildbot/process/step.py: don't import dead Event class
3776         * buildbot/process/step_twisted.py: same
3777         * buildbot/status/builder.py: same
3778         * buildbot/status/client.py: same
3780         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3782         * buildbot/changes/changes.py (Change): set .when from an __init__
3783         argument (which defaults to now()), rather than having
3784         ChangeMaster.addChange set it later.
3785         (ChangeMaster.addChange): same
3787         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3788         (parseSyncmail): same. Just use util.now() for now.
3789         (parseBonsaiMail): parse the timestamp field for when=
3791         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3792         instead of setting .when after the fact
3794 2004-09-22  slyphon
3796         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3797         results when the target project uses retrial. Still under
3798         development.
3799         * buildbot/test/test_trial.py: same
3801 2004-09-21  Brian Warner  <warner@lothar.com>
3803         * buildbot/status/mail.py (MailNotifier.__init__): include
3804         success/warnings/failure in the Subject line
3805         (MailNotifier.buildMessage): add the buildbot's URL to the body,
3806         use step.logname for the addLogs=True attachment filenames
3807         * buildbot/test/test_status.py (Mail): test Subject lines
3808         (Mail.testLogs): test attachment filenames
3810         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3811         accept a 'who' argument from the debug tool
3812         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3813         * contrib/debug.glade: add text box to set 'who'
3815         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3816         .getBuilderName with .getBuilder().getName(), more flexible
3817         (IStatusLog.getName): logs have short names, but you can prefix
3818         them with log.getStep().getName() to make them more useful
3819         * buildbot/status/builder.py: same
3820         * buildbot/status/client.py: same
3821         * buildbot/status/html.py: same
3822         * buildbot/test/test_run.py (Status.testSlave): same
3823         * buildbot/process/step.py: tweak logfile names
3825         * buildbot/status/mail.py (MailNotifier): add lookup, change
3826         argument to extraRecipients. The notifier is now aimed at sending
3827         mail to the people involved in a particular build, with additional
3828         constant recipients as a secondary function.
3830         * buildbot/test/test_status.py: add coverage for IEmailLookup,
3831         including slow-lookup and failing-lookup. Make sure the blamelist
3832         members are included.
3834         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3835         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3836         (IBuildStatus.getInterestedUsers): new method
3837         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3838         * buildbot/status/client.py (remote_getResponsibleUsers): same
3839         * buildbot/status/html.py (StatusResourceBuild.body): same
3840         * buildbot/test/test_run.py (Status.testSlave): same
3842 2004-09-20  Brian Warner  <warner@lothar.com>
3844         * docs/users.xhtml: update concepts
3846         * Makefile: add a convenience makefile, for things like 'make
3847         test'. It is not included in the source tarball.
3849 2004-09-16  Brian Warner  <warner@lothar.com>
3851         * NEWS: mention /usr/bin/buildbot, debian/*
3853         * debian/*: add preliminary debian packaging. Many thanks to
3854         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3855         it considerably since it left their hands, I am responsible for
3856         all breakage that's resulted.
3858         * bin/buildbot: create a top-level 'buildbot' command, to be
3859         installed in /usr/bin/buildbot . For now it's just a simple
3860         frontend to mktap/twistd/kill, but eventually it will be the entry
3861         point to the 'try' command and also a status client. It is also
3862         intended to support the upcoming debian-packaging init.d scripts.
3863         * buildbot/scripts/runner.py: the real work is done here
3864         * buildbot/scripts/__init__.py: need this too
3865         * buildbot/scripts/sample.cfg: this is installed in new
3866         buildmaster directories
3867         * setup.py: install new stuff
3869 2004-09-15  Brian Warner  <warner@lothar.com>
3871         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3872         'file:' schema (the version shipped with OS-X was built without the
3873         ra_local plugin).
3874         (SetupMixin.tearDown): stop the goofy twisted.web timer which
3875         updates the log-timestamp, to make sure it isn't still running after
3876         the test finishes
3878         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3879         values to the config file.
3880         * docs/examples/hello.cfg: add examples
3881         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3882         * buildbot/status/builder.py (Status.getProjectURL): implement them
3883         * buildbot/master.py (BuildMaster.loadConfig): set them from config
3884         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3885         * buildbot/status/html.py (WaterfallStatusResource): display them
3888         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3889         certain error cases don't suffer a secondary exception.
3890         (top): Skip tests if the corresponding VC tool is not installed.
3892         * buildbot/process/factory.py (Trial): introduce separate
3893         'buildpython' and 'trialpython' lists, since trialpython=[] is
3894         what you want to invoke /usr/bin/python, whereas ./setup.py is
3895         less likely to be executable. Add env= parameter to pass options
3896         to test cases (which is how I usually write tests, I don't know if
3897         anyone else does it this way).
3899         * buildbot/process/step_twisted.py (Trial): handle python=None.
3900         Require 'testpath' be a string, not a list. Fix tests= typo.
3901         (Trial.start): sanity-check any PYTHONPATH value for stringness.
3903         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3904         way to deal with the possibility of removing the disconnect notify
3905         twice.
3906         (CVS): add a 'login' parameter to give a password to 'cvs login',
3907         commonly used with pserver methods (where pw="" or pw="guest")
3909         * buildbot/slave/commands.py (SourceBase): move common args
3910         extraction and setup() to __init__, so everything is ready by the
3911         time setup() is called
3912         (CVS.start): call 'cvs login' if a password was supplied
3913         (ShellCommand): special-case PYTHONPATH: prepend the master's
3914         value to any existing slave-local value.
3916         * buildbot/process/builder.py (Builder.updateBigStatus): if we
3917         don't have a remote, mark the builder as Offline. This whole
3918         function should probably go away and be replaced by individual
3919         deltas.
3920         (Builder.buildFinished): return the results to the build-finished
3921         deferred callback, helps with testing
3923 2004-09-14  Brian Warner  <warner@lothar.com>
3925         * buildbot/test/test_vc.py: put all the repositories needed to run
3926         the complete tests into a single small (1.3MB) tarball, so I can
3927         make that tarball available on the buildbot web site. Test HTTP
3928         access (for Arch and Darcs) by spawning a temporary web server
3929         while the test runs.
3931         * docs/users.xhtml: new document, describe Buildbot's limited
3932         understanding of different human users
3934         * buildbot/test/test_vc.py: rearrange test cases a bit
3936         * buildbot/process/step_twisted.py (Trial): handle testpath=
3937         * buildbot/process/factory.py (Trial): update to use step.Trial
3939         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3941         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3942         the overall build text (which gives you 'failed 2 tests' rather
3943         than just 'failed')
3944         (BuildStepStatus.text2): default to [], not None
3946         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3947         must be a list
3949 2004-09-12  Brian Warner  <warner@lothar.com>
3951         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3952         log the whole exception if it's just an AttributeError (old slave)
3954         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3955         so (e.g.) sub-commands can be run in the right directory.
3956         (ShellCommand.start): accept an optional errorMessage= argument
3957         to make life easier for SVN.start
3958         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3959         headers
3960         (ShellCommand.start): move ['dir'] compatibility hack..
3961         (RemoteShellCommand.start): .. to here so everyone can use it
3963         * buildbot/process/step_twisted.py (Trial): use .workdir
3965         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3966         text displayed when debuild fails completely
3967         (Trial): snarf _trial_temp/test.log from the slave and display it
3969 2004-09-11  Brian Warner  <warner@lothar.com>
3971         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3973         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3974         set to 'twisted', so --recurse can find twisted/web/test/*, etc
3976         * buildbot/process/step.py (ShellCommand): call .createSummary
3977         before .evaluateCommand instead of the other way around. This
3978         makes it slightly easier to count warnings and then use that to
3979         set results=WARNINGS
3980         * buildbot/process/step_twisted.py: cosmetic, swap the methods
3982         * buildbot/process/base.py (Build.buildFinished): update status
3983         before doing progress. It's embarrassing for the build to be stuck
3984         in the "building" state when an exceptions occurs elsewhere..
3986         * buildbot/status/progress.py (Expectations.expectedBuildTime):
3987         python2.2 doesn't have 'sum'
3989         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
3990         to prevent clients from accidentally sorting it
3992         * buildbot/master.py (Manhole): add username/password
3993         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
3994         c['manholePort'], deprecate old usage
3995         * docs/config.xhtml: document c['manhole']
3996         * docs/examples/hello.cfg: show example of using a Manhole
3999         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4000         pretend the slave is up to date
4002         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4003         the module, overlaps with 'log', the local variable
4005         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4007         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4008         new method to let Steps find out the version of their
4009         corresponding SlaveCommand.
4010         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4011         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4012         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4013         (SVN.startVC): same
4014         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4015         (Arch.startVC): same
4016         (P4Sync.startVC): same
4018         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4019         Deferred so we can catch errors in remote_startCommand
4020         (RemoteShellCommand.start): same
4022         * docs/examples/twisted_master.cfg: update sample config file
4024         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4025         after connectionMade() is called, not before. Close stdin at that
4026         point too.
4028         * buildbot/process/process_twisted.py: update to use Trial, clean
4029         up argument passing (move to argv arrays instead of string
4030         commands)
4032         * buildbot/process/step_twisted.py (Trial): new step to replace
4033         RunUnitTests, usable by any trial-using project (not just
4034         Twisted). Arguments have changed, see the docstring for details.
4036         * buildbot/process/base.py (Build.startBuild): this now returns a
4037         Deferred. Exceptions that occur during setupBuild are now
4038         caught better and lead to fewer build_status weirdnesses, like
4039         finishing a build that was never started.
4040         (Build.buildFinished): fire the Deferred instead of calling
4041         builder.buildFinished directly. The callback argument is this
4042         Build, everything else can be extracted from it, including the
4043         new build.results attribute.
4044         * buildbot/process/builder.py (Builder.startBuild): same
4045         (Builder.buildFinished): same, extract results from build
4047         * buildbot/process/step.py (ShellCommands): remove dead code
4049 2004-09-08  Brian Warner  <warner@lothar.com>
4051         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4052         doesn't try to use the leftover patched workdir
4053         (SourceStamp): test source-stamp computation for CVS and SVN
4055         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4056         patched workdir ('touch .buildbot-patched') so we don't try to
4057         update it later
4058         (SourceBase.start): add ['revision'] for all Source steps
4059         (CVS): change args: use ['branch'] for -r, remove ['files']
4060         (CVS.buildVC): fix revision/branch stuff
4061         (SVN): add revision stuff
4063         * buildbot/process/step.py (BuildStep.__init__): reject unknown
4064         kwargs (except 'workdir') to avoid silent spelling errors
4065         (ShellCommand.__init__): same
4066         (Source): new base class for CVS/SVN/etc. Factor out everything
4067         common, add revision computation (perform the checkout with a -D
4068         DATE or -r REVISION that gets exactly the sources described by the
4069         last Change), overridable with step.alwaysUseLatest. Add patch
4070         handling (build.getSourceStamp can trigger the use of a base
4071         revision and a patch).
4072         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4073         * docs/steps.xhtml: update docs
4074         * docs/source.xhtml: mention .checkoutDelay
4075         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4077         * buildbot/process/base.py (Build.setSourceStamp): add a
4078         .sourceStamp attribute to each Build. If set, this indicates that
4079         the build should be done with something other than the most
4080         recent source tree. This will be used to implement "try" builds.
4081         (Build.allChanges): new support method
4082         (Build.lastChangeTime): remove, functionality moved to Source steps
4083         (Build.setupBuild): copy the Step args before adding ['workdir'],
4084         to avoid modifying the BuildFactory (and thus triggering spurious
4085         config changes)
4088         * buildbot/status/html.py: rename s/commits/changes/
4089         (StatusResourceChanges): same
4090         (CommitBox.getBox): same, update URL
4091         (WaterfallStatusResource): same
4092         (StatusResource.getChild): same
4094         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4095         * contrib/debug.glade: add optional 'revision' to the fakeChange
4097         * buildbot/changes/changes.py (html_tmpl): display .revision
4098         (ChangeMaster.addChange): note .revision in log
4099         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4100         accept a ['revision'] attribute
4102         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4104         * buildbot/master.py (BotMaster.getPerspective): update the
4105         .connected flag in SlaveStatus when it connects
4106         (BotMaster.detach): and when it disconnects
4107         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4108         (BuildMaster.loadConfig_Builders): walk old list correctly
4110         * buildbot/test/test_config.py: fix prefix= usage
4112 2004-09-06  Brian Warner  <warner@lothar.com>
4114         * NEWS: mention P4
4116         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4117         poll a P4 depot looking for recent changes. Thanks to Dave
4118         Peticolas for the contribution. Probably needs some testing after
4119         I mangled it.
4121         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4122         requires manual client setup for each buildslave. Rather
4123         experimental. Thanks again to Dave Peticolas.
4124         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4126         * buildbot/changes/changes.py (Change): add a .revision attribute,
4127         which will eventually be used to generate source-stamp values.
4129         * buildbot/process/step.py (RemoteCommand.start): use
4130         notifyOnDisconnect to notice when we lose the slave, then treat it
4131         like an exception. This allows LogFiles to be closed and the build
4132         to be wrapped up normally. Be sure to remove the disconnect
4133         notification when the step completes so we don't accumulate a
4134         bazillion such notifications which will fire weeks later (when the
4135         slave finally disconnects normally). Fixes SF#915807, thanks to
4136         spiv (Andrew Bennetts) for the report.
4137         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4138         really isn't Logged- specific
4139         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4140         header, since it's almost always going to be appended to an
4141         incomplete line
4142         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4143         update test to handle use of notifyOnDisconnect
4145         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4146         don't clear .ETA and .currentBuild when going offline, let the
4147         current build clean up after itself
4149         * buildbot/process/builder.py (Builder.detached): wait a moment
4150         before doing things like stopping the current build, because the
4151         current step will probably notice the disconnect and cleanup the
4152         build by itself
4153         * buildbot/test/test_run.py (Status.tearDown): update test to
4154         handle asynchronous build-detachment
4156         * buildbot/process/base.py (Build.stopBuild): minor shuffles
4158         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4159         hush a debug message
4161 2004-09-05  Brian Warner  <warner@lothar.com>
4163         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4164         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4165         kernels do this: the fcntl module has the F_NOTIFY constant, but
4166         the kernel itself doesn't support the operation. Thanks to Olly
4167         Betts for spotting the problem.
4169         * buildbot/process/step.py (Darcs): new source-checkout command
4170         (Arch): new source-checkout command
4171         (todo_P4): fix constructor syntax, still just a placeholder
4172         * buildbot/test/test_vc.py (VC.testDarcs): test it
4173         (VC.testDarcsHTTP): same, via localhost HTTP
4174         (VC.testArch): same
4175         (VC.testArchHTTP): same
4176         * NEWS: mention new features
4178         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4179         which tells the step to stash stdout text locally (in .stdout).
4180         Slave-side Commands can use this to make decisions based upon the
4181         output of the the ShellCommand (not just the exit code).
4182         (Darcs): New source-checkout command
4183         (Arch): New source-checkout command, uses .keepStdout in one place
4184         where it needs to discover the archive's default name.
4186         * docs/steps.xhtml: Document options taken by Darcs and Arch.
4187         * docs/source.xhtml: add brief descriptions of Darcs and Arch
4188         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4190         * buildbot/process/step.py (ShellCommand.describe): add an
4191         alternate .descriptionDone attribute which provides descriptive
4192         text when the step is complete. .description can be ["compiling"],
4193         for use while the step is running, then .descriptionDone can be
4194         ["compile"], used alone when the step succeeds or with "failed" when
4195         it does not. Updated other steps to use the new text.
4196         * buildbot/process/step_twisted.py: same
4197         * buildbot/test/test_run.py: update tests to match
4199 2004-08-30  Brian Warner  <warner@lothar.com>
4201         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4202         (CVS.__init__): send 'patch' argument to slave
4203         (CVS.start): don't create the LoggedRemoteCommand until start(),
4204         so we can catch a .patch added after __init__
4205         (SVN.__init__): add 'patch' to SVN too
4206         (SVN.start): same
4208         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4209         argument, to let commands push data into the process' stdin pipe.
4210         Move usePTY to a per-instance attribute, and clear it if 'stdin'
4211         is in use, since closing a PTY doesn't really affect the process
4212         in the right way (in particular, I couldn't run /usr/bin/patch
4213         under a pty).
4214         (SourceBase.doPatch): handle 'patch' argument
4216         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4217         both CVS and SVN
4219         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4220         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4221         versions to master
4222         * buildbot/master.py (BotPerspective.got_commands): get command
4223         versions from slave, give to each builder
4224         * buildbot/process/builder.py (Builder.attached): stash slave
4225         command versions in .remoteCommands
4227         * docs/steps.xhtml: bring docs in-line with reality
4229         * buildbot/process/step.py (CVS.__init__): more brutal
4230         compatibility code removal
4231         (SVN.__init__): same
4233         * buildbot/slave/commands.py (SlaveShellCommand): update docs
4234         (SlaveShellCommand.start): require ['workdir'] argument, remove
4235         the ['dir'] fallback (compatibility will come later)
4236         (SourceBase): update docs
4237         (SourceBase.start): remove ['directory'] fallback
4238         (CVS): update docs
4239         (SVN): update docs
4240         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4241         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4242         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4244         * buildbot/process/step.py (RemoteShellCommand.__init__): add
4245         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4246         code.. I will figure out 0.5.0-compatibility hooks later)
4248 2004-08-30  Brian Warner  <warner@lothar.com>
4250         * buildbot/process/process_twisted.py: rewrite in terms of new
4251         BuildFactory base class. It got significantly shorter. Yay
4252         negative code days.
4254         * buildbot/process/step_twisted.py (HLint.start): fix to make it
4255         work with the new "self.build isn't nailed down until we call
4256         step.start()" scheme: specifically, __init__ is called before the
4257         build has decided on which Changes are going in, so we don't scan
4258         build.allFiles() for .xhtml files until start()
4259         (HLint.commandComplete): use getText(), not getStdout()
4260         (RunUnitTests.start): same: don't use .build until start()
4261         (RunUnitTests.describe): oops, don't report (None) when using
4262         the default reactor
4263         (RunUnitTests.commandComplete): use getText()
4264         (RunUnitTests.createSummary): same
4265         (BuildDebs.commandComplete): same
4267         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4268         set args['command'] until start(), since our BuildStep is allowed
4269         to change their mind up until that point
4270         (TreeSize.commandComplete): use getText(), not getStdout()
4272         * docs/examples/twisted_master.cfg: update to current standards
4274         * docs/factories.xhtml: update
4275         * buildbot/process/factory.py: implement all the common factories
4276         described in the docs. The Trial factory doesn't work yet, and
4277         I've probably broken all the process_twisted.py factories in the
4278         process. There are compatibility classes left in for things like
4279         the old BasicBuildFactory, but subclasses of them are unlikely to
4280         work.
4281         * docs/examples/glib_master.cfg: use new BuildFactories
4282         * docs/examples/hello.cfg: same
4284         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4285         explicit 'workdir' args
4287         * buildbot/process/base.py (BuildFactory): move factories to ..
4288         * buildbot/process/factory.py (BuildFactory): .. here
4289         * buildbot/process/process_twisted.py: handle move
4290         * buildbot/test/test_config.py: same
4291         * buildbot/test/test_run.py: same
4292         * buildbot/test/test_steps.py: same
4293         * buildbot/test/test_vc.py: same
4294         * docs/factories.xhtml: same
4296         * NEWS: mention config changes that require updating master.cfg
4298         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4299         argument to all steps that weren't given one already, pointing at
4300         the "build/" directory.
4302         * docs/examples/hello.cfg: remove explicit 'workdir' args
4304         * docs/factories.xhtml: document standard BuildFactory clases,
4305         including a bunch which are have not yet been written
4307 2004-08-29  Brian Warner  <warner@lothar.com>
4309         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4310         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4311         buildbot.status.builder so they aren't quite so internal
4312         * buildbot/process/base.py, buildbot/process/builder.py: same
4313         * buildbot/process/maxq.py, buildbot/process/step.py: same
4314         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4315         * buildbot/status/mail.py, buildbot/test/test_run.py: same
4316         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4318         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4319         to handle new getLogs()-returns-list behavior
4320         (StatusResourceBuildStep.getChild): same
4321         (StepBox.getBox): same
4322         (WaterfallStatusResource.phase0): same
4324         * docs/source.xhtml: document how Buildbot uses version-control
4325         systems (output side: how we get source trees)
4326         * docs/changes.xhtml: rename from sources.xhtml, documents VC
4327         systems (input side: how we learn about Changes)
4329         * buildbot/master.py (Manhole): use ComparableMixin
4330         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4331         * buildbot/changes/mail.py (MaildirSource): same
4332         * buildbot/status/client.py (PBListener): same
4333         * buildbot/status/html.py (Waterfall): same
4334         * buildbot/status/words.py (IRC): same
4336         * NEWS: start describing new features
4338         * buildbot/status/mail.py (MailNotifier): finish implementation.
4339         The message body is still a bit sparse.
4340         * buildbot/test/test_status.py (Mail): test it
4342         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4343         and __hash__ methods I wind up adding everywhere. Specifically
4344         intended to support the buildbot config-file update scheme where
4345         we compare, say, the old list of IStatusTargets against the new
4346         one and don't touch something which shows up on both lists.
4347         * buildbot/test/test_util.py (Compare): test case for it
4349         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4350         return a list instead of a dict
4351         (IBuildStepStatus.getLogs): same. The idea is that steps create
4352         logs with vaguely unique names (although their uniqueness is not
4353         guaranteed). Thus a compilation step should create its sole
4354         logfile with the name 'compile', and contribute it to the
4355         BuildStatus. If a step has two logfiles, try to create them with
4356         different names (like 'test.log' and 'test.summary'), and only
4357         contribute the important ones to the overall BuildStatus.
4358         * buildbot/status/builder.py (Event.getLogs): same
4359         (BuildStepStatus): fix default .text and .results
4360         (BuildStepStatus.addLog): switch to list-like .getLogs()
4361         (BuildStepStatus.stepFinished): same
4362         (BuildStatus.text): fix default .text
4363         (BuildStatus.getLogs): temporary hack to return all logs (from all
4364         child BuildStepStatus objects). Needs to be fixed to only report
4365         the significant ones (as contributed by the steps themselves)
4366         * buildbot/test/test_run.py: handle list-like .getLogs()
4367         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4369 2004-08-28  Brian Warner  <warner@lothar.com>
4371         * buildbot/process/builder.py (Builder.attached): serialize the
4372         attachment process, so the attach-watcher isn't called until the
4373         slave is really available. Add detached watchers too, which makes
4374         testing easier.
4376         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4378         * buildbot/test/test_swap.py: remove dead code
4380         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4381         (ShellCommand.start): treat errors in _startCommand/spawnProcess
4382         sort of as if the command being run exited with a -1. There may
4383         still be some holes in this scheme.
4384         (CVSCommand): add 'revision' tag to the VC commands, make sure the
4385         -r option appears before the module list
4386         * buildbot/process/step.py (CVS): add 'revision' argument
4388         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4389         when sending updates or stepComplete messages to the master, since
4390         we don't currently care whether they arrive or not. When we revamp
4391         the master/slave protocol to really resume interrupted builds,
4392         this will need revisiting.
4393         (lostRemote): remove spurious print
4395         * buildbot/master.py (BotPerspective.attached): serialize the
4396         new-builder interrogation process, to make testing easier
4397         (BotMaster.waitUntilBuilderDetached): convenience function
4399         * buildbot/status/builder.py (BuilderStatus): prune old builds
4400         (BuildStatus.pruneSteps): .. and steps
4401         (BuildStepStatus.pruneLogs): .. and logs
4402         (BuilderStatus.getBuild): handle missing builds
4403         * buildbot/status/html.py (StatusResourceBuild.body): display build
4404         status in the per-build page
4405         (BuildBox.getBox): color finished builds in the per-build box
4407 2004-08-27  Brian Warner  <warner@lothar.com>
4409         * buildbot/status/mail.py (MailNotifier): new notification class,
4410         not yet finished
4412         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4413         variants of a common base class which handles all the mode= logic
4415         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4416         convenience method
4417         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4419 2004-08-26  Brian Warner  <warner@lothar.com>
4421         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4422         interfaces
4424         * buildbot/test/test_run.py: update to new Logfile interface, new
4425         buildbot.slave modules
4426         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4428         * MANIFEST.in: new sample config file
4429         * docs/examples/hello.cfg: same
4431         * buildbot/process/step_twisted.py: remove dead import
4433         * buildbot/process/step.py (RemoteCommand.run): catch errors
4434         during .start
4435         (RemoteCommand.remote_update): ignore updates that arrive after
4436         we've shut down
4437         (RemoteCommand.remote_complete): ignore duplicate complete msgs
4438         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4439         the responsibilities of the subclass's methods
4440         (BuildStep.failed): catch errors during failure processing
4441         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4442         (CVS): move to a mode= argument (described in docstring), rather
4443         than the ungainly clobber=/export=/copydir= combination.
4444         (SVN): add mode= functionality to SVN too
4445         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4447         * buildbot/process/base.py (Build.startNextStep): catch errors
4448         during s.startStep()
4450         * buildbot/clients/base.py: update to new PB client interface.
4451         gtkPanes is still broken
4453         * buildbot/bot.py, buildbot/slavecommand.py: move to..
4454         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4455         * setup.py: add buildbot.slave module
4456         * buildbot/bb_tap.py: handle move
4457         * buildbot/slave/registry.py: place to register commands, w/versions
4458         * buildbot/slave/bot.py: major simplifications
4459         (SlaveBuilder.remote_startCommand): use registry for slave commands,
4460         instead of a fixed table. Eventually this will make the slave more
4461         extensible. Use 'start' method on the command, not .startCommand.
4462         Fix unsafeTracebacks handling (I think).
4463         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4464         helper class with a .start method that returns a Deferred.
4465         SlaveShellCommand is the form reached by the buildmaster. Commands
4466         which use multiple ShellCommands can just chain them as Deferreds,
4467         with some helper methods in Command (_abandonOnFailure and
4468         _checkAbandoned) to bail on rc!=0.
4469         (CVSCommand): prefer new mode= argument
4470         (SVNFetch): add mode= argument
4472         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4473         put a useful reason string on the build
4475         * buildbot/status/builder.py (LogFile): do LogFile right: move the
4476         core functionality into an IStatusLog object
4477         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4478         * buildbot/status/html.py (TextLog): HTML-rendering goes here
4479         (StatusResourceBuild.body): use proper accessor methods
4480         * buildbot/status/client.py (RemoteLog): PB-access goes here
4481         (StatusClientPerspective.perspective_subscribe): add "full" mode,
4482         which delivers log contents too
4483         (PBListener.__cmp__): make PBListeners comparable, thus removeable
4484         * buildbot/status/event.py: remove old Logfile completely
4486         * buildbot/interfaces.py (IStatusLog.subscribe): make the
4487         subscription interface for IStatusLog subscriptions just like all
4488         other the status subscriptions
4489         (IStatusReceiver.logChunk): method called on subscribers
4491 2004-08-24  Brian Warner  <warner@lothar.com>
4493         * buildbot/process/builder.py (Builder._pong): oops, ping response
4494         includes a result (the implicit None returned by remote_print).
4495         Accept it so the _pong method handles the response correctly.
4497 2004-08-06  Brian Warner  <warner@lothar.com>
4499         * buildbot/test/test_config.py: update IRC, PBListener tests
4501         * buildbot/status/client.py (StatusClientPerspective): total
4502         rewrite to match new IStatus interfaces. New subscription scheme.
4503         There are still a few optimizations to make (sending down extra
4504         information with event messages so the client doesn't have to do a
4505         round trip). The logfile-retrieval code is probably still broken.
4506         Moved the PB service into its own port, you can no longer share a
4507         TCP socket between a PBListener and, say, the slaveport (this
4508         should be fixed eventually).
4509         * buildbot/clients/base.py (Client): revamp to match. still needs
4510         a lot of work, but basic event reporting works fine. gtkPanes is
4511         completely broken.
4513         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4514         instance talks to a single irc server. Threw out all the old
4515         multi-server handling code. Still need to add back in
4516         builder-control (i.e. "force build")
4518         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4519         more random text to the as-yet-unreachable per-step page
4521         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4522         rename to stepETAUpdate
4523         (BuildStatus.subscribe): add build-wide ETA updates
4524         (BuilderStatus.getState): remove more cruft
4525         (BuilderStatus.getCurrentBuild): remove more cruft
4526         (BuilderStatus.buildStarted): really handle tuple-subscription
4527         * buildbot/test/test_run.py (Status.testSlave): handle the
4528         stepETAUpdate rename
4530         * buildbot/master.py (BuildMaster): don't add a default
4531         StatusClientService. Don't add a default IrcStatusFactory. Both
4532         are now added through c['status'] in the config file. c['irc'] is
4533         accepted for backwards compatibility, the only quirk is you cannot
4534         use c['irc'] to specify IRC servers on ports other than 6667.
4536         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4537         (IStatusReceiver.buildStarted): allow update-interval on subscribe
4538         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4539         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4542         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4543         the buildmaster to re-read its config file
4546         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4547         find out the port our server is running on
4548         (WebTest.test_webPathname_port): same
4550         * buildbot/test/test_config.py (testWebPortnum): test it
4551         (testWebPathname): ditto
4553         * docs/config.xhtml: document new c['status'] configuration option
4555         * buildbot/status/html.py (Waterfall): new top-level class which
4556         can be added to c['status']. This creates the Site as well as the
4557         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4558         reachable as .parent, for everything.
4560         * buildbot/master.py (Manhole): make it a normal service Child
4561         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4562         webPathname. It will eventually replace c['irc'] and the implicit
4563         PB listener as well. c['webPortnum'] and c['webPathname'] are left
4564         in as (deprecated) backward compatibility hooks for now.
4567         * buildbot/process/builder.py (Builder.buildFinished): don't
4568         inform out builder_status about a finished build, as it finds out
4569         through its child BuildStatus object
4571         * buildbot/status/html.py: extensive revamp. Use adapters to make
4572         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4573         have both starting and finishing times and adjust the waterfall
4574         display accordingly, using spacers if necessary. Use SlaveStatus
4575         to get buildslave info.
4576         (StatusResourceBuildStep): new just-one-step resource, used to get
4577         logfiles. No actual href to it yet.
4579         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4580         the time being, until I get the file-naming scheme right
4582         * buildbot/status/builder.py (Event): clean started/finished names
4583         (BuildStatus.isFinished): .finished is not None is the right test
4584         (BuildStatus.buildStarted): track started/finished times ourselves
4585         (BuilderStatus.getSlave): provide access to SlaveStatus object
4586         (BuilderStatus.getLastFinishedBuild): all builds are now in
4587         .builds, even the currently-running one. Accomodate this change.
4588         (BuilderStatus.eventGenerator): new per-builder event generator.
4589         Returns BuildStepStatus and BuildStatus objects, since they can
4590         both be adapted as necessary.
4591         (BuilderStatus.addEvent): clean up started/finished attributes
4592         (BuilderStatus.startBuild,finishBuild): remove dead code
4593         (SlaveStatus): new object to provide ISlaveStatus
4595         * buildbot/process/step.py (ShellCommand.getColor): actually
4596         return the color instead of setting it ourselves
4597         (CVS.__init__): pull .timeout and .workdir options out of
4598         **kwargs, since BuildStep will ignore them. Without this neither
4599         will be sent to the slave correctly.
4600         (SVN.__init__): same
4602         * buildbot/process/builder.py (Builder): move flags to class-level
4603         attributes
4604         (Builder.attached): remove .remoteInfo, let the BotPerspective and
4605         SlaveStatus handle that
4607         * buildbot/process/base.py (Build.firstEvent): remove dead code
4608         (Build.stopBuild): bugfix
4610         * buildbot/changes/pb.py (PBChangeSource.describe): add method
4612         * buildbot/changes/changes.py (Change): add IStatusEvent methods
4613         (ChangeMaster.eventGenerator): yield Changes, since there are now
4614         Adapters to turn them into HTML boxes
4616         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4617         (BotPerspective.attached): feed a SlaveStatus object
4618         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4619         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4621         * buildbot/interfaces.py: API additions
4622         (ISlaveStatus): place to get slave status
4624 2004-08-04  Brian Warner  <warner@lothar.com>
4626         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4627         the delay finishes, so the step is marked as SUCCESS
4629         * buildbot/test/test_run.py (Status.testSlave): cover more of
4630         IBuildStatus and IBuildStepStatus
4632         * buildbot/status/progress.py (StepProgress): move some flags to
4633         class-level attributes
4634         (StepProgress.remaining): if there are no other progress metrics
4635         to go by, fall back to elapsed time
4636         (StepProgress.setExpectations): take a dict of metrics instead of
4637         a list
4638         (BuildProgress.setExpectationsFrom): pull expectations from the
4639         Expectations, instead of having it push them to the BuildProgress
4640         (Expectations): move some flags to class-level attributes
4641         (Expectations.__init__): copy per-step times from the
4642         BuildProgress too
4643         (Expectations.expectedBuildTime): new method for per-build ETA
4645         * buildbot/status/event.py (Logfile): move some flags to
4646         class-level attributes
4647         (Logfile.logProgressTo): better method name, let step set the
4648         progress axis name (instead of always being "output")
4650         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4651         times directly, rather than depending upon the (possibly missing)
4652         .progress object. Use 'None' to indicate "not started/finished
4653         yet"
4654         (BuildStepStatus.getExpectations): oops, return the full list of
4655         expectations
4656         (BuilderStatus._buildFinished): append finished builds to .builds
4658         * buildbot/process/step.py (BuildStep): add separate .useProgress
4659         flag, since empty .progressMetrics[] still implies that time is a
4660         useful predictor
4661         (CVS): set up the cmd in __init__, instead of waiting for start()
4663         * buildbot/process/base.py (Build.startBuild): disable the 'when'
4664         calculation, this will eventually turn into a proper sourceStamp
4665         (Build.setupBuild): tell the Progress to load from the Expectations,
4666         instead of having the Expectations stuff things into the Progress
4667         (Build.buildException): add a build-level errback to make sure the
4668         build's Deferred fires even in case of exceptions
4670         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4671         the forced build
4672         * buildbot/process/builder.py (Builder.forceBuild): convey the
4673         reason instead of creating a fake Change
4675         * docs/examples/twisted_master.cfg: update to match reality
4677         * buildbot/test/test_config.py, buildbot/test/test_process.py:
4678         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4679         fix or remove broken/breaking tests
4681         * buildbot/status/event.py (Logfile.__len__): remove evil method
4683         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4684         missing .build, for test convenience
4686         * buildbot/process/step_twisted.py: import fixes
4688         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4690         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4691         .statusbag reference
4693         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4694         connection at shutdown, and stop it from reconnecting
4696         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4697         chase down remote-execution bugs
4699         * buildbot/process/step.py: more fixes, remove
4700         BuildStep.setStatus()
4701         * buildbot/status/builder.py: move setStatus() functionality into
4702         BuildStatus.addStep
4703         * buildbot/status/event.py: minor fixes
4705 2004-08-03  Brian Warner  <warner@lothar.com>
4707         * buildbot/process/base.py, buildbot/process/builder.py
4708         * buildbot/process/step.py, buildbot/status/builder.py
4709         * buildbot/status/event.py, buildbot/test/test_run.py:
4710         fix status delivery, get a basic test case working
4711         * buildbot/master.py: finish implementing basic status delivery,
4712         temporarily disable HTML/IRC/PB status sources
4714         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4716         * buildbot/status/progress.py (BuildProgress): remove dead code
4718         * buildbot/interfaces.py
4719         * buildbot/process/base.py, buildbot/process/builder.py
4720         * buildbot/process/step.py, buildbot/process/step_twisted.py
4721         * buildbot/status/builder.py: Complete overhaul of the all
4722         status-delivery code, unifying all types of status clients (HTML,
4723         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4724         look like. This commit is a checkpointing of the work-in-progress:
4725         the input side is mostly done (Builders/Builds sending status
4726         to the BuilderStatus/BuildStatus objects), but the output side has
4727         not yet been started (HTML resources querying BuilderStatus
4728         objects). Things are probably very broken right now and may remain
4729         so for several weeks, I apologize for the disruption.
4731         * buildbot/status/event.py: add a setHTML method to use pre-rendered
4732         HTML as the log's contents. Currently used for exception tracebacks.
4733         * buildbot/status/progress.py: minor spelling changes
4735 2004-08-02  Brian Warner  <warner@lothar.com>
4737         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4738         in mozilla. Also added stylesheets copied from Twisted's docs.
4739         Remember that these files are meant to be run through Lore first.
4740         Thanks to Philipp Frauenfelder for the fixes.
4741         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4742         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4743         * docs/template.tpl: added a Lore template
4745 2004-07-29  Brian Warner  <warner@lothar.com>
4747         * buildbot/interfaces.py: revamp status delivery. This is the
4748         preview: these are the Interfaces that will be provided by new
4749         Builder code, and to which the current HTML/IRC/PB status
4750         displayers will be adapted.
4752         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4753         on the SlaveBuilder, not the Bot.
4754         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4755         SlaveBuilder.usePTY
4756         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4757         set .usePTY on the FakeSlaveBuilder
4759 2004-07-25  Brian Warner  <warner@lothar.com>
4761         * buildbot/changes/freshcvs.py: add some debug log messages
4762         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4763         disabled 'setFilter' syntax
4764         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4765         don't end with a slash
4767         * buildbot/process/base.py (Builder._pong_failed): add TODO note
4769         * setup.py: bump to 0.5.0+ while between releases
4771 2004-07-23  Brian Warner  <warner@lothar.com>
4773         * setup.py (version): Releasing buildbot-0.5.0
4775 2004-07-23  Brian Warner  <warner@lothar.com>
4777         * README: update for 0.5.0 release
4779         * NEWS: update for 0.5.0 release
4781 2004-07-22  Brian Warner  <warner@lothar.com>
4783         * buildbot/slavecommand.py (ShellCommand): make usePTY a
4784         mktap-time configuration flag (--usepty=1, --usepty=0)
4785         * buildbot/bot.py: same
4787         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4788         an 'info' directory being unwanted
4790         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4791         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4792         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4793         and earlier), use a FreshCVSSourceOldcred instead.
4794         (test): simple test routine: connect to server, print changes
4796         * buildbot/changes/changes.py (Change.getTime): make it possible
4797         to print un-timestamped changes
4799         * buildbot/master.py (makeApp): delete ancient dead code
4800         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4801         * buildbot/test/test_config.py (testFindConfigFile): test it
4803         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4804         instead of win32 one
4807         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4808         now takes a dictionary instead of a tuple. See docs/config.xhtml for
4809         details.
4811         * buildbot/process/base.py (Builder.__init__): change constructor
4812         to accept a dictionary of config data, rather than discrete
4813         name/slave/builddir/factory arguments
4815         * docs/examples/twisted_master.cfg: update to new syntax
4816         * docs/examples/glib_master.cfg: same
4817         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4818         rough tests of the new syntax
4820         
4821         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4822         to be an int, which means "run a web.distrib sub-server on a TCP
4823         port". This lets you publish the buildbot status page to a remote
4824         twisted.web server (using distrib.ResourceSubscription). Also
4825         rename the local attributes used to hold these web things so
4826         they're more in touch with reality.
4827         * buildbot/test/test_web.py: test webPortnum and webPathname
4828         * docs/config.xhtml: document this new use of webPathname
4830         * docs/config.xhtml: new document, slightly ahead of reality
4831         
4832         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4833         'prefix' handling: treat it as a simple string to check with
4834         .startswith, instead of treating it as a directory. This allows
4835         sub-directories to be used. If you use prefix=, you should give it
4836         a string that starts just below the CVSROOT and ends with a slash.
4837         This prefix will be stripped from all filenames, and filenames
4838         which do not start with it will be ignored.
4840 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
4842         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4843         and --exclude (inverse of --include).  SVN post-commit hooks
4844         now have total control over which changes get sent to buildbot and which
4845         do not.
4847 2004-07-10  Brian Warner  <warner@lothar.com>
4849         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4850         test case to match new API
4852         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4853         which crashed HTML display when self.entries=[] (needed to
4854         distinguish between [], which means "no entries yet", and None,
4855         which means "the entries have been swapped out to disk, go fetch
4856         them").
4858 2004-07-04  Brian Warner  <warner@lothar.com>
4860         * buildbot/process/step_twisted.py (countFailedTests): Count
4861         skips, expectedFailures, and unexpectedSuccesses. Start scanning
4862         10kb from the end because any import errors are wedged there and
4863         they would make us think the test log was unparseable.
4864         (RunUnitTests.finishStatus): add skip/todo counts to the event box
4866 2004-06-26  Brian Warner  <warner@lothar.com>
4868         * buildbot/process/step_twisted.py (RemovePYCs): turn the
4869         delete-*.pyc command into an actual BuildStep, so we can label it
4870         nicely
4871         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4872         (FullTwistedBuildFactory): same
4874 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
4876         * contrib/fakechange.py: Add an errback when sending the fake 
4877         change, so we know it didn't work.
4879 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
4881         * buildbot/process/step_twisted.py: Delete *.pyc files before
4882         calling trial, so it doesn't catch any old .pyc files whose .py
4883         files have been moved or deleted.
4885         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4886         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4887         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4888         instead of ["twisted.test"], so that the end result is "trial -R
4889         twisted".
4891         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4892         regular expression to match filenames that should be ignored when
4893         changed. Also add a --revision parameter that specifies the
4894         revision to examine, which is useful for debugging.
4896 2004-06-25  Brian Warner  <warner@lothar.com>
4898         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4899         summary of warnings (like DeprecationWarnings), next to the
4900         "summary" file
4902 2004-05-13  Brian Warner  <warner@lothar.com>
4904         * docs/examples/twisted_master.cfg: enable the win32 builder, as
4905         we now have a w32 build slave courtesy of Mike Taylor.
4907         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4908         so broken. Fixed a race condition that tripped up interlocked
4909         builds and caused the status to be stuck at "Interlocked" forever.
4910         The twisted buildbot's one interlocked build just so happened to
4911         never hit this case until recently (the feeding builds both pass
4912         before the interlocked build is attempted.. usually it has to wait
4913         a while).
4914         (Builder._pong_failed): fix method signature
4916         * setup.py: bump to 0.4.3+ while between releases
4918 2004-04-30  Brian Warner  <warner@lothar.com>
4920         * setup.py (version): Releasing buildbot-0.4.3
4922 2004-04-30  Brian Warner  <warner@lothar.com>
4924         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
4926         * README: update for 0.4.3 release
4928         * NEWS: update for 0.4.3 release
4930         * buildbot/master.py (BuildMaster.__getstate__): make sure
4931         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4933         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4934         .trial as a class attribute, for upgrade from 0.4.2
4936         * buildbot/changes/changes.py (Change.links): add .links for
4937         upgrade from 0.4.2
4939         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4940         .textWatchers and .htmlWatchers at save time, since they are both
4941         volatile, should allow smooth 0.4.2 upgrade
4943         * buildbot/process/step.py (CVS.finishStatus): catch failed
4944         CVS/SVN commands so we can make the status box red
4946 2004-04-29  Brian Warner  <warner@lothar.com>
4948         * buildbot/changes/freshcvs.py
4949         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4950         code to do setFilter(), which tells the freshcvs daemon to not
4951         send us stuff that we're not interested in. I will uncomment it
4952         when a new version of CVSToys is available in which setFilter()
4953         actually works, and I get a chance to test it better.
4955         * docs/examples/twisted_master.cfg: start using a PBChangeSource
4957         * buildbot/master.py (Dispatcher): use a registration scheme
4958         instead of hardwired service names
4959         (BuildMaster): keep track of the Dispatcher to support
4960         registration
4962         * buildbot/changes/changes.py (ChangeMaster): create a distinct
4963         PBChangeSource class instead of having it be an undocumented
4964         internal feature of the ChangeMaster. Split out the code into a
4965         new file.
4966         * buildbot/changes/pb.py (PBChangeSource): same
4967         * buildbot/test/test_changes.py: a few tests for PBChangeSource
4969         * docs/{factories|sources|steps}.xhtml: document some pieces
4971         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4972         using FCMaildirSource
4973         (f23osx): update OS-X builder to use python2.3, since the slave
4974         was updated to Panther (10.3.3)
4976 2004-03-21  Brian Warner  <warner@lothar.com>
4978         * buildbot/process/process_twisted.py: factor out doCheckout, change
4979         to use SVN instead of CVS
4981         * buildbot/process/base.py (BasicBuildFactory): refactor to make
4982         an SVN subclass easier
4983         (BasicSVN): subclass which uses Subversion instead of CVS
4985 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
4987         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
4988         of /bin/sh on win32
4989         (CVSCommand.cvsComplete): don't assume chdir worked on win32
4991 2004-02-25  Brian Warner  <warner@lothar.com>
4993         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
4994         is now either a list (which is passed to spawnProcess directly) or
4995         a string (which gets passed to /bin/sh -c). This removes the useSH
4996         flag and the ArgslistCommand class. Also send status header at the
4997         start and end of each command, instead of having the master-side
4998         code do that.
4999         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5000         -r'. Update to use list-based arguments.
5001         (SVNFetch): use list-based arguments, use ['dir'] argument to
5002         simplify code.
5003         * buildbot/test/test_steps.py (Commands): match changes
5005         * buildbot/process/step.py (InternalShellCommand.words): handle
5006         command lists
5007         (SVN): inherit from CVS, cleanup
5009         * buildbot/status/event.py (Logfile.content): render in HTML, with
5010         stderr in red and headers (like the name of the command we're
5011         about to run) in blue. Add link to a second URL (url + "?text=1")
5012         to get just stdout/stderr in text/plain without markup. There is
5013         still a problem with .entries=None causing a crash, it seems to occur
5014         when the logfile is read before it is finished.
5016         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5017         timeout to the keepalives, and use it to explicitly do a
5018         loseConnection instead of waiting for TCP to notice the loss. This
5019         ought to clear up the silent-lossage problem.
5020         (unsafeTracebacks): pass exception tracebacks back to the master,
5021         makes it much easier to debug problems
5023 2004-02-23  Brian Warner  <warner@lothar.com>
5025         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5026         the whole command to /bin/sh instead of execve [Johan Dahlin]
5027         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5028         '-r HEAD' [Johan Dahlin]
5029         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5031         * buildbot/changes/changes.py (Change): add links= argument, add
5032         asHTML method [Johan Dahlin]. Modified to make a bit more
5033         XHTMLish. Still not sure how to best use links= .
5035         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
5036         Change.asHTML to display the change, not asText
5038         * buildbot/status/html.py (StatusResourceBuilder): web button to
5039         ping slave
5041         * buildbot/test/test_run.py: test to actually start a buildmaster
5042         and poke at it
5044         * MANIFEST.in: bring back accidentally-dropped test helper files
5046         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5047         that require cvstoys if it is not installed
5049         * buildbot/process/step_twisted.py (RunUnitTests): allow other
5050         values of "bin/trial" [Dave Peticolas]
5051         (RunUnitTests.finishStatus): say "no tests run" instead of "0
5052         tests passed" when we didn't happen to run any tests
5054         * buildbot/process/step.py (Compile): use haltOnFailure instead of
5055         flunkOnFailure [Johan Dahlin]
5057         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5058         multiple instances of the same Step class by suffixing "_2", etc,
5059         to the name until it is unique. This name needs to be unique
5060         because it is used as a key in the dictionary that tracks build
5061         progress.
5062         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5063         add test for it
5065         * buildbot/process/base.py (Builder.ping): add "ping slave" command
5067 2004-01-14  Brian Warner  <warner@lothar.com>
5069         * buildbot/status/words.py (IrcStatusBot): when we leave or get
5070         kicked from a channel, log it
5072         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5073         something over whatever IRC channels the buildmaster is currently
5074         connected to. Added to try and track down a problem in which the
5075         master thinks it is still connected but the IRCd doesn't see it. I
5076         used a styles.Versioned this time, so hopefully users won't have
5077         to rebuild their .tap files this time.
5078         * contrib/debug.glade: add a "Poke IRC" button
5079         * contrib/debugclient.py: same
5081         * setup.py: bump to 0.4.2+ while between releases
5083 2004-01-08  Brian Warner  <warner@lothar.com>
5085         * setup.py (version): Releasing buildbot-0.4.2
5087 2004-01-08  Brian Warner  <warner@lothar.com>
5089         * NEWS: update for 0.4.2 release
5091         * README: document how to run the tests, now that they all pass
5093         * buildbot/changes/maildir.py (Maildir.poll): minor comment
5095         * buildbot/process/step.py (CVS): add a global_options= argument,
5096         which lets you set CVS global options for the command like "-r"
5097         for read-only checkout, or "-R" to avoid writing in the
5098         repository.
5099         * buildbot/slavecommand.py (CVSCommand): same
5101         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5102         testing easier (it is turned off when testing, to avoid the
5103         leftover timer)
5105         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5106         to make it easier to test: break generateStepID() out to a
5107         separate function, only update statusbag if it exists.
5108         (ShellCommands): create useful text for dict-based commands too.
5110         * test/*, buildbot/test/*: move unit tests under the buildbot/
5111         directory
5112         * setup.py (packages): install buildbot.test too
5114         * buildbot/test/test_slavecommand.py: fix it, tests pass now
5115         * buildbot/test/test_steps.py: fix it, tests pass now
5117 2004-01-06  Brian Warner  <warner@lothar.com>
5119         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5120         freshcvs mail uses a slightly different syntax for new
5121         directories. Update parser to handle either.
5122         * test/test_mailparse.py (Test1.testMsg9): test for same
5124 2003-12-21  Brian Warner  <warner@lothar.com>
5126         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5127         'warnOnWarnings' so that lintian errors mark the build orange
5129 2003-12-17  Brian Warner  <warner@lothar.com>
5131         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5132         messages emitted by Bonsai, contributed by Stephen Davis.
5134         * test/*: moved all tests to use trial instead of unittest. Some
5135         still fail (test_steps, test_slavecommand, and test_process).
5137         * setup.py (version): bump to 0.4.1+ while between releases
5139 2003-12-09  Brian Warner  <warner@lothar.com>
5141         * setup.py (version): Releasing buildbot-0.4.1
5143 2003-12-09  Brian Warner  <warner@lothar.com>
5145         * NEWS: update for 0.4.1 release
5147         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5148         freebsd builder code a little bit
5150         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5151         don't try to compare attributes of different classes
5152         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5153         (MaildirSource.messageReceived): fix Change delivery
5155         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5156         into the config file's namespace before loading it, like the
5157         documentation claims it does
5158         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5159         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5160         daemon comes back online
5162 2003-12-08  Brian Warner  <warner@lothar.com>
5164         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5165         so the example will work with online=0 as well
5167         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5168         fix the __implements__ line
5170         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5171         class a twisted.application.service.Service, use startService to
5172         get it moving.
5174         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5175         directory fd instead of simple open(). I'm sure this used to work,
5176         but the current version of python refuses to open directories with
5177         open().
5179 2003-12-05  Brian Warner  <warner@lothar.com>
5181         * setup.py (version): bump to 0.4.0+ while between releases
5183 2003-12-05  Brian Warner  <warner@lothar.com>
5185         * setup.py (version): Releasing buildbot-0.4.0
5187 2003-12-05  Brian Warner  <warner@lothar.com>
5189         * docs/examples/glib_master.cfg: replace old sample scripts with
5190         new-style config files
5191         * MANIFEST.in: include .cfg files in distribution tarball
5193         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5194         implement a dummy method to avoid the exception that occurs when
5195         freshcvs sends this to us.
5197         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5198         removed the method, as it broke reconnection. Apparently
5199         stopFactory is called each time the connection attempt fails. Must
5200         rethink this.
5201         (ReconnectingPBClientFactory.__getstate__): squash the _callID
5202         attribute before serialization, since without stopFactory the
5203         reconnect timer may still be active and they aren't serializable.
5205         * test/test_mailparse.py (ParseTest): test with 'self' argument
5207         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5208         argument, as these "functions" are invoked like methods from class
5209         attributes and therefore always get an instance as the first
5210         argument.
5212         * buildbot/changes/maildir.py (Maildir.start): fix error in error
5213         message: thanks to Stephen Davis for the catch
5215 2003-12-04  Brian Warner  <warner@lothar.com>
5217         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5218         twisted's standard ReconnectingClientFactory. Handles both oldcred
5219         and newcred connections. Also has a bug-workaround for
5220         ReconnectingClientFactory serializing its connector when it
5221         shouldn't.
5223         * buildbot/bot.py (BotFactory): rewrite connection layer with new
5224         pbutil. Replace makeApp stuff with proper newcred/mktap
5225         makeService(). Don't serialize Ephemerals on shutdown.
5227         * buildbot/changes/changes.py (ChangeMaster): make it a
5228         MultiService and add the sources as children, to get startService
5229         and stopService for free. This also gets rid of the .running flag.
5231         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5232         new pbutil, turn into a TCPClient at the same time (to get
5233         startService for free). Two variants exist: FreshCVSSourceOldcred
5234         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5235         yet, but when it does, we'll be ready).
5236         (FreshCVSSource.notify): handle paths which are empty after the
5237         prefix is stripped. This only happens when the top-level (prefix)
5238         directory is added, at the very beginning of a Repository's life.
5240         * buildbot/clients/base.py: use new pbutil, clean up startup code.
5241         Now the only reconnecting code is in the factory where it belongs.
5242         (Builder.unsubscribe): unregister the disconnect callback when we
5243         delete the builder on command from the master (i.e. when the
5244         buildmaster is reconfigured and that builder goes away). This
5245         fixes a multiple-delete exception when the status client is shut
5246         down afterwards.
5247         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5248         base Client. 
5250         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5251         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5253 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
5255         * contrib/run_maxq.py: Accept a testdir as an argument rather than
5256         a list of globs (ugh). The testdir will be searched for files
5257         named *.tests and run the tests in the order specified in each of
5258         those files. This allows for "dependancies" between tests to be
5259         codified.
5261         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5262         argument to pass to run_maxq.py, instead of a glob.
5264 2003-10-17  Brian Warner  <warner@lothar.com>
5266         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5267         files that live in the sandbox
5269 2003-10-15  Brian Warner  <warner@lothar.com>
5271         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5272         spelling error in "docs" count-warnings output
5273         (HLint.start): stupid thinko meant .xhtml files were ignored
5275         * docs/examples/twisted_master.cfg (reactors): disable cReactor
5276         tests now that cReactor is banished to the sandbox
5278 2003-10-10  Brian Warner  <warner@lothar.com>
5280         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5281         scheme: now .xhtml are sources and .html are generated
5283 2003-10-08  Brian Warner  <warner@lothar.com>
5285         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5286         we were ignoring the 'randomly' parameter.
5288 2003-10-01  Brian Warner  <warner@lothar.com>
5290         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5291         posix, to kill sub-children of aborted slavecommands.
5293         * buildbot/status/builder.py: rename Builder to BuilderStatus.
5294         Clean up initialization: lastBuildStatus remains None until the
5295         first build has been completed.
5297         * buildbot/status/html.py (WaterfallStatusResource.body): handle
5298         None as a lastBuildStatus
5299         * buildbot/clients/gtkPanes.py: same
5301         * buildbot/status/client.py (StatusClientService): keep
5302         BuilderStatus objects in self.statusbags . These objects now live
5303         here in the StatusClientService and are referenced by the Builder
5304         object, rather than the other way around.
5305         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5306         * buildbot/process/base.py (Builder): same
5307         * test/test_config.py (ConfigTest.testBuilders): same
5309         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5310         an existing builder, leave the statusbag alone. This will preserve the
5311         event history.
5313         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5314         hook. This will probably go away in favor of a class in upcoming
5315         Twisted versions.
5317         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5318         serviceName from newcred FreshCVSNotifiee setup
5320 2003-09-29  Brian Warner  <warner@lothar.com>
5322         * buildbot/process/process_twisted.py: switch to new reactor
5323         abbreviations
5324         * docs/examples/twisted_master.cfg: same
5326         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5328         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5329         botmaster reference instead of the oldapp service lookup
5331         * buildbot/master.py (BuildMaster.__init__): give the
5332         StatusClientService a reference to the botmaster to make it easier to
5333         force builds
5335 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5337         * buildbot/status/html.py (Box.td): escape hreffy things so you
5338         can have spaces in things like builder names
5339         (StatusResourceBuilder.body)
5340         (WaterfallStatusResource.body)
5341         (WaterfallStatusResource.body0): same
5343 2003-09-25  Brian Warner  <warner@lothar.com>
5345         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5346         rearrange the builder list when adding or removing builders: keep
5347         them in the order the user requested.
5348         * test/test_config.py (ConfigTest.testBuilders): verify it
5350         * contrib/debug.glade: give the debug window a name
5352         * buildbot/process/base.py (Builder.buildTimerFired): builders can
5353         now wait on multiple interlocks. Fix code relating to that.
5354         (Builder.checkInterlocks): same
5355         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5357         * buildbot/master.py (BuildMaster.loadConfig): move from
5358         deprecated pb.BrokerFactory to new pb.PBServerFactory
5359         * test/test_config.py (ConfigTest.testWebPathname): same
5361         * docs/examples/twisted_master.cfg: fix interlock declaration
5363         * buildbot/master.py (BotMaster.addInterlock): move code to attach
5364         Interlocks to their Builders into interlock.py .
5365         (BuildMaster.loadConfig_Interlocks): fix interlock handling
5367         * test/test_config.py (ConfigTest.testInterlocks): validate
5368         interlock handling
5370         * buildbot/process/base.py (Builder.__init__): better comments
5371         * buildbot/process/interlock.py (Interlock.__repr__): same
5372         (Interlock.deactivate): add .active flag, move the code that
5373         attaches/detaches builders into the Interlock
5375 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5377         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5378         tests using the new run_maxq.py script, and reporting failures by
5379         parsing its output.
5381         * contrib/run_maxq.py: Hacky little script for running a set of maxq
5382         tests, reporting their success or failure in a buildbot-friendly 
5383         manner.
5385 2003-09-24  Brian Warner  <warner@lothar.com>
5387         * docs/examples/twisted_master.cfg: example of a new-style config
5388         file. This lives in the buildmaster base directory as
5389         "master.cfg".
5391         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5392         button to make the master re-read its config file
5394         * buildbot/master.py (BuildMaster.loadConfig): new code to load
5395         buildmaster configuration from a file. This file can be re-read
5396         later, and the buildmaster will update itself to match the new
5397         desired configuration. Also use new Twisted Application class.
5398         * test/Makefile, test/test_config.py: unit tests for same
5400         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5401         FreshCVSSources comparable, to support reload.
5402         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5404         * buildbot/process/base.py (Builder): make them comparable, make
5405         Interlocks easier to attach, to support reload. Handle
5406         re-attachment of remote slaves.
5407         * buildbot/process/interlock.py (Interlock): same
5409         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5410         Twisted's new Application class. Requires Twisted >= 1.0.8 .
5411         buildmaster taps are now constructed with mktap.
5412         * buildbot/status/client.py (StatusClientService): same
5414         * buildbot/status/words.py: move to new Services, add support to
5415         connect to multiple networks, add reload support, allow nickname
5416         to be configured on a per-network basis
5418 2003-09-20  Brian Warner  <warner@lothar.com>
5420         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5421         the freebsd builder, now that the machine has been upgraded and no
5422         longer has python2.2
5424         * setup.py (version): bump to 0.3.5+ while between releases
5426 2003-09-19  Brian Warner  <warner@lothar.com>
5428         * setup.py (version): Releasing buildbot-0.3.5
5430 2003-09-19  Brian Warner  <warner@lothar.com>
5432         * NEWS: add post-0.3.4 notes
5434         * README (REQUIREMENTS): note twisted-1.0.7 requirement
5436         * MANIFEST.in: add contrib/*
5438         * docs/examples/twisted_master.py (twisted_app): all build slaves must
5439         use a remote root now: cvs.twistedmatrix.com
5441         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5442         to newcred
5443         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5444         compatibility with old servers
5445         (FreshCVSSource.start): and provide a way to use it
5446         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5448         * docs/examples/twisted_master.py (twisted_app): update to new
5449         makeApp interface.
5450         (twisted_app): listen on new ~buildbot socket
5451         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5453         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5454         to reduce cvs bandwidth (update instead of full checkout)
5456 2003-09-11  Brian Warner  <warner@lothar.com>
5458         * contrib/fakechange.py: demo how to connect to the changemaster
5459         port. You can use this technique to submit changes to the
5460         buildmaster from source control systems that offer a hook to run a
5461         script when changes are committed.
5463         * contrib/debugclient.py: tool to connect to the debug port. You
5464         can use it to force builds, submit fake changes, and wiggle the
5465         builder state
5467         * buildbot/master.py: the Big NewCred Reorganization. Use a single
5468         'Dispatcher' realm to handle all the different kinds of
5469         connections and Perspectives: buildslaves, the changemaster port,
5470         the debug port, and the status client port. NewCredPerspectives
5471         now have .attached/.detached methods called with the remote 'mind'
5472         reference, much like old perspectives did. All the pb.Services
5473         turned into ordinary app.ApplicationServices .
5474         (DebugService): went away, DebugPerspectives are now created
5475         directly by the Dispatcher.
5476         (makeApp): changed interface a little bit
5478         * buildbot/changes/changes.py: newcred
5479         * buildbot/status/client.py: newcred
5481         * buildbot/clients/base.py: newcred client side changes
5482         * buildbot/bot.py: ditto
5484         * docs/examples/glib_master.py: handle new makeApp() interface
5485         * docs/examples/twisted_master.py: ditto
5487         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5488         base newcred Perspectives on. This should go away once Twisted
5489         itself provides something sensible.
5492 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
5494         * contrib/svn_buildbot.py: A program that you can call from your
5495         SVNREPO/hooks/post-commit file that will notify a BuildBot master
5496         when a change in an SVN repository has happened. See the top of
5497         the file for some minimal usage info.
5499 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5501         * buildbot/slavecommand.py (ArglistCommand): Add new
5502         ArglistCommand that takes an argument list rather than a string as
5503         a parameter. Using a st.split() for argv is very bad.
5505         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5506         update to a particular revision rather than always checking out
5507         (still not very smart about it, there may be cases where the
5508         checkout becomes inconsistent).
5510 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5512         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5513         SVN fetch support. It can checkout (not update!) a specified
5514         revision from a specified repository to a specified directory.
5516         * buildbot/status/progress.py (Expectations.update): Fix an
5517         obvious bug (apparently created by the change described in the
5518         previous ChangeLog message) by moving a check to *after* the
5519         variable it checks is defined.
5522 2003-09-08  Brian Warner  <warner@lothar.com>
5524         * buildbot/status/progress.py (Expectations.update): hack to catch
5525         an exception TTimo sees: sometimes the update() method seems to
5526         get called before the step has actually finished, so the .stopTime
5527         is not set, so no totalTime() is available and we average None
5528         with the previous value. Catch this and just don't update the
5529         metrics, and emit a log message.
5531 2003-08-24  Brian Warner  <warner@lothar.com>
5533         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5534         parameter to set copydir='original' in CVS commands.
5536         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5538         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5539         which tells the command to maintain a separate original-source CVS
5540         workspace. For each build, this workspace will be updated, then
5541         the tree copied into a new workdir. This reduces CVS bandwidth
5542         (from a full checkout to a mere update) while doubling the local
5543         disk usage (to keep two copies of the tree).
5545 2003-08-21  Brian Warner  <warner@lothar.com>
5547         * buildbot/status/event.py (Logfile.addEntry): if the master web
5548         server dies while we're serving a page, request.write raises
5549         pb.DeadReferenceError . Catch this and treat it like a
5550         notifyFinish event by dropping the request.
5552 2003-08-18  Brian Warner  <warner@lothar.com>
5554         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5555         (instead of blowing up) if a force-build command is given without
5556         a reason field
5558         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5559         don't blow up if there aren't yet any Changes in the list
5561 2003-08-02  Brian Warner  <warner@lothar.com>
5563         * buildbot/bot.py (updateApplication): don't set the .tap name,
5564         since we shouldn't assume we own the whole .tap file
5566         * buildbot/bb_tap.py (updateApplication): clean up code, detect
5567         'mktap buildbot' (without a subcommand) better
5569 2003-07-29  Brian Warner  <warner@lothar.com>
5571         * buildbot/status/words.py
5572         (IrcStatusFactory.clientConnectionLost): when we lose the
5573         connection to the IRC server, schedule a reconnection attempt.
5575         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5576         use shutil.rmtree instead of forking off an "rm -rf" command.
5577         rmtree may take a while and will block until it finishes, so we
5578         use "rm -rf" if available.
5580         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5581         freebsd buildslave badly
5583         * setup.py (version): bump to 0.3.4+ while between releases
5585 2003-07-28  Brian Warner  <warner@lothar.com>
5587         * setup.py (version): Releasing buildbot-0.3.4
5589 2003-07-28  Brian Warner  <warner@lothar.com>
5591         * NEWS: update in preparation for release
5593         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5594         process.signalProcess instead of os.kill, to improve w32
5595         portability
5597         * docs/examples/twisted_master.py (twisted_app): turn off
5598         win32eventreactor: the tests hang the buildslave badly
5600         * buildbot/process/base.py (Build.buildFinished): update ETA even on
5601         failed builds, since usually the failures are consistent
5603         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5604         add compileOpts/compileOpts2 to reactors build
5606         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5607         (twisted_app): use both default and win32eventreactor on w32 build.
5608         Use both default and kqreactor on freebsd build.
5610         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5611         add compileOpts2, which is put after the build_ext argument. w32
5612         needs "-c mingw32" here.
5614         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5615         touch .acqpath, it goes away in recent Twisted releases
5617         * docs/examples/twisted_master.py (twisted_app): use "python" for
5618         the w32 buildslave, not "python2.2"
5620         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5621         the directory exists.. should hush an exception under w32
5623         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5624         ProcessTerminated -provided values for signal and exitCode rather
5625         than parsing the unix status code directly. This should remove one
5626         more roadblock for a w32-hosted buildslave.
5628         * test/test_mailparse.py: add test cases for Syncmail parser
5630         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5631         temporary compatibility import. Note! Start importing
5632         FCMaildirSource from changes.mail instead of changes.freshcvsmail
5634         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5636 2003-07-27  Brian Warner  <warner@lothar.com>
5638         * NEWS: started adding new features
5640         * buildbot/changes/mail.py: start work on Syncmail parser, move
5641         mail sources into their own file
5643         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5644         as implementing IChangeSource
5645         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5647         * buildbot/interfaces.py: define the IChangeSource interface
5649 2003-07-26  Brian Warner  <warner@lothar.com>
5651         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5653 2003-06-25  Brian Warner  <warner@lothar.com>
5655         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5656         seconds display
5658 2003-06-17  Brian Warner  <warner@lothar.com>
5660         * buildbot/status/words.py: clean up method usage to avoid error
5661         in silly IRC command
5662         (IrcStatusBot.emit_status): round off seconds display
5664         * buildbot/process/base.py (Build): delete the timer when saving
5665         to the .tap file, and restore it (if it should still be running)
5666         upon restore. This should fix the "next build in -34 seconds"
5667         messages that result when the master is restarted while builds are
5668         sitting in the .waiting slot. If the time for the build has
5669         already passed, start it very soon (in 1 second).
5671         * buildbot/status/words.py: more silly commands
5673         * README (REQUIREMENTS): add URLs to all required software
5675         * buildbot/status/words.py ('last'): mention results of, and time
5676         since last build
5678 2003-05-28  Brian Warner  <warner@lothar.com>
5680         * buildbot/status/words.py: add 'last' command
5681         (IrcStatusBot.emit_status): add current-small text to 'status' output
5683         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5684         (twisted_app): remove spaces from OS-X builder name
5686         * buildbot/master.py (makeApp): add knob to turn on IRC bot
5687         * buildbot/status/words.py: IRC bot should actually be useful now
5689 2003-05-23  Brian Warner  <warner@lothar.com>
5691         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5692         "slave information" from $(slavedir)/info/* . These files are
5693         maintained by the slave administrator, and describe the
5694         machine/environment that is hosting the slave. Information from
5695         them is put into the "Builder" HTML page. Still need to establish
5696         a set of well-known filenames and meanings for this data: at the
5697         moment, *all* info/* files are sent to the master, but only
5698         'admin' and 'host' are used on that end.
5699         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5700         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
5701         * buildbot/master.py (BotPerspective.got_info):  ditto
5703 2003-05-22  Brian Warner  <warner@lothar.com>
5705         * setup.py (version): bump version to 0.3.3+ while between releases
5707 2003-05-21  Brian Warner  <warner@lothar.com>
5709         * setup.py: Releasing buildbot-0.3.3
5711 2003-05-21  Brian Warner  <warner@lothar.com>
5713         * NEWS: 0.3.3 news items
5715         * README: describe --keepalive and life behind a NAT box
5717         * buildbot/bot.py (Bot.connected): implement application-level
5718         keepalives to deal with NAT timeouts, turn them on with
5719         --keepalive option or when SO_KEEPALIVE doesn't work.
5721         * buildbot/master.py (BotPerspective): accept keepalives silently
5723         * buildbot/process/base.py (Build.buildException): CopiedFailures
5724         don't carry as much information as local ones, so don't try to
5725         create a big HTMLized version of them.
5727         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5728         log file when step fails due to an exception, such as when the slave
5729         becomes unreachable
5731         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5732         --testmodule argument instead of grepping for test-case-name tags
5733         ourselves. Remove FindUnitTests code.
5734         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5736         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5738 2003-05-16  Brian Warner  <warner@lothar.com>
5740         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5741         argument to allow things like CFLAGS=-O0 to be passed without relying
5742         upon /bin/sh processing on the slave.
5744         * buildbot/process/step.py (InternalShellCommand.start): send
5745         'env' dict to slave
5746         * buildbot/slavecommand.py (ShellCommand.start): create argv with
5747         'split' instead of letting /bin/sh do it. This should also remove
5748         the need for /bin/sh on the buildslave, making it more likely to
5749         work with win32.
5751         * buildbot/status/html.py: html-escape text in blamelist.
5752         Add "force build" button to the Builder page.
5754         * buildbot/process/step_twisted.py (countFailedTests): look at
5755         last 1000 characters for status line, as import errors can put it
5756         before the -200 point.
5758 2003-05-15  Brian Warner  <warner@lothar.com>
5760         * docs/examples/twisted_master.py: use clobber=0 for remote builds
5762         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5763         make 'clobber' a parameter, so it is possible to have builds which
5764         do full tests but do a cvs update instead of hammering the CVS
5765         server with a full checkout each build
5767         * buildbot/process/step.py (InternalShellCommand): bump default
5768         timeout to 20 minutes
5770         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5771         the master to trigger a build. Run it via manhole.
5773         * buildbot/master.py (BotPerspective.perspective_forceBuild):
5774         allow slaves to trigger any build that they host, to make life
5775         easier for slave admins who are testing out new build processes
5777         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5778         don't flunk cReactor or qtreactor on failure, since they fail alot
5779         these days. Do warnOnFailure instead.
5781         * buildbot/process/base.py: change Builder.buildable from a list
5782         into a single slot. When we don't have a slave, new builds (once
5783         they make it past the timeout) are now merged into an existing
5784         buildable one instead of being queued. With this change, a slave
5785         which has been away for a while doesn't get pounded with all the
5786         builds it missed, but instead just does a single build.
5788 2003-05-07  Brian Warner  <warner@lothar.com>
5790         * setup.py (version): bump version to 0.3.2+ while between releases
5792 2003-05-07  Brian Warner  <warner@lothar.com>
5794         * setup.py: Releasing buildbot-0.3.2
5796 2003-05-07  Brian Warner  <warner@lothar.com>
5798         * setup.py: fix major packaging error: include subdirectories!
5799         
5800         * NEWS: add changes since last release
5802         * README (REQUIREMENTS): update twisted/python dependencies
5804         * buildbot/status/builder.py (Builder.startBuild): change
5805         BuildProcess API: now they should call startBuild/finishBuild
5806         instead of pushing firstEvent / setLastBuildStatus. Moving towards
5807         keeping a list of builds in the statusbag, to support other kinds of
5808         status delivery.
5809         (Builder.addClient): send current-activity-small to new clients
5810         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5811         new API
5813         * buildbot/status/client.py: drop RemoteReferences at shutdown
5815         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5817         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5818         more debug messages for remote status client
5820         * buildbot/process/step.py (InternalBuildStep.stepComplete)
5821         (.stepFailed): only fire the Deferred once, even if both
5822         stepComplete and stepFailed are called. I think this can happen if
5823         an exception occurs at a weird time.
5825         * buildbot/status/words.py: work-in-progress: IRC status delivery
5827 2003-05-05  Brian Warner  <warner@lothar.com>
5829         * docs/examples/twisted_master.py (twisted_app): hush internal
5830         python2.3 distutils deprecation warnings
5831         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5832         add compileOpts= argument which inserts extra args before the
5833         "setup.py build_ext" command. This can be used to give -Wignore
5834         warnings, to hush some internal python-2.3 deprecation messages.
5836         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5837         the ['twisted.test'] default test case to make it easier to change
5838         in subclasses
5840         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5841         * buildbot/clients/gtkPanes.py: ditto
5843         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5844         arg to collapse RunUnitTestsRandomly into RunUnitTests
5845         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5846         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5848         * buildbot/status/html.py (StatusResource): shuffle Resources
5849         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5850         would serve the waterfall display, but the internal links were
5851         only valid on the trailing-slash version. The correct behavior is
5852         for the non-slashed one to serve a Redirect to the slashed one.
5853         This only shows up when the buildbot page is hanging off another
5854         server, like a Twisted-Web distributed server.
5856         * buildbot/status/event.py (Event, RemoteEvent): make Events
5857         pb.Cacheable, with RemoteEvent as the cached version. This removes
5858         a lot of explicit send-an-update code.
5859         * buildbot/status/builder.py (Builder): remove send-update code
5860         * buildbot/status/client.py (ClientBuilder): remove send-update
5861         code, and log errors that occur during callRemote (mostly to catch
5862         InsecureJelly exceptions)
5864         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5865         run Lore with the same python used in the rest of the build
5867         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5869         * buildbot/process/step_twisted.py (HLint): accept 'python'
5870         argument. Catch rc!=0 and mark the step as failed. This marks the
5871         build orange ("has warnings").
5872         (RunUnitTestsJelly): move out to step_twisted2.py
5874         * buildbot/util.py (ignoreStaleRefs): add utility function
5876         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5877         don't fake ETA object, it's too hard to get right
5879 2003-05-02  Brian Warner  <warner@lothar.com>
5881         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5883 2003-05-01  Brian Warner  <warner@lothar.com>
5885         * buildbot/status/html.py (StatusResource.body): oops, I was
5886         missing a <tr>, causing the waterfall page to be misrendered in
5887         everything except Galeon.
5889 2003-04-29  Brian Warner  <warner@lothar.com>
5891         * docs/examples/twisted_master.py: make debuild use python-2.2
5892         explicitly, now that Twisted stopped supporting 2.1
5894         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5895         handle tuple results too. I keep forgetting this, which suggests
5896         it needs to be rethought.
5898         * setup.py (setup): bump version to 0.3.1+ while between releases
5899         
5900 2003-04-29  Brian Warner  <warner@lothar.com>
5902         * setup.py: Releasing buildbot-0.3.1
5904 2003-04-29  Brian Warner  <warner@lothar.com>
5906         * README (SUPPORT): add plea to send questions to the mailing list
5908         * NEWS, MANIFEST.in: add description of recent changes
5910         * docs/examples/twisted_master.py: add the code used to create the
5911         Twisted buildmaster, with passwords and such removed out to a
5912         separate file.
5914         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5915         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5916         buildmasters to not require CVSToys be installed.
5917         * README, docs/examples/glib_master: update to match the change
5919         * buildbot/clients/base.py, buildbot/bot.py,
5920         buildbot/changes/changes.py, buildbot/pbutil.py: copy
5921         ReconnectingPB from CVSToys distribution to remove CVSToys
5922         dependency for build slaves and status clients. Buildmasters which
5923         use FreshCVSSources still require cvstoys be installed, of course.
5925 2003-04-25  Brian Warner  <warner@lothar.com>
5927         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5928         runTestsRandomly arg to turn on trial -z
5930         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5931         experimental code to use trial's machine-parseable output to get
5932         more detailed test results. Still has some major issues.
5933         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5934         in random sequence
5936         * buildbot/status/builder.py (Builder.setCurrentBuild):
5937         anticipating moving build history into statusbag, not used yet
5939         * buildbot/status/tests.py: code to centralize test results,
5940         doesn't work quite yet
5942         * buildbot/status/event.py (Event): use hasattr("setName") instead
5943         of isinstance for now.. need better long-term solution
5945         * buildbot/status/html.py: Remove old imports
5947 2003-04-24  Brian Warner  <warner@lothar.com>
5949         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5950         ignore changes under doc/fun/ and sandbox/
5952         * buildbot/process/step_twisted.py: update pushEvent and friends.
5954         * buildbot/status/html.py (Box.td): replace event.buildername with
5955         event.parent.getSwappableName(). Needs more thought.
5957         * buildbot/status/builder.py (Builder): Replace pushEvent and
5958         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5959         Tell events they are being pruned with event.delete().
5961         * buildbot/process/base.py (Build): Remove Builder status-handling
5962         methods. s/pushEvent/setCurrentActivity/.
5964         * buildbot/process/step.py (BuildStep): clean up status delivery.
5965         Gouse builder.statusbag methods instead of intermediate builder
5966         methods. s/updateLastEvent/updateCurrentActivity/.
5967         s/finalizeLastEvent/finishCurrentActivity/. Use
5968         addFileToCurrentActivity for summaryFunction.
5970         * buildbot/status/event.py (Logfile): put data in a Swappable when
5971         .finish is called.
5972         (Event): add more setter methods. Remove .buildername, use .parent
5973         and getSwappableName instead (needs more thought).
5975         * buildbot/util.py (Swappable):
5976         * test/test_swap.py: don't bother setting filename at __init__
5977         time, do it later. Change setFilename args to take parent first,
5978         since it provides the most significant part of the filename.
5980 2003-04-23  Brian Warner  <warner@lothar.com>
5982         * buildbot/status/event.py (Logfile.addEntry): append to previous
5983         entry, if possible
5985         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
5986         anticipating Swappable
5987         (InternalShellCommand.remoteUpdate): split out various log-adding
5988         methods so subclasses can snarf stdout separately
5990         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
5991         in anticipation of Swappable build logs
5992         (Builder.testsFinished): anticipating TestResults, still disabled
5994         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
5995         last 100 events
5997         * buildbot/status/event.py (Logfile): add (disabled) support for
5998         Swappable, not ready for use yet
6000         * buildbot/util.py (Swappable): object which is swapped out to
6001         disk after some period of no use.
6002         * test/test_swap.py: test buildbot.utils.Swappable
6004 2003-04-14  Brian Warner  <warner@lothar.com>
6006         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6007         periodic-build timer. Set the .periodicBuildTime on a builder
6008         instance to some number of seconds to activate it.
6010         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6012         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6013         a way that survives result tuples
6015 2003-04-12  Brian Warner  <warner@lothar.com>
6017         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6018         return a dict instead of a tuple: allow summarizers to provide
6019         multiple summaries if they want
6020         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6021         (debuildSummarizer): summarize lintian warnings/errors
6023 2003-04-10  Brian Warner  <warner@lothar.com>
6025         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6027 2003-04-09  Brian Warner  <warner@lothar.com>
6029         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6030         empty summaries: happens when the tests fail so hard they don't emit
6031         a parseable summary line.
6033         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6034         Allow summaryFunction to return None to indicate no summary should
6035         be added.
6037         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6038         writing to stale HTTP requests: notice when they disconnect and
6039         remove the request from the list. Also add CacheToFile from
6040         moshez, will be used later.
6042 2003-04-08  Brian Warner  <warner@lothar.com>
6044         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6045         should be an int, not a list of strings
6047         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6048         if we weren't actually connected
6050         * buildbot/process/step_twisted.py (trialTextSummarizer): function
6051         to show the tail end of the trial text output
6053         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6054         hook to summarize the results of a ShellCommand
6056 2003-04-07  Brian Warner  <warner@lothar.com>
6058         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6059         twisted test suite code into a single class.
6060         * buildbot/process/process_twisted.py: same
6062 2003-04-04  Brian Warner  <warner@lothar.com>
6064         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6066         * README (SLAVE): document use of mktap to create slave .tap file
6067         (REQUIREMENTS): describe dependencies
6069         * buildbot/bb_tap.py, buildbot/plugins.tml:
6070         * buildbot/bot.py (updateApplication): Add mktap support for creating
6071         buildslave .tap files
6073 2003-03-28  Brian Warner  <warner@lothar.com>
6075         * buildbot/process/step.py (InternalShellCommand.finished): handle
6076         new tuple result values (fix embarrasing bug that appeared during
6077         PyCon demo)
6079 2003-03-27  Brian Warner  <warner@lothar.com>
6081         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6082         -making program
6084 2003-03-25  Brian Warner  <warner@lothar.com>
6086         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6087         to overall build status
6088         * buildbot/clients/base.py (Builder): improve event printing
6089         * buildbot/process/base.py (BasicBuildFactory): use specific steps
6090         instead of generic ShellCommand
6091         (Build): Add .stopBuild, use it when slave is detached
6093         * buildbot/process/step.py (Configure,Test): give the steps their
6094         own names and status strings
6096         * buildbot/status/html.py (StatusResource): add "show" argument,
6097         lets you limit the set of Builders being displayed.
6099 2003-03-20  Brian Warner  <warner@lothar.com>
6101         * buildbot/process/basic.py: removed
6103 2003-03-19  Brian Warner  <warner@lothar.com>
6105         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6106         turn off process-docs by default
6108         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6109         when displaying build information without anything in allBuilds[]
6111         * buildbot/bot.py (makeApp): really take password from sys.argv
6113 2003-03-18  Brian Warner  <warner@lothar.com>
6115         * buildbot/bot.py (buildApp): take password from sys.argv
6117         * README: replace with more useful text
6119         * setup.py: add a real one
6120         * MANIFEST.in, .cvsignore: more distutils packaging stuff
6121         
6122         * docs/PyCon-2003/: added sources for PyCon paper.
6124         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6125         now Build objects control the process and Builder only handles
6126         slave stuff and distribution of changes/status. A new BuildFactory
6127         class creates Build objects on demand.
6129         Created ConfigurableBuild which takes a list of steps to run. This
6130         makes it a lot easier to set up a new kind of build and moves us
6131         closer to being able to configure a build from a web page.
6133         * buildbot/process/step_twisted.py, process_twisted.py: move to
6134         new model. A lot of code went away.
6135         
6136         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6137         send lots of empty progress messages to the client.
6139         * buildbot/master.py (makeApp): enforce builder-name uniqueness
6141 2003-02-20  Brian Warner  <warner@lothar.com>
6143         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6145         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6146         Twisted bug that prevented non-pty processes from working just got
6147         fixed, and the bug that leaks ptys is still being investigated.
6149         * buildbot/process/step.py (CVS): send timeout arg to slave
6151         * buildbot/clients/gtkPanes.py: add connection-status row, handle
6152         builders coming and going
6153         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6154         from CVSToys, handle lost-buildmaster
6156         * buildbot/status/client.py (StatusClientService.removeBuilder):
6157         Clean up status client protocol: send builders (with references)
6158         as they are created, rather than sending a list and requiring the
6159         client to figure out which ones are new.
6160         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6161         attempts to force a build on an unknown builder
6163 2003-02-19  Brian Warner  <warner@lothar.com>
6165         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6166         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6167         Twisted stops leaking them.
6168         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6169         builder goes to an idle state.
6171         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6172         I figure out why CVS commands hang without them, and/or I fix the
6173         hung-command timeout
6175 2003-02-16  Brian Warner  <warner@lothar.com>
6177         * buildbot/process/step_twisted.py: bin/hlint went away, replace
6178         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6179         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6180         GenerateDocs now that they are prefixed with WARNING:.
6182         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6183         use manual href target instead of request.childLink
6185         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6186         display every second, but update the ETA every 5 seconds (or
6187         whenever) as remote_progress messages arrive.
6190 2003-02-12  Brian Warner  <warner@lothar.com>
6192         * *: import current sources from home CVS repository
6193         
6195 # Local Variables:
6196 # add-log-time-format: add-log-iso8601-time-string
6197 # End: