fix an oversight in remote_getCurrentBuilds
[buildbot.git] / ChangeLog
blob258e2fc98694a0453a38fd936a534808291c979e
1 2006-06-08  Brian Warner  <warner@allmydata.com>
3         * buildbot/status/client.py
4         (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
5         changing this from getCurrentBuild() to getCurrentBuilds(). Each
6         build needs to be IRemote'd separately, rather than IRemote'ing
7         the whole list at once. I can't wait until newpb's serialization
8         adapters make this unnecessary.
10 2006-06-06  Brian Warner  <warner@lothar.com>
12         * buildbot/process/step.py (WithProperties): make this inherit
13         from ComparableMixin, so that reloading an unchanged config file
14         doesn't cause us to spuriously reload any Builders which use them.
15         * buildbot/test/test_config.py (ConfigTest.testWithProperties):
16         add a test for it
18 2006-06-03  Brian Warner  <warner@lothar.com>
20         * contrib/windows/{setup.py, buildbot_service.py}: add support for
21         running py2exe on windows, contributed by Mark Hammond. Addresses
22         SF#1401121, but I think we still need to include
23         buildbot/scripts/sample.cfg
24         * setup.py: include buildbot_service.py as a script under windows
25         * buildbot/status/html.py: when sys.frozen (i.e. we're running in
26         a py2exe application), get the icon/css datafiles from a different
27         place than usual.
29         * buildbot/status/mail.py (MailNotifier.buildMessage): don't
30         double-escape the build URL. Thanks to Olivier Bonnet for the
31         patch. Fixes SF#1452801.
33 2006-06-02  Brian Warner  <warner@lothar.com>
35         * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
36         first six columns of 'svnlook' output, not just the first column,
37         since property changes appear in the other five. Thanks to Olivier
38         Bonnet for the patch. Fixes SF#1398174.
40 2006-06-01  Brian Warner  <warner@lothar.com>
42         * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
43         the fake build, so that title= has something to be set to
45         * buildbot/status/html.py (BuildBox.getBox): set the 'title='
46         attribute of the "Build #NN" link in the yellow start-the-build
47         box to the build's reason. This means that you get a little
48         tooltip explaining why the build was done when you hover over the
49         yellow box. Thanks to Zandr Milewski for the suggestion.
51         * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
52         (Box.setETA): handle ETA=None (by stopping the timer)
53         (Box.update): make the [soon] text less different than the usual
54         text, so the rest of the text doesn't flop around so much. It
55         would be awfully nice to figure out how to center this stuff.
56         (ThreeRowBuilder.stepETAUpdate): more debugging printouts
58         * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
59         by default, so that any ShellCommand which fails marks the overall
60         build as a failure. I should have done this from the beginning.
61         Add flunkOnFailure=False to the arguments if you want to turn off
62         this behavior.
64 2006-05-30  Brian Warner  <warner@lothar.com>
66         * buildbot/clients/gtkPanes.py: add a third row: now it shows
67         last-build/current-build/current-step. Show what step is currently
68         running. Show ETA for both the overall build and the current step.
69         Update GTK calls to modern non-deprecated forms. There's still a
70         lot of dead code and debug noise to remove.
72         * buildbot/process/step_twisted.py (Trial): set the step name, so it
73         shows up properly in status displays
75 2006-05-28  Brian Warner  <warner@lothar.com>
77         * buildbot/test/test_properties.py (Run.testInterpolate): on the
78         build we use to verify that WithProperties works:
80         ** set flunkOnFailure=True so that build failures get noticed
81         ** set workdir='.' so that the build succeeds, otherwise it is trying
82             to touch 'build/something', and 'build/' doesn't exist because
83             usually that's created by a Source step
84         ** set timeout=10, because Twisted-1.3.0 has a race condition that
85             this test somehow triggers, in which the 'touch' process becomes
86             a zombie and we wait for th etimeout before giving up on it.
88         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
89         to log the Build results and step logs to the twisted log.
90         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
91         what went wrong if a build was expected to succeed but didn't.
93         * buildbot/process/step_twisted.py (Trial): set the default
94         trialMode to '--reporter=bwverbose', which specifies verbose
95         black-and-white text. Back in twisted-1.3/2.0 days we had to use
96         '-to', but those are completely missing in modern Twisteds.
98         * buildbot/scripts/sample.cfg: make the sample Manhole config use
99         a localhost-only port, to encourage better security
101         * docs/buildbot.texinfo (Change Sources): mention
102         darcs_buildbot.py
104         * .darcs-boring: add a Darcs boringfile
106         * README (REQUIREMENTS): stop claiming compatibility with
107         Twisted-1.3.0
109         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
110         sender
112 2006-05-27  Brian Warner  <warner@lothar.com>
114         * buildbot/__init__.py: bump to 0.7.3+ while between releases
115         * docs/buildbot.texinfo: same
117 2006-05-23  Brian Warner  <warner@lothar.com>
119         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
120         * docs/buildbot.texinfo: set version to match
121         * NEWS: update for 0.7.3
123         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
124         give a quick mapping from VC system to possible ChangeSources
125         (Build Properties): add 'buildername'
127         * buildbot/process/base.py (Build.setupStatus): oops, set
128         'buildername' and 'buildnumber' properties
129         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
130         test them
132 2006-05-22  Brian Warner  <warner@lothar.com>
134         * docs/buildbot.texinfo (Build Properties): explain the syntax of
135         property interpolation better
137         * README (INSTALLATION): remove old '-v' argument from recommended
138         trial command line
140         * docs/buildbot.texinfo (ShellCommand): add docs for description=
141         and descriptionDone= arguments. Thanks to Niklaus Giger for the
142         patch. SF#1475494.
144         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
145         'svnversion' instead of grepping the output of 'svn info', much
146         simpler and avoids CR/LF problems on windows. Thanks to Olivier
147         Bonnet for the suggestion.
148         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
149         require the WC_PATH argument, so run 'svnversion .' instead.
151         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
152         aren't supposed to have 'self' in their argument list
154 2006-05-21  Brian Warner  <warner@lothar.com>
156         * buildbot/process/step.py (ShellCommand.start): make
157         testInterpolate pass. I was passing the uninterpolated command to
158         the RemoteShellCommand constructor
159         (ShellCommand._interpolateProperties): oops, handle non-list
160         commands (i.e. strings with multiple words separated by spaces in
161         them) properly, instead of forgetting about them.
163         * buildbot/test/test_properties.py (Run.testInterpolate): new test
164         to actually try to use build properties in a real build. This test
165         fails.
166         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
167         to start and evaluate builds
169         * buildbot/test/test__versions.py: add a pseudo-test to record
170         what version of Twisted/Python/Buildbot are running. This should
171         show up at the beginning of _trial_tmp/test.log, and exists to help
172         debug other problems.
174         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
175         a filename to be served as 'robots.txt' to discourage web spiders.
176         Adapted from a patch by Tobi Vollebregt, thanks!
177         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
178         (Waterfall.test_waterfall): tweak the way that filenames are put
179         into the config file, to accomodate windows pathnames better.
181         * docs/buildbot.texinfo (HTML Waterfall): document it
183         * buildbot/process/process_twisted.py
184         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
185         changed the build process. The new setup.py no longer takes the
186         'all' argument.
187         (FullTwistedBuildFactory.__init__): same
188         (TwistedReactorsBuildFactory.__init__): same
190         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
191         be placed in the [hooks] section of the central repository (the
192         one that everybody pushes changes to).
194 2006-05-20  Brian Warner  <warner@lothar.com>
196         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
197         .darcs-context file, use binary mode. I think this was causing a
198         Darcs failure under windows.
200 2006-05-19  Brian Warner  <warner@lothar.com>
202         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
203         use a timezone string of +0000 and gmtime, since this timestamp is
204         sent to a buildmaster and %z is broken.
206         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
207         string and localtime, since this timestamp will only be consumed
208         locally, and %z is broken.
210         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
211         gmtime, since this timestamp is returned to the buildmaster, and
212         %z is broken.
214 2006-05-18  Brian Warner  <warner@lothar.com>
216         * NEWS: update in preparation for next release
218         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
219         setup-repository and do-we-have-the-vc-tools code into a separate
220         "helper" class, which sticks around in a single module-level
221         object. This seems more likely to continue to work in the future
222         than having it hide in the TestCase and hope that TestCases stick
223         around for a long time.
225         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
226         addremove' has been deprecated in recent versions of mercurial, so
227         use 'hg add' instead
229 2006-05-07  Brian Warner  <warner@lothar.com>
231         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
232         operating under windows, move the file before opening it, since
233         you can't rename a file that somebody has open.
235         * buildbot/process/base.py (Build.setupBuild): if something goes
236         wrong while creating a Step, log the name and arguments, since the
237         error message when you get the number of arguments wrong is really
238         opaque.
240 2006-05-06  Brian Warner  <warner@lothar.com>
242         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
243         bugs in twisted-specific code not covered by my unit tests, this
244         time use 'cmd' argument instead of self.cmd
246         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
247         fix stupid braino: either use startwith or find()==0, not both.
248         (TwistedReactorsBuildFactory.__init__): another dumb typo
250         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
251         mark this test as TODO under windows, since process-killing seems
252         dodgy there. We'll come back to this later and try to fix it
253         properly.
255         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
256         and don't include a timezone
257         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
258         This should avoid the windows-with-verbose-timezone-name problem
259         altogether.
260         (Patch.testPatch): add a test which runs 'patch' with less
261         overhead than the full VCBase.do_patch sequence, to try to isolate
262         a windows test failure. This one uses slave.commands.ShellCommand
263         and 'patch', but none of the VC code.
265         * buildbot/slave/commands.py (getCommand): use which() to find the
266         executables for 'cvs', 'svn', etc. This ought to help under
267         windows.
269         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
270         working directory before starting. If an earlier test failed, the
271         leftover directory would mistakenly flunk a later test.
272         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
273         Make sure that we use the right commandlines if which("tla") picks
274         up "tla.exe" (as it does under windows).
275         (TlaSupport.do_get): factor out this tla-vs-baz difference
276         (TlaSupport.vc_create): more tla-vs-baz differences
278         * buildbot/test/test_slavecommand.py
279         (ShellBase.testShellMissingCommand): stop trying to assert
280         anything about the error message: different shells on different
281         OSes with different languages makes it hard, and it really isn't
282         that interesting of a thing to test anyway.
284         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
285         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
286         "Panther"), because it has a bug which flunks a couple tests in
287         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
288         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
289         able to test that yet.
291 2006-04-30  Brian Warner  <warner@lothar.com>
293         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
294         make sure child commands emit messages in english, so our regexps
295         will match. Thanks to Nikaus Giger for identifying the problems.
296         (VCBase._do_vctest_export_1): mode="export" is not responsible
297         for setting the "got_revision" property, since in many cases it is
298         not convenient to determine.
299         (SVNSupport.capable): when running 'svn --version' to check for
300         ra_local, we want error messages in english
301         * buildbot/test/test_slavecommand.py 
302         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
303         to emit the error message in english
305         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
306         the environment with $LC_ALL="C" so that Commands which need to
307         parse the output of their child processes can obtain it in
308         english.
309         (SVN.parseGotRevision): call "svn info" afterwards instead of
310         watching the output of the "svn update" or "svn checkout".
311         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
312         (Arch.parseGotRevision): same
313         (Bazaar.parseGotRevision): same
314         (Mercurial.parseGotRevision): same
316         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
317         $LC_ALL="C" when running commands under 'buildbot try', too
319         * buildbot/test/__init__.py: remove the global os.environ()
320         setting, instead we do it just for the tests that run commands and
321         need to parse their output.
323         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
324         remove the overly-short .timeout on this test, because non-DNotify
325         platforms must fall back to polling which happens at 10 second
326         intervals, so a 5 second timeout would never succeed.
328 2006-04-24  Brian Warner  <warner@lothar.com>
330         * docs/buildbot.texinfo (Installing the code): update trial
331         invocation, SF#1469116 by Niklaus Giger.
332         (Attributes of Changes): updated branch-name examples to be
333         a bit more realistic, SF#1475240 by Stephen Davis.
335         * contrib/windows/buildbot2.bat: utility wrapper for windows
336         developers, contributed by Nick Trout (after a year of neglect..
337         sorry!). SF#1194231.
339         * buildbot/test/test_vc.py (*.capable): store the actual VC
340         binary's pathname in VCS[vcname], so it can be retrieved later
341         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
342         strip out non-numeric timezone information, specifically the funky
343         German string that his system produced that confuses CVS.
344         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
345         allow Darcs tests to work on windows
346         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
347         procutils.which() everywhere, to allow tryclient to work under
348         windows. Also from Niklaus Giger, SF#1463394.
350         * buildbot/twcompat.py (which): move the replacement for a missing
351         twisted.python.procutils.which from test_vc.py to here, so it can
352         be used in other places too (specifically tryclient.py)
354 2006-04-23  Brian Warner  <warner@lothar.com>
356         * buildbot/status/html.py (StatusResourceBuild.body): replace the
357         bare buildbotURL/projectName line with a proper DIV, along with a
358         CSS class of "title", from Stefan Seefeld (SF#1461675).
359         (WaterfallStatusResource.body0): remove the redundant 'table'
360         class from the table
361         (WaterfallStatusResource.body): same. Also add class="LastBuild"
362         to the top-row TR, and class="Activity" to the second-row TR,
363         rather than putting them in the individual TD nodes.
365         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
366         'got_revision' build property for all VC systems that implement
367         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
369         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
370         to determine which revision we actually obtained
371         (CVS.parseGotRevision): implement this for CVS, which just means
372         to grab a timestamp. Not ideal, and it depends upon the buildslave
373         having a clock that is reasonably well syncronized with the server,
374         but it's better than nothing.
375         (SVN.parseGotRevision): implement it for SVN, which is accurate
376         (Darcs.parseGotRevision): same
377         (Arch.parseGotRevision): same
378         (Bazaar.parseGotRevision): same
379         (Mercurial.parseGotRevision): same
381         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
382         keep a record of all non-stdout/stderr/header/rc status updates,
383         for the benefit of RemoteCommands that send other useful things,
384         like got_revision
385         (Source.commandComplete): put any 'got_revision' status values
386         into a build property of the same name
389         * buildbot/process/step_twisted.py (Trial): update to deal with
390         new ShellCommand refactoring
392         * docs/buildbot.texinfo (Build Properties): document new feature
393         that allows BuildSteps to get/set Build-wide properties like which
394         revision was requested and/or checked out.
396         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
397         * buildbot/status/builder.py (BuildStatus.getProperty): implement
398         it. Note that this bumps the persistenceVersion of the saved Build
399         object, so add the necessary upgrade-old-version logic to include
400         an empty properties dict.
402         * buildbot/process/base.py (Build.setProperty): implement it
403         (Build.getProperty): same
404         (Build.startBuild): change build startup to set 'branch',
405         'revision', and 'slavename' properties at the right time
407         * buildbot/process/step.py (BuildStep.__init__): change setup to
408         require 'build' argument in a better way
409         (LoggingBuildStep): split ShellCommand into two pieces, for better
410         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
411         a single RemoteCommand that sends stdout/stderr status text. It
412         also provides the usual commandComplete / createSummary /
413         evaluateCommand / getText methods to be overridden...
414         (ShellCommand): .. whereas ShellCommand is specifically for
415         running RemoteShellCommands. Other shell-like BuildSteps (like
416         Source) can inherit from LoggingBuildStep instead of ShellCommand
417         (WithProperties): marker class to do build-property interpolation
418         (Source): inherit from LoggingBuildStep instead of ShellCommand
419         (RemoteDummy): same
421         * buildbot/test/test_properties.py: test new functionality
423 2006-04-21  Brian Warner  <warner@lothar.com>
425         * buildbot/test/test_vc.py: rename testBranch to
426         testCheckoutBranch to keep the tests in about the right
427         alphabetical order
429 2006-04-18  Brian Warner  <warner@lothar.com>
431         * docs/buildbot.texinfo (PBListener): improve cross-references
432         between PBListener and 'buildbot statusgui', thanks to John Pye
433         for the suggestion.
435 2006-04-17  Brian Warner  <warner@lothar.com>
437         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
438         running under Twisted-1.3.0, otherwise skipped tests are reported
439         as errors.
441         * all: use isinstance() instead of 'type(x) is foo', suggested by
442         Neal Norwitz
444         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
445         oops, fix a brain-fade from the other week, when making the
446         addStep changes. I changed all the __init__ upcalls to use the
447         wrong superclass name.
448         (FullTwistedBuildFactory.__init__): same
449         (TwistedDebsBuildFactory.__init__): same
450         (TwistedReactorsBuildFactory.__init__): same
451         (TwistedBuild.isFileImportant): use .startswith for clarity,
452         thanks to Neal Norwitz for the suggestions.
454         * contrib/viewcvspoll.py: script to poll a viewcvs database for
455         changes, then deliver them over PB to a remote buildmaster.
457         * contrib/svnpoller.py: added script by John Pye to poll a remote
458         SVN repository (by running 'svn log') from a cronjob, and run
459         'buildbot sendchange' to deliver the changes to a remote
460         buildmaster.
461         * contrib/svn_watcher.py: added script by Niklaus Giger (a
462         modification of svnpoller.py), same purpose, but this one loops
463         internally (rather than expecting to run from a cronjob) and works
464         under windows.
465         * contrib/README.txt: same
467 2006-04-11  Brian Warner  <warner@lothar.com>
469         * all: fix a number of incorrect names and missing imports, thanks
470         to Anthony Baxter for the patch.
471         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
472         remove unused buggy method.
473         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
474         comes from shutil, not "shutils"
475         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
476         (Arch.checkSlaveVersion): same
477         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
478         some disabled code
479         * buildbot/process/step_twisted2.py: add some missing imports
480         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
481         this code used to live in twisted.internet.defer
483 2006-04-10  Brian Warner  <warner@lothar.com>
485         * buildbot/process/step.py (Mercurial): add Mercurial support
486         * buildbot/slave/commands.py (Mercurial): same
487         * buildbot/scripts/tryclient.py (MercurialExtractor): same
488         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
489         not yet tested, but 'try' support *is* covered
490         * docs/buildbot.texinfo (Mercurial): document it
492         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
493         some debugging messages (turned off)
494         * buildbot/test/test_vc.py: improve debug messages
496 2006-04-07  Brian Warner  <warner@lothar.com>
498         * buildbot/test/test_vc.py (which): define our own which() in case
499         we can't import twisted.python.procutils, because procutils doesn't
500         exist in Twisted-1.3
502         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
503         of SlaveLocks for performance tests
505         * docs/examples/twisted_master.cfg: update to match current usage
507         * buildbot/changes/p4poller.py (P4Source): add new arguments:
508         password, p4 binary, pollinterval, maximum history to check.
509         Patch from an anonymous sf.net contributor, SF#1219384.
510         * buildbot/process/step.py (P4Sync.__init__): add username,
511         password, and client arguments.
512         * buildbot/slave/commands.py (P4Sync): same
514 2006-04-05  Brian Warner  <warner@lothar.com>
516         * buildbot/process/factory.py (BuildFactory.addStep): new method
517         to add steps to a BuildFactory. Use it instead of f.steps.append,
518         and you can probably avoid using the s() convenience function.
519         Patch from Neal Norwitz, sf.net #1412605.
520         (other): update all factories to use addStep
521         * buildbot/process/process_twisted.py: update all factories to use
522         addStep.
524 2006-04-03  Brian Warner  <warner@lothar.com>
526         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
527         work under windows too. Adapted from a patch by Niklaus Giger,
528         addresses SF#1463399.
530         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
531         spawned commands emit parseable results in english and not some
532         other language. Patch from Niklaus Giger, SF#1463395.
534         * README (INSTALLATION): discourage users from running unit tests on
535         a "network drive", patch from Niklaus Giger, SF#1463394.
537 2006-03-22  Brian Warner  <warner@lothar.com>
539         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
540         function to turn a repository-relative pathname into a (branch,
541         branch-relative-filename) tuple. Change this function to handle
542         the branch naming policy used by your Subversion repository.
543         Thanks to AllMyData.com for sponsoring this work.
545 2006-03-16  Brian Warner  <warner@lothar.com>
547         * buildbot/scripts/sample.cfg: add python-mode declaration for
548         vim. Thanks to John Pye for the patch.
550         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
551         command line, mention the importance of running 'crontab' as the
552         buildmaster/buildslave user. Thanks to John Pye for the catch.
554 2006-03-13  Brian Warner  <warner@lothar.com>
556         * buildbot/status/words.py (IRC): add an optional password=
557         argument, which will be sent to Nickserv in an IDENTIFY message at
558         login, to claim the nickname. freenode requires this before the
559         bot can sent (or reply to) private messages. Thanks to Clement
560         Stenac for the patch.
561         * docs/buildbot.texinfo (IRC Bot): document it
563         * buildbot/status/builder.py (LogFile.merge): don't write chunks
564         larger than chunkSize. Fixes SF#1349253.
565         * buildbot/test/test_status.py (Log.testLargeSummary): test it
566         (Log.testConsumer): update to match new internal chunking behavior
568 2006-03-12  Brian Warner  <warner@lothar.com>
570         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
572         * buildbot/test/test_maildir.py (MaildirTest): rename the
573         'timeout' method, as it collides with trial's internals
575         * buildbot/scripts/runner.py: add 'buildbot restart' command
576         (stop): don't sys.exit() out of here, otherwise restart can't work
577         * docs/buildbot.texinfo (Shutdown): document it
579         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
580         * buildbot/status/html.py (Waterfall.__init__): same
581         * buildbot/process/builder.py (Builder.startBuild): same
582         * buildbot/process/base.py (BuildRequest): same
583         * buildbot/sourcestamp.py (SourceStamp): same
584         * buildbot/scheduler.py (Nightly): same
586         * buildbot/__init__.py (version): bump to 0.7.2+ while between
587         releases
588         * docs/buildbot.texinfo: same
590 2006-02-17  Brian Warner  <warner@lothar.com>
592         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
593         * docs/buildbot.texinfo: set version number to match
594         * NEWS: update for 0.7.2
596 2006-02-16  Brian Warner  <warner@lothar.com>
598         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
600 2006-02-09  Brian Warner  <warner@lothar.com>
602         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
603         add text to explain per-build branch parameters
604         * NEWS: mention --umask
606 2006-02-08  Brian Warner  <warner@lothar.com>
608         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
609         method
610         (SlaveOptions.optParameters): add --umask, to make it possible to
611         make buildslave-generated files (including build products) be
612         world-readable
613         (slaveTAC): same
614         * buildbot/slave/bot.py (BuildSlave.startService): same
616 2006-01-23  Brian Warner  <warner@lothar.com>
618         * buildbot/status/builder.py: urllib.quote() all URLs that include
619         Builder names, so that builders can include characters like '/'
620         and ' ' without completely breaking the resulting HTML. Thanks to
621         Kevin Turner for the patch.
622         * buildbot/status/html.py: same
623         * buildbot/test/test_web.py (GetURL.testBuild): match changes
625         * NEWS: update in preparation for upcoming release
627 2006-01-18  Brian Warner  <warner@lothar.com>
629         * docs/examples/twisted_master.cfg: update to match the Twisted
630         buildbot: remove python2.2, switch to exarkun's buildslaves,
631         disable the .deb builder until we figure out how to build twisted
632         .debs from SVN, add some ktrace debugging to the OS-X build
633         process and remove the qt build, remove threadless builders,
634         change freebsd builder to use landonf's buildslave.
636 2006-01-12  Brian Warner  <warner@lothar.com>
638         * buildbot/master.py (Manhole.__init__): let port= be a strports
639         specification string, but handle a regular int for backwards
640         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
641         used in master.cfg to limit connections to just the local host.
642         (BuildMaster.loadConfig): same for c['slavePortnum']
643         * buildbot/scheduler.py (Try_Userpass.__init__): same
644         * buildbot/status/client.py (PBListener.__init__): same
645         * buildbot/status/html.py (Waterfall.__init__): same, for both
646         http_port and distrib_port. Include backwards-compatibility checks
647         so distrib_port can be a filename string and still mean unix:/foo
648         * docs/buildbot.texinfo (Setting the slaveport): document it
649         (Debug options): same
650         (HTML Waterfall): same
651         (PBListener): same
652         (try): same
653         * buildbot/test/test_config.py (ConfigTest): test it
655         * buildbot/master.py (BuildMaster.loadConfig): wait for the
656         slaveport's disownServiceParent deferred to fire before opening
657         the new one. Fixes an annoying bug in the unit tests.
659 2006-01-03  Brian Warner  <warner@lothar.com>
661         * buildbot/master.py (BuildMaster): remove the .schedulers
662         attribute, replacing it with an allSchedulers() method that looks
663         for all IService children that implement IScheduler. Having only
664         one parent/child relationship means fewer opportunities for bugs.
665         (BuildMaster.allSchedulers): new method
666         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
667         also fix ugly bug that caused any config-file reload to
668         half-forget about the earlier Schedulers, causing an exception
669         when a Change arrived and was handed to a half-connected
670         Scheduler. The exception was in scheduler.py line 54ish:
671           self.parent.submitBuildSet(bs)
672           exceptions.AttributeError: 'NoneType' object has no attribute
673           'submitBuildSet'
674         (BuildMaster.addChange): update to use allSchedulers()
676         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
677         to work properly with twisted-1.3.0, where you must explicitly
678         include the __implements__ from parent classes
679         (BaseScheduler.__repr__): make it easier to distinguish distinct
680         instances
681         (BaseUpstreamScheduler.__implements__): same
683         * buildbot/status/builder.py (Status.getSchedulers): update to
684         use allSchedulers()
685         * buildbot/test/test_run.py (Run.testMaster): same
686         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
687         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
688         make sure Scheduler instances are left alone when an identical
689         config file is reloaded
690         (ConfigElements.testSchedulers): make sure Schedulers are properly
691         comparable
693         * Makefile (TRIALARGS): my local default Twisted version is now
694         2.1.0, update the trial arguments accordingly
696 2005-12-22  Brian Warner  <warner@lothar.com>
698         * docs/examples/twisted_master.cfg: merge changes from pyr: add
699         new win32 builders
701         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
702         addChange in the parent class, although I suspect this should be
703         fixed better in the future.
705 2005-11-26  Brian Warner  <warner@lothar.com>
707         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
708         explode when branch==None, thanks to Kevin Turner for the catch
709         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
710         it
712         * buildbot/__init__.py (version): bump to 0.7.1+ while between
713         releases
714         * docs/buildbot.texinfo: same
716 2005-11-26  Brian Warner  <warner@lothar.com>
718         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
719         * docs/buildbot.texinfo: set version number to match
721 2005-11-26  Brian Warner  <warner@lothar.com>
723         * NEWS: update for 0.7.1
725         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
726         sure that unsubscribe works even if we never sent an ETA update.
727         Also, don't explode on duplicate unsubscribe.
728         (BuildStepStatus.addLog): make the convenience "return self"-added
729         watcher automatically unsubscribe when the Step finishes.
730         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
731         (BuildStatus.stepStarted): same auto-unsubscribe
732         (BuilderStatus.buildStarted): same auto-unsubscribe
734         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
735         auto-unsubscribe
736         (IStatusReceiver.stepStarted): same
737         (IStatusReceiver.logStarted): same
739         * buildbot/test/test_run.py (Status): move the Status test..
740         * buildbot/test/test_status.py (Subscription): .. to here
742 2005-11-25  Brian Warner  <warner@lothar.com>
744         * NEWS: more updates
746         * buildbot/locks.py: fix the problem in which loading a master.cfg
747         file that changes some Builders (but not all of them) can result
748         in having multiple copies of the same Lock. Now, the real Locks
749         are kept in a table inside the BotMaster, and the Builders/Steps
750         use "LockIDs", which are still instances of MasterLock and
751         SlaveLock. The real Locks are instances of the new RealMasterLock
752         and RealSlaveLock classes.
753         * buildbot/master.py (BotMaster.getLockByID): new method to
754         convert LockIDs into real Locks.
755         * buildbot/process/base.py (Build.startBuild): convert LockIDs
756         into real Locks before building
757         * buildbot/process/step.py (BuildStep.startStep): same
758         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
759         exercises the problem
762         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
763         what Schedulers are available
765         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
766         work by Dobes Vandermeer and hacked mercilessly by me. This offers
767         'cron'-style build scheduling at certain times of day, week,
768         month, or year.
769         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
771         * buildbot/scheduler.py (Scheduler): change fileIsImportant
772         handling: treat self.fileIsImportant more as an attribute that
773         contains a callable than as a method. If the attribute is None,
774         don't call it and assume all filenames are important. It is still
775         possible to provide a fileIsImportant method in a subclass,
776         however.
777         (AnyBranchScheduler): handle fileIsImportant=None, previously it
778         was broken
779         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
780         test using AnyBranchScheduler with fileIsImportant=None
782 2005-11-24  Brian Warner  <warner@lothar.com>
784         * buildbot/test/test_config.py (StartService): don't claim a fixed
785         port number, instead set slavePort=0 on the first pass, figure out
786         what port was allocated, then switch to a config file that uses
787         the allocated port.
789         * buildbot/master.py (BuildMaster.loadConfig): close the old
790         slaveport before opening the new one, because unit tests might
791         replace slavePort=0 with the same allocated portnumber, and if we
792         don't wait for the old port to close first, we get a "port already
793         in use" error. There is a tiny race condition here, but the only
794         threat is from other programs that bind (statically) to the same
795         port number we happened to be allocated, and only if those
796         programs use SO_REUSEADDR, and only if they get control in between
797         reactor turns.
799         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
801         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
802         deleted ChangeSources before adding any new ones
803         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
804         compare_attrs, to make sure that a config-file reload does not
805         unnecessarily replace an unmodified ChangeSource instance
806         * buildbot/test/test_config.py (ConfigTest.testSources): update
808         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
809         mean "don't build anything", and add a warning if it gets used
810         because it isn't actually useful.
812         * contrib/svn_buildbot.py: update example usage to match the port
813         number that gets used by the PBChangeSource
814         * buildbot/scripts/sample.cfg: add example of PBChangeSource
816 2005-11-22  Brian Warner  <warner@lothar.com>
818         * NEWS: start collecting items for next release
820         * buildbot/process/step.py (SVN.computeSourceRevision): assume
821         revisions are strings
822         (P4Sync.computeSourceRevision): same
824         * buildbot/status/html.py (StatusResourceBuild.body): add a link
825         to the Buildbot's overall status page
826         (StatusResourceBuilder.body): same
828 2005-11-15  Brian Warner  <warner@lothar.com>
830         * buildbot/master.py (BuildMaster.loadConfig): serialize the
831         config-file loading, specifically to make sure old StatusTargets
832         are finished shutting down before new ones start up (thus
833         resolving a bug in which changing the Waterfall object would fail
834         because both new and old instances were claiming the same
835         listening port). Also load new Schedulers after all the new
836         Builders are set up, in case they fire off a new build right away.
837         * buildbot/test/test_config.py (StartService): test it
839         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
840         the branch name to the mail body
842         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
843         Without it, a config-file reload fails to update an existing
844         PBChangeSource.
845         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
846         username/passwd to compare_attrs, for the same reason
847         * buildbot/status/html.py (Waterfall): add favicon to
848         compare_attrs, same reason
850 2005-11-05  Brian Warner  <warner@lothar.com>
852         * buildbot/scripts/tryclient.py (createJobfile): stringify the
853         baserev before stuffing it in the jobfile. This resolves problems
854         under SVN (and probably Arch) where revisions are expressed as
855         numbers. I'm inclined to use string-based revisions everywhere in
856         the future, but this fix should be safe for now. Thanks to Steven
857         Walter for the patch.
859         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
860         binary mode when opening pickle files, to make windows work
861         better. Thanks to Dobes Vandermeer for the catch.
862         * buildbot/status/builder.py (BuildStatus.saveYourself): same
863         (BuilderStatus.getBuildByNumber): same
864         (Status.builderAdded): same
865         * buildbot/master.py (BuildMaster.loadChanges): same
867         * buildbot/util.py (Swappable): delete unused leftover code
869         * buildbot/process/step.py (SVN): when building on a non-default
870         branch, add the word "[branch]" to the VC step's description, so
871         it is obvious that we're not building the usual stuff. Likewise,
872         when we are building a specific revision, add the text "rNNN" to
873         indicate what that revision number is. Thanks to Brad Hards and
874         Nathaniel Smith for the suggestion.
875         (Darcs.startVC): same
876         (Arch.startVC): same
877         (Bazaar.startVC): same
879         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
880         typo, caught by Mark Dillavou, closes SF#1216636.
882         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
883         about a test to add some day
885         * docs/examples/twisted_master.cfg: update: bot1 can now handle
886         the 'full-2.3' build, and the 'reactors' build is now run under
887         python-2.4 because the buildslave no longer has gtk/etc bindings
888         for earlier versions.
890 2005-11-03  Brian Warner  <warner@lothar.com>
892         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
893         method, takes an IBuildStatus and rebuilds it. It might make more
894         sense to add this to IBuildControl instead, but that instance goes
895         away completely once the build has finished, and resubmitting
896         builds can take place weeks later.
897         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
898         * buildbot/status/html.py (StatusResourceBuild): also stash an
899         IBuilderControl so we can use resubmitBuild.
900         (StatusResourceBuild.body): render "resubmit" button if we can.
901         Also add hrefs for each BuildStep
902         (StatusResourceBuild.rebuild): add action for "resubmit" button
903         (StatusResourceBuilder.getChild): give it an IBuilderControl
905         * buildbot/status/builder.py (Status.getURLForThing): change the
906         URL for BuildSteps to have a "step-" prefix, so the magic URLs
907         that live as targets of buttons like "stop" and "rebuild" can't
908         collide with them.
909         * buildbot/status/builder.py (Status.getURLForThing): same
910         * buildbot/status/html.py (StatusResourceBuild.getChild): same
911         (StepBox.getBox): same
912         * buildbot/test/test_web.py (GetURL): same
913         (Logfile): same
915         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
916         exclusivity checks after Source.__init__ upcall, so misspelled
917         arguments will be reported more usefully
918         (Darcs.__init__): same
920 2005-10-29  Brian Warner  <warner@lothar.com>
922         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
923         builder. Move the Try scheduler off to a separate port.
925 2005-10-27  Brian Warner  <warner@lothar.com>
927         * buildbot/clients/gtkPanes.py
928         (TwoRowClient.remote_builderRemoved): disappearing Builders used
929         to cause the app to crash, now they don't.
931         * buildbot/clients/debug.py: display the buildmaster's location
932         in the window's title bar
934 2005-10-26  Brian Warner  <warner@lothar.com>
936         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
937         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
938         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
940         * buildbot/status/html.py (td): put a single non-breaking space
941         inside otherwise empty <td> elements, as a workaround for buggy
942         browsers which would optimize them away (along with any associated
943         styles, like the kind that create the waterfall grid borders).
944         Patch from Frerich Raabe.
946         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
947         argv-list as an argument, defaulting to ["-to"], which is
948         appropriate for the Trial that comes with Twisted-2.1.0 and
949         earlier. The Trial in current Twisted SVN wants
950         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
951         defaults to an empty list.
952         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
953         match it, now that trialMode= is a list instead of a single string
955         * buildbot/__init__.py (version): bump to 0.7.0+ while between
956         releases
957         * docs/buildbot.texinfo: same
959 2005-10-24  Brian Warner  <warner@lothar.com>
961         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
962         * docs/buildbot.texinfo: set version number to match
964 2005-10-24  Brian Warner  <warner@lothar.com>
966         * README: update for 0.7.0
967         * NEWS: same
968         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
970         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
971         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
972         send the branch= argument unless the user really provided one, to
973         retain compatibility with older buildmasters that don't accept
974         that argument.
975         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
976         same
978         * docs/buildbot.texinfo: update lots of stuff
980         * buildbot/scripts/runner.py (sendchange): add a --branch argument
981         to the 'buildbot sendchange' command
982         * buildbot/clients/sendchange.py (Sender.send): same
983         * buildbot/changes/pb.py (ChangePerspective): same
984         * buildbot/test/test_changes.py (Sender.testSender): test it
986         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
987         'default_branch' argument names to 'baseURL' and 'defaultBranch',
988         for consistency with other BuildStep arguments that use camelCase.
989         Well, at least more of them use camelCase (like flunkOnWarnings)
990         than don't.. I wish I'd picked one style and stuck with it
991         earlier. Annoying, but it's best done before the release, since
992         these arguments didn't exist at all in 0.6.6 .
993         (Darcs): same
994         * buildbot/test/test_vc.py (SVN.testCheckout): same
995         (Darcs.testPatch): same
996         * docs/buildbot.texinfo (SVN): document the change
997         (Darcs): same, add some build-on-branch docs
998         * docs/examples/twisted_master.cfg: match change
1000         * buildbot/process/step.py (BuildStep): rename
1001         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1002         how it is normally used.
1003         * buildbot/test/test_steps.py (Version.checkCompare): same
1005         * buildbot/process/step.py (CVS.startVC): refuse to build
1006         update/copy -style builds on a non-default branch with an old
1007         buildslave (<=0.6.6) that doesn't know how to do it properly. The
1008         concern is that it will do a VC 'update' in an existing tree when
1009         it is supposed to be switching branches (and therefore clobbering
1010         the tree to do a full checkout), thus building the wrong source.
1011         This used to be a warning, but I think the confusion it is likely
1012         to cause warrants making it an error.
1013         (SVN.startVC): same, also make mode=export on old slaves an error
1014         (Darcs.startVC): same
1015         (Git.startVC): improve error message for non-Git-enabled slaves
1016         (Arch.checkSlaveVersion): same. continue to emit a warning when a
1017         specific revision is built on a slave that doesn't pay attention
1018         to args['revision'], because for slowly-changing trees it will
1019         probably do the right thing, and because we have no way to tell
1020         whether we're asking it to build the most recent version or not.
1021         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1023         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1024         that 'master' is in host:portnum format, to catch errors sooner
1026 2005-10-23  Brian Warner  <warner@lothar.com>
1028         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1029         when creating the list of warning messages, include the line
1030         immediately after each WARNING: line, since that's usually where
1031         the file and line number wind up.
1033         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1034         TryScheduler
1036         * NEWS: update
1038 2005-10-22  Brian Warner  <warner@lothar.com>
1040         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1041         patch from Brad Hards
1042         * buildbot/status/classic.css: same
1043         * buildbot/test/test_web.py (Waterfall): match changes
1045         * buildbot/test/test_steps.py (BuildStep.setUp): set
1046         nextBuildNumber so the test passes
1047         * buildbot/test/test_status.py (MyBuilder): same
1049         * buildbot/status/html.py (StatusResourceBuild.body): revision
1050         might be numeric, so stringify it before html-escapifying it
1051         (CurrentBox.getBox): add a "waiting" state, and show a countdown
1052         timer for the upcoming build
1053         * buildbot/status/classic.css: add background-color attributes for
1054         offline/waiting/building classes
1056         * buildbot/status/builder.py (BuildStatus): derive from
1057         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1058         the default (i.e. unknown) .slavename to "???" instead of None,
1059         since even unknown slavenames need to be printed eventually.
1060         (BuilderStatus): also derive from styles.Versioned . More
1061         importantly, determine .nextBuildNumber at creation/unpickling
1062         time by scanning the directory of saved BuildStatus instances and
1063         choosing one larger than the highest-numbered one found. This
1064         should fix the problem where random errors during upgrades cause
1065         the buildbot to forget about earlier builds. .nextBuildNumber is
1066         no longer stored in the pickle.
1067         (Status.builderAdded): if we can't unpickle the BuilderStatus,
1068         at least log the error. Also call Builder.determineNextBuildNumber
1069         once the basedir is set.
1071         * buildbot/master.py (BuildMaster.loadChanges): do
1072         styles.doUpgrade afterwards, in case I decide to make Changes
1073         derived from styles.Versioned some day and forget to make this
1074         change later.
1077         * buildbot/test/test_runner.py (Options.testForceOptions): skip
1078         when running under older pythons (<2.3) in which the shlex module
1079         doesn't have a 'split' function.
1081         * buildbot/process/step.py (ShellCommand.start): make
1082         errorMessages= be a list of strings to stuff in the log before the
1083         command actually starts. This makes it easier to flag multiple
1084         warning messages, e.g. when the Source steps have to deal with an
1085         old buildslave.
1086         (CVS.startVC): handle slaves that don't handle multiple branches
1087         by switching into 'clobber' mode
1088         (SVN.startVC): same. Also reject branches without base_url
1089         (Darcs.startVC): same. Also reject revision= in older slaves
1090         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1091         (Bazaar.startVC): same, and test for baz separately than for arch
1093         * buildbot/slave/commands.py (cvs_ver): document new features
1095         * buildbot/process/step.py (BuildStep.slaveVersion): document it
1096         (BuildStep.slaveVersionNewEnough): more useful utility method
1097         * buildbot/test/test_steps.py (Version): start testing it
1099         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1100         the 'force' command requires python2.3, for the shlex.split method
1102         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1103         since we don't use it anymore. The Twisted buildbot uses a
1104         PBChangeSource now.
1106 2005-10-21  Brian Warner  <warner@lothar.com>
1108         * buildbot/process/process_twisted.py: rework all BuildFactory
1109         classes to take a 'source' step as an argument, instead of
1110         building up the SVN instance in the factory.
1111         * docs/examples/twisted_master.cfg: enable build-on-branch by
1112         providing a base_url and default_branch
1114         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1115         control over --branch and --revision, not that they are always
1116         legal to provide
1117         * buildbot/status/html.py (StatusResourceBuilder.force): same
1118         (StatusResourceBuild.body): display SourceStamp components
1120         * buildbot/scripts/runner.py (ForceOptions): option parser for the
1121         IRC 'force' command, so it can be shared with an eventual
1122         command-line-tool 'buildbot force' mode.
1123         * buildbot/test/test_runner.py (Options.testForceOptions): test it
1125 2005-10-20  Brian Warner  <warner@lothar.com>
1127         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1129         * docs/examples/twisted_master.cfg: update to use Schedulers
1131         * buildbot/scripts/sample.cfg: update with Schedulers
1133         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1134         method specifically for use by HTML "force build" button and the
1135         IRC "force" command. Raises an immediate error if there are no
1136         slaves available.
1137         (IBuilderControl.requestBuild): make this just submit a build, not
1138         try to check for existing slaves or set up any when-finished
1139         Deferreds or anything.
1140         * buildbot/process/builder.py (BuilderControl): same
1141         * buildbot/status/html.py (StatusResourceBuilder.force): same
1142         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1143         * buildbot/test/test_slaves.py: same
1144         * buildbot/test/test_web.py: same
1146 2005-10-19  Brian Warner  <warner@lothar.com>
1148         * docs/examples/twisted_master.cfg: re-sync with reality: bring
1149         back python2.2 tests, turn off OS-X threadedselect-reactor tests
1151 2005-10-18  Brian Warner  <warner@lothar.com>
1153         * buildbot/status/html.py: provide 'status' argument to most
1154         StatusResourceFOO objects
1155         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1156         and Logfiles" section to make the Build page into a more-or-less
1157         comprehensive source of status information about the build
1159         * buildbot/status/mail.py (MailNotifier): include the Build's URL
1160         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1162 2005-10-17  Brian Warner  <warner@lothar.com>
1164         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1165         arguments to accomodate Twisted >=2.1.0 . I will have to figure
1166         out what to do about other projects: the correct options for
1167         recent Twisteds will not work for older ones.
1169 2005-10-15  Brian Warner  <warner@lothar.com>
1171         * buildbot/status/builder.py (Status.getURLForThing): add method
1172         to provide a URL for arbitrary IStatusFoo objects. The idea is to
1173         use this in email/IRC status clients to make them more useful, by
1174         providing the end user with hints on where to learn more about the
1175         object being reported on.
1176         * buildbot/test/test_web.py (GetURL): tests for it
1178 2005-10-14  Brian Warner  <warner@lothar.com>
1180         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1181         fix bug resulting from deferredResult changes
1183 2005-10-13  Brian Warner  <warner@lothar.com>
1185         * buildbot/test/test_changes.py: remove use of deferredResult
1186         * buildbot/test/test_config.py: same
1187         * buildbot/test/test_control.py: same
1188         * buildbot/test/test_status.py: same
1189         * buildbot/test/test_vc.py: this is the only remaining use, since
1190         it gets used at module level. This needs to be replaced by some
1191         sort of class-level run-once routine.
1193         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1195         * lots: implement multiple slaves per Builder, which means multiple
1196         current builds per Builder. Some highlights:
1197         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1198         of (state,currentBuilds) instead of (state,currentBuild)
1199         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1200         (IBuildStatus.getSlavename): new method, so you can tell which
1201         slave got used. This only gets set when the build completes.
1202         (IBuildRequestStatus.getBuilds): new method
1204         * buildbot/process/builder.py (SlaveBuilder): add a .state
1205         attribute to track things like ATTACHING and IDLE and BUILDING,
1206         instead of..
1207         (Builder): .. the .slaves attribute here, which has been turned
1208         into a simple list of available slaves. Added a separate
1209         attaching_slaves list to track ones that are not yet ready for
1210         builds.
1211         (Builder.fireTestEvent): put off the test-event callback for a
1212         reactor turn, to make tests a bit more consistent.
1213         (Ping): cleaned up the slaveping a bit, now it disconnects if the
1214         ping fails due to an exception. This needs work, I'm worried that
1215         a code error could lead to a constantly re-connecting slave.
1216         Especially since I'm trying to move to a distinct remote_ping
1217         method, separate from the remote_print that we currently use.
1218         (BuilderControl.requestBuild): return a convenience Deferred that
1219         provides an IBuildStatus when the build finishes.
1220         (BuilderControl.ping): ping all connected slaves, only return True
1221         if they all respond.
1223         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1224         reconnect when we shut down.
1226         * buildbot/status/builder.py: implement new methods, convert
1227         one-build-at-a-time methods to handle multiple builds
1228         * buildbot/status/*.py: do the same in all default status targets
1229         * buildbot/status/html.py: report the build's slavename in the
1230         per-Build page, report all buildslaves on the per-Builder page
1232         * buildbot/test/test_run.py: update/create tests
1233         * buildbot/test/test_slaves.py: same
1234         * buildbot/test/test_scheduler.py: remove stale test
1236         * docs/buildbot.texinfo: document the new builder-specification
1237         'slavenames' parameter
1239 2005-10-12  Brian Warner  <warner@lothar.com>
1241         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1242         report failure correctly, causing Dependent builds to run when
1243         they shouldn't have.
1244         * buildbot/status/builder.py (BuildSetStatus): same
1245         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1246         (Set.testSuccess): test the both-pass case too
1247         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1248         fix this test: it was ending too early, masking the failure before
1249         (Logger): specialized StatusReceiver to make sure the dependent
1250         builds aren't even started, much less completed.
1252 2005-10-07  Brian Warner  <warner@lothar.com>
1254         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1255         bot.SlaveBuilder being disowned in the middle of a build
1257         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1258         this inherit from StatusReceiver. Also upcall in __init__. This
1259         fixes the embarrasing crash when the new buildSetSubmitted method
1260         is invoked and Waterfall/etc don't implement their own.
1261         * buildbot/test/test_run.py: add a TODO note about a test to catch
1262         just this sort of thing.
1264         * buildbot/process/builder.py (Builder.attached): remove the
1265         already-attached warning, this situation is normal. Add some
1266         comments explaining it.
1268 2005-10-02  Brian Warner  <warner@lothar.com>
1270         * buildbot/changes/maildir.py (Maildir.start): Tolerate
1271         OverflowError when setting up dnotify, because some 64-bit systems
1272         have problems with signed-vs-unsigned constants and trip up on the
1273         DN_MULTISHOT flag. Patch from Brad Hards.
1275 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
1277         * buildbot/process/step.py (BuildStep, ShellCommand): Add
1278         progressMetrics, description, descriptionDone to the 'parms' list,
1279         and make use the 'parms' list from the implementation class
1280         instead of only BuildStep to initialize the parameters.  This
1281         allows buildbot.process.factory.s() to initialize all the parms,
1282         not just those defined in directly by BuildStep.
1284 2005-09-03  Brian Warner  <warner@lothar.com>
1286         * NEWS: start adding items for the next release
1288         * docs/examples/twisted_master.cfg: (sync with reality) turn off
1289         python2.2 tests, change 'Quick' builder to only use python2.3
1291 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
1293         * buildbot/status/html.py (StatusResourceBuilder.body): only show
1294         the "Ping Builder" button if the build control is available; the
1295         user sees an exception otherwise
1297         * docs/buildbot.texinfo (PBChangeSource): fix a typo
1299 2005-09-01  Brian Warner  <warner@lothar.com>
1301         * buildbot/interfaces.py (IBuilderStatus.getState): update
1302         signature, point out that 'build' can be None
1303         (IBuildStatus.getETA): point out ETA can be none
1305         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1306         being None
1307         * buildbot/status/words.py (IrcStatusBot.emit_status): same
1309 2005-08-31  Brian Warner  <warner@lothar.com>
1311         * buildbot/status/base.py (StatusReceiver.builderChangedState):
1312         update to match correct signature: removed 'eta' argument
1313         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1315 2005-08-30  Brian Warner  <warner@lothar.com>
1317         * buildbot/status/builder.py (LogFile): remove the assertion that
1318         blows up when you try to overwrite an existing logfile, instead
1319         just emit a warning. This case gets hit when the buildmaster is
1320         killed and doesn't get a chance to write out the serialized
1321         BuilderStatus object, so the .nextBuildNumber attribute gets out
1322         of date.
1324         * buildbot/scripts/runner.py (sendchange): add --revision_file to
1325         the 'buildbot sendchange' arguments, for the Darcs context file
1326         * docs/buildbot.texinfo (sendchange): document it
1328         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1329         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1330         (IStatus.getSchedulers): new method
1331         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1332         (Status.getSchedulers): implement
1333         * buildbot/process/builder.py (Builder): maintain
1334         BuilderStatus.pendingBuilds
1335         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1336         (TryBase.addChange): Try schedulers should ignore Changes
1338         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1339         for 'try' on CVS/SVN
1340         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1342         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1343         report status properly.
1344         (Try.createJob): implement unique buildset IDs
1346         * buildbot/status/client.py (StatusClientPerspective): add a
1347         perspective_getBuildSets method for the benefit of jobdir-style
1348         'try'.
1349         * docs/buildbot.texinfo (try): more docs
1350         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1351         new test case
1353 2005-08-18  Brian Warner  <warner@lothar.com>
1355         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1356         actually work. It's functional but still kind of clunky. Also, it
1357         only works with the pb-style.. needs to be made to work with the
1358         jobdir-style too.
1360         * buildbot/status/client.py (RemoteBuildSet): new class
1361         (RemoteBuildRequest): same
1362         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1363         object, not the internal BuildStatus object.
1364         (RemoteBuild.remote_subscribe): new method to subscribe to builds
1365         outside of the usual buildStarted() return value.
1366         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1368         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1369         (Try_Userpass_Perspective.perspective_try): return a remotely
1370         usable BuildSetStatus object
1372         * buildbot/interfaces.py (IBuildStatus): remove obsolete
1373         isStarted()/waitUntilStarted()
1375 2005-08-16  Brian Warner  <warner@lothar.com>
1377         * buildbot/status/builder.py: implement IBuildSetStatus and
1378         IBuildRequestStatus, wire them into place.
1379         * buildbot/buildset.py: same. Add ID, move wait-until-finished
1380         methods into the BuildSetStatus object.
1381         * buildbot/interfaces.py: same
1382         (IStatus.getBuildSets): new method to get pending BuildSets
1383         (IStatusReceiver.buildsetSubmitted): new method which hears about
1384         new BuildSets
1385         * buildbot/master.py (BuildMaster.submitBuildSet): same
1386         * buildbot/process/base.py (BuildRequest): same, replace
1387         waitUntilStarted with subscribe/unsubscribe
1388         * buildbot/process/builder.py (BuilderControl.forceBuild): use
1389         subscribe instead of waitUntilStarted
1390         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1391         for new method
1392         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1393         same
1394         * buildbot/test/test_buildreq.py: update for new code
1395         * buildbot/test/test_control.py (Force.testRequest): same
1398         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1399         for Darcs to not use the tempfile module, so it works under
1400         python-2.2 too. We really didn't need the full cleverness of that
1401         module, since the slave has exclusive control of its own builddir.
1403 2005-08-15  Brian Warner  <warner@lothar.com>
1405         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1406         for CVS trees. It doesn't work for non-trunk branches,
1407         unfortunately.
1408         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1409         branch test
1411         * Makefile: make it easier to test against python2.2
1413         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1414         tearDown2, so things like Arch can unregister archives as they're
1415         shutting down. The previous subclass-override-tearDown technique
1416         resulted in a nested maybeWait() and test failures under
1417         Twisted-1.3.0
1419         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1420         where we can (Arch), add a branch= argument to set the branch used
1421         when we can't
1422         (BazExtractor): extract the branch too
1423         (TlaExtractor): same
1424         * buildbot/scripts/runner.py (TryOptions): add --branch
1425         * docs/buildbot.texinfo (try): document --branch/try_branch
1427         * buildbot/slave/commands.py (Darcs): implement get-revision for
1428         Darcs, so that 'try' will work. This requires the tempfile module
1429         from python-2.3 .
1431         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1432         of revisions, branches, and 'try' in the process.
1434 2005-08-11  Brian Warner  <warner@lothar.com>
1436         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1437         this, it got broken at some point in the last few releases
1438         * buildbot/status/words.py (IrcBuildRequest): reply was broken
1439         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1440         specifically the removal of ETA information from the tuple
1442         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1443         warning message
1445         * docs/buildbot.texinfo (try): document both --builder and
1446         'try_builders' in .buildbot/options
1447         * buildbot/scripts/runner.py (TryOptions): add --builder,
1448         accumulate the values into opts['builders']
1449         * buildbot/scripts/tryclient.py (Try.__init__): set builders
1450         * buildbot/test/test_runner.py (Try): add some quick tests to make
1451         sure 'buildbot try --options' and .buildbot/options get parsed
1452         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1453         use --builder control
1455         * docs/buildbot.texinfo (try): add --port argument to PB style
1457         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1458         actual SourceStamp. Still need to extract a branch name, somehow.
1459         (Try): finish implementing the try client side, still need a UI
1460         for specifying which builders to use
1461         (Try.getopt): factor our options/config-file reading
1462         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1463         test it
1464         * buildbot/test/test_vc.py: match SourceStampExtractor change
1466         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1467         causes the twisted log to be sent to stderr
1469         * buildbot/scheduler.py (Try_Userpass): implement the PB style
1471 2005-08-10  Brian Warner  <warner@lothar.com>
1473         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1474         style is 90% done, still missing status reporting or waiting for
1475         the buildsets to finish, and it is completely untested.
1477         * buildbot/trybuild.py: delete file, move contents to ..
1478         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1479         * buildbot/test/test_vc.py: match the move
1481         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1482         of the TryScheduler, no buildsetID or status-tracking support yet
1483         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1485         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1486         possible to set the basedir after __init__ time, so it is easier
1487         to use as a Service-child of the BuildMaster instance
1489         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1490         that delivers messages to its Service parent instead of requiring
1491         a subclass to be useful. This turns out to be much easier to build
1492         unit tests around.
1494         * buildbot/scripts/tryclient.py (createJob): utility code to
1495         create jobfiles, will eventually be used by 'buildbot try'
1497 2005-08-08  Brian Warner  <warner@lothar.com>
1499         * docs/buildbot.texinfo (try): add docs on the
1500         as-yet-unimplemented Try scheduler
1502         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1503         * buildbot/test/test_scheduler.py: .. here
1504         (Scheduling.testTryJobdir): add placeholder test for 'try'
1506         * buildbot/test/test_status.py (Log.testMerge3): update to match new
1507         addEntry merging (>=chunkSize) behavior
1508         (Log.testConsumer): update to handle new callLater(0) behavior
1510         * buildbot/test/test_web.py: rearrange tests a bit, add test for
1511         both the MAX_LENGTH bugfix and the resumeProducing hang.
1513         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1514         put off the actual resumeProducing for a moment with
1515         reactor.callLater(0). This works around a twisted-1.3.0 bug which
1516         causes large logfiles to hang midway through.
1518         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1519         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1520         and to improve memory usage when streaming the file out to a web
1521         browser.
1522         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1523         make this work cleanly
1525 2005-08-03  Brian Warner  <warner@lothar.com>
1527         * buildbot/trybuild.py: new file for 'try' utilities
1528         (getSourceStamp): run in a tree, find out the baserev+patch
1529         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1530         implemented for SVN and Darcs, still working on Arch. I don't know
1531         how to make CVS work yet.
1533         * docs/buildbot.texinfo: document the 'buildbot' command-line
1534         tool, including the not-yet-implemented 'try' feature, and the
1535         in-flux .buildbot/ options directory.
1537 2005-07-20  Brian Warner  <warner@lothar.com>
1539         * buildbot/locks.py: added temporary id() numbers to Lock
1540         descriptions, to track down a not-really-sharing-the-Lock bug
1542         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1544         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1545         needed for python2.2 compatibility
1546         * buildbot/test/test_vc.py: python2.2 compatibility: generators
1547         are from the __future__
1549 2005-07-19  Brian Warner  <warner@lothar.com>
1551         * buildbot/master.py (BuildMaster.loadConfig): give a better error
1552         message when schedulers use unknown builders
1554         * buildbot/process/builder.py (Builder.compareToSetup): make sure
1555         SlaveLock('name') and MasterLock('name') are distinct
1557         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1558         c['schedulers'] in such a way that we can actually accept
1559         Dependent instances
1560         * buildbot/test/test_config.py: check it
1562         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1563         utility method to *all* the Schedulers
1564         (Periodic.listBuilderNames): same
1566         * docs/buildbot.texinfo (Interlocks): update chapter to match
1567         reality
1569         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1570         to make sure that c['sources'], c['schedulers'], and c['status']
1571         are all lists of the appropriate objects, and that the Schedulers
1572         all point to real Builders
1573         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1574         'listBuilderNames' utility method to support this
1575         * buildbot/scheduler.py: implement the utility method
1576         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1578         * docs/buildbot.texinfo: add some @cindex entries
1580         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1581         if it wasn't already set: most tla commands will fail unless one
1582         has been set.
1583         (Arch.createRepository): and disable bazaar's revision cache, since
1584         they cause test failures (the multiple repositories we create all
1585         interfere with each other through the cache)
1587         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1588         bring it properly up to date with twisted-2.0 test guidelines
1590         * buildbot/master.py (BuildMaster): remove references to old
1591         'interlock' module, this caused a bunch of post-merge test
1592         failures
1593         * buildbot/test/test_config.py: same
1594         * buildbot/process/base.py (Build): same
1596         * buildbot/test/test_slaves.py: stubs for new test case
1598         * buildbot/scheduler.py: add test-case-name tag
1599         * buildbot/test/test_buildreq.py: same
1601         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1602         unnecessary init code
1603         (Bot.remote_setBuilderList): match it
1605         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1607         * buildbot/changes/mail.py (parseSyncmail): update comment
1609         * buildbot/test/test_slavecommand.py: disable Shell tests on
1610         platforms that don't suport IReactorProcess
1612         * buildbot/status/builder.py (LogFile): remove the 't' mode from
1613         all places where we open logfiles. It causes OS-X to open the file
1614         in some weird mode that that prevents us from mixing reads and
1615         writes to the same filehandle, which we depend upon to implement
1616         _generateChunks properly. This change doesn't appear to break
1617         win32, on which "b" and "t" are treated differently but a missing
1618         flag seems to be interpreted as "t".
1620 2005-07-18  Brian Warner  <warner@lothar.com>
1622         * buildbot/slave/commands.py (ShellCommand): overhaul
1623         error-handling code, to try and make timeout/interrupt work
1624         properly, and make win32 happier
1625         * buildbot/test/test_slavecommand.py: clean up, stop using
1626         reactor.iterate, add tests for timeout and interrupt
1627         * buildbot/test/sleep.py: utility for a new timeout test
1629         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1630         code from the local-usebranches branch
1632 2005-07-17  Brian Warner  <warner@lothar.com>
1634         * buildbot/process/process_twisted.py
1635         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1636         minutes, to match the other twisted BuildFactories, and don't
1637         excuse failures in c/qt/win32 reactors any more.
1639         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1640         'freebsd' builders, since the buildslaves have been unavailable
1641         for quite a while
1643 2005-07-13  Brian Warner  <warner@lothar.com>
1645         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1646         build-on-branch feature
1648         * buildbot/process/step.py (Darcs.__init__): add base_url and
1649         default_branch arguments, just like SVN
1650         (Arch.__init__): note that the version= argument is really the
1651         default branch name
1653         * buildbot/slave/commands.py (SourceBase): keep track of the
1654         repository+branch that was used for the last checkout in
1655         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1656         match, we clobber the directory and perform a fresh checkout
1657         rather than trying to do an in-place update. This should protect
1658         us against trying to get to branch B by doing an update in a tree
1659         obtained from branch A.
1660         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1661         (SVN.setup): same, just the svnurl
1662         (Darcs.setup): same, just the repourl
1663         (Arch.setup): same, arch coordinates (url), version, and
1664         buildconfig. Also pull the buildconfig from the args dictionary,
1665         which we weren't doing before, so the build-config was effectively
1666         disabled.
1667         (Arch.sourcedirIsUpdateable): don't try to update when we're
1668         moving to a specific revision: arch can't go backwards, so it is
1669         safer to just clobber the tree and checkout a new one at the
1670         desired revision.
1671         (Bazaar.setup): same sourcedata as Arch
1673         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1674         use maybeWait, to work with twisted-1.3.0 and twcompat
1675         (Dependencies.testRun_Pass): same
1677         * buildbot/test/test_vc.py: rearrange, cleanup
1679         * buildbot/twcompat.py: add defer.waitForDeferred and
1680         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1681         can work under twisted-1.3.0 .
1683         * buildbot/test/test_vc.py: rewrite. The sample repositories are
1684         now created at setUp time. This increases the runtime of the test
1685         suite considerably (from 91 seconds to 151), but it removes the
1686         need for an offline tarball, which should solve a problem I've
1687         seen where the test host has a different version of svn than the
1688         tarball build host. The new code also validates that mode=update
1689         really picks up recent commits. This approach will also make it
1690         easier to test out branches, because the code which creates the VC
1691         branches is next to the code which uses them. It will also make it
1692         possible to test some change-notification hooks, by actually
1693         performing a VC commit and watching to see the ChangeSource get
1694         notified.
1696 2005-07-12  Brian Warner  <warner@lothar.com>
1698         * docs/buildbot.texinfo (SVN): add branches example
1699         * docs/Makefile (buildbot.ps): add target for postscript manual
1701         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
1702         * buildbot/test/test_locks.py: same
1704         * buildbot/process/step.py (Darcs): comment about default branches
1706         * buildbot/master.py (BuildMaster.loadConfig): don't look for
1707         c['interlocks'] in the config file, complain if it is present.
1708         Scan all locks in c['builders'] to make sure the Locks they use
1709         are uniquely named.
1710         * buildbot/test/test_config.py: remove old c['interlocks'] test,
1711         add some tests to check for non-uniquely-named Locks
1712         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1713         since the unique-Lock validation code requires it now
1715         * buildbot/locks.py: fix test-case-name
1717         * buildbot/interlock.py: remove old file
1719 2005-07-11  Brian Warner  <warner@lothar.com>
1721         * buildbot/test/test_interlock.py: rename to..
1722         * buildbot/test/test_locks.py: .. something shorter
1724         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1725         versions (after 2.0.1) changed internet.TCPClient to shut down the
1726         connection in stopService. Change the code to handle this
1727         gracefully.
1729         * buildbot/process/base.py (Build): handle whole-Build locks
1730         * buildbot/process/builder.py (Builder.compareToSetup): same
1731         * buildbot/test/test_interlock.py: make tests work
1733         * buildbot/process/step.py (BuildStep.startStep): complain if a
1734         Step tries to claim a lock that's owned by its own Build
1735         (BuildStep.releaseLocks): typo
1737         * buildbot/locks.py (MasterLock): use ComparableMixin so config
1738         file reloads don't replace unchanged Builders
1739         (SlaveLock): same
1740         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1741         rewrite to cover new Locks instead of old c['interlocks']
1742         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1743         slave2 too
1746         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1747         start the master and connect the buildslave
1749         * buildbot/process/step.py (FailingDummy.done): finish with a
1750         FAILURE status rather than raising an exception
1752         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1753         stringify a BuildRequest.reason that is None
1755         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1756         minor fix
1757         * buildbot/status/builder.py (BuildSetStatus): implement enough to
1758         allow scheduler.Dependent to work
1759         * buildbot/buildset.py (BuildSet): set .reason and .results
1761         * buildbot/test/test_interlock.py (Locks.setUp): connect both
1762         slaves, to make the test stop hanging. It still fails, of course,
1763         because I haven't even started to implement Locks.
1765         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1767         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1768         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1769         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1770         (Dependent): new class for downstream build dependencies
1771         * buildbot/test/test_dependencies.py: tests (still failing)
1773         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1775 2005-07-07  Brian Warner  <warner@lothar.com>
1777         * buildbot/test/runutils.py (RunMixin): factored this class out..
1778         * buildbot/test/test_run.py: .. from here
1779         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1780         added new buildbot.locks tests (which all hang right now)
1781         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1782         * buildbot/process/step.py: claim/release per-BuildStep locks
1784         * docs/Makefile: add 'buildbot.html' target
1786         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1787         interpreted as "HEAD", so that all VC steps can accept branch=None
1788         and have it mean the "default branch".
1790         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1792 2005-07-07  Brian Warner  <warner@lothar.com>
1794         * docs/examples/twisted_master.cfg: update to match current usage
1796         * docs/buildbot.texinfo (System Architecture): comment out the
1797         image, it doesn't exist yet and just screws up the HTML manual.
1799 2005-07-05  Brian Warner  <warner@lothar.com>
1801         * debian/.cvsignore: oops, missed one. Removing leftover file.
1803 2005-06-17  Brian Warner  <warner@lothar.com>
1805         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1806         changed its output in 1.2.0, don't mistakenly think that the
1807         subversion we find isn't capable of supporting our tests.
1809         * debian/*: remove the debian/ directory and its contents, to make
1810         life easier for the proper Debian maintainer
1811         * MANIFEST.in: same
1812         * Makefile (release): same
1814 2005-06-07  Brian Warner  <warner@lothar.com>
1816         * everything: create a distinct SourceStamp class to replace the
1817         ungainly 4-tuple, let it handle merging instead of BuildRequest.
1818         Changed the signature of Source.startVC to include the revision
1819         information (instead of passing it through self.args). Implement
1820         branches for SVN (now only Darcs/Git is missing support). Add more
1821         Scheduler tests.
1823 2005-06-06  Brian Warner  <warner@lothar.com>
1825         * everything: rearrange build scheduling. Create a new Scheduler
1826         object (configured in c['schedulers'], which submit BuildSets to a
1827         set of Builders. Builders can now use multiple slaves. Builds can
1828         be run on alternate branches, either requested manually or driven
1829         by changes. This changed some of the Status classes. Interlocks
1830         are out of service until they've been properly split into Locks
1831         and Dependencies. treeStableTimer, isFileImportant, and
1832         periodicBuild have all been moved from the Builder to the
1833         Scheduler.
1834         (BuilderStatus.currentBigState): removed the 'waiting' and
1835         'interlocked' states, removed the 'ETA' argument.
1837 2005-05-24  Brian Warner  <warner@lothar.com>
1839         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1840         erroneously abandons the connection (in clientConnectionFailed)
1841         for non-UserErrors, which means that if we lose the connection due
1842         to a network problem or a timeout, we'll never try to reconnect.
1843         Fix this by not upcalling to the buggy parent method. Note:
1844         twisted-2.0 fixes this, but the function only has 3 lines so it
1845         makes more sense to copy it than to try and detect the buggyness
1846         of the parent class. Fixes SF#1207588.
1848         * buildbot/changes/changes.py (Change.branch): doh! Add a
1849         class-level attribute to accomodate old Change instances that were
1850         pickled before 0.6.5 (where .branch was added for new Changes).
1851         This fixes the exception that occurs when you try to look at an
1852         old Change (through asHTML).
1854         * buildbot/__init__.py (version): bump to 0.6.6+ while between
1855         releases
1857 2005-05-23  Brian Warner  <warner@lothar.com>
1859         * buildbot/__init__.py (version): release 0.6.6
1861 2005-05-23  Brian Warner  <warner@lothar.com>
1863         * NEWS: update for 0.6.6 release
1864         * debian/changelog: same
1866         * buildbot/scripts/runner.py (start): put the basedir in sys.path
1867         before starting: this was done by twistd back when we spawned it,
1868         now that we're importing the pieces and running them in the
1869         current process, we have to do it ourselves. This allows
1870         master.cfg to import files from the same directory without
1871         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1872         Stichele for the catch.
1873         (Options.opt_version): Add a --version command (actually, just make
1874         the existing --version command emit Buildbot's version too)
1876         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1877         fix to make this behave like other LogFiles, this time to handle
1878         existing LogFiles on disk. (add the missing .upgrade method)
1879         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1881 2005-05-21  Brian Warner  <warner@lothar.com>
1883         * buildbot/test/test_runner.py (Create.testMaster): match the
1884         rawstring change in runner.py:masterTAC
1886         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1887         TwistedWords is installed
1888         * buildbot/test/test_status.py: same, with TwistedMail
1890         * buildbot/master.py: remove old IRC/Waterfall imports (used by
1891         some old, deprecated, and removed config keys). This should enable
1892         you to use the base buildbot functionality with Twisted-2.0.0 when
1893         you don't also have TwistedWeb and TwistedWords installed
1895 2005-05-20  Brian Warner  <warner@lothar.com>
1897         * buildbot/scripts/runner.py (run): call sendchange(), not
1898         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1899         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1900         (stop): don't wait for process to die when sending SIGHUP
1901         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1902         directory name gets interpreted, which you don't want
1903         (slaveTAC): same
1905         * buildbot/__init__.py (version): bump to 0.6.5+ while between
1906         releases
1908 2005-05-18  Brian Warner  <warner@lothar.com>
1910         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1912 2005-05-18  Brian Warner  <warner@lothar.com>
1914         * README: update for 0.6.5
1915         * debian/changelog: same
1917         * buildbot/changes/changes.py: rename tag= to branch=, since
1918         that's how we're using it, and my design for the upcoming "build a
1919         specific branch" feature wants it. also, tag= was too CVS-centric
1920         * buildbot/changes/mail.py (parseSyncmail): same
1921         * buildbot/process/base.py (Build.isBranchImportant): same
1922         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1923         * docs/buildbot.texinfo (Attributes of Changes): same
1925         * NEWS: update tag=, update for upcoming release
1927 2005-05-17  Brian Warner  <warner@lothar.com>
1929         * buildbot/scripts/runner.py (stop): actually poll once per
1930         second, instead of re-killing the poor daemon once per second.
1931         Sleep briefly (0.1s) before the first poll, since there's a good
1932         chance we can avoid waiting the full second if the daemon shuts
1933         down quickly. Also remove the sys.exit() at the end.
1934         (start): remove the unneighborly sys.exit()
1936         * Makefile: improve permission-setting to not kick Arch so badly
1938         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1939         default --keepalive=600, since it doesn't hurt very much, and it's
1940         a hassle to discover that you need it.
1941         * buildbot/test/test_runner.py (Create.testSlave): test it
1943         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1944         IRC bot about EXCEPTION
1946         * buildbot/status/client.py (PBListener): upcall more correctly
1948         * buildbot/process/base.py (Build.allStepsDone): if a step caused
1949         an exception mark the overall build with EXCEPTION, not SUCCESS
1951         * buildbot/scripts/runner.py (makefile_sample): remove the leading
1952         newline
1953         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1954         * Makefile: update some release-related stuff
1956         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1957         gets called when there isn't actually an active process, just end
1958         the Command instead of blowing up. I don't know how it gets into
1959         this state, but the twisted win32 buildslave will sometimes hang,
1960         and when it shakes its head and comes back, it thinks it's still
1961         running a Command. The next build causes this command to be
1962         interrupted, but the lack of self.process.pid breaks the interrupt
1963         attempt.
1965         * NEWS: document changes since the last release
1967         * buildbot/scripts/runner.py (start): change 'buildbot start' to
1968         look for Makefile.buildbot instead of a bare Makefile . The
1969         'buildbot start' does not install this file, so you have to
1970         manually copy it if you want to customize startup behavior.
1971         (createMaster): change 'buildbot master' command to create
1972         Makefile.sample instead of Makefile, to create master.cfg.sample
1973         instead of master.cfg (requiring you to copy it before the
1974         buildmaster can be started). Both sample files are kept up to
1975         date, i.e. they are overwritten if they have been changed. The
1976         'buildbot.tac' file is *not* overwritten, but if the new contents
1977         don't match the old, a 'buildbot.tac.new' file is created and the
1978         user is warned. This seems to be a much more sane way to handle
1979         startup files. Also, don't sys.exit(0) when done, so we can run
1980         unit tests against it.
1981         (createSlave): same. Don't overwrite the sample info/ files.
1982         * buildbot/scripts/sample.mk: remove. the contents were pulled
1983         into runner.py, since they need to match the behavior of start()
1984         * setup.py: same
1985         * MANIFEST.in: same
1987         * docs/buildbot.texinfo (Launching the daemons): document it
1988         * buildbot/test/test_runner.py (Create): test it
1990         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1991         version that can handle string-in-string tests, because otherwise
1992         python-2.2 fails the tests. It'd be tremendous if Trial's test
1993         took two strings under 2.2 too.
1995         * everything: fixed all deprecation warnings when running against
1996         Twisted-2.0 . (at least all the ones in buildbot code, there are a
1997         few that come from Twisted itself). This involved putting most of
1998         the Twisted-version specific code in the new buildbot.twcompat
1999         module, and creating some abstract base classes in
2000         buildbot.changes.base and buildbot.status.base (which might be
2001         useful anyway). __implements__ is a nuisance and requires an ugly
2002         'if' clause everywhere.
2004         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2005         delay before finishing the test: it seems that smtp.sendmail
2006         doesn't hang up on the server, so we must wait a moment so it can
2007         hang up on us. This removes the trial warning about an unclean
2008         reactor.
2010 2005-05-16  Brian Warner  <warner@lothar.com>
2012         * buildbot/process/step.py (Source): add 'retry' argument. It is a
2013         tuple of (delay, repeats).
2014         * buildbot/test/test_vc.py (Retry): test it
2015         * docs/buildbot.texinfo (Source Checkout): document it
2016         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2017         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2018         doVCFull() are handled by re-trying the checkout (after a delay)
2019         some number of times.
2020         (ShellCommand._startCommand): make header lines easier to read
2022         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2023         shutdown
2024         (WebTest.test_logfile): make sure master gets shut down, silences
2025         some "unclean reactor" test errors
2027         * buildbot/test/test_changes.py (Sender.tearDown): spin the
2028         reactor once after shutdown, something in certain versions of
2029         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2030         fails, svn-trunk is ok.
2032         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2033         second win32 error message
2035         * buildbot/test/test_run.py (Status.testSlave): be smarter about
2036         validating the ETA, so the tests don't fail on slow systems
2038 2005-05-15  Brian Warner  <warner@lothar.com>
2040         * buildbot/status/builder.py (HTMLLogFile): make this behave like
2041         the new LogFile class, so upgrading works properly
2042         (LogFileProducer.resumeProducing): survive resumeProducing after
2043         we've exhausted the chunkGenerator
2045         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2046         logs too
2047         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2048         (Log.testUpgrade): same
2050         * docs/buildbot.texinfo (Maintenance): describe how to delete old
2051         Builds and logs with a cron job.
2053         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2054         of the old non-offline LogFile, added code to upgrade these to
2055         new-style contents-live-on-disk instances at load time (in a way
2056         that doesn't invalidate the old Build pickles, so upgrading to
2057         0.6.5 is not a one-way operation). Got rid of everything related
2058         to 'stub' builds.
2059         (LogFile.__init__): create LogFiles with the parent step status,
2060         the log's name, and a builder-relative filename where it can keep
2061         the contents on disk.
2062         (LogFile.hasContents): new method, clients are advised to call it
2063         before getText or getChunks and friends. If it returns False, the
2064         log's contents have been deleted and getText() will raise an
2065         error.
2066         (LogFile.getChunks): made it a generator
2067         (LogFile.subscribeConsumer): new method, takes a Twisted-style
2068         Consumer (except one that takes chunks instead of strings). This
2069         enables streaming of very large logfiles without storing the whole
2070         thing in memory.
2071         (BuildStatus.generateLogfileName): create names like
2072         12-log-compile-output, with a _0 suffix if required to be unique
2073         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2074         or earlier) logfiles into new-style ones
2075         (BuilderStatus): remove everything related to 'stub' builds. There
2076         is now only one build cache, and we don't strip logs from old
2077         builds anymore.
2078         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2079         since we no longer fight to keep it in the cache
2081         * buildbot/status/html.py (TextLog.render_GET): use a
2082         ChunkConsumer to stream the log entries efficiently.
2083         (ChunkConsumer): wrapper which consumes chunks and writes
2084         formatted HTML.
2086         * buildbot/test/test_twisted.py (Parse.testParse): use a
2087         LogFile-like object instead of a real one
2089         * buildbot/test/test_status.py (MyLog): handle new LogFile code
2090         (Log.testMerge3): validate more merge behavior
2091         (Log.testChunks): validate LogFile.getChunks
2092         (Log.testUpgrade): validate old-style LogFile upgrading
2093         (Log.testSubscribe): validate LogFile.subscribe
2094         (Log.testConsumer): validate LogFile.subscribeConsumer
2096         * buildbot/interfaces.py (IStatusLogStub): remove
2097         (IStatusLog.subscribeConsumer): new method
2098         (IStatusLog.hasContents): new method
2099         (IStatusLogConsumer): describes things passed to subscribeConsumer
2101         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2102         the log contents if it does not have any contents.
2103         (StatusResourceBuildStep.body): same
2104         (StatusResourceBuildStep.getChild): give a 404 for empty logs
2106 2005-05-14  Brian Warner  <warner@lothar.com>
2108         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2109         timeouts to try and make the windows metabuildslave not hang
2111 2005-05-13  Mike Taylor  <bear@code-bear.com>
2113         * buildbot/slave/commands.py (rmdirRecursive): added a check
2114         to ensure the path passed into rmdirRecursive actually exists.
2115         On win32 a non-existant path would generate an exception.
2117 2005-05-13  Brian Warner  <warner@lothar.com>
2119         * buildbot/slave/commands.py (rmdirRecursive): replacement for
2120         shutil.rmtree which behaves correctly on windows in the face of
2121         files that you have to chmod before deleting. Thanks to Bear at
2122         the OSAF for the routine.
2123         (SourceBase.doClobber): use rmdirRecursive
2125 2005-05-12  Brian Warner  <warner@lothar.com>
2127         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2128         method generate chunks instead of returning a big list. This
2129         allows the same method to be used for both old LogFile and new
2130         OfflineLogFile.
2131         (OfflineLogFile.getText): use the generator
2132         (OfflineLogFile.subscribe): same
2133         * buildbot/status/html.py (TextLog.resumeProducing): same
2134         * buildbot/interfaces.py (IStatusLog.getChunks): document it
2136         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2137         point out that OfflineLogFile does not currently work with
2138         html.Waterfall . Fixing this is high-priority.
2140         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2141         apparently windows defaults to using stdout
2143         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2144         better message on failure so I can figure out the win32 problem
2146         * buildbot/slave/commands.py (ShellCommand._startCommand): update
2147         log messages to include more useful copies of the command being
2148         run, the argv array, and the child command's environment.
2149         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2151 2005-05-11  Brian Warner  <warner@lothar.com>
2153         * setup.py: oops, install debug.glade so 'buildbot debugclient'
2154         will actually work
2155         * Makefile: update the deb-snapshot version
2157         * docs/buildbot.texinfo: move all .xhtml docs into a new
2158         .texinfo-format document, adding a lot of material in the process.
2159         This is starting to look like a real user's manual. Removed all
2160         the Lore-related files: *.xhtml, *.css, template.tpl .
2161         * docs/Makefile: simple makefile to run 'makeinfo'
2162         * buildbot/scripts/sample.cfg: rearrange slightly
2163         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2165 2005-05-10  Brian Warner  <warner@lothar.com>
2167         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2168         different name for the internal twistw module, handle it.
2170         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2171         * setup.py: .. and stop trying to install it
2173         * buildbot/process/step.py (Git): added support for 'cogito' (aka
2174         'git'), the new linux kernel VC system (http://kernel.org/git/).
2175         Thanks to Brandon Philips for the patch.
2176         * buildbot/slave/commands.py (Git): same
2178 2005-05-06  Brian Warner  <warner@lothar.com>
2180         * buildbot/status/builder.py (OfflineLogFile): replace the default
2181         LogFile with a form that appends its new contents to a disk file
2182         as they arrive. The complete log data is never kept in RAM. This
2183         is the first step towards handling very large (100MB+) logfiles
2184         without choking quite so badly. (The other half is
2185         producer/consumer on the HTML pages).
2186         (BuildStepStatus.addLog): use OfflineLogFile by default
2187         (BuildStatus.getLogfileName): helper code to give the
2188         OfflineLogFile a filename to work with
2190         * buildbot/test/test_status.py (Results.testAddResults): update
2191         tests to handle new asserts
2192         * buildbot/test/test_vc.py (Patch.doPatch): same
2193         * buildbot/test/test_steps.py (BuildStep.setUp): same
2195 2005-05-05  Brian Warner  <warner@lothar.com>
2197         * buildbot/scripts/runner.py (start): if there is no Makefile,
2198         launch the app by importing twistd's internals and calling run(),
2199         rather than spawning a new twistd process. This stands a much
2200         better chance of working under windows.
2201         (stop): kill the process with os.kill instead of spawning
2202         /bin/kill, again to reduce the number of external programs which
2203         windows might not have in the PATH. Also wait up to 5 seconds for
2204         the process to go away, allowing things like 'buildbot stop;
2205         buildbot start' to be reliable in the face of slow shutdowns.
2207         * buildbot/master.py (Dispatcher.__getstate__): remove old
2208         .tap-related methods
2209         (BuildMaster.__getstate__): same
2210         (makeService): same
2211         * buildbot/slave/bot.py (makeService): same
2212         (Options.longdesc): same
2213         * buildbot/scripts/runner.py: copy over some old mktap option text
2215         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2216         'buildbot master' now creates a buildbot.tac file, so there is no
2217         longer a create-instance/save/reload sequence. mktap is dead, long
2218         live twistd -y.
2219         * buildbot/scripts/sample.mk: use twistd -y, not -f
2220         * buildbot/test/test_config.py: remove mktap-based test
2221         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2222         * README: don't reference mktap
2224         * docs/source.xhtml: document some of the attributes that Changes
2225         might have
2227         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2229         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2230         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2231         * buildbot/changes/changes.py (Change)
2232         * buildbot/changes/mail.py (parseSyncmail)
2233         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2234         (Test3.testMsgS5)
2235         * buildbot/process/base.py (Build.isTagImportant)
2236         (Build.addChange)
2239 2005-05-04  Brian Warner  <warner@lothar.com>
2241         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2242         connection after sending the change, so that unit tests don't
2243         complain about sockets being left around
2245         * buildbot/status/html.py (WaterfallStatusResource.body): fix
2246         exception in phase=0 rendering
2247         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2249         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2251         * buildbot/master.py (BuildMaster.loadConfig): finally remove
2252         deprecated config keys: webPortnum, webPathname, irc, manholePort,
2253         and configuring builders with tuples.
2254         * buildbot/test/test_config.py: stop testing compatibility with
2255         deprecated config keys
2256         * buildbot/test/test_run.py: same
2258 2005-05-03  Brian Warner  <warner@lothar.com>
2260         * contrib/arch_buildbot.py: survive if there are no logfiles
2261         (username): just use a string, os.getlogin isn't reliable
2263         * buildbot/scripts/runner.py (sendchange): oops, fix the command
2264         so 'buildbot sendchange' actually works. The earlier test only
2265         covered the internal (non-reactor-running) form.
2267         * contrib/arch_buildbot.py: utility that can run as an Arch hook
2268         script to notify the buildmaster about changes
2270         * buildbot/scripts/runner.py (sendchange): new command to send a
2271         change to a buildbot.changes.pb.PBChangeSource receiver.
2272         * buildbot/test/test_changes.py (Sender): test it
2274         * buildbot/master.py (BuildMaster.startService): mark .readConfig
2275         after any reading of the config file, not just when we do it in
2276         startService. This makes some tests a bit cleaner.
2278         * buildbot/changes/pb.py: add some log messages
2280         * buildbot/process/base.py (Build.startBuild): fix a bug that
2281         caused an exception when the build terminated in the very first
2282         step.
2283         (Build.stepDone): let steps return a status of EXCEPTION. This
2284         terminates the build right away, and sets the build's overall
2285         status to EXCEPTION too.
2286         * buildbot/process/step.py (BuildStep.failed): return a status of
2287         EXCEPTION when that is what has happened.
2289         * buildbot/process/step.py (Arch.computeSourceRevision): finally
2290         implement this, allowing Arch-based projects to get precise
2291         checkouts instead of always using the latest code
2292         (Bazaar): create variant of Arch to let folks use baz instead of
2293         tla. Requires a new buildslave too.
2294         * buildbot/slave/commands.py (Arch): add 'revision' argument
2295         (Bazaar): create variant of Arch that uses baz instead of tla.
2296         Remove the code that extracts the archive name from the
2297         register-archive output, since baz doesn't provide it, and require
2298         the user provide both the archive name and its location.
2299         * buildbot/test/test_vc.py (VC.testBazaar): added tests
2301 2005-05-02  Brian Warner  <warner@lothar.com>
2303         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2304         thanks to Nick Trout.
2306         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2307         deals better with source Makefile coming from a read-only CVS
2308         checkout. Thanks to Nick Trout for the catch.
2310         * buildbot/__init__.py (version): bump to 0.6.4+ while between
2311         releases
2313 2005-04-28  Brian Warner  <warner@lothar.com>
2315         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2317         * debian/changelog: update for 0.6.4
2319 2005-04-28  Brian Warner  <warner@lothar.com>
2321         * README.w32: add a checklist of steps for getting buildbot
2322         running on windows.
2323         * MANIFEST.in: include it in the tarball
2325         * NEWS: update
2327         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2328         broken .tap files from 0.6.3 by getting rid of .services,
2329         .namedServices, and .change_svc at load time.
2331 2005-04-27  Brian Warner  <warner@lothar.com>
2333         * NEWS: update in preparation for new release
2335         * buildbot/test/test_config.py (Save.testSave): don't pull in
2336         twisted.scripts.twistd, we don't need it and it isn't for windows
2337         anyway.
2339         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2340         accomodate win32 which can't do atomic-rename
2342 2005-04-27  Brian Warner  <warner@lothar.com>
2344         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2345         timeouts to help the slow metabuildbot not flunk them so much
2346         (Disconnect.testBuild3): same
2347         (Disconnect.testBuild4): same
2348         (Disconnect.testInterrupt): same
2350         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2351         setup, it was completely broken for new buildmasters (those which
2352         did not have a 'change.pck' already saved. Thanks to Paul Warren
2353         for catching this (embarrassing!) bug.
2354         (Dispatcher.__getstate__): don't save our registered avatar
2355         factories, since they'll be re-populated when the config file is
2356         re-read.
2357         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2358         tests (since the real mktap-generated BuildMaster doesn't save
2359         this attribute).
2360         (BuildMaster.__getstate__): don't save any service children,
2361         they'll all be re-populated when the config file is re-read.
2362         * buildbot/test/test_config.py (Save.testSave): test for this
2364 2005-04-26  Brian Warner  <warner@lothar.com>
2366         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2367         rendered with Blender.. looks a bit nicer.
2368         * buildbot/docs/images/icon.blend: add the Blender file for it
2370         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2371         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2372         running under windows. This appears to be the best way to allow
2373         BuildSteps to do something normal like 'trial -v buildbot.test' or
2374         'make foo' and still expect it to work. The idea is to make the
2375         BuildSteps look as much like what a developer would type when
2376         compiling or testing the tree by hand. This approach probably has
2377         problems when there are spaces in the arguments, so if you've got
2378         windows buildslaves, you'll need to pay close attention to your
2379         commands.
2381         * buildbot/status/html.py (WaterfallStatusResource.body): add the
2382         timezone to the timestamp column.
2383         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2385         * buildbot/scripts/runner.py (loadOptions): do something sane for
2386         windows, I think. We use %APPDATA%/buildbot instead of
2387         ~/.buildbot, but we still search everywhere from the current
2388         directory up to the root for a .buildbot/ subdir. The "is it under
2389         $HOME" security test was replaced with "is it owned by the current
2390         user", which is only performed under posix.
2391         * buildbot/test/test_runner.py (Options.testFindOptions): update
2392         tests to match. The "is it owned by the current user" check is
2393         untested. The test has been re-enabled for windows.
2395         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2396         any "\n" in the expected output with the platform-specific line
2397         separator. Make this separator "\r\n" on PTYs under unix, they
2398         seem to do that and I don't know why
2400         * buildbot/test/test_runner.py (Options.optionsFile): disable on
2401         windows for now, I don't know what ~/.buildbot/ should mean there.
2403         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2404         win32 compatibility, don't use "/tmp"
2405         (Basedir.testChangeBuilddir): remove more unixisms
2407 2005-04-26  Brian Warner  <warner@lothar.com>
2409         * buildbot/test/test_control.py (Force.rmtree): python2.2
2410         compatibility, apparently its shutil.rmtree ignore_errors=
2411         argument is ignored.
2412         * buildbot/test/test_run.py (Run.rmtree): same
2413         (RunMixin.setUp): same
2415         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2416         not os.path.sep
2418         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2419         'substring in string' operator, must use string.find(substr)!=-1
2420         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2421         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2423         * buildbot/scripts/runner.py (loadOptions): add code to search for
2424         ~/.buildbot/, a directory with things like 'options', containing
2425         defaults for various 'buildbot' subcommands. .buildbot/ can be in
2426         the current directory, your $HOME directory, or anywhere
2427         inbetween, as long as you're somewhere inside your home directory.
2428         (debugclient): look in ~/.buildbot/options for master and passwd
2429         (statuslog): look in ~/.buildbot/options for 'masterstatus'
2430         * buildbot/test/test_runner.py (Options.testFindOptions): test it
2432         * buildbot/status/client.py (makeRemote): new approach to making
2433         IRemote(None) be None, which works under Twisted-2.0
2434         * buildbot/test/test_status.py (Client.testAdaptation): test it
2436         * buildbot/status/builder.py (Status.builderAdded): when loading a
2437         pickled BuilderStatus in from disk, set its name after loading.
2438         The config file might have changed its name (but not its
2439         directory) while it wasn't looking.
2440         
2441         * buildbot/process/builder.py (Builder.attached): always return a
2442         Deferred, even if the builder was already attached
2443         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2445 2005-04-25  Brian Warner  <warner@lothar.com>
2447         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2448         category-related exception when announcing a build has finished
2450         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2451         reference no-longer-existent changemaster.sources
2452         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2454         * buildbot/__init__.py (version): bump to 0.6.3+ while between
2455         releases
2457 2005-04-25  Brian Warner  <warner@lothar.com>
2459         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2461         * debian/changelog: update for 0.6.3
2463 2005-04-25  Brian Warner  <warner@lothar.com>
2465         * MANIFEST.in: make sure debug.glade is in the tarball
2467         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2469         * NEWS: update for the imminent 0.6.3 release
2471         * buildbot/status/html.py (HtmlResource.content): make the
2472         stylesheet <link> always point at "buildbot.css".
2473         (StatusResource.getChild): map "buildbot.css" to a static.File
2474         containing whatever css= argument was provided to Waterfall()
2475         (Waterfall): provide the "classic" css as the default.
2476         * docs/waterfall.classic.css: move default CSS from here ..
2477         * buildbot/status/classic.css: .. to here
2479         * MANIFEST.in: make sure classic.css is included in the tarball
2480         * setup.py: and that it is installed too, under buildbot/status/
2482         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2483         the module level, because buildbot.tap files from 0.6.2 don't have
2484         it in their attribute dictionary.
2486         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2487         really exists at startup, might save some confusion somewhere.
2489 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2491         * docs/waterfall.classic.css:
2492           add a stylesheet that's almost the same as the "classic"
2493           buildbot style
2495         * buildbot/status/builder.py:
2496           add EXCEPTION as a result - this is a problem for the bot
2497           maintainer, not a build problem for the changers
2498         * buildbot/process/step.py:
2499           use EXCEPTION instead of FAILURE for exceptions
2500         * buildbot/status/html.py:
2501           add build_get_class to get a class out of a build/buildstep
2502           finish naming the classes
2503           split out sourceNames to changeNames and builderNames so we
2504           can style them separately
2505         * docs/config.xhtml:
2506           finish documenting classes as they are right now
2508         * buildbot/status/html.py:
2509           name the classes as we agreed on IRC
2510         * docs/config.xhtml:
2511           and document them
2513         * buildbot/status/html.py:
2514           same for cssclass->class_
2516         * buildbot/status/html.py:
2517           as decided on IRC, use class_ for the "class" attribute to not
2518           conflict with the class keyword, and clean up the messy **{} stuff.
2520         * buildbot/status/mail.py:
2521           put back "builders" argument, and fix docstring, because the
2522           code *ignores* builders listed in this argument
2524         * buildbot/process/builder.py:
2525           remove FIXME notes - category is now indeed a cvar of BuilderStatus
2527         * docs/config.xhtml:
2528           describe the category argument for builders
2530         * buildbot/status/builder.py:
2531           Fix a silly bug due to merging
2533         * buildbot/process/builder.py:
2534           remove category from the process Builder ...
2535         * buildbot/status/builder.py:
2536           ... and add it to BuilderStatus instead.
2537           Set category on unpickled builder statuses, they might not have it.
2538         * buildbot/master.py:
2539           include category when doing builderAdded
2540         * buildbot/status/mail.py:
2541           return None instead of self for builders we are not interested in.
2542         * buildbot/test/test_run.py:
2543           fix a bug due to only doing deferredResult on "dummy" waiting
2544         * buildbot/test/test_status.py:
2545           add checks for the Mail IStatusReceiver returning None or self
2547         * buildbot/status/html.py:
2548           fix testsuite by prefixing page title with BuildBot
2550         * buildbot/status/builder.py:
2551           have .category in builder status ...
2552         * buildbot/process/builder.py:
2553           ... and set it from Builder
2554         * buildbot/status/html.py:
2555           make .css a class variable 
2556         * buildbot/test/test_status.py:
2557           write more tests to cover our categories stuff ...
2558         * buildbot/status/mail.py:
2559           ... and fix the bug that this uncovered
2561         * buildbot/changes/mail.py:
2562         * buildbot/changes/pb.py:
2563         * buildbot/master.py:
2564         * buildbot/process/base.py:
2565         * buildbot/process/factory.py:
2566         * buildbot/process/interlock.py:
2567         * buildbot/process/step.py:
2568         * buildbot/process/step_twisted.py:
2569         * buildbot/slave/commands.py:
2570         * buildbot/status/builder.py:
2571         * buildbot/status/client.py:
2572         * buildbot/status/html.py:
2573         * buildbot/status/mail.py:
2574         * buildbot/status/progress.py:
2575         * buildbot/test/test_changes.py:
2576         * buildbot/test/test_config.py:
2577         * buildbot/test/test_control.py:
2578         * buildbot/test/test_interlock.py:
2579         * buildbot/test/test_maildir.py:
2580         * buildbot/test/test_mailparse.py:
2581         * buildbot/test/test_run.py:
2582         * buildbot/test/test_slavecommand.py:
2583         * buildbot/test/test_status.py:
2584         * buildbot/test/test_steps.py:
2585         * buildbot/test/test_twisted.py:
2586         * buildbot/test/test_util.py:
2587         * buildbot/test/test_vc.py:
2588         * buildbot/test/test_web.py:
2589         * buildbot/util.py:
2590           add test-case-name at the top of a whole set of files
2592         * buildbot/status/builder.py:
2593           keep order of addition when getting builder names
2594         * buildbot/status/words.py:
2595         * buildbot/test/test_run.py:
2596           add test for getBuilderNames
2598         * buildbot/process/base.py:
2599         * buildbot/process/step.py:
2600         * buildbot/status/builder.py:
2601         * buildbot/status/html.py:
2602           make buildbot css-able
2603           replace the color code for purple with purple, don't understand
2604           why it wasn't purple to start with
2606         * buildbot/status/words.py:
2607           ok, so it doesn't look like BuilderStatus.remote is still valid.
2608           Use what waterfall uses instead.
2610         * buildbot/interfaces.py:
2611         * buildbot/status/builder.py:
2612         * buildbot/status/html.py:
2613         * buildbot/status/mail.py:
2614         * buildbot/status/words.py:
2615         * buildbot/test/test_run.py:
2616           use categories everywhere and make it be a list.  More sensible
2617           for the future.  Also make words actually respect this in
2618           buildFinished.
2620         * buildbot/interfaces.py:
2621           add category argument to getBuilderNames
2622         * buildbot/process/builder.py:
2623         * buildbot/status/builder.py:
2624         * buildbot/status/html.py:
2625         * buildbot/status/mail.py:
2626         * buildbot/status/words.py:
2627         * buildbot/test/test_run.py:
2628           move from specifying builders by name to specifying the category
2630         * buildbot/status/html.py:
2631         * buildbot/status/words.py:
2632           add "builders=" to __init__ of status clients so they can
2633           limit themselves to the given list of builders to report on
2635         * buildbot/status/html.py: set the title to the product name
2637 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
2639         * buildbot/interfaces.py:
2640         * buildbot/status/builder.py:
2641           more documentation.  Hm, not sure if ChangeLog entries make sense
2642           here...
2644 2005-04-23  Brian Warner  <warner@lothar.com>
2646         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2648         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2650         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2651         the sub-commands that log buildmaster status to stdout and to a
2652         GUI window, respectively.
2654         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2655         functionality is working again, but all the step-status and ETA
2656         stuff is missing. Commented out a lot of code pending more
2657         overhaul work.
2659         * buildbot/status/client.py: make sure that IRemote(None) is None
2661         * buildbot/changes/changes.py: import defer, oops
2662         (ChangeMaster): remove the .sources list, rely upon the fact that
2663         MultiServices can be treated as sequences of their children. This
2664         cleans up the add/remove ChangeSource routines a lot, as we keep
2665         exactly one list of the current sources instead of three.
2667         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2668         up an empty ChangeMaster at init time.
2669         (BuildMaster.loadChanges): if there are changes to be had from
2670         disk, replace self.change_svc with the new ones. If not, keep
2671         using the empty ChangeMaster set up in __init__.
2672         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2673         instead of a separate list, makes the code a bit cleaner.
2674         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2675         (ConfigTest.testSources): same, also wait for loadConfig to finish.
2676         Extend the test to make sure we can get rid of the sources when
2677         we're done.
2679 2005-04-22  Brian Warner  <warner@lothar.com>
2681         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2682         and info/host files when making the slave directory
2684         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2685         whendone= argument, just return the Deferred and let the caller do
2686         what they want with it.
2687         (Disconnect.testBuild1): wait for shutdownSlave
2688         (Basedir.testChangeBuilddir): new test to make sure changes to the
2689         builddir actually get propagated to the slave
2691         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2692         explicit method, rather than passing the builddir in __init__ .
2693         Make sure to update self.basedir too, this was broken before.
2694         (Bot.remote_setBuilderList): use b.setBuilddir for both new
2695         builders and for ones that have just had their builddir changed.
2696         (BotFactory): add a class-level .perspective attribute, so
2697         BuildSlave.waitUntilDisconnected won't get upset when the
2698         connection hasn't yet been established
2699         (BuildSlave.__init__): keep track of the bot.Bot instance, so
2700         tests can reach through it to inspect the SlaveBuilders
2702         * buildbot/process/base.py (Build.buildException): explain the
2703         log.err with a log.msg
2704         * buildbot/process/builder.py (Builder.startBuild): same
2705         (Builder._startBuildFailed): improve error message
2707         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2708         occurred because we lost the brand-new connection, retry instead
2709         of giving up. If not, it's probably an authorization failure, and
2710         it makes sense to stop trying. Make sure we log.msg the reason
2711         that we're log.err'ing the failure, otherwise test failures are
2712         really hard to figure out.
2714         * buildbot/master.py: change loadConfig() to return a Deferred
2715         that doesn't fire until the change has been fully implemented.
2716         This means any connected slaves have been updated with the new
2717         builddir. This change makes it easier to test the code which
2718         actually implements this builddir-updating.
2719         (BotPerspective.addBuilder): return Deferred
2720         (BotPerspective.removeBuilder): same
2721         (BotPerspective.attached): same
2722         (BotPerspective._attached): same. finish with remote_print before
2723         starting the getSlaveInfo, instead of doing them in parallel
2724         (BotPerspective.list_done): same
2725         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2726         actually calling slave.disconnect()
2727         (BotMaster.addBuilder): same
2728         (BotMaster.removeBuilder): same
2729         (BuildMaster.loadConfig): same
2730         (BuildMaster.loadConfig_Slaves): same
2731         (BuildMaster.loadConfig_Sources): same
2732         (BuildMaster.loadConfig_Builders): same
2733         (BuildMaster.loadConfig_status): same
2735         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2736         a Deferred that fires when the source is finally removed
2738         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2739         the previous tree on win32, where we have to do it synchronously,
2740         make sure we return a Deferred anyway.
2741         (SourceBase.doCopy): same
2743         * buildbot/scripts/runner.py (statusgui): use the text client for
2744         now, while I rewrite the Gtk one
2745         * buildbot/clients/base.py: strip out old code, leaving just the
2746         basic print-message-on-event functionality. I also remove the
2747         ReconnectingPBClientFactory, but it does at least quit when it
2748         loses the connection instead of going silent
2750 2005-04-21  Brian Warner  <warner@lothar.com>
2752         * Makefile: minor tweaks
2754         * NEWS: point out deprecation warnings, new features for
2755         /usr/bin/buildbot
2757         * buildbot/master.py (BuildMaster.loadConfig): emit
2758         DeprecationWarnings for Builders defined with tuples. Rearrange
2759         code to facility removal of deprecated configuration keys in the
2760         next release.
2762         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2763         'buildbot' command to put a little Makefile in the target that
2764         helps you re-create the buildbot.tap file, start or stop the
2765         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2766         all the files 0600, since they contain passwords.
2767         (start): if there is a Makefile, and /usr/bin/make exists, use
2768         'make start' in preference to a raw twistd command. This lets
2769         slave admins put things like PYTHONPATH variables in their
2770         Makefiles and have them still work when the slave is started with
2771         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2772         be nice to first try the 'make' command and only fall back to
2773         twistd if it fails. TODO: the Makefile's "start" command does not
2774         add the --reactor=win32 argument when running under windows.
2775         (Options.debugclient, Options.statusgui): add sub-commands to launch
2776         the debug client (formerly in contrib/debugclient.py) and the
2777         Gtk status application (currently broken)
2778         * buildbot/clients/debug.py: move from contrib/debugclient.py
2779         * buildbot/clients/debug.glade: same
2781         * buildbot/test/test_trial.py: remove it. This requires some
2782         functionality out of Twisted that isn't there yet, and until then
2783         having it around just confuses things.
2785         * buildbot/test/test_slavecommand.py (Shell): test both with and
2786         without PTYs, and make sure that command output is properly
2787         interleaved in the with-PTY case. I think the without-PTY test
2788         should pass on windows, where we never use PTYs anyway.
2790 2005-04-20  Brian Warner  <warner@lothar.com>
2792         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2794         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2796         * NEWS: start creating entries for the next release
2798         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2800         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2801         (WebTest.test_webPathname): same
2802         (WebTest.test_webPathname_port): same
2803         (WebTest.test_waterfall): use the default favicon rather than
2804         rooting around the filesystem for it. Open the expected-icon file
2805         in binary mode, to make win32 tests happier (thanks to Nick Trout
2806         for the catch)
2807         * buildbot/status/html.py (buildbot_icon): win32 portability
2809         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2810         win32-compatibility fixes from Nick Trout, the "file not found" message
2811         is different under windows
2812         (FakeSlaveBuilder.__init__): clean up setup a bit
2813         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2815 2005-04-19  Brian Warner  <warner@lothar.com>
2817         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2818         skip-if-repositories-are-unavailable test to not kill the trial
2819         that comes with Twisted-1.3.0
2821         * setup.py: install buildbot.png icon file when installing code
2823         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2824         environment used by the command, at least on the child side.
2826         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2827         this method needs to be added and implemented because it gets
2828         called under heavy load. I don't quite understand the
2829         producer/consumer API enough to write it.
2830         (StatusResource.getChild): add a resource for /favicon.ico
2831         (Waterfall.__init__): add favicon= argument
2832         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2833         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2834         (WebTest.test_webPathname): same
2835         (WebTest.test_webPathname_port): same
2836         * docs/config.xhtml: mention favicon=
2837         * buildbot/buildbot.png: add a default icon, dorky as it is
2839 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
2841         * buildbot/master.py:
2842         * buildbot/process/base.py:
2843         * buildbot/process/builder.py:
2844         * buildbot/process/interlock.py:
2845         * buildbot/status/builder.py:
2846         * buildbot/status/html.py:
2847         * buildbot/status/mail.py:
2848         * buildbot/status/words.py:
2849           new documentation while digging through the code
2851 2005-04-17  Brian Warner  <warner@lothar.com>
2853         * general: try to fix file modes on all .py files: a+r, a-x,
2854         but let buildbot/clients/*.py be +x since they're tools
2856         * docs/epyrun (addMod): when an import fails, say why
2858         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2860 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2862         * buildbot/process/base.py:
2863         * buildbot/process/builder.py:
2864         * buildbot/status/builder.py:
2865           new documentation while digging through the code
2867 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2869         * buildbot/changes/changes.py:
2870         * buildbot/changes/p4poller.py:
2871         * buildbot/interfaces.py:
2872         * buildbot/process/base.py:
2873         * buildbot/process/builder.py:
2874         * buildbot/process/step.py:
2875         * buildbot/process/step_twisted.py:
2876         * buildbot/slave/bot.py:
2877         * buildbot/slave/commands.py:
2878         * buildbot/status/builder.py:
2879           fix all docstrings to make epydoc happy.  In the process of fixing
2880           some, I also moved pieces of docs, and removed some deprecated
2881           documentation
2883 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2885         * buildbot/process/builder.py:
2886         * buildbot/process/interlock.py:
2887         * buildbot/process/process_twisted.py:
2888         * buildbot/process/step.py:
2889           BuildProcess -> Build, as it looks like that's what happened
2890         * buildbot/process/base.py:
2891         * buildbot/process/factory.py:
2892           update epydoc stuff
2894 2005-04-17  Brian Warner  <warner@lothar.com>
2896         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2897         update compile command to accomodate the Twisted split.. now
2898         instead of './setup.py build_ext -i', you do './setup.py all
2899         build_ext -i', to run build_ext over all sub-projects.
2900         (FullTwistedBuildFactory): same
2901         (TwistedReactorsBuildFactory): same
2903         * buildbot/status/html.py (TextLog.finished): null out self.req
2904         when we're done, otherwise the reference cycle of TextLog to .req
2905         to .notifications to a Deferred to TextLog.stop keeps them from
2906         being collected, and consumes a huge (610MB on pyramid at last
2907         check) amount of memory.
2909 2005-04-11  Brian Warner  <warner@lothar.com>
2911         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2912         normalize the VC-repository location.. makes SVN happier with
2913         certain test environments.
2915         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2916         RemoteShellCommand gets its own .env dictionary, so that code in
2917         start() doesn't mutate the original. I think this should fix the
2918         step_twisted.Trial problem where multiple identical components
2919         kept getting added to PYTHONPATH= over and over again.
2921         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2922         adding epydoc-format docstrings to many classes. Thanks to Thomas
2923         Vander Stichele for the patches.
2924         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2925         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2926         * buildbot/slave/bot.py, commands.py, registry.py: same
2928 2005-04-05  Brian Warner  <warner@lothar.com>
2930         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2931         preserve timestamps, helps incremental builds of large trees.
2932         Patch from Rene Rivera.
2934         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2935         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2936         for the catch.
2938 2005-04-03  Brian Warner  <warner@lothar.com>
2940         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2941         with one dict, apparently exec has some scoping bugs when used
2942         with both global/local dicts. Thanks to Nathaniel Smith for the
2943         catch.
2945 2005-04-02  Brian Warner  <warner@lothar.com>
2947         * buildbot/process/step_twisted.py (countFailedTests): the new
2948         trial in Twisted-2.0 emits a slightly different status line than
2949         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2950         mistakenly think the test count is unparseable.
2951         (Trial.start): note that for some reason each build causes another
2952         copy of self.testpath to be prepended to PYTHONPATH. This needs to
2953         be fixed but I'm not sure quite where the problem is.
2955 2005-04-01  Brian Warner  <warner@lothar.com>
2957         * buildbot/test/test_run.py (Run.testMaster): change some uses of
2958         deferredResult to avoid hangs/warnings under twisted-2.0
2959         (RunMixin.tearDown): same
2960         (RunMixin.shutdownSlave): same
2961         (Disconnect.testIdle1): same
2962         (Disconnect.testBuild2): same: wait one second after the build
2963         finishes for test to really be done.. this should be cleaned up to
2964         avoid wasting that second. Builder.detach uses a callLater(0),
2965         either that should be done in-line (something else needed that
2966         behavior), or it should return a Deferred that fires when the
2967         builder is really offline.
2968         (Disconnect.testBuild3): same
2969         (Disconnect.testDisappear): same
2971         * buildbot/test/test_web.py: rearrange server-setup and teardown
2972         code to remove unclean-reactor warnings from twisted-2.0
2974         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2975         so the tests don't hang under twisted-2.0
2977 2005-03-31  Brian Warner  <warner@lothar.com>
2979         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2980         caused a warning each time the master changed our set of builders
2982         * buildbot/status/builder.py (BuildStatus.saveYourself): under
2983         w32, don't unlink the file unless it already exists. Thanks to
2984         Baptiste Lepilleur for the catch.
2985         (BuilderStatus.saveYourself): same
2987 2005-02-01  Brian Warner  <warner@lothar.com>
2989         * buildbot/status/html.py (TextLog.getChild): use a /text child
2990         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2991         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2992         logfile as text/plain (no markup, no headers). This replaces the
2993         previous scheme (which used an ?text=1 argument), and gets us back
2994         to a relative link (which works better when the buildbot lives
2995         behind another web server, such as Apache configured as a reverse
2996         proxy). Thanks to Gerald Combs for spotting the problem.
2998         * buildbot/__init__.py (version): bump to 0.6.2+ while between
2999         releases
3001 2004-12-13  Brian Warner  <warner@lothar.com>
3003         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3005         * debian/changelog: update for 0.6.2
3006         * NEWS: finalize for 0.6.2
3008 2004-12-11  Brian Warner  <warner@lothar.com>
3010         * NEWS: bring it up to date
3012         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3013         detection code. Require some sign of life from the buildmaster
3014         every BotFactory.keepaliveInterval seconds. Provoke this
3015         indication at BotFactory.keepaliveTimeout seconds before the
3016         deadline by sending a keepalive request. We don't actually care if
3017         that request is answered in a timely fashion, what we care about
3018         is that .activity() is called before the deadline. .activity() is
3019         triggered by any PB message from the master (including an ack to
3020         one of the slave's status-update messages). With this new scheme,
3021         large status messages over slow pipes are OK, as long as any given
3022         message can be sent (and thus acked) within .keepaliveTimeout
3023         seconds (which defaults to 30).
3024         (SlaveBuilder.remote_startCommand): record activity
3025         (SlaveBuilder.ackUpdate): same
3026         (SlaveBuilder.ackComplete): same
3027         (BotFactory.gotPerspective): same
3028         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3030 2004-12-09  Brian Warner  <warner@lothar.com>
3032         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3033         debug message
3035         * buildbot/process/step_twisted.py (Trial._commandComplete):
3036         update self.cmd when we start the 'cat test.log' transfer. Without
3037         this, we cannot interrupt the correct RemoteCommand when we lose
3038         the connection.
3040         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3041         trying to tell the slave to stop the command if we're already
3042         inactive, or if we no longer have a .remote
3044         * buildbot/process/builder.py (Builder._detached): don't let an
3045         exception in currentBuild.stopBuild() prevent the builder from
3046         being marked offline
3048 2004-12-07  Brian Warner  <warner@lothar.com>
3050         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3051         KeyError that happens when you ask for a non-existent Builder, and
3052         translate it into a UsageError.
3054         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3055         losing the slave in the middle of a remote step is handled too
3057         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3058         be a Failure, so be sure to stringify it before using it as the
3059         contents of the 'interrupt' logfile
3060         (RemoteCommand.interrupt): use stringified 'why' in
3061         remote_interruptCommand too, just in case
3063 2004-12-06  Brian Warner  <warner@lothar.com>
3065         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3066         instead of 'tla update', which is more efficient in case we've
3067         missed a couple of patches since the last update.
3069         * debian/changelog: update for previous (0.6.1) release. Obviously
3070         this needs to be handled better.
3072 2004-12-05  Brian Warner  <warner@lothar.com>
3074         * NEWS: update for stuff since last release
3076         * buildbot/master.py (DebugPerspective.attached): return 'self', to
3077         match the maybeDeferred change in Dispatcher.requestAvatar
3078         * buildbot/changes/pb.py (ChangePerspective.attached): same
3079         * buildbot/status/client.py (StatusClientPerspective.attached): same
3080         * buildbot/process/builder.py (Builder._attached3): same
3081         * buildbot/pbutil.py (NewCredPerspective.attached): same
3083         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3084         the date to the top-most box, if it is not the same as today's
3085         date.
3087         * docs/slave.xhtml: provide a buildslave setup checklist
3089         * docs/source.xhtml (Arch): correct terminology
3091 2004-12-04  Brian Warner  <warner@lothar.com>
3093         * buildbot/test/test_slavecommand.py: use sys.executable instead
3094         of hard-coding 'python' for child commands, might help portability
3096         * docs/examples/twisted_master.cfg: update to current usage
3098         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3099         'stop build' command to the IRC bot
3101         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3102         message that broke PBChangeSource
3104         * buildbot/slave/bot.py: clean up shutdown/lose-master code
3105         (SlaveBuilder): make some attributes class-level, remove the old
3106         "update queue" which existed to support resuming a build after the
3107         master connection was lost. Try to reimplement that feature later.
3108         (SlaveBuilder.stopCommand): clear self.command when the
3109         SlaveCommand finishes, so that we don't try to kill a leftover one
3110         at shutdown time.
3111         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3112         .finishCommand
3114         * buildbot/slave/commands.py (SourceBase): set self.command for
3115         all VC commands, so they can be interrupted.
3117 2004-12-03  Brian Warner  <warner@lothar.com>
3119         * buildbot/master.py: clean up slave-handling code, to handle
3120         slave-disconnect and multiple-connect better
3121         (BotPerspective): make these long-lasting, exactly one per bot
3122         listed in the config file.
3123         (BotPerspective.attached): if a slave connects while an existing
3124         one appears to still be connected, disconnect the old one first.
3125         (BotPerspective.disconnect): new method to forcibly disconnect a
3126         buildslave. Use some hacks to empty the transmit buffer quickly to
3127         avoid the long (20-min?) TCP timeout that could occur if the old
3128         slave has dropped off the net.
3129         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3130         own their own SlaveStatus objects. Remove .attached/.detached, add
3131         .addSlave/.removeSlave, treat slaves like Builders (config file
3132         parsing sends deltas to the BotMaster). Inform the slave
3133         instances, i.e. the BotPerspective, about addBuilder and
3134         removeBuilder.
3135         (BotMaster.getPerspective): turns into a single dict lookup
3136         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3137         which gives BotPerspective.attached a chance to disconnect the old
3138         slave first.
3139         (BuildMaster.loadConfig): add code (disabled) to validate that all
3140         builders use known slaves (listed in c['bots']). The check won't
3141         work with tuple-specified builders, which are deprecated but not
3142         yet invalid, so the check is disabled for now.
3143         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3144         routine, do the add/changed/removed dance with them like we do
3145         with builders.
3146         (BuildMaster.loadConfig_Sources): move source-config into a
3147         separate routine too
3149         * buildbot/status/builder.py (Status.getSlave): get the
3150         SlaveStatus object from the BotPerspective, not the BotMaster.
3152         * buildbot/test/test_run.py: bunch of new tests for losing the
3153         buildslave at various points in the build, handling a slave that
3154         connects multiple times, and making sure we can interrupt a
3155         running build
3157         * buildbot/slave/bot.py (BuildSlave): make it possible to use
3158         something other than 'Bot' for the Bot object, to make certain
3159         test cases easier to write.
3160         (BuildSlave.waitUntilDisconnected): utility method for testing
3162 2004-11-30  Brian Warner  <warner@lothar.com>
3164         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3166         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3167         argument, return a Deferred that always fires with True or False.
3168         I don't use an errback to indicate 'ping failed' so that callers
3169         are free to ignore the deferred without causing spurious errors in
3170         the logs.
3171         * buildbot/process/builder.py (BuilderControl.ping): implement it
3173         * buildbot/test/test_run.py (Status.testDisappear): test ping
3174         (Status.disappearSlave): fix it
3176 2004-11-30  Brian Warner  <warner@lothar.com>
3178         * buildbot/interfaces.py (IBuildControl): add .stopBuild
3179         (IBuilderControl): add .getBuild(num), only works for the current
3180         build, of course, although it might be interesting to offer
3181         something for builds in the .waiting or .interlocked state.
3183         * buildbot/process/base.py (Build): have .stopBuild just do the
3184         interrupt, then let the build die by itself.
3185         (BuildControl): add .stopBuild, and add a point-event named
3186         'interrupt' just after the build so status viewers can tell that
3187         someone killed it.
3188         (BuilderControl): add .getBuild
3190         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3191         stops when you kill it, good for testing
3192         (ShellCommand.interrupt): add a logfile named 'interrupt' which
3193         contains the 'reason' text.
3195         * buildbot/status/html.py: Add Stop Build button, if the build can
3196         still be stopped. Send a Redirect (to the top page) one second
3197         later, hopefully long enough for the interrupt to have an effect.
3198         Move make_row() up to top-level to share it between Stop Build and
3199         Force Build.
3201         * buildbot/slave/commands.py: only kill the child process once
3203         * buildbot/test/test_run.py: add testInterrupt
3205 2004-11-29  Brian Warner  <warner@lothar.com>
3207         * buildbot/process/base.py: Refactor command interruption. The
3208         Build is now responsible for noticing that the slave has gone
3209         away: Build.lostRemote() interrupts the current step and makes
3210         sure that no further ones will be started.
3211         
3212         * buildbot/process/builder.py: When the initial remote_startBuild
3213         message fails, log it: this usually indicates that the slave has
3214         gone away, but we don't really start paying attention until they
3215         fail to respond to the first step's command.
3217         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3218         slave disconnect. Now sports a new interrupt() method. Error
3219         handling was simplified a lot by chaining deferreds, so
3220         remoteFailed/remoteComplete were merged into a single
3221         remoteComplete method (which can now get a Failure object).
3222         Likewise failed/finished were merged into just _finished.
3223         (BuildStep): Add interrupt(why) method, and if why is a
3224         ConnectionLost Failure then the step is failed with some useful
3225         error text.
3227         * buildbot/slave/bot.py: stop the current command when the remote
3228         Step reference is lost, and when the slave is shut down.
3229         (Bot): make it a MultiService, so it can have children. Use
3230         stopService to tell when the slave is shutting down.
3231         (SlaveBuilder): make it a Service, and a child of the Bot. Add
3232         remote_interruptCommand (which asks the current SlaveCommand to
3233         stop but allows it to keep emitting status messages), and
3234         stopCommand (which tells it to shut up and die).
3236         * buildbot/slave/commands.py: make commands interruptible
3237         (ShellCommand.kill): factor out os.kill logic
3238         (Command): factor out setup()
3239         (Command.sendStatus): don't send status if .running is false, this
3240         happens when the command has been halted.
3241         (Command.interrupt): new method, used to tell the command to die
3242         (SlaveShellCommand): implement .interrupt
3243         (DummyCommand): implement .interrupt
3244         (SourceBase, etc): factor out setup(), don't continue substeps if
3245         .interrupted is set
3247         * buildbot/status/builder.py: fix all waitUntilFinished() methods
3248         so they can be called after finishing
3250         * buildbot/test/test_run.py: new tests for disconnect behavior,
3251         refactor slave-shutdown routines, add different kinds of
3252         slave-shutdown
3254 2004-11-27  Brian Warner  <warner@lothar.com>
3256         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3257         method to express ETA time like "2m45s" instead of "165 seconds"
3259 2004-11-24  Brian Warner  <warner@lothar.com>
3261         * buildbot/test/test_vc.py (VC.testArch): unregister the test
3262         archive after the test completes, to avoid cluttering the user's
3263         'tla archives' listing with a bogus entry. Arch doesn't happen to
3264         provide any way to override the use of ~/.arch-params/, so there
3265         isn't a convenient way to avoid touching the setup of the user who
3266         runs the test.
3267         (VC_HTTP.testArchHTTP): same
3269 2004-11-23  Brian Warner  <warner@lothar.com>
3271         * buildbot/status/html.py (TextLog): split render() up into
3272         render_HEAD and render_GET. Use a Producer when sending log
3273         chunks, to reduce memory requirements and avoid sending huge
3274         non-Banana-able strings over web.distrib connections. Requires
3275         peeking under the covers of IStatusLog.
3276         (TextLog.resumeProducing): fix the "as text" link, handle client
3277         disconnects that occur while we're still sending old chunks.
3279         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3280         use defer.succeed, not the non-existent defer.success
3281         (LogFile.waitUntilFinished): same
3282         (LogFile.subscribe): don't add watchers to a finished logfile
3284         * buildbot/__init__.py (version): bump to 0.6.1+ while between
3285         releases
3287 2004-11-23  Brian Warner  <warner@lothar.com>
3289         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3291 2004-11-23  Brian Warner  <warner@lothar.com>
3293         * NEWS: update for the 0.6.1 release
3294         * MANIFEST.in: add new files
3296         * README (INSTALLATION): explain how to enable the extra VC tests
3298         * buildbot/status/builder.py (LogFile): add .runEntries at the class
3299         level to, so old pickled builds can be displayed ok
3301 2004-11-22  Brian Warner  <warner@lothar.com>
3303         * NEWS: summarize updates since last release
3305         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3306         Yoz Grahame. Closes SF#1050138.
3308         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3309         SF#1042563.
3311         * buildbot/process/step_twisted.py (Trial): update docs a bit
3313         * docs/factories.xhtml: fix Trial factory docs to match reality.
3314         Closes: SF#1049758.
3316         * buildbot/process/factory.py (Trial.__init__): add args for
3317         randomly= and recurse=, making them available to instantiators
3318         instead of only to subclassers. Closes: SF#1049759.
3320 2004-11-15  Brian Warner  <warner@lothar.com>
3322         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3323         try to teach the Quick factory to use multiple versions of python
3325 2004-11-12  Brian Warner  <warner@lothar.com>
3327         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3328         safer w32-compatible approach, and only use it on windows
3329         (BuildStatus.saveYourself): same
3331 2004-11-11  Brian Warner  <warner@lothar.com>
3333         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3334         it: one string merge per chunk. There are now separate .entries
3335         and .runEntries lists: when enumerating over all chunks, make sure
3336         to look at both.
3337         * buildbot/test/test_status.py (Log): more tests
3339         * buildbot/status/builder.py (LogFile.addEntry): Merge string
3340         chunks together, up to 10kb per chunk. This ought to cut down on
3341         the CPU-burning overhead of large log files. Thanks to Alexander
3342         Staubo for spotting the problem.
3343         * buildbot/test/test_status.py (Log): tests for same
3345 2004-11-10  Brian Warner  <warner@lothar.com>
3347         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3348         header to outbound mail
3349         * buildbot/test/test_status.py (Mail.testBuild1): test for same
3351 2004-11-08  Brian Warner  <warner@lothar.com>
3353         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3354         can't do os.rename() onto an existing file, so catch the exception
3355         and unlink the target file first. This introduces a slight window
3356         where the existing file could be lost, but the main failure case
3357         (disk full) should still be handled safely.
3358         (BuildStatus.saveYourself): same
3360         * buildbot/changes/pb.py (ChangePerspective): use a configurable
3361         separator character instead of os.sep, because the filenames being
3362         split here are coming from the VC system, which can have a
3363         different pathname convention than the local host. This should
3364         help a buildmaster running on windows that uses a CVS repository
3365         which runs under unix.
3366         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3368         * buildbot/process/step_twisted.py (Trial.createSummary): survive
3369         when there are no test failures to be parsed
3371         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3372         instead of the unix-specific os.system("cp"), thanks to Elliot
3373         Murphy for this and the other buildbot-vs-windows catches.
3374         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3376         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3377         echo the command as it is run
3379         * setup.py: install sample.mk too, not just sample.cfg
3380         (scripts): install contrib/windows/buildbot.bat on windows
3382 2004-11-07  Brian Warner  <warner@lothar.com>
3384         * buildbot/process/builder.py (Builder._detached): clear the
3385         self.currentBuild reference, otherwise the next build will be
3386         skipped because we think the Builder is already in use.
3388         * docs/examples/twisted_master.cfg: update to match current usage
3389         on the Twisted buildbot
3391 2004-10-29  Brian Warner  <warner@lothar.com>
3393         * buildbot/status/mail.py (MailNotifier): fix typo in docs
3395 2004-10-28  Brian Warner  <warner@lothar.com>
3397         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3398         have separate doVCUpdate/doVCFull methods. Catch an update failure
3399         and respond by clobbering the source directory and re-trying. This
3400         will handle local changes (like replacing a file with a directory)
3401         that will cause CVS and SVN updates to fail.
3402         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3404         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3405         python-2.4 warning
3407 2004-10-19  Brian Warner  <warner@lothar.com>
3409         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3411         * buildbot/status/html.py (StatusResourceTestResults): display any
3412         TestResults that the Build might have
3413         (StatusResourceTestResult): and the logs for each TestResult
3414         (StatusResourceBuild): add link from the per-build page
3416 2004-10-15  Brian Warner  <warner@lothar.com>
3418         * buildbot/process/step_twisted.py (Trial.createSummary): parse
3419         the 'problems' portion of stdout, add TestResults to our build
3420         * buildbot/test/test_twisted.py (Parse.testParse): test it
3422         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3423         to retrieve a dict of accumulated test results
3424         (ITestResult): define what a single test result can do
3425         * buildbot/status/builder.py (TestResult): implement ITestResult
3426         (BuildStatus.getTestResults): retrieve dict of TestResults
3427         (BuildStatus.addTestResult): add TestResults
3428         * buildbot/test/test_status.py (Results.testAddResults): test it
3430 2004-10-14  Brian Warner  <warner@lothar.com>
3432         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3433         instead of os.system("rm -rf") for win32 portability
3435         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3436         SignalMixin instead of starting/stopping the reactor, which is
3437         likely to cause problems with other tests
3439         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3440         self.copyComplete() call. Yoz Grahame makes the catch.
3442         * contrib/windows/buildbot.bat: helper script to deal with path
3443         issues. Thanks to Yoz Grahame.
3445         * buildbot/master.py (BuildMaster.startService): don't register a
3446         SIGHUP handler if the signal module has no SIGHUP attribute.
3447         Apparently win32 does this.
3449         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3451         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3452         test if the reactor can't offer UNIX sockets
3454         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3455         error introduced in the last commit. We really need that
3456         metabuildbot :).
3458 2004-10-12  Brian Warner  <warner@lothar.com>
3460         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3461         when describing a maildir source. Thanks to Stephen Davis.
3463         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3464         ETA seconds
3466         * buildbot/scripts/runner.py (createMaster): install Makefile too
3467         (start): add --no_save to 'start' command
3468         * buildbot/scripts/sample.mk: simple convenience Makefile with 
3469         start/stop/reload targets
3471         * buildbot/__init__.py (version): bump to 0.6.0+ while between
3472         releases
3474 2004-09-30  Brian Warner  <warner@lothar.com>
3476         * setup.py: Releasing buildbot-0.6.0
3478 2004-09-30  Brian Warner  <warner@lothar.com>
3480         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3481         test_trial.py from the source tarball until support is complete.
3483         * NEWS: update for 0.6.0 release
3484         * buildbot/__init__.py (version): same
3485         * README: same
3487         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3488         'source' command to tell users where to get the Buildbot source
3490         * docs/examples/*.cfg: update to modern standards
3492         * NEWS: update for release
3494         * buildbot/scripts/runner.py (createMaster): remove the
3495         -shutdown.tap stuff now that it isn't necessary
3496         (createSlave): same
3497         (start): launch buildbot.tap, not buildbot-shutdown.tap
3500         * buildbot/status/mail.py (Domain): shorten class name
3501         (MailNotifier): if lookup= is a string, pass it to Domain()
3502         * buildbot/test/test_status.py (Mail.testBuild1): new class name
3503         (Mail.testBuild2): test the string-to-Domain shortcut
3504         (Mail.testMail): fix test
3507         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3508         example config file
3510         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3511         more attributes on load
3512         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3513         to accomodate the whole waterfall page at once, and the thrashing
3514         results in a lot of unnecessary loads
3515         (BuildStatus.saveYourself): use binary pickles, not fluffy text
3516         (BuilderStatus.saveYourself): same
3517         (BuilderStatus.eventGenerator): stop generating on the first missing
3518         build. We assume that saved builds are deleted oldest-first.
3519         (BuildStepStatus.__getstate__): .progress might not exist
3521         * buildbot/changes/changes.py (ChangeMaster): make it
3522         serializable, in $masterdir/changes.pck
3523         (ChangeMaster.stopService): save on shutdown
3524         * buildbot/master.py (BuildMaster.loadChanges): load at startup
3525         * buildbot/test/test_config.py: load Changes before config file
3528         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3529         "Oh my god, you killed the command" header on a separate line
3531         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3532         skip over corrupted build pickles
3533         (BuilderStatus.getFullBuildByNumber): same
3534         (BuilderStatus.eventGenerator): skip over unavailable builds
3535         (BuildStatus.saveYourself): save builds to a .tmp file first, then
3536         do an atomic rename. This prevents a corrupted pickle when some
3537         internal serialization error occurs.
3538         (BuilderStatus.saveYourself): same
3540         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3541         the timeout for shell commands, it got lost somehow
3543         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3544         run out of build steps, return the rest of the builder events
3546         * buildbot/interfaces.py (IBuilderControl.ping): add method
3548         * buildbot/process/builder.py (BuilderControl.ping): move
3549         slave-ping to BuilderControl, and fix the failure case in the
3550         process (Event.finish() is the verb, Event.finished is the noun).
3552         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3553         through the BuilderControl instead of the BuilderStatus
3554         (EventBox): add adapter for builder.Event, allowing builder events to
3555         be displayed in the waterfall display
3557         * buildbot/master.py (BotMaster.stopService): add a 'master
3558         shutdown' event to the builder's log
3559         (BuildMaster.startService): and a 'master started' on startup
3561         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3562         builder events into the BuildStep event stream
3563         (Status.builderAdded): add a 'builder created' event
3566         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3567         command to announce the completion of a running build
3568         (IrcStatusBot.command_FORCE): announce when the build finishes
3570         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3571         don't evict unfinished builds from the cache: they must stay in
3572         the full-cache until their logfiles have stopped changing. Make
3573         sure the eviction loop terminates if an unfinished build was hit.
3574         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3575         This lets exceptions be dumped in an email status message. Really
3576         we need LogFiles which contain both text and HTML, instead of two
3577         separate classes.
3578         (BuildStatus.__getstate__): handle self.finished=False
3579         (Status.builderAdded): if the pickle is corrupted, abandon the
3580         history and create a new BuilderStatus object.
3582         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3583         self.progress attribute, helped one test which doesn't fully set
3584         up the Build object.
3586         * buildbot/interfaces.py (IStatusLogStub): split out some of the
3587         IStatusLog methods into an Interface that is implemented by "stub"
3588         logs, for which all the actual text chunks are on disk (in the
3589         pickled Build instance). To show the log contents, you must first
3590         adapt the stub log to a full IStatusLog object.
3592         * buildbot/status/builder.py (LogFileStub): create separate stub
3593         log objects, which can be upgraded to a real one if necessary.
3594         (LogFile): make them persistable, and let them stubify themselves
3595         (HTMLLogFile): same
3596         (BuildStepStatus): same
3597         (BuildStatus): same
3598         (BuildStatus.saveYourself): save the whole build out to disk
3599         (BuilderStatus): make it persistable
3600         (BuilderStatus.saveYourself): save the builder to disk
3601         (BuilderStatus.addFullBuildToCache): implement two caches which
3602         hold Build objects: a small one which holds full Builds, and a
3603         larger one which holds "stubbed" Builds (ones with their LogFiles
3604         turned into LogFileStubs). This reduces memory usage by the
3605         buildmaster by not keeping more than a few (default is 2) whole
3606         build logs in RAM all the time.
3607         (BuilderStatus.getBuild): rewrite to pull from disk (through the
3608         cache)
3609         (BuilderStatus.eventGenerator): rewrite since .builds went away
3610         (BuilderStatus.buildStarted): remove the .builds array. Add the
3611         build to the "full" cache when it starts.
3612         (BuilderStatus._buildFinished): save the build to disk when it
3613         finishes
3614         (Status): give it a basedir (same as the BuildMaster's basedir)
3615         where the builder pickles can be saved
3616         (Status.builderAdded): create the BuilderStatus ourselves, by
3617         loading a pickle from disk (or creating a new instance if there
3618         was none on disk). Return the BuilderStatus so the master can glue
3619         it into the new Builder object.
3621         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3622         all BuilderStatuses to save themselves out to disk. This is in
3623         lieu of saving anything important in the main Application pickle
3624          (the -shutdown.tap file).
3625         (BuildMaster.__init__): give Status() a basedir for its files
3626         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3627         to get the BuilderStatus, then give it to the Builder (instead of
3628         doing it the other way around). It's ok if the status announces
3629         the new Builder before it's really ready, as the outside world can
3630         only see the BuilderStatus object anyway (and it is ready before
3631         builderAdded returns). Use the builder's "builddir" (which
3632         normally specifies where the slave will run the builder) as the
3633         master's basedir (for saving serialized builds).
3635         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3636         coerce the logfile to IStatusLog before trying to get the text
3637         chunks out of it. This will pull the full (non-stubified) Build in
3638         from disk if necessary.
3639         (TextLog): fix the adapter registration
3641         * buildbot/test/test_control.py (Force.setUp): create the basedir
3642         * buildbot/test/test_web.py: same
3643         * buildbot/test/test_vc.py (SetupMixin.setUp): same
3644         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3645         * buildbot/test/test_run.py (Run.testMaster): same
3646         (Status.setUp): same
3648 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
3650         * buildbot/status/html.py (Waterfall.__init__): store actual
3651         allowForce flag passed in rather than using True for everyone;
3652         make sure setting it to False doesn't cause a NameError
3653         (Waterfall.setup).
3654         (StatusResourceBuilder.__init__) add the builder name to the page
3655         title.
3656         (StatusResourceBuilder.body) move HTML generation for a name/value
3657         row into a helper method (StatusResourceBuilder.make_row); only
3658         generate the "Force Build" form if allowForce was True and the
3659         slave is connected.  Use class attributes in the generated HTML to
3660         spread a little CSS-joy.
3662 2004-09-28  Brian Warner  <warner@lothar.com>
3664         * buildbot/process/step_twisted.py (Trial.createSummary): fix
3665         warning-scanner to not ignore things like
3666         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3668         * buildbot/status/html.py (StatusResource.control): add some
3669         class-level values for .control in an attempt to make upgrading
3670         smoother
3672         * buildbot/util.py (ComparableMixin): survive missing attributes,
3673         such as when a class is modified and we're comparing old instances
3674         against new ones
3676         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3677         failure handling, remove a redundant try/except block. Don't
3678         return the full traceback to the IRC channel.
3679         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3680         error messages. Get ETA properly.
3682         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3683         the reason, since (at least) IRC message will have <> in them.
3684         (StatusResourceBuilder.__init__): take an IBuilderControl
3685         (StatusResourceBuilder.force): use the IBuilderControl we get in
3686         the constructor instead of trying to make our own. Catch the
3687         new exceptions and ignore them for now (until we make an
3688         intermediate web page where we could show the error message)
3689         (StatusResource): create with an IControl, use it to give an
3690         IBuilderControl to all children
3691         (Waterfall): take an allowForce= option, pass an IControl object
3692         to StatusResource if it is True
3694         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3696         * buildbot/master.py (BotPerspective.perspective_forceBuild):
3697         catch new exceptions and return string forms
3699         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3700         * buildbot/process/builder.py (Builder.forceBuild): raise them
3701         * buildbot/test/test_control.py (Force.testNoSlave): new test
3702         (Force.testBuilderInUse): same
3705         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3707         * buildbot/test/test_run.py: use IControl
3708         * buildbot/test/test_vc.py: same
3710         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3711         to use IControl. Still offline.
3712         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3714         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3715         who=None so periodic builds don't send out status mail
3716         (Builder.forceBuild): include reason in the log message
3717         (BuilderControl.forceBuild): rename 'name' to 'who'
3719         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3720         'who' parameter, but make it None by default so builds forced by
3721         slave admins don't cause status mail to be sent to anybody
3722         (BotMaster.forceBuild): same. this method is deprecated.
3723         (DebugPerspective.perspective_forceBuild): same, use IControl.
3724         (DebugPerspective.perspective_fakeChange): use IControl..
3725         (Dispatcher.requestAvatar): .. so don't set .changemaster
3727         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3728         parameter to avoid confusion with the name of the builder
3731         * buildbot/status/mail.py: refine comment about needing 2.3
3733         * buildbot/status/html.py: move all imports to the top
3735         * buildbot/test/test_control.py: test new interfaces
3736         * buildbot/test/test_run.py (Status): handle new interfaces
3737         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3739         * buildbot/process/base.py (BuildControl): implement IBuildControl
3740         and its lonely getStatus() method
3742         * buildbot/process/builder.py (BuilderControl): implement
3743         IBuilderControl, obtained by adapting the Builder instance
3744         (Builder.startBuild): return a BuilderControl instead of a
3745         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3746         accomplish the same thing.
3748         * buildbot/master.py: move all import statements to the top
3749         (Control): implement IControl, obtained by adapting the
3750         BuildMaster instance.
3752         * buildbot/interfaces.py: add IControl, IBuilderControl, and
3753         IBuildControl. These are used to force builds. Eventually they
3754         will provide ways to reconfigure the Builders, pause or abandon a
3755         Build, and perhaps control the BuildMaster itself.
3757 2004-09-26  Brian Warner  <warner@lothar.com>
3759         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3760         ends up comparing us against something without a .__class__
3762 2004-09-24  Brian Warner  <warner@lothar.com>
3764         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3765         usage text right.
3767         * Makefile: add 'deb-snapshot' target, to create a timestamped
3768         .deb package
3770         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3772 2004-09-23  Brian Warner  <warner@lothar.com>
3774         * buildbot/__init__.py (version): move version string here
3775         * setup.py: get version string from buildbot.version
3776         * buildbot/status/html.py (WaterfallStatusResource.body): add
3777         buildbot version to the page footer
3778         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3779         version when asked
3781         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3782         slaves, let the second know where the first one is coming from
3783         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3784         see our exceptions. It would be nice if there were a way to just
3785         send them the exception type and value, not the full traceback.
3788         * buildbot/status/mail.py (MailNotifier): add a new argument
3789         sendToInterestedUsers=, which can be set to False to disable the
3790         usual send-to-blamelist behavior.
3791         (top): handle python-2.2 which has no email.MIMEMultipart
3792         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3793         (MailNotifier.disownServiceParent): unsubscribe on removal
3795         * buildbot/test/test_status.py (Mail.testBuild2): test it
3798         * buildbot/status/progress.py (Expectations.wavg): tolerate
3799         current=None, which happens when steps start failing badly
3800         * buildbot/test/test_status.py (Progress.testWavg): test for it
3802         * buildbot/process/step.py (SVN.startVC): when the (old) slave
3803         doesn't understand args['revision'], emit a warning instead of
3804         bailing completely. Updating to -rHEAD is probably close enough.
3806         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3808         * buildbot/test/test_status.py: at least import bb.status.client
3809         even if we don't have any test coverage for it yet
3811         * contrib/svn_buildbot.py: don't require python2.3
3812         (main): wait, do require it (for sets.py), but explain how to
3813         make it work under python2.2
3815 2004-09-23  Brian Warner  <warner@lothar.com>
3817         * contrib/svn_buildbot.py: include the revision number in the Change
3819         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3820         using util.now() because FreshCVS is a realtime service
3822         * buildbot/status/event.py: delete dead code
3823         * buildbot/process/step.py: don't import dead Event class
3824         * buildbot/process/step_twisted.py: same
3825         * buildbot/status/builder.py: same
3826         * buildbot/status/client.py: same
3828         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3830         * buildbot/changes/changes.py (Change): set .when from an __init__
3831         argument (which defaults to now()), rather than having
3832         ChangeMaster.addChange set it later.
3833         (ChangeMaster.addChange): same
3835         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3836         (parseSyncmail): same. Just use util.now() for now.
3837         (parseBonsaiMail): parse the timestamp field for when=
3839         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3840         instead of setting .when after the fact
3842 2004-09-22  slyphon
3844         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3845         results when the target project uses retrial. Still under
3846         development.
3847         * buildbot/test/test_trial.py: same
3849 2004-09-21  Brian Warner  <warner@lothar.com>
3851         * buildbot/status/mail.py (MailNotifier.__init__): include
3852         success/warnings/failure in the Subject line
3853         (MailNotifier.buildMessage): add the buildbot's URL to the body,
3854         use step.logname for the addLogs=True attachment filenames
3855         * buildbot/test/test_status.py (Mail): test Subject lines
3856         (Mail.testLogs): test attachment filenames
3858         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3859         accept a 'who' argument from the debug tool
3860         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3861         * contrib/debug.glade: add text box to set 'who'
3863         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3864         .getBuilderName with .getBuilder().getName(), more flexible
3865         (IStatusLog.getName): logs have short names, but you can prefix
3866         them with log.getStep().getName() to make them more useful
3867         * buildbot/status/builder.py: same
3868         * buildbot/status/client.py: same
3869         * buildbot/status/html.py: same
3870         * buildbot/test/test_run.py (Status.testSlave): same
3871         * buildbot/process/step.py: tweak logfile names
3873         * buildbot/status/mail.py (MailNotifier): add lookup, change
3874         argument to extraRecipients. The notifier is now aimed at sending
3875         mail to the people involved in a particular build, with additional
3876         constant recipients as a secondary function.
3878         * buildbot/test/test_status.py: add coverage for IEmailLookup,
3879         including slow-lookup and failing-lookup. Make sure the blamelist
3880         members are included.
3882         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3883         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3884         (IBuildStatus.getInterestedUsers): new method
3885         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3886         * buildbot/status/client.py (remote_getResponsibleUsers): same
3887         * buildbot/status/html.py (StatusResourceBuild.body): same
3888         * buildbot/test/test_run.py (Status.testSlave): same
3890 2004-09-20  Brian Warner  <warner@lothar.com>
3892         * docs/users.xhtml: update concepts
3894         * Makefile: add a convenience makefile, for things like 'make
3895         test'. It is not included in the source tarball.
3897 2004-09-16  Brian Warner  <warner@lothar.com>
3899         * NEWS: mention /usr/bin/buildbot, debian/*
3901         * debian/*: add preliminary debian packaging. Many thanks to
3902         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3903         it considerably since it left their hands, I am responsible for
3904         all breakage that's resulted.
3906         * bin/buildbot: create a top-level 'buildbot' command, to be
3907         installed in /usr/bin/buildbot . For now it's just a simple
3908         frontend to mktap/twistd/kill, but eventually it will be the entry
3909         point to the 'try' command and also a status client. It is also
3910         intended to support the upcoming debian-packaging init.d scripts.
3911         * buildbot/scripts/runner.py: the real work is done here
3912         * buildbot/scripts/__init__.py: need this too
3913         * buildbot/scripts/sample.cfg: this is installed in new
3914         buildmaster directories
3915         * setup.py: install new stuff
3917 2004-09-15  Brian Warner  <warner@lothar.com>
3919         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3920         'file:' schema (the version shipped with OS-X was built without the
3921         ra_local plugin).
3922         (SetupMixin.tearDown): stop the goofy twisted.web timer which
3923         updates the log-timestamp, to make sure it isn't still running after
3924         the test finishes
3926         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3927         values to the config file.
3928         * docs/examples/hello.cfg: add examples
3929         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3930         * buildbot/status/builder.py (Status.getProjectURL): implement them
3931         * buildbot/master.py (BuildMaster.loadConfig): set them from config
3932         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3933         * buildbot/status/html.py (WaterfallStatusResource): display them
3936         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3937         certain error cases don't suffer a secondary exception.
3938         (top): Skip tests if the corresponding VC tool is not installed.
3940         * buildbot/process/factory.py (Trial): introduce separate
3941         'buildpython' and 'trialpython' lists, since trialpython=[] is
3942         what you want to invoke /usr/bin/python, whereas ./setup.py is
3943         less likely to be executable. Add env= parameter to pass options
3944         to test cases (which is how I usually write tests, I don't know if
3945         anyone else does it this way).
3947         * buildbot/process/step_twisted.py (Trial): handle python=None.
3948         Require 'testpath' be a string, not a list. Fix tests= typo.
3949         (Trial.start): sanity-check any PYTHONPATH value for stringness.
3951         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3952         way to deal with the possibility of removing the disconnect notify
3953         twice.
3954         (CVS): add a 'login' parameter to give a password to 'cvs login',
3955         commonly used with pserver methods (where pw="" or pw="guest")
3957         * buildbot/slave/commands.py (SourceBase): move common args
3958         extraction and setup() to __init__, so everything is ready by the
3959         time setup() is called
3960         (CVS.start): call 'cvs login' if a password was supplied
3961         (ShellCommand): special-case PYTHONPATH: prepend the master's
3962         value to any existing slave-local value.
3964         * buildbot/process/builder.py (Builder.updateBigStatus): if we
3965         don't have a remote, mark the builder as Offline. This whole
3966         function should probably go away and be replaced by individual
3967         deltas.
3968         (Builder.buildFinished): return the results to the build-finished
3969         deferred callback, helps with testing
3971 2004-09-14  Brian Warner  <warner@lothar.com>
3973         * buildbot/test/test_vc.py: put all the repositories needed to run
3974         the complete tests into a single small (1.3MB) tarball, so I can
3975         make that tarball available on the buildbot web site. Test HTTP
3976         access (for Arch and Darcs) by spawning a temporary web server
3977         while the test runs.
3979         * docs/users.xhtml: new document, describe Buildbot's limited
3980         understanding of different human users
3982         * buildbot/test/test_vc.py: rearrange test cases a bit
3984         * buildbot/process/step_twisted.py (Trial): handle testpath=
3985         * buildbot/process/factory.py (Trial): update to use step.Trial
3987         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3989         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3990         the overall build text (which gives you 'failed 2 tests' rather
3991         than just 'failed')
3992         (BuildStepStatus.text2): default to [], not None
3994         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3995         must be a list
3997 2004-09-12  Brian Warner  <warner@lothar.com>
3999         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4000         log the whole exception if it's just an AttributeError (old slave)
4002         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4003         so (e.g.) sub-commands can be run in the right directory.
4004         (ShellCommand.start): accept an optional errorMessage= argument
4005         to make life easier for SVN.start
4006         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4007         headers
4008         (ShellCommand.start): move ['dir'] compatibility hack..
4009         (RemoteShellCommand.start): .. to here so everyone can use it
4011         * buildbot/process/step_twisted.py (Trial): use .workdir
4013         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4014         text displayed when debuild fails completely
4015         (Trial): snarf _trial_temp/test.log from the slave and display it
4017 2004-09-11  Brian Warner  <warner@lothar.com>
4019         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4021         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4022         set to 'twisted', so --recurse can find twisted/web/test/*, etc
4024         * buildbot/process/step.py (ShellCommand): call .createSummary
4025         before .evaluateCommand instead of the other way around. This
4026         makes it slightly easier to count warnings and then use that to
4027         set results=WARNINGS
4028         * buildbot/process/step_twisted.py: cosmetic, swap the methods
4030         * buildbot/process/base.py (Build.buildFinished): update status
4031         before doing progress. It's embarrassing for the build to be stuck
4032         in the "building" state when an exceptions occurs elsewhere..
4034         * buildbot/status/progress.py (Expectations.expectedBuildTime):
4035         python2.2 doesn't have 'sum'
4037         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4038         to prevent clients from accidentally sorting it
4040         * buildbot/master.py (Manhole): add username/password
4041         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4042         c['manholePort'], deprecate old usage
4043         * docs/config.xhtml: document c['manhole']
4044         * docs/examples/hello.cfg: show example of using a Manhole
4047         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4048         pretend the slave is up to date
4050         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4051         the module, overlaps with 'log', the local variable
4053         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4055         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4056         new method to let Steps find out the version of their
4057         corresponding SlaveCommand.
4058         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4059         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4060         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4061         (SVN.startVC): same
4062         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4063         (Arch.startVC): same
4064         (P4Sync.startVC): same
4066         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4067         Deferred so we can catch errors in remote_startCommand
4068         (RemoteShellCommand.start): same
4070         * docs/examples/twisted_master.cfg: update sample config file
4072         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4073         after connectionMade() is called, not before. Close stdin at that
4074         point too.
4076         * buildbot/process/process_twisted.py: update to use Trial, clean
4077         up argument passing (move to argv arrays instead of string
4078         commands)
4080         * buildbot/process/step_twisted.py (Trial): new step to replace
4081         RunUnitTests, usable by any trial-using project (not just
4082         Twisted). Arguments have changed, see the docstring for details.
4084         * buildbot/process/base.py (Build.startBuild): this now returns a
4085         Deferred. Exceptions that occur during setupBuild are now
4086         caught better and lead to fewer build_status weirdnesses, like
4087         finishing a build that was never started.
4088         (Build.buildFinished): fire the Deferred instead of calling
4089         builder.buildFinished directly. The callback argument is this
4090         Build, everything else can be extracted from it, including the
4091         new build.results attribute.
4092         * buildbot/process/builder.py (Builder.startBuild): same
4093         (Builder.buildFinished): same, extract results from build
4095         * buildbot/process/step.py (ShellCommands): remove dead code
4097 2004-09-08  Brian Warner  <warner@lothar.com>
4099         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4100         doesn't try to use the leftover patched workdir
4101         (SourceStamp): test source-stamp computation for CVS and SVN
4103         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4104         patched workdir ('touch .buildbot-patched') so we don't try to
4105         update it later
4106         (SourceBase.start): add ['revision'] for all Source steps
4107         (CVS): change args: use ['branch'] for -r, remove ['files']
4108         (CVS.buildVC): fix revision/branch stuff
4109         (SVN): add revision stuff
4111         * buildbot/process/step.py (BuildStep.__init__): reject unknown
4112         kwargs (except 'workdir') to avoid silent spelling errors
4113         (ShellCommand.__init__): same
4114         (Source): new base class for CVS/SVN/etc. Factor out everything
4115         common, add revision computation (perform the checkout with a -D
4116         DATE or -r REVISION that gets exactly the sources described by the
4117         last Change), overridable with step.alwaysUseLatest. Add patch
4118         handling (build.getSourceStamp can trigger the use of a base
4119         revision and a patch).
4120         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4121         * docs/steps.xhtml: update docs
4122         * docs/source.xhtml: mention .checkoutDelay
4123         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4125         * buildbot/process/base.py (Build.setSourceStamp): add a
4126         .sourceStamp attribute to each Build. If set, this indicates that
4127         the build should be done with something other than the most
4128         recent source tree. This will be used to implement "try" builds.
4129         (Build.allChanges): new support method
4130         (Build.lastChangeTime): remove, functionality moved to Source steps
4131         (Build.setupBuild): copy the Step args before adding ['workdir'],
4132         to avoid modifying the BuildFactory (and thus triggering spurious
4133         config changes)
4136         * buildbot/status/html.py: rename s/commits/changes/
4137         (StatusResourceChanges): same
4138         (CommitBox.getBox): same, update URL
4139         (WaterfallStatusResource): same
4140         (StatusResource.getChild): same
4142         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4143         * contrib/debug.glade: add optional 'revision' to the fakeChange
4145         * buildbot/changes/changes.py (html_tmpl): display .revision
4146         (ChangeMaster.addChange): note .revision in log
4147         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4148         accept a ['revision'] attribute
4150         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4152         * buildbot/master.py (BotMaster.getPerspective): update the
4153         .connected flag in SlaveStatus when it connects
4154         (BotMaster.detach): and when it disconnects
4155         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4156         (BuildMaster.loadConfig_Builders): walk old list correctly
4158         * buildbot/test/test_config.py: fix prefix= usage
4160 2004-09-06  Brian Warner  <warner@lothar.com>
4162         * NEWS: mention P4
4164         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4165         poll a P4 depot looking for recent changes. Thanks to Dave
4166         Peticolas for the contribution. Probably needs some testing after
4167         I mangled it.
4169         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4170         requires manual client setup for each buildslave. Rather
4171         experimental. Thanks again to Dave Peticolas.
4172         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4174         * buildbot/changes/changes.py (Change): add a .revision attribute,
4175         which will eventually be used to generate source-stamp values.
4177         * buildbot/process/step.py (RemoteCommand.start): use
4178         notifyOnDisconnect to notice when we lose the slave, then treat it
4179         like an exception. This allows LogFiles to be closed and the build
4180         to be wrapped up normally. Be sure to remove the disconnect
4181         notification when the step completes so we don't accumulate a
4182         bazillion such notifications which will fire weeks later (when the
4183         slave finally disconnects normally). Fixes SF#915807, thanks to
4184         spiv (Andrew Bennetts) for the report.
4185         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4186         really isn't Logged- specific
4187         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4188         header, since it's almost always going to be appended to an
4189         incomplete line
4190         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4191         update test to handle use of notifyOnDisconnect
4193         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4194         don't clear .ETA and .currentBuild when going offline, let the
4195         current build clean up after itself
4197         * buildbot/process/builder.py (Builder.detached): wait a moment
4198         before doing things like stopping the current build, because the
4199         current step will probably notice the disconnect and cleanup the
4200         build by itself
4201         * buildbot/test/test_run.py (Status.tearDown): update test to
4202         handle asynchronous build-detachment
4204         * buildbot/process/base.py (Build.stopBuild): minor shuffles
4206         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4207         hush a debug message
4209 2004-09-05  Brian Warner  <warner@lothar.com>
4211         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4212         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4213         kernels do this: the fcntl module has the F_NOTIFY constant, but
4214         the kernel itself doesn't support the operation. Thanks to Olly
4215         Betts for spotting the problem.
4217         * buildbot/process/step.py (Darcs): new source-checkout command
4218         (Arch): new source-checkout command
4219         (todo_P4): fix constructor syntax, still just a placeholder
4220         * buildbot/test/test_vc.py (VC.testDarcs): test it
4221         (VC.testDarcsHTTP): same, via localhost HTTP
4222         (VC.testArch): same
4223         (VC.testArchHTTP): same
4224         * NEWS: mention new features
4226         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4227         which tells the step to stash stdout text locally (in .stdout).
4228         Slave-side Commands can use this to make decisions based upon the
4229         output of the the ShellCommand (not just the exit code).
4230         (Darcs): New source-checkout command
4231         (Arch): New source-checkout command, uses .keepStdout in one place
4232         where it needs to discover the archive's default name.
4234         * docs/steps.xhtml: Document options taken by Darcs and Arch.
4235         * docs/source.xhtml: add brief descriptions of Darcs and Arch
4236         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4238         * buildbot/process/step.py (ShellCommand.describe): add an
4239         alternate .descriptionDone attribute which provides descriptive
4240         text when the step is complete. .description can be ["compiling"],
4241         for use while the step is running, then .descriptionDone can be
4242         ["compile"], used alone when the step succeeds or with "failed" when
4243         it does not. Updated other steps to use the new text.
4244         * buildbot/process/step_twisted.py: same
4245         * buildbot/test/test_run.py: update tests to match
4247 2004-08-30  Brian Warner  <warner@lothar.com>
4249         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4250         (CVS.__init__): send 'patch' argument to slave
4251         (CVS.start): don't create the LoggedRemoteCommand until start(),
4252         so we can catch a .patch added after __init__
4253         (SVN.__init__): add 'patch' to SVN too
4254         (SVN.start): same
4256         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4257         argument, to let commands push data into the process' stdin pipe.
4258         Move usePTY to a per-instance attribute, and clear it if 'stdin'
4259         is in use, since closing a PTY doesn't really affect the process
4260         in the right way (in particular, I couldn't run /usr/bin/patch
4261         under a pty).
4262         (SourceBase.doPatch): handle 'patch' argument
4264         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4265         both CVS and SVN
4267         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4268         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4269         versions to master
4270         * buildbot/master.py (BotPerspective.got_commands): get command
4271         versions from slave, give to each builder
4272         * buildbot/process/builder.py (Builder.attached): stash slave
4273         command versions in .remoteCommands
4275         * docs/steps.xhtml: bring docs in-line with reality
4277         * buildbot/process/step.py (CVS.__init__): more brutal
4278         compatibility code removal
4279         (SVN.__init__): same
4281         * buildbot/slave/commands.py (SlaveShellCommand): update docs
4282         (SlaveShellCommand.start): require ['workdir'] argument, remove
4283         the ['dir'] fallback (compatibility will come later)
4284         (SourceBase): update docs
4285         (SourceBase.start): remove ['directory'] fallback
4286         (CVS): update docs
4287         (SVN): update docs
4288         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4289         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4290         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4292         * buildbot/process/step.py (RemoteShellCommand.__init__): add
4293         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4294         code.. I will figure out 0.5.0-compatibility hooks later)
4296 2004-08-30  Brian Warner  <warner@lothar.com>
4298         * buildbot/process/process_twisted.py: rewrite in terms of new
4299         BuildFactory base class. It got significantly shorter. Yay
4300         negative code days.
4302         * buildbot/process/step_twisted.py (HLint.start): fix to make it
4303         work with the new "self.build isn't nailed down until we call
4304         step.start()" scheme: specifically, __init__ is called before the
4305         build has decided on which Changes are going in, so we don't scan
4306         build.allFiles() for .xhtml files until start()
4307         (HLint.commandComplete): use getText(), not getStdout()
4308         (RunUnitTests.start): same: don't use .build until start()
4309         (RunUnitTests.describe): oops, don't report (None) when using
4310         the default reactor
4311         (RunUnitTests.commandComplete): use getText()
4312         (RunUnitTests.createSummary): same
4313         (BuildDebs.commandComplete): same
4315         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4316         set args['command'] until start(), since our BuildStep is allowed
4317         to change their mind up until that point
4318         (TreeSize.commandComplete): use getText(), not getStdout()
4320         * docs/examples/twisted_master.cfg: update to current standards
4322         * docs/factories.xhtml: update
4323         * buildbot/process/factory.py: implement all the common factories
4324         described in the docs. The Trial factory doesn't work yet, and
4325         I've probably broken all the process_twisted.py factories in the
4326         process. There are compatibility classes left in for things like
4327         the old BasicBuildFactory, but subclasses of them are unlikely to
4328         work.
4329         * docs/examples/glib_master.cfg: use new BuildFactories
4330         * docs/examples/hello.cfg: same
4332         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4333         explicit 'workdir' args
4335         * buildbot/process/base.py (BuildFactory): move factories to ..
4336         * buildbot/process/factory.py (BuildFactory): .. here
4337         * buildbot/process/process_twisted.py: handle move
4338         * buildbot/test/test_config.py: same
4339         * buildbot/test/test_run.py: same
4340         * buildbot/test/test_steps.py: same
4341         * buildbot/test/test_vc.py: same
4342         * docs/factories.xhtml: same
4344         * NEWS: mention config changes that require updating master.cfg
4346         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4347         argument to all steps that weren't given one already, pointing at
4348         the "build/" directory.
4350         * docs/examples/hello.cfg: remove explicit 'workdir' args
4352         * docs/factories.xhtml: document standard BuildFactory clases,
4353         including a bunch which are have not yet been written
4355 2004-08-29  Brian Warner  <warner@lothar.com>
4357         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4358         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4359         buildbot.status.builder so they aren't quite so internal
4360         * buildbot/process/base.py, buildbot/process/builder.py: same
4361         * buildbot/process/maxq.py, buildbot/process/step.py: same
4362         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4363         * buildbot/status/mail.py, buildbot/test/test_run.py: same
4364         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4366         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4367         to handle new getLogs()-returns-list behavior
4368         (StatusResourceBuildStep.getChild): same
4369         (StepBox.getBox): same
4370         (WaterfallStatusResource.phase0): same
4372         * docs/source.xhtml: document how Buildbot uses version-control
4373         systems (output side: how we get source trees)
4374         * docs/changes.xhtml: rename from sources.xhtml, documents VC
4375         systems (input side: how we learn about Changes)
4377         * buildbot/master.py (Manhole): use ComparableMixin
4378         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4379         * buildbot/changes/mail.py (MaildirSource): same
4380         * buildbot/status/client.py (PBListener): same
4381         * buildbot/status/html.py (Waterfall): same
4382         * buildbot/status/words.py (IRC): same
4384         * NEWS: start describing new features
4386         * buildbot/status/mail.py (MailNotifier): finish implementation.
4387         The message body is still a bit sparse.
4388         * buildbot/test/test_status.py (Mail): test it
4390         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4391         and __hash__ methods I wind up adding everywhere. Specifically
4392         intended to support the buildbot config-file update scheme where
4393         we compare, say, the old list of IStatusTargets against the new
4394         one and don't touch something which shows up on both lists.
4395         * buildbot/test/test_util.py (Compare): test case for it
4397         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4398         return a list instead of a dict
4399         (IBuildStepStatus.getLogs): same. The idea is that steps create
4400         logs with vaguely unique names (although their uniqueness is not
4401         guaranteed). Thus a compilation step should create its sole
4402         logfile with the name 'compile', and contribute it to the
4403         BuildStatus. If a step has two logfiles, try to create them with
4404         different names (like 'test.log' and 'test.summary'), and only
4405         contribute the important ones to the overall BuildStatus.
4406         * buildbot/status/builder.py (Event.getLogs): same
4407         (BuildStepStatus): fix default .text and .results
4408         (BuildStepStatus.addLog): switch to list-like .getLogs()
4409         (BuildStepStatus.stepFinished): same
4410         (BuildStatus.text): fix default .text
4411         (BuildStatus.getLogs): temporary hack to return all logs (from all
4412         child BuildStepStatus objects). Needs to be fixed to only report
4413         the significant ones (as contributed by the steps themselves)
4414         * buildbot/test/test_run.py: handle list-like .getLogs()
4415         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4417 2004-08-28  Brian Warner  <warner@lothar.com>
4419         * buildbot/process/builder.py (Builder.attached): serialize the
4420         attachment process, so the attach-watcher isn't called until the
4421         slave is really available. Add detached watchers too, which makes
4422         testing easier.
4424         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4426         * buildbot/test/test_swap.py: remove dead code
4428         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4429         (ShellCommand.start): treat errors in _startCommand/spawnProcess
4430         sort of as if the command being run exited with a -1. There may
4431         still be some holes in this scheme.
4432         (CVSCommand): add 'revision' tag to the VC commands, make sure the
4433         -r option appears before the module list
4434         * buildbot/process/step.py (CVS): add 'revision' argument
4436         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4437         when sending updates or stepComplete messages to the master, since
4438         we don't currently care whether they arrive or not. When we revamp
4439         the master/slave protocol to really resume interrupted builds,
4440         this will need revisiting.
4441         (lostRemote): remove spurious print
4443         * buildbot/master.py (BotPerspective.attached): serialize the
4444         new-builder interrogation process, to make testing easier
4445         (BotMaster.waitUntilBuilderDetached): convenience function
4447         * buildbot/status/builder.py (BuilderStatus): prune old builds
4448         (BuildStatus.pruneSteps): .. and steps
4449         (BuildStepStatus.pruneLogs): .. and logs
4450         (BuilderStatus.getBuild): handle missing builds
4451         * buildbot/status/html.py (StatusResourceBuild.body): display build
4452         status in the per-build page
4453         (BuildBox.getBox): color finished builds in the per-build box
4455 2004-08-27  Brian Warner  <warner@lothar.com>
4457         * buildbot/status/mail.py (MailNotifier): new notification class,
4458         not yet finished
4460         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4461         variants of a common base class which handles all the mode= logic
4463         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4464         convenience method
4465         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4467 2004-08-26  Brian Warner  <warner@lothar.com>
4469         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4470         interfaces
4472         * buildbot/test/test_run.py: update to new Logfile interface, new
4473         buildbot.slave modules
4474         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4476         * MANIFEST.in: new sample config file
4477         * docs/examples/hello.cfg: same
4479         * buildbot/process/step_twisted.py: remove dead import
4481         * buildbot/process/step.py (RemoteCommand.run): catch errors
4482         during .start
4483         (RemoteCommand.remote_update): ignore updates that arrive after
4484         we've shut down
4485         (RemoteCommand.remote_complete): ignore duplicate complete msgs
4486         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4487         the responsibilities of the subclass's methods
4488         (BuildStep.failed): catch errors during failure processing
4489         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4490         (CVS): move to a mode= argument (described in docstring), rather
4491         than the ungainly clobber=/export=/copydir= combination.
4492         (SVN): add mode= functionality to SVN too
4493         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4495         * buildbot/process/base.py (Build.startNextStep): catch errors
4496         during s.startStep()
4498         * buildbot/clients/base.py: update to new PB client interface.
4499         gtkPanes is still broken
4501         * buildbot/bot.py, buildbot/slavecommand.py: move to..
4502         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4503         * setup.py: add buildbot.slave module
4504         * buildbot/bb_tap.py: handle move
4505         * buildbot/slave/registry.py: place to register commands, w/versions
4506         * buildbot/slave/bot.py: major simplifications
4507         (SlaveBuilder.remote_startCommand): use registry for slave commands,
4508         instead of a fixed table. Eventually this will make the slave more
4509         extensible. Use 'start' method on the command, not .startCommand.
4510         Fix unsafeTracebacks handling (I think).
4511         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4512         helper class with a .start method that returns a Deferred.
4513         SlaveShellCommand is the form reached by the buildmaster. Commands
4514         which use multiple ShellCommands can just chain them as Deferreds,
4515         with some helper methods in Command (_abandonOnFailure and
4516         _checkAbandoned) to bail on rc!=0.
4517         (CVSCommand): prefer new mode= argument
4518         (SVNFetch): add mode= argument
4520         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4521         put a useful reason string on the build
4523         * buildbot/status/builder.py (LogFile): do LogFile right: move the
4524         core functionality into an IStatusLog object
4525         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4526         * buildbot/status/html.py (TextLog): HTML-rendering goes here
4527         (StatusResourceBuild.body): use proper accessor methods
4528         * buildbot/status/client.py (RemoteLog): PB-access goes here
4529         (StatusClientPerspective.perspective_subscribe): add "full" mode,
4530         which delivers log contents too
4531         (PBListener.__cmp__): make PBListeners comparable, thus removeable
4532         * buildbot/status/event.py: remove old Logfile completely
4534         * buildbot/interfaces.py (IStatusLog.subscribe): make the
4535         subscription interface for IStatusLog subscriptions just like all
4536         other the status subscriptions
4537         (IStatusReceiver.logChunk): method called on subscribers
4539 2004-08-24  Brian Warner  <warner@lothar.com>
4541         * buildbot/process/builder.py (Builder._pong): oops, ping response
4542         includes a result (the implicit None returned by remote_print).
4543         Accept it so the _pong method handles the response correctly.
4545 2004-08-06  Brian Warner  <warner@lothar.com>
4547         * buildbot/test/test_config.py: update IRC, PBListener tests
4549         * buildbot/status/client.py (StatusClientPerspective): total
4550         rewrite to match new IStatus interfaces. New subscription scheme.
4551         There are still a few optimizations to make (sending down extra
4552         information with event messages so the client doesn't have to do a
4553         round trip). The logfile-retrieval code is probably still broken.
4554         Moved the PB service into its own port, you can no longer share a
4555         TCP socket between a PBListener and, say, the slaveport (this
4556         should be fixed eventually).
4557         * buildbot/clients/base.py (Client): revamp to match. still needs
4558         a lot of work, but basic event reporting works fine. gtkPanes is
4559         completely broken.
4561         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4562         instance talks to a single irc server. Threw out all the old
4563         multi-server handling code. Still need to add back in
4564         builder-control (i.e. "force build")
4566         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4567         more random text to the as-yet-unreachable per-step page
4569         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4570         rename to stepETAUpdate
4571         (BuildStatus.subscribe): add build-wide ETA updates
4572         (BuilderStatus.getState): remove more cruft
4573         (BuilderStatus.getCurrentBuild): remove more cruft
4574         (BuilderStatus.buildStarted): really handle tuple-subscription
4575         * buildbot/test/test_run.py (Status.testSlave): handle the
4576         stepETAUpdate rename
4578         * buildbot/master.py (BuildMaster): don't add a default
4579         StatusClientService. Don't add a default IrcStatusFactory. Both
4580         are now added through c['status'] in the config file. c['irc'] is
4581         accepted for backwards compatibility, the only quirk is you cannot
4582         use c['irc'] to specify IRC servers on ports other than 6667.
4584         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4585         (IStatusReceiver.buildStarted): allow update-interval on subscribe
4586         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4587         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4590         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4591         the buildmaster to re-read its config file
4594         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4595         find out the port our server is running on
4596         (WebTest.test_webPathname_port): same
4598         * buildbot/test/test_config.py (testWebPortnum): test it
4599         (testWebPathname): ditto
4601         * docs/config.xhtml: document new c['status'] configuration option
4603         * buildbot/status/html.py (Waterfall): new top-level class which
4604         can be added to c['status']. This creates the Site as well as the
4605         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4606         reachable as .parent, for everything.
4608         * buildbot/master.py (Manhole): make it a normal service Child
4609         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4610         webPathname. It will eventually replace c['irc'] and the implicit
4611         PB listener as well. c['webPortnum'] and c['webPathname'] are left
4612         in as (deprecated) backward compatibility hooks for now.
4615         * buildbot/process/builder.py (Builder.buildFinished): don't
4616         inform out builder_status about a finished build, as it finds out
4617         through its child BuildStatus object
4619         * buildbot/status/html.py: extensive revamp. Use adapters to make
4620         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4621         have both starting and finishing times and adjust the waterfall
4622         display accordingly, using spacers if necessary. Use SlaveStatus
4623         to get buildslave info.
4624         (StatusResourceBuildStep): new just-one-step resource, used to get
4625         logfiles. No actual href to it yet.
4627         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4628         the time being, until I get the file-naming scheme right
4630         * buildbot/status/builder.py (Event): clean started/finished names
4631         (BuildStatus.isFinished): .finished is not None is the right test
4632         (BuildStatus.buildStarted): track started/finished times ourselves
4633         (BuilderStatus.getSlave): provide access to SlaveStatus object
4634         (BuilderStatus.getLastFinishedBuild): all builds are now in
4635         .builds, even the currently-running one. Accomodate this change.
4636         (BuilderStatus.eventGenerator): new per-builder event generator.
4637         Returns BuildStepStatus and BuildStatus objects, since they can
4638         both be adapted as necessary.
4639         (BuilderStatus.addEvent): clean up started/finished attributes
4640         (BuilderStatus.startBuild,finishBuild): remove dead code
4641         (SlaveStatus): new object to provide ISlaveStatus
4643         * buildbot/process/step.py (ShellCommand.getColor): actually
4644         return the color instead of setting it ourselves
4645         (CVS.__init__): pull .timeout and .workdir options out of
4646         **kwargs, since BuildStep will ignore them. Without this neither
4647         will be sent to the slave correctly.
4648         (SVN.__init__): same
4650         * buildbot/process/builder.py (Builder): move flags to class-level
4651         attributes
4652         (Builder.attached): remove .remoteInfo, let the BotPerspective and
4653         SlaveStatus handle that
4655         * buildbot/process/base.py (Build.firstEvent): remove dead code
4656         (Build.stopBuild): bugfix
4658         * buildbot/changes/pb.py (PBChangeSource.describe): add method
4660         * buildbot/changes/changes.py (Change): add IStatusEvent methods
4661         (ChangeMaster.eventGenerator): yield Changes, since there are now
4662         Adapters to turn them into HTML boxes
4664         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4665         (BotPerspective.attached): feed a SlaveStatus object
4666         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4667         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4669         * buildbot/interfaces.py: API additions
4670         (ISlaveStatus): place to get slave status
4672 2004-08-04  Brian Warner  <warner@lothar.com>
4674         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4675         the delay finishes, so the step is marked as SUCCESS
4677         * buildbot/test/test_run.py (Status.testSlave): cover more of
4678         IBuildStatus and IBuildStepStatus
4680         * buildbot/status/progress.py (StepProgress): move some flags to
4681         class-level attributes
4682         (StepProgress.remaining): if there are no other progress metrics
4683         to go by, fall back to elapsed time
4684         (StepProgress.setExpectations): take a dict of metrics instead of
4685         a list
4686         (BuildProgress.setExpectationsFrom): pull expectations from the
4687         Expectations, instead of having it push them to the BuildProgress
4688         (Expectations): move some flags to class-level attributes
4689         (Expectations.__init__): copy per-step times from the
4690         BuildProgress too
4691         (Expectations.expectedBuildTime): new method for per-build ETA
4693         * buildbot/status/event.py (Logfile): move some flags to
4694         class-level attributes
4695         (Logfile.logProgressTo): better method name, let step set the
4696         progress axis name (instead of always being "output")
4698         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4699         times directly, rather than depending upon the (possibly missing)
4700         .progress object. Use 'None' to indicate "not started/finished
4701         yet"
4702         (BuildStepStatus.getExpectations): oops, return the full list of
4703         expectations
4704         (BuilderStatus._buildFinished): append finished builds to .builds
4706         * buildbot/process/step.py (BuildStep): add separate .useProgress
4707         flag, since empty .progressMetrics[] still implies that time is a
4708         useful predictor
4709         (CVS): set up the cmd in __init__, instead of waiting for start()
4711         * buildbot/process/base.py (Build.startBuild): disable the 'when'
4712         calculation, this will eventually turn into a proper sourceStamp
4713         (Build.setupBuild): tell the Progress to load from the Expectations,
4714         instead of having the Expectations stuff things into the Progress
4715         (Build.buildException): add a build-level errback to make sure the
4716         build's Deferred fires even in case of exceptions
4718         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4719         the forced build
4720         * buildbot/process/builder.py (Builder.forceBuild): convey the
4721         reason instead of creating a fake Change
4723         * docs/examples/twisted_master.cfg: update to match reality
4725         * buildbot/test/test_config.py, buildbot/test/test_process.py:
4726         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4727         fix or remove broken/breaking tests
4729         * buildbot/status/event.py (Logfile.__len__): remove evil method
4731         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4732         missing .build, for test convenience
4734         * buildbot/process/step_twisted.py: import fixes
4736         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4738         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4739         .statusbag reference
4741         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4742         connection at shutdown, and stop it from reconnecting
4744         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4745         chase down remote-execution bugs
4747         * buildbot/process/step.py: more fixes, remove
4748         BuildStep.setStatus()
4749         * buildbot/status/builder.py: move setStatus() functionality into
4750         BuildStatus.addStep
4751         * buildbot/status/event.py: minor fixes
4753 2004-08-03  Brian Warner  <warner@lothar.com>
4755         * buildbot/process/base.py, buildbot/process/builder.py
4756         * buildbot/process/step.py, buildbot/status/builder.py
4757         * buildbot/status/event.py, buildbot/test/test_run.py:
4758         fix status delivery, get a basic test case working
4759         * buildbot/master.py: finish implementing basic status delivery,
4760         temporarily disable HTML/IRC/PB status sources
4762         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4764         * buildbot/status/progress.py (BuildProgress): remove dead code
4766         * buildbot/interfaces.py
4767         * buildbot/process/base.py, buildbot/process/builder.py
4768         * buildbot/process/step.py, buildbot/process/step_twisted.py
4769         * buildbot/status/builder.py: Complete overhaul of the all
4770         status-delivery code, unifying all types of status clients (HTML,
4771         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4772         look like. This commit is a checkpointing of the work-in-progress:
4773         the input side is mostly done (Builders/Builds sending status
4774         to the BuilderStatus/BuildStatus objects), but the output side has
4775         not yet been started (HTML resources querying BuilderStatus
4776         objects). Things are probably very broken right now and may remain
4777         so for several weeks, I apologize for the disruption.
4779         * buildbot/status/event.py: add a setHTML method to use pre-rendered
4780         HTML as the log's contents. Currently used for exception tracebacks.
4781         * buildbot/status/progress.py: minor spelling changes
4783 2004-08-02  Brian Warner  <warner@lothar.com>
4785         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4786         in mozilla. Also added stylesheets copied from Twisted's docs.
4787         Remember that these files are meant to be run through Lore first.
4788         Thanks to Philipp Frauenfelder for the fixes.
4789         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4790         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4791         * docs/template.tpl: added a Lore template
4793 2004-07-29  Brian Warner  <warner@lothar.com>
4795         * buildbot/interfaces.py: revamp status delivery. This is the
4796         preview: these are the Interfaces that will be provided by new
4797         Builder code, and to which the current HTML/IRC/PB status
4798         displayers will be adapted.
4800         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4801         on the SlaveBuilder, not the Bot.
4802         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4803         SlaveBuilder.usePTY
4804         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4805         set .usePTY on the FakeSlaveBuilder
4807 2004-07-25  Brian Warner  <warner@lothar.com>
4809         * buildbot/changes/freshcvs.py: add some debug log messages
4810         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4811         disabled 'setFilter' syntax
4812         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4813         don't end with a slash
4815         * buildbot/process/base.py (Builder._pong_failed): add TODO note
4817         * setup.py: bump to 0.5.0+ while between releases
4819 2004-07-23  Brian Warner  <warner@lothar.com>
4821         * setup.py (version): Releasing buildbot-0.5.0
4823 2004-07-23  Brian Warner  <warner@lothar.com>
4825         * README: update for 0.5.0 release
4827         * NEWS: update for 0.5.0 release
4829 2004-07-22  Brian Warner  <warner@lothar.com>
4831         * buildbot/slavecommand.py (ShellCommand): make usePTY a
4832         mktap-time configuration flag (--usepty=1, --usepty=0)
4833         * buildbot/bot.py: same
4835         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4836         an 'info' directory being unwanted
4838         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4839         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4840         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4841         and earlier), use a FreshCVSSourceOldcred instead.
4842         (test): simple test routine: connect to server, print changes
4844         * buildbot/changes/changes.py (Change.getTime): make it possible
4845         to print un-timestamped changes
4847         * buildbot/master.py (makeApp): delete ancient dead code
4848         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4849         * buildbot/test/test_config.py (testFindConfigFile): test it
4851         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4852         instead of win32 one
4855         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4856         now takes a dictionary instead of a tuple. See docs/config.xhtml for
4857         details.
4859         * buildbot/process/base.py (Builder.__init__): change constructor
4860         to accept a dictionary of config data, rather than discrete
4861         name/slave/builddir/factory arguments
4863         * docs/examples/twisted_master.cfg: update to new syntax
4864         * docs/examples/glib_master.cfg: same
4865         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4866         rough tests of the new syntax
4868         
4869         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4870         to be an int, which means "run a web.distrib sub-server on a TCP
4871         port". This lets you publish the buildbot status page to a remote
4872         twisted.web server (using distrib.ResourceSubscription). Also
4873         rename the local attributes used to hold these web things so
4874         they're more in touch with reality.
4875         * buildbot/test/test_web.py: test webPortnum and webPathname
4876         * docs/config.xhtml: document this new use of webPathname
4878         * docs/config.xhtml: new document, slightly ahead of reality
4879         
4880         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4881         'prefix' handling: treat it as a simple string to check with
4882         .startswith, instead of treating it as a directory. This allows
4883         sub-directories to be used. If you use prefix=, you should give it
4884         a string that starts just below the CVSROOT and ends with a slash.
4885         This prefix will be stripped from all filenames, and filenames
4886         which do not start with it will be ignored.
4888 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
4890         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4891         and --exclude (inverse of --include).  SVN post-commit hooks
4892         now have total control over which changes get sent to buildbot and which
4893         do not.
4895 2004-07-10  Brian Warner  <warner@lothar.com>
4897         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4898         test case to match new API
4900         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4901         which crashed HTML display when self.entries=[] (needed to
4902         distinguish between [], which means "no entries yet", and None,
4903         which means "the entries have been swapped out to disk, go fetch
4904         them").
4906 2004-07-04  Brian Warner  <warner@lothar.com>
4908         * buildbot/process/step_twisted.py (countFailedTests): Count
4909         skips, expectedFailures, and unexpectedSuccesses. Start scanning
4910         10kb from the end because any import errors are wedged there and
4911         they would make us think the test log was unparseable.
4912         (RunUnitTests.finishStatus): add skip/todo counts to the event box
4914 2004-06-26  Brian Warner  <warner@lothar.com>
4916         * buildbot/process/step_twisted.py (RemovePYCs): turn the
4917         delete-*.pyc command into an actual BuildStep, so we can label it
4918         nicely
4919         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4920         (FullTwistedBuildFactory): same
4922 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
4924         * contrib/fakechange.py: Add an errback when sending the fake 
4925         change, so we know it didn't work.
4927 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
4929         * buildbot/process/step_twisted.py: Delete *.pyc files before
4930         calling trial, so it doesn't catch any old .pyc files whose .py
4931         files have been moved or deleted.
4933         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4934         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4935         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4936         instead of ["twisted.test"], so that the end result is "trial -R
4937         twisted".
4939         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4940         regular expression to match filenames that should be ignored when
4941         changed. Also add a --revision parameter that specifies the
4942         revision to examine, which is useful for debugging.
4944 2004-06-25  Brian Warner  <warner@lothar.com>
4946         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4947         summary of warnings (like DeprecationWarnings), next to the
4948         "summary" file
4950 2004-05-13  Brian Warner  <warner@lothar.com>
4952         * docs/examples/twisted_master.cfg: enable the win32 builder, as
4953         we now have a w32 build slave courtesy of Mike Taylor.
4955         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4956         so broken. Fixed a race condition that tripped up interlocked
4957         builds and caused the status to be stuck at "Interlocked" forever.
4958         The twisted buildbot's one interlocked build just so happened to
4959         never hit this case until recently (the feeding builds both pass
4960         before the interlocked build is attempted.. usually it has to wait
4961         a while).
4962         (Builder._pong_failed): fix method signature
4964         * setup.py: bump to 0.4.3+ while between releases
4966 2004-04-30  Brian Warner  <warner@lothar.com>
4968         * setup.py (version): Releasing buildbot-0.4.3
4970 2004-04-30  Brian Warner  <warner@lothar.com>
4972         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
4974         * README: update for 0.4.3 release
4976         * NEWS: update for 0.4.3 release
4978         * buildbot/master.py (BuildMaster.__getstate__): make sure
4979         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4981         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4982         .trial as a class attribute, for upgrade from 0.4.2
4984         * buildbot/changes/changes.py (Change.links): add .links for
4985         upgrade from 0.4.2
4987         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4988         .textWatchers and .htmlWatchers at save time, since they are both
4989         volatile, should allow smooth 0.4.2 upgrade
4991         * buildbot/process/step.py (CVS.finishStatus): catch failed
4992         CVS/SVN commands so we can make the status box red
4994 2004-04-29  Brian Warner  <warner@lothar.com>
4996         * buildbot/changes/freshcvs.py
4997         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4998         code to do setFilter(), which tells the freshcvs daemon to not
4999         send us stuff that we're not interested in. I will uncomment it
5000         when a new version of CVSToys is available in which setFilter()
5001         actually works, and I get a chance to test it better.
5003         * docs/examples/twisted_master.cfg: start using a PBChangeSource
5005         * buildbot/master.py (Dispatcher): use a registration scheme
5006         instead of hardwired service names
5007         (BuildMaster): keep track of the Dispatcher to support
5008         registration
5010         * buildbot/changes/changes.py (ChangeMaster): create a distinct
5011         PBChangeSource class instead of having it be an undocumented
5012         internal feature of the ChangeMaster. Split out the code into a
5013         new file.
5014         * buildbot/changes/pb.py (PBChangeSource): same
5015         * buildbot/test/test_changes.py: a few tests for PBChangeSource
5017         * docs/{factories|sources|steps}.xhtml: document some pieces
5019         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5020         using FCMaildirSource
5021         (f23osx): update OS-X builder to use python2.3, since the slave
5022         was updated to Panther (10.3.3)
5024 2004-03-21  Brian Warner  <warner@lothar.com>
5026         * buildbot/process/process_twisted.py: factor out doCheckout, change
5027         to use SVN instead of CVS
5029         * buildbot/process/base.py (BasicBuildFactory): refactor to make
5030         an SVN subclass easier
5031         (BasicSVN): subclass which uses Subversion instead of CVS
5033 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
5035         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5036         of /bin/sh on win32
5037         (CVSCommand.cvsComplete): don't assume chdir worked on win32
5039 2004-02-25  Brian Warner  <warner@lothar.com>
5041         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5042         is now either a list (which is passed to spawnProcess directly) or
5043         a string (which gets passed to /bin/sh -c). This removes the useSH
5044         flag and the ArgslistCommand class. Also send status header at the
5045         start and end of each command, instead of having the master-side
5046         code do that.
5047         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5048         -r'. Update to use list-based arguments.
5049         (SVNFetch): use list-based arguments, use ['dir'] argument to
5050         simplify code.
5051         * buildbot/test/test_steps.py (Commands): match changes
5053         * buildbot/process/step.py (InternalShellCommand.words): handle
5054         command lists
5055         (SVN): inherit from CVS, cleanup
5057         * buildbot/status/event.py (Logfile.content): render in HTML, with
5058         stderr in red and headers (like the name of the command we're
5059         about to run) in blue. Add link to a second URL (url + "?text=1")
5060         to get just stdout/stderr in text/plain without markup. There is
5061         still a problem with .entries=None causing a crash, it seems to occur
5062         when the logfile is read before it is finished.
5064         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5065         timeout to the keepalives, and use it to explicitly do a
5066         loseConnection instead of waiting for TCP to notice the loss. This
5067         ought to clear up the silent-lossage problem.
5068         (unsafeTracebacks): pass exception tracebacks back to the master,
5069         makes it much easier to debug problems
5071 2004-02-23  Brian Warner  <warner@lothar.com>
5073         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5074         the whole command to /bin/sh instead of execve [Johan Dahlin]
5075         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5076         '-r HEAD' [Johan Dahlin]
5077         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5079         * buildbot/changes/changes.py (Change): add links= argument, add
5080         asHTML method [Johan Dahlin]. Modified to make a bit more
5081         XHTMLish. Still not sure how to best use links= .
5083         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
5084         Change.asHTML to display the change, not asText
5086         * buildbot/status/html.py (StatusResourceBuilder): web button to
5087         ping slave
5089         * buildbot/test/test_run.py: test to actually start a buildmaster
5090         and poke at it
5092         * MANIFEST.in: bring back accidentally-dropped test helper files
5094         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5095         that require cvstoys if it is not installed
5097         * buildbot/process/step_twisted.py (RunUnitTests): allow other
5098         values of "bin/trial" [Dave Peticolas]
5099         (RunUnitTests.finishStatus): say "no tests run" instead of "0
5100         tests passed" when we didn't happen to run any tests
5102         * buildbot/process/step.py (Compile): use haltOnFailure instead of
5103         flunkOnFailure [Johan Dahlin]
5105         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5106         multiple instances of the same Step class by suffixing "_2", etc,
5107         to the name until it is unique. This name needs to be unique
5108         because it is used as a key in the dictionary that tracks build
5109         progress.
5110         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5111         add test for it
5113         * buildbot/process/base.py (Builder.ping): add "ping slave" command
5115 2004-01-14  Brian Warner  <warner@lothar.com>
5117         * buildbot/status/words.py (IrcStatusBot): when we leave or get
5118         kicked from a channel, log it
5120         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5121         something over whatever IRC channels the buildmaster is currently
5122         connected to. Added to try and track down a problem in which the
5123         master thinks it is still connected but the IRCd doesn't see it. I
5124         used a styles.Versioned this time, so hopefully users won't have
5125         to rebuild their .tap files this time.
5126         * contrib/debug.glade: add a "Poke IRC" button
5127         * contrib/debugclient.py: same
5129         * setup.py: bump to 0.4.2+ while between releases
5131 2004-01-08  Brian Warner  <warner@lothar.com>
5133         * setup.py (version): Releasing buildbot-0.4.2
5135 2004-01-08  Brian Warner  <warner@lothar.com>
5137         * NEWS: update for 0.4.2 release
5139         * README: document how to run the tests, now that they all pass
5141         * buildbot/changes/maildir.py (Maildir.poll): minor comment
5143         * buildbot/process/step.py (CVS): add a global_options= argument,
5144         which lets you set CVS global options for the command like "-r"
5145         for read-only checkout, or "-R" to avoid writing in the
5146         repository.
5147         * buildbot/slavecommand.py (CVSCommand): same
5149         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5150         testing easier (it is turned off when testing, to avoid the
5151         leftover timer)
5153         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5154         to make it easier to test: break generateStepID() out to a
5155         separate function, only update statusbag if it exists.
5156         (ShellCommands): create useful text for dict-based commands too.
5158         * test/*, buildbot/test/*: move unit tests under the buildbot/
5159         directory
5160         * setup.py (packages): install buildbot.test too
5162         * buildbot/test/test_slavecommand.py: fix it, tests pass now
5163         * buildbot/test/test_steps.py: fix it, tests pass now
5165 2004-01-06  Brian Warner  <warner@lothar.com>
5167         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5168         freshcvs mail uses a slightly different syntax for new
5169         directories. Update parser to handle either.
5170         * test/test_mailparse.py (Test1.testMsg9): test for same
5172 2003-12-21  Brian Warner  <warner@lothar.com>
5174         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5175         'warnOnWarnings' so that lintian errors mark the build orange
5177 2003-12-17  Brian Warner  <warner@lothar.com>
5179         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5180         messages emitted by Bonsai, contributed by Stephen Davis.
5182         * test/*: moved all tests to use trial instead of unittest. Some
5183         still fail (test_steps, test_slavecommand, and test_process).
5185         * setup.py (version): bump to 0.4.1+ while between releases
5187 2003-12-09  Brian Warner  <warner@lothar.com>
5189         * setup.py (version): Releasing buildbot-0.4.1
5191 2003-12-09  Brian Warner  <warner@lothar.com>
5193         * NEWS: update for 0.4.1 release
5195         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5196         freebsd builder code a little bit
5198         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5199         don't try to compare attributes of different classes
5200         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5201         (MaildirSource.messageReceived): fix Change delivery
5203         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5204         into the config file's namespace before loading it, like the
5205         documentation claims it does
5206         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5207         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5208         daemon comes back online
5210 2003-12-08  Brian Warner  <warner@lothar.com>
5212         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5213         so the example will work with online=0 as well
5215         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5216         fix the __implements__ line
5218         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5219         class a twisted.application.service.Service, use startService to
5220         get it moving.
5222         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5223         directory fd instead of simple open(). I'm sure this used to work,
5224         but the current version of python refuses to open directories with
5225         open().
5227 2003-12-05  Brian Warner  <warner@lothar.com>
5229         * setup.py (version): bump to 0.4.0+ while between releases
5231 2003-12-05  Brian Warner  <warner@lothar.com>
5233         * setup.py (version): Releasing buildbot-0.4.0
5235 2003-12-05  Brian Warner  <warner@lothar.com>
5237         * docs/examples/glib_master.cfg: replace old sample scripts with
5238         new-style config files
5239         * MANIFEST.in: include .cfg files in distribution tarball
5241         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5242         implement a dummy method to avoid the exception that occurs when
5243         freshcvs sends this to us.
5245         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5246         removed the method, as it broke reconnection. Apparently
5247         stopFactory is called each time the connection attempt fails. Must
5248         rethink this.
5249         (ReconnectingPBClientFactory.__getstate__): squash the _callID
5250         attribute before serialization, since without stopFactory the
5251         reconnect timer may still be active and they aren't serializable.
5253         * test/test_mailparse.py (ParseTest): test with 'self' argument
5255         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5256         argument, as these "functions" are invoked like methods from class
5257         attributes and therefore always get an instance as the first
5258         argument.
5260         * buildbot/changes/maildir.py (Maildir.start): fix error in error
5261         message: thanks to Stephen Davis for the catch
5263 2003-12-04  Brian Warner  <warner@lothar.com>
5265         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5266         twisted's standard ReconnectingClientFactory. Handles both oldcred
5267         and newcred connections. Also has a bug-workaround for
5268         ReconnectingClientFactory serializing its connector when it
5269         shouldn't.
5271         * buildbot/bot.py (BotFactory): rewrite connection layer with new
5272         pbutil. Replace makeApp stuff with proper newcred/mktap
5273         makeService(). Don't serialize Ephemerals on shutdown.
5275         * buildbot/changes/changes.py (ChangeMaster): make it a
5276         MultiService and add the sources as children, to get startService
5277         and stopService for free. This also gets rid of the .running flag.
5279         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5280         new pbutil, turn into a TCPClient at the same time (to get
5281         startService for free). Two variants exist: FreshCVSSourceOldcred
5282         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5283         yet, but when it does, we'll be ready).
5284         (FreshCVSSource.notify): handle paths which are empty after the
5285         prefix is stripped. This only happens when the top-level (prefix)
5286         directory is added, at the very beginning of a Repository's life.
5288         * buildbot/clients/base.py: use new pbutil, clean up startup code.
5289         Now the only reconnecting code is in the factory where it belongs.
5290         (Builder.unsubscribe): unregister the disconnect callback when we
5291         delete the builder on command from the master (i.e. when the
5292         buildmaster is reconfigured and that builder goes away). This
5293         fixes a multiple-delete exception when the status client is shut
5294         down afterwards.
5295         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5296         base Client. 
5298         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5299         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5301 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
5303         * contrib/run_maxq.py: Accept a testdir as an argument rather than
5304         a list of globs (ugh). The testdir will be searched for files
5305         named *.tests and run the tests in the order specified in each of
5306         those files. This allows for "dependancies" between tests to be
5307         codified.
5309         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5310         argument to pass to run_maxq.py, instead of a glob.
5312 2003-10-17  Brian Warner  <warner@lothar.com>
5314         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5315         files that live in the sandbox
5317 2003-10-15  Brian Warner  <warner@lothar.com>
5319         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5320         spelling error in "docs" count-warnings output
5321         (HLint.start): stupid thinko meant .xhtml files were ignored
5323         * docs/examples/twisted_master.cfg (reactors): disable cReactor
5324         tests now that cReactor is banished to the sandbox
5326 2003-10-10  Brian Warner  <warner@lothar.com>
5328         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5329         scheme: now .xhtml are sources and .html are generated
5331 2003-10-08  Brian Warner  <warner@lothar.com>
5333         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5334         we were ignoring the 'randomly' parameter.
5336 2003-10-01  Brian Warner  <warner@lothar.com>
5338         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5339         posix, to kill sub-children of aborted slavecommands.
5341         * buildbot/status/builder.py: rename Builder to BuilderStatus.
5342         Clean up initialization: lastBuildStatus remains None until the
5343         first build has been completed.
5345         * buildbot/status/html.py (WaterfallStatusResource.body): handle
5346         None as a lastBuildStatus
5347         * buildbot/clients/gtkPanes.py: same
5349         * buildbot/status/client.py (StatusClientService): keep
5350         BuilderStatus objects in self.statusbags . These objects now live
5351         here in the StatusClientService and are referenced by the Builder
5352         object, rather than the other way around.
5353         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5354         * buildbot/process/base.py (Builder): same
5355         * test/test_config.py (ConfigTest.testBuilders): same
5357         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5358         an existing builder, leave the statusbag alone. This will preserve the
5359         event history.
5361         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5362         hook. This will probably go away in favor of a class in upcoming
5363         Twisted versions.
5365         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5366         serviceName from newcred FreshCVSNotifiee setup
5368 2003-09-29  Brian Warner  <warner@lothar.com>
5370         * buildbot/process/process_twisted.py: switch to new reactor
5371         abbreviations
5372         * docs/examples/twisted_master.cfg: same
5374         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5376         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5377         botmaster reference instead of the oldapp service lookup
5379         * buildbot/master.py (BuildMaster.__init__): give the
5380         StatusClientService a reference to the botmaster to make it easier to
5381         force builds
5383 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5385         * buildbot/status/html.py (Box.td): escape hreffy things so you
5386         can have spaces in things like builder names
5387         (StatusResourceBuilder.body)
5388         (WaterfallStatusResource.body)
5389         (WaterfallStatusResource.body0): same
5391 2003-09-25  Brian Warner  <warner@lothar.com>
5393         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5394         rearrange the builder list when adding or removing builders: keep
5395         them in the order the user requested.
5396         * test/test_config.py (ConfigTest.testBuilders): verify it
5398         * contrib/debug.glade: give the debug window a name
5400         * buildbot/process/base.py (Builder.buildTimerFired): builders can
5401         now wait on multiple interlocks. Fix code relating to that.
5402         (Builder.checkInterlocks): same
5403         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5405         * buildbot/master.py (BuildMaster.loadConfig): move from
5406         deprecated pb.BrokerFactory to new pb.PBServerFactory
5407         * test/test_config.py (ConfigTest.testWebPathname): same
5409         * docs/examples/twisted_master.cfg: fix interlock declaration
5411         * buildbot/master.py (BotMaster.addInterlock): move code to attach
5412         Interlocks to their Builders into interlock.py .
5413         (BuildMaster.loadConfig_Interlocks): fix interlock handling
5415         * test/test_config.py (ConfigTest.testInterlocks): validate
5416         interlock handling
5418         * buildbot/process/base.py (Builder.__init__): better comments
5419         * buildbot/process/interlock.py (Interlock.__repr__): same
5420         (Interlock.deactivate): add .active flag, move the code that
5421         attaches/detaches builders into the Interlock
5423 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5425         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5426         tests using the new run_maxq.py script, and reporting failures by
5427         parsing its output.
5429         * contrib/run_maxq.py: Hacky little script for running a set of maxq
5430         tests, reporting their success or failure in a buildbot-friendly 
5431         manner.
5433 2003-09-24  Brian Warner  <warner@lothar.com>
5435         * docs/examples/twisted_master.cfg: example of a new-style config
5436         file. This lives in the buildmaster base directory as
5437         "master.cfg".
5439         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5440         button to make the master re-read its config file
5442         * buildbot/master.py (BuildMaster.loadConfig): new code to load
5443         buildmaster configuration from a file. This file can be re-read
5444         later, and the buildmaster will update itself to match the new
5445         desired configuration. Also use new Twisted Application class.
5446         * test/Makefile, test/test_config.py: unit tests for same
5448         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5449         FreshCVSSources comparable, to support reload.
5450         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5452         * buildbot/process/base.py (Builder): make them comparable, make
5453         Interlocks easier to attach, to support reload. Handle
5454         re-attachment of remote slaves.
5455         * buildbot/process/interlock.py (Interlock): same
5457         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5458         Twisted's new Application class. Requires Twisted >= 1.0.8 .
5459         buildmaster taps are now constructed with mktap.
5460         * buildbot/status/client.py (StatusClientService): same
5462         * buildbot/status/words.py: move to new Services, add support to
5463         connect to multiple networks, add reload support, allow nickname
5464         to be configured on a per-network basis
5466 2003-09-20  Brian Warner  <warner@lothar.com>
5468         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5469         the freebsd builder, now that the machine has been upgraded and no
5470         longer has python2.2
5472         * setup.py (version): bump to 0.3.5+ while between releases
5474 2003-09-19  Brian Warner  <warner@lothar.com>
5476         * setup.py (version): Releasing buildbot-0.3.5
5478 2003-09-19  Brian Warner  <warner@lothar.com>
5480         * NEWS: add post-0.3.4 notes
5482         * README (REQUIREMENTS): note twisted-1.0.7 requirement
5484         * MANIFEST.in: add contrib/*
5486         * docs/examples/twisted_master.py (twisted_app): all build slaves must
5487         use a remote root now: cvs.twistedmatrix.com
5489         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5490         to newcred
5491         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5492         compatibility with old servers
5493         (FreshCVSSource.start): and provide a way to use it
5494         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5496         * docs/examples/twisted_master.py (twisted_app): update to new
5497         makeApp interface.
5498         (twisted_app): listen on new ~buildbot socket
5499         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5501         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5502         to reduce cvs bandwidth (update instead of full checkout)
5504 2003-09-11  Brian Warner  <warner@lothar.com>
5506         * contrib/fakechange.py: demo how to connect to the changemaster
5507         port. You can use this technique to submit changes to the
5508         buildmaster from source control systems that offer a hook to run a
5509         script when changes are committed.
5511         * contrib/debugclient.py: tool to connect to the debug port. You
5512         can use it to force builds, submit fake changes, and wiggle the
5513         builder state
5515         * buildbot/master.py: the Big NewCred Reorganization. Use a single
5516         'Dispatcher' realm to handle all the different kinds of
5517         connections and Perspectives: buildslaves, the changemaster port,
5518         the debug port, and the status client port. NewCredPerspectives
5519         now have .attached/.detached methods called with the remote 'mind'
5520         reference, much like old perspectives did. All the pb.Services
5521         turned into ordinary app.ApplicationServices .
5522         (DebugService): went away, DebugPerspectives are now created
5523         directly by the Dispatcher.
5524         (makeApp): changed interface a little bit
5526         * buildbot/changes/changes.py: newcred
5527         * buildbot/status/client.py: newcred
5529         * buildbot/clients/base.py: newcred client side changes
5530         * buildbot/bot.py: ditto
5532         * docs/examples/glib_master.py: handle new makeApp() interface
5533         * docs/examples/twisted_master.py: ditto
5535         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5536         base newcred Perspectives on. This should go away once Twisted
5537         itself provides something sensible.
5540 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
5542         * contrib/svn_buildbot.py: A program that you can call from your
5543         SVNREPO/hooks/post-commit file that will notify a BuildBot master
5544         when a change in an SVN repository has happened. See the top of
5545         the file for some minimal usage info.
5547 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5549         * buildbot/slavecommand.py (ArglistCommand): Add new
5550         ArglistCommand that takes an argument list rather than a string as
5551         a parameter. Using a st.split() for argv is very bad.
5553         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5554         update to a particular revision rather than always checking out
5555         (still not very smart about it, there may be cases where the
5556         checkout becomes inconsistent).
5558 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5560         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5561         SVN fetch support. It can checkout (not update!) a specified
5562         revision from a specified repository to a specified directory.
5564         * buildbot/status/progress.py (Expectations.update): Fix an
5565         obvious bug (apparently created by the change described in the
5566         previous ChangeLog message) by moving a check to *after* the
5567         variable it checks is defined.
5570 2003-09-08  Brian Warner  <warner@lothar.com>
5572         * buildbot/status/progress.py (Expectations.update): hack to catch
5573         an exception TTimo sees: sometimes the update() method seems to
5574         get called before the step has actually finished, so the .stopTime
5575         is not set, so no totalTime() is available and we average None
5576         with the previous value. Catch this and just don't update the
5577         metrics, and emit a log message.
5579 2003-08-24  Brian Warner  <warner@lothar.com>
5581         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5582         parameter to set copydir='original' in CVS commands.
5584         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5586         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5587         which tells the command to maintain a separate original-source CVS
5588         workspace. For each build, this workspace will be updated, then
5589         the tree copied into a new workdir. This reduces CVS bandwidth
5590         (from a full checkout to a mere update) while doubling the local
5591         disk usage (to keep two copies of the tree).
5593 2003-08-21  Brian Warner  <warner@lothar.com>
5595         * buildbot/status/event.py (Logfile.addEntry): if the master web
5596         server dies while we're serving a page, request.write raises
5597         pb.DeadReferenceError . Catch this and treat it like a
5598         notifyFinish event by dropping the request.
5600 2003-08-18  Brian Warner  <warner@lothar.com>
5602         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5603         (instead of blowing up) if a force-build command is given without
5604         a reason field
5606         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5607         don't blow up if there aren't yet any Changes in the list
5609 2003-08-02  Brian Warner  <warner@lothar.com>
5611         * buildbot/bot.py (updateApplication): don't set the .tap name,
5612         since we shouldn't assume we own the whole .tap file
5614         * buildbot/bb_tap.py (updateApplication): clean up code, detect
5615         'mktap buildbot' (without a subcommand) better
5617 2003-07-29  Brian Warner  <warner@lothar.com>
5619         * buildbot/status/words.py
5620         (IrcStatusFactory.clientConnectionLost): when we lose the
5621         connection to the IRC server, schedule a reconnection attempt.
5623         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5624         use shutil.rmtree instead of forking off an "rm -rf" command.
5625         rmtree may take a while and will block until it finishes, so we
5626         use "rm -rf" if available.
5628         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5629         freebsd buildslave badly
5631         * setup.py (version): bump to 0.3.4+ while between releases
5633 2003-07-28  Brian Warner  <warner@lothar.com>
5635         * setup.py (version): Releasing buildbot-0.3.4
5637 2003-07-28  Brian Warner  <warner@lothar.com>
5639         * NEWS: update in preparation for release
5641         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5642         process.signalProcess instead of os.kill, to improve w32
5643         portability
5645         * docs/examples/twisted_master.py (twisted_app): turn off
5646         win32eventreactor: the tests hang the buildslave badly
5648         * buildbot/process/base.py (Build.buildFinished): update ETA even on
5649         failed builds, since usually the failures are consistent
5651         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5652         add compileOpts/compileOpts2 to reactors build
5654         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5655         (twisted_app): use both default and win32eventreactor on w32 build.
5656         Use both default and kqreactor on freebsd build.
5658         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5659         add compileOpts2, which is put after the build_ext argument. w32
5660         needs "-c mingw32" here.
5662         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5663         touch .acqpath, it goes away in recent Twisted releases
5665         * docs/examples/twisted_master.py (twisted_app): use "python" for
5666         the w32 buildslave, not "python2.2"
5668         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5669         the directory exists.. should hush an exception under w32
5671         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5672         ProcessTerminated -provided values for signal and exitCode rather
5673         than parsing the unix status code directly. This should remove one
5674         more roadblock for a w32-hosted buildslave.
5676         * test/test_mailparse.py: add test cases for Syncmail parser
5678         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5679         temporary compatibility import. Note! Start importing
5680         FCMaildirSource from changes.mail instead of changes.freshcvsmail
5682         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5684 2003-07-27  Brian Warner  <warner@lothar.com>
5686         * NEWS: started adding new features
5688         * buildbot/changes/mail.py: start work on Syncmail parser, move
5689         mail sources into their own file
5691         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5692         as implementing IChangeSource
5693         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5695         * buildbot/interfaces.py: define the IChangeSource interface
5697 2003-07-26  Brian Warner  <warner@lothar.com>
5699         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5701 2003-06-25  Brian Warner  <warner@lothar.com>
5703         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5704         seconds display
5706 2003-06-17  Brian Warner  <warner@lothar.com>
5708         * buildbot/status/words.py: clean up method usage to avoid error
5709         in silly IRC command
5710         (IrcStatusBot.emit_status): round off seconds display
5712         * buildbot/process/base.py (Build): delete the timer when saving
5713         to the .tap file, and restore it (if it should still be running)
5714         upon restore. This should fix the "next build in -34 seconds"
5715         messages that result when the master is restarted while builds are
5716         sitting in the .waiting slot. If the time for the build has
5717         already passed, start it very soon (in 1 second).
5719         * buildbot/status/words.py: more silly commands
5721         * README (REQUIREMENTS): add URLs to all required software
5723         * buildbot/status/words.py ('last'): mention results of, and time
5724         since last build
5726 2003-05-28  Brian Warner  <warner@lothar.com>
5728         * buildbot/status/words.py: add 'last' command
5729         (IrcStatusBot.emit_status): add current-small text to 'status' output
5731         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5732         (twisted_app): remove spaces from OS-X builder name
5734         * buildbot/master.py (makeApp): add knob to turn on IRC bot
5735         * buildbot/status/words.py: IRC bot should actually be useful now
5737 2003-05-23  Brian Warner  <warner@lothar.com>
5739         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5740         "slave information" from $(slavedir)/info/* . These files are
5741         maintained by the slave administrator, and describe the
5742         machine/environment that is hosting the slave. Information from
5743         them is put into the "Builder" HTML page. Still need to establish
5744         a set of well-known filenames and meanings for this data: at the
5745         moment, *all* info/* files are sent to the master, but only
5746         'admin' and 'host' are used on that end.
5747         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5748         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
5749         * buildbot/master.py (BotPerspective.got_info):  ditto
5751 2003-05-22  Brian Warner  <warner@lothar.com>
5753         * setup.py (version): bump version to 0.3.3+ while between releases
5755 2003-05-21  Brian Warner  <warner@lothar.com>
5757         * setup.py: Releasing buildbot-0.3.3
5759 2003-05-21  Brian Warner  <warner@lothar.com>
5761         * NEWS: 0.3.3 news items
5763         * README: describe --keepalive and life behind a NAT box
5765         * buildbot/bot.py (Bot.connected): implement application-level
5766         keepalives to deal with NAT timeouts, turn them on with
5767         --keepalive option or when SO_KEEPALIVE doesn't work.
5769         * buildbot/master.py (BotPerspective): accept keepalives silently
5771         * buildbot/process/base.py (Build.buildException): CopiedFailures
5772         don't carry as much information as local ones, so don't try to
5773         create a big HTMLized version of them.
5775         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5776         log file when step fails due to an exception, such as when the slave
5777         becomes unreachable
5779         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5780         --testmodule argument instead of grepping for test-case-name tags
5781         ourselves. Remove FindUnitTests code.
5782         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5784         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5786 2003-05-16  Brian Warner  <warner@lothar.com>
5788         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5789         argument to allow things like CFLAGS=-O0 to be passed without relying
5790         upon /bin/sh processing on the slave.
5792         * buildbot/process/step.py (InternalShellCommand.start): send
5793         'env' dict to slave
5794         * buildbot/slavecommand.py (ShellCommand.start): create argv with
5795         'split' instead of letting /bin/sh do it. This should also remove
5796         the need for /bin/sh on the buildslave, making it more likely to
5797         work with win32.
5799         * buildbot/status/html.py: html-escape text in blamelist.
5800         Add "force build" button to the Builder page.
5802         * buildbot/process/step_twisted.py (countFailedTests): look at
5803         last 1000 characters for status line, as import errors can put it
5804         before the -200 point.
5806 2003-05-15  Brian Warner  <warner@lothar.com>
5808         * docs/examples/twisted_master.py: use clobber=0 for remote builds
5810         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5811         make 'clobber' a parameter, so it is possible to have builds which
5812         do full tests but do a cvs update instead of hammering the CVS
5813         server with a full checkout each build
5815         * buildbot/process/step.py (InternalShellCommand): bump default
5816         timeout to 20 minutes
5818         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5819         the master to trigger a build. Run it via manhole.
5821         * buildbot/master.py (BotPerspective.perspective_forceBuild):
5822         allow slaves to trigger any build that they host, to make life
5823         easier for slave admins who are testing out new build processes
5825         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5826         don't flunk cReactor or qtreactor on failure, since they fail alot
5827         these days. Do warnOnFailure instead.
5829         * buildbot/process/base.py: change Builder.buildable from a list
5830         into a single slot. When we don't have a slave, new builds (once
5831         they make it past the timeout) are now merged into an existing
5832         buildable one instead of being queued. With this change, a slave
5833         which has been away for a while doesn't get pounded with all the
5834         builds it missed, but instead just does a single build.
5836 2003-05-07  Brian Warner  <warner@lothar.com>
5838         * setup.py (version): bump version to 0.3.2+ while between releases
5840 2003-05-07  Brian Warner  <warner@lothar.com>
5842         * setup.py: Releasing buildbot-0.3.2
5844 2003-05-07  Brian Warner  <warner@lothar.com>
5846         * setup.py: fix major packaging error: include subdirectories!
5847         
5848         * NEWS: add changes since last release
5850         * README (REQUIREMENTS): update twisted/python dependencies
5852         * buildbot/status/builder.py (Builder.startBuild): change
5853         BuildProcess API: now they should call startBuild/finishBuild
5854         instead of pushing firstEvent / setLastBuildStatus. Moving towards
5855         keeping a list of builds in the statusbag, to support other kinds of
5856         status delivery.
5857         (Builder.addClient): send current-activity-small to new clients
5858         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5859         new API
5861         * buildbot/status/client.py: drop RemoteReferences at shutdown
5863         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5865         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5866         more debug messages for remote status client
5868         * buildbot/process/step.py (InternalBuildStep.stepComplete)
5869         (.stepFailed): only fire the Deferred once, even if both
5870         stepComplete and stepFailed are called. I think this can happen if
5871         an exception occurs at a weird time.
5873         * buildbot/status/words.py: work-in-progress: IRC status delivery
5875 2003-05-05  Brian Warner  <warner@lothar.com>
5877         * docs/examples/twisted_master.py (twisted_app): hush internal
5878         python2.3 distutils deprecation warnings
5879         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5880         add compileOpts= argument which inserts extra args before the
5881         "setup.py build_ext" command. This can be used to give -Wignore
5882         warnings, to hush some internal python-2.3 deprecation messages.
5884         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5885         the ['twisted.test'] default test case to make it easier to change
5886         in subclasses
5888         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5889         * buildbot/clients/gtkPanes.py: ditto
5891         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5892         arg to collapse RunUnitTestsRandomly into RunUnitTests
5893         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5894         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5896         * buildbot/status/html.py (StatusResource): shuffle Resources
5897         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5898         would serve the waterfall display, but the internal links were
5899         only valid on the trailing-slash version. The correct behavior is
5900         for the non-slashed one to serve a Redirect to the slashed one.
5901         This only shows up when the buildbot page is hanging off another
5902         server, like a Twisted-Web distributed server.
5904         * buildbot/status/event.py (Event, RemoteEvent): make Events
5905         pb.Cacheable, with RemoteEvent as the cached version. This removes
5906         a lot of explicit send-an-update code.
5907         * buildbot/status/builder.py (Builder): remove send-update code
5908         * buildbot/status/client.py (ClientBuilder): remove send-update
5909         code, and log errors that occur during callRemote (mostly to catch
5910         InsecureJelly exceptions)
5912         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5913         run Lore with the same python used in the rest of the build
5915         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5917         * buildbot/process/step_twisted.py (HLint): accept 'python'
5918         argument. Catch rc!=0 and mark the step as failed. This marks the
5919         build orange ("has warnings").
5920         (RunUnitTestsJelly): move out to step_twisted2.py
5922         * buildbot/util.py (ignoreStaleRefs): add utility function
5924         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5925         don't fake ETA object, it's too hard to get right
5927 2003-05-02  Brian Warner  <warner@lothar.com>
5929         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5931 2003-05-01  Brian Warner  <warner@lothar.com>
5933         * buildbot/status/html.py (StatusResource.body): oops, I was
5934         missing a <tr>, causing the waterfall page to be misrendered in
5935         everything except Galeon.
5937 2003-04-29  Brian Warner  <warner@lothar.com>
5939         * docs/examples/twisted_master.py: make debuild use python-2.2
5940         explicitly, now that Twisted stopped supporting 2.1
5942         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5943         handle tuple results too. I keep forgetting this, which suggests
5944         it needs to be rethought.
5946         * setup.py (setup): bump version to 0.3.1+ while between releases
5947         
5948 2003-04-29  Brian Warner  <warner@lothar.com>
5950         * setup.py: Releasing buildbot-0.3.1
5952 2003-04-29  Brian Warner  <warner@lothar.com>
5954         * README (SUPPORT): add plea to send questions to the mailing list
5956         * NEWS, MANIFEST.in: add description of recent changes
5958         * docs/examples/twisted_master.py: add the code used to create the
5959         Twisted buildmaster, with passwords and such removed out to a
5960         separate file.
5962         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5963         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5964         buildmasters to not require CVSToys be installed.
5965         * README, docs/examples/glib_master: update to match the change
5967         * buildbot/clients/base.py, buildbot/bot.py,
5968         buildbot/changes/changes.py, buildbot/pbutil.py: copy
5969         ReconnectingPB from CVSToys distribution to remove CVSToys
5970         dependency for build slaves and status clients. Buildmasters which
5971         use FreshCVSSources still require cvstoys be installed, of course.
5973 2003-04-25  Brian Warner  <warner@lothar.com>
5975         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5976         runTestsRandomly arg to turn on trial -z
5978         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5979         experimental code to use trial's machine-parseable output to get
5980         more detailed test results. Still has some major issues.
5981         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5982         in random sequence
5984         * buildbot/status/builder.py (Builder.setCurrentBuild):
5985         anticipating moving build history into statusbag, not used yet
5987         * buildbot/status/tests.py: code to centralize test results,
5988         doesn't work quite yet
5990         * buildbot/status/event.py (Event): use hasattr("setName") instead
5991         of isinstance for now.. need better long-term solution
5993         * buildbot/status/html.py: Remove old imports
5995 2003-04-24  Brian Warner  <warner@lothar.com>
5997         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5998         ignore changes under doc/fun/ and sandbox/
6000         * buildbot/process/step_twisted.py: update pushEvent and friends.
6002         * buildbot/status/html.py (Box.td): replace event.buildername with
6003         event.parent.getSwappableName(). Needs more thought.
6005         * buildbot/status/builder.py (Builder): Replace pushEvent and
6006         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6007         Tell events they are being pruned with event.delete().
6009         * buildbot/process/base.py (Build): Remove Builder status-handling
6010         methods. s/pushEvent/setCurrentActivity/.
6012         * buildbot/process/step.py (BuildStep): clean up status delivery.
6013         Gouse builder.statusbag methods instead of intermediate builder
6014         methods. s/updateLastEvent/updateCurrentActivity/.
6015         s/finalizeLastEvent/finishCurrentActivity/. Use
6016         addFileToCurrentActivity for summaryFunction.
6018         * buildbot/status/event.py (Logfile): put data in a Swappable when
6019         .finish is called.
6020         (Event): add more setter methods. Remove .buildername, use .parent
6021         and getSwappableName instead (needs more thought).
6023         * buildbot/util.py (Swappable):
6024         * test/test_swap.py: don't bother setting filename at __init__
6025         time, do it later. Change setFilename args to take parent first,
6026         since it provides the most significant part of the filename.
6028 2003-04-23  Brian Warner  <warner@lothar.com>
6030         * buildbot/status/event.py (Logfile.addEntry): append to previous
6031         entry, if possible
6033         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6034         anticipating Swappable
6035         (InternalShellCommand.remoteUpdate): split out various log-adding
6036         methods so subclasses can snarf stdout separately
6038         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6039         in anticipation of Swappable build logs
6040         (Builder.testsFinished): anticipating TestResults, still disabled
6042         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6043         last 100 events
6045         * buildbot/status/event.py (Logfile): add (disabled) support for
6046         Swappable, not ready for use yet
6048         * buildbot/util.py (Swappable): object which is swapped out to
6049         disk after some period of no use.
6050         * test/test_swap.py: test buildbot.utils.Swappable
6052 2003-04-14  Brian Warner  <warner@lothar.com>
6054         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6055         periodic-build timer. Set the .periodicBuildTime on a builder
6056         instance to some number of seconds to activate it.
6058         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6060         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6061         a way that survives result tuples
6063 2003-04-12  Brian Warner  <warner@lothar.com>
6065         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6066         return a dict instead of a tuple: allow summarizers to provide
6067         multiple summaries if they want
6068         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6069         (debuildSummarizer): summarize lintian warnings/errors
6071 2003-04-10  Brian Warner  <warner@lothar.com>
6073         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6075 2003-04-09  Brian Warner  <warner@lothar.com>
6077         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6078         empty summaries: happens when the tests fail so hard they don't emit
6079         a parseable summary line.
6081         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6082         Allow summaryFunction to return None to indicate no summary should
6083         be added.
6085         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6086         writing to stale HTTP requests: notice when they disconnect and
6087         remove the request from the list. Also add CacheToFile from
6088         moshez, will be used later.
6090 2003-04-08  Brian Warner  <warner@lothar.com>
6092         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6093         should be an int, not a list of strings
6095         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6096         if we weren't actually connected
6098         * buildbot/process/step_twisted.py (trialTextSummarizer): function
6099         to show the tail end of the trial text output
6101         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6102         hook to summarize the results of a ShellCommand
6104 2003-04-07  Brian Warner  <warner@lothar.com>
6106         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6107         twisted test suite code into a single class.
6108         * buildbot/process/process_twisted.py: same
6110 2003-04-04  Brian Warner  <warner@lothar.com>
6112         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6114         * README (SLAVE): document use of mktap to create slave .tap file
6115         (REQUIREMENTS): describe dependencies
6117         * buildbot/bb_tap.py, buildbot/plugins.tml:
6118         * buildbot/bot.py (updateApplication): Add mktap support for creating
6119         buildslave .tap files
6121 2003-03-28  Brian Warner  <warner@lothar.com>
6123         * buildbot/process/step.py (InternalShellCommand.finished): handle
6124         new tuple result values (fix embarrasing bug that appeared during
6125         PyCon demo)
6127 2003-03-27  Brian Warner  <warner@lothar.com>
6129         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6130         -making program
6132 2003-03-25  Brian Warner  <warner@lothar.com>
6134         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6135         to overall build status
6136         * buildbot/clients/base.py (Builder): improve event printing
6137         * buildbot/process/base.py (BasicBuildFactory): use specific steps
6138         instead of generic ShellCommand
6139         (Build): Add .stopBuild, use it when slave is detached
6141         * buildbot/process/step.py (Configure,Test): give the steps their
6142         own names and status strings
6144         * buildbot/status/html.py (StatusResource): add "show" argument,
6145         lets you limit the set of Builders being displayed.
6147 2003-03-20  Brian Warner  <warner@lothar.com>
6149         * buildbot/process/basic.py: removed
6151 2003-03-19  Brian Warner  <warner@lothar.com>
6153         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6154         turn off process-docs by default
6156         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6157         when displaying build information without anything in allBuilds[]
6159         * buildbot/bot.py (makeApp): really take password from sys.argv
6161 2003-03-18  Brian Warner  <warner@lothar.com>
6163         * buildbot/bot.py (buildApp): take password from sys.argv
6165         * README: replace with more useful text
6167         * setup.py: add a real one
6168         * MANIFEST.in, .cvsignore: more distutils packaging stuff
6169         
6170         * docs/PyCon-2003/: added sources for PyCon paper.
6172         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6173         now Build objects control the process and Builder only handles
6174         slave stuff and distribution of changes/status. A new BuildFactory
6175         class creates Build objects on demand.
6177         Created ConfigurableBuild which takes a list of steps to run. This
6178         makes it a lot easier to set up a new kind of build and moves us
6179         closer to being able to configure a build from a web page.
6181         * buildbot/process/step_twisted.py, process_twisted.py: move to
6182         new model. A lot of code went away.
6183         
6184         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6185         send lots of empty progress messages to the client.
6187         * buildbot/master.py (makeApp): enforce builder-name uniqueness
6189 2003-02-20  Brian Warner  <warner@lothar.com>
6191         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6193         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6194         Twisted bug that prevented non-pty processes from working just got
6195         fixed, and the bug that leaks ptys is still being investigated.
6197         * buildbot/process/step.py (CVS): send timeout arg to slave
6199         * buildbot/clients/gtkPanes.py: add connection-status row, handle
6200         builders coming and going
6201         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6202         from CVSToys, handle lost-buildmaster
6204         * buildbot/status/client.py (StatusClientService.removeBuilder):
6205         Clean up status client protocol: send builders (with references)
6206         as they are created, rather than sending a list and requiring the
6207         client to figure out which ones are new.
6208         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6209         attempts to force a build on an unknown builder
6211 2003-02-19  Brian Warner  <warner@lothar.com>
6213         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6214         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6215         Twisted stops leaking them.
6216         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6217         builder goes to an idle state.
6219         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6220         I figure out why CVS commands hang without them, and/or I fix the
6221         hung-command timeout
6223 2003-02-16  Brian Warner  <warner@lothar.com>
6225         * buildbot/process/step_twisted.py: bin/hlint went away, replace
6226         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6227         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6228         GenerateDocs now that they are prefixed with WARNING:.
6230         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6231         use manual href target instead of request.childLink
6233         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6234         display every second, but update the ETA every 5 seconds (or
6235         whenever) as remote_progress messages arrive.
6238 2003-02-12  Brian Warner  <warner@lothar.com>
6240         * *: import current sources from home CVS repository
6241         
6243 # Local Variables:
6244 # add-log-time-format: add-log-iso8601-time-string
6245 # End: