contrib/svn_buildbot.py: handle property changes correctly
[buildbot.git] / ChangeLog
blob14238f13dc02543e9f086180b24272591f4b6106
1 2006-06-02  Brian Warner  <warner@lothar.com>
3         * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
4         first six columns of 'svnlook' output, not just the first column,
5         since property changes appear in the other five. Thanks to Olivier
6         Bonnet for the patch.
8 2006-06-01  Brian Warner  <warner@lothar.com>
10         * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
11         the fake build, so that title= has something to be set to
13         * buildbot/status/html.py (BuildBox.getBox): set the 'title='
14         attribute of the "Build #NN" link in the yellow start-the-build
15         box to the build's reason. This means that you get a little
16         tooltip explaining why the build was done when you hover over the
17         yellow box. Thanks to Zandr Milewski for the suggestion.
19         * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
20         (Box.setETA): handle ETA=None (by stopping the timer)
21         (Box.update): make the [soon] text less different than the usual
22         text, so the rest of the text doesn't flop around so much. It
23         would be awfully nice to figure out how to center this stuff.
24         (ThreeRowBuilder.stepETAUpdate): more debugging printouts
26         * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
27         by default, so that any ShellCommand which fails marks the overall
28         build as a failure. I should have done this from the beginning.
29         Add flunkOnFailure=False to the arguments if you want to turn off
30         this behavior.
32 2006-05-30  Brian Warner  <warner@lothar.com>
34         * buildbot/clients/gtkPanes.py: add a third row: now it shows
35         last-build/current-build/current-step. Show what step is currently
36         running. Show ETA for both the overall build and the current step.
37         Update GTK calls to modern non-deprecated forms. There's still a
38         lot of dead code and debug noise to remove.
40         * buildbot/process/step_twisted.py (Trial): set the step name, so it
41         shows up properly in status displays
43 2006-05-28  Brian Warner  <warner@lothar.com>
45         * buildbot/test/test_properties.py (Run.testInterpolate): on the
46         build we use to verify that WithProperties works:
48         ** set flunkOnFailure=True so that build failures get noticed
49         ** set workdir='.' so that the build succeeds, otherwise it is trying
50             to touch 'build/something', and 'build/' doesn't exist because
51             usually that's created by a Source step
52         ** set timeout=10, because Twisted-1.3.0 has a race condition that
53             this test somehow triggers, in which the 'touch' process becomes
54             a zombie and we wait for th etimeout before giving up on it.
56         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
57         to log the Build results and step logs to the twisted log.
58         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
59         what went wrong if a build was expected to succeed but didn't.
61         * buildbot/process/step_twisted.py (Trial): set the default
62         trialMode to '--reporter=bwverbose', which specifies verbose
63         black-and-white text. Back in twisted-1.3/2.0 days we had to use
64         '-to', but those are completely missing in modern Twisteds.
66         * buildbot/scripts/sample.cfg: make the sample Manhole config use
67         a localhost-only port, to encourage better security
69         * docs/buildbot.texinfo (Change Sources): mention
70         darcs_buildbot.py
72         * .darcs-boring: add a Darcs boringfile
74         * README (REQUIREMENTS): stop claiming compatibility with
75         Twisted-1.3.0
77         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
78         sender
80 2006-05-27  Brian Warner  <warner@lothar.com>
82         * buildbot/__init__.py: bump to 0.7.3+ while between releases
83         * docs/buildbot.texinfo: same
85 2006-05-23  Brian Warner  <warner@lothar.com>
87         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
88         * docs/buildbot.texinfo: set version to match
89         * NEWS: update for 0.7.3
91         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
92         give a quick mapping from VC system to possible ChangeSources
93         (Build Properties): add 'buildername'
95         * buildbot/process/base.py (Build.setupStatus): oops, set
96         'buildername' and 'buildnumber' properties
97         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
98         test them
100 2006-05-22  Brian Warner  <warner@lothar.com>
102         * docs/buildbot.texinfo (Build Properties): explain the syntax of
103         property interpolation better
105         * README (INSTALLATION): remove old '-v' argument from recommended
106         trial command line
108         * docs/buildbot.texinfo (ShellCommand): add docs for description=
109         and descriptionDone= arguments. Thanks to Niklaus Giger for the
110         patch. SF#1475494.
112         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
113         'svnversion' instead of grepping the output of 'svn info', much
114         simpler and avoids CR/LF problems on windows. Thanks to Olivier
115         Bonnet for the suggestion.
116         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
117         require the WC_PATH argument, so run 'svnversion .' instead.
119         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
120         aren't supposed to have 'self' in their argument list
122 2006-05-21  Brian Warner  <warner@lothar.com>
124         * buildbot/process/step.py (ShellCommand.start): make
125         testInterpolate pass. I was passing the uninterpolated command to
126         the RemoteShellCommand constructor
127         (ShellCommand._interpolateProperties): oops, handle non-list
128         commands (i.e. strings with multiple words separated by spaces in
129         them) properly, instead of forgetting about them.
131         * buildbot/test/test_properties.py (Run.testInterpolate): new test
132         to actually try to use build properties in a real build. This test
133         fails.
134         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
135         to start and evaluate builds
137         * buildbot/test/test__versions.py: add a pseudo-test to record
138         what version of Twisted/Python/Buildbot are running. This should
139         show up at the beginning of _trial_tmp/test.log, and exists to help
140         debug other problems.
142         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
143         a filename to be served as 'robots.txt' to discourage web spiders.
144         Adapted from a patch by Tobi Vollebregt, thanks!
145         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
146         (Waterfall.test_waterfall): tweak the way that filenames are put
147         into the config file, to accomodate windows pathnames better.
149         * docs/buildbot.texinfo (HTML Waterfall): document it
151         * buildbot/process/process_twisted.py
152         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
153         changed the build process. The new setup.py no longer takes the
154         'all' argument.
155         (FullTwistedBuildFactory.__init__): same
156         (TwistedReactorsBuildFactory.__init__): same
158         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
159         be placed in the [hooks] section of the central repository (the
160         one that everybody pushes changes to).
162 2006-05-20  Brian Warner  <warner@lothar.com>
164         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
165         .darcs-context file, use binary mode. I think this was causing a
166         Darcs failure under windows.
168 2006-05-19  Brian Warner  <warner@lothar.com>
170         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
171         use a timezone string of +0000 and gmtime, since this timestamp is
172         sent to a buildmaster and %z is broken.
174         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
175         string and localtime, since this timestamp will only be consumed
176         locally, and %z is broken.
178         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
179         gmtime, since this timestamp is returned to the buildmaster, and
180         %z is broken.
182 2006-05-18  Brian Warner  <warner@lothar.com>
184         * NEWS: update in preparation for next release
186         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
187         setup-repository and do-we-have-the-vc-tools code into a separate
188         "helper" class, which sticks around in a single module-level
189         object. This seems more likely to continue to work in the future
190         than having it hide in the TestCase and hope that TestCases stick
191         around for a long time.
193         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
194         addremove' has been deprecated in recent versions of mercurial, so
195         use 'hg add' instead
197 2006-05-07  Brian Warner  <warner@lothar.com>
199         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
200         operating under windows, move the file before opening it, since
201         you can't rename a file that somebody has open.
203         * buildbot/process/base.py (Build.setupBuild): if something goes
204         wrong while creating a Step, log the name and arguments, since the
205         error message when you get the number of arguments wrong is really
206         opaque.
208 2006-05-06  Brian Warner  <warner@lothar.com>
210         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
211         bugs in twisted-specific code not covered by my unit tests, this
212         time use 'cmd' argument instead of self.cmd
214         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
215         fix stupid braino: either use startwith or find()==0, not both.
216         (TwistedReactorsBuildFactory.__init__): another dumb typo
218         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
219         mark this test as TODO under windows, since process-killing seems
220         dodgy there. We'll come back to this later and try to fix it
221         properly.
223         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
224         and don't include a timezone
225         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
226         This should avoid the windows-with-verbose-timezone-name problem
227         altogether.
228         (Patch.testPatch): add a test which runs 'patch' with less
229         overhead than the full VCBase.do_patch sequence, to try to isolate
230         a windows test failure. This one uses slave.commands.ShellCommand
231         and 'patch', but none of the VC code.
233         * buildbot/slave/commands.py (getCommand): use which() to find the
234         executables for 'cvs', 'svn', etc. This ought to help under
235         windows.
237         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
238         working directory before starting. If an earlier test failed, the
239         leftover directory would mistakenly flunk a later test.
240         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
241         Make sure that we use the right commandlines if which("tla") picks
242         up "tla.exe" (as it does under windows).
243         (TlaSupport.do_get): factor out this tla-vs-baz difference
244         (TlaSupport.vc_create): more tla-vs-baz differences
246         * buildbot/test/test_slavecommand.py
247         (ShellBase.testShellMissingCommand): stop trying to assert
248         anything about the error message: different shells on different
249         OSes with different languages makes it hard, and it really isn't
250         that interesting of a thing to test anyway.
252         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
253         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
254         "Panther"), because it has a bug which flunks a couple tests in
255         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
256         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
257         able to test that yet.
259 2006-04-30  Brian Warner  <warner@lothar.com>
261         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
262         make sure child commands emit messages in english, so our regexps
263         will match. Thanks to Nikaus Giger for identifying the problems.
264         (VCBase._do_vctest_export_1): mode="export" is not responsible
265         for setting the "got_revision" property, since in many cases it is
266         not convenient to determine.
267         (SVNSupport.capable): when running 'svn --version' to check for
268         ra_local, we want error messages in english
269         * buildbot/test/test_slavecommand.py 
270         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
271         to emit the error message in english
273         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
274         the environment with $LC_ALL="C" so that Commands which need to
275         parse the output of their child processes can obtain it in
276         english.
277         (SVN.parseGotRevision): call "svn info" afterwards instead of
278         watching the output of the "svn update" or "svn checkout".
279         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
280         (Arch.parseGotRevision): same
281         (Bazaar.parseGotRevision): same
282         (Mercurial.parseGotRevision): same
284         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
285         $LC_ALL="C" when running commands under 'buildbot try', too
287         * buildbot/test/__init__.py: remove the global os.environ()
288         setting, instead we do it just for the tests that run commands and
289         need to parse their output.
291         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
292         remove the overly-short .timeout on this test, because non-DNotify
293         platforms must fall back to polling which happens at 10 second
294         intervals, so a 5 second timeout would never succeed.
296 2006-04-24  Brian Warner  <warner@lothar.com>
298         * docs/buildbot.texinfo (Installing the code): update trial
299         invocation, SF#1469116 by Niklaus Giger.
300         (Attributes of Changes): updated branch-name examples to be
301         a bit more realistic, SF#1475240 by Stephen Davis.
303         * contrib/windows/buildbot2.bat: utility wrapper for windows
304         developers, contributed by Nick Trout (after a year of neglect..
305         sorry!). SF#1194231.
307         * buildbot/test/test_vc.py (*.capable): store the actual VC
308         binary's pathname in VCS[vcname], so it can be retrieved later
309         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
310         strip out non-numeric timezone information, specifically the funky
311         German string that his system produced that confuses CVS.
312         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
313         allow Darcs tests to work on windows
314         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
315         procutils.which() everywhere, to allow tryclient to work under
316         windows. Also from Niklaus Giger, SF#1463394.
318         * buildbot/twcompat.py (which): move the replacement for a missing
319         twisted.python.procutils.which from test_vc.py to here, so it can
320         be used in other places too (specifically tryclient.py)
322 2006-04-23  Brian Warner  <warner@lothar.com>
324         * buildbot/status/html.py (StatusResourceBuild.body): replace the
325         bare buildbotURL/projectName line with a proper DIV, along with a
326         CSS class of "title", from Stefan Seefeld (SF#1461675).
327         (WaterfallStatusResource.body0): remove the redundant 'table'
328         class from the table
329         (WaterfallStatusResource.body): same. Also add class="LastBuild"
330         to the top-row TR, and class="Activity" to the second-row TR,
331         rather than putting them in the individual TD nodes.
333         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
334         'got_revision' build property for all VC systems that implement
335         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
337         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
338         to determine which revision we actually obtained
339         (CVS.parseGotRevision): implement this for CVS, which just means
340         to grab a timestamp. Not ideal, and it depends upon the buildslave
341         having a clock that is reasonably well syncronized with the server,
342         but it's better than nothing.
343         (SVN.parseGotRevision): implement it for SVN, which is accurate
344         (Darcs.parseGotRevision): same
345         (Arch.parseGotRevision): same
346         (Bazaar.parseGotRevision): same
347         (Mercurial.parseGotRevision): same
349         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
350         keep a record of all non-stdout/stderr/header/rc status updates,
351         for the benefit of RemoteCommands that send other useful things,
352         like got_revision
353         (Source.commandComplete): put any 'got_revision' status values
354         into a build property of the same name
357         * buildbot/process/step_twisted.py (Trial): update to deal with
358         new ShellCommand refactoring
360         * docs/buildbot.texinfo (Build Properties): document new feature
361         that allows BuildSteps to get/set Build-wide properties like which
362         revision was requested and/or checked out.
364         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
365         * buildbot/status/builder.py (BuildStatus.getProperty): implement
366         it. Note that this bumps the persistenceVersion of the saved Build
367         object, so add the necessary upgrade-old-version logic to include
368         an empty properties dict.
370         * buildbot/process/base.py (Build.setProperty): implement it
371         (Build.getProperty): same
372         (Build.startBuild): change build startup to set 'branch',
373         'revision', and 'slavename' properties at the right time
375         * buildbot/process/step.py (BuildStep.__init__): change setup to
376         require 'build' argument in a better way
377         (LoggingBuildStep): split ShellCommand into two pieces, for better
378         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
379         a single RemoteCommand that sends stdout/stderr status text. It
380         also provides the usual commandComplete / createSummary /
381         evaluateCommand / getText methods to be overridden...
382         (ShellCommand): .. whereas ShellCommand is specifically for
383         running RemoteShellCommands. Other shell-like BuildSteps (like
384         Source) can inherit from LoggingBuildStep instead of ShellCommand
385         (WithProperties): marker class to do build-property interpolation
386         (Source): inherit from LoggingBuildStep instead of ShellCommand
387         (RemoteDummy): same
389         * buildbot/test/test_properties.py: test new functionality
391 2006-04-21  Brian Warner  <warner@lothar.com>
393         * buildbot/test/test_vc.py: rename testBranch to
394         testCheckoutBranch to keep the tests in about the right
395         alphabetical order
397 2006-04-18  Brian Warner  <warner@lothar.com>
399         * docs/buildbot.texinfo (PBListener): improve cross-references
400         between PBListener and 'buildbot statusgui', thanks to John Pye
401         for the suggestion.
403 2006-04-17  Brian Warner  <warner@lothar.com>
405         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
406         running under Twisted-1.3.0, otherwise skipped tests are reported
407         as errors.
409         * all: use isinstance() instead of 'type(x) is foo', suggested by
410         Neal Norwitz
412         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
413         oops, fix a brain-fade from the other week, when making the
414         addStep changes. I changed all the __init__ upcalls to use the
415         wrong superclass name.
416         (FullTwistedBuildFactory.__init__): same
417         (TwistedDebsBuildFactory.__init__): same
418         (TwistedReactorsBuildFactory.__init__): same
419         (TwistedBuild.isFileImportant): use .startswith for clarity,
420         thanks to Neal Norwitz for the suggestions.
422         * contrib/viewcvspoll.py: script to poll a viewcvs database for
423         changes, then deliver them over PB to a remote buildmaster.
425         * contrib/svnpoller.py: added script by John Pye to poll a remote
426         SVN repository (by running 'svn log') from a cronjob, and run
427         'buildbot sendchange' to deliver the changes to a remote
428         buildmaster.
429         * contrib/svn_watcher.py: added script by Niklaus Giger (a
430         modification of svnpoller.py), same purpose, but this one loops
431         internally (rather than expecting to run from a cronjob) and works
432         under windows.
433         * contrib/README.txt: same
435 2006-04-11  Brian Warner  <warner@lothar.com>
437         * all: fix a number of incorrect names and missing imports, thanks
438         to Anthony Baxter for the patch.
439         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
440         remove unused buggy method.
441         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
442         comes from shutil, not "shutils"
443         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
444         (Arch.checkSlaveVersion): same
445         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
446         some disabled code
447         * buildbot/process/step_twisted2.py: add some missing imports
448         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
449         this code used to live in twisted.internet.defer
451 2006-04-10  Brian Warner  <warner@lothar.com>
453         * buildbot/process/step.py (Mercurial): add Mercurial support
454         * buildbot/slave/commands.py (Mercurial): same
455         * buildbot/scripts/tryclient.py (MercurialExtractor): same
456         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
457         not yet tested, but 'try' support *is* covered
458         * docs/buildbot.texinfo (Mercurial): document it
460         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
461         some debugging messages (turned off)
462         * buildbot/test/test_vc.py: improve debug messages
464 2006-04-07  Brian Warner  <warner@lothar.com>
466         * buildbot/test/test_vc.py (which): define our own which() in case
467         we can't import twisted.python.procutils, because procutils doesn't
468         exist in Twisted-1.3
470         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
471         of SlaveLocks for performance tests
473         * docs/examples/twisted_master.cfg: update to match current usage
475         * buildbot/changes/p4poller.py (P4Source): add new arguments:
476         password, p4 binary, pollinterval, maximum history to check.
477         Patch from an anonymous sf.net contributor, SF#1219384.
478         * buildbot/process/step.py (P4Sync.__init__): add username,
479         password, and client arguments.
480         * buildbot/slave/commands.py (P4Sync): same
482 2006-04-05  Brian Warner  <warner@lothar.com>
484         * buildbot/process/factory.py (BuildFactory.addStep): new method
485         to add steps to a BuildFactory. Use it instead of f.steps.append,
486         and you can probably avoid using the s() convenience function.
487         Patch from Neal Norwitz, sf.net #1412605.
488         (other): update all factories to use addStep
489         * buildbot/process/process_twisted.py: update all factories to use
490         addStep.
492 2006-04-03  Brian Warner  <warner@lothar.com>
494         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
495         work under windows too. Adapted from a patch by Niklaus Giger,
496         addresses SF#1463399.
498         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
499         spawned commands emit parseable results in english and not some
500         other language. Patch from Niklaus Giger, SF#1463395.
502         * README (INSTALLATION): discourage users from running unit tests on
503         a "network drive", patch from Niklaus Giger, SF#1463394.
505 2006-03-22  Brian Warner  <warner@lothar.com>
507         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
508         function to turn a repository-relative pathname into a (branch,
509         branch-relative-filename) tuple. Change this function to handle
510         the branch naming policy used by your Subversion repository.
511         Thanks to AllMyData.com for sponsoring this work.
513 2006-03-16  Brian Warner  <warner@lothar.com>
515         * buildbot/scripts/sample.cfg: add python-mode declaration for
516         vim. Thanks to John Pye for the patch.
518         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
519         command line, mention the importance of running 'crontab' as the
520         buildmaster/buildslave user. Thanks to John Pye for the catch.
522 2006-03-13  Brian Warner  <warner@lothar.com>
524         * buildbot/status/words.py (IRC): add an optional password=
525         argument, which will be sent to Nickserv in an IDENTIFY message at
526         login, to claim the nickname. freenode requires this before the
527         bot can sent (or reply to) private messages. Thanks to Clement
528         Stenac for the patch.
529         * docs/buildbot.texinfo (IRC Bot): document it
531         * buildbot/status/builder.py (LogFile.merge): don't write chunks
532         larger than chunkSize. Fixes SF#1349253.
533         * buildbot/test/test_status.py (Log.testLargeSummary): test it
534         (Log.testConsumer): update to match new internal chunking behavior
536 2006-03-12  Brian Warner  <warner@lothar.com>
538         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
540         * buildbot/test/test_maildir.py (MaildirTest): rename the
541         'timeout' method, as it collides with trial's internals
543         * buildbot/scripts/runner.py: add 'buildbot restart' command
544         (stop): don't sys.exit() out of here, otherwise restart can't work
545         * docs/buildbot.texinfo (Shutdown): document it
547         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
548         * buildbot/status/html.py (Waterfall.__init__): same
549         * buildbot/process/builder.py (Builder.startBuild): same
550         * buildbot/process/base.py (BuildRequest): same
551         * buildbot/sourcestamp.py (SourceStamp): same
552         * buildbot/scheduler.py (Nightly): same
554         * buildbot/__init__.py (version): bump to 0.7.2+ while between
555         releases
556         * docs/buildbot.texinfo: same
558 2006-02-17  Brian Warner  <warner@lothar.com>
560         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
561         * docs/buildbot.texinfo: set version number to match
562         * NEWS: update for 0.7.2
564 2006-02-16  Brian Warner  <warner@lothar.com>
566         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
568 2006-02-09  Brian Warner  <warner@lothar.com>
570         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
571         add text to explain per-build branch parameters
572         * NEWS: mention --umask
574 2006-02-08  Brian Warner  <warner@lothar.com>
576         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
577         method
578         (SlaveOptions.optParameters): add --umask, to make it possible to
579         make buildslave-generated files (including build products) be
580         world-readable
581         (slaveTAC): same
582         * buildbot/slave/bot.py (BuildSlave.startService): same
584 2006-01-23  Brian Warner  <warner@lothar.com>
586         * buildbot/status/builder.py: urllib.quote() all URLs that include
587         Builder names, so that builders can include characters like '/'
588         and ' ' without completely breaking the resulting HTML. Thanks to
589         Kevin Turner for the patch.
590         * buildbot/status/html.py: same
591         * buildbot/test/test_web.py (GetURL.testBuild): match changes
593         * NEWS: update in preparation for upcoming release
595 2006-01-18  Brian Warner  <warner@lothar.com>
597         * docs/examples/twisted_master.cfg: update to match the Twisted
598         buildbot: remove python2.2, switch to exarkun's buildslaves,
599         disable the .deb builder until we figure out how to build twisted
600         .debs from SVN, add some ktrace debugging to the OS-X build
601         process and remove the qt build, remove threadless builders,
602         change freebsd builder to use landonf's buildslave.
604 2006-01-12  Brian Warner  <warner@lothar.com>
606         * buildbot/master.py (Manhole.__init__): let port= be a strports
607         specification string, but handle a regular int for backwards
608         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
609         used in master.cfg to limit connections to just the local host.
610         (BuildMaster.loadConfig): same for c['slavePortnum']
611         * buildbot/scheduler.py (Try_Userpass.__init__): same
612         * buildbot/status/client.py (PBListener.__init__): same
613         * buildbot/status/html.py (Waterfall.__init__): same, for both
614         http_port and distrib_port. Include backwards-compatibility checks
615         so distrib_port can be a filename string and still mean unix:/foo
616         * docs/buildbot.texinfo (Setting the slaveport): document it
617         (Debug options): same
618         (HTML Waterfall): same
619         (PBListener): same
620         (try): same
621         * buildbot/test/test_config.py (ConfigTest): test it
623         * buildbot/master.py (BuildMaster.loadConfig): wait for the
624         slaveport's disownServiceParent deferred to fire before opening
625         the new one. Fixes an annoying bug in the unit tests.
627 2006-01-03  Brian Warner  <warner@lothar.com>
629         * buildbot/master.py (BuildMaster): remove the .schedulers
630         attribute, replacing it with an allSchedulers() method that looks
631         for all IService children that implement IScheduler. Having only
632         one parent/child relationship means fewer opportunities for bugs.
633         (BuildMaster.allSchedulers): new method
634         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
635         also fix ugly bug that caused any config-file reload to
636         half-forget about the earlier Schedulers, causing an exception
637         when a Change arrived and was handed to a half-connected
638         Scheduler. The exception was in scheduler.py line 54ish:
639           self.parent.submitBuildSet(bs)
640           exceptions.AttributeError: 'NoneType' object has no attribute
641           'submitBuildSet'
642         (BuildMaster.addChange): update to use allSchedulers()
644         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
645         to work properly with twisted-1.3.0, where you must explicitly
646         include the __implements__ from parent classes
647         (BaseScheduler.__repr__): make it easier to distinguish distinct
648         instances
649         (BaseUpstreamScheduler.__implements__): same
651         * buildbot/status/builder.py (Status.getSchedulers): update to
652         use allSchedulers()
653         * buildbot/test/test_run.py (Run.testMaster): same
654         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
655         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
656         make sure Scheduler instances are left alone when an identical
657         config file is reloaded
658         (ConfigElements.testSchedulers): make sure Schedulers are properly
659         comparable
661         * Makefile (TRIALARGS): my local default Twisted version is now
662         2.1.0, update the trial arguments accordingly
664 2005-12-22  Brian Warner  <warner@lothar.com>
666         * docs/examples/twisted_master.cfg: merge changes from pyr: add
667         new win32 builders
669         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
670         addChange in the parent class, although I suspect this should be
671         fixed better in the future.
673 2005-11-26  Brian Warner  <warner@lothar.com>
675         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
676         explode when branch==None, thanks to Kevin Turner for the catch
677         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
678         it
680         * buildbot/__init__.py (version): bump to 0.7.1+ while between
681         releases
682         * docs/buildbot.texinfo: same
684 2005-11-26  Brian Warner  <warner@lothar.com>
686         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
687         * docs/buildbot.texinfo: set version number to match
689 2005-11-26  Brian Warner  <warner@lothar.com>
691         * NEWS: update for 0.7.1
693         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
694         sure that unsubscribe works even if we never sent an ETA update.
695         Also, don't explode on duplicate unsubscribe.
696         (BuildStepStatus.addLog): make the convenience "return self"-added
697         watcher automatically unsubscribe when the Step finishes.
698         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
699         (BuildStatus.stepStarted): same auto-unsubscribe
700         (BuilderStatus.buildStarted): same auto-unsubscribe
702         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
703         auto-unsubscribe
704         (IStatusReceiver.stepStarted): same
705         (IStatusReceiver.logStarted): same
707         * buildbot/test/test_run.py (Status): move the Status test..
708         * buildbot/test/test_status.py (Subscription): .. to here
710 2005-11-25  Brian Warner  <warner@lothar.com>
712         * NEWS: more updates
714         * buildbot/locks.py: fix the problem in which loading a master.cfg
715         file that changes some Builders (but not all of them) can result
716         in having multiple copies of the same Lock. Now, the real Locks
717         are kept in a table inside the BotMaster, and the Builders/Steps
718         use "LockIDs", which are still instances of MasterLock and
719         SlaveLock. The real Locks are instances of the new RealMasterLock
720         and RealSlaveLock classes.
721         * buildbot/master.py (BotMaster.getLockByID): new method to
722         convert LockIDs into real Locks.
723         * buildbot/process/base.py (Build.startBuild): convert LockIDs
724         into real Locks before building
725         * buildbot/process/step.py (BuildStep.startStep): same
726         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
727         exercises the problem
730         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
731         what Schedulers are available
733         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
734         work by Dobes Vandermeer and hacked mercilessly by me. This offers
735         'cron'-style build scheduling at certain times of day, week,
736         month, or year.
737         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
739         * buildbot/scheduler.py (Scheduler): change fileIsImportant
740         handling: treat self.fileIsImportant more as an attribute that
741         contains a callable than as a method. If the attribute is None,
742         don't call it and assume all filenames are important. It is still
743         possible to provide a fileIsImportant method in a subclass,
744         however.
745         (AnyBranchScheduler): handle fileIsImportant=None, previously it
746         was broken
747         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
748         test using AnyBranchScheduler with fileIsImportant=None
750 2005-11-24  Brian Warner  <warner@lothar.com>
752         * buildbot/test/test_config.py (StartService): don't claim a fixed
753         port number, instead set slavePort=0 on the first pass, figure out
754         what port was allocated, then switch to a config file that uses
755         the allocated port.
757         * buildbot/master.py (BuildMaster.loadConfig): close the old
758         slaveport before opening the new one, because unit tests might
759         replace slavePort=0 with the same allocated portnumber, and if we
760         don't wait for the old port to close first, we get a "port already
761         in use" error. There is a tiny race condition here, but the only
762         threat is from other programs that bind (statically) to the same
763         port number we happened to be allocated, and only if those
764         programs use SO_REUSEADDR, and only if they get control in between
765         reactor turns.
767         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
769         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
770         deleted ChangeSources before adding any new ones
771         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
772         compare_attrs, to make sure that a config-file reload does not
773         unnecessarily replace an unmodified ChangeSource instance
774         * buildbot/test/test_config.py (ConfigTest.testSources): update
776         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
777         mean "don't build anything", and add a warning if it gets used
778         because it isn't actually useful.
780         * contrib/svn_buildbot.py: update example usage to match the port
781         number that gets used by the PBChangeSource
782         * buildbot/scripts/sample.cfg: add example of PBChangeSource
784 2005-11-22  Brian Warner  <warner@lothar.com>
786         * NEWS: start collecting items for next release
788         * buildbot/process/step.py (SVN.computeSourceRevision): assume
789         revisions are strings
790         (P4Sync.computeSourceRevision): same
792         * buildbot/status/html.py (StatusResourceBuild.body): add a link
793         to the Buildbot's overall status page
794         (StatusResourceBuilder.body): same
796 2005-11-15  Brian Warner  <warner@lothar.com>
798         * buildbot/master.py (BuildMaster.loadConfig): serialize the
799         config-file loading, specifically to make sure old StatusTargets
800         are finished shutting down before new ones start up (thus
801         resolving a bug in which changing the Waterfall object would fail
802         because both new and old instances were claiming the same
803         listening port). Also load new Schedulers after all the new
804         Builders are set up, in case they fire off a new build right away.
805         * buildbot/test/test_config.py (StartService): test it
807         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
808         the branch name to the mail body
810         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
811         Without it, a config-file reload fails to update an existing
812         PBChangeSource.
813         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
814         username/passwd to compare_attrs, for the same reason
815         * buildbot/status/html.py (Waterfall): add favicon to
816         compare_attrs, same reason
818 2005-11-05  Brian Warner  <warner@lothar.com>
820         * buildbot/scripts/tryclient.py (createJobfile): stringify the
821         baserev before stuffing it in the jobfile. This resolves problems
822         under SVN (and probably Arch) where revisions are expressed as
823         numbers. I'm inclined to use string-based revisions everywhere in
824         the future, but this fix should be safe for now. Thanks to Steven
825         Walter for the patch.
827         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
828         binary mode when opening pickle files, to make windows work
829         better. Thanks to Dobes Vandermeer for the catch.
830         * buildbot/status/builder.py (BuildStatus.saveYourself): same
831         (BuilderStatus.getBuildByNumber): same
832         (Status.builderAdded): same
833         * buildbot/master.py (BuildMaster.loadChanges): same
835         * buildbot/util.py (Swappable): delete unused leftover code
837         * buildbot/process/step.py (SVN): when building on a non-default
838         branch, add the word "[branch]" to the VC step's description, so
839         it is obvious that we're not building the usual stuff. Likewise,
840         when we are building a specific revision, add the text "rNNN" to
841         indicate what that revision number is. Thanks to Brad Hards and
842         Nathaniel Smith for the suggestion.
843         (Darcs.startVC): same
844         (Arch.startVC): same
845         (Bazaar.startVC): same
847         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
848         typo, caught by Mark Dillavou, closes SF#1216636.
850         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
851         about a test to add some day
853         * docs/examples/twisted_master.cfg: update: bot1 can now handle
854         the 'full-2.3' build, and the 'reactors' build is now run under
855         python-2.4 because the buildslave no longer has gtk/etc bindings
856         for earlier versions.
858 2005-11-03  Brian Warner  <warner@lothar.com>
860         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
861         method, takes an IBuildStatus and rebuilds it. It might make more
862         sense to add this to IBuildControl instead, but that instance goes
863         away completely once the build has finished, and resubmitting
864         builds can take place weeks later.
865         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
866         * buildbot/status/html.py (StatusResourceBuild): also stash an
867         IBuilderControl so we can use resubmitBuild.
868         (StatusResourceBuild.body): render "resubmit" button if we can.
869         Also add hrefs for each BuildStep
870         (StatusResourceBuild.rebuild): add action for "resubmit" button
871         (StatusResourceBuilder.getChild): give it an IBuilderControl
873         * buildbot/status/builder.py (Status.getURLForThing): change the
874         URL for BuildSteps to have a "step-" prefix, so the magic URLs
875         that live as targets of buttons like "stop" and "rebuild" can't
876         collide with them.
877         * buildbot/status/builder.py (Status.getURLForThing): same
878         * buildbot/status/html.py (StatusResourceBuild.getChild): same
879         (StepBox.getBox): same
880         * buildbot/test/test_web.py (GetURL): same
881         (Logfile): same
883         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
884         exclusivity checks after Source.__init__ upcall, so misspelled
885         arguments will be reported more usefully
886         (Darcs.__init__): same
888 2005-10-29  Brian Warner  <warner@lothar.com>
890         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
891         builder. Move the Try scheduler off to a separate port.
893 2005-10-27  Brian Warner  <warner@lothar.com>
895         * buildbot/clients/gtkPanes.py
896         (TwoRowClient.remote_builderRemoved): disappearing Builders used
897         to cause the app to crash, now they don't.
899         * buildbot/clients/debug.py: display the buildmaster's location
900         in the window's title bar
902 2005-10-26  Brian Warner  <warner@lothar.com>
904         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
905         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
906         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
908         * buildbot/status/html.py (td): put a single non-breaking space
909         inside otherwise empty <td> elements, as a workaround for buggy
910         browsers which would optimize them away (along with any associated
911         styles, like the kind that create the waterfall grid borders).
912         Patch from Frerich Raabe.
914         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
915         argv-list as an argument, defaulting to ["-to"], which is
916         appropriate for the Trial that comes with Twisted-2.1.0 and
917         earlier. The Trial in current Twisted SVN wants
918         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
919         defaults to an empty list.
920         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
921         match it, now that trialMode= is a list instead of a single string
923         * buildbot/__init__.py (version): bump to 0.7.0+ while between
924         releases
925         * docs/buildbot.texinfo: same
927 2005-10-24  Brian Warner  <warner@lothar.com>
929         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
930         * docs/buildbot.texinfo: set version number to match
932 2005-10-24  Brian Warner  <warner@lothar.com>
934         * README: update for 0.7.0
935         * NEWS: same
936         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
938         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
939         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
940         send the branch= argument unless the user really provided one, to
941         retain compatibility with older buildmasters that don't accept
942         that argument.
943         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
944         same
946         * docs/buildbot.texinfo: update lots of stuff
948         * buildbot/scripts/runner.py (sendchange): add a --branch argument
949         to the 'buildbot sendchange' command
950         * buildbot/clients/sendchange.py (Sender.send): same
951         * buildbot/changes/pb.py (ChangePerspective): same
952         * buildbot/test/test_changes.py (Sender.testSender): test it
954         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
955         'default_branch' argument names to 'baseURL' and 'defaultBranch',
956         for consistency with other BuildStep arguments that use camelCase.
957         Well, at least more of them use camelCase (like flunkOnWarnings)
958         than don't.. I wish I'd picked one style and stuck with it
959         earlier. Annoying, but it's best done before the release, since
960         these arguments didn't exist at all in 0.6.6 .
961         (Darcs): same
962         * buildbot/test/test_vc.py (SVN.testCheckout): same
963         (Darcs.testPatch): same
964         * docs/buildbot.texinfo (SVN): document the change
965         (Darcs): same, add some build-on-branch docs
966         * docs/examples/twisted_master.cfg: match change
968         * buildbot/process/step.py (BuildStep): rename
969         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
970         how it is normally used.
971         * buildbot/test/test_steps.py (Version.checkCompare): same
973         * buildbot/process/step.py (CVS.startVC): refuse to build
974         update/copy -style builds on a non-default branch with an old
975         buildslave (<=0.6.6) that doesn't know how to do it properly. The
976         concern is that it will do a VC 'update' in an existing tree when
977         it is supposed to be switching branches (and therefore clobbering
978         the tree to do a full checkout), thus building the wrong source.
979         This used to be a warning, but I think the confusion it is likely
980         to cause warrants making it an error.
981         (SVN.startVC): same, also make mode=export on old slaves an error
982         (Darcs.startVC): same
983         (Git.startVC): improve error message for non-Git-enabled slaves
984         (Arch.checkSlaveVersion): same. continue to emit a warning when a
985         specific revision is built on a slave that doesn't pay attention
986         to args['revision'], because for slowly-changing trees it will
987         probably do the right thing, and because we have no way to tell
988         whether we're asking it to build the most recent version or not.
989         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
991         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
992         that 'master' is in host:portnum format, to catch errors sooner
994 2005-10-23  Brian Warner  <warner@lothar.com>
996         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
997         when creating the list of warning messages, include the line
998         immediately after each WARNING: line, since that's usually where
999         the file and line number wind up.
1001         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1002         TryScheduler
1004         * NEWS: update
1006 2005-10-22  Brian Warner  <warner@lothar.com>
1008         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1009         patch from Brad Hards
1010         * buildbot/status/classic.css: same
1011         * buildbot/test/test_web.py (Waterfall): match changes
1013         * buildbot/test/test_steps.py (BuildStep.setUp): set
1014         nextBuildNumber so the test passes
1015         * buildbot/test/test_status.py (MyBuilder): same
1017         * buildbot/status/html.py (StatusResourceBuild.body): revision
1018         might be numeric, so stringify it before html-escapifying it
1019         (CurrentBox.getBox): add a "waiting" state, and show a countdown
1020         timer for the upcoming build
1021         * buildbot/status/classic.css: add background-color attributes for
1022         offline/waiting/building classes
1024         * buildbot/status/builder.py (BuildStatus): derive from
1025         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1026         the default (i.e. unknown) .slavename to "???" instead of None,
1027         since even unknown slavenames need to be printed eventually.
1028         (BuilderStatus): also derive from styles.Versioned . More
1029         importantly, determine .nextBuildNumber at creation/unpickling
1030         time by scanning the directory of saved BuildStatus instances and
1031         choosing one larger than the highest-numbered one found. This
1032         should fix the problem where random errors during upgrades cause
1033         the buildbot to forget about earlier builds. .nextBuildNumber is
1034         no longer stored in the pickle.
1035         (Status.builderAdded): if we can't unpickle the BuilderStatus,
1036         at least log the error. Also call Builder.determineNextBuildNumber
1037         once the basedir is set.
1039         * buildbot/master.py (BuildMaster.loadChanges): do
1040         styles.doUpgrade afterwards, in case I decide to make Changes
1041         derived from styles.Versioned some day and forget to make this
1042         change later.
1045         * buildbot/test/test_runner.py (Options.testForceOptions): skip
1046         when running under older pythons (<2.3) in which the shlex module
1047         doesn't have a 'split' function.
1049         * buildbot/process/step.py (ShellCommand.start): make
1050         errorMessages= be a list of strings to stuff in the log before the
1051         command actually starts. This makes it easier to flag multiple
1052         warning messages, e.g. when the Source steps have to deal with an
1053         old buildslave.
1054         (CVS.startVC): handle slaves that don't handle multiple branches
1055         by switching into 'clobber' mode
1056         (SVN.startVC): same. Also reject branches without base_url
1057         (Darcs.startVC): same. Also reject revision= in older slaves
1058         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1059         (Bazaar.startVC): same, and test for baz separately than for arch
1061         * buildbot/slave/commands.py (cvs_ver): document new features
1063         * buildbot/process/step.py (BuildStep.slaveVersion): document it
1064         (BuildStep.slaveVersionNewEnough): more useful utility method
1065         * buildbot/test/test_steps.py (Version): start testing it
1067         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1068         the 'force' command requires python2.3, for the shlex.split method
1070         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1071         since we don't use it anymore. The Twisted buildbot uses a
1072         PBChangeSource now.
1074 2005-10-21  Brian Warner  <warner@lothar.com>
1076         * buildbot/process/process_twisted.py: rework all BuildFactory
1077         classes to take a 'source' step as an argument, instead of
1078         building up the SVN instance in the factory.
1079         * docs/examples/twisted_master.cfg: enable build-on-branch by
1080         providing a base_url and default_branch
1082         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1083         control over --branch and --revision, not that they are always
1084         legal to provide
1085         * buildbot/status/html.py (StatusResourceBuilder.force): same
1086         (StatusResourceBuild.body): display SourceStamp components
1088         * buildbot/scripts/runner.py (ForceOptions): option parser for the
1089         IRC 'force' command, so it can be shared with an eventual
1090         command-line-tool 'buildbot force' mode.
1091         * buildbot/test/test_runner.py (Options.testForceOptions): test it
1093 2005-10-20  Brian Warner  <warner@lothar.com>
1095         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1097         * docs/examples/twisted_master.cfg: update to use Schedulers
1099         * buildbot/scripts/sample.cfg: update with Schedulers
1101         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1102         method specifically for use by HTML "force build" button and the
1103         IRC "force" command. Raises an immediate error if there are no
1104         slaves available.
1105         (IBuilderControl.requestBuild): make this just submit a build, not
1106         try to check for existing slaves or set up any when-finished
1107         Deferreds or anything.
1108         * buildbot/process/builder.py (BuilderControl): same
1109         * buildbot/status/html.py (StatusResourceBuilder.force): same
1110         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1111         * buildbot/test/test_slaves.py: same
1112         * buildbot/test/test_web.py: same
1114 2005-10-19  Brian Warner  <warner@lothar.com>
1116         * docs/examples/twisted_master.cfg: re-sync with reality: bring
1117         back python2.2 tests, turn off OS-X threadedselect-reactor tests
1119 2005-10-18  Brian Warner  <warner@lothar.com>
1121         * buildbot/status/html.py: provide 'status' argument to most
1122         StatusResourceFOO objects
1123         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1124         and Logfiles" section to make the Build page into a more-or-less
1125         comprehensive source of status information about the build
1127         * buildbot/status/mail.py (MailNotifier): include the Build's URL
1128         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1130 2005-10-17  Brian Warner  <warner@lothar.com>
1132         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1133         arguments to accomodate Twisted >=2.1.0 . I will have to figure
1134         out what to do about other projects: the correct options for
1135         recent Twisteds will not work for older ones.
1137 2005-10-15  Brian Warner  <warner@lothar.com>
1139         * buildbot/status/builder.py (Status.getURLForThing): add method
1140         to provide a URL for arbitrary IStatusFoo objects. The idea is to
1141         use this in email/IRC status clients to make them more useful, by
1142         providing the end user with hints on where to learn more about the
1143         object being reported on.
1144         * buildbot/test/test_web.py (GetURL): tests for it
1146 2005-10-14  Brian Warner  <warner@lothar.com>
1148         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1149         fix bug resulting from deferredResult changes
1151 2005-10-13  Brian Warner  <warner@lothar.com>
1153         * buildbot/test/test_changes.py: remove use of deferredResult
1154         * buildbot/test/test_config.py: same
1155         * buildbot/test/test_control.py: same
1156         * buildbot/test/test_status.py: same
1157         * buildbot/test/test_vc.py: this is the only remaining use, since
1158         it gets used at module level. This needs to be replaced by some
1159         sort of class-level run-once routine.
1161         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1163         * lots: implement multiple slaves per Builder, which means multiple
1164         current builds per Builder. Some highlights:
1165         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1166         of (state,currentBuilds) instead of (state,currentBuild)
1167         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1168         (IBuildStatus.getSlavename): new method, so you can tell which
1169         slave got used. This only gets set when the build completes.
1170         (IBuildRequestStatus.getBuilds): new method
1172         * buildbot/process/builder.py (SlaveBuilder): add a .state
1173         attribute to track things like ATTACHING and IDLE and BUILDING,
1174         instead of..
1175         (Builder): .. the .slaves attribute here, which has been turned
1176         into a simple list of available slaves. Added a separate
1177         attaching_slaves list to track ones that are not yet ready for
1178         builds.
1179         (Builder.fireTestEvent): put off the test-event callback for a
1180         reactor turn, to make tests a bit more consistent.
1181         (Ping): cleaned up the slaveping a bit, now it disconnects if the
1182         ping fails due to an exception. This needs work, I'm worried that
1183         a code error could lead to a constantly re-connecting slave.
1184         Especially since I'm trying to move to a distinct remote_ping
1185         method, separate from the remote_print that we currently use.
1186         (BuilderControl.requestBuild): return a convenience Deferred that
1187         provides an IBuildStatus when the build finishes.
1188         (BuilderControl.ping): ping all connected slaves, only return True
1189         if they all respond.
1191         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1192         reconnect when we shut down.
1194         * buildbot/status/builder.py: implement new methods, convert
1195         one-build-at-a-time methods to handle multiple builds
1196         * buildbot/status/*.py: do the same in all default status targets
1197         * buildbot/status/html.py: report the build's slavename in the
1198         per-Build page, report all buildslaves on the per-Builder page
1200         * buildbot/test/test_run.py: update/create tests
1201         * buildbot/test/test_slaves.py: same
1202         * buildbot/test/test_scheduler.py: remove stale test
1204         * docs/buildbot.texinfo: document the new builder-specification
1205         'slavenames' parameter
1207 2005-10-12  Brian Warner  <warner@lothar.com>
1209         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1210         report failure correctly, causing Dependent builds to run when
1211         they shouldn't have.
1212         * buildbot/status/builder.py (BuildSetStatus): same
1213         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1214         (Set.testSuccess): test the both-pass case too
1215         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1216         fix this test: it was ending too early, masking the failure before
1217         (Logger): specialized StatusReceiver to make sure the dependent
1218         builds aren't even started, much less completed.
1220 2005-10-07  Brian Warner  <warner@lothar.com>
1222         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1223         bot.SlaveBuilder being disowned in the middle of a build
1225         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1226         this inherit from StatusReceiver. Also upcall in __init__. This
1227         fixes the embarrasing crash when the new buildSetSubmitted method
1228         is invoked and Waterfall/etc don't implement their own.
1229         * buildbot/test/test_run.py: add a TODO note about a test to catch
1230         just this sort of thing.
1232         * buildbot/process/builder.py (Builder.attached): remove the
1233         already-attached warning, this situation is normal. Add some
1234         comments explaining it.
1236 2005-10-02  Brian Warner  <warner@lothar.com>
1238         * buildbot/changes/maildir.py (Maildir.start): Tolerate
1239         OverflowError when setting up dnotify, because some 64-bit systems
1240         have problems with signed-vs-unsigned constants and trip up on the
1241         DN_MULTISHOT flag. Patch from Brad Hards.
1243 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
1245         * buildbot/process/step.py (BuildStep, ShellCommand): Add
1246         progressMetrics, description, descriptionDone to the 'parms' list,
1247         and make use the 'parms' list from the implementation class
1248         instead of only BuildStep to initialize the parameters.  This
1249         allows buildbot.process.factory.s() to initialize all the parms,
1250         not just those defined in directly by BuildStep.
1252 2005-09-03  Brian Warner  <warner@lothar.com>
1254         * NEWS: start adding items for the next release
1256         * docs/examples/twisted_master.cfg: (sync with reality) turn off
1257         python2.2 tests, change 'Quick' builder to only use python2.3
1259 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
1261         * buildbot/status/html.py (StatusResourceBuilder.body): only show
1262         the "Ping Builder" button if the build control is available; the
1263         user sees an exception otherwise
1265         * docs/buildbot.texinfo (PBChangeSource): fix a typo
1267 2005-09-01  Brian Warner  <warner@lothar.com>
1269         * buildbot/interfaces.py (IBuilderStatus.getState): update
1270         signature, point out that 'build' can be None
1271         (IBuildStatus.getETA): point out ETA can be none
1273         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1274         being None
1275         * buildbot/status/words.py (IrcStatusBot.emit_status): same
1277 2005-08-31  Brian Warner  <warner@lothar.com>
1279         * buildbot/status/base.py (StatusReceiver.builderChangedState):
1280         update to match correct signature: removed 'eta' argument
1281         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1283 2005-08-30  Brian Warner  <warner@lothar.com>
1285         * buildbot/status/builder.py (LogFile): remove the assertion that
1286         blows up when you try to overwrite an existing logfile, instead
1287         just emit a warning. This case gets hit when the buildmaster is
1288         killed and doesn't get a chance to write out the serialized
1289         BuilderStatus object, so the .nextBuildNumber attribute gets out
1290         of date.
1292         * buildbot/scripts/runner.py (sendchange): add --revision_file to
1293         the 'buildbot sendchange' arguments, for the Darcs context file
1294         * docs/buildbot.texinfo (sendchange): document it
1296         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1297         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1298         (IStatus.getSchedulers): new method
1299         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1300         (Status.getSchedulers): implement
1301         * buildbot/process/builder.py (Builder): maintain
1302         BuilderStatus.pendingBuilds
1303         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1304         (TryBase.addChange): Try schedulers should ignore Changes
1306         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1307         for 'try' on CVS/SVN
1308         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1310         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1311         report status properly.
1312         (Try.createJob): implement unique buildset IDs
1314         * buildbot/status/client.py (StatusClientPerspective): add a
1315         perspective_getBuildSets method for the benefit of jobdir-style
1316         'try'.
1317         * docs/buildbot.texinfo (try): more docs
1318         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1319         new test case
1321 2005-08-18  Brian Warner  <warner@lothar.com>
1323         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1324         actually work. It's functional but still kind of clunky. Also, it
1325         only works with the pb-style.. needs to be made to work with the
1326         jobdir-style too.
1328         * buildbot/status/client.py (RemoteBuildSet): new class
1329         (RemoteBuildRequest): same
1330         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1331         object, not the internal BuildStatus object.
1332         (RemoteBuild.remote_subscribe): new method to subscribe to builds
1333         outside of the usual buildStarted() return value.
1334         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1336         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1337         (Try_Userpass_Perspective.perspective_try): return a remotely
1338         usable BuildSetStatus object
1340         * buildbot/interfaces.py (IBuildStatus): remove obsolete
1341         isStarted()/waitUntilStarted()
1343 2005-08-16  Brian Warner  <warner@lothar.com>
1345         * buildbot/status/builder.py: implement IBuildSetStatus and
1346         IBuildRequestStatus, wire them into place.
1347         * buildbot/buildset.py: same. Add ID, move wait-until-finished
1348         methods into the BuildSetStatus object.
1349         * buildbot/interfaces.py: same
1350         (IStatus.getBuildSets): new method to get pending BuildSets
1351         (IStatusReceiver.buildsetSubmitted): new method which hears about
1352         new BuildSets
1353         * buildbot/master.py (BuildMaster.submitBuildSet): same
1354         * buildbot/process/base.py (BuildRequest): same, replace
1355         waitUntilStarted with subscribe/unsubscribe
1356         * buildbot/process/builder.py (BuilderControl.forceBuild): use
1357         subscribe instead of waitUntilStarted
1358         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1359         for new method
1360         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1361         same
1362         * buildbot/test/test_buildreq.py: update for new code
1363         * buildbot/test/test_control.py (Force.testRequest): same
1366         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1367         for Darcs to not use the tempfile module, so it works under
1368         python-2.2 too. We really didn't need the full cleverness of that
1369         module, since the slave has exclusive control of its own builddir.
1371 2005-08-15  Brian Warner  <warner@lothar.com>
1373         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1374         for CVS trees. It doesn't work for non-trunk branches,
1375         unfortunately.
1376         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1377         branch test
1379         * Makefile: make it easier to test against python2.2
1381         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1382         tearDown2, so things like Arch can unregister archives as they're
1383         shutting down. The previous subclass-override-tearDown technique
1384         resulted in a nested maybeWait() and test failures under
1385         Twisted-1.3.0
1387         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1388         where we can (Arch), add a branch= argument to set the branch used
1389         when we can't
1390         (BazExtractor): extract the branch too
1391         (TlaExtractor): same
1392         * buildbot/scripts/runner.py (TryOptions): add --branch
1393         * docs/buildbot.texinfo (try): document --branch/try_branch
1395         * buildbot/slave/commands.py (Darcs): implement get-revision for
1396         Darcs, so that 'try' will work. This requires the tempfile module
1397         from python-2.3 .
1399         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1400         of revisions, branches, and 'try' in the process.
1402 2005-08-11  Brian Warner  <warner@lothar.com>
1404         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1405         this, it got broken at some point in the last few releases
1406         * buildbot/status/words.py (IrcBuildRequest): reply was broken
1407         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1408         specifically the removal of ETA information from the tuple
1410         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1411         warning message
1413         * docs/buildbot.texinfo (try): document both --builder and
1414         'try_builders' in .buildbot/options
1415         * buildbot/scripts/runner.py (TryOptions): add --builder,
1416         accumulate the values into opts['builders']
1417         * buildbot/scripts/tryclient.py (Try.__init__): set builders
1418         * buildbot/test/test_runner.py (Try): add some quick tests to make
1419         sure 'buildbot try --options' and .buildbot/options get parsed
1420         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1421         use --builder control
1423         * docs/buildbot.texinfo (try): add --port argument to PB style
1425         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1426         actual SourceStamp. Still need to extract a branch name, somehow.
1427         (Try): finish implementing the try client side, still need a UI
1428         for specifying which builders to use
1429         (Try.getopt): factor our options/config-file reading
1430         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1431         test it
1432         * buildbot/test/test_vc.py: match SourceStampExtractor change
1434         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1435         causes the twisted log to be sent to stderr
1437         * buildbot/scheduler.py (Try_Userpass): implement the PB style
1439 2005-08-10  Brian Warner  <warner@lothar.com>
1441         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1442         style is 90% done, still missing status reporting or waiting for
1443         the buildsets to finish, and it is completely untested.
1445         * buildbot/trybuild.py: delete file, move contents to ..
1446         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1447         * buildbot/test/test_vc.py: match the move
1449         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1450         of the TryScheduler, no buildsetID or status-tracking support yet
1451         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1453         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1454         possible to set the basedir after __init__ time, so it is easier
1455         to use as a Service-child of the BuildMaster instance
1457         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1458         that delivers messages to its Service parent instead of requiring
1459         a subclass to be useful. This turns out to be much easier to build
1460         unit tests around.
1462         * buildbot/scripts/tryclient.py (createJob): utility code to
1463         create jobfiles, will eventually be used by 'buildbot try'
1465 2005-08-08  Brian Warner  <warner@lothar.com>
1467         * docs/buildbot.texinfo (try): add docs on the
1468         as-yet-unimplemented Try scheduler
1470         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1471         * buildbot/test/test_scheduler.py: .. here
1472         (Scheduling.testTryJobdir): add placeholder test for 'try'
1474         * buildbot/test/test_status.py (Log.testMerge3): update to match new
1475         addEntry merging (>=chunkSize) behavior
1476         (Log.testConsumer): update to handle new callLater(0) behavior
1478         * buildbot/test/test_web.py: rearrange tests a bit, add test for
1479         both the MAX_LENGTH bugfix and the resumeProducing hang.
1481         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1482         put off the actual resumeProducing for a moment with
1483         reactor.callLater(0). This works around a twisted-1.3.0 bug which
1484         causes large logfiles to hang midway through.
1486         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1487         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1488         and to improve memory usage when streaming the file out to a web
1489         browser.
1490         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1491         make this work cleanly
1493 2005-08-03  Brian Warner  <warner@lothar.com>
1495         * buildbot/trybuild.py: new file for 'try' utilities
1496         (getSourceStamp): run in a tree, find out the baserev+patch
1497         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1498         implemented for SVN and Darcs, still working on Arch. I don't know
1499         how to make CVS work yet.
1501         * docs/buildbot.texinfo: document the 'buildbot' command-line
1502         tool, including the not-yet-implemented 'try' feature, and the
1503         in-flux .buildbot/ options directory.
1505 2005-07-20  Brian Warner  <warner@lothar.com>
1507         * buildbot/locks.py: added temporary id() numbers to Lock
1508         descriptions, to track down a not-really-sharing-the-Lock bug
1510         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1512         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1513         needed for python2.2 compatibility
1514         * buildbot/test/test_vc.py: python2.2 compatibility: generators
1515         are from the __future__
1517 2005-07-19  Brian Warner  <warner@lothar.com>
1519         * buildbot/master.py (BuildMaster.loadConfig): give a better error
1520         message when schedulers use unknown builders
1522         * buildbot/process/builder.py (Builder.compareToSetup): make sure
1523         SlaveLock('name') and MasterLock('name') are distinct
1525         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1526         c['schedulers'] in such a way that we can actually accept
1527         Dependent instances
1528         * buildbot/test/test_config.py: check it
1530         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1531         utility method to *all* the Schedulers
1532         (Periodic.listBuilderNames): same
1534         * docs/buildbot.texinfo (Interlocks): update chapter to match
1535         reality
1537         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1538         to make sure that c['sources'], c['schedulers'], and c['status']
1539         are all lists of the appropriate objects, and that the Schedulers
1540         all point to real Builders
1541         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1542         'listBuilderNames' utility method to support this
1543         * buildbot/scheduler.py: implement the utility method
1544         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1546         * docs/buildbot.texinfo: add some @cindex entries
1548         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1549         if it wasn't already set: most tla commands will fail unless one
1550         has been set.
1551         (Arch.createRepository): and disable bazaar's revision cache, since
1552         they cause test failures (the multiple repositories we create all
1553         interfere with each other through the cache)
1555         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1556         bring it properly up to date with twisted-2.0 test guidelines
1558         * buildbot/master.py (BuildMaster): remove references to old
1559         'interlock' module, this caused a bunch of post-merge test
1560         failures
1561         * buildbot/test/test_config.py: same
1562         * buildbot/process/base.py (Build): same
1564         * buildbot/test/test_slaves.py: stubs for new test case
1566         * buildbot/scheduler.py: add test-case-name tag
1567         * buildbot/test/test_buildreq.py: same
1569         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1570         unnecessary init code
1571         (Bot.remote_setBuilderList): match it
1573         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1575         * buildbot/changes/mail.py (parseSyncmail): update comment
1577         * buildbot/test/test_slavecommand.py: disable Shell tests on
1578         platforms that don't suport IReactorProcess
1580         * buildbot/status/builder.py (LogFile): remove the 't' mode from
1581         all places where we open logfiles. It causes OS-X to open the file
1582         in some weird mode that that prevents us from mixing reads and
1583         writes to the same filehandle, which we depend upon to implement
1584         _generateChunks properly. This change doesn't appear to break
1585         win32, on which "b" and "t" are treated differently but a missing
1586         flag seems to be interpreted as "t".
1588 2005-07-18  Brian Warner  <warner@lothar.com>
1590         * buildbot/slave/commands.py (ShellCommand): overhaul
1591         error-handling code, to try and make timeout/interrupt work
1592         properly, and make win32 happier
1593         * buildbot/test/test_slavecommand.py: clean up, stop using
1594         reactor.iterate, add tests for timeout and interrupt
1595         * buildbot/test/sleep.py: utility for a new timeout test
1597         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1598         code from the local-usebranches branch
1600 2005-07-17  Brian Warner  <warner@lothar.com>
1602         * buildbot/process/process_twisted.py
1603         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1604         minutes, to match the other twisted BuildFactories, and don't
1605         excuse failures in c/qt/win32 reactors any more.
1607         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1608         'freebsd' builders, since the buildslaves have been unavailable
1609         for quite a while
1611 2005-07-13  Brian Warner  <warner@lothar.com>
1613         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1614         build-on-branch feature
1616         * buildbot/process/step.py (Darcs.__init__): add base_url and
1617         default_branch arguments, just like SVN
1618         (Arch.__init__): note that the version= argument is really the
1619         default branch name
1621         * buildbot/slave/commands.py (SourceBase): keep track of the
1622         repository+branch that was used for the last checkout in
1623         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1624         match, we clobber the directory and perform a fresh checkout
1625         rather than trying to do an in-place update. This should protect
1626         us against trying to get to branch B by doing an update in a tree
1627         obtained from branch A.
1628         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1629         (SVN.setup): same, just the svnurl
1630         (Darcs.setup): same, just the repourl
1631         (Arch.setup): same, arch coordinates (url), version, and
1632         buildconfig. Also pull the buildconfig from the args dictionary,
1633         which we weren't doing before, so the build-config was effectively
1634         disabled.
1635         (Arch.sourcedirIsUpdateable): don't try to update when we're
1636         moving to a specific revision: arch can't go backwards, so it is
1637         safer to just clobber the tree and checkout a new one at the
1638         desired revision.
1639         (Bazaar.setup): same sourcedata as Arch
1641         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1642         use maybeWait, to work with twisted-1.3.0 and twcompat
1643         (Dependencies.testRun_Pass): same
1645         * buildbot/test/test_vc.py: rearrange, cleanup
1647         * buildbot/twcompat.py: add defer.waitForDeferred and
1648         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1649         can work under twisted-1.3.0 .
1651         * buildbot/test/test_vc.py: rewrite. The sample repositories are
1652         now created at setUp time. This increases the runtime of the test
1653         suite considerably (from 91 seconds to 151), but it removes the
1654         need for an offline tarball, which should solve a problem I've
1655         seen where the test host has a different version of svn than the
1656         tarball build host. The new code also validates that mode=update
1657         really picks up recent commits. This approach will also make it
1658         easier to test out branches, because the code which creates the VC
1659         branches is next to the code which uses them. It will also make it
1660         possible to test some change-notification hooks, by actually
1661         performing a VC commit and watching to see the ChangeSource get
1662         notified.
1664 2005-07-12  Brian Warner  <warner@lothar.com>
1666         * docs/buildbot.texinfo (SVN): add branches example
1667         * docs/Makefile (buildbot.ps): add target for postscript manual
1669         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
1670         * buildbot/test/test_locks.py: same
1672         * buildbot/process/step.py (Darcs): comment about default branches
1674         * buildbot/master.py (BuildMaster.loadConfig): don't look for
1675         c['interlocks'] in the config file, complain if it is present.
1676         Scan all locks in c['builders'] to make sure the Locks they use
1677         are uniquely named.
1678         * buildbot/test/test_config.py: remove old c['interlocks'] test,
1679         add some tests to check for non-uniquely-named Locks
1680         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1681         since the unique-Lock validation code requires it now
1683         * buildbot/locks.py: fix test-case-name
1685         * buildbot/interlock.py: remove old file
1687 2005-07-11  Brian Warner  <warner@lothar.com>
1689         * buildbot/test/test_interlock.py: rename to..
1690         * buildbot/test/test_locks.py: .. something shorter
1692         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1693         versions (after 2.0.1) changed internet.TCPClient to shut down the
1694         connection in stopService. Change the code to handle this
1695         gracefully.
1697         * buildbot/process/base.py (Build): handle whole-Build locks
1698         * buildbot/process/builder.py (Builder.compareToSetup): same
1699         * buildbot/test/test_interlock.py: make tests work
1701         * buildbot/process/step.py (BuildStep.startStep): complain if a
1702         Step tries to claim a lock that's owned by its own Build
1703         (BuildStep.releaseLocks): typo
1705         * buildbot/locks.py (MasterLock): use ComparableMixin so config
1706         file reloads don't replace unchanged Builders
1707         (SlaveLock): same
1708         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1709         rewrite to cover new Locks instead of old c['interlocks']
1710         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1711         slave2 too
1714         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1715         start the master and connect the buildslave
1717         * buildbot/process/step.py (FailingDummy.done): finish with a
1718         FAILURE status rather than raising an exception
1720         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1721         stringify a BuildRequest.reason that is None
1723         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1724         minor fix
1725         * buildbot/status/builder.py (BuildSetStatus): implement enough to
1726         allow scheduler.Dependent to work
1727         * buildbot/buildset.py (BuildSet): set .reason and .results
1729         * buildbot/test/test_interlock.py (Locks.setUp): connect both
1730         slaves, to make the test stop hanging. It still fails, of course,
1731         because I haven't even started to implement Locks.
1733         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1735         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1736         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1737         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1738         (Dependent): new class for downstream build dependencies
1739         * buildbot/test/test_dependencies.py: tests (still failing)
1741         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1743 2005-07-07  Brian Warner  <warner@lothar.com>
1745         * buildbot/test/runutils.py (RunMixin): factored this class out..
1746         * buildbot/test/test_run.py: .. from here
1747         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1748         added new buildbot.locks tests (which all hang right now)
1749         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1750         * buildbot/process/step.py: claim/release per-BuildStep locks
1752         * docs/Makefile: add 'buildbot.html' target
1754         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1755         interpreted as "HEAD", so that all VC steps can accept branch=None
1756         and have it mean the "default branch".
1758         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1760 2005-07-07  Brian Warner  <warner@lothar.com>
1762         * docs/examples/twisted_master.cfg: update to match current usage
1764         * docs/buildbot.texinfo (System Architecture): comment out the
1765         image, it doesn't exist yet and just screws up the HTML manual.
1767 2005-07-05  Brian Warner  <warner@lothar.com>
1769         * debian/.cvsignore: oops, missed one. Removing leftover file.
1771 2005-06-17  Brian Warner  <warner@lothar.com>
1773         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1774         changed its output in 1.2.0, don't mistakenly think that the
1775         subversion we find isn't capable of supporting our tests.
1777         * debian/*: remove the debian/ directory and its contents, to make
1778         life easier for the proper Debian maintainer
1779         * MANIFEST.in: same
1780         * Makefile (release): same
1782 2005-06-07  Brian Warner  <warner@lothar.com>
1784         * everything: create a distinct SourceStamp class to replace the
1785         ungainly 4-tuple, let it handle merging instead of BuildRequest.
1786         Changed the signature of Source.startVC to include the revision
1787         information (instead of passing it through self.args). Implement
1788         branches for SVN (now only Darcs/Git is missing support). Add more
1789         Scheduler tests.
1791 2005-06-06  Brian Warner  <warner@lothar.com>
1793         * everything: rearrange build scheduling. Create a new Scheduler
1794         object (configured in c['schedulers'], which submit BuildSets to a
1795         set of Builders. Builders can now use multiple slaves. Builds can
1796         be run on alternate branches, either requested manually or driven
1797         by changes. This changed some of the Status classes. Interlocks
1798         are out of service until they've been properly split into Locks
1799         and Dependencies. treeStableTimer, isFileImportant, and
1800         periodicBuild have all been moved from the Builder to the
1801         Scheduler.
1802         (BuilderStatus.currentBigState): removed the 'waiting' and
1803         'interlocked' states, removed the 'ETA' argument.
1805 2005-05-24  Brian Warner  <warner@lothar.com>
1807         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1808         erroneously abandons the connection (in clientConnectionFailed)
1809         for non-UserErrors, which means that if we lose the connection due
1810         to a network problem or a timeout, we'll never try to reconnect.
1811         Fix this by not upcalling to the buggy parent method. Note:
1812         twisted-2.0 fixes this, but the function only has 3 lines so it
1813         makes more sense to copy it than to try and detect the buggyness
1814         of the parent class. Fixes SF#1207588.
1816         * buildbot/changes/changes.py (Change.branch): doh! Add a
1817         class-level attribute to accomodate old Change instances that were
1818         pickled before 0.6.5 (where .branch was added for new Changes).
1819         This fixes the exception that occurs when you try to look at an
1820         old Change (through asHTML).
1822         * buildbot/__init__.py (version): bump to 0.6.6+ while between
1823         releases
1825 2005-05-23  Brian Warner  <warner@lothar.com>
1827         * buildbot/__init__.py (version): release 0.6.6
1829 2005-05-23  Brian Warner  <warner@lothar.com>
1831         * NEWS: update for 0.6.6 release
1832         * debian/changelog: same
1834         * buildbot/scripts/runner.py (start): put the basedir in sys.path
1835         before starting: this was done by twistd back when we spawned it,
1836         now that we're importing the pieces and running them in the
1837         current process, we have to do it ourselves. This allows
1838         master.cfg to import files from the same directory without
1839         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1840         Stichele for the catch.
1841         (Options.opt_version): Add a --version command (actually, just make
1842         the existing --version command emit Buildbot's version too)
1844         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1845         fix to make this behave like other LogFiles, this time to handle
1846         existing LogFiles on disk. (add the missing .upgrade method)
1847         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1849 2005-05-21  Brian Warner  <warner@lothar.com>
1851         * buildbot/test/test_runner.py (Create.testMaster): match the
1852         rawstring change in runner.py:masterTAC
1854         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1855         TwistedWords is installed
1856         * buildbot/test/test_status.py: same, with TwistedMail
1858         * buildbot/master.py: remove old IRC/Waterfall imports (used by
1859         some old, deprecated, and removed config keys). This should enable
1860         you to use the base buildbot functionality with Twisted-2.0.0 when
1861         you don't also have TwistedWeb and TwistedWords installed
1863 2005-05-20  Brian Warner  <warner@lothar.com>
1865         * buildbot/scripts/runner.py (run): call sendchange(), not
1866         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1867         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1868         (stop): don't wait for process to die when sending SIGHUP
1869         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1870         directory name gets interpreted, which you don't want
1871         (slaveTAC): same
1873         * buildbot/__init__.py (version): bump to 0.6.5+ while between
1874         releases
1876 2005-05-18  Brian Warner  <warner@lothar.com>
1878         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
1880 2005-05-18  Brian Warner  <warner@lothar.com>
1882         * README: update for 0.6.5
1883         * debian/changelog: same
1885         * buildbot/changes/changes.py: rename tag= to branch=, since
1886         that's how we're using it, and my design for the upcoming "build a
1887         specific branch" feature wants it. also, tag= was too CVS-centric
1888         * buildbot/changes/mail.py (parseSyncmail): same
1889         * buildbot/process/base.py (Build.isBranchImportant): same
1890         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
1891         * docs/buildbot.texinfo (Attributes of Changes): same
1893         * NEWS: update tag=, update for upcoming release
1895 2005-05-17  Brian Warner  <warner@lothar.com>
1897         * buildbot/scripts/runner.py (stop): actually poll once per
1898         second, instead of re-killing the poor daemon once per second.
1899         Sleep briefly (0.1s) before the first poll, since there's a good
1900         chance we can avoid waiting the full second if the daemon shuts
1901         down quickly. Also remove the sys.exit() at the end.
1902         (start): remove the unneighborly sys.exit()
1904         * Makefile: improve permission-setting to not kick Arch so badly
1906         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
1907         default --keepalive=600, since it doesn't hurt very much, and it's
1908         a hassle to discover that you need it.
1909         * buildbot/test/test_runner.py (Create.testSlave): test it
1911         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
1912         IRC bot about EXCEPTION
1914         * buildbot/status/client.py (PBListener): upcall more correctly
1916         * buildbot/process/base.py (Build.allStepsDone): if a step caused
1917         an exception mark the overall build with EXCEPTION, not SUCCESS
1919         * buildbot/scripts/runner.py (makefile_sample): remove the leading
1920         newline
1921         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
1922         * Makefile: update some release-related stuff
1924         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
1925         gets called when there isn't actually an active process, just end
1926         the Command instead of blowing up. I don't know how it gets into
1927         this state, but the twisted win32 buildslave will sometimes hang,
1928         and when it shakes its head and comes back, it thinks it's still
1929         running a Command. The next build causes this command to be
1930         interrupted, but the lack of self.process.pid breaks the interrupt
1931         attempt.
1933         * NEWS: document changes since the last release
1935         * buildbot/scripts/runner.py (start): change 'buildbot start' to
1936         look for Makefile.buildbot instead of a bare Makefile . The
1937         'buildbot start' does not install this file, so you have to
1938         manually copy it if you want to customize startup behavior.
1939         (createMaster): change 'buildbot master' command to create
1940         Makefile.sample instead of Makefile, to create master.cfg.sample
1941         instead of master.cfg (requiring you to copy it before the
1942         buildmaster can be started). Both sample files are kept up to
1943         date, i.e. they are overwritten if they have been changed. The
1944         'buildbot.tac' file is *not* overwritten, but if the new contents
1945         don't match the old, a 'buildbot.tac.new' file is created and the
1946         user is warned. This seems to be a much more sane way to handle
1947         startup files. Also, don't sys.exit(0) when done, so we can run
1948         unit tests against it.
1949         (createSlave): same. Don't overwrite the sample info/ files.
1950         * buildbot/scripts/sample.mk: remove. the contents were pulled
1951         into runner.py, since they need to match the behavior of start()
1952         * setup.py: same
1953         * MANIFEST.in: same
1955         * docs/buildbot.texinfo (Launching the daemons): document it
1956         * buildbot/test/test_runner.py (Create): test it
1958         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
1959         version that can handle string-in-string tests, because otherwise
1960         python-2.2 fails the tests. It'd be tremendous if Trial's test
1961         took two strings under 2.2 too.
1963         * everything: fixed all deprecation warnings when running against
1964         Twisted-2.0 . (at least all the ones in buildbot code, there are a
1965         few that come from Twisted itself). This involved putting most of
1966         the Twisted-version specific code in the new buildbot.twcompat
1967         module, and creating some abstract base classes in
1968         buildbot.changes.base and buildbot.status.base (which might be
1969         useful anyway). __implements__ is a nuisance and requires an ugly
1970         'if' clause everywhere.
1972         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
1973         delay before finishing the test: it seems that smtp.sendmail
1974         doesn't hang up on the server, so we must wait a moment so it can
1975         hang up on us. This removes the trial warning about an unclean
1976         reactor.
1978 2005-05-16  Brian Warner  <warner@lothar.com>
1980         * buildbot/process/step.py (Source): add 'retry' argument. It is a
1981         tuple of (delay, repeats).
1982         * buildbot/test/test_vc.py (Retry): test it
1983         * docs/buildbot.texinfo (Source Checkout): document it
1984         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
1985         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
1986         doVCFull() are handled by re-trying the checkout (after a delay)
1987         some number of times.
1988         (ShellCommand._startCommand): make header lines easier to read
1990         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
1991         shutdown
1992         (WebTest.test_logfile): make sure master gets shut down, silences
1993         some "unclean reactor" test errors
1995         * buildbot/test/test_changes.py (Sender.tearDown): spin the
1996         reactor once after shutdown, something in certain versions of
1997         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
1998         fails, svn-trunk is ok.
2000         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2001         second win32 error message
2003         * buildbot/test/test_run.py (Status.testSlave): be smarter about
2004         validating the ETA, so the tests don't fail on slow systems
2006 2005-05-15  Brian Warner  <warner@lothar.com>
2008         * buildbot/status/builder.py (HTMLLogFile): make this behave like
2009         the new LogFile class, so upgrading works properly
2010         (LogFileProducer.resumeProducing): survive resumeProducing after
2011         we've exhausted the chunkGenerator
2013         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2014         logs too
2015         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2016         (Log.testUpgrade): same
2018         * docs/buildbot.texinfo (Maintenance): describe how to delete old
2019         Builds and logs with a cron job.
2021         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2022         of the old non-offline LogFile, added code to upgrade these to
2023         new-style contents-live-on-disk instances at load time (in a way
2024         that doesn't invalidate the old Build pickles, so upgrading to
2025         0.6.5 is not a one-way operation). Got rid of everything related
2026         to 'stub' builds.
2027         (LogFile.__init__): create LogFiles with the parent step status,
2028         the log's name, and a builder-relative filename where it can keep
2029         the contents on disk.
2030         (LogFile.hasContents): new method, clients are advised to call it
2031         before getText or getChunks and friends. If it returns False, the
2032         log's contents have been deleted and getText() will raise an
2033         error.
2034         (LogFile.getChunks): made it a generator
2035         (LogFile.subscribeConsumer): new method, takes a Twisted-style
2036         Consumer (except one that takes chunks instead of strings). This
2037         enables streaming of very large logfiles without storing the whole
2038         thing in memory.
2039         (BuildStatus.generateLogfileName): create names like
2040         12-log-compile-output, with a _0 suffix if required to be unique
2041         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2042         or earlier) logfiles into new-style ones
2043         (BuilderStatus): remove everything related to 'stub' builds. There
2044         is now only one build cache, and we don't strip logs from old
2045         builds anymore.
2046         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2047         since we no longer fight to keep it in the cache
2049         * buildbot/status/html.py (TextLog.render_GET): use a
2050         ChunkConsumer to stream the log entries efficiently.
2051         (ChunkConsumer): wrapper which consumes chunks and writes
2052         formatted HTML.
2054         * buildbot/test/test_twisted.py (Parse.testParse): use a
2055         LogFile-like object instead of a real one
2057         * buildbot/test/test_status.py (MyLog): handle new LogFile code
2058         (Log.testMerge3): validate more merge behavior
2059         (Log.testChunks): validate LogFile.getChunks
2060         (Log.testUpgrade): validate old-style LogFile upgrading
2061         (Log.testSubscribe): validate LogFile.subscribe
2062         (Log.testConsumer): validate LogFile.subscribeConsumer
2064         * buildbot/interfaces.py (IStatusLogStub): remove
2065         (IStatusLog.subscribeConsumer): new method
2066         (IStatusLog.hasContents): new method
2067         (IStatusLogConsumer): describes things passed to subscribeConsumer
2069         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2070         the log contents if it does not have any contents.
2071         (StatusResourceBuildStep.body): same
2072         (StatusResourceBuildStep.getChild): give a 404 for empty logs
2074 2005-05-14  Brian Warner  <warner@lothar.com>
2076         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2077         timeouts to try and make the windows metabuildslave not hang
2079 2005-05-13  Mike Taylor  <bear@code-bear.com>
2081         * buildbot/slave/commands.py (rmdirRecursive): added a check
2082         to ensure the path passed into rmdirRecursive actually exists.
2083         On win32 a non-existant path would generate an exception.
2085 2005-05-13  Brian Warner  <warner@lothar.com>
2087         * buildbot/slave/commands.py (rmdirRecursive): replacement for
2088         shutil.rmtree which behaves correctly on windows in the face of
2089         files that you have to chmod before deleting. Thanks to Bear at
2090         the OSAF for the routine.
2091         (SourceBase.doClobber): use rmdirRecursive
2093 2005-05-12  Brian Warner  <warner@lothar.com>
2095         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2096         method generate chunks instead of returning a big list. This
2097         allows the same method to be used for both old LogFile and new
2098         OfflineLogFile.
2099         (OfflineLogFile.getText): use the generator
2100         (OfflineLogFile.subscribe): same
2101         * buildbot/status/html.py (TextLog.resumeProducing): same
2102         * buildbot/interfaces.py (IStatusLog.getChunks): document it
2104         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2105         point out that OfflineLogFile does not currently work with
2106         html.Waterfall . Fixing this is high-priority.
2108         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2109         apparently windows defaults to using stdout
2111         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2112         better message on failure so I can figure out the win32 problem
2114         * buildbot/slave/commands.py (ShellCommand._startCommand): update
2115         log messages to include more useful copies of the command being
2116         run, the argv array, and the child command's environment.
2117         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2119 2005-05-11  Brian Warner  <warner@lothar.com>
2121         * setup.py: oops, install debug.glade so 'buildbot debugclient'
2122         will actually work
2123         * Makefile: update the deb-snapshot version
2125         * docs/buildbot.texinfo: move all .xhtml docs into a new
2126         .texinfo-format document, adding a lot of material in the process.
2127         This is starting to look like a real user's manual. Removed all
2128         the Lore-related files: *.xhtml, *.css, template.tpl .
2129         * docs/Makefile: simple makefile to run 'makeinfo'
2130         * buildbot/scripts/sample.cfg: rearrange slightly
2131         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2133 2005-05-10  Brian Warner  <warner@lothar.com>
2135         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2136         different name for the internal twistw module, handle it.
2138         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2139         * setup.py: .. and stop trying to install it
2141         * buildbot/process/step.py (Git): added support for 'cogito' (aka
2142         'git'), the new linux kernel VC system (http://kernel.org/git/).
2143         Thanks to Brandon Philips for the patch.
2144         * buildbot/slave/commands.py (Git): same
2146 2005-05-06  Brian Warner  <warner@lothar.com>
2148         * buildbot/status/builder.py (OfflineLogFile): replace the default
2149         LogFile with a form that appends its new contents to a disk file
2150         as they arrive. The complete log data is never kept in RAM. This
2151         is the first step towards handling very large (100MB+) logfiles
2152         without choking quite so badly. (The other half is
2153         producer/consumer on the HTML pages).
2154         (BuildStepStatus.addLog): use OfflineLogFile by default
2155         (BuildStatus.getLogfileName): helper code to give the
2156         OfflineLogFile a filename to work with
2158         * buildbot/test/test_status.py (Results.testAddResults): update
2159         tests to handle new asserts
2160         * buildbot/test/test_vc.py (Patch.doPatch): same
2161         * buildbot/test/test_steps.py (BuildStep.setUp): same
2163 2005-05-05  Brian Warner  <warner@lothar.com>
2165         * buildbot/scripts/runner.py (start): if there is no Makefile,
2166         launch the app by importing twistd's internals and calling run(),
2167         rather than spawning a new twistd process. This stands a much
2168         better chance of working under windows.
2169         (stop): kill the process with os.kill instead of spawning
2170         /bin/kill, again to reduce the number of external programs which
2171         windows might not have in the PATH. Also wait up to 5 seconds for
2172         the process to go away, allowing things like 'buildbot stop;
2173         buildbot start' to be reliable in the face of slow shutdowns.
2175         * buildbot/master.py (Dispatcher.__getstate__): remove old
2176         .tap-related methods
2177         (BuildMaster.__getstate__): same
2178         (makeService): same
2179         * buildbot/slave/bot.py (makeService): same
2180         (Options.longdesc): same
2181         * buildbot/scripts/runner.py: copy over some old mktap option text
2183         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2184         'buildbot master' now creates a buildbot.tac file, so there is no
2185         longer a create-instance/save/reload sequence. mktap is dead, long
2186         live twistd -y.
2187         * buildbot/scripts/sample.mk: use twistd -y, not -f
2188         * buildbot/test/test_config.py: remove mktap-based test
2189         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2190         * README: don't reference mktap
2192         * docs/source.xhtml: document some of the attributes that Changes
2193         might have
2195         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2197         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2198         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2199         * buildbot/changes/changes.py (Change)
2200         * buildbot/changes/mail.py (parseSyncmail)
2201         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2202         (Test3.testMsgS5)
2203         * buildbot/process/base.py (Build.isTagImportant)
2204         (Build.addChange)
2207 2005-05-04  Brian Warner  <warner@lothar.com>
2209         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2210         connection after sending the change, so that unit tests don't
2211         complain about sockets being left around
2213         * buildbot/status/html.py (WaterfallStatusResource.body): fix
2214         exception in phase=0 rendering
2215         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2217         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2219         * buildbot/master.py (BuildMaster.loadConfig): finally remove
2220         deprecated config keys: webPortnum, webPathname, irc, manholePort,
2221         and configuring builders with tuples.
2222         * buildbot/test/test_config.py: stop testing compatibility with
2223         deprecated config keys
2224         * buildbot/test/test_run.py: same
2226 2005-05-03  Brian Warner  <warner@lothar.com>
2228         * contrib/arch_buildbot.py: survive if there are no logfiles
2229         (username): just use a string, os.getlogin isn't reliable
2231         * buildbot/scripts/runner.py (sendchange): oops, fix the command
2232         so 'buildbot sendchange' actually works. The earlier test only
2233         covered the internal (non-reactor-running) form.
2235         * contrib/arch_buildbot.py: utility that can run as an Arch hook
2236         script to notify the buildmaster about changes
2238         * buildbot/scripts/runner.py (sendchange): new command to send a
2239         change to a buildbot.changes.pb.PBChangeSource receiver.
2240         * buildbot/test/test_changes.py (Sender): test it
2242         * buildbot/master.py (BuildMaster.startService): mark .readConfig
2243         after any reading of the config file, not just when we do it in
2244         startService. This makes some tests a bit cleaner.
2246         * buildbot/changes/pb.py: add some log messages
2248         * buildbot/process/base.py (Build.startBuild): fix a bug that
2249         caused an exception when the build terminated in the very first
2250         step.
2251         (Build.stepDone): let steps return a status of EXCEPTION. This
2252         terminates the build right away, and sets the build's overall
2253         status to EXCEPTION too.
2254         * buildbot/process/step.py (BuildStep.failed): return a status of
2255         EXCEPTION when that is what has happened.
2257         * buildbot/process/step.py (Arch.computeSourceRevision): finally
2258         implement this, allowing Arch-based projects to get precise
2259         checkouts instead of always using the latest code
2260         (Bazaar): create variant of Arch to let folks use baz instead of
2261         tla. Requires a new buildslave too.
2262         * buildbot/slave/commands.py (Arch): add 'revision' argument
2263         (Bazaar): create variant of Arch that uses baz instead of tla.
2264         Remove the code that extracts the archive name from the
2265         register-archive output, since baz doesn't provide it, and require
2266         the user provide both the archive name and its location.
2267         * buildbot/test/test_vc.py (VC.testBazaar): added tests
2269 2005-05-02  Brian Warner  <warner@lothar.com>
2271         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2272         thanks to Nick Trout.
2274         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2275         deals better with source Makefile coming from a read-only CVS
2276         checkout. Thanks to Nick Trout for the catch.
2278         * buildbot/__init__.py (version): bump to 0.6.4+ while between
2279         releases
2281 2005-04-28  Brian Warner  <warner@lothar.com>
2283         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2285         * debian/changelog: update for 0.6.4
2287 2005-04-28  Brian Warner  <warner@lothar.com>
2289         * README.w32: add a checklist of steps for getting buildbot
2290         running on windows.
2291         * MANIFEST.in: include it in the tarball
2293         * NEWS: update
2295         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2296         broken .tap files from 0.6.3 by getting rid of .services,
2297         .namedServices, and .change_svc at load time.
2299 2005-04-27  Brian Warner  <warner@lothar.com>
2301         * NEWS: update in preparation for new release
2303         * buildbot/test/test_config.py (Save.testSave): don't pull in
2304         twisted.scripts.twistd, we don't need it and it isn't for windows
2305         anyway.
2307         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2308         accomodate win32 which can't do atomic-rename
2310 2005-04-27  Brian Warner  <warner@lothar.com>
2312         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2313         timeouts to help the slow metabuildbot not flunk them so much
2314         (Disconnect.testBuild3): same
2315         (Disconnect.testBuild4): same
2316         (Disconnect.testInterrupt): same
2318         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2319         setup, it was completely broken for new buildmasters (those which
2320         did not have a 'change.pck' already saved. Thanks to Paul Warren
2321         for catching this (embarrassing!) bug.
2322         (Dispatcher.__getstate__): don't save our registered avatar
2323         factories, since they'll be re-populated when the config file is
2324         re-read.
2325         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2326         tests (since the real mktap-generated BuildMaster doesn't save
2327         this attribute).
2328         (BuildMaster.__getstate__): don't save any service children,
2329         they'll all be re-populated when the config file is re-read.
2330         * buildbot/test/test_config.py (Save.testSave): test for this
2332 2005-04-26  Brian Warner  <warner@lothar.com>
2334         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2335         rendered with Blender.. looks a bit nicer.
2336         * buildbot/docs/images/icon.blend: add the Blender file for it
2338         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2339         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2340         running under windows. This appears to be the best way to allow
2341         BuildSteps to do something normal like 'trial -v buildbot.test' or
2342         'make foo' and still expect it to work. The idea is to make the
2343         BuildSteps look as much like what a developer would type when
2344         compiling or testing the tree by hand. This approach probably has
2345         problems when there are spaces in the arguments, so if you've got
2346         windows buildslaves, you'll need to pay close attention to your
2347         commands.
2349         * buildbot/status/html.py (WaterfallStatusResource.body): add the
2350         timezone to the timestamp column.
2351         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2353         * buildbot/scripts/runner.py (loadOptions): do something sane for
2354         windows, I think. We use %APPDATA%/buildbot instead of
2355         ~/.buildbot, but we still search everywhere from the current
2356         directory up to the root for a .buildbot/ subdir. The "is it under
2357         $HOME" security test was replaced with "is it owned by the current
2358         user", which is only performed under posix.
2359         * buildbot/test/test_runner.py (Options.testFindOptions): update
2360         tests to match. The "is it owned by the current user" check is
2361         untested. The test has been re-enabled for windows.
2363         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2364         any "\n" in the expected output with the platform-specific line
2365         separator. Make this separator "\r\n" on PTYs under unix, they
2366         seem to do that and I don't know why
2368         * buildbot/test/test_runner.py (Options.optionsFile): disable on
2369         windows for now, I don't know what ~/.buildbot/ should mean there.
2371         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2372         win32 compatibility, don't use "/tmp"
2373         (Basedir.testChangeBuilddir): remove more unixisms
2375 2005-04-26  Brian Warner  <warner@lothar.com>
2377         * buildbot/test/test_control.py (Force.rmtree): python2.2
2378         compatibility, apparently its shutil.rmtree ignore_errors=
2379         argument is ignored.
2380         * buildbot/test/test_run.py (Run.rmtree): same
2381         (RunMixin.setUp): same
2383         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2384         not os.path.sep
2386         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2387         'substring in string' operator, must use string.find(substr)!=-1
2388         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2389         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2391         * buildbot/scripts/runner.py (loadOptions): add code to search for
2392         ~/.buildbot/, a directory with things like 'options', containing
2393         defaults for various 'buildbot' subcommands. .buildbot/ can be in
2394         the current directory, your $HOME directory, or anywhere
2395         inbetween, as long as you're somewhere inside your home directory.
2396         (debugclient): look in ~/.buildbot/options for master and passwd
2397         (statuslog): look in ~/.buildbot/options for 'masterstatus'
2398         * buildbot/test/test_runner.py (Options.testFindOptions): test it
2400         * buildbot/status/client.py (makeRemote): new approach to making
2401         IRemote(None) be None, which works under Twisted-2.0
2402         * buildbot/test/test_status.py (Client.testAdaptation): test it
2404         * buildbot/status/builder.py (Status.builderAdded): when loading a
2405         pickled BuilderStatus in from disk, set its name after loading.
2406         The config file might have changed its name (but not its
2407         directory) while it wasn't looking.
2408         
2409         * buildbot/process/builder.py (Builder.attached): always return a
2410         Deferred, even if the builder was already attached
2411         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2413 2005-04-25  Brian Warner  <warner@lothar.com>
2415         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2416         category-related exception when announcing a build has finished
2418         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2419         reference no-longer-existent changemaster.sources
2420         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2422         * buildbot/__init__.py (version): bump to 0.6.3+ while between
2423         releases
2425 2005-04-25  Brian Warner  <warner@lothar.com>
2427         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2429         * debian/changelog: update for 0.6.3
2431 2005-04-25  Brian Warner  <warner@lothar.com>
2433         * MANIFEST.in: make sure debug.glade is in the tarball
2435         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2437         * NEWS: update for the imminent 0.6.3 release
2439         * buildbot/status/html.py (HtmlResource.content): make the
2440         stylesheet <link> always point at "buildbot.css".
2441         (StatusResource.getChild): map "buildbot.css" to a static.File
2442         containing whatever css= argument was provided to Waterfall()
2443         (Waterfall): provide the "classic" css as the default.
2444         * docs/waterfall.classic.css: move default CSS from here ..
2445         * buildbot/status/classic.css: .. to here
2447         * MANIFEST.in: make sure classic.css is included in the tarball
2448         * setup.py: and that it is installed too, under buildbot/status/
2450         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2451         the module level, because buildbot.tap files from 0.6.2 don't have
2452         it in their attribute dictionary.
2454         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2455         really exists at startup, might save some confusion somewhere.
2457 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2459         * docs/waterfall.classic.css:
2460           add a stylesheet that's almost the same as the "classic"
2461           buildbot style
2463         * buildbot/status/builder.py:
2464           add EXCEPTION as a result - this is a problem for the bot
2465           maintainer, not a build problem for the changers
2466         * buildbot/process/step.py:
2467           use EXCEPTION instead of FAILURE for exceptions
2468         * buildbot/status/html.py:
2469           add build_get_class to get a class out of a build/buildstep
2470           finish naming the classes
2471           split out sourceNames to changeNames and builderNames so we
2472           can style them separately
2473         * docs/config.xhtml:
2474           finish documenting classes as they are right now
2476         * buildbot/status/html.py:
2477           name the classes as we agreed on IRC
2478         * docs/config.xhtml:
2479           and document them
2481         * buildbot/status/html.py:
2482           same for cssclass->class_
2484         * buildbot/status/html.py:
2485           as decided on IRC, use class_ for the "class" attribute to not
2486           conflict with the class keyword, and clean up the messy **{} stuff.
2488         * buildbot/status/mail.py:
2489           put back "builders" argument, and fix docstring, because the
2490           code *ignores* builders listed in this argument
2492         * buildbot/process/builder.py:
2493           remove FIXME notes - category is now indeed a cvar of BuilderStatus
2495         * docs/config.xhtml:
2496           describe the category argument for builders
2498         * buildbot/status/builder.py:
2499           Fix a silly bug due to merging
2501         * buildbot/process/builder.py:
2502           remove category from the process Builder ...
2503         * buildbot/status/builder.py:
2504           ... and add it to BuilderStatus instead.
2505           Set category on unpickled builder statuses, they might not have it.
2506         * buildbot/master.py:
2507           include category when doing builderAdded
2508         * buildbot/status/mail.py:
2509           return None instead of self for builders we are not interested in.
2510         * buildbot/test/test_run.py:
2511           fix a bug due to only doing deferredResult on "dummy" waiting
2512         * buildbot/test/test_status.py:
2513           add checks for the Mail IStatusReceiver returning None or self
2515         * buildbot/status/html.py:
2516           fix testsuite by prefixing page title with BuildBot
2518         * buildbot/status/builder.py:
2519           have .category in builder status ...
2520         * buildbot/process/builder.py:
2521           ... and set it from Builder
2522         * buildbot/status/html.py:
2523           make .css a class variable 
2524         * buildbot/test/test_status.py:
2525           write more tests to cover our categories stuff ...
2526         * buildbot/status/mail.py:
2527           ... and fix the bug that this uncovered
2529         * buildbot/changes/mail.py:
2530         * buildbot/changes/pb.py:
2531         * buildbot/master.py:
2532         * buildbot/process/base.py:
2533         * buildbot/process/factory.py:
2534         * buildbot/process/interlock.py:
2535         * buildbot/process/step.py:
2536         * buildbot/process/step_twisted.py:
2537         * buildbot/slave/commands.py:
2538         * buildbot/status/builder.py:
2539         * buildbot/status/client.py:
2540         * buildbot/status/html.py:
2541         * buildbot/status/mail.py:
2542         * buildbot/status/progress.py:
2543         * buildbot/test/test_changes.py:
2544         * buildbot/test/test_config.py:
2545         * buildbot/test/test_control.py:
2546         * buildbot/test/test_interlock.py:
2547         * buildbot/test/test_maildir.py:
2548         * buildbot/test/test_mailparse.py:
2549         * buildbot/test/test_run.py:
2550         * buildbot/test/test_slavecommand.py:
2551         * buildbot/test/test_status.py:
2552         * buildbot/test/test_steps.py:
2553         * buildbot/test/test_twisted.py:
2554         * buildbot/test/test_util.py:
2555         * buildbot/test/test_vc.py:
2556         * buildbot/test/test_web.py:
2557         * buildbot/util.py:
2558           add test-case-name at the top of a whole set of files
2560         * buildbot/status/builder.py:
2561           keep order of addition when getting builder names
2562         * buildbot/status/words.py:
2563         * buildbot/test/test_run.py:
2564           add test for getBuilderNames
2566         * buildbot/process/base.py:
2567         * buildbot/process/step.py:
2568         * buildbot/status/builder.py:
2569         * buildbot/status/html.py:
2570           make buildbot css-able
2571           replace the color code for purple with purple, don't understand
2572           why it wasn't purple to start with
2574         * buildbot/status/words.py:
2575           ok, so it doesn't look like BuilderStatus.remote is still valid.
2576           Use what waterfall uses instead.
2578         * buildbot/interfaces.py:
2579         * buildbot/status/builder.py:
2580         * buildbot/status/html.py:
2581         * buildbot/status/mail.py:
2582         * buildbot/status/words.py:
2583         * buildbot/test/test_run.py:
2584           use categories everywhere and make it be a list.  More sensible
2585           for the future.  Also make words actually respect this in
2586           buildFinished.
2588         * buildbot/interfaces.py:
2589           add category argument to getBuilderNames
2590         * buildbot/process/builder.py:
2591         * buildbot/status/builder.py:
2592         * buildbot/status/html.py:
2593         * buildbot/status/mail.py:
2594         * buildbot/status/words.py:
2595         * buildbot/test/test_run.py:
2596           move from specifying builders by name to specifying the category
2598         * buildbot/status/html.py:
2599         * buildbot/status/words.py:
2600           add "builders=" to __init__ of status clients so they can
2601           limit themselves to the given list of builders to report on
2603         * buildbot/status/html.py: set the title to the product name
2605 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
2607         * buildbot/interfaces.py:
2608         * buildbot/status/builder.py:
2609           more documentation.  Hm, not sure if ChangeLog entries make sense
2610           here...
2612 2005-04-23  Brian Warner  <warner@lothar.com>
2614         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2616         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2618         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2619         the sub-commands that log buildmaster status to stdout and to a
2620         GUI window, respectively.
2622         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2623         functionality is working again, but all the step-status and ETA
2624         stuff is missing. Commented out a lot of code pending more
2625         overhaul work.
2627         * buildbot/status/client.py: make sure that IRemote(None) is None
2629         * buildbot/changes/changes.py: import defer, oops
2630         (ChangeMaster): remove the .sources list, rely upon the fact that
2631         MultiServices can be treated as sequences of their children. This
2632         cleans up the add/remove ChangeSource routines a lot, as we keep
2633         exactly one list of the current sources instead of three.
2635         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2636         up an empty ChangeMaster at init time.
2637         (BuildMaster.loadChanges): if there are changes to be had from
2638         disk, replace self.change_svc with the new ones. If not, keep
2639         using the empty ChangeMaster set up in __init__.
2640         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2641         instead of a separate list, makes the code a bit cleaner.
2642         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2643         (ConfigTest.testSources): same, also wait for loadConfig to finish.
2644         Extend the test to make sure we can get rid of the sources when
2645         we're done.
2647 2005-04-22  Brian Warner  <warner@lothar.com>
2649         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2650         and info/host files when making the slave directory
2652         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2653         whendone= argument, just return the Deferred and let the caller do
2654         what they want with it.
2655         (Disconnect.testBuild1): wait for shutdownSlave
2656         (Basedir.testChangeBuilddir): new test to make sure changes to the
2657         builddir actually get propagated to the slave
2659         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2660         explicit method, rather than passing the builddir in __init__ .
2661         Make sure to update self.basedir too, this was broken before.
2662         (Bot.remote_setBuilderList): use b.setBuilddir for both new
2663         builders and for ones that have just had their builddir changed.
2664         (BotFactory): add a class-level .perspective attribute, so
2665         BuildSlave.waitUntilDisconnected won't get upset when the
2666         connection hasn't yet been established
2667         (BuildSlave.__init__): keep track of the bot.Bot instance, so
2668         tests can reach through it to inspect the SlaveBuilders
2670         * buildbot/process/base.py (Build.buildException): explain the
2671         log.err with a log.msg
2672         * buildbot/process/builder.py (Builder.startBuild): same
2673         (Builder._startBuildFailed): improve error message
2675         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2676         occurred because we lost the brand-new connection, retry instead
2677         of giving up. If not, it's probably an authorization failure, and
2678         it makes sense to stop trying. Make sure we log.msg the reason
2679         that we're log.err'ing the failure, otherwise test failures are
2680         really hard to figure out.
2682         * buildbot/master.py: change loadConfig() to return a Deferred
2683         that doesn't fire until the change has been fully implemented.
2684         This means any connected slaves have been updated with the new
2685         builddir. This change makes it easier to test the code which
2686         actually implements this builddir-updating.
2687         (BotPerspective.addBuilder): return Deferred
2688         (BotPerspective.removeBuilder): same
2689         (BotPerspective.attached): same
2690         (BotPerspective._attached): same. finish with remote_print before
2691         starting the getSlaveInfo, instead of doing them in parallel
2692         (BotPerspective.list_done): same
2693         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2694         actually calling slave.disconnect()
2695         (BotMaster.addBuilder): same
2696         (BotMaster.removeBuilder): same
2697         (BuildMaster.loadConfig): same
2698         (BuildMaster.loadConfig_Slaves): same
2699         (BuildMaster.loadConfig_Sources): same
2700         (BuildMaster.loadConfig_Builders): same
2701         (BuildMaster.loadConfig_status): same
2703         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2704         a Deferred that fires when the source is finally removed
2706         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2707         the previous tree on win32, where we have to do it synchronously,
2708         make sure we return a Deferred anyway.
2709         (SourceBase.doCopy): same
2711         * buildbot/scripts/runner.py (statusgui): use the text client for
2712         now, while I rewrite the Gtk one
2713         * buildbot/clients/base.py: strip out old code, leaving just the
2714         basic print-message-on-event functionality. I also remove the
2715         ReconnectingPBClientFactory, but it does at least quit when it
2716         loses the connection instead of going silent
2718 2005-04-21  Brian Warner  <warner@lothar.com>
2720         * Makefile: minor tweaks
2722         * NEWS: point out deprecation warnings, new features for
2723         /usr/bin/buildbot
2725         * buildbot/master.py (BuildMaster.loadConfig): emit
2726         DeprecationWarnings for Builders defined with tuples. Rearrange
2727         code to facility removal of deprecated configuration keys in the
2728         next release.
2730         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2731         'buildbot' command to put a little Makefile in the target that
2732         helps you re-create the buildbot.tap file, start or stop the
2733         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2734         all the files 0600, since they contain passwords.
2735         (start): if there is a Makefile, and /usr/bin/make exists, use
2736         'make start' in preference to a raw twistd command. This lets
2737         slave admins put things like PYTHONPATH variables in their
2738         Makefiles and have them still work when the slave is started with
2739         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2740         be nice to first try the 'make' command and only fall back to
2741         twistd if it fails. TODO: the Makefile's "start" command does not
2742         add the --reactor=win32 argument when running under windows.
2743         (Options.debugclient, Options.statusgui): add sub-commands to launch
2744         the debug client (formerly in contrib/debugclient.py) and the
2745         Gtk status application (currently broken)
2746         * buildbot/clients/debug.py: move from contrib/debugclient.py
2747         * buildbot/clients/debug.glade: same
2749         * buildbot/test/test_trial.py: remove it. This requires some
2750         functionality out of Twisted that isn't there yet, and until then
2751         having it around just confuses things.
2753         * buildbot/test/test_slavecommand.py (Shell): test both with and
2754         without PTYs, and make sure that command output is properly
2755         interleaved in the with-PTY case. I think the without-PTY test
2756         should pass on windows, where we never use PTYs anyway.
2758 2005-04-20  Brian Warner  <warner@lothar.com>
2760         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2762         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2764         * NEWS: start creating entries for the next release
2766         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2768         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2769         (WebTest.test_webPathname): same
2770         (WebTest.test_webPathname_port): same
2771         (WebTest.test_waterfall): use the default favicon rather than
2772         rooting around the filesystem for it. Open the expected-icon file
2773         in binary mode, to make win32 tests happier (thanks to Nick Trout
2774         for the catch)
2775         * buildbot/status/html.py (buildbot_icon): win32 portability
2777         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2778         win32-compatibility fixes from Nick Trout, the "file not found" message
2779         is different under windows
2780         (FakeSlaveBuilder.__init__): clean up setup a bit
2781         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2783 2005-04-19  Brian Warner  <warner@lothar.com>
2785         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2786         skip-if-repositories-are-unavailable test to not kill the trial
2787         that comes with Twisted-1.3.0
2789         * setup.py: install buildbot.png icon file when installing code
2791         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2792         environment used by the command, at least on the child side.
2794         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2795         this method needs to be added and implemented because it gets
2796         called under heavy load. I don't quite understand the
2797         producer/consumer API enough to write it.
2798         (StatusResource.getChild): add a resource for /favicon.ico
2799         (Waterfall.__init__): add favicon= argument
2800         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2801         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2802         (WebTest.test_webPathname): same
2803         (WebTest.test_webPathname_port): same
2804         * docs/config.xhtml: mention favicon=
2805         * buildbot/buildbot.png: add a default icon, dorky as it is
2807 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
2809         * buildbot/master.py:
2810         * buildbot/process/base.py:
2811         * buildbot/process/builder.py:
2812         * buildbot/process/interlock.py:
2813         * buildbot/status/builder.py:
2814         * buildbot/status/html.py:
2815         * buildbot/status/mail.py:
2816         * buildbot/status/words.py:
2817           new documentation while digging through the code
2819 2005-04-17  Brian Warner  <warner@lothar.com>
2821         * general: try to fix file modes on all .py files: a+r, a-x,
2822         but let buildbot/clients/*.py be +x since they're tools
2824         * docs/epyrun (addMod): when an import fails, say why
2826         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2828 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2830         * buildbot/process/base.py:
2831         * buildbot/process/builder.py:
2832         * buildbot/status/builder.py:
2833           new documentation while digging through the code
2835 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2837         * buildbot/changes/changes.py:
2838         * buildbot/changes/p4poller.py:
2839         * buildbot/interfaces.py:
2840         * buildbot/process/base.py:
2841         * buildbot/process/builder.py:
2842         * buildbot/process/step.py:
2843         * buildbot/process/step_twisted.py:
2844         * buildbot/slave/bot.py:
2845         * buildbot/slave/commands.py:
2846         * buildbot/status/builder.py:
2847           fix all docstrings to make epydoc happy.  In the process of fixing
2848           some, I also moved pieces of docs, and removed some deprecated
2849           documentation
2851 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
2853         * buildbot/process/builder.py:
2854         * buildbot/process/interlock.py:
2855         * buildbot/process/process_twisted.py:
2856         * buildbot/process/step.py:
2857           BuildProcess -> Build, as it looks like that's what happened
2858         * buildbot/process/base.py:
2859         * buildbot/process/factory.py:
2860           update epydoc stuff
2862 2005-04-17  Brian Warner  <warner@lothar.com>
2864         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2865         update compile command to accomodate the Twisted split.. now
2866         instead of './setup.py build_ext -i', you do './setup.py all
2867         build_ext -i', to run build_ext over all sub-projects.
2868         (FullTwistedBuildFactory): same
2869         (TwistedReactorsBuildFactory): same
2871         * buildbot/status/html.py (TextLog.finished): null out self.req
2872         when we're done, otherwise the reference cycle of TextLog to .req
2873         to .notifications to a Deferred to TextLog.stop keeps them from
2874         being collected, and consumes a huge (610MB on pyramid at last
2875         check) amount of memory.
2877 2005-04-11  Brian Warner  <warner@lothar.com>
2879         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
2880         normalize the VC-repository location.. makes SVN happier with
2881         certain test environments.
2883         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
2884         RemoteShellCommand gets its own .env dictionary, so that code in
2885         start() doesn't mutate the original. I think this should fix the
2886         step_twisted.Trial problem where multiple identical components
2887         kept getting added to PYTHONPATH= over and over again.
2889         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
2890         adding epydoc-format docstrings to many classes. Thanks to Thomas
2891         Vander Stichele for the patches.
2892         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
2893         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
2894         * buildbot/slave/bot.py, commands.py, registry.py: same
2896 2005-04-05  Brian Warner  <warner@lothar.com>
2898         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
2899         preserve timestamps, helps incremental builds of large trees.
2900         Patch from Rene Rivera.
2902         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
2903         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
2904         for the catch.
2906 2005-04-03  Brian Warner  <warner@lothar.com>
2908         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
2909         with one dict, apparently exec has some scoping bugs when used
2910         with both global/local dicts. Thanks to Nathaniel Smith for the
2911         catch.
2913 2005-04-02  Brian Warner  <warner@lothar.com>
2915         * buildbot/process/step_twisted.py (countFailedTests): the new
2916         trial in Twisted-2.0 emits a slightly different status line than
2917         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
2918         mistakenly think the test count is unparseable.
2919         (Trial.start): note that for some reason each build causes another
2920         copy of self.testpath to be prepended to PYTHONPATH. This needs to
2921         be fixed but I'm not sure quite where the problem is.
2923 2005-04-01  Brian Warner  <warner@lothar.com>
2925         * buildbot/test/test_run.py (Run.testMaster): change some uses of
2926         deferredResult to avoid hangs/warnings under twisted-2.0
2927         (RunMixin.tearDown): same
2928         (RunMixin.shutdownSlave): same
2929         (Disconnect.testIdle1): same
2930         (Disconnect.testBuild2): same: wait one second after the build
2931         finishes for test to really be done.. this should be cleaned up to
2932         avoid wasting that second. Builder.detach uses a callLater(0),
2933         either that should be done in-line (something else needed that
2934         behavior), or it should return a Deferred that fires when the
2935         builder is really offline.
2936         (Disconnect.testBuild3): same
2937         (Disconnect.testDisappear): same
2939         * buildbot/test/test_web.py: rearrange server-setup and teardown
2940         code to remove unclean-reactor warnings from twisted-2.0
2942         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
2943         so the tests don't hang under twisted-2.0
2945 2005-03-31  Brian Warner  <warner@lothar.com>
2947         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
2948         caused a warning each time the master changed our set of builders
2950         * buildbot/status/builder.py (BuildStatus.saveYourself): under
2951         w32, don't unlink the file unless it already exists. Thanks to
2952         Baptiste Lepilleur for the catch.
2953         (BuilderStatus.saveYourself): same
2955 2005-02-01  Brian Warner  <warner@lothar.com>
2957         * buildbot/status/html.py (TextLog.getChild): use a /text child
2958         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
2959         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
2960         logfile as text/plain (no markup, no headers). This replaces the
2961         previous scheme (which used an ?text=1 argument), and gets us back
2962         to a relative link (which works better when the buildbot lives
2963         behind another web server, such as Apache configured as a reverse
2964         proxy). Thanks to Gerald Combs for spotting the problem.
2966         * buildbot/__init__.py (version): bump to 0.6.2+ while between
2967         releases
2969 2004-12-13  Brian Warner  <warner@lothar.com>
2971         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
2973         * debian/changelog: update for 0.6.2
2974         * NEWS: finalize for 0.6.2
2976 2004-12-11  Brian Warner  <warner@lothar.com>
2978         * NEWS: bring it up to date
2980         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
2981         detection code. Require some sign of life from the buildmaster
2982         every BotFactory.keepaliveInterval seconds. Provoke this
2983         indication at BotFactory.keepaliveTimeout seconds before the
2984         deadline by sending a keepalive request. We don't actually care if
2985         that request is answered in a timely fashion, what we care about
2986         is that .activity() is called before the deadline. .activity() is
2987         triggered by any PB message from the master (including an ack to
2988         one of the slave's status-update messages). With this new scheme,
2989         large status messages over slow pipes are OK, as long as any given
2990         message can be sent (and thus acked) within .keepaliveTimeout
2991         seconds (which defaults to 30).
2992         (SlaveBuilder.remote_startCommand): record activity
2993         (SlaveBuilder.ackUpdate): same
2994         (SlaveBuilder.ackComplete): same
2995         (BotFactory.gotPerspective): same
2996         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
2998 2004-12-09  Brian Warner  <warner@lothar.com>
3000         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3001         debug message
3003         * buildbot/process/step_twisted.py (Trial._commandComplete):
3004         update self.cmd when we start the 'cat test.log' transfer. Without
3005         this, we cannot interrupt the correct RemoteCommand when we lose
3006         the connection.
3008         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3009         trying to tell the slave to stop the command if we're already
3010         inactive, or if we no longer have a .remote
3012         * buildbot/process/builder.py (Builder._detached): don't let an
3013         exception in currentBuild.stopBuild() prevent the builder from
3014         being marked offline
3016 2004-12-07  Brian Warner  <warner@lothar.com>
3018         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3019         KeyError that happens when you ask for a non-existent Builder, and
3020         translate it into a UsageError.
3022         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3023         losing the slave in the middle of a remote step is handled too
3025         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3026         be a Failure, so be sure to stringify it before using it as the
3027         contents of the 'interrupt' logfile
3028         (RemoteCommand.interrupt): use stringified 'why' in
3029         remote_interruptCommand too, just in case
3031 2004-12-06  Brian Warner  <warner@lothar.com>
3033         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3034         instead of 'tla update', which is more efficient in case we've
3035         missed a couple of patches since the last update.
3037         * debian/changelog: update for previous (0.6.1) release. Obviously
3038         this needs to be handled better.
3040 2004-12-05  Brian Warner  <warner@lothar.com>
3042         * NEWS: update for stuff since last release
3044         * buildbot/master.py (DebugPerspective.attached): return 'self', to
3045         match the maybeDeferred change in Dispatcher.requestAvatar
3046         * buildbot/changes/pb.py (ChangePerspective.attached): same
3047         * buildbot/status/client.py (StatusClientPerspective.attached): same
3048         * buildbot/process/builder.py (Builder._attached3): same
3049         * buildbot/pbutil.py (NewCredPerspective.attached): same
3051         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3052         the date to the top-most box, if it is not the same as today's
3053         date.
3055         * docs/slave.xhtml: provide a buildslave setup checklist
3057         * docs/source.xhtml (Arch): correct terminology
3059 2004-12-04  Brian Warner  <warner@lothar.com>
3061         * buildbot/test/test_slavecommand.py: use sys.executable instead
3062         of hard-coding 'python' for child commands, might help portability
3064         * docs/examples/twisted_master.cfg: update to current usage
3066         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3067         'stop build' command to the IRC bot
3069         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3070         message that broke PBChangeSource
3072         * buildbot/slave/bot.py: clean up shutdown/lose-master code
3073         (SlaveBuilder): make some attributes class-level, remove the old
3074         "update queue" which existed to support resuming a build after the
3075         master connection was lost. Try to reimplement that feature later.
3076         (SlaveBuilder.stopCommand): clear self.command when the
3077         SlaveCommand finishes, so that we don't try to kill a leftover one
3078         at shutdown time.
3079         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3080         .finishCommand
3082         * buildbot/slave/commands.py (SourceBase): set self.command for
3083         all VC commands, so they can be interrupted.
3085 2004-12-03  Brian Warner  <warner@lothar.com>
3087         * buildbot/master.py: clean up slave-handling code, to handle
3088         slave-disconnect and multiple-connect better
3089         (BotPerspective): make these long-lasting, exactly one per bot
3090         listed in the config file.
3091         (BotPerspective.attached): if a slave connects while an existing
3092         one appears to still be connected, disconnect the old one first.
3093         (BotPerspective.disconnect): new method to forcibly disconnect a
3094         buildslave. Use some hacks to empty the transmit buffer quickly to
3095         avoid the long (20-min?) TCP timeout that could occur if the old
3096         slave has dropped off the net.
3097         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3098         own their own SlaveStatus objects. Remove .attached/.detached, add
3099         .addSlave/.removeSlave, treat slaves like Builders (config file
3100         parsing sends deltas to the BotMaster). Inform the slave
3101         instances, i.e. the BotPerspective, about addBuilder and
3102         removeBuilder.
3103         (BotMaster.getPerspective): turns into a single dict lookup
3104         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3105         which gives BotPerspective.attached a chance to disconnect the old
3106         slave first.
3107         (BuildMaster.loadConfig): add code (disabled) to validate that all
3108         builders use known slaves (listed in c['bots']). The check won't
3109         work with tuple-specified builders, which are deprecated but not
3110         yet invalid, so the check is disabled for now.
3111         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3112         routine, do the add/changed/removed dance with them like we do
3113         with builders.
3114         (BuildMaster.loadConfig_Sources): move source-config into a
3115         separate routine too
3117         * buildbot/status/builder.py (Status.getSlave): get the
3118         SlaveStatus object from the BotPerspective, not the BotMaster.
3120         * buildbot/test/test_run.py: bunch of new tests for losing the
3121         buildslave at various points in the build, handling a slave that
3122         connects multiple times, and making sure we can interrupt a
3123         running build
3125         * buildbot/slave/bot.py (BuildSlave): make it possible to use
3126         something other than 'Bot' for the Bot object, to make certain
3127         test cases easier to write.
3128         (BuildSlave.waitUntilDisconnected): utility method for testing
3130 2004-11-30  Brian Warner  <warner@lothar.com>
3132         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3134         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3135         argument, return a Deferred that always fires with True or False.
3136         I don't use an errback to indicate 'ping failed' so that callers
3137         are free to ignore the deferred without causing spurious errors in
3138         the logs.
3139         * buildbot/process/builder.py (BuilderControl.ping): implement it
3141         * buildbot/test/test_run.py (Status.testDisappear): test ping
3142         (Status.disappearSlave): fix it
3144 2004-11-30  Brian Warner  <warner@lothar.com>
3146         * buildbot/interfaces.py (IBuildControl): add .stopBuild
3147         (IBuilderControl): add .getBuild(num), only works for the current
3148         build, of course, although it might be interesting to offer
3149         something for builds in the .waiting or .interlocked state.
3151         * buildbot/process/base.py (Build): have .stopBuild just do the
3152         interrupt, then let the build die by itself.
3153         (BuildControl): add .stopBuild, and add a point-event named
3154         'interrupt' just after the build so status viewers can tell that
3155         someone killed it.
3156         (BuilderControl): add .getBuild
3158         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3159         stops when you kill it, good for testing
3160         (ShellCommand.interrupt): add a logfile named 'interrupt' which
3161         contains the 'reason' text.
3163         * buildbot/status/html.py: Add Stop Build button, if the build can
3164         still be stopped. Send a Redirect (to the top page) one second
3165         later, hopefully long enough for the interrupt to have an effect.
3166         Move make_row() up to top-level to share it between Stop Build and
3167         Force Build.
3169         * buildbot/slave/commands.py: only kill the child process once
3171         * buildbot/test/test_run.py: add testInterrupt
3173 2004-11-29  Brian Warner  <warner@lothar.com>
3175         * buildbot/process/base.py: Refactor command interruption. The
3176         Build is now responsible for noticing that the slave has gone
3177         away: Build.lostRemote() interrupts the current step and makes
3178         sure that no further ones will be started.
3179         
3180         * buildbot/process/builder.py: When the initial remote_startBuild
3181         message fails, log it: this usually indicates that the slave has
3182         gone away, but we don't really start paying attention until they
3183         fail to respond to the first step's command.
3185         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3186         slave disconnect. Now sports a new interrupt() method. Error
3187         handling was simplified a lot by chaining deferreds, so
3188         remoteFailed/remoteComplete were merged into a single
3189         remoteComplete method (which can now get a Failure object).
3190         Likewise failed/finished were merged into just _finished.
3191         (BuildStep): Add interrupt(why) method, and if why is a
3192         ConnectionLost Failure then the step is failed with some useful
3193         error text.
3195         * buildbot/slave/bot.py: stop the current command when the remote
3196         Step reference is lost, and when the slave is shut down.
3197         (Bot): make it a MultiService, so it can have children. Use
3198         stopService to tell when the slave is shutting down.
3199         (SlaveBuilder): make it a Service, and a child of the Bot. Add
3200         remote_interruptCommand (which asks the current SlaveCommand to
3201         stop but allows it to keep emitting status messages), and
3202         stopCommand (which tells it to shut up and die).
3204         * buildbot/slave/commands.py: make commands interruptible
3205         (ShellCommand.kill): factor out os.kill logic
3206         (Command): factor out setup()
3207         (Command.sendStatus): don't send status if .running is false, this
3208         happens when the command has been halted.
3209         (Command.interrupt): new method, used to tell the command to die
3210         (SlaveShellCommand): implement .interrupt
3211         (DummyCommand): implement .interrupt
3212         (SourceBase, etc): factor out setup(), don't continue substeps if
3213         .interrupted is set
3215         * buildbot/status/builder.py: fix all waitUntilFinished() methods
3216         so they can be called after finishing
3218         * buildbot/test/test_run.py: new tests for disconnect behavior,
3219         refactor slave-shutdown routines, add different kinds of
3220         slave-shutdown
3222 2004-11-27  Brian Warner  <warner@lothar.com>
3224         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3225         method to express ETA time like "2m45s" instead of "165 seconds"
3227 2004-11-24  Brian Warner  <warner@lothar.com>
3229         * buildbot/test/test_vc.py (VC.testArch): unregister the test
3230         archive after the test completes, to avoid cluttering the user's
3231         'tla archives' listing with a bogus entry. Arch doesn't happen to
3232         provide any way to override the use of ~/.arch-params/, so there
3233         isn't a convenient way to avoid touching the setup of the user who
3234         runs the test.
3235         (VC_HTTP.testArchHTTP): same
3237 2004-11-23  Brian Warner  <warner@lothar.com>
3239         * buildbot/status/html.py (TextLog): split render() up into
3240         render_HEAD and render_GET. Use a Producer when sending log
3241         chunks, to reduce memory requirements and avoid sending huge
3242         non-Banana-able strings over web.distrib connections. Requires
3243         peeking under the covers of IStatusLog.
3244         (TextLog.resumeProducing): fix the "as text" link, handle client
3245         disconnects that occur while we're still sending old chunks.
3247         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3248         use defer.succeed, not the non-existent defer.success
3249         (LogFile.waitUntilFinished): same
3250         (LogFile.subscribe): don't add watchers to a finished logfile
3252         * buildbot/__init__.py (version): bump to 0.6.1+ while between
3253         releases
3255 2004-11-23  Brian Warner  <warner@lothar.com>
3257         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3259 2004-11-23  Brian Warner  <warner@lothar.com>
3261         * NEWS: update for the 0.6.1 release
3262         * MANIFEST.in: add new files
3264         * README (INSTALLATION): explain how to enable the extra VC tests
3266         * buildbot/status/builder.py (LogFile): add .runEntries at the class
3267         level to, so old pickled builds can be displayed ok
3269 2004-11-22  Brian Warner  <warner@lothar.com>
3271         * NEWS: summarize updates since last release
3273         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3274         Yoz Grahame. Closes SF#1050138.
3276         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3277         SF#1042563.
3279         * buildbot/process/step_twisted.py (Trial): update docs a bit
3281         * docs/factories.xhtml: fix Trial factory docs to match reality.
3282         Closes: SF#1049758.
3284         * buildbot/process/factory.py (Trial.__init__): add args for
3285         randomly= and recurse=, making them available to instantiators
3286         instead of only to subclassers. Closes: SF#1049759.
3288 2004-11-15  Brian Warner  <warner@lothar.com>
3290         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3291         try to teach the Quick factory to use multiple versions of python
3293 2004-11-12  Brian Warner  <warner@lothar.com>
3295         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3296         safer w32-compatible approach, and only use it on windows
3297         (BuildStatus.saveYourself): same
3299 2004-11-11  Brian Warner  <warner@lothar.com>
3301         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3302         it: one string merge per chunk. There are now separate .entries
3303         and .runEntries lists: when enumerating over all chunks, make sure
3304         to look at both.
3305         * buildbot/test/test_status.py (Log): more tests
3307         * buildbot/status/builder.py (LogFile.addEntry): Merge string
3308         chunks together, up to 10kb per chunk. This ought to cut down on
3309         the CPU-burning overhead of large log files. Thanks to Alexander
3310         Staubo for spotting the problem.
3311         * buildbot/test/test_status.py (Log): tests for same
3313 2004-11-10  Brian Warner  <warner@lothar.com>
3315         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3316         header to outbound mail
3317         * buildbot/test/test_status.py (Mail.testBuild1): test for same
3319 2004-11-08  Brian Warner  <warner@lothar.com>
3321         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3322         can't do os.rename() onto an existing file, so catch the exception
3323         and unlink the target file first. This introduces a slight window
3324         where the existing file could be lost, but the main failure case
3325         (disk full) should still be handled safely.
3326         (BuildStatus.saveYourself): same
3328         * buildbot/changes/pb.py (ChangePerspective): use a configurable
3329         separator character instead of os.sep, because the filenames being
3330         split here are coming from the VC system, which can have a
3331         different pathname convention than the local host. This should
3332         help a buildmaster running on windows that uses a CVS repository
3333         which runs under unix.
3334         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3336         * buildbot/process/step_twisted.py (Trial.createSummary): survive
3337         when there are no test failures to be parsed
3339         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3340         instead of the unix-specific os.system("cp"), thanks to Elliot
3341         Murphy for this and the other buildbot-vs-windows catches.
3342         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3344         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3345         echo the command as it is run
3347         * setup.py: install sample.mk too, not just sample.cfg
3348         (scripts): install contrib/windows/buildbot.bat on windows
3350 2004-11-07  Brian Warner  <warner@lothar.com>
3352         * buildbot/process/builder.py (Builder._detached): clear the
3353         self.currentBuild reference, otherwise the next build will be
3354         skipped because we think the Builder is already in use.
3356         * docs/examples/twisted_master.cfg: update to match current usage
3357         on the Twisted buildbot
3359 2004-10-29  Brian Warner  <warner@lothar.com>
3361         * buildbot/status/mail.py (MailNotifier): fix typo in docs
3363 2004-10-28  Brian Warner  <warner@lothar.com>
3365         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3366         have separate doVCUpdate/doVCFull methods. Catch an update failure
3367         and respond by clobbering the source directory and re-trying. This
3368         will handle local changes (like replacing a file with a directory)
3369         that will cause CVS and SVN updates to fail.
3370         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3372         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3373         python-2.4 warning
3375 2004-10-19  Brian Warner  <warner@lothar.com>
3377         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3379         * buildbot/status/html.py (StatusResourceTestResults): display any
3380         TestResults that the Build might have
3381         (StatusResourceTestResult): and the logs for each TestResult
3382         (StatusResourceBuild): add link from the per-build page
3384 2004-10-15  Brian Warner  <warner@lothar.com>
3386         * buildbot/process/step_twisted.py (Trial.createSummary): parse
3387         the 'problems' portion of stdout, add TestResults to our build
3388         * buildbot/test/test_twisted.py (Parse.testParse): test it
3390         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3391         to retrieve a dict of accumulated test results
3392         (ITestResult): define what a single test result can do
3393         * buildbot/status/builder.py (TestResult): implement ITestResult
3394         (BuildStatus.getTestResults): retrieve dict of TestResults
3395         (BuildStatus.addTestResult): add TestResults
3396         * buildbot/test/test_status.py (Results.testAddResults): test it
3398 2004-10-14  Brian Warner  <warner@lothar.com>
3400         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3401         instead of os.system("rm -rf") for win32 portability
3403         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3404         SignalMixin instead of starting/stopping the reactor, which is
3405         likely to cause problems with other tests
3407         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3408         self.copyComplete() call. Yoz Grahame makes the catch.
3410         * contrib/windows/buildbot.bat: helper script to deal with path
3411         issues. Thanks to Yoz Grahame.
3413         * buildbot/master.py (BuildMaster.startService): don't register a
3414         SIGHUP handler if the signal module has no SIGHUP attribute.
3415         Apparently win32 does this.
3417         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3419         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3420         test if the reactor can't offer UNIX sockets
3422         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3423         error introduced in the last commit. We really need that
3424         metabuildbot :).
3426 2004-10-12  Brian Warner  <warner@lothar.com>
3428         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3429         when describing a maildir source. Thanks to Stephen Davis.
3431         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3432         ETA seconds
3434         * buildbot/scripts/runner.py (createMaster): install Makefile too
3435         (start): add --no_save to 'start' command
3436         * buildbot/scripts/sample.mk: simple convenience Makefile with 
3437         start/stop/reload targets
3439         * buildbot/__init__.py (version): bump to 0.6.0+ while between
3440         releases
3442 2004-09-30  Brian Warner  <warner@lothar.com>
3444         * setup.py: Releasing buildbot-0.6.0
3446 2004-09-30  Brian Warner  <warner@lothar.com>
3448         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3449         test_trial.py from the source tarball until support is complete.
3451         * NEWS: update for 0.6.0 release
3452         * buildbot/__init__.py (version): same
3453         * README: same
3455         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3456         'source' command to tell users where to get the Buildbot source
3458         * docs/examples/*.cfg: update to modern standards
3460         * NEWS: update for release
3462         * buildbot/scripts/runner.py (createMaster): remove the
3463         -shutdown.tap stuff now that it isn't necessary
3464         (createSlave): same
3465         (start): launch buildbot.tap, not buildbot-shutdown.tap
3468         * buildbot/status/mail.py (Domain): shorten class name
3469         (MailNotifier): if lookup= is a string, pass it to Domain()
3470         * buildbot/test/test_status.py (Mail.testBuild1): new class name
3471         (Mail.testBuild2): test the string-to-Domain shortcut
3472         (Mail.testMail): fix test
3475         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3476         example config file
3478         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3479         more attributes on load
3480         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3481         to accomodate the whole waterfall page at once, and the thrashing
3482         results in a lot of unnecessary loads
3483         (BuildStatus.saveYourself): use binary pickles, not fluffy text
3484         (BuilderStatus.saveYourself): same
3485         (BuilderStatus.eventGenerator): stop generating on the first missing
3486         build. We assume that saved builds are deleted oldest-first.
3487         (BuildStepStatus.__getstate__): .progress might not exist
3489         * buildbot/changes/changes.py (ChangeMaster): make it
3490         serializable, in $masterdir/changes.pck
3491         (ChangeMaster.stopService): save on shutdown
3492         * buildbot/master.py (BuildMaster.loadChanges): load at startup
3493         * buildbot/test/test_config.py: load Changes before config file
3496         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3497         "Oh my god, you killed the command" header on a separate line
3499         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3500         skip over corrupted build pickles
3501         (BuilderStatus.getFullBuildByNumber): same
3502         (BuilderStatus.eventGenerator): skip over unavailable builds
3503         (BuildStatus.saveYourself): save builds to a .tmp file first, then
3504         do an atomic rename. This prevents a corrupted pickle when some
3505         internal serialization error occurs.
3506         (BuilderStatus.saveYourself): same
3508         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3509         the timeout for shell commands, it got lost somehow
3511         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3512         run out of build steps, return the rest of the builder events
3514         * buildbot/interfaces.py (IBuilderControl.ping): add method
3516         * buildbot/process/builder.py (BuilderControl.ping): move
3517         slave-ping to BuilderControl, and fix the failure case in the
3518         process (Event.finish() is the verb, Event.finished is the noun).
3520         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3521         through the BuilderControl instead of the BuilderStatus
3522         (EventBox): add adapter for builder.Event, allowing builder events to
3523         be displayed in the waterfall display
3525         * buildbot/master.py (BotMaster.stopService): add a 'master
3526         shutdown' event to the builder's log
3527         (BuildMaster.startService): and a 'master started' on startup
3529         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3530         builder events into the BuildStep event stream
3531         (Status.builderAdded): add a 'builder created' event
3534         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3535         command to announce the completion of a running build
3536         (IrcStatusBot.command_FORCE): announce when the build finishes
3538         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3539         don't evict unfinished builds from the cache: they must stay in
3540         the full-cache until their logfiles have stopped changing. Make
3541         sure the eviction loop terminates if an unfinished build was hit.
3542         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3543         This lets exceptions be dumped in an email status message. Really
3544         we need LogFiles which contain both text and HTML, instead of two
3545         separate classes.
3546         (BuildStatus.__getstate__): handle self.finished=False
3547         (Status.builderAdded): if the pickle is corrupted, abandon the
3548         history and create a new BuilderStatus object.
3550         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3551         self.progress attribute, helped one test which doesn't fully set
3552         up the Build object.
3554         * buildbot/interfaces.py (IStatusLogStub): split out some of the
3555         IStatusLog methods into an Interface that is implemented by "stub"
3556         logs, for which all the actual text chunks are on disk (in the
3557         pickled Build instance). To show the log contents, you must first
3558         adapt the stub log to a full IStatusLog object.
3560         * buildbot/status/builder.py (LogFileStub): create separate stub
3561         log objects, which can be upgraded to a real one if necessary.
3562         (LogFile): make them persistable, and let them stubify themselves
3563         (HTMLLogFile): same
3564         (BuildStepStatus): same
3565         (BuildStatus): same
3566         (BuildStatus.saveYourself): save the whole build out to disk
3567         (BuilderStatus): make it persistable
3568         (BuilderStatus.saveYourself): save the builder to disk
3569         (BuilderStatus.addFullBuildToCache): implement two caches which
3570         hold Build objects: a small one which holds full Builds, and a
3571         larger one which holds "stubbed" Builds (ones with their LogFiles
3572         turned into LogFileStubs). This reduces memory usage by the
3573         buildmaster by not keeping more than a few (default is 2) whole
3574         build logs in RAM all the time.
3575         (BuilderStatus.getBuild): rewrite to pull from disk (through the
3576         cache)
3577         (BuilderStatus.eventGenerator): rewrite since .builds went away
3578         (BuilderStatus.buildStarted): remove the .builds array. Add the
3579         build to the "full" cache when it starts.
3580         (BuilderStatus._buildFinished): save the build to disk when it
3581         finishes
3582         (Status): give it a basedir (same as the BuildMaster's basedir)
3583         where the builder pickles can be saved
3584         (Status.builderAdded): create the BuilderStatus ourselves, by
3585         loading a pickle from disk (or creating a new instance if there
3586         was none on disk). Return the BuilderStatus so the master can glue
3587         it into the new Builder object.
3589         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3590         all BuilderStatuses to save themselves out to disk. This is in
3591         lieu of saving anything important in the main Application pickle
3592          (the -shutdown.tap file).
3593         (BuildMaster.__init__): give Status() a basedir for its files
3594         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3595         to get the BuilderStatus, then give it to the Builder (instead of
3596         doing it the other way around). It's ok if the status announces
3597         the new Builder before it's really ready, as the outside world can
3598         only see the BuilderStatus object anyway (and it is ready before
3599         builderAdded returns). Use the builder's "builddir" (which
3600         normally specifies where the slave will run the builder) as the
3601         master's basedir (for saving serialized builds).
3603         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3604         coerce the logfile to IStatusLog before trying to get the text
3605         chunks out of it. This will pull the full (non-stubified) Build in
3606         from disk if necessary.
3607         (TextLog): fix the adapter registration
3609         * buildbot/test/test_control.py (Force.setUp): create the basedir
3610         * buildbot/test/test_web.py: same
3611         * buildbot/test/test_vc.py (SetupMixin.setUp): same
3612         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3613         * buildbot/test/test_run.py (Run.testMaster): same
3614         (Status.setUp): same
3616 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
3618         * buildbot/status/html.py (Waterfall.__init__): store actual
3619         allowForce flag passed in rather than using True for everyone;
3620         make sure setting it to False doesn't cause a NameError
3621         (Waterfall.setup).
3622         (StatusResourceBuilder.__init__) add the builder name to the page
3623         title.
3624         (StatusResourceBuilder.body) move HTML generation for a name/value
3625         row into a helper method (StatusResourceBuilder.make_row); only
3626         generate the "Force Build" form if allowForce was True and the
3627         slave is connected.  Use class attributes in the generated HTML to
3628         spread a little CSS-joy.
3630 2004-09-28  Brian Warner  <warner@lothar.com>
3632         * buildbot/process/step_twisted.py (Trial.createSummary): fix
3633         warning-scanner to not ignore things like
3634         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3636         * buildbot/status/html.py (StatusResource.control): add some
3637         class-level values for .control in an attempt to make upgrading
3638         smoother
3640         * buildbot/util.py (ComparableMixin): survive missing attributes,
3641         such as when a class is modified and we're comparing old instances
3642         against new ones
3644         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3645         failure handling, remove a redundant try/except block. Don't
3646         return the full traceback to the IRC channel.
3647         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3648         error messages. Get ETA properly.
3650         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3651         the reason, since (at least) IRC message will have <> in them.
3652         (StatusResourceBuilder.__init__): take an IBuilderControl
3653         (StatusResourceBuilder.force): use the IBuilderControl we get in
3654         the constructor instead of trying to make our own. Catch the
3655         new exceptions and ignore them for now (until we make an
3656         intermediate web page where we could show the error message)
3657         (StatusResource): create with an IControl, use it to give an
3658         IBuilderControl to all children
3659         (Waterfall): take an allowForce= option, pass an IControl object
3660         to StatusResource if it is True
3662         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3664         * buildbot/master.py (BotPerspective.perspective_forceBuild):
3665         catch new exceptions and return string forms
3667         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3668         * buildbot/process/builder.py (Builder.forceBuild): raise them
3669         * buildbot/test/test_control.py (Force.testNoSlave): new test
3670         (Force.testBuilderInUse): same
3673         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3675         * buildbot/test/test_run.py: use IControl
3676         * buildbot/test/test_vc.py: same
3678         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3679         to use IControl. Still offline.
3680         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3682         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3683         who=None so periodic builds don't send out status mail
3684         (Builder.forceBuild): include reason in the log message
3685         (BuilderControl.forceBuild): rename 'name' to 'who'
3687         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3688         'who' parameter, but make it None by default so builds forced by
3689         slave admins don't cause status mail to be sent to anybody
3690         (BotMaster.forceBuild): same. this method is deprecated.
3691         (DebugPerspective.perspective_forceBuild): same, use IControl.
3692         (DebugPerspective.perspective_fakeChange): use IControl..
3693         (Dispatcher.requestAvatar): .. so don't set .changemaster
3695         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3696         parameter to avoid confusion with the name of the builder
3699         * buildbot/status/mail.py: refine comment about needing 2.3
3701         * buildbot/status/html.py: move all imports to the top
3703         * buildbot/test/test_control.py: test new interfaces
3704         * buildbot/test/test_run.py (Status): handle new interfaces
3705         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3707         * buildbot/process/base.py (BuildControl): implement IBuildControl
3708         and its lonely getStatus() method
3710         * buildbot/process/builder.py (BuilderControl): implement
3711         IBuilderControl, obtained by adapting the Builder instance
3712         (Builder.startBuild): return a BuilderControl instead of a
3713         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3714         accomplish the same thing.
3716         * buildbot/master.py: move all import statements to the top
3717         (Control): implement IControl, obtained by adapting the
3718         BuildMaster instance.
3720         * buildbot/interfaces.py: add IControl, IBuilderControl, and
3721         IBuildControl. These are used to force builds. Eventually they
3722         will provide ways to reconfigure the Builders, pause or abandon a
3723         Build, and perhaps control the BuildMaster itself.
3725 2004-09-26  Brian Warner  <warner@lothar.com>
3727         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3728         ends up comparing us against something without a .__class__
3730 2004-09-24  Brian Warner  <warner@lothar.com>
3732         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3733         usage text right.
3735         * Makefile: add 'deb-snapshot' target, to create a timestamped
3736         .deb package
3738         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3740 2004-09-23  Brian Warner  <warner@lothar.com>
3742         * buildbot/__init__.py (version): move version string here
3743         * setup.py: get version string from buildbot.version
3744         * buildbot/status/html.py (WaterfallStatusResource.body): add
3745         buildbot version to the page footer
3746         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3747         version when asked
3749         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3750         slaves, let the second know where the first one is coming from
3751         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3752         see our exceptions. It would be nice if there were a way to just
3753         send them the exception type and value, not the full traceback.
3756         * buildbot/status/mail.py (MailNotifier): add a new argument
3757         sendToInterestedUsers=, which can be set to False to disable the
3758         usual send-to-blamelist behavior.
3759         (top): handle python-2.2 which has no email.MIMEMultipart
3760         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3761         (MailNotifier.disownServiceParent): unsubscribe on removal
3763         * buildbot/test/test_status.py (Mail.testBuild2): test it
3766         * buildbot/status/progress.py (Expectations.wavg): tolerate
3767         current=None, which happens when steps start failing badly
3768         * buildbot/test/test_status.py (Progress.testWavg): test for it
3770         * buildbot/process/step.py (SVN.startVC): when the (old) slave
3771         doesn't understand args['revision'], emit a warning instead of
3772         bailing completely. Updating to -rHEAD is probably close enough.
3774         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3776         * buildbot/test/test_status.py: at least import bb.status.client
3777         even if we don't have any test coverage for it yet
3779         * contrib/svn_buildbot.py: don't require python2.3
3780         (main): wait, do require it (for sets.py), but explain how to
3781         make it work under python2.2
3783 2004-09-23  Brian Warner  <warner@lothar.com>
3785         * contrib/svn_buildbot.py: include the revision number in the Change
3787         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3788         using util.now() because FreshCVS is a realtime service
3790         * buildbot/status/event.py: delete dead code
3791         * buildbot/process/step.py: don't import dead Event class
3792         * buildbot/process/step_twisted.py: same
3793         * buildbot/status/builder.py: same
3794         * buildbot/status/client.py: same
3796         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3798         * buildbot/changes/changes.py (Change): set .when from an __init__
3799         argument (which defaults to now()), rather than having
3800         ChangeMaster.addChange set it later.
3801         (ChangeMaster.addChange): same
3803         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3804         (parseSyncmail): same. Just use util.now() for now.
3805         (parseBonsaiMail): parse the timestamp field for when=
3807         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3808         instead of setting .when after the fact
3810 2004-09-22  slyphon
3812         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3813         results when the target project uses retrial. Still under
3814         development.
3815         * buildbot/test/test_trial.py: same
3817 2004-09-21  Brian Warner  <warner@lothar.com>
3819         * buildbot/status/mail.py (MailNotifier.__init__): include
3820         success/warnings/failure in the Subject line
3821         (MailNotifier.buildMessage): add the buildbot's URL to the body,
3822         use step.logname for the addLogs=True attachment filenames
3823         * buildbot/test/test_status.py (Mail): test Subject lines
3824         (Mail.testLogs): test attachment filenames
3826         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3827         accept a 'who' argument from the debug tool
3828         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3829         * contrib/debug.glade: add text box to set 'who'
3831         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3832         .getBuilderName with .getBuilder().getName(), more flexible
3833         (IStatusLog.getName): logs have short names, but you can prefix
3834         them with log.getStep().getName() to make them more useful
3835         * buildbot/status/builder.py: same
3836         * buildbot/status/client.py: same
3837         * buildbot/status/html.py: same
3838         * buildbot/test/test_run.py (Status.testSlave): same
3839         * buildbot/process/step.py: tweak logfile names
3841         * buildbot/status/mail.py (MailNotifier): add lookup, change
3842         argument to extraRecipients. The notifier is now aimed at sending
3843         mail to the people involved in a particular build, with additional
3844         constant recipients as a secondary function.
3846         * buildbot/test/test_status.py: add coverage for IEmailLookup,
3847         including slow-lookup and failing-lookup. Make sure the blamelist
3848         members are included.
3850         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3851         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3852         (IBuildStatus.getInterestedUsers): new method
3853         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3854         * buildbot/status/client.py (remote_getResponsibleUsers): same
3855         * buildbot/status/html.py (StatusResourceBuild.body): same
3856         * buildbot/test/test_run.py (Status.testSlave): same
3858 2004-09-20  Brian Warner  <warner@lothar.com>
3860         * docs/users.xhtml: update concepts
3862         * Makefile: add a convenience makefile, for things like 'make
3863         test'. It is not included in the source tarball.
3865 2004-09-16  Brian Warner  <warner@lothar.com>
3867         * NEWS: mention /usr/bin/buildbot, debian/*
3869         * debian/*: add preliminary debian packaging. Many thanks to
3870         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3871         it considerably since it left their hands, I am responsible for
3872         all breakage that's resulted.
3874         * bin/buildbot: create a top-level 'buildbot' command, to be
3875         installed in /usr/bin/buildbot . For now it's just a simple
3876         frontend to mktap/twistd/kill, but eventually it will be the entry
3877         point to the 'try' command and also a status client. It is also
3878         intended to support the upcoming debian-packaging init.d scripts.
3879         * buildbot/scripts/runner.py: the real work is done here
3880         * buildbot/scripts/__init__.py: need this too
3881         * buildbot/scripts/sample.cfg: this is installed in new
3882         buildmaster directories
3883         * setup.py: install new stuff
3885 2004-09-15  Brian Warner  <warner@lothar.com>
3887         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
3888         'file:' schema (the version shipped with OS-X was built without the
3889         ra_local plugin).
3890         (SetupMixin.tearDown): stop the goofy twisted.web timer which
3891         updates the log-timestamp, to make sure it isn't still running after
3892         the test finishes
3894         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
3895         values to the config file.
3896         * docs/examples/hello.cfg: add examples
3897         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
3898         * buildbot/status/builder.py (Status.getProjectURL): implement them
3899         * buildbot/master.py (BuildMaster.loadConfig): set them from config
3900         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
3901         * buildbot/status/html.py (WaterfallStatusResource): display them
3904         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
3905         certain error cases don't suffer a secondary exception.
3906         (top): Skip tests if the corresponding VC tool is not installed.
3908         * buildbot/process/factory.py (Trial): introduce separate
3909         'buildpython' and 'trialpython' lists, since trialpython=[] is
3910         what you want to invoke /usr/bin/python, whereas ./setup.py is
3911         less likely to be executable. Add env= parameter to pass options
3912         to test cases (which is how I usually write tests, I don't know if
3913         anyone else does it this way).
3915         * buildbot/process/step_twisted.py (Trial): handle python=None.
3916         Require 'testpath' be a string, not a list. Fix tests= typo.
3917         (Trial.start): sanity-check any PYTHONPATH value for stringness.
3919         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
3920         way to deal with the possibility of removing the disconnect notify
3921         twice.
3922         (CVS): add a 'login' parameter to give a password to 'cvs login',
3923         commonly used with pserver methods (where pw="" or pw="guest")
3925         * buildbot/slave/commands.py (SourceBase): move common args
3926         extraction and setup() to __init__, so everything is ready by the
3927         time setup() is called
3928         (CVS.start): call 'cvs login' if a password was supplied
3929         (ShellCommand): special-case PYTHONPATH: prepend the master's
3930         value to any existing slave-local value.
3932         * buildbot/process/builder.py (Builder.updateBigStatus): if we
3933         don't have a remote, mark the builder as Offline. This whole
3934         function should probably go away and be replaced by individual
3935         deltas.
3936         (Builder.buildFinished): return the results to the build-finished
3937         deferred callback, helps with testing
3939 2004-09-14  Brian Warner  <warner@lothar.com>
3941         * buildbot/test/test_vc.py: put all the repositories needed to run
3942         the complete tests into a single small (1.3MB) tarball, so I can
3943         make that tarball available on the buildbot web site. Test HTTP
3944         access (for Arch and Darcs) by spawning a temporary web server
3945         while the test runs.
3947         * docs/users.xhtml: new document, describe Buildbot's limited
3948         understanding of different human users
3950         * buildbot/test/test_vc.py: rearrange test cases a bit
3952         * buildbot/process/step_twisted.py (Trial): handle testpath=
3953         * buildbot/process/factory.py (Trial): update to use step.Trial
3955         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
3957         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
3958         the overall build text (which gives you 'failed 2 tests' rather
3959         than just 'failed')
3960         (BuildStepStatus.text2): default to [], not None
3962         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
3963         must be a list
3965 2004-09-12  Brian Warner  <warner@lothar.com>
3967         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
3968         log the whole exception if it's just an AttributeError (old slave)
3970         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
3971         so (e.g.) sub-commands can be run in the right directory.
3972         (ShellCommand.start): accept an optional errorMessage= argument
3973         to make life easier for SVN.start
3974         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
3975         headers
3976         (ShellCommand.start): move ['dir'] compatibility hack..
3977         (RemoteShellCommand.start): .. to here so everyone can use it
3979         * buildbot/process/step_twisted.py (Trial): use .workdir
3981         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
3982         text displayed when debuild fails completely
3983         (Trial): snarf _trial_temp/test.log from the slave and display it
3985 2004-09-11  Brian Warner  <warner@lothar.com>
3987         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
3989         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
3990         set to 'twisted', so --recurse can find twisted/web/test/*, etc
3992         * buildbot/process/step.py (ShellCommand): call .createSummary
3993         before .evaluateCommand instead of the other way around. This
3994         makes it slightly easier to count warnings and then use that to
3995         set results=WARNINGS
3996         * buildbot/process/step_twisted.py: cosmetic, swap the methods
3998         * buildbot/process/base.py (Build.buildFinished): update status
3999         before doing progress. It's embarrassing for the build to be stuck
4000         in the "building" state when an exceptions occurs elsewhere..
4002         * buildbot/status/progress.py (Expectations.expectedBuildTime):
4003         python2.2 doesn't have 'sum'
4005         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4006         to prevent clients from accidentally sorting it
4008         * buildbot/master.py (Manhole): add username/password
4009         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4010         c['manholePort'], deprecate old usage
4011         * docs/config.xhtml: document c['manhole']
4012         * docs/examples/hello.cfg: show example of using a Manhole
4015         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4016         pretend the slave is up to date
4018         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4019         the module, overlaps with 'log', the local variable
4021         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4023         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4024         new method to let Steps find out the version of their
4025         corresponding SlaveCommand.
4026         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4027         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4028         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4029         (SVN.startVC): same
4030         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4031         (Arch.startVC): same
4032         (P4Sync.startVC): same
4034         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4035         Deferred so we can catch errors in remote_startCommand
4036         (RemoteShellCommand.start): same
4038         * docs/examples/twisted_master.cfg: update sample config file
4040         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4041         after connectionMade() is called, not before. Close stdin at that
4042         point too.
4044         * buildbot/process/process_twisted.py: update to use Trial, clean
4045         up argument passing (move to argv arrays instead of string
4046         commands)
4048         * buildbot/process/step_twisted.py (Trial): new step to replace
4049         RunUnitTests, usable by any trial-using project (not just
4050         Twisted). Arguments have changed, see the docstring for details.
4052         * buildbot/process/base.py (Build.startBuild): this now returns a
4053         Deferred. Exceptions that occur during setupBuild are now
4054         caught better and lead to fewer build_status weirdnesses, like
4055         finishing a build that was never started.
4056         (Build.buildFinished): fire the Deferred instead of calling
4057         builder.buildFinished directly. The callback argument is this
4058         Build, everything else can be extracted from it, including the
4059         new build.results attribute.
4060         * buildbot/process/builder.py (Builder.startBuild): same
4061         (Builder.buildFinished): same, extract results from build
4063         * buildbot/process/step.py (ShellCommands): remove dead code
4065 2004-09-08  Brian Warner  <warner@lothar.com>
4067         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4068         doesn't try to use the leftover patched workdir
4069         (SourceStamp): test source-stamp computation for CVS and SVN
4071         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4072         patched workdir ('touch .buildbot-patched') so we don't try to
4073         update it later
4074         (SourceBase.start): add ['revision'] for all Source steps
4075         (CVS): change args: use ['branch'] for -r, remove ['files']
4076         (CVS.buildVC): fix revision/branch stuff
4077         (SVN): add revision stuff
4079         * buildbot/process/step.py (BuildStep.__init__): reject unknown
4080         kwargs (except 'workdir') to avoid silent spelling errors
4081         (ShellCommand.__init__): same
4082         (Source): new base class for CVS/SVN/etc. Factor out everything
4083         common, add revision computation (perform the checkout with a -D
4084         DATE or -r REVISION that gets exactly the sources described by the
4085         last Change), overridable with step.alwaysUseLatest. Add patch
4086         handling (build.getSourceStamp can trigger the use of a base
4087         revision and a patch).
4088         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4089         * docs/steps.xhtml: update docs
4090         * docs/source.xhtml: mention .checkoutDelay
4091         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4093         * buildbot/process/base.py (Build.setSourceStamp): add a
4094         .sourceStamp attribute to each Build. If set, this indicates that
4095         the build should be done with something other than the most
4096         recent source tree. This will be used to implement "try" builds.
4097         (Build.allChanges): new support method
4098         (Build.lastChangeTime): remove, functionality moved to Source steps
4099         (Build.setupBuild): copy the Step args before adding ['workdir'],
4100         to avoid modifying the BuildFactory (and thus triggering spurious
4101         config changes)
4104         * buildbot/status/html.py: rename s/commits/changes/
4105         (StatusResourceChanges): same
4106         (CommitBox.getBox): same, update URL
4107         (WaterfallStatusResource): same
4108         (StatusResource.getChild): same
4110         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4111         * contrib/debug.glade: add optional 'revision' to the fakeChange
4113         * buildbot/changes/changes.py (html_tmpl): display .revision
4114         (ChangeMaster.addChange): note .revision in log
4115         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4116         accept a ['revision'] attribute
4118         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4120         * buildbot/master.py (BotMaster.getPerspective): update the
4121         .connected flag in SlaveStatus when it connects
4122         (BotMaster.detach): and when it disconnects
4123         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4124         (BuildMaster.loadConfig_Builders): walk old list correctly
4126         * buildbot/test/test_config.py: fix prefix= usage
4128 2004-09-06  Brian Warner  <warner@lothar.com>
4130         * NEWS: mention P4
4132         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4133         poll a P4 depot looking for recent changes. Thanks to Dave
4134         Peticolas for the contribution. Probably needs some testing after
4135         I mangled it.
4137         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4138         requires manual client setup for each buildslave. Rather
4139         experimental. Thanks again to Dave Peticolas.
4140         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4142         * buildbot/changes/changes.py (Change): add a .revision attribute,
4143         which will eventually be used to generate source-stamp values.
4145         * buildbot/process/step.py (RemoteCommand.start): use
4146         notifyOnDisconnect to notice when we lose the slave, then treat it
4147         like an exception. This allows LogFiles to be closed and the build
4148         to be wrapped up normally. Be sure to remove the disconnect
4149         notification when the step completes so we don't accumulate a
4150         bazillion such notifications which will fire weeks later (when the
4151         slave finally disconnects normally). Fixes SF#915807, thanks to
4152         spiv (Andrew Bennetts) for the report.
4153         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4154         really isn't Logged- specific
4155         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4156         header, since it's almost always going to be appended to an
4157         incomplete line
4158         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4159         update test to handle use of notifyOnDisconnect
4161         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4162         don't clear .ETA and .currentBuild when going offline, let the
4163         current build clean up after itself
4165         * buildbot/process/builder.py (Builder.detached): wait a moment
4166         before doing things like stopping the current build, because the
4167         current step will probably notice the disconnect and cleanup the
4168         build by itself
4169         * buildbot/test/test_run.py (Status.tearDown): update test to
4170         handle asynchronous build-detachment
4172         * buildbot/process/base.py (Build.stopBuild): minor shuffles
4174         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4175         hush a debug message
4177 2004-09-05  Brian Warner  <warner@lothar.com>
4179         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4180         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4181         kernels do this: the fcntl module has the F_NOTIFY constant, but
4182         the kernel itself doesn't support the operation. Thanks to Olly
4183         Betts for spotting the problem.
4185         * buildbot/process/step.py (Darcs): new source-checkout command
4186         (Arch): new source-checkout command
4187         (todo_P4): fix constructor syntax, still just a placeholder
4188         * buildbot/test/test_vc.py (VC.testDarcs): test it
4189         (VC.testDarcsHTTP): same, via localhost HTTP
4190         (VC.testArch): same
4191         (VC.testArchHTTP): same
4192         * NEWS: mention new features
4194         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4195         which tells the step to stash stdout text locally (in .stdout).
4196         Slave-side Commands can use this to make decisions based upon the
4197         output of the the ShellCommand (not just the exit code).
4198         (Darcs): New source-checkout command
4199         (Arch): New source-checkout command, uses .keepStdout in one place
4200         where it needs to discover the archive's default name.
4202         * docs/steps.xhtml: Document options taken by Darcs and Arch.
4203         * docs/source.xhtml: add brief descriptions of Darcs and Arch
4204         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4206         * buildbot/process/step.py (ShellCommand.describe): add an
4207         alternate .descriptionDone attribute which provides descriptive
4208         text when the step is complete. .description can be ["compiling"],
4209         for use while the step is running, then .descriptionDone can be
4210         ["compile"], used alone when the step succeeds or with "failed" when
4211         it does not. Updated other steps to use the new text.
4212         * buildbot/process/step_twisted.py: same
4213         * buildbot/test/test_run.py: update tests to match
4215 2004-08-30  Brian Warner  <warner@lothar.com>
4217         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4218         (CVS.__init__): send 'patch' argument to slave
4219         (CVS.start): don't create the LoggedRemoteCommand until start(),
4220         so we can catch a .patch added after __init__
4221         (SVN.__init__): add 'patch' to SVN too
4222         (SVN.start): same
4224         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4225         argument, to let commands push data into the process' stdin pipe.
4226         Move usePTY to a per-instance attribute, and clear it if 'stdin'
4227         is in use, since closing a PTY doesn't really affect the process
4228         in the right way (in particular, I couldn't run /usr/bin/patch
4229         under a pty).
4230         (SourceBase.doPatch): handle 'patch' argument
4232         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4233         both CVS and SVN
4235         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4236         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4237         versions to master
4238         * buildbot/master.py (BotPerspective.got_commands): get command
4239         versions from slave, give to each builder
4240         * buildbot/process/builder.py (Builder.attached): stash slave
4241         command versions in .remoteCommands
4243         * docs/steps.xhtml: bring docs in-line with reality
4245         * buildbot/process/step.py (CVS.__init__): more brutal
4246         compatibility code removal
4247         (SVN.__init__): same
4249         * buildbot/slave/commands.py (SlaveShellCommand): update docs
4250         (SlaveShellCommand.start): require ['workdir'] argument, remove
4251         the ['dir'] fallback (compatibility will come later)
4252         (SourceBase): update docs
4253         (SourceBase.start): remove ['directory'] fallback
4254         (CVS): update docs
4255         (SVN): update docs
4256         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4257         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4258         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4260         * buildbot/process/step.py (RemoteShellCommand.__init__): add
4261         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4262         code.. I will figure out 0.5.0-compatibility hooks later)
4264 2004-08-30  Brian Warner  <warner@lothar.com>
4266         * buildbot/process/process_twisted.py: rewrite in terms of new
4267         BuildFactory base class. It got significantly shorter. Yay
4268         negative code days.
4270         * buildbot/process/step_twisted.py (HLint.start): fix to make it
4271         work with the new "self.build isn't nailed down until we call
4272         step.start()" scheme: specifically, __init__ is called before the
4273         build has decided on which Changes are going in, so we don't scan
4274         build.allFiles() for .xhtml files until start()
4275         (HLint.commandComplete): use getText(), not getStdout()
4276         (RunUnitTests.start): same: don't use .build until start()
4277         (RunUnitTests.describe): oops, don't report (None) when using
4278         the default reactor
4279         (RunUnitTests.commandComplete): use getText()
4280         (RunUnitTests.createSummary): same
4281         (BuildDebs.commandComplete): same
4283         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4284         set args['command'] until start(), since our BuildStep is allowed
4285         to change their mind up until that point
4286         (TreeSize.commandComplete): use getText(), not getStdout()
4288         * docs/examples/twisted_master.cfg: update to current standards
4290         * docs/factories.xhtml: update
4291         * buildbot/process/factory.py: implement all the common factories
4292         described in the docs. The Trial factory doesn't work yet, and
4293         I've probably broken all the process_twisted.py factories in the
4294         process. There are compatibility classes left in for things like
4295         the old BasicBuildFactory, but subclasses of them are unlikely to
4296         work.
4297         * docs/examples/glib_master.cfg: use new BuildFactories
4298         * docs/examples/hello.cfg: same
4300         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4301         explicit 'workdir' args
4303         * buildbot/process/base.py (BuildFactory): move factories to ..
4304         * buildbot/process/factory.py (BuildFactory): .. here
4305         * buildbot/process/process_twisted.py: handle move
4306         * buildbot/test/test_config.py: same
4307         * buildbot/test/test_run.py: same
4308         * buildbot/test/test_steps.py: same
4309         * buildbot/test/test_vc.py: same
4310         * docs/factories.xhtml: same
4312         * NEWS: mention config changes that require updating master.cfg
4314         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4315         argument to all steps that weren't given one already, pointing at
4316         the "build/" directory.
4318         * docs/examples/hello.cfg: remove explicit 'workdir' args
4320         * docs/factories.xhtml: document standard BuildFactory clases,
4321         including a bunch which are have not yet been written
4323 2004-08-29  Brian Warner  <warner@lothar.com>
4325         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4326         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4327         buildbot.status.builder so they aren't quite so internal
4328         * buildbot/process/base.py, buildbot/process/builder.py: same
4329         * buildbot/process/maxq.py, buildbot/process/step.py: same
4330         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4331         * buildbot/status/mail.py, buildbot/test/test_run.py: same
4332         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4334         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4335         to handle new getLogs()-returns-list behavior
4336         (StatusResourceBuildStep.getChild): same
4337         (StepBox.getBox): same
4338         (WaterfallStatusResource.phase0): same
4340         * docs/source.xhtml: document how Buildbot uses version-control
4341         systems (output side: how we get source trees)
4342         * docs/changes.xhtml: rename from sources.xhtml, documents VC
4343         systems (input side: how we learn about Changes)
4345         * buildbot/master.py (Manhole): use ComparableMixin
4346         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4347         * buildbot/changes/mail.py (MaildirSource): same
4348         * buildbot/status/client.py (PBListener): same
4349         * buildbot/status/html.py (Waterfall): same
4350         * buildbot/status/words.py (IRC): same
4352         * NEWS: start describing new features
4354         * buildbot/status/mail.py (MailNotifier): finish implementation.
4355         The message body is still a bit sparse.
4356         * buildbot/test/test_status.py (Mail): test it
4358         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4359         and __hash__ methods I wind up adding everywhere. Specifically
4360         intended to support the buildbot config-file update scheme where
4361         we compare, say, the old list of IStatusTargets against the new
4362         one and don't touch something which shows up on both lists.
4363         * buildbot/test/test_util.py (Compare): test case for it
4365         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4366         return a list instead of a dict
4367         (IBuildStepStatus.getLogs): same. The idea is that steps create
4368         logs with vaguely unique names (although their uniqueness is not
4369         guaranteed). Thus a compilation step should create its sole
4370         logfile with the name 'compile', and contribute it to the
4371         BuildStatus. If a step has two logfiles, try to create them with
4372         different names (like 'test.log' and 'test.summary'), and only
4373         contribute the important ones to the overall BuildStatus.
4374         * buildbot/status/builder.py (Event.getLogs): same
4375         (BuildStepStatus): fix default .text and .results
4376         (BuildStepStatus.addLog): switch to list-like .getLogs()
4377         (BuildStepStatus.stepFinished): same
4378         (BuildStatus.text): fix default .text
4379         (BuildStatus.getLogs): temporary hack to return all logs (from all
4380         child BuildStepStatus objects). Needs to be fixed to only report
4381         the significant ones (as contributed by the steps themselves)
4382         * buildbot/test/test_run.py: handle list-like .getLogs()
4383         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4385 2004-08-28  Brian Warner  <warner@lothar.com>
4387         * buildbot/process/builder.py (Builder.attached): serialize the
4388         attachment process, so the attach-watcher isn't called until the
4389         slave is really available. Add detached watchers too, which makes
4390         testing easier.
4392         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4394         * buildbot/test/test_swap.py: remove dead code
4396         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4397         (ShellCommand.start): treat errors in _startCommand/spawnProcess
4398         sort of as if the command being run exited with a -1. There may
4399         still be some holes in this scheme.
4400         (CVSCommand): add 'revision' tag to the VC commands, make sure the
4401         -r option appears before the module list
4402         * buildbot/process/step.py (CVS): add 'revision' argument
4404         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4405         when sending updates or stepComplete messages to the master, since
4406         we don't currently care whether they arrive or not. When we revamp
4407         the master/slave protocol to really resume interrupted builds,
4408         this will need revisiting.
4409         (lostRemote): remove spurious print
4411         * buildbot/master.py (BotPerspective.attached): serialize the
4412         new-builder interrogation process, to make testing easier
4413         (BotMaster.waitUntilBuilderDetached): convenience function
4415         * buildbot/status/builder.py (BuilderStatus): prune old builds
4416         (BuildStatus.pruneSteps): .. and steps
4417         (BuildStepStatus.pruneLogs): .. and logs
4418         (BuilderStatus.getBuild): handle missing builds
4419         * buildbot/status/html.py (StatusResourceBuild.body): display build
4420         status in the per-build page
4421         (BuildBox.getBox): color finished builds in the per-build box
4423 2004-08-27  Brian Warner  <warner@lothar.com>
4425         * buildbot/status/mail.py (MailNotifier): new notification class,
4426         not yet finished
4428         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4429         variants of a common base class which handles all the mode= logic
4431         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4432         convenience method
4433         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4435 2004-08-26  Brian Warner  <warner@lothar.com>
4437         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4438         interfaces
4440         * buildbot/test/test_run.py: update to new Logfile interface, new
4441         buildbot.slave modules
4442         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4444         * MANIFEST.in: new sample config file
4445         * docs/examples/hello.cfg: same
4447         * buildbot/process/step_twisted.py: remove dead import
4449         * buildbot/process/step.py (RemoteCommand.run): catch errors
4450         during .start
4451         (RemoteCommand.remote_update): ignore updates that arrive after
4452         we've shut down
4453         (RemoteCommand.remote_complete): ignore duplicate complete msgs
4454         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4455         the responsibilities of the subclass's methods
4456         (BuildStep.failed): catch errors during failure processing
4457         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4458         (CVS): move to a mode= argument (described in docstring), rather
4459         than the ungainly clobber=/export=/copydir= combination.
4460         (SVN): add mode= functionality to SVN too
4461         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4463         * buildbot/process/base.py (Build.startNextStep): catch errors
4464         during s.startStep()
4466         * buildbot/clients/base.py: update to new PB client interface.
4467         gtkPanes is still broken
4469         * buildbot/bot.py, buildbot/slavecommand.py: move to..
4470         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4471         * setup.py: add buildbot.slave module
4472         * buildbot/bb_tap.py: handle move
4473         * buildbot/slave/registry.py: place to register commands, w/versions
4474         * buildbot/slave/bot.py: major simplifications
4475         (SlaveBuilder.remote_startCommand): use registry for slave commands,
4476         instead of a fixed table. Eventually this will make the slave more
4477         extensible. Use 'start' method on the command, not .startCommand.
4478         Fix unsafeTracebacks handling (I think).
4479         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4480         helper class with a .start method that returns a Deferred.
4481         SlaveShellCommand is the form reached by the buildmaster. Commands
4482         which use multiple ShellCommands can just chain them as Deferreds,
4483         with some helper methods in Command (_abandonOnFailure and
4484         _checkAbandoned) to bail on rc!=0.
4485         (CVSCommand): prefer new mode= argument
4486         (SVNFetch): add mode= argument
4488         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4489         put a useful reason string on the build
4491         * buildbot/status/builder.py (LogFile): do LogFile right: move the
4492         core functionality into an IStatusLog object
4493         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4494         * buildbot/status/html.py (TextLog): HTML-rendering goes here
4495         (StatusResourceBuild.body): use proper accessor methods
4496         * buildbot/status/client.py (RemoteLog): PB-access goes here
4497         (StatusClientPerspective.perspective_subscribe): add "full" mode,
4498         which delivers log contents too
4499         (PBListener.__cmp__): make PBListeners comparable, thus removeable
4500         * buildbot/status/event.py: remove old Logfile completely
4502         * buildbot/interfaces.py (IStatusLog.subscribe): make the
4503         subscription interface for IStatusLog subscriptions just like all
4504         other the status subscriptions
4505         (IStatusReceiver.logChunk): method called on subscribers
4507 2004-08-24  Brian Warner  <warner@lothar.com>
4509         * buildbot/process/builder.py (Builder._pong): oops, ping response
4510         includes a result (the implicit None returned by remote_print).
4511         Accept it so the _pong method handles the response correctly.
4513 2004-08-06  Brian Warner  <warner@lothar.com>
4515         * buildbot/test/test_config.py: update IRC, PBListener tests
4517         * buildbot/status/client.py (StatusClientPerspective): total
4518         rewrite to match new IStatus interfaces. New subscription scheme.
4519         There are still a few optimizations to make (sending down extra
4520         information with event messages so the client doesn't have to do a
4521         round trip). The logfile-retrieval code is probably still broken.
4522         Moved the PB service into its own port, you can no longer share a
4523         TCP socket between a PBListener and, say, the slaveport (this
4524         should be fixed eventually).
4525         * buildbot/clients/base.py (Client): revamp to match. still needs
4526         a lot of work, but basic event reporting works fine. gtkPanes is
4527         completely broken.
4529         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4530         instance talks to a single irc server. Threw out all the old
4531         multi-server handling code. Still need to add back in
4532         builder-control (i.e. "force build")
4534         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4535         more random text to the as-yet-unreachable per-step page
4537         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4538         rename to stepETAUpdate
4539         (BuildStatus.subscribe): add build-wide ETA updates
4540         (BuilderStatus.getState): remove more cruft
4541         (BuilderStatus.getCurrentBuild): remove more cruft
4542         (BuilderStatus.buildStarted): really handle tuple-subscription
4543         * buildbot/test/test_run.py (Status.testSlave): handle the
4544         stepETAUpdate rename
4546         * buildbot/master.py (BuildMaster): don't add a default
4547         StatusClientService. Don't add a default IrcStatusFactory. Both
4548         are now added through c['status'] in the config file. c['irc'] is
4549         accepted for backwards compatibility, the only quirk is you cannot
4550         use c['irc'] to specify IRC servers on ports other than 6667.
4552         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4553         (IStatusReceiver.buildStarted): allow update-interval on subscribe
4554         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4555         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4558         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4559         the buildmaster to re-read its config file
4562         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4563         find out the port our server is running on
4564         (WebTest.test_webPathname_port): same
4566         * buildbot/test/test_config.py (testWebPortnum): test it
4567         (testWebPathname): ditto
4569         * docs/config.xhtml: document new c['status'] configuration option
4571         * buildbot/status/html.py (Waterfall): new top-level class which
4572         can be added to c['status']. This creates the Site as well as the
4573         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4574         reachable as .parent, for everything.
4576         * buildbot/master.py (Manhole): make it a normal service Child
4577         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4578         webPathname. It will eventually replace c['irc'] and the implicit
4579         PB listener as well. c['webPortnum'] and c['webPathname'] are left
4580         in as (deprecated) backward compatibility hooks for now.
4583         * buildbot/process/builder.py (Builder.buildFinished): don't
4584         inform out builder_status about a finished build, as it finds out
4585         through its child BuildStatus object
4587         * buildbot/status/html.py: extensive revamp. Use adapters to make
4588         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4589         have both starting and finishing times and adjust the waterfall
4590         display accordingly, using spacers if necessary. Use SlaveStatus
4591         to get buildslave info.
4592         (StatusResourceBuildStep): new just-one-step resource, used to get
4593         logfiles. No actual href to it yet.
4595         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4596         the time being, until I get the file-naming scheme right
4598         * buildbot/status/builder.py (Event): clean started/finished names
4599         (BuildStatus.isFinished): .finished is not None is the right test
4600         (BuildStatus.buildStarted): track started/finished times ourselves
4601         (BuilderStatus.getSlave): provide access to SlaveStatus object
4602         (BuilderStatus.getLastFinishedBuild): all builds are now in
4603         .builds, even the currently-running one. Accomodate this change.
4604         (BuilderStatus.eventGenerator): new per-builder event generator.
4605         Returns BuildStepStatus and BuildStatus objects, since they can
4606         both be adapted as necessary.
4607         (BuilderStatus.addEvent): clean up started/finished attributes
4608         (BuilderStatus.startBuild,finishBuild): remove dead code
4609         (SlaveStatus): new object to provide ISlaveStatus
4611         * buildbot/process/step.py (ShellCommand.getColor): actually
4612         return the color instead of setting it ourselves
4613         (CVS.__init__): pull .timeout and .workdir options out of
4614         **kwargs, since BuildStep will ignore them. Without this neither
4615         will be sent to the slave correctly.
4616         (SVN.__init__): same
4618         * buildbot/process/builder.py (Builder): move flags to class-level
4619         attributes
4620         (Builder.attached): remove .remoteInfo, let the BotPerspective and
4621         SlaveStatus handle that
4623         * buildbot/process/base.py (Build.firstEvent): remove dead code
4624         (Build.stopBuild): bugfix
4626         * buildbot/changes/pb.py (PBChangeSource.describe): add method
4628         * buildbot/changes/changes.py (Change): add IStatusEvent methods
4629         (ChangeMaster.eventGenerator): yield Changes, since there are now
4630         Adapters to turn them into HTML boxes
4632         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4633         (BotPerspective.attached): feed a SlaveStatus object
4634         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4635         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4637         * buildbot/interfaces.py: API additions
4638         (ISlaveStatus): place to get slave status
4640 2004-08-04  Brian Warner  <warner@lothar.com>
4642         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4643         the delay finishes, so the step is marked as SUCCESS
4645         * buildbot/test/test_run.py (Status.testSlave): cover more of
4646         IBuildStatus and IBuildStepStatus
4648         * buildbot/status/progress.py (StepProgress): move some flags to
4649         class-level attributes
4650         (StepProgress.remaining): if there are no other progress metrics
4651         to go by, fall back to elapsed time
4652         (StepProgress.setExpectations): take a dict of metrics instead of
4653         a list
4654         (BuildProgress.setExpectationsFrom): pull expectations from the
4655         Expectations, instead of having it push them to the BuildProgress
4656         (Expectations): move some flags to class-level attributes
4657         (Expectations.__init__): copy per-step times from the
4658         BuildProgress too
4659         (Expectations.expectedBuildTime): new method for per-build ETA
4661         * buildbot/status/event.py (Logfile): move some flags to
4662         class-level attributes
4663         (Logfile.logProgressTo): better method name, let step set the
4664         progress axis name (instead of always being "output")
4666         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4667         times directly, rather than depending upon the (possibly missing)
4668         .progress object. Use 'None' to indicate "not started/finished
4669         yet"
4670         (BuildStepStatus.getExpectations): oops, return the full list of
4671         expectations
4672         (BuilderStatus._buildFinished): append finished builds to .builds
4674         * buildbot/process/step.py (BuildStep): add separate .useProgress
4675         flag, since empty .progressMetrics[] still implies that time is a
4676         useful predictor
4677         (CVS): set up the cmd in __init__, instead of waiting for start()
4679         * buildbot/process/base.py (Build.startBuild): disable the 'when'
4680         calculation, this will eventually turn into a proper sourceStamp
4681         (Build.setupBuild): tell the Progress to load from the Expectations,
4682         instead of having the Expectations stuff things into the Progress
4683         (Build.buildException): add a build-level errback to make sure the
4684         build's Deferred fires even in case of exceptions
4686         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4687         the forced build
4688         * buildbot/process/builder.py (Builder.forceBuild): convey the
4689         reason instead of creating a fake Change
4691         * docs/examples/twisted_master.cfg: update to match reality
4693         * buildbot/test/test_config.py, buildbot/test/test_process.py:
4694         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4695         fix or remove broken/breaking tests
4697         * buildbot/status/event.py (Logfile.__len__): remove evil method
4699         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4700         missing .build, for test convenience
4702         * buildbot/process/step_twisted.py: import fixes
4704         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4706         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4707         .statusbag reference
4709         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4710         connection at shutdown, and stop it from reconnecting
4712         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4713         chase down remote-execution bugs
4715         * buildbot/process/step.py: more fixes, remove
4716         BuildStep.setStatus()
4717         * buildbot/status/builder.py: move setStatus() functionality into
4718         BuildStatus.addStep
4719         * buildbot/status/event.py: minor fixes
4721 2004-08-03  Brian Warner  <warner@lothar.com>
4723         * buildbot/process/base.py, buildbot/process/builder.py
4724         * buildbot/process/step.py, buildbot/status/builder.py
4725         * buildbot/status/event.py, buildbot/test/test_run.py:
4726         fix status delivery, get a basic test case working
4727         * buildbot/master.py: finish implementing basic status delivery,
4728         temporarily disable HTML/IRC/PB status sources
4730         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4732         * buildbot/status/progress.py (BuildProgress): remove dead code
4734         * buildbot/interfaces.py
4735         * buildbot/process/base.py, buildbot/process/builder.py
4736         * buildbot/process/step.py, buildbot/process/step_twisted.py
4737         * buildbot/status/builder.py: Complete overhaul of the all
4738         status-delivery code, unifying all types of status clients (HTML,
4739         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4740         look like. This commit is a checkpointing of the work-in-progress:
4741         the input side is mostly done (Builders/Builds sending status
4742         to the BuilderStatus/BuildStatus objects), but the output side has
4743         not yet been started (HTML resources querying BuilderStatus
4744         objects). Things are probably very broken right now and may remain
4745         so for several weeks, I apologize for the disruption.
4747         * buildbot/status/event.py: add a setHTML method to use pre-rendered
4748         HTML as the log's contents. Currently used for exception tracebacks.
4749         * buildbot/status/progress.py: minor spelling changes
4751 2004-08-02  Brian Warner  <warner@lothar.com>
4753         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4754         in mozilla. Also added stylesheets copied from Twisted's docs.
4755         Remember that these files are meant to be run through Lore first.
4756         Thanks to Philipp Frauenfelder for the fixes.
4757         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4758         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4759         * docs/template.tpl: added a Lore template
4761 2004-07-29  Brian Warner  <warner@lothar.com>
4763         * buildbot/interfaces.py: revamp status delivery. This is the
4764         preview: these are the Interfaces that will be provided by new
4765         Builder code, and to which the current HTML/IRC/PB status
4766         displayers will be adapted.
4768         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4769         on the SlaveBuilder, not the Bot.
4770         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4771         SlaveBuilder.usePTY
4772         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4773         set .usePTY on the FakeSlaveBuilder
4775 2004-07-25  Brian Warner  <warner@lothar.com>
4777         * buildbot/changes/freshcvs.py: add some debug log messages
4778         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4779         disabled 'setFilter' syntax
4780         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4781         don't end with a slash
4783         * buildbot/process/base.py (Builder._pong_failed): add TODO note
4785         * setup.py: bump to 0.5.0+ while between releases
4787 2004-07-23  Brian Warner  <warner@lothar.com>
4789         * setup.py (version): Releasing buildbot-0.5.0
4791 2004-07-23  Brian Warner  <warner@lothar.com>
4793         * README: update for 0.5.0 release
4795         * NEWS: update for 0.5.0 release
4797 2004-07-22  Brian Warner  <warner@lothar.com>
4799         * buildbot/slavecommand.py (ShellCommand): make usePTY a
4800         mktap-time configuration flag (--usepty=1, --usepty=0)
4801         * buildbot/bot.py: same
4803         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4804         an 'info' directory being unwanted
4806         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4807         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4808         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4809         and earlier), use a FreshCVSSourceOldcred instead.
4810         (test): simple test routine: connect to server, print changes
4812         * buildbot/changes/changes.py (Change.getTime): make it possible
4813         to print un-timestamped changes
4815         * buildbot/master.py (makeApp): delete ancient dead code
4816         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4817         * buildbot/test/test_config.py (testFindConfigFile): test it
4819         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4820         instead of win32 one
4823         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4824         now takes a dictionary instead of a tuple. See docs/config.xhtml for
4825         details.
4827         * buildbot/process/base.py (Builder.__init__): change constructor
4828         to accept a dictionary of config data, rather than discrete
4829         name/slave/builddir/factory arguments
4831         * docs/examples/twisted_master.cfg: update to new syntax
4832         * docs/examples/glib_master.cfg: same
4833         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4834         rough tests of the new syntax
4836         
4837         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4838         to be an int, which means "run a web.distrib sub-server on a TCP
4839         port". This lets you publish the buildbot status page to a remote
4840         twisted.web server (using distrib.ResourceSubscription). Also
4841         rename the local attributes used to hold these web things so
4842         they're more in touch with reality.
4843         * buildbot/test/test_web.py: test webPortnum and webPathname
4844         * docs/config.xhtml: document this new use of webPathname
4846         * docs/config.xhtml: new document, slightly ahead of reality
4847         
4848         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4849         'prefix' handling: treat it as a simple string to check with
4850         .startswith, instead of treating it as a directory. This allows
4851         sub-directories to be used. If you use prefix=, you should give it
4852         a string that starts just below the CVSROOT and ends with a slash.
4853         This prefix will be stripped from all filenames, and filenames
4854         which do not start with it will be ignored.
4856 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
4858         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4859         and --exclude (inverse of --include).  SVN post-commit hooks
4860         now have total control over which changes get sent to buildbot and which
4861         do not.
4863 2004-07-10  Brian Warner  <warner@lothar.com>
4865         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4866         test case to match new API
4868         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4869         which crashed HTML display when self.entries=[] (needed to
4870         distinguish between [], which means "no entries yet", and None,
4871         which means "the entries have been swapped out to disk, go fetch
4872         them").
4874 2004-07-04  Brian Warner  <warner@lothar.com>
4876         * buildbot/process/step_twisted.py (countFailedTests): Count
4877         skips, expectedFailures, and unexpectedSuccesses. Start scanning
4878         10kb from the end because any import errors are wedged there and
4879         they would make us think the test log was unparseable.
4880         (RunUnitTests.finishStatus): add skip/todo counts to the event box
4882 2004-06-26  Brian Warner  <warner@lothar.com>
4884         * buildbot/process/step_twisted.py (RemovePYCs): turn the
4885         delete-*.pyc command into an actual BuildStep, so we can label it
4886         nicely
4887         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4888         (FullTwistedBuildFactory): same
4890 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
4892         * contrib/fakechange.py: Add an errback when sending the fake 
4893         change, so we know it didn't work.
4895 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
4897         * buildbot/process/step_twisted.py: Delete *.pyc files before
4898         calling trial, so it doesn't catch any old .pyc files whose .py
4899         files have been moved or deleted.
4901         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
4902         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
4903         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
4904         instead of ["twisted.test"], so that the end result is "trial -R
4905         twisted".
4907         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
4908         regular expression to match filenames that should be ignored when
4909         changed. Also add a --revision parameter that specifies the
4910         revision to examine, which is useful for debugging.
4912 2004-06-25  Brian Warner  <warner@lothar.com>
4914         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
4915         summary of warnings (like DeprecationWarnings), next to the
4916         "summary" file
4918 2004-05-13  Brian Warner  <warner@lothar.com>
4920         * docs/examples/twisted_master.cfg: enable the win32 builder, as
4921         we now have a w32 build slave courtesy of Mike Taylor.
4923         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
4924         so broken. Fixed a race condition that tripped up interlocked
4925         builds and caused the status to be stuck at "Interlocked" forever.
4926         The twisted buildbot's one interlocked build just so happened to
4927         never hit this case until recently (the feeding builds both pass
4928         before the interlocked build is attempted.. usually it has to wait
4929         a while).
4930         (Builder._pong_failed): fix method signature
4932         * setup.py: bump to 0.4.3+ while between releases
4934 2004-04-30  Brian Warner  <warner@lothar.com>
4936         * setup.py (version): Releasing buildbot-0.4.3
4938 2004-04-30  Brian Warner  <warner@lothar.com>
4940         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
4942         * README: update for 0.4.3 release
4944         * NEWS: update for 0.4.3 release
4946         * buildbot/master.py (BuildMaster.__getstate__): make sure
4947         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
4949         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
4950         .trial as a class attribute, for upgrade from 0.4.2
4952         * buildbot/changes/changes.py (Change.links): add .links for
4953         upgrade from 0.4.2
4955         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
4956         .textWatchers and .htmlWatchers at save time, since they are both
4957         volatile, should allow smooth 0.4.2 upgrade
4959         * buildbot/process/step.py (CVS.finishStatus): catch failed
4960         CVS/SVN commands so we can make the status box red
4962 2004-04-29  Brian Warner  <warner@lothar.com>
4964         * buildbot/changes/freshcvs.py
4965         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
4966         code to do setFilter(), which tells the freshcvs daemon to not
4967         send us stuff that we're not interested in. I will uncomment it
4968         when a new version of CVSToys is available in which setFilter()
4969         actually works, and I get a chance to test it better.
4971         * docs/examples/twisted_master.cfg: start using a PBChangeSource
4973         * buildbot/master.py (Dispatcher): use a registration scheme
4974         instead of hardwired service names
4975         (BuildMaster): keep track of the Dispatcher to support
4976         registration
4978         * buildbot/changes/changes.py (ChangeMaster): create a distinct
4979         PBChangeSource class instead of having it be an undocumented
4980         internal feature of the ChangeMaster. Split out the code into a
4981         new file.
4982         * buildbot/changes/pb.py (PBChangeSource): same
4983         * buildbot/test/test_changes.py: a few tests for PBChangeSource
4985         * docs/{factories|sources|steps}.xhtml: document some pieces
4987         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
4988         using FCMaildirSource
4989         (f23osx): update OS-X builder to use python2.3, since the slave
4990         was updated to Panther (10.3.3)
4992 2004-03-21  Brian Warner  <warner@lothar.com>
4994         * buildbot/process/process_twisted.py: factor out doCheckout, change
4995         to use SVN instead of CVS
4997         * buildbot/process/base.py (BasicBuildFactory): refactor to make
4998         an SVN subclass easier
4999         (BasicSVN): subclass which uses Subversion instead of CVS
5001 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
5003         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5004         of /bin/sh on win32
5005         (CVSCommand.cvsComplete): don't assume chdir worked on win32
5007 2004-02-25  Brian Warner  <warner@lothar.com>
5009         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5010         is now either a list (which is passed to spawnProcess directly) or
5011         a string (which gets passed to /bin/sh -c). This removes the useSH
5012         flag and the ArgslistCommand class. Also send status header at the
5013         start and end of each command, instead of having the master-side
5014         code do that.
5015         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5016         -r'. Update to use list-based arguments.
5017         (SVNFetch): use list-based arguments, use ['dir'] argument to
5018         simplify code.
5019         * buildbot/test/test_steps.py (Commands): match changes
5021         * buildbot/process/step.py (InternalShellCommand.words): handle
5022         command lists
5023         (SVN): inherit from CVS, cleanup
5025         * buildbot/status/event.py (Logfile.content): render in HTML, with
5026         stderr in red and headers (like the name of the command we're
5027         about to run) in blue. Add link to a second URL (url + "?text=1")
5028         to get just stdout/stderr in text/plain without markup. There is
5029         still a problem with .entries=None causing a crash, it seems to occur
5030         when the logfile is read before it is finished.
5032         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5033         timeout to the keepalives, and use it to explicitly do a
5034         loseConnection instead of waiting for TCP to notice the loss. This
5035         ought to clear up the silent-lossage problem.
5036         (unsafeTracebacks): pass exception tracebacks back to the master,
5037         makes it much easier to debug problems
5039 2004-02-23  Brian Warner  <warner@lothar.com>
5041         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5042         the whole command to /bin/sh instead of execve [Johan Dahlin]
5043         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5044         '-r HEAD' [Johan Dahlin]
5045         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5047         * buildbot/changes/changes.py (Change): add links= argument, add
5048         asHTML method [Johan Dahlin]. Modified to make a bit more
5049         XHTMLish. Still not sure how to best use links= .
5051         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
5052         Change.asHTML to display the change, not asText
5054         * buildbot/status/html.py (StatusResourceBuilder): web button to
5055         ping slave
5057         * buildbot/test/test_run.py: test to actually start a buildmaster
5058         and poke at it
5060         * MANIFEST.in: bring back accidentally-dropped test helper files
5062         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5063         that require cvstoys if it is not installed
5065         * buildbot/process/step_twisted.py (RunUnitTests): allow other
5066         values of "bin/trial" [Dave Peticolas]
5067         (RunUnitTests.finishStatus): say "no tests run" instead of "0
5068         tests passed" when we didn't happen to run any tests
5070         * buildbot/process/step.py (Compile): use haltOnFailure instead of
5071         flunkOnFailure [Johan Dahlin]
5073         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5074         multiple instances of the same Step class by suffixing "_2", etc,
5075         to the name until it is unique. This name needs to be unique
5076         because it is used as a key in the dictionary that tracks build
5077         progress.
5078         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5079         add test for it
5081         * buildbot/process/base.py (Builder.ping): add "ping slave" command
5083 2004-01-14  Brian Warner  <warner@lothar.com>
5085         * buildbot/status/words.py (IrcStatusBot): when we leave or get
5086         kicked from a channel, log it
5088         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5089         something over whatever IRC channels the buildmaster is currently
5090         connected to. Added to try and track down a problem in which the
5091         master thinks it is still connected but the IRCd doesn't see it. I
5092         used a styles.Versioned this time, so hopefully users won't have
5093         to rebuild their .tap files this time.
5094         * contrib/debug.glade: add a "Poke IRC" button
5095         * contrib/debugclient.py: same
5097         * setup.py: bump to 0.4.2+ while between releases
5099 2004-01-08  Brian Warner  <warner@lothar.com>
5101         * setup.py (version): Releasing buildbot-0.4.2
5103 2004-01-08  Brian Warner  <warner@lothar.com>
5105         * NEWS: update for 0.4.2 release
5107         * README: document how to run the tests, now that they all pass
5109         * buildbot/changes/maildir.py (Maildir.poll): minor comment
5111         * buildbot/process/step.py (CVS): add a global_options= argument,
5112         which lets you set CVS global options for the command like "-r"
5113         for read-only checkout, or "-R" to avoid writing in the
5114         repository.
5115         * buildbot/slavecommand.py (CVSCommand): same
5117         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5118         testing easier (it is turned off when testing, to avoid the
5119         leftover timer)
5121         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5122         to make it easier to test: break generateStepID() out to a
5123         separate function, only update statusbag if it exists.
5124         (ShellCommands): create useful text for dict-based commands too.
5126         * test/*, buildbot/test/*: move unit tests under the buildbot/
5127         directory
5128         * setup.py (packages): install buildbot.test too
5130         * buildbot/test/test_slavecommand.py: fix it, tests pass now
5131         * buildbot/test/test_steps.py: fix it, tests pass now
5133 2004-01-06  Brian Warner  <warner@lothar.com>
5135         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5136         freshcvs mail uses a slightly different syntax for new
5137         directories. Update parser to handle either.
5138         * test/test_mailparse.py (Test1.testMsg9): test for same
5140 2003-12-21  Brian Warner  <warner@lothar.com>
5142         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5143         'warnOnWarnings' so that lintian errors mark the build orange
5145 2003-12-17  Brian Warner  <warner@lothar.com>
5147         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5148         messages emitted by Bonsai, contributed by Stephen Davis.
5150         * test/*: moved all tests to use trial instead of unittest. Some
5151         still fail (test_steps, test_slavecommand, and test_process).
5153         * setup.py (version): bump to 0.4.1+ while between releases
5155 2003-12-09  Brian Warner  <warner@lothar.com>
5157         * setup.py (version): Releasing buildbot-0.4.1
5159 2003-12-09  Brian Warner  <warner@lothar.com>
5161         * NEWS: update for 0.4.1 release
5163         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5164         freebsd builder code a little bit
5166         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5167         don't try to compare attributes of different classes
5168         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5169         (MaildirSource.messageReceived): fix Change delivery
5171         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5172         into the config file's namespace before loading it, like the
5173         documentation claims it does
5174         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5175         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5176         daemon comes back online
5178 2003-12-08  Brian Warner  <warner@lothar.com>
5180         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5181         so the example will work with online=0 as well
5183         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5184         fix the __implements__ line
5186         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5187         class a twisted.application.service.Service, use startService to
5188         get it moving.
5190         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5191         directory fd instead of simple open(). I'm sure this used to work,
5192         but the current version of python refuses to open directories with
5193         open().
5195 2003-12-05  Brian Warner  <warner@lothar.com>
5197         * setup.py (version): bump to 0.4.0+ while between releases
5199 2003-12-05  Brian Warner  <warner@lothar.com>
5201         * setup.py (version): Releasing buildbot-0.4.0
5203 2003-12-05  Brian Warner  <warner@lothar.com>
5205         * docs/examples/glib_master.cfg: replace old sample scripts with
5206         new-style config files
5207         * MANIFEST.in: include .cfg files in distribution tarball
5209         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5210         implement a dummy method to avoid the exception that occurs when
5211         freshcvs sends this to us.
5213         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5214         removed the method, as it broke reconnection. Apparently
5215         stopFactory is called each time the connection attempt fails. Must
5216         rethink this.
5217         (ReconnectingPBClientFactory.__getstate__): squash the _callID
5218         attribute before serialization, since without stopFactory the
5219         reconnect timer may still be active and they aren't serializable.
5221         * test/test_mailparse.py (ParseTest): test with 'self' argument
5223         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5224         argument, as these "functions" are invoked like methods from class
5225         attributes and therefore always get an instance as the first
5226         argument.
5228         * buildbot/changes/maildir.py (Maildir.start): fix error in error
5229         message: thanks to Stephen Davis for the catch
5231 2003-12-04  Brian Warner  <warner@lothar.com>
5233         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5234         twisted's standard ReconnectingClientFactory. Handles both oldcred
5235         and newcred connections. Also has a bug-workaround for
5236         ReconnectingClientFactory serializing its connector when it
5237         shouldn't.
5239         * buildbot/bot.py (BotFactory): rewrite connection layer with new
5240         pbutil. Replace makeApp stuff with proper newcred/mktap
5241         makeService(). Don't serialize Ephemerals on shutdown.
5243         * buildbot/changes/changes.py (ChangeMaster): make it a
5244         MultiService and add the sources as children, to get startService
5245         and stopService for free. This also gets rid of the .running flag.
5247         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5248         new pbutil, turn into a TCPClient at the same time (to get
5249         startService for free). Two variants exist: FreshCVSSourceOldcred
5250         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5251         yet, but when it does, we'll be ready).
5252         (FreshCVSSource.notify): handle paths which are empty after the
5253         prefix is stripped. This only happens when the top-level (prefix)
5254         directory is added, at the very beginning of a Repository's life.
5256         * buildbot/clients/base.py: use new pbutil, clean up startup code.
5257         Now the only reconnecting code is in the factory where it belongs.
5258         (Builder.unsubscribe): unregister the disconnect callback when we
5259         delete the builder on command from the master (i.e. when the
5260         buildmaster is reconfigured and that builder goes away). This
5261         fixes a multiple-delete exception when the status client is shut
5262         down afterwards.
5263         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5264         base Client. 
5266         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5267         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5269 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
5271         * contrib/run_maxq.py: Accept a testdir as an argument rather than
5272         a list of globs (ugh). The testdir will be searched for files
5273         named *.tests and run the tests in the order specified in each of
5274         those files. This allows for "dependancies" between tests to be
5275         codified.
5277         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5278         argument to pass to run_maxq.py, instead of a glob.
5280 2003-10-17  Brian Warner  <warner@lothar.com>
5282         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5283         files that live in the sandbox
5285 2003-10-15  Brian Warner  <warner@lothar.com>
5287         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5288         spelling error in "docs" count-warnings output
5289         (HLint.start): stupid thinko meant .xhtml files were ignored
5291         * docs/examples/twisted_master.cfg (reactors): disable cReactor
5292         tests now that cReactor is banished to the sandbox
5294 2003-10-10  Brian Warner  <warner@lothar.com>
5296         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5297         scheme: now .xhtml are sources and .html are generated
5299 2003-10-08  Brian Warner  <warner@lothar.com>
5301         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5302         we were ignoring the 'randomly' parameter.
5304 2003-10-01  Brian Warner  <warner@lothar.com>
5306         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5307         posix, to kill sub-children of aborted slavecommands.
5309         * buildbot/status/builder.py: rename Builder to BuilderStatus.
5310         Clean up initialization: lastBuildStatus remains None until the
5311         first build has been completed.
5313         * buildbot/status/html.py (WaterfallStatusResource.body): handle
5314         None as a lastBuildStatus
5315         * buildbot/clients/gtkPanes.py: same
5317         * buildbot/status/client.py (StatusClientService): keep
5318         BuilderStatus objects in self.statusbags . These objects now live
5319         here in the StatusClientService and are referenced by the Builder
5320         object, rather than the other way around.
5321         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5322         * buildbot/process/base.py (Builder): same
5323         * test/test_config.py (ConfigTest.testBuilders): same
5325         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5326         an existing builder, leave the statusbag alone. This will preserve the
5327         event history.
5329         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5330         hook. This will probably go away in favor of a class in upcoming
5331         Twisted versions.
5333         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5334         serviceName from newcred FreshCVSNotifiee setup
5336 2003-09-29  Brian Warner  <warner@lothar.com>
5338         * buildbot/process/process_twisted.py: switch to new reactor
5339         abbreviations
5340         * docs/examples/twisted_master.cfg: same
5342         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5344         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5345         botmaster reference instead of the oldapp service lookup
5347         * buildbot/master.py (BuildMaster.__init__): give the
5348         StatusClientService a reference to the botmaster to make it easier to
5349         force builds
5351 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5353         * buildbot/status/html.py (Box.td): escape hreffy things so you
5354         can have spaces in things like builder names
5355         (StatusResourceBuilder.body)
5356         (WaterfallStatusResource.body)
5357         (WaterfallStatusResource.body0): same
5359 2003-09-25  Brian Warner  <warner@lothar.com>
5361         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5362         rearrange the builder list when adding or removing builders: keep
5363         them in the order the user requested.
5364         * test/test_config.py (ConfigTest.testBuilders): verify it
5366         * contrib/debug.glade: give the debug window a name
5368         * buildbot/process/base.py (Builder.buildTimerFired): builders can
5369         now wait on multiple interlocks. Fix code relating to that.
5370         (Builder.checkInterlocks): same
5371         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5373         * buildbot/master.py (BuildMaster.loadConfig): move from
5374         deprecated pb.BrokerFactory to new pb.PBServerFactory
5375         * test/test_config.py (ConfigTest.testWebPathname): same
5377         * docs/examples/twisted_master.cfg: fix interlock declaration
5379         * buildbot/master.py (BotMaster.addInterlock): move code to attach
5380         Interlocks to their Builders into interlock.py .
5381         (BuildMaster.loadConfig_Interlocks): fix interlock handling
5383         * test/test_config.py (ConfigTest.testInterlocks): validate
5384         interlock handling
5386         * buildbot/process/base.py (Builder.__init__): better comments
5387         * buildbot/process/interlock.py (Interlock.__repr__): same
5388         (Interlock.deactivate): add .active flag, move the code that
5389         attaches/detaches builders into the Interlock
5391 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5393         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5394         tests using the new run_maxq.py script, and reporting failures by
5395         parsing its output.
5397         * contrib/run_maxq.py: Hacky little script for running a set of maxq
5398         tests, reporting their success or failure in a buildbot-friendly 
5399         manner.
5401 2003-09-24  Brian Warner  <warner@lothar.com>
5403         * docs/examples/twisted_master.cfg: example of a new-style config
5404         file. This lives in the buildmaster base directory as
5405         "master.cfg".
5407         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5408         button to make the master re-read its config file
5410         * buildbot/master.py (BuildMaster.loadConfig): new code to load
5411         buildmaster configuration from a file. This file can be re-read
5412         later, and the buildmaster will update itself to match the new
5413         desired configuration. Also use new Twisted Application class.
5414         * test/Makefile, test/test_config.py: unit tests for same
5416         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5417         FreshCVSSources comparable, to support reload.
5418         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5420         * buildbot/process/base.py (Builder): make them comparable, make
5421         Interlocks easier to attach, to support reload. Handle
5422         re-attachment of remote slaves.
5423         * buildbot/process/interlock.py (Interlock): same
5425         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5426         Twisted's new Application class. Requires Twisted >= 1.0.8 .
5427         buildmaster taps are now constructed with mktap.
5428         * buildbot/status/client.py (StatusClientService): same
5430         * buildbot/status/words.py: move to new Services, add support to
5431         connect to multiple networks, add reload support, allow nickname
5432         to be configured on a per-network basis
5434 2003-09-20  Brian Warner  <warner@lothar.com>
5436         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5437         the freebsd builder, now that the machine has been upgraded and no
5438         longer has python2.2
5440         * setup.py (version): bump to 0.3.5+ while between releases
5442 2003-09-19  Brian Warner  <warner@lothar.com>
5444         * setup.py (version): Releasing buildbot-0.3.5
5446 2003-09-19  Brian Warner  <warner@lothar.com>
5448         * NEWS: add post-0.3.4 notes
5450         * README (REQUIREMENTS): note twisted-1.0.7 requirement
5452         * MANIFEST.in: add contrib/*
5454         * docs/examples/twisted_master.py (twisted_app): all build slaves must
5455         use a remote root now: cvs.twistedmatrix.com
5457         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5458         to newcred
5459         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5460         compatibility with old servers
5461         (FreshCVSSource.start): and provide a way to use it
5462         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5464         * docs/examples/twisted_master.py (twisted_app): update to new
5465         makeApp interface.
5466         (twisted_app): listen on new ~buildbot socket
5467         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5469         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5470         to reduce cvs bandwidth (update instead of full checkout)
5472 2003-09-11  Brian Warner  <warner@lothar.com>
5474         * contrib/fakechange.py: demo how to connect to the changemaster
5475         port. You can use this technique to submit changes to the
5476         buildmaster from source control systems that offer a hook to run a
5477         script when changes are committed.
5479         * contrib/debugclient.py: tool to connect to the debug port. You
5480         can use it to force builds, submit fake changes, and wiggle the
5481         builder state
5483         * buildbot/master.py: the Big NewCred Reorganization. Use a single
5484         'Dispatcher' realm to handle all the different kinds of
5485         connections and Perspectives: buildslaves, the changemaster port,
5486         the debug port, and the status client port. NewCredPerspectives
5487         now have .attached/.detached methods called with the remote 'mind'
5488         reference, much like old perspectives did. All the pb.Services
5489         turned into ordinary app.ApplicationServices .
5490         (DebugService): went away, DebugPerspectives are now created
5491         directly by the Dispatcher.
5492         (makeApp): changed interface a little bit
5494         * buildbot/changes/changes.py: newcred
5495         * buildbot/status/client.py: newcred
5497         * buildbot/clients/base.py: newcred client side changes
5498         * buildbot/bot.py: ditto
5500         * docs/examples/glib_master.py: handle new makeApp() interface
5501         * docs/examples/twisted_master.py: ditto
5503         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5504         base newcred Perspectives on. This should go away once Twisted
5505         itself provides something sensible.
5508 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
5510         * contrib/svn_buildbot.py: A program that you can call from your
5511         SVNREPO/hooks/post-commit file that will notify a BuildBot master
5512         when a change in an SVN repository has happened. See the top of
5513         the file for some minimal usage info.
5515 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5517         * buildbot/slavecommand.py (ArglistCommand): Add new
5518         ArglistCommand that takes an argument list rather than a string as
5519         a parameter. Using a st.split() for argv is very bad.
5521         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5522         update to a particular revision rather than always checking out
5523         (still not very smart about it, there may be cases where the
5524         checkout becomes inconsistent).
5526 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5528         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5529         SVN fetch support. It can checkout (not update!) a specified
5530         revision from a specified repository to a specified directory.
5532         * buildbot/status/progress.py (Expectations.update): Fix an
5533         obvious bug (apparently created by the change described in the
5534         previous ChangeLog message) by moving a check to *after* the
5535         variable it checks is defined.
5538 2003-09-08  Brian Warner  <warner@lothar.com>
5540         * buildbot/status/progress.py (Expectations.update): hack to catch
5541         an exception TTimo sees: sometimes the update() method seems to
5542         get called before the step has actually finished, so the .stopTime
5543         is not set, so no totalTime() is available and we average None
5544         with the previous value. Catch this and just don't update the
5545         metrics, and emit a log message.
5547 2003-08-24  Brian Warner  <warner@lothar.com>
5549         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5550         parameter to set copydir='original' in CVS commands.
5552         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5554         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5555         which tells the command to maintain a separate original-source CVS
5556         workspace. For each build, this workspace will be updated, then
5557         the tree copied into a new workdir. This reduces CVS bandwidth
5558         (from a full checkout to a mere update) while doubling the local
5559         disk usage (to keep two copies of the tree).
5561 2003-08-21  Brian Warner  <warner@lothar.com>
5563         * buildbot/status/event.py (Logfile.addEntry): if the master web
5564         server dies while we're serving a page, request.write raises
5565         pb.DeadReferenceError . Catch this and treat it like a
5566         notifyFinish event by dropping the request.
5568 2003-08-18  Brian Warner  <warner@lothar.com>
5570         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5571         (instead of blowing up) if a force-build command is given without
5572         a reason field
5574         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5575         don't blow up if there aren't yet any Changes in the list
5577 2003-08-02  Brian Warner  <warner@lothar.com>
5579         * buildbot/bot.py (updateApplication): don't set the .tap name,
5580         since we shouldn't assume we own the whole .tap file
5582         * buildbot/bb_tap.py (updateApplication): clean up code, detect
5583         'mktap buildbot' (without a subcommand) better
5585 2003-07-29  Brian Warner  <warner@lothar.com>
5587         * buildbot/status/words.py
5588         (IrcStatusFactory.clientConnectionLost): when we lose the
5589         connection to the IRC server, schedule a reconnection attempt.
5591         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5592         use shutil.rmtree instead of forking off an "rm -rf" command.
5593         rmtree may take a while and will block until it finishes, so we
5594         use "rm -rf" if available.
5596         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5597         freebsd buildslave badly
5599         * setup.py (version): bump to 0.3.4+ while between releases
5601 2003-07-28  Brian Warner  <warner@lothar.com>
5603         * setup.py (version): Releasing buildbot-0.3.4
5605 2003-07-28  Brian Warner  <warner@lothar.com>
5607         * NEWS: update in preparation for release
5609         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5610         process.signalProcess instead of os.kill, to improve w32
5611         portability
5613         * docs/examples/twisted_master.py (twisted_app): turn off
5614         win32eventreactor: the tests hang the buildslave badly
5616         * buildbot/process/base.py (Build.buildFinished): update ETA even on
5617         failed builds, since usually the failures are consistent
5619         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5620         add compileOpts/compileOpts2 to reactors build
5622         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5623         (twisted_app): use both default and win32eventreactor on w32 build.
5624         Use both default and kqreactor on freebsd build.
5626         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5627         add compileOpts2, which is put after the build_ext argument. w32
5628         needs "-c mingw32" here.
5630         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5631         touch .acqpath, it goes away in recent Twisted releases
5633         * docs/examples/twisted_master.py (twisted_app): use "python" for
5634         the w32 buildslave, not "python2.2"
5636         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5637         the directory exists.. should hush an exception under w32
5639         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5640         ProcessTerminated -provided values for signal and exitCode rather
5641         than parsing the unix status code directly. This should remove one
5642         more roadblock for a w32-hosted buildslave.
5644         * test/test_mailparse.py: add test cases for Syncmail parser
5646         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5647         temporary compatibility import. Note! Start importing
5648         FCMaildirSource from changes.mail instead of changes.freshcvsmail
5650         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5652 2003-07-27  Brian Warner  <warner@lothar.com>
5654         * NEWS: started adding new features
5656         * buildbot/changes/mail.py: start work on Syncmail parser, move
5657         mail sources into their own file
5659         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5660         as implementing IChangeSource
5661         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5663         * buildbot/interfaces.py: define the IChangeSource interface
5665 2003-07-26  Brian Warner  <warner@lothar.com>
5667         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5669 2003-06-25  Brian Warner  <warner@lothar.com>
5671         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5672         seconds display
5674 2003-06-17  Brian Warner  <warner@lothar.com>
5676         * buildbot/status/words.py: clean up method usage to avoid error
5677         in silly IRC command
5678         (IrcStatusBot.emit_status): round off seconds display
5680         * buildbot/process/base.py (Build): delete the timer when saving
5681         to the .tap file, and restore it (if it should still be running)
5682         upon restore. This should fix the "next build in -34 seconds"
5683         messages that result when the master is restarted while builds are
5684         sitting in the .waiting slot. If the time for the build has
5685         already passed, start it very soon (in 1 second).
5687         * buildbot/status/words.py: more silly commands
5689         * README (REQUIREMENTS): add URLs to all required software
5691         * buildbot/status/words.py ('last'): mention results of, and time
5692         since last build
5694 2003-05-28  Brian Warner  <warner@lothar.com>
5696         * buildbot/status/words.py: add 'last' command
5697         (IrcStatusBot.emit_status): add current-small text to 'status' output
5699         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5700         (twisted_app): remove spaces from OS-X builder name
5702         * buildbot/master.py (makeApp): add knob to turn on IRC bot
5703         * buildbot/status/words.py: IRC bot should actually be useful now
5705 2003-05-23  Brian Warner  <warner@lothar.com>
5707         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5708         "slave information" from $(slavedir)/info/* . These files are
5709         maintained by the slave administrator, and describe the
5710         machine/environment that is hosting the slave. Information from
5711         them is put into the "Builder" HTML page. Still need to establish
5712         a set of well-known filenames and meanings for this data: at the
5713         moment, *all* info/* files are sent to the master, but only
5714         'admin' and 'host' are used on that end.
5715         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5716         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
5717         * buildbot/master.py (BotPerspective.got_info):  ditto
5719 2003-05-22  Brian Warner  <warner@lothar.com>
5721         * setup.py (version): bump version to 0.3.3+ while between releases
5723 2003-05-21  Brian Warner  <warner@lothar.com>
5725         * setup.py: Releasing buildbot-0.3.3
5727 2003-05-21  Brian Warner  <warner@lothar.com>
5729         * NEWS: 0.3.3 news items
5731         * README: describe --keepalive and life behind a NAT box
5733         * buildbot/bot.py (Bot.connected): implement application-level
5734         keepalives to deal with NAT timeouts, turn them on with
5735         --keepalive option or when SO_KEEPALIVE doesn't work.
5737         * buildbot/master.py (BotPerspective): accept keepalives silently
5739         * buildbot/process/base.py (Build.buildException): CopiedFailures
5740         don't carry as much information as local ones, so don't try to
5741         create a big HTMLized version of them.
5743         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5744         log file when step fails due to an exception, such as when the slave
5745         becomes unreachable
5747         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5748         --testmodule argument instead of grepping for test-case-name tags
5749         ourselves. Remove FindUnitTests code.
5750         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5752         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5754 2003-05-16  Brian Warner  <warner@lothar.com>
5756         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5757         argument to allow things like CFLAGS=-O0 to be passed without relying
5758         upon /bin/sh processing on the slave.
5760         * buildbot/process/step.py (InternalShellCommand.start): send
5761         'env' dict to slave
5762         * buildbot/slavecommand.py (ShellCommand.start): create argv with
5763         'split' instead of letting /bin/sh do it. This should also remove
5764         the need for /bin/sh on the buildslave, making it more likely to
5765         work with win32.
5767         * buildbot/status/html.py: html-escape text in blamelist.
5768         Add "force build" button to the Builder page.
5770         * buildbot/process/step_twisted.py (countFailedTests): look at
5771         last 1000 characters for status line, as import errors can put it
5772         before the -200 point.
5774 2003-05-15  Brian Warner  <warner@lothar.com>
5776         * docs/examples/twisted_master.py: use clobber=0 for remote builds
5778         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5779         make 'clobber' a parameter, so it is possible to have builds which
5780         do full tests but do a cvs update instead of hammering the CVS
5781         server with a full checkout each build
5783         * buildbot/process/step.py (InternalShellCommand): bump default
5784         timeout to 20 minutes
5786         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5787         the master to trigger a build. Run it via manhole.
5789         * buildbot/master.py (BotPerspective.perspective_forceBuild):
5790         allow slaves to trigger any build that they host, to make life
5791         easier for slave admins who are testing out new build processes
5793         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5794         don't flunk cReactor or qtreactor on failure, since they fail alot
5795         these days. Do warnOnFailure instead.
5797         * buildbot/process/base.py: change Builder.buildable from a list
5798         into a single slot. When we don't have a slave, new builds (once
5799         they make it past the timeout) are now merged into an existing
5800         buildable one instead of being queued. With this change, a slave
5801         which has been away for a while doesn't get pounded with all the
5802         builds it missed, but instead just does a single build.
5804 2003-05-07  Brian Warner  <warner@lothar.com>
5806         * setup.py (version): bump version to 0.3.2+ while between releases
5808 2003-05-07  Brian Warner  <warner@lothar.com>
5810         * setup.py: Releasing buildbot-0.3.2
5812 2003-05-07  Brian Warner  <warner@lothar.com>
5814         * setup.py: fix major packaging error: include subdirectories!
5815         
5816         * NEWS: add changes since last release
5818         * README (REQUIREMENTS): update twisted/python dependencies
5820         * buildbot/status/builder.py (Builder.startBuild): change
5821         BuildProcess API: now they should call startBuild/finishBuild
5822         instead of pushing firstEvent / setLastBuildStatus. Moving towards
5823         keeping a list of builds in the statusbag, to support other kinds of
5824         status delivery.
5825         (Builder.addClient): send current-activity-small to new clients
5826         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5827         new API
5829         * buildbot/status/client.py: drop RemoteReferences at shutdown
5831         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5833         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5834         more debug messages for remote status client
5836         * buildbot/process/step.py (InternalBuildStep.stepComplete)
5837         (.stepFailed): only fire the Deferred once, even if both
5838         stepComplete and stepFailed are called. I think this can happen if
5839         an exception occurs at a weird time.
5841         * buildbot/status/words.py: work-in-progress: IRC status delivery
5843 2003-05-05  Brian Warner  <warner@lothar.com>
5845         * docs/examples/twisted_master.py (twisted_app): hush internal
5846         python2.3 distutils deprecation warnings
5847         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5848         add compileOpts= argument which inserts extra args before the
5849         "setup.py build_ext" command. This can be used to give -Wignore
5850         warnings, to hush some internal python-2.3 deprecation messages.
5852         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5853         the ['twisted.test'] default test case to make it easier to change
5854         in subclasses
5856         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5857         * buildbot/clients/gtkPanes.py: ditto
5859         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5860         arg to collapse RunUnitTestsRandomly into RunUnitTests
5861         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5862         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5864         * buildbot/status/html.py (StatusResource): shuffle Resources
5865         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5866         would serve the waterfall display, but the internal links were
5867         only valid on the trailing-slash version. The correct behavior is
5868         for the non-slashed one to serve a Redirect to the slashed one.
5869         This only shows up when the buildbot page is hanging off another
5870         server, like a Twisted-Web distributed server.
5872         * buildbot/status/event.py (Event, RemoteEvent): make Events
5873         pb.Cacheable, with RemoteEvent as the cached version. This removes
5874         a lot of explicit send-an-update code.
5875         * buildbot/status/builder.py (Builder): remove send-update code
5876         * buildbot/status/client.py (ClientBuilder): remove send-update
5877         code, and log errors that occur during callRemote (mostly to catch
5878         InsecureJelly exceptions)
5880         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5881         run Lore with the same python used in the rest of the build
5883         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
5885         * buildbot/process/step_twisted.py (HLint): accept 'python'
5886         argument. Catch rc!=0 and mark the step as failed. This marks the
5887         build orange ("has warnings").
5888         (RunUnitTestsJelly): move out to step_twisted2.py
5890         * buildbot/util.py (ignoreStaleRefs): add utility function
5892         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
5893         don't fake ETA object, it's too hard to get right
5895 2003-05-02  Brian Warner  <warner@lothar.com>
5897         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
5899 2003-05-01  Brian Warner  <warner@lothar.com>
5901         * buildbot/status/html.py (StatusResource.body): oops, I was
5902         missing a <tr>, causing the waterfall page to be misrendered in
5903         everything except Galeon.
5905 2003-04-29  Brian Warner  <warner@lothar.com>
5907         * docs/examples/twisted_master.py: make debuild use python-2.2
5908         explicitly, now that Twisted stopped supporting 2.1
5910         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
5911         handle tuple results too. I keep forgetting this, which suggests
5912         it needs to be rethought.
5914         * setup.py (setup): bump version to 0.3.1+ while between releases
5915         
5916 2003-04-29  Brian Warner  <warner@lothar.com>
5918         * setup.py: Releasing buildbot-0.3.1
5920 2003-04-29  Brian Warner  <warner@lothar.com>
5922         * README (SUPPORT): add plea to send questions to the mailing list
5924         * NEWS, MANIFEST.in: add description of recent changes
5926         * docs/examples/twisted_master.py: add the code used to create the
5927         Twisted buildmaster, with passwords and such removed out to a
5928         separate file.
5930         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
5931         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
5932         buildmasters to not require CVSToys be installed.
5933         * README, docs/examples/glib_master: update to match the change
5935         * buildbot/clients/base.py, buildbot/bot.py,
5936         buildbot/changes/changes.py, buildbot/pbutil.py: copy
5937         ReconnectingPB from CVSToys distribution to remove CVSToys
5938         dependency for build slaves and status clients. Buildmasters which
5939         use FreshCVSSources still require cvstoys be installed, of course.
5941 2003-04-25  Brian Warner  <warner@lothar.com>
5943         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
5944         runTestsRandomly arg to turn on trial -z
5946         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
5947         experimental code to use trial's machine-parseable output to get
5948         more detailed test results. Still has some major issues.
5949         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
5950         in random sequence
5952         * buildbot/status/builder.py (Builder.setCurrentBuild):
5953         anticipating moving build history into statusbag, not used yet
5955         * buildbot/status/tests.py: code to centralize test results,
5956         doesn't work quite yet
5958         * buildbot/status/event.py (Event): use hasattr("setName") instead
5959         of isinstance for now.. need better long-term solution
5961         * buildbot/status/html.py: Remove old imports
5963 2003-04-24  Brian Warner  <warner@lothar.com>
5965         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
5966         ignore changes under doc/fun/ and sandbox/
5968         * buildbot/process/step_twisted.py: update pushEvent and friends.
5970         * buildbot/status/html.py (Box.td): replace event.buildername with
5971         event.parent.getSwappableName(). Needs more thought.
5973         * buildbot/status/builder.py (Builder): Replace pushEvent and
5974         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
5975         Tell events they are being pruned with event.delete().
5977         * buildbot/process/base.py (Build): Remove Builder status-handling
5978         methods. s/pushEvent/setCurrentActivity/.
5980         * buildbot/process/step.py (BuildStep): clean up status delivery.
5981         Gouse builder.statusbag methods instead of intermediate builder
5982         methods. s/updateLastEvent/updateCurrentActivity/.
5983         s/finalizeLastEvent/finishCurrentActivity/. Use
5984         addFileToCurrentActivity for summaryFunction.
5986         * buildbot/status/event.py (Logfile): put data in a Swappable when
5987         .finish is called.
5988         (Event): add more setter methods. Remove .buildername, use .parent
5989         and getSwappableName instead (needs more thought).
5991         * buildbot/util.py (Swappable):
5992         * test/test_swap.py: don't bother setting filename at __init__
5993         time, do it later. Change setFilename args to take parent first,
5994         since it provides the most significant part of the filename.
5996 2003-04-23  Brian Warner  <warner@lothar.com>
5998         * buildbot/status/event.py (Logfile.addEntry): append to previous
5999         entry, if possible
6001         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6002         anticipating Swappable
6003         (InternalShellCommand.remoteUpdate): split out various log-adding
6004         methods so subclasses can snarf stdout separately
6006         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6007         in anticipation of Swappable build logs
6008         (Builder.testsFinished): anticipating TestResults, still disabled
6010         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6011         last 100 events
6013         * buildbot/status/event.py (Logfile): add (disabled) support for
6014         Swappable, not ready for use yet
6016         * buildbot/util.py (Swappable): object which is swapped out to
6017         disk after some period of no use.
6018         * test/test_swap.py: test buildbot.utils.Swappable
6020 2003-04-14  Brian Warner  <warner@lothar.com>
6022         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6023         periodic-build timer. Set the .periodicBuildTime on a builder
6024         instance to some number of seconds to activate it.
6026         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6028         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6029         a way that survives result tuples
6031 2003-04-12  Brian Warner  <warner@lothar.com>
6033         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6034         return a dict instead of a tuple: allow summarizers to provide
6035         multiple summaries if they want
6036         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6037         (debuildSummarizer): summarize lintian warnings/errors
6039 2003-04-10  Brian Warner  <warner@lothar.com>
6041         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6043 2003-04-09  Brian Warner  <warner@lothar.com>
6045         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6046         empty summaries: happens when the tests fail so hard they don't emit
6047         a parseable summary line.
6049         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6050         Allow summaryFunction to return None to indicate no summary should
6051         be added.
6053         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6054         writing to stale HTTP requests: notice when they disconnect and
6055         remove the request from the list. Also add CacheToFile from
6056         moshez, will be used later.
6058 2003-04-08  Brian Warner  <warner@lothar.com>
6060         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6061         should be an int, not a list of strings
6063         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6064         if we weren't actually connected
6066         * buildbot/process/step_twisted.py (trialTextSummarizer): function
6067         to show the tail end of the trial text output
6069         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6070         hook to summarize the results of a ShellCommand
6072 2003-04-07  Brian Warner  <warner@lothar.com>
6074         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6075         twisted test suite code into a single class.
6076         * buildbot/process/process_twisted.py: same
6078 2003-04-04  Brian Warner  <warner@lothar.com>
6080         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6082         * README (SLAVE): document use of mktap to create slave .tap file
6083         (REQUIREMENTS): describe dependencies
6085         * buildbot/bb_tap.py, buildbot/plugins.tml:
6086         * buildbot/bot.py (updateApplication): Add mktap support for creating
6087         buildslave .tap files
6089 2003-03-28  Brian Warner  <warner@lothar.com>
6091         * buildbot/process/step.py (InternalShellCommand.finished): handle
6092         new tuple result values (fix embarrasing bug that appeared during
6093         PyCon demo)
6095 2003-03-27  Brian Warner  <warner@lothar.com>
6097         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6098         -making program
6100 2003-03-25  Brian Warner  <warner@lothar.com>
6102         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6103         to overall build status
6104         * buildbot/clients/base.py (Builder): improve event printing
6105         * buildbot/process/base.py (BasicBuildFactory): use specific steps
6106         instead of generic ShellCommand
6107         (Build): Add .stopBuild, use it when slave is detached
6109         * buildbot/process/step.py (Configure,Test): give the steps their
6110         own names and status strings
6112         * buildbot/status/html.py (StatusResource): add "show" argument,
6113         lets you limit the set of Builders being displayed.
6115 2003-03-20  Brian Warner  <warner@lothar.com>
6117         * buildbot/process/basic.py: removed
6119 2003-03-19  Brian Warner  <warner@lothar.com>
6121         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6122         turn off process-docs by default
6124         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6125         when displaying build information without anything in allBuilds[]
6127         * buildbot/bot.py (makeApp): really take password from sys.argv
6129 2003-03-18  Brian Warner  <warner@lothar.com>
6131         * buildbot/bot.py (buildApp): take password from sys.argv
6133         * README: replace with more useful text
6135         * setup.py: add a real one
6136         * MANIFEST.in, .cvsignore: more distutils packaging stuff
6137         
6138         * docs/PyCon-2003/: added sources for PyCon paper.
6140         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6141         now Build objects control the process and Builder only handles
6142         slave stuff and distribution of changes/status. A new BuildFactory
6143         class creates Build objects on demand.
6145         Created ConfigurableBuild which takes a list of steps to run. This
6146         makes it a lot easier to set up a new kind of build and moves us
6147         closer to being able to configure a build from a web page.
6149         * buildbot/process/step_twisted.py, process_twisted.py: move to
6150         new model. A lot of code went away.
6151         
6152         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6153         send lots of empty progress messages to the client.
6155         * buildbot/master.py (makeApp): enforce builder-name uniqueness
6157 2003-02-20  Brian Warner  <warner@lothar.com>
6159         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6161         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6162         Twisted bug that prevented non-pty processes from working just got
6163         fixed, and the bug that leaks ptys is still being investigated.
6165         * buildbot/process/step.py (CVS): send timeout arg to slave
6167         * buildbot/clients/gtkPanes.py: add connection-status row, handle
6168         builders coming and going
6169         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6170         from CVSToys, handle lost-buildmaster
6172         * buildbot/status/client.py (StatusClientService.removeBuilder):
6173         Clean up status client protocol: send builders (with references)
6174         as they are created, rather than sending a list and requiring the
6175         client to figure out which ones are new.
6176         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6177         attempts to force a build on an unknown builder
6179 2003-02-19  Brian Warner  <warner@lothar.com>
6181         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6182         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6183         Twisted stops leaking them.
6184         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6185         builder goes to an idle state.
6187         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6188         I figure out why CVS commands hang without them, and/or I fix the
6189         hung-command timeout
6191 2003-02-16  Brian Warner  <warner@lothar.com>
6193         * buildbot/process/step_twisted.py: bin/hlint went away, replace
6194         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6195         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6196         GenerateDocs now that they are prefixed with WARNING:.
6198         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6199         use manual href target instead of request.childLink
6201         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6202         display every second, but update the ETA every 5 seconds (or
6203         whenever) as remote_progress messages arrive.
6206 2003-02-12  Brian Warner  <warner@lothar.com>
6208         * *: import current sources from home CVS repository
6209         
6211 # Local Variables:
6212 # add-log-time-format: add-log-iso8601-time-string
6213 # End: