#124:docs.patch
[buildbot.git] / ChangeLog
blobe3e561f49fe80afc22408e4296ceb26021816e59
1 2008-04-29  Brian Warner  <warner@lothar.com>
3         * buildbot/slave/commands.py (SourceBase.doCopy): use 'cp -RPp'
4         instead of 'cp -rp': this fixes freebsd-vs-svn-vs-symlinks, and
5         should work with both POSIX and GNU cp. Thanks to Pete Curry for
6         the patch. Closes #86.
7         * buildbot/steps/source.py (Source.__init__): update docstring
9         * buildbot/scripts/sample.cfg: fix comment, thanks to 'ludovic'
10         for the catch. Closes #193.
12         * buildbot/changes/bonsaipoller.py: apply fixes from Ben Hearsum,
13         closes #216.
14         * buildbot/test/test_bonsaipoller.py: same
16         * buildbot/status/mail.py (MailNotifier): add mode="passing",
17         thanks to 'matisse' for the patch, closes #169.
19         * buildbot/status/tinderbox.py (TinderboxMailNotifier): add
20         useChangeTime= argument, from Ben Hearsum, closes #213.
22         * buildbot/changes/svnpoller.py (SVNPoller.checksvn): fix missing
23         argument, thanks to 'thatch' for the catch.
25         * buildbot/status/tinderbox.py (TinderboxMailNotifier): fix scope
26         of logEncoding, patch by Ben Hearsum. Closes #214.
28         * docs/buildbot.texinfo (IRC Bot): fix typo, patch by Christian
29         Theune. Closes #231.
31 2008-04-24  Brian Warner  <warner@lothar.com>
33         * setup.py (setup_args): apply patches from zooko: prepare
34         setup.py for optional setuptoolsification
35         (entry_points): zooko's other patches: if setuptools is available,
36         create an executable via 'entry_points', and declare a dependency
37         upon twisted
39         * bin/buildbot: apply patch from zooko: use /usr/bin/env in shbang
41         * README (REQUIREMENTS): we handle twisted-8.0.1 just fine.
43 2008-04-15  Brian Warner  <warner@lothar.com>
45         * buildbot/__init__.py (version): bump to 0.7.7+ while between
46         releases
47         * docs/buildbot.texinfo: same
49 2008-03-29  Brian Warner  <warner@lothar.com>
51         * buildbot/__init__.py (version): Releasing buildbot-0.7.7
52         * docs/buildbot.texinfo: same
54 2008-03-29  Brian Warner  <warner@lothar.com>
56         * NEWS: update with all changes since the last release. I left the
57         bugs-fixed section somewhat terse, but there's a link to the Trac
58         page with more details.
59         * CREDITS: update
61         * buildbot/status/web/waterfall.py (WaterfallStatusResource):
62         accept category= arguments in the query-arg portion of the URL.
63         These behave like the builder= queryargs: if any category=
64         queryargs are present, we'll only show Builders that fit into one
65         of the specified categories. Using multiple category= arguments
66         will show more Builders. Thanks to Jerome Davann (hollowman) for
67         the idea and the patch. Closes #117.
68         * docs/buildbot.texinfo (Buildbot Web Resources): document it
70         * buildbot/changes/svnpoller.py (SVNPoller.create_changes): pass
71         revision as a string, not an int. This fixes a problem in
72         MailNotifier, which expects a string. Thanks to Dan Locks for the
73         patch, and Dustin Mitchell for the test fixups. Closes #208.
74         * buildbot/steps/source.py (Source.commandComplete): treat
75         got_revision as a string too.
76         * buildbot/test/test_svnpoller.py: update test to match
77         * buildbot/test/test_vc.py: same
79 2008-03-27  Brian Warner  <warner@lothar.com>
81         * buildbot/scripts/runner.py (doCheckConfig): patch from Ben
82         Hearsum to implement 'buildbot checkconfig': validate that your
83         master.cfg is good without actually touching the buildmaster.
84         Closes #37. Thanks!
85         * buildbot/scripts/checkconfig.py: same
86         * docs/buildbot.texinfo (Testing the Config File): document it
88 2008-03-22  Brian Warner  <warner@lothar.com>
90         * buildbot/test/test_vc.py (Mercurial.serveHTTP): another attempt
91         to make Mercurial.testCheckoutHTTP not fail on heavily loaded
92         machines: avoid overlapping poll() calls.
94         * NEWS: preliminary list of changes for the upcoming release.
95         Needs editing and explanations.
97         * buildbot/status/web/base.py (make_stop_form): add a label=
98         argument so that the button says "Stop Builds" or "Stop Build" as
99         appropriate. It used to say "Stop Builder", which was wrong.
100         * buildbot/status/web/baseweb.py (OneLinePerBuild.body): same
101         (OneBoxPerBuilder.body): same
103         * buildbot/process/builder.py (Builder): use self.old_building to
104         track Builds from a previous version of this Builder and are still
105         running. This makes it possible for IBuilderControl to get at
106         them, allowing the "Stop Build" button to work after a
107         Builder-replacing reconfig. Closes #22.
108         (Builder.consumeTheSoulOfYourPredecessor): grab weakrefs from the
109         old Builder's self.building attribute, instead of strongrefs,
110         since there's no good place to explicitly forget about them.
111         (Builder.getBuild): factor this out of BuilderControl
113         * buildbot/process/buildstep.py (LogLineObserver.setMaxLineLength):
114         new method to override the default 16KiB line length. Lines that
115         are longer than this will cause the rest of the log file to be
116         ignored. Thanks to Greg Ward for the patch. Closes #201.
117         * buildbot/test/test_buildstep.py: new tests for log observers
118         * docs/buildbot.texinfo (Adding LogObservers): document it
120         * buildbot/slave/commands.py (ShellCommand): record more
121         information in the 'header' section: how much we write into stdin,
122         do we close stdin, are we using a PTY. There are lingering
123         problems with PTYs and with closing stdin (see #198 and #158).
124         This doesn't fix those problems, but it should provide more
125         information to developers.
127         * buildbot/status/client.py: hush pyflakes, log.msg vs log
128         * buildbot/status/mail.py: same
130         * buildbot/locks.py (debuglog): hush pyflakes
132         * buildbot/steps/source.py (SVN.__init__): fix pyflakes: it
133         doesn't like a variable named 'warnings' that shadows the import
135         * buildbot/test/test_web.py: fix some pyflakes warnings, caused by
136         having a variable name shadow a top-level import
138         * buildbot/test/test_run.py (Disconnect.testBuild2): fix old
139         cut-and-paste typo that was causing us to run the wrong callback
141         * Makefile (pyflakes): sort+uniqify, since newer pyflakes isn't
142         smart enough to do this on its own
143         * buildbot/test/runutils.py (myGetProcessOutputAndValue): move this
144         method out from test_vc.py, hush pyflakes complaints
146         * buildbot/test/test_vc.py (Mercurial.serveHTTP): wait for the 'hg
147         serve' command to be ready, by polling with twisted.web's
148         client.getPage . Unfortunately mercurial doesn't flush its stdout
149         at startup, so we can't just wait for the 'listening at..' line to
150         be printed. This should fix the sporadic "connection refused" test
151         failures I've seen on the metabuildbot when the buildslave is
152         overloaded and 'hg serve' takes a while to start up.
154         * buildbot/steps/python_twisted.py (TrialTestCaseCounter): modify
155         regexp to count "Doctest:" lines as well as normal tests. Thanks to
156         Martin Geisler for the patch. Closes #196.
158 2008-03-20  Brian Warner  <warner@lothar.com>
160         * buildbot/status/web/waterfall.py (CurrentBox.formatETA): apply
161         patch from TedMielczarek to display hours/minutes/seconds in the
162         ETA display. Thanks Ted! Also make 'next build starts in' box use
163         the same format. Closes #95.
165         * buildbot/process/buildstep.py (render_properties): more cleanup:
166         rename 'render' to 'render_properties'.
167         * buildbot/steps/shell.py: same
168         (ShellCommand._interpolateProperties): tolerate None in the value,
169         clean up the isinstance checks, stop using the 'types' module
171         * buildbot/steps/transfer.py (FileUpload.start): same, other cleanups
173         * buildbot/steps/shell.py (render): oops, remove redundant
174         definition that probably crept in during a merge conflict
176         * buildbot/scheduler.py (Triggerable): cleanup: wrap docstring
177         * buildbot/steps/trigger.py (Trigger): cleanup: rename schedulers=
178         to schedulerNames=, make updateSourceStamp=True by default, tolerate
179         missing got_revision property (i.e. if updateSourceStamp=True but
180         there was no checkout/update step run), add TODO notes for further
181         cleanup.
182         * buildbot/test/test_run.py (Triggers): update to match
183         * docs/buildbot.texinfo (Build Dependencies): same
185         * buildbot/slave/commands.py (SVN.doVCFull): merge Dustin's patch:
186         add --no-auth-cache option to svn invocations to avoid caching
187         buildbot's credentials. This also helps when users run a
188         buildslave from their personal account, to keep the buildslave
189         from clobbering their manually-provided svn password. Closes #188.
190         (SVN.doVCUpdate): do it for 'svn update' too.
192         * buildbot/steps/shell.py: merge Greg Ward's patch (via Dustin):
193         refactor WithProperties handling, allow WithProperties in more
194         places. Closes #115.
195         * buildbot/process/buildstep.py: same
196         * buildbot/steps/transfer.py: same, allow WithProperties in filenames
198         * buildbot/steps/trigger.py: remove unused imports to hush pyflakes
200         * docs/buildbot.texinfo (Build Properties): fix up nodes+menus
202 2008-03-19  Brian Warner  <warner@lothar.com>
204         * buildbot/status/web/xmlrpc.py (XMLRPCServer.xmlrpc_getAllBuilders):
205         merge Etienne Pierre's patch (via Dustin): add new XMLRPC methods.
206         (XMLRPCServer.xmlrpc_getStatus): same
207         (XMLRPCServer.xmlrpc_getLastBuilds): same, returns the last N
208         completed builds for a given Builder
210         * buildbot/test/test_config.py (ConfigTest.setUp): merge Dustin's
211         patch: suppress DeprecationWarnings in our tests of deprecated
212         features that aren't scheduled for removal quite yet. In the long
213         run, we'll remove the old features and the tests.
215         * NEWS: add a deprecation schedule
216         * buildbot/changes/freshcvsmail.py: remove this file, it was
217         replaced by mail.FCMaildirSource in the previous release.
219         * buildbot/test/runutils.py: set usePTY=False everywhere we aren't
220         explicitly testing =True, to avoid SIGHUP-based failures that I
221         now see about 10% of the time.
223         * buildbot/scheduler.py (Triggerable): merge Dustin's patch: add
224         "Triggerable" Schedulers, to start builds at specific phases of
225         other builds rather than in response to source code changes or
226         periodic timers. These phases are marked by "Trigger" steps, which
227         are configured with a list of Triggerable schedulers that they
228         should fire. Closes #56.
229         * buildbot/steps/trigger.py (Trigger): buildstep to match
230         * buildbot/test/test_run.py (Triggers): test for it
231         * docs/buildbot.texinfo (Build Dependencies): document it
232         (Triggering Schedulers): same
234 2008-03-18  Brian Warner  <warner@lothar.com>
236         * buildbot/interfaces.py (ISourceStamp.getAbsoluteSourceStamp):
237         merge patch from Dustin to add "absolute source stamps": just like
238         normal SourceStamp instances except that they have a .revision
239         attribute copied out of the got_revision property of a build. If
240         the input SourceStamp says .revision=None (i.e. HEAD), and the
241         build is done when the tree is at r1234, then the "absolute"
242         SourceStamp should have .revision=1234 .
243         * buildbot/sourcestamp.py (SourceStamp.getAbsoluteSourceStamp): same
244         * buildbot/status/builder.py (BuildStatus.getSourceStamp): add
245         absolute= argument
247         * buildbot/test/runutils.py (SetTestFlagStep): test utility class,
248         adding 'flags' that can be set by specific buildsteps. This makes
249         it easier to write tests that detect whether certain buildsteps
250         have been reached or not. Patch by Dustin Mitchell.
251         * buildbot/test/test_run.py (TestFlag.testTestFlag): test for it.
253         * buildbot/buildslave.py (BuildSlave.__repr__): protect against
254         .botmaster being empty, to allow pretty-printing of configuration
255         files before the twisted reactor starts. Patch from Dustin
256         Mitchell.
258         * docs/buildbot.texinfo (Shutdown): make it clear that 'buildbot
259         reconfig' (which uses SIGHUP) doesn't work on windows. Acknowledge
260         the occasional failures in reconfig (and suggest 'buildbot
261         restart' as a fallback). Closes #105.
263         * buildbot/steps/shell.py (ShellCommand._interpolateProperties):
264         apply patch from Albert Hofkamp to allow WithProperties in
265         environment variables and the workdir= argument. Closes #52.
266         * buildbot/test/test_properties.py (Interpolate.testCustomBuildStep):
267         remove this test, it was pretty weird and didn't work with the
268         new _interpolateProperties approach.
270         * buildbot/test/test_vc.py (VCBase.connectSlave): turn off usePTY
271         for all slave commands: I'm seeing 'cp' and 'rm' fail with SIGHUP,
272         probably when we close stdin. This happens on my debian/sid
273         system, but not on older unixes, so I suspect some change in
274         behavior in the kernel or glibc or something similar.
276 2008-02-05  Brian Warner  <warner@lothar.com>
278         * buildbot/buildslave.py (BuildSlave._missing_timer_fired): add a
279         To: header to the email message we're composing. Oops. Thanks
280         to Zandr Milewski for the catch.
281         * buildbot/test/test_slaves.py (BuildSlave.test_mail_on_missing):
282         test for it
284 2007-12-31  Brian Warner  <warner@lothar.com>
286         * buildbot/test/test_transfer.py (Upload.testLotsOfBlocks): remove
287         the short timeouts, these can cause false test failures on slow
288         systems, and were only needed while developing the recent patch
289         (Download.testLotsOfBlocks): same
291         * buildbot/scripts/reconfig.py (Reconfigurator.run): if we're on
292         windows, make 'buildbot reconfig' emit a warning message (since
293         there's no SIGHUP to be had) rather than just hanging. Addresses
294         #105, but we still need to document this somewhere. Thanks to
295         Ben Hearsum for the patch.
297         * buildbot/slave/commands.py (SlaveFileUploadCommand.start):
298         rewrite the main loop to avoid tail recursion, since Deferreds
299         don't optimize those out. Without this, at the end of the transfer
300         we'd hit a stack depth of about two or three frames per block
301         transferred, and for large transfers this would run into a "stack
302         depth exceeded" error. Closes #106.
303         (SlaveFileDownloadCommand.start): same, for downloads.
304         * buildbot/test/test_transfer.py (Upload.testLotsOfBlocks): test it
305         (Download.testLotsOfBlocks): same
307 2007-12-22  Brian Warner  <warner@lothar.com>
309         * buildbot/steps/shell.py (TreeSize): This never worked properly.
310         Fix it. Also, stash the tree size in a build property named
311         'tree-size-kb'. Note that this records size in KiB (1024 bytes),
312         not KB (1000 bytes), because that's what du will give us. This
313         closes #47.
314         * docs/buildbot.texinfo (TreeSize): document it
315         * buildbot/test/test_steps.py (TreeSize.testTreeSize): test it
317         * buildbot/steps/shell.py (WarningCountingShellCommand): utility
318         subclass which uses a regular expression to count warning messages
319         in the output. This also puts warning messages in a new 'warnings'
320         logfile, sets the 'warnings-count' build property with the total
321         count, and marks the step results as WARNINGS if there are any
322         warnings. Thanks to Roch Gadsdon (rochg) for the patch. Closes
323         #74.
324         (Compile): derive from WarningCountingShellCommand
325         (Test): same
326         * docs/buildbot.texinfo (Compile): document it
327         * buildbot/test/test_steps.py (Warnings): test it
329         * buildbot/slave/commands.py (ShellCommand._chunkForSend): don't
330         send more than 128kB of stdout/stderr/logfile text in a single PB
331         string, since PB has a hardwired limit of 640kB. This should fix
332         crashes that occur when the test process generates output very
333         very quickly. Patch by chops@demiurgestudios.com, thanks! I
334         haven't been able to reproduce this locally, but the potential bug
335         is clear. This should close #129.
337 2007-12-21  Brian Warner  <warner@lothar.com>
339         * buildbot/scripts/startup.py (start): check to see if there's a
340         buildbot.tac before doing anything else. This improves the error
341         message when you do 'buildbot start' in the wrong directory.
343         * buildbot/scripts/logwatcher.py (LogWatcher.start): rewrite to
344         spawn /usr/bin/tail to follow the target's twistd.log . It turns
345         out that OS-X file EOF semantics are different, and the naive
346         read-then-read-again approach I was using doesn't work (the first
347         EOF we hit is sticky). tail gets it right, so rely upon it instead
348         of reimplementing the wheel. This should make 'buildbot start'
349         correctly follow the logfile on OS-X, thus closing #141.
351 2007-12-14  Brian Warner  <warner@lothar.com>
353         * buildbot/steps/shell.py (ShellCommand.__init__): stash the
354         RemoteShellCommands args too, so things like 'workdir' and 'env'
355         and 'timeout' are preserved. This ought to fix #150.
356         * buildbot/test/test_steps.py (Steps.testClone): test it
358 2007-12-11  Brian Warner  <warner@lothar.com>
360         * buildbot/scripts/startup.py (launch): use twisted.__version__,
361         rather than twisted.version, since the latter didn't appear until
362         Twisted-2.4.0 . This unbreaks 'buildbot start' on older Twisteds.
364 2007-12-08  Brian Warner  <warner@lothar.com>
366         * docs/buildbot.texinfo (Git): document the fact that we require
367         Git 1.2.0 or later, and that the one shipped in dapper is too old.
369         * buildbot/scripts/startup.py (launch): twisted-2.5.0 and later
370         doesn't need twisted.scripts._twistw.run; instead, it uses
371         twisted.scripts.twistd.run on all platforms. Closes #53.
373 2007-11-30  Brian Warner  <warner@lothar.com>
375         * buildbot/status/builder.py (BuilderStatus): small docs patches
376         from Greg Ward.. thanks!
377         * buildbot/process/base.py (Build): same
379 2007-11-29  Brian Warner  <warner@lothar.com>
381         * buildbot/slave/commands.py (Mercurial._maybeFallback): add an
382         _abandonOnFailure call to the fallback, to skip the 'update' step
383         if the checkout fails.
384         (Mercurial._maybeFallback): More fixes: look for error messages
385         generated by every version of hg from 0.7 to the current 0.9.5,
386         including development versions as of rev 92991422a847. Also make
387         sure to return the exit code of non-fallbackable errors so that
388         other steps can attempt a workaround.
390 2007-11-28  Brian Warner  <warner@lothar.com>
392         * buildbot/slave/commands.py (Mercurial._maybeFallback): improve
393         hg fallback so that it works when the client hg is new and the
394         server hg is old (the error message is different in this case).
396 2007-11-27  Brian Warner  <warner@lothar.com>
398         * buildbot/test/test_p4poller.py: hush pyflakes warning
400         * buildbot/slave/commands.py (Mercurial._maybeFallback): when hg
401         is doing a 'clone' operation, to a remote repository (e.g. over
402         HTTP), and either the server or the client is hg-0.9.1 or older,
403         'hg clone' cannot accept a --rev argument: instead, you have to
404         clone the tip and then update back to the desired revision. Added
405         code to detect this failure mode and fall back to the clone+update
406         scheme. Closes #122 and #103.
407         (ShellCommand.__init__): add a keepStderr= flag to support this
409         * buildbot/test/test_vc.py (VCBase._do_vctest_clobber_2): add a
410         test that does a checkout to a specific version, to exercise the
411         mercurial limitation workaround.
412         (Mercurial.serveHTTP): add code to test hg checkout over HTTP,
413         using mercurial's built-in 'hg serve' command. Because of
414         limitations in hg, this code uses a randomly-selected TCP
415         port (rather than claiming a free one), so every once in a while
416         this test is going to fail because of a port-number collision.
418         * buildbot/test/test_vc.py (GitHelper.capable): skip Git tests if
419         the version of Git installed is older than 1.2.x . Git 1.1.3
420         doesn't accept 'git init' (it wants 'git init-db' instead) and the
421         branch tests fail. I know that Git 1.5.3.6 works. I don't know
422         what the dividing line is.. if someone can figure it out, please
423         update this check. Also, if someone can make buildbot's git
424         support handle older versions, please do that too! Addresses #130.
426 2007-11-21  Brian Warner  <warner@lothar.com>
428         * lots: improve Git support, AMAZING patch from Haavard
429         Skinnemoen, complete with unit tests and docs, thanks! Closes #130.
430         * buildbot/scripts/tryclient.py (GitExtractor): add 'try' support
431         * buildbot/slave/commands.py (Git): accept branch and revisions,
432         and use 'git' instead of the 'cogito' wrapper
433         * buildbot/steps/source.py (Git.__init__): same
434         * buildbot/test/test_vc.py (BaseHelper.runCommand): offer control
435         over env=
436         (BaseHelper.do): same
437         (BaseHelper.dovc): same
438         (Git): unit tests for Git support. Wow!
439         * docs/buildbot.texinfo (Git): docs for Git support. Double Wow!
440         * contrib/git_buildbot.py: commit-hook script for git
443         * buildbot/changes/p4poller.py (P4Source._finished): don't let a
444         failure cause us to stop polling. Thanks to John Backstrand for
445         the patch. Closes #135.
446         * buildbot/test/test_p4poller.py (TestP4Poller.testFailedChanges):
447         change this to match
448         (TestP4Poller.testFailedDescribe): same
450         * buildbot/status/web/waterfall.py (WaterfallStatusResource.body):
451         fix timezone calculation, we were always emitting DST, even in
452         winter. Thanks to Charles Lepple and John Saxton for the patch.
453         Closes #137.
454         * buildbot/test/test_web.py (Waterfall.test_waterfall._check1): same
457         * lots: a whole batch of patches from Benoit Sigoure, referenced
458         in ticket #138. Thanks!
460         * buildbot/master.py (BuildMaster.loadConfig): builder names that
461         begin with an underscore are now reserved, so prohibit them from
462         appearing in the config file.
463         * NEWS: announce this change.
465         * buildbot/status/web/base.py: add buttons (to one_line_per_build
466         and one_box_per_builder) to force/stop builds on all Builders at
467         once.
468         * buildbot/status/web/baseweb.py: same
469         (OneBoxPerBuilder.body): add links to the per-Builder page
471         * buildbot/status/web/builder.py: same
473         * buildbot/status/web/builder.py (StatusResourceBuilder.body):
474         factor out force/stop form generation
475         * buildbot/status/web/base.py: same
476         * buildbot/status/web/build.py: same
478         * buildbot/status/web/builder.py (StatusResourceBuilder.force):
479         simplify some 'if' statements
480         (StatusResourceBuilder.build_line): add a 'Stop Build' button next
481         to the 'Force Build' button, so you can start and stop a build
482         from the same place.
483         (StatusResourceBuilder.force): redirect back to the waterfall,
484         rather than the index page
485         (StatusResourceBuilder.ping): same
486         * buildbot/status/web/build.py (StatusResourceBuild.stop): same
488         * buildbot/slave/bot.py (Bot.remote_setBuilderList): don't
489         consider the 'info' directory as a leftover directory. Patch from
490         Benoit Sigoure, ticket #138.
491         (others): remove trailing whitespace
493 2007-11-01  Brian Warner  <warner@lothar.com>
495         * buildbot/status/web/builder.py (StatusResourceBuilder.build_line):
496         if there's no current step, don't try to display its description.
497         Same crash as in #96, this time in the web page. Closes #111.
499         * buildbot/status/web/base.py (OneLineMixin.make_line): tolerate
500         results == None (i.e. when the build hasn't finished yet);
501         previously this code exploded when trying to find a CSS class for
502         that results value. Patch from Greg Ward. Closes #118.
504         * buildbot/status/client.py (RemoteBuildStep.remote_getLogs):
505         IBuildStepStatus.getLogs() returns a list, not a dict. Patch from
506         Fabrice Crestois. Closes #121.
508 2007-10-31  Brian Warner  <warner@lothar.com>
510         * buildbot/status/words.py (Contact.emit_status): if there's no
511         current step, don't try to display its description. This should
512         fix the crash when asking the irc bot about builds which are
513         waiting for a build-wide Lock. Closes #96.
515         * buildbot/status/tinderbox.py (TinderboxMailNotifier): add
516         'columnName' argument, from a patch by Ben Hearsum. Closes #120.
518 2007-10-16  Brian Warner  <warner@lothar.com>
520         * buildbot/status/web/slaves.py (BuildSlavesResource.body): fix
521         timestamp, I was using %M (minutes) where I meant to be using
522         %b (abbreviated month name). Closes #109.
524 2007-10-13  Brian Warner  <warner@lothar.com>
526         * README (COPYING): make it clear that buildbot is distributed under
527         the GPL (version 2)
528         * COPYING: add a copy of the GPLv2 to the source tree
529         * MANIFEST.in: .. and to the source distribution too
531 2007-10-10  Brian Warner  <warner@lothar.com>
533         * buildbot/status/builder.py (Status.getURLForThing): update this
534         to match new URL layout, I completely forgot about it. Closes #112.
535         * buildbot/test/test_web.py (GetURL): add unit tests
537         * buildbot/status/web/build.py (BuildsResource.getChild): fix
538         silly typo which prevented the Build page from ever offering
539         control options like 'Stop Build'. Thanks to Aaron Hsieh for the
540         catch. Closes #114.
541         * buildbot/test/test_webparts.py (Webparts._do_page_tests): it'd
542         be nice to test this
544         * buildbot/__init__.py (version): bump to 0.7.6+ while between
545         releases
546         * docs/buildbot.texinfo: same
548 2007-09-30  Brian Warner  <warner@lothar.com>
550         * buildbot/__init__.py (version): Releasing buildbot-0.7.6
551         * docs/buildbot.texinfo: same
553 2007-09-30  Brian Warner  <warner@lothar.com>
555         * NEWS: small updates, remove duplicate items from the 0.7.5 notes
556         * setup.py: install all test files from buildbot/test/mail/* . Also
557         update URL to point at buildbot.net
558         * MANIFEST.in: update with new files
560         * buildbot/status/web/baseweb.py (WebStatus.setupSite): ugh, yes
561         auto-create an empty public_html directory, otherwise we get
562         internal server errors instead of 404s.
564         * README: reference buildbot.net, remove CVSToys section (does
565         anyone still use it?)
567         * buildbot/status/web/baseweb.py (WebStatus): emit a useful log
568         message when public_html/ is missing (indicating that you should
569         probably run 'upgrade-master'), and don't auto-create an empty
570         directory in that case.
572         * contrib/darcs_buildbot.py: refactor internals a bit, make it
573         possible to use as an importable module (to make it easier to
574         write some unit tests for it)
576         * buildbot/status/web/baseweb.py (Waterfall.__init__): add a
577         DeprecationWarning for Waterfall, advising users to switch over to
578         WebStatus instead.
580         * NEWS: update with user-visible changes since the last release
582         * buildbot/status/web/waterfall.py
583         (WaterfallStatusResource.get_reload_time): if the suggest a
584         reload time of less than 15 seconds, give them 15 seconds instead
585         of ignoring their request entirely, because that'd be confusing.
587         * buildbot/steps/source.py (Mercurial.computeSourceRevision): log a
588         warning if we must invoke the last-change-is-most-recent guess
590         * buildbot/status/web/baseweb.py (Waterfall.__init__): if an old
591         Waterfall is running in an upgraded master (which is the usual
592         case for folks who have followed the instructions to run
593         'upgrade-master' but who have not yet resolved all the
594         DeprecationWarnings), prefer the buildbot.css from public_html/
595         rather than the one passed in on the buildbot= argument.
596         Otherwise, the resulting pages don't quite use CSS right..
597         sometimes it works, sometimes it doesn't, and I don't know why.
598         Sites that are using custom CSS will see the default CSS until
599         they modify public_html/buildbot.css to include their
600         customizations.
602         * docs/buildbot.texinfo (WebStatus): explain robots.txt a bit more
603         * buildbot/status/web/robots.txt (Disallow): update to cover all
604         dynamically-generated pages
606         * buildbot/status/web/base.py (map_branches): when we see 'trunk',
607         include both 'trunk' and None in the output list, since some VC
608         systems (SVN, frequently) refer to trunk as 'trunk'.
610         * buildbot/status/web/waterfall.py (WaterfallStatusResource):
611         point the 'welcome' link explicitly at index.html, rather than
612         '.', so that old Waterfall users can reach it and discover all the
613         new pages.
615         * buildbot/status/web/base.py (OneLineMixin.make_line): add the
616         build's text to the end of the line, without a CSS class so it
617         remains uncolored.
619         * buildbot/interfaces.py (IStatus.generateFinishedBuilds): add a
620         'max_search=' argument, to limit the number of builds that are
621         examined while trying to find ones that match the other criteria.
622         This helps to limit the work we do, since otherwise we might have
623         to trawl through all history.
624         (IBuilderStatus.generateFinishedBuilds): same
625         * buildbot/status/builder.py (Status.generateFinishedBuilds): same
626         (BuilderStatus.generateFinishedBuilds): same
628         * buildbot/status/web/base.py (OneLineMixin.make_line): stringify
629         our got_revision before checking its length: SVN (at least) still
630         reports numeric values for this.
631         * buildbot/status/web/build.py (StatusResourceBuild.body): same
632         * buildbot/status/web/xmlrpc.py
633         (XMLRPCServer.xmlrpc_getAllBuildsInInterval): same, also stop
634         serving a completely fake revision
636         * buildbot/scripts/runner.py (Maker.check_master_cfg): prepend
637         basedir to sys.path, to mimic what a real buildmaster would have
638         access to, since it is common for master.cfg to import helper
639         classes from .py files in the buildmaster directory, and we want
640         config-file checking to accomodate this.
642         * buildbot/status/web/base.py (map_branches): when referring to
643         branches through WebStatus (i.e. by appending ?branch=FOO query
644         arguments to the URL), make "trunk" mean trunk, by mapping it to
645         None before passing it to generateFinishedBuilds() and the like.
646         * buildbot/status/web/baseweb.py (OneLinePerBuild.body): same
647         (OneBoxPerBuilder.body): same, also improve display of branches in
648         the HTML a bit
649         * buildbot/status/web/waterfall.py (BuildTopBox.getBox): same
650         (WaterfallStatusResource.buildGrid): same. Note that this filters
651         Changes as well as Builds.
652         * docs/buildbot.texinfo (Buildbot Web Resources): remove the
653         caveat about trunk branches, now that it's fixed
655         * buildbot/status/web/base.py (OneLineMixin): refactor, move this
656         from builder.py, use it on the Builder page too
658         * buildbot/status/web/builder.py (StatusResourceBuilder): same
659         * buildbot/status/web/baseweb.py (OneLinePerBuild): display branch
660         names, add some CSS classes
661         * buildbot/status/web/classic.css (td.box): new class, for
662         OneBoxPerBuild
664         * docs/buildbot.texinfo (WebStatus): update docs
666         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): remove
667         the trailing "M" indicator that tells us this is a modified file.
668         This should help with mode="update" builds that modify files
669         in-place. Thanks to "Oz" (chris at santacruzgames.com) for the
670         patch.
672         * buildbot/scripts/runner.py (upgradeMaster): improvements: write
673         new copies of files (to .new) when those files already exist,
674         check the master.cfg file for errors (and give DeprecationWarnings
675         a chance to be displayed).
676         * buildbot/test/test_runner.py: add more tests
677         * docs/buildbot.texinfo (Upgrading an Existing Buildmaster): docs
679 2007-09-29  Brian Warner  <warner@lothar.com>
681         * buildbot/steps/source.py (Mercurial.computeSourceRevision): take
682         the revision id from the last change in our list, since that's the
683         best we can do without knowing the full ancestry graph. Closes #103.
685         * buildbot/scripts/sample.cfg: use buildstep instances in
686         f.addStep, to demonstrate the (correct) modern usage.
687         * docs/examples/hello.cfg: bring this up to date. Closes #79.
688         * docs/examples/twisted_master.cfg: add a big warning about how
689         old this is
690         * docs/examples/glib_master.cfg: delete this one entirely, it is
691         ancient and not a very useful example anyways
693         * buildbot/status/web/base.py (HtmlResource.render): keep track of
694         HTTPChannels, so we can shut them down at reconfig time (when the
695         WebStatus goes away). Closes #102.
696         * buildbot/status/web/baseweb.py (WebStatus.__init__): same
697         (WebStatus.registerChannel): same
698         (WebStatus.stopService): do .loseConnection() here
700         * buildbot/test/test_webparts.py (Webparts.testPages): reload the
701         WebStatus, make sure all pages are still retrievable. I thought
702         this would exercise a bug, but it turns out that it was firefox
703         caching connections (and continuing to talk to the old WebStatus
704         even though I'd loaded a new one).
705         * buildbot/status/web/baseweb.py (WebStatus): add some comments
706         (WebStatus.__repr__): include id() in the repr
708         * buildbot/status/tinderbox.py (TinderboxMailNotifier): allow
709         this to specify an errorparser. From Ted Mielczarek and the
710         mozilla crew. Closes #94.
712         * buildbot/changes/bonsaipoller.py (BonsaiParser): "Make
713         bonsaipoller ignore funkyness in xml output for empy log
714         messages", from Axel Hecht. Closes #90.
715         * buildbot/test/test_bonsaipoller.py
716         (TestBonsaiPoller.testMergeEmptyLogMsg): same
718         * buildbot/status/tinderbox.py (TinderboxMailNotifier.buildStarted):
719         respect 'builders' arg, from Ben Hearsum. Closes #89.
721         * buildbot/scripts/runner.py (stop): increase the timeout from 5
722         seconds to 10, to give heavily loaded machines a better chance to
723         finish shutting down. Addresses (partially) #68.
724         * buildbot/scripts/logwatcher.py (LogWatcher.TIMEOUT_DELAY): same,
725         on startup
726         * buildbot/scripts/reconfig.py (Reconfigurator.run): same
727         * buildbot/scripts/startup.py (Follower._failure): update message
729         * buildbot/changes/bonsaipoller.py: apply changes from the Mozilla
730         team, to fix some bugs and avoid the use of blocking urlopen().
731         closes #61.
732         * buildbot/test/test_bonsaipoller.py: same
734 2007-09-28  Brian Warner  <warner@lothar.com>
736         * buildbot/buildslave.py (BuildSlave): add notify_on_missing=
737         argument, to send email about buildslaves which are disconnected
738         for more than an hour. Closes #64.
739         * buildbot/test/test_slaves.py (BuildSlave.test_mail_on_missing):
740         test it
741         * docs/buildbot.texinfo (When Buildslaves Go Missing): document it
742         (MailNotifier): add docs for this too
745         * buildbot/status/web/baseweb.py (OneBoxPerBuilder): make this page
746         respect branch= queryargs, by restricting the builds displayed to
747         those matching the given branch names
748         * buildbot/status/web/waterfall.py (BuildTopBox): same
750         * buildbot/test/test_web.py (WaterfallSteps.test_urls.FakeRequest):
751         fix a test failure by adding .prepath to this fake object
753         * buildbot/status/web/*: big set of changes to WebStatus, cleaning
754         up generation of relative URLs. With luck, this should play with
755         reverse proxies much better now.
756         * buildbot/test/test_webparts.py: new test for most of the subpages
757         * buildbot/test/test_web.py (base_config): add enough of a config
758         to exercise more Waterfall code
760 2007-09-27  Brian Warner  <warner@lothar.com>
762         * buildbot/status/web/build.py (StatusResourceBuild.body): use a
763         relative URL to the buildbot welcome page, rather than
764         getBuildbotURL.
765         * buildbot/status/web/builder.py (StatusResourceBuilder.body): same
767         * buildbot/status/web/base.py (HtmlResource.title): change the
768         default title of all Buildbot-generated page to "Buildbot"
769         * buildbot/status/web/builder.py (StatusResourceBuilder.getTitle):
770         change the title to include the Builder name
771         * buildbot/status/web/build.py (StatusResourceBuild.getTitle):
772         same, and also show the build number
773         (StatusResourceBuild.rebuild): after using the 'Rebuild' button,
774         redirect the browser to the Builder page
776 2007-09-26  Brian Warner  <warner@lothar.com>
778         * buildbot/status/web/baseweb.py (OneBoxPerBuilder.body): fix URL
779         problem with the build links
781 2007-09-25  Brian Warner  <warner@lothar.com>
783         * buildbot/status/web/base.py (HtmlResource.render): fix addSlash
784         to emit relative URLs instead of using URLPath,
786         * docs/buildbot.texinfo (WebStatus): provide an example
788         * buildbot/status/web/baseweb.py (OneBoxPerBuilder): new status
789         page, shows a simple table with one row per Builder. Still pretty
790         ugly, but functional.
791         * buildbot/status/web/index.html: reference it
793         * buildbot/status/web/waterfall.py (Spacer): make this *not*
794         inherit from builder.Event, so that show_events=false doesn't hide
795         spacers, since that would make the waterfall weirdly compressed.
797         * buildbot/status/web/waterfall.py (HELP): put the View button in
798         its own section, so it doesn't get visually confused with the
799         reload-timer section
800         (WaterfallStatusResource.body): make the '[help]' links more
801         visually distinct from each other, and add a link to the Welcome
802         page
803         * buildbot/status/web/slaves.py (BuildSlavesResource): handle
804         unused buildslaves without exploding
806         * buildbot/status/web/waterfall.py
807         (WaterfallStatusResource.body.with_args): don't use req.URLPath,
808         it gives us absolute paths that break proxies
809         * buildbot/status/web/base.py (HtmlResource.path_to_root): fix
810         this, it was giving bad results when the Waterfall is behind a
811         reverse proxy.
813         * buildbot/scripts/runner.py (upgradeMaster): first phase of the
814         new 'upgrade-master' command, which will bring an old buildmaster
815         directory up-to-date. Right now the only thing it does is populate
816         public_html/ if it wasn't already there. Still to do: check the
817         other files, add documentation.
818         * buildbot/test/test_runner.py (Create.testUpgradeMaster): test it
819         (Create.failUnlessSameFiles): use sets.Set() for 2.3 compatibility
821 2007-08-13  Brian Warner  <warner@lothar.com>
823         * buildbot/changes/changes.py (Change.get_HTML_box): add a tooltip
824         that contains the checkin comments when you hover over the entry
825         in the 'changes' column of the waterfall. Thanks to Frederic Leroy
826         for the patch.
828         * buildbot/status/web/waterfall.py (WaterfallStatusResource): improve
829         'help' page linkage
831         * buildbot/status/web/about.py (AboutBuildbot): add an 'about'
832         page with versions of python, buildbot, and twisted
833         * buildbot/status/web/baseweb.py (WebStatus.setupUsualPages): same
834         * buildbot/status/web/index.html: add links to most pages
835         * docs/buildbot.texinfo (Buildbot Web Resources): update docs
837         * buildbot/status/web/robots.txt: put a robots.txt in new installs
838         which discourages robot access to all large dynamically-generated
839         pages. The intention is that the index page and the 'about' page
840         are the only ones which should be crawlable.
841         * buildbot/scripts/runner.py (Maker.public_html): same
842         (createMaster): same
843         * setup.py: ship index.html and robots.txt in source distributions
845         * buildbot/status/web/waterfall.py: add 'refresh' query arg, to
846         activate automatic reloading of the page (using a meta Refresh:
847         tag). Closes #69.
848         (WaterfallHelp): new page to explain all the nifty query arguments
849         you can use on the Waterfall, along with forms to set them for
850         you. From this page, you can add filters for builder=, branch=,
851         show_events=, as well as turning on reload=.
852         (WaterfallStatusResource.buildGrid): new query args: last_time=,
853         first_time=, show_time=, num_events= . The old show= is still
854         accepted, but the new builder= is preferred. We ignore empty
855         branch= arguments, to make the WaterfallHelp form easier to
856         implement.
857         (WaterfallStatusResource.head): new method to add text to the
858         <head> of the page.
859         * buildbot/status/web/base.py (HtmlResource.content): use head()
860         * buildbot/status/web/baseweb.py (OneLinePerBuild.body): ignore
861         empty branch= arguments
862         (OneLinePerBuildOneBuilder.body): same
864 2007-08-12  Brian Warner  <warner@lothar.com>
866         * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
867         new query args: 'last_time' is a timestamp of the top-most event
868         on the display, 'first_time' is a timestamp for the bottom-most
869         event. 'show_time' is the difference between them, and overrides
870         'first_time'. 'num_events' puts an upper limit on the number of
871         timestamps that will be displayed on the left hand edge.
872         (WaterfallStatusResource.body): add a 'next page' link to the
873         bottom, which shows the events that come just after those shown on
874         the current page. This is a first step towards #67, but we need
875         some more controls before we can close that one.
877         * buildbot/buildslave.py (BuildSlave): these are now MultiService
878         instances too, and live as children of the BotMaster. The main
879         advantage of this approach is that BuildSlaves can know when they
880         are being removed (so they can shut off the upcoming
881         when-do-we-email-an-admin-because-we-lost-our-slave timer).
882         * buildbot/interfaces.py (IBuildSlave): marker interface so we can
883         identify which service children are BuildSlaves
884         * buildbot/master.py (BuildMaster.loadConfig_Slaves): handle the
885         Checker updates here, but delegate the rest to..
886         (BotMaster.loadConfig_Slaves): .. here, which looks at the
887         BotMaster's service children to identify the old slaves. I think
888         the previous approach of using master.slaves was broken in the
889         face of config updates that modified BuildSlave instances but did
890         not completely replace them.
891         * docs/buildbot.texinfo (Developer's Appendix): note the change to
892         the Service hierarchy
894         * buildbot/status/web/slaves.py (BuildSlavesResource): new status
895         page (at URL /buildslaves/) to view status of all buildslaves at
896         once, including how long it's been since we last heard from them,
897         and which Builders use them.
899         * buildbot/status/web/baseweb.py: fix title of one-line-per-build
900         pages
902         * buildbot/interfaces.py (IStatus.getSlaveNames): new method to
903         list all buildslaves
905         * buildbot/buildslave.py (BuildSlave.messageReceivedFromSlave):
906         use the BuildSlave to keep track of the last time we've heard from
907         the buildslave. This is updated upon receipt of any message from
908         any SlaveBuilder (which generally means when RemoteCommands are
909         giving us status updates, as BuildSteps run). In the future this
910         will include slave pings too.
911         * buildbot/process/base.py
912         (Build.setupBuild): give each BuildStep a reference to the BuildSlave
913         * buildbot/process/buildstep.py:
914         (BuildStep.setBuildSlave): accept that reference
915         (BuildStep.runCommand): pass the reference on to the RemoteCommand
916         (RemoteCommand.remote_update): update the timestamp
917         (RemoteCommand.remote_complete): same
918         * buildbot/test/runutils.py (StepTester.makeStep): match the change
919         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
920         * buildbot/interfaces.py (ISlaveStatus.lastMessageReceived): new
921         interface to retrieve this timestamp
922         * buildbot/status/builder.py (SlaveStatus): track a copy of the
923         timestamp
926         * buildbot/status/web/baseweb.py (OneLineMixin.make_line): tighten
927         up the format a bit
928         (OneLinePerBuild.body): use a <ul> instead of <div>s
929         (OneLinePerBuildOneBuilder.body): same
931         * contrib/darcs_buildbot.py (makeChange): handle moved files too,
932         by adding the file's new name to the list of changed files. This
933         ought to be sufficient for things like isFileImportant and trial
934         tests that only exercise tests for files that have been modified.
935         Closes #31.
937         * buildbot/status/web/xmlrpc.py (XMLRPCServer): add preliminary
938         XMLRPC server to the WebStatus page. This only has two methods
939         right now (getAllBuildsInInterval and getBuild), but we'll be
940         adding more in the future. This server is extracted from the
941         trac-plugin branch.
943         * buildbot/status/web/baseweb.py (OneLinePerBuild): refactor using
944         generateFinishedBuilds, and improve the data displayed.
945         * buildbot/status/web/build.py (StatusResourceBuild): rearrange
946         the per-Build page, add some information like ETA and got_revision
947         * buildbot/status/web/builder.py (StatusResourceBuilder): same,
948         adding a list of recently completed builds
949         * buildbot/status/web/base.py (css_classes): factor this out
951         * buildbot/interfaces.py (IStatus.generateFinishedBuilds): define
952         new method, to make status display classes easier to write,
953         especially the WebStatus 'one_line_per_build' page.
954         (IBuilderStatus.generateFinishedBuilds): same
955         * buildbot/status/builder.py (BuilderStatus.generateFinishedBuilds):
956         (Status.generateFinishedBuilds): implement it
958         * buildbot/process/factory.py (GNUAutoconf.__init__): allow
959         'source' to be a BuildStep instance, since BuildFactory accepts
960         them now.
961         (CPAN.__init__): same
962         (Distutils.__init__): same
963         (Trial.__init__): same
965         * buildbot/interfaces.py (IBuildStatus.getProperty): note that
966         this might raise KeyError
968 2007-08-07  Brian Warner  <warner@lothar.com>
970         * buildbot/slave/commands.py (P4): use 'p4user' to construct the
971         'Owner:' field of the view, rather than 'p4logname', since
972         p4logname comes from the buildslave's environment and seems
973         unlikely to ever do the right thing. Thanks to Wade Brainerd for
974         the patch. Closes #40.
976         * buildbot/buildslave.py (BuildSlave.__init__): add max_builds=,
977         which imposes a per-slave limit on how many builds are allowed to
978         run simultaneously. This has a the same scope than the SlaveLock,
979         but is different because max_builds= gives the buildmaster the
980         freedom to assign the build to a different slave, whereas the
981         SlaveLock doesn't get tested until after the build is irrevocably
982         assigned to a slave. Therefore using max_builds= will improve
983         utilization in the presence of multiple buildslaves that are
984         attached to the same Builder. This completes the incorporation of
985         Dustin Mitchell's patches, and closes ticket #48. Thanks Dustin!
986         * buildbot/process/builder.py (SlaveBuilder.buildFinished): when
987         any Builder finishes, potentially trigger *all* Builders, since
988         max_builds= may have stalled someone else while waiting for the
989         slave.
990         * buildbot/scripts/sample.cfg: mention max_builds=
991         * buildbot/test/test_run.py (ConcurrencyLimit): test it
992         * docs/buildbot.texinfo (Buildslave Specifiers): document it
994         * buildbot/test/test_run.py (CanStartBuild._do_test2): tests which
995         inherit from RunMixin do not need to call master.stopService()
996         themselves, since RunMixin.tearDown does that. The double call
997         fails on Twisted-2.0.x, which didn't happen to protect against it.
998         * buildbot/test/test_slaves.py (BuildSlave.test_track_builders): same
1000         * buildbot/buildslave.py (BuildSlave.addSlaveBuilder): third patch
1001         from #48, this one to have the BuildSlave objects track
1002         SlaveBuilders, so they'll be able to use that knowledge to
1003         influence their canStartBuild() response.
1004         * buildbot/process/builder.py (SlaveBuilder.attached): call it
1005         (SlaveBuilder.detached): same
1006         * buildbot/test/test_slaves.py (BuildSlave): test it
1008         * buildbot/buildslave.py (BuildSlave.canStartBuild): incorporate
1009         the second of Dustin's #48 patches, this one adding a method to
1010         the BuildSlave that allows it to decide whether it is willing to
1011         participate in a build or not.
1012         (SlaveBuilder.isAvailable): use canStartBuild() to decide
1014         * buildbot/test/test_run.py (CanStartBuild): test for it
1016         * all: incorporate the first of four patches by Dustin Mitchell
1017         from ticket #48, working towards improving control over slave
1018         concurrency. The first patch is to use a long-lived BuildSlave
1019         object per slave, on which other behavior can be added later. I've
1020         modified his patch considerably.
1021         * buildbot/buildslave.py (BuildSlave): move class out of
1022         slave/__init__.py (where it would get loaded by the slave as well
1023         as the master, making dependencies trickier), and merge it with
1024         BotPerspective. Now these BuildSlave instances are created once in
1025         the master.cfg file, and not destroyed until they are either
1026         removed from the config file or changed so
1027         much (name/password/class changes) that we cannot continue to use
1028         the old one. This affects config files: they must use
1029         'from buildbot.buildslave import BuildSlave' instead of using
1030         'from buildbot.slave import BuildSlave'.
1031         * buildbot/master.py: move BotPerspective out
1032         (BuildMaster.loadConfig_Slaves): examine old and new slaves,
1033         add or remove as necessary, update the rest using data from
1034         the new config file.
1035         * buildbot/slave/__init__.py: move BuildSlave out
1036         * buildbot/test/test*.py: import BuildSlave from the new place
1037         * buildbot/scripts/sample.cfg: update to match
1038         * docs/buildbot.texinfo: update to match
1039         * buildbot/process/builder.py: update comments to match
1041 2007-08-02  Brian Warner  <warner@lothar.com>
1043         * buildbot/status/web/baseweb.py (OneLinePerBuild): improve
1044         one-line-per-build pages a bit, add a header, refactor slightly
1046         * buildbot/test/test_maildir.py (MaildirTest.testMaildir): cleanup
1047         the TimeOutError timer, patch by Dustin Mitchell.
1049 2007-08-01  Brian Warner  <warner@lothar.com>
1051         * buildbot/status/web/baseweb.py (OneLinePerBuild): make this
1052         mostly work (branch= is still ignored, we need a useful header)
1053         (OneLinePerBuildOneBuilder.body): this too
1055         * buildbot/status/web/builder.py (StatusResourceBuilder.force):
1056         bring this up-to-date w.r.t. recent refactorings, and fix
1057         redirections to bounce the browser to the top page after hitting
1058         the 'force' button. This needs to be improved, but at least it now
1059         redirects to a valid page.
1060         (StatusResourceBuilder.ping): same
1061         (StatusResourceBuilder.getChild): same, although I think this code
1062         might be dead anyways
1064         * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
1065         a branch= query argument, to filter the display down to builds and
1066         changes that involve the given branch. You can add multiple
1067         branch= arguments to see multiple branches (using a logical OR).
1068         Note that there is no way to include the default branch (i.e.
1069         None, i.e. trunk) yet, there is still work to be done to allow for
1070         simple+uniform names of branches (i.e. removing the VC-specific
1071         details of how branches are implemented, so calling the branch
1072         'beta4' even though the SVN checkout step requires
1073         'branches/beta4').
1074         * buildbot/status/builder.py (BuilderStatus.eventGenerator): same
1075         * buildbot/changes/changes.py (ChangeMaster.eventGenerator): same
1076         * buildbot/interfaces.py (IEventSource.eventGenerator): same
1077         * docs/buildbot.texinfo (Buildbot Web Resources): document it
1079         * all: bring import statements up-to-date: don't import
1080         __future__, assume cPickle and cStringIO are always available.
1081         Also remove #!/usr/bin/python lines from non-scripts, my editor
1082         has been a bit over-enthusiastic about stuffing them into new .py
1083         files.
1085         * buildbot/status/web/index.html: put a link to the waterfall page
1086         on the index, otherwise first-time users of WebStatus aren't going
1087         to see anything very interesting.
1089         * buildbot/interfaces.py (IEventSource): document this interface.
1090         Thanks to Dustin Mitchell for the patch. Closes #60.
1091         * buildbot/status/builder.py (BuilderStatus): same
1092         * buildbot/changes/changes.py (ChangeMaster): same
1094         * buildbot/status/web/waterfall.py (WaterfallStatusResource.buildGrid):
1095         add a query arg of 'show_events=true' to display non-build events,
1096         like slaves attaching/detaching and reconfig events, or
1097         'show_events=false' to hide them. The default is 'true'.
1098         * docs/buildbot.texinfo (Buildbot Web Resources): document it
1100         * web-parts: merge in web-parts branch. Lots of changes. The new
1101         functionality is to add buildbot.status.html.WebStatus, which is a
1102         superset of the Waterfall that adds new status pages and serves
1103         regular files from BASEDIR/public_html/ , which is now the preferred
1104         place to put robots.txt, buildbot.css, and index.html .
1105         * buildbot/scripts/runner.py: the 'create-master' command now
1106         creates public_html/ too, and populates it with a couple of
1107         static files.
1108         * buildbot/status/web: split waterfall code into smaller pieces
1110 2007-07-31  Brian Warner  <warner@lothar.com>
1112         * buildbot/scripts/startup.py (launch): import twistd.run in a
1113         different way to hush pyflakes
1114         * buildbot/process/builder.py: remove unused import
1116 2007-07-30  Brian Warner  <warner@lothar.com>
1118         * buildbot/interfaces.py (ISourceStamp): cleanup patch by Dustin
1119         Mitchell: pass SourceStamps around rather than branch/version/etc
1120         tuples. Thanks Dustin! Closes #70.
1121         * buildbot/sourcestamp.py (SourceStamp): insist that .changes is a
1122         tuple rather than a list, to avoid surprising mutations
1123         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1124         * buildbot/status/mail.py (MailNotifier.buildMessage): same
1125         * buildbot/status/builder.py (BuildStatus.getSourceStamp): same
1126         * buildbot/test/test_status.py (Subscription): same
1127         * buildbot/test/test_control.py (Force): same
1128         * buildbot/test/test_buildreq.py (Request.testMerge): same
1130 2007-07-29  Brian Warner  <warner@lothar.com>
1132         * buildbot/scripts/sample.cfg: remove the spurious 'builders'
1133         variable, since it wasn't used and is confusing in the presence of
1134         c['builders'] (which *is* used). Thanks to Thomas Vander Stichele
1135         for the suggestion.
1137         * buildbot/status/web/waterfall.py (WaterfallStatusResource): update
1138         the Buildbot home-page link to point at buildbot.net instead of 
1139         sourceforge, and add a current-version query parameter so we can
1140         get some statistics on which versions are in use out there.
1142 2007-07-28  Brian Warner  <warner@lothar.com>
1144         * buildbot/master.py (BuildMaster.loadConfig): replace c['sources']
1145         with c['change_source'], leaving c['sources'] for backwards
1146         compatibility (but deprecated), scheduled for removal in 0.8.0
1147         * docs/buildbot.texinfo: same
1148         * buildbot/test/test_config.py: verify that c['sources'] still works
1149         * buildbot/test/test_*.py: replace c['sources'] with c['change_source']
1150         * buildbot/scripts/sample.cfg: update to match
1152         * buildbot/changes/mail.py (MaildirSource): parse with python's
1153         stdlib 'email' module, which has been available since python2.2,
1154         and drop use of the 'rfc822' module, which has been depreceated
1155         since python2.3 .
1156         * buildbot/test/test_maildir.py: same: use parse_file() not parse
1158         * buildbot/test/test_maildir.py (MaildirTest.testMaildir): oops,
1159         this needs to match the renaming in test/mail/msg*
1161         * README (SETTING UP A BUILD MASTER): fix capitalization-typo.
1162         Closes SF#1752648.
1164         * buildbot/test/test_mailparse.py: rename sample emails a bit
1165         * buildbot/test/mail/msg*: same
1167         * buildbot/changes/mail.py (SVNCommitEmailMaildirSource): add a
1168         parser for the "commit-email.pl" script that is shipped with SVN,
1169         written by Justin Mason. Thanks! Closes SF#1072845.
1170         * buildbot/test/mail/svn-commit.*: sample messages
1171         * buildbot/test/test_mailparse.py (TestSVNCommitEmail): test it
1172         * docs/buildbot.texinfo (SVNCommitEmailMaildirSource): docs
1174 2007-07-27  Brian Warner  <warner@lothar.com>
1176         * buildbot/changes/mail.py: refactor: move parsing into a method
1177         named 'parse', each parser type gets a separate subclass. Remove
1178         the old 'sep' argument (hardcode it to '/'), fix usage of prefix=
1179         to be a simple leading-substring match. Add a warning to the logs
1180         if prefix= does not end in a slash, since that's probably a
1181         mistake. Fix both places where a prefix= mismatch would skip all
1182         subsequent files in the same email, instead of just skipping the
1183         one that didn't match.
1184         * buildbot/test/test_mailparse.py: match changes
1186         * docs/buildbot.texinfo (Getting Source Code Changes): refactor
1187         docs on email-based ChangeSources
1189         * docs/buildbot.texinfo (Getting Source Code Changes): move all
1190         the changesource types up a level, removing the one-entry menu in
1191         the process
1193         * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename
1194         c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave
1195         instances instead of tuples. Closes #63.
1196         * buildbot/slave/__init__.py (BuildSlave): define marker class
1197         * buildbot/scripts/sample.cfg: use c['slaves'] in sample config
1198         * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves']
1199         * buildbot/test/test_*.py: update tests to match
1200         * buildbot/test/test_config.py (ConfigTest.testBots): verify that
1201         the c['bots'] backwards-compatibility handler works
1203 2007-07-26  Brian Warner  <warner@lothar.com>
1205         * buildbot/changes/hgbuildbot.py (hook): add an in-process
1206         Mercurial change-sending hook, contributed by Frederic Leroy.
1207         Thanks! Addresses #50.
1208         * docs/buildbot.texinfo (MercurialHook): document it
1210         * buildbot/changes/hgbuildbot.py: change the way imports are done,
1211         to make it compatible with at least hg-0.9.1 and the current 0.9.4
1213 2007-07-17  Brian Warner  <warner@lothar.com>
1215         * buildbot/process/buildstep.py (BuildStep.getLog): add a
1216         convenience method to retrieve a log added with
1217         addLog()/addCompleteLog()/etc or logfiles= . I should have added
1218         this two years ago..
1220 2007-07-03  Brian Warner  <warner@lothar.com>
1222         * buildbot/slave/commands.py (ShellCommand._startCommand): when
1223         logging the environment variables, put one variable on each line,
1224         rather than having one really long line with all of them. This
1225         should make them a bit more readable and not trigger the
1226         horizontal scrollbar (when viewing it in a web browser) quite so
1227         much. Thanks to Albert Hofkamp for the patch.
1229         * buildbot/steps/shell.py (ShellCommand): allow workdir= to be a
1230         WithProperties instance. Thanks to Axel Hecht for the patch.
1231         Closes #43.
1232         * buildbot/test/test_properties.py (Interpolate.testWorkdir): test it
1233         * docs/buildbot.texinfo (Build Properties): document it
1234         * buildbot/slave/commands.py (ShellCommand._startCommand): create the
1235         workdir if it didn't already exist.
1237         * docs/buildbot.texinfo (Scheduler Types): correct the description
1238         of Dependent schedulers. Thanks to Greg Ward for the patch.
1240         * buildbot/steps/source.py (SVN.startVC): when applying a patch,
1241         add "[patch]" to the step's display. Thanks to Dustin Mitchell for
1242         the patch. Closes #49.
1244         * buildbot/slave/commands.py (rmdirRecursive): chmod everything to
1245         0700 before removing it, to deal with situations where a build will
1246         leave files around without write permissions and the 'copy' or
1247         'clobber' VC checkout modes need to blow away the tree first.
1248         Thanks to Steve Milner for the suggestion and the patch (which I
1249         mangled horribly). Closes #29.
1250         * buildbot/test/test_slavecommand.py (Utilities.test_rmdirRecursive):
1251         test for it
1253         * buildbot/test/runutils.py (RunMixin.disappearSlave): oops, add
1254         an allowReconnect= argument to let callers control whether they
1255         want this don't-let-it-reconnect behavior, since some tests care.
1256         Factor out the .continueTrying=False lines from those callers.
1257         * buildbot/test/test_slaves.py: same
1258         * buildbot/test/test_run.py: same
1260 2007-07-02  Brian Warner  <warner@lothar.com>
1262         * buildbot/test/runutils.py (RunMixin.disappearSlave): once a
1263         slave has been disappeared, don't let it reconnect. This was
1264         causing an intermittent failure in test_slaves.py, when the slave
1265         that was supposed to be gone managed to come back by the end of
1266         the test and affect the count.
1267         * buildbot/test/test_slaves.py (Slave.testFallback2): minor
1268         refactorings
1269         * buildbot/process/builder.py (SlaveBuilder.__repr__): added some
1270         diagnostic messages to track down this problem
1271         (Builder.startBuild): same
1273         * buildbot/process/builder.py (Builder.maybeStartBuild): choose
1274         the slave randomly rather than always taking the first one. Thanks
1275         to Pike for the patch. Closes #36.
1276         * buildbot/test/test_slaves.py: match the change. to avoid huge
1277         changes to the tests, I added a CHOOSE_SLAVES_RANDOMLY flag which
1278         enables/disables the round-robin-ness (enabled by default), and
1279         some unit tests disable it.
1280         * docs/buildbot.texinfo (Buildmaster Architecture): document it
1282         * buildbot/slave/bot.py (BuildSlave.__init__): rename the 'host'
1283         argument to 'buildmaster_host', to make it more obvious that this
1284         points to the buildmaster. Thanks to Bob Proulx for the
1285         suggestion.
1286         * buildbot/scripts/runner.py (slaveTAC): same
1287         * buildbot/test/test_runner.py (Create.testSlave): match the change
1289         * contrib/hg_buildbot.py: patch from Frederic Leroy to make this
1290         work better.
1292 2007-06-17  Brian Warner  <warner@lothar.com>
1294         * buildbot/test/test_config.py (Factories.testAllSteps): make sure
1295         we can round-trip all of our current step classes by calling
1296         getStepFactory() and using the results to make a clone of the
1297         original step.
1299         * buildbot/steps/maxq.py: fix import errors. Guess this hasn't been
1300         used in a while..
1302         * buildbot/process/factory.py (BuildFactory.addStep): To simplify
1303         the config file, we're moving to using actual instances instead of
1304         the (class, kwargs) 'step specification' tuples. BuildFactory
1305         still keeps a list of tuples internally, but when real instances
1306         are passed in to addStep(), they are asked for their class and
1307         kwargs using the new BuildStep.getStepFactory method. BuildFactory
1308         accepts both instances and the tuple form, and converts instances
1309         to the tuple form, but the instance form is preferred because it
1310         gives the Steps a chance to do argument validation. Closes: #11.
1312         * buildbot/process/buildstep.py (BuildStep.__init__): record the
1313         factory information necessary to implement getStepFactory. The
1314         addFactoryArguments() method can be used to include arguments that
1315         aren't passed to the BuildStep base class constructor.
1316         (BuildStep.setBuild):
1317         (BuildStep.setDefaultWorkdir): new methods to take parameters that
1318         are needed for live BuildSteps but not to construct the specification
1319         tuples that are stashed in the factory.
1321         * buildbot/process/base.py (Build.setupBuild): pass 'build' and
1322         'workdir' into new BuildSteps by using methods instead of
1323         arguments. This makes the constructor for BuildSteps a lot
1324         simpler.
1326         * buildbot/steps/*.py: update to match this change. Basically this
1327         means adding calls to addFactoryArguments() in the __init__
1328         methods to capture the arguments that aren't passed through to the
1329         base class.
1330         * buildbot/steps/shell.py (ShellCommand.setDefaultWorkdir): copy
1331         the new workdir (if any) into the RemoteShellCommands arguments.
1332         * buildbot/steps/source.py: allow workdir= to be optional,
1333         implement setDefaultWorkdir() since we don't inherit from
1334         (CVS): finally remove old clobber=/export=/copydir= arguments,
1335         in favor of the mode= argument that's been around forever now.
1336         * buildbot/steps/transfer.py: remove build= argument
1338         * buildbot/test/*.py: update to match, generally by turning all
1339         build= arguments into subsequent calls to s.setBuild()
1340         * buildbot/test/test_config.py (Factories): verify that we can
1341         use either BuildStep instances or class/kwarg tuples in both
1342         BuildFactory.addStep and BuildFactory.__init__
1344         * docs/buildbot.texinfo (Build Steps): document the new approach,
1345         mention compatibility with the old approach, update all examples
1346         to use the new style.
1348 2007-06-16  Brian Warner  <warner@lothar.com>
1350         * buildbot/changes/svnpoller.py: when the poll fails, don't kill
1351         the LoopingCall, just eat the failure so that we'll poll again
1352         next time. This should allow us to tolerate (e.g.) sf.net SVN
1353         failures more gracefully. Many thanks to Dustin Mitchell for the
1354         patch. Closes #34.
1356 2007-05-17  Brian Warner  <warner@lothar.com>
1358         * buildbot/status/words.py: refactor the IRC status bot into
1359         separate 'Contact' and 'Channel' classes. The base Contact class
1360         contains the interaction code: commands and responses. The
1361         IRCContact subclass (and IrcStatusBot 'Channel') handle the
1362         IRC-specific aspects. The plan is to write other subclasses for
1363         other IM protocols like AIM and Jabber.
1365 2007-04-16  Brian Warner  <warner@lothar.com>
1367         * CREDITS: update list of contributors. Thank you all!
1369 2007-04-13  Brian Warner  <warner@lothar.com>
1371         * buildbot/status/mail.py (MailNotifier): add the project name to
1372         the subject line and message body, to make it easier to
1373         distinguish email coming from different buildmasters. Thanks to
1374         Benoit Sigoure for the patch.
1375         * buildbot/test/test_status.py (Mail): update to match
1377 2007-03-24  Brian Warner  <warner@lothar.com>
1379         * buildbot/steps/transfer.py: open all files in 'b' binary mode to
1380         avoid text-conversion problems between DOS/windows and unix.
1381         Thanks to Phil Thompson for the patch. Fixes SF#1674927.
1383 2007-03-03  Brian Warner  <warner@lothar.com>
1385         * buildbot/status/html.py (_hush_pyflakes): hush a pyflakes
1386         warning about the use of Waterfall here
1388 2007-03-01  Brian Warner  <warner@lothar.com>
1390         * buildbot/interfaces.py (IStatus.getBuilder): mention exceptions
1392 2007-02-28  Brian Warner  <warner@lothar.com>
1394         * buildbot/changes/p4poller.py (P4Source): apply change from Scott
1395         Lamb to use a more optimal form of 'p4 changes', to reduce server
1396         load. He reports that this optimization was added to p4d release
1397         2005.2, but it should work in all versions. Closes #27.
1398         * buildbot/test/test_p4poller.py: match it
1400 2007-02-27  Brian Warner  <warner@lothar.com>
1402         * buildbot/status/web/*.py: move all web status stuff into a
1403         separate directory, in anticipation of splitting it into smaller
1404         pieces and adding more files. html.py was getting way too big.
1405         * buildbot/status/classic.css: move it too
1406         * setup.py: add the new sub-package
1407         * buildbot/test/test_web.py: match the changes
1408         * MANIFEST.in: handle the move of classic.css
1410 2007-02-07  Brian Warner  <warner@lothar.com>
1412         * contrib/OS-X/*: add some launchd .plist files for automatically
1413         starting a buildmaster or buildslave under OS-X (10.4 or later).
1414         Thanks to Mark Pauley for these.
1416 2007-02-06  Brian Warner  <warner@lothar.com>
1418         * docs/buildbot.texinfo (Requirements): update requirements to
1419         stop claiming compatibility with python-2.2 or twisted-1.3.x .
1420         Closes #13.
1421         * README: mention python-2.5 and twisted-2.5 compatibility
1423         * buildbot/clients/debug.py: hush pyflakes warnings by removing a
1424         redundant import
1425         * buildbot/scripts/startup.py: same, by removing twisted-1.3.0
1426         compatibility
1427         * buildbot/status/builder.py: same, by requiring cStringIO
1428         * buildbot/status/words.py: same, remove twisted-1.3.0 compat
1429         * buildbot/test/test_vc.py: same
1430         * buildbot/test/test_web.py:
1431         * buildbot/test/test_steps.py: same, remove unused import
1433         * buildbot/status/html.py (StatusResourceBuild.body): oops, close
1434         the FORM tag
1436         * buildbot/master.py (BuildMaster.loadConfig): warn the user if we
1437         see any Builders that don't have Schedulers to drive them
1439         * buildbot/master.py (BotPerspective.__repr__): fit bitrot, the
1440         attributes this uses went away
1442         * contrib/bb_applet.py (MyApplet.filled): add a small prefs
1443         dialog, to allow you to reset the buildmaster and force
1444         connect/disconnect. Correctly handle losing the buildmaster
1445         connection (by switching the display to the hexnut, at which point
1446         you can use the 'Connect' menu item to reconnect).
1448         * buildbot/steps/source.py (Source.start): if we're using a patch,
1449         add it as a LogFile to the checkout/update step. This will turn
1450         into a link on the waterfall page.
1452         * buildbot/scripts/tryclient.py (Try.createJob): implement --diff
1453         option, to take the patch from a pre-made file rather than
1454         generating it from the local tree. Thanks to Robert Helmer for the
1455         idea. Closes #15 (the Trac ticket on the new http://buildbot.net/).
1456         * buildbot/scripts/runner.py (TryOptions): add --diff,
1457         --patchlevel, and --baserev options
1458         * buildbot/scheduler.py (Try_Jobdir.parseJob): treat a baserev of ""
1459         as None, meaning HEAD.
1460         * buildbot/sourcestamp.py (SourceStamp): update docstring to
1461         indicate that baserev=None means HEAD
1462         * docs/buildbot.texinfo (try --diff): document it
1464         * buildbot/test/test_steps.py (BuildStep): remove use of
1465         reactor.iterate(), although the technique I replaced it with is a
1466         gross polling hack that must be cleaned up properly some day. This
1467         was the last use of reactor.iterate in the entire tree, yay.
1469 2007-02-05  Brian Warner  <warner@lothar.com>
1471         * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
1472         is one of the three known values, otherwise we emit some confusing
1473         messages later on. Thanks to Grig Gheorghiu for the catch.
1475 2007-01-30  Brian Warner  <warner@lothar.com>
1477         * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
1478         Hearsum contributed a patch to let BonsaiPoller work with results
1479         that contain non-ascii characters. Closes SF#1632641.
1481 2007-01-27  Brian Warner  <warner@lothar.com>
1483         * Makefile (release): produce both .tar.gz and .zip source bundles.
1484         Closes SF#1222216.
1486 2007-01-23  Brian Warner  <warner@lothar.com>
1488         * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
1489         * buildbot/changes/monotone.py: same
1491         * buildbot/changes/maildir.py: combine several files into one,
1492         clean up maildir.py to use Services properly.
1493         * buildbot/changes/maildirtwisted.py: remove
1494         * buildbot/changes/maildirgtk.py: remove, it wasn't used by
1495         buildbot anyways.
1496         * buildbot/changes/mail.py: match the change
1497         * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
1498         * buildbot/test/test_maildir.py: remove use of reactor.iterate()
1500         * buildbot/slave/commands.py (command_version): bump to "2.3" to
1501         indicate that the buildslave knows about the 'bzr' command
1503 2007-01-22  Brian Warner  <warner@lothar.com>
1505         * buildbot/process/builder.py (Builder.fireTestEvent): don't use
1506         'with', it will become a reserved work in python2.6 .
1508         * contrib/bb_applet.py: add a simple gnome-panel applet, to
1509         display a terse summary of buildbot status.
1510         * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
1511         some icons, small versions of the Blender object that lives in
1512         docs/images/icon.blend
1514         * buildbot/steps/source.py (Bzr): add Bazaar-ng support
1515         * buildbot/slave/commands.py (Bzr): same
1516         * buildbot/scripts/tryclient.py (BzrExtractor): same
1517         (SourceStampExtractor.dovc): modify this to allow non-zero exit
1518         status, since 'bzr diff' does that
1519         * buildbot/test/test_vc.py (Bzr): same
1520         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1521         add notes on bzr
1522         (Bzr): document it
1524 2007-01-20  Brian Warner  <warner@lothar.com>
1526         * contrib/darcs_buildbot.py: tidy up the progress messages
1528 2007-01-17  Brian Warner  <warner@lothar.com>
1530         * contrib/darcs_buildbot.py: enhance to handle multiple patches
1531         being pushed at a time. This keeps state in the repository in a
1532         small file named .darcs_buildbot-lastchange, but that shouldn't
1533         interfere with normal repository operations. Fixes SF#1534049.
1534         * buildbot/clients/sendchange.py (Sender): make a single Sender
1535         capable of sending Changes with different usernames.
1537 2006-12-11  Brian Warner  <warner@lothar.com>
1539         * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
1540         scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
1541         buildbot.changes.mail a long time ago, but I forgot to add the
1542         DeprecationWarning until now.
1544         * buildbot/process/maxq.py: remove this, the functionality now
1545         lives in buildbot.steps.maxq
1547         * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
1548         * buildbot/clients/gtkPanes.py: remove unused import
1550         * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
1551         that was meant to provide a special Reporter to run inside trial
1552         and give the buildslave lots of machine-readable status. We never
1553         finished this project.
1555         * buildbot/changes/bonsaipoller.py: remove unused imports
1556         * buildbot/changes/svnpoller.py: same
1557         * buildbot/process/builder.py: same
1558         * buildbot/process/buildstep.py: same
1559         * buildbot/slave/bot.py: hush pyflakes warning
1560         * buildbot/status/tests.py: remove unused imports
1561         * buildbot/status/tinderbox.py: same
1562         * buildbot/steps/python_twisted.py: same
1564         * buildbot/process/step.py: remove this file, these names were
1565         deprecated in 0.7.5 and are now being removed.
1566         * buildbot/process/step_twisted.py: same
1567         * buildbot/test/test_steps.py (ReorgCompatibility): remove test
1569         * buildbot/twcompat.py: remove the empty file, yay it is gone
1571         * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
1572         tw-2.0.0 and newer have the method we need.
1573         (getProcessOutputAndValue): same
1574         (which): remove this method, tw-2.0.0 t.p.procutils has it
1576         * buildbot/twcompat.py (implements): remove this method
1577         * buildbot/*: import implements() from zope.interface directly
1579         * buildbot/status/mail.py: stop falling back to importing
1580         twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
1581         support
1583         * buildbot/twcompat.py (Interface): remove this import
1584         * buildbot/*: import Interface from zope.interface directly
1586         * buildbot/twcompat.py (providedBy): remove this method
1587         * buildbot/*: turn all uses of providedBy(obj, iface) into
1588         iface.providedBy(obj)
1590         * buildbot/twcompat.py (maybeWait): remove this method, now that
1591         we no longer maintain compatibility with Twisted<=1.3.0 .
1592         Twisted-2.0.0 and later allow trial methods to return Deferreds
1593         directly.
1594         * buildbot/test/*: remove all uses of maybeWait
1596         * buildbot/__init__.py (version): bump to 0.7.5+ while between
1597         releases
1598         * docs/buildbot.texinfo: same
1600 2006-12-10  Brian Warner  <warner@lothar.com>
1602         * buildbot/__init__.py (version): Releasing buildbot-0.7.5
1603         * docs/buildbot.texinfo: set version to match
1605 2006-12-10  Brian Warner  <warner@lothar.com>
1607         * README (REQUIREMENTS): update for release
1608         * NEWS: update for release
1609         * buildbot/slave/commands.py (command_version): mention that this
1610         version (2.2) was released with buildbot-0.7.5
1612         * buildbot/test/test_config.py (StartService.testStartService):
1613         inhibit the usual read-config-on-startup behavior, since otherwise
1614         the log.err that gets recorded causes the test to fail
1616         * buildbot/status/builder.py (LogFile.finish): forget about all
1617         subscribers once the log has finished, since after that point
1618         we're never going to use them again. This might help free up some
1619         memory somewhere.
1621         * buildbot/clients/debug.py: update to use gtk.main_quit() rather
1622         than the old/deprecated gtk.mainquit()
1624 2006-12-09  Brian Warner  <warner@lothar.com>
1626         * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
1627         better when we can't open the masterdst file
1629         * buildbot/scripts/startup.py (Follower._failure): add missing
1630         import statement for BuildSlaveDetectedError
1632         * buildbot/steps/transfer.py (FileUpload): cleanup
1633         (FileDownload): same. Add tests for slave version, add mode=.
1634         * buildbot/slave/commands.py (SlaveFileUploadCommand): same
1635         (SlaveFileDownloadCommand): same
1636         * buildbot/test/test_transfer.py: enhance tests
1637         * buildbot/test/runutils.py (makeBuildStep): create a fake form of
1638         step.slaveVersion
1640 2006-12-08  Brian Warner  <warner@lothar.com>
1642         * buildbot/scripts/runner.py (sendchange): halt the reactor on
1643         both success *and* failure. Without this, the 'buildbot
1644         sendchange' command would hang if it could not contact the
1645         buildmaster or deliver the Change, which would generally cause the
1646         user's commit/record/checkin command to hang too. Thanks to
1647         Christian Unger for the catch.
1649 2006-12-06  Brian Warner  <warner@lothar.com>
1651         * NEWS: update with items for the next release
1653         * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
1654         whimsical example pulled from a punch-drunk email I sent out late
1655         one night.
1656         (Transferring Files): document some of the other parameters
1657         (Adding LogObservers): update to 0.7.5 buildbot.steps.*
1658         (SVNPoller): rename svnpoller.SvnSource to SVNPoller
1659         * buildbot/test/test_svnpoller.py: same
1660         * buildbot/changes/svnpoller.py (SVNPoller): same
1662 2006-11-26  Brian Warner  <warner@lothar.com>
1664         * docs/buildbot.texinfo (Build Properties): remind users that
1665         WithProperties must appear in a command= list, not as a top-level
1666         instance.
1667         * buildbot/steps/shell.py (ShellCommand.start): and assert that
1668         we're sending a list or a single string to the RemoteShellCommand
1670         * buildbot/scheduler.py (Nightly): Improve docs slightly.
1672         * buildbot/scripts/startup.py (start): skip the whole
1673         watch-the-logfile thing under windows, since it needs os.fork()
1675         * buildbot/scripts/runner.py (restart): remove the old message
1676         that got printed after the buildbot was restarted.. it most cases
1677         it didn't get printed at the right time anyways
1679 2006-11-25  Brian Warner  <warner@lothar.com>
1681         * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
1682         follow twistd.log and print lines until the process has started
1683         started properly. For the buildmaster, this means until the config
1684         file has been parsed and accepted. For the buildslave, this means
1685         until we've connected to the master. We give up after 5 seconds in
1686         any case. Helpful error messages and troubleshooting suggestions
1687         are printed when we don't see a successful startup. This closes the
1688         remainder of SF#1517975.
1689         * buildbot/scripts/startup.py: moved app startup code to here
1690         * buildbot/scripts/logwatcher.py: utility class to follow log
1691         * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
1692         * buildbot/slave/bot.py: announce our BuildSlaveness to the log
1693         so the LogWatcher can tell the difference between a buildmaster
1694         and a buildslave
1696 2006-11-24  Brian Warner  <warner@lothar.com>
1698         * docs/examples/twisted_master.cfg: update to match the version
1699         in use on twistedmatrix.com
1700         (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
1701         was using before stopped working, but 'irc.freenode.net' works
1702         just fine.
1704         * buildbot/scripts/runner.py (run): oops, forgot to enable the new
1705         'reconfig' command
1707         * buildbot/clients/base.py (TextClient.not_connected): upon
1708         UnauthorizedLogin failures, remind the user to connect to the
1709         PBListener port instead of the slaveport.
1710         (TextClient.disconnected): shut down more quietly
1711         * docs/buildbot.texinfo (statuslog): add another reminder
1713         * buildbot/scripts/runner.py (Options.subCommands): rename
1714         'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
1715         'sighup' as an alias.
1716         * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
1717         reconfig command to follow twistd.log and print all of the lines
1718         from the start of the config-file reload to its completion. This
1719         should make it a lot easier to discover bugs in the config file.
1720         Use --quiet to disable this behavior. This addresses half of
1721         SF#1517975, the other half will be to add this same utility to
1722         'buildbot start' and 'buildbot restart'.
1723         * docs/buildbot.texinfo (Loading the Config File): same
1724         (Shutdown): same
1726         * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
1727         method, it has been deprecated for a long time. Use
1728         IBuilderControl.requestBuild instead.
1729         * buildbot/process/builder.py (BuilderControl.forceBuild): remove
1730         * buildbot/master.py (BotPerspective.perspective_forceBuild): same
1731         * buildbot/slave/bot.py (Bot.debug_forceBuild): same
1732         * buildbot/test/test_control.py (Force.testForce): same
1733         * buildbot/test/test_run.py: use requestBuild instead
1735         * buildbot/clients/debug.py: replace 'Force Build' button with
1736         'Request Build' (which just adds one to the queue), add Ping
1737         Builder, add branch/revision fields to Request Build.
1738         * buildbot/clients/debug.glade: same
1739         * buildbot/master.py: update interface to match. This creates an
1740         incompatibility between new debugclients and old buildmasters.
1742         * buildbot/process/builder.py (Builder._attached): delay the call
1743         to maybeStartBuild for a reactor turn, to avoid starting a build
1744         in the middle of a reconfig (say, if the new Builder uses a new
1745         slave which is already connected).
1747 2006-11-23  Brian Warner  <warner@lothar.com>
1749         * buildbot/test/test_transfer.py: appease pyflakes
1750         * buildbot/test/test_steps.py: same
1752         * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
1753         keeps pyflakes from finding undefined names
1755         * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
1756         Builder no longer induces a disconnect/reconnect cycle. This means
1757         that any builds currently in progress will not be interrupted, and
1758         any builds which are queued in the Builder will not be lost. This
1759         is implemented by having the new Builder extract the state (i.e.
1760         all pending Builds and any desired SlaveBuilders) from the old
1761         Builder.
1762         (BotPerspective): refactor. The BotPerspective no longer keeps
1763         track of all the Builders that want to use this slave; instead, it
1764         asks the BotMaster each time it needs this list. This removes
1765         addBuilder and removeBuilder. Clean up attached() to acquire all
1766         the slave's information in a more atomic fashion. updateSlave() is
1767         now the way to make sure the slave is using the right set of
1768         Builders: just call it after everything else has been
1769         reconfigured.
1770         (BotMaster): refactor, removing addBuilder/removeBuilder and
1771         replacing them with an all-at-once setBuilders() call.
1773         * buildbot/test/test_slaves.py (Reconfig): new test case to
1774         exercise this functionality
1775         * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
1776         * buildbot/slave/commands.py (WaitCommand): same
1778         * docs/buildbot.texinfo (Loading the Config File): document the
1779         changes
1781         * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
1782         SlaveBuilder to have its parent Builder changed.
1783         (SlaveBuilder.isAvailable): new method to give access to state,
1784         which is now a private attribute
1785         (SlaveBuilder.buildStarted,buildFinished): new methods to inform
1786         the SlaveBuilder about how it is being used. These methods update
1787         its internal state. buildFinished() is now the place that invokes
1788         maybeStartBuild() on its parent Builder.
1789         (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
1790         new Builder to take over for an old one, transferring state from
1791         the old one.
1792         (Buider): refactor the way that SlaveBuilders are used to match,
1793         giving them a bit more autonomy.
1794         (Builder.buildFinished): this no longer calls maybeStartBuild():
1795         instead the SlaveBuilder calls it on whoever its parent Builder is
1796         at the time. This way, when an old Builder is replaced by a new
1797         one, and there was a build in progress during the transition, when
1798         that build finishes, it will be the new Builder that is told about
1799         the newly available slave so it can start a new build.
1801         * buildbot/process/base.py (Build.startBuild._release_slave): when
1802         the Build finishes, tell the SlaveBuilder that they've been
1803         released.
1805         * buildbot/status/builder.py (SlaveStatus): add some new setter
1806         methods for use by BotPerspective, to keep some attributes more
1807         private
1809         * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
1810         called by the buildmaster.
1811         (Bot.setBuilderList): instead, we locally announce any leftover
1812         directories based upon which Builders we were told about. The
1813         master doesn't really care; it's the local admin who may or may not
1814         wish to delete them.
1817         * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
1818         to allow use of python2.4 or whatever. This tool still requires
1819         python2.3 or newer.
1821 2006-11-19  Brian Warner  <warner@lothar.com>
1823         * NEWS (IStatusLog.readlines): more news items
1825 2006-11-18  Brian Warner  <warner@lothar.com>
1827         * NEWS: start collecting items for the next release.
1829 2006-11-04  Brian Warner  <warner@lothar.com>
1831         * buildbot/changes/bonsaipoller.py: apply updates from Ben
1832         Hearsum. Closes SF#1590310.
1833         * buildbot/test/test_bonsaipoller.py: and tests
1835         * buildbot/status/tinderbox.py
1836         (TinderboxMailNotifier.buildMessage): send out a "testfailed"
1837         status when the build results in WARNINGS. Patch from Dave
1838         Liebreich. Closes SF#1587352.
1840         * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
1841         linux-vs-osx behavior difference w.r.t. reading from files that
1842         have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
1843         to Mark Rowe for the patch.
1845 2006-10-15  Brian Warner  <warner@lothar.com>
1847         * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
1848         method name was misspelled in the interface definition. Thanks to
1849         Roy Rapoport for the catch.
1851 2006-10-13  Brian Warner  <warner@lothar.com>
1853         * docs/buildbot.texinfo (Adding LogObservers): update sample code
1854         to match the great Steps renaming
1856         * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
1857         Maybe I should run my own unit tests before recording a big
1858         change. Good thing I've got a buildbot to remind me.
1860 2006-10-12  Brian Warner  <warner@lothar.com>
1862         * buildbot/steps/transfer.py: rework __init__ and args setup
1863         * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
1864         docs improvements
1865         * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
1866         when opening the target file, only catch IOError (to report via
1867         stderr/rc!=0), let the others be reported as normal exceptions
1869 2006-10-08  Brian Warner  <warner@lothar.com>
1871         * contrib/svn_watcher.py: fix security holes by using proper argv
1872         arrays and subprocess.Popen() rather than commands.getoutput().
1873         Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
1874         is deprecated in favor of buildbot/changes/svnpoller.py, and will
1875         probably be removed by the next release.
1876         * CREDITS: add Nick
1878 2006-10-04  Brian Warner  <warner@lothar.com>
1880         * buildbot/steps/python.py (PyFlakes.createSummary): skip any
1881         initial lines that weren't emitted by pyflakes. When the pyflakes
1882         command is run under a Makefile, 'make' will echo the command it
1883         runs to stdio, and that was getting logged as a "misc" warning.
1884         * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
1885         * buildbot/test/test_steps.py (testPyFlakes3): another test
1887 2006-10-01  Brian Warner  <warner@lothar.com>
1889         * buildbot/status/html.py (HtmlResource.render): if we get a
1890         unicode object from our content() method, encode it into utf-8
1891         like we've been claiming to all along. This allows the comments
1892         and author names from svnpoller.py to be delivered properly.
1894         * buildbot/changes/svnpoller.py (SvnSource.create_changes):
1895         de-unicodify filenames before creating the Change, because the
1896         rest of buildbot is unlikely to handle them well. Leave the 'who'
1897         field as a unicode object.. I don't think there's anything that
1898         will break very soon, and it will probably nudge us towards
1899         accepting unicode everywhere sooner or later. Stop using the
1900         "date" field that comes out of SVN, since it is using the
1901         repository's clock (and timezone) and what we care about is the
1902         buildmaster's (otherwise Changes from the future show up later
1903         than the builds they triggered).
1904         * buildbot/test/test_svnpoller.py (Everything.test1): match the
1905         change to .when
1907         * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
1908         Suvbersion repository polling ChangeSource. I've hacked it up
1909         considerably: any bugs are entirely my own fault. Thank you
1910         Niklaus!
1911         * buildbot/test/test_svnpoller.py: tests for it
1912         * docs/buildbot.texinfo (SvnSource): document it
1914 2006-09-30  Brian Warner  <warner@lothar.com>
1916         * buildbot/scheduler.py (Periodic): submit a reason= to the
1917         BuildSet to indicate which Scheduler triggered the build. Thanks
1918         to Mateusz Loskot for the suggestion.
1919         (Nightly): same
1920         * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
1922         * buildbot/changes/p4poller.py (P4Source): some minor stylistic
1923         changes: set self.loop in __init__, remove unused volatile=
1925         * docs/buildbot.texinfo (.buildbot config directory): add more
1926         docs on the .buildbot/options keys used by "buildbot try"
1927         * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
1928         (Try.deliverJob): same
1930         * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
1931         from Robert Helmer
1932         (BonsaiPoller): same
1934         * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
1935         close the filehandle when we stop watching the file. Before, the
1936         filehandle was only closed when the LogFileWatcher was
1937         garbage-collected, which could be quite a while in the future. If
1938         it was still open by the time the next build started, windows will
1939         refuse to let the new build delete the old build/ directory. Fixes
1940         SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
1941         #twisted for the catch.
1943 2006-09-29  Brian Warner  <warner@lothar.com>
1945         * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
1946         from Robert Helmer
1948 2006-09-25  Brian Warner  <warner@lothar.com>
1950         * setup.py: the new buildbot.steps module wasn't being installed.
1951         Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
1952         (testmsgs): add the extra stuff from buildbot/test/* so you can
1953         run unit tests on an installed copy of buildbot, not just from
1954         the source tree.
1956         * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
1957         columns of 'svnlook changed' output contain status information, so
1958         strip [:4] instead of [:6]. Depending upon what the status flags
1959         were, this would sometimes lead to mangled filenames. Thanks to
1960         Riccardo Magliocchetti for the patch. Closes SF#1545146.
1962         * buildbot/steps/source.py (Monotone): initial Monotone support,
1963         contributed by Nathaniel Smith. Still needs docs and tests, but
1964         this code has been in use on the Monotone buildbot for a long
1965         time now.
1966         * buildbot/slave/commands.py (Monotone): slave-side support
1967         * buildbot/changes/monotone.py (MonotoneSource): polling change
1968         source
1970         * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
1971         contributed a Change Source that polls a Bonsai server (a
1972         kind of web-based viewcvs CGI script).
1974         * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
1975         Hearsum contributed a status plugin which sends email in the same
1976         format that Tinderbox does: this allows a number of tinderbox
1977         tools to be driven by Buildbot instead. Thanks Ben!
1979 2006-09-24  Brian Warner  <warner@lothar.com>
1981         * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
1982         Thanks to Robert Helmer for the patch.
1984         * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
1985         BuildStatus about the buildslave name at the *beginning* of the
1986         build, rather than at the end. Thanks to Alexander Lorenz for the
1987         patch.
1988         * buildbot/status/html.py (StatusResourceBuild.body): always
1989         include the slavename in the build page, not just when the build
1990         has finished.
1991         * buildbot/status/mail.py (MailNotifier.buildMessage): include the
1992         slavename in the email message
1994 2006-09-21  Brian Warner  <warner@lothar.com>
1996         * buildbot/scripts/sample.cfg: update to use new BuildStep classes
1997         from buildbot.steps
1998         * docs/examples/glib_master.cfg: same
1999         * docs/examples/hello.cfg: same
2000         * docs/examples/twisted_master.cfg: same, update to current usage
2002 2006-09-19  Brian Warner  <warner@lothar.com>
2004         * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
2005         (PyFlakes.createSummary): make it compatible with python-2.2
2007         * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
2008         for at least the output-parsing parts of PyFlakes
2010 2006-09-18  Brian Warner  <warner@lothar.com>
2012         * buildbot/steps/python.py: oops, fix import of StringIO
2014 2006-09-17  Brian Warner  <warner@lothar.com>
2016         * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
2017         turns out that SVN-1.4.0 doesn't fail to update once you've
2018         replaced a file with a directory, unlike older versions of SVN and
2019         pretty much every other VC tool we support. Since what we really
2020         care about is that the update succeeds anyway, stop checking that
2021         the tree got clobbered and just assert that the build succeeded.
2022         (VCBase.printLogs): add a utility function for debugging
2024         * buildbot/process/step.py: oops, added extra imports by mistake
2026         * buildbot/changes/p4poller.py (P4Source._process_describe): do an
2027         rstrip() on the first line coming out of the 'p4 describe'
2028         process, to remove the stray ^M that Wade Brainerd reports seeing
2029         in the 'when' field. Fixes SF#1555985.
2031         * buildbot/master.py (BuildMaster.loadConfig): improve the error
2032         message logged when c['schedulers'] is not right
2033         * buildbot/scheduler.py (Scheduler.__init__): improve error
2034         message when a Scheduler() is created with the wrong arguments
2035         * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
2036         verify that these error messages are emitted
2038         * buildbot/process/buildstep.py: rename step.py to buildstep.py .
2039         The idea is that all the base classes (like BuildStep and
2040         RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
2041         will be a leftover backwards-compatibility file that only contains
2042         aliases for the steps that were moved out to buildbot.steps.*
2043         * lots: change imports to match
2044         * buildbot/process/step.py: add a DeprecationWarning if it ever
2045         gets imported
2047 2006-09-12  Brian Warner  <warner@lothar.com>
2049         * buildbot/scheduler.py (Scheduler.__init__): make sure that
2050         builderNames= is actually a sequence, since if you happen to give
2051         it a single builder-specification dictionary instead, it won't get
2052         caught by the existing assert. Thanks to Brett Neely for the
2053         catch.
2055         * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
2056         tests yet, alas.
2057         * docs/buildbot.texinfo (Python BuildSteps): document them
2058         (sendchange): include a link to PBChangeSource, since you need one
2060         * buildbot/steps/shell.py: clean up test-case-name line, remove some
2061         unnecessary imports
2062         * buildbot/steps/dummy.py: same
2064 2006-09-08  Brian Warner  <warner@lothar.com>
2066         * buildbot/steps/transfer.py (FileUpload,FileDownload): new
2067         BuildStep which lets you transfer files from the master to the
2068         slave or vice versa. Thanks to Albert Hofkamp for the original
2069         patch. Fixes SF#1504631.
2070         * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
2071         support for it
2072         (SlaveFileDownloadCommand): same
2073         * docs/buildbot.texinfo (Transferring Files): document it
2074         * buildbot/test/test_transfer.py: test it
2075         * buildbot/test/runutils.py (StepTester): new utility class for
2076         testing BuildSteps and RemoteCommands without Builds or Bots or PB
2077         * buildbot/test/test_steps.py (CheckStepTester): validate that the
2078         utility class works
2080         * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
2081         walk through StatusLogs one line at a time, mostly for the benefit
2082         of ShellCommand.createSummary methods. You can either walk through
2083         STDOUT or STDERR, but the default is STDOUT.
2085         * buildbot/status/builder.py (LogFile.readlines): implement it.
2086         Note that this is not yet memory-efficient, it just pulls the
2087         whole file into RAM and then splits it up with a StringIO.
2088         Eventually this should be a generator that only pulls chunks from
2089         disk as necessary.
2090         * buildbot/test/test_status.py (Log.testReadlines): test it
2092         * docs/buildbot.texinfo: update to match changes
2093         * buildbot/process/factory.py: stop using old definitions
2094         * buildbot/process/process_twisted.py: same
2095         * buildbot/test/test_*.py: same
2097         * buildbot/process/step_twisted.py: move definition to..
2098         * buildbot/steps/python_twisted.py: .. here, unfortunately python's
2099         relative-import mechanisms prevent this from being named 'twisted'
2100         or 'python/twisted' as I would have preferred.
2102         * buildbot/process/maxq.py: move definition to..
2103         * buildbot/steps/maxq.py: .. here, leave a compatibility import
2105         * buildbot/process/step.py: split the user-visible BuildSteps into
2106         separate files, all under buildbot/steps/
2107         * buildbot/steps/source.py: this holds VC-checkout steps like SVN
2108         * buildbot/steps/shell.py: this holds ShellCommand and friends
2109         * buildbot/steps/dummy.py: this holds the testing steps like Dummy
2111 2006-09-05  Brian Warner  <warner@lothar.com>
2113         * lots: run pyflakes, removed a lot of unused imports, changed the
2114         form of some conditional imports to remove false pyflakes
2115         warnings. There are still a number of warnings left, mostly from
2116         imports that are done for their side-effects.
2117         * buildbot/test/test_vc.py: import twisted.python.failure, since it
2118         was missing
2120 2006-08-26  Brian Warner  <warner@lothar.com>
2122         * buildbot/test/test_locks.py (Unit.testLater): make the tests
2123         compatible with twisted-1.3.0, for some reason I just can't seem
2124         to let go of the past.
2126 2006-08-25  Brian Warner  <warner@lothar.com>
2128         * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
2130         * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
2131         all logfiles= in startCommand(), rather than in start() . This
2132         makes it easier to have the 'stdio' log come before any secondary
2133         logfiles, which I feel makes the waterfall display more
2134         understandable.
2135         (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
2136         from ShellCommand up into LoggingBuildStep
2137         (LoggingBuildStep.__init__): move the handling of logfiles= from
2138         ShellCommand up to LoggingBuildStep, because startCommand is
2139         provided by LoggingBuildStep, whereas start() was specific to
2140         subclasses like ShellCommand and Source. This removes code
2141         duplication in those subclasses.
2142         (ShellCommand.__init__): same
2143         (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
2144         for a slave that's too old to understand logfiles= into a separate
2145         method, so it can live in ShellCommand. The rest of
2146         setupLogfiles() can live in LoggingBuildStep.
2148 2006-08-24  Brian Warner  <warner@lothar.com>
2150         * buildbot/locks.py (BaseLock): you can now configure Locks to
2151         allow multiple simultaneous owners. They still default to
2152         maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
2153         the patch.
2154         * docs/buildbot.texinfo (Interlocks): document the new options
2155         * buildbot/test/test_locks.py: add a bunch of new unit tests
2156         * buildbot/process/base.py (Build.acquireLocks): locks now offer
2157         waitUntilMaybeAvailable, not waitUntilAvailable
2158         * buildbot/process/step.py (BuildStep.acquireLocks): same
2159         * buildbot/master.py (BotMaster.getLockByID): real locks now use
2160         the whole lockid in their constructor, not just the name. Also,
2161         keep track of which real locks we've handed out by the full
2162         lockid, not just class+name, otherwise changing just the maxCount=
2163         in the master.cfg file would not actually cause a behavioral
2164         change
2166 2006-08-23  Brian Warner  <warner@lothar.com>
2168         * buildbot/__init__.py (version): bump to 0.7.4+ while between
2169         releases
2170         * docs/buildbot.texinfo: same
2172 2006-08-23  Brian Warner  <warner@lothar.com>
2174         * buildbot/__init__.py (version): Releasing buildbot-0.7.4
2175         * docs/buildbot.texinfo: set version to match
2176         * NEWS: update for 0.7.4
2177         * buildbot/slave/commands.py (command_version): mention that this
2178         version (2.1) was released with buildbot-0.7.4
2180 2006-08-22  Brian Warner  <warner@lothar.com>
2182         * README: update
2184         * CREDITS: new file, list of people who have helped. Thanks!
2185         * MANIFEST.in: ship it
2187         * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
2188         new diagrams, the user's manual is more informative than it was.
2189         Start shipping the .html user's manual (and generated .png
2190         images).
2191         * Makefile: update 'release' target to match
2193         * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
2194         test.. I think the web-parts effort will render it pointless well
2195         before it ever actually starts to work.
2197 2006-08-20  Brian Warner  <warner@lothar.com>
2199         * buildbot/changes/pb.py (PBChangeSource): fix and simplify
2200         meaning of the prefix= argument. It is now just a string which is
2201         stripped from the beginning of the filename. If prefix= is set but
2202         not found on any given filename, that filename is ignored. If all
2203         filenames in a Change are ignored, the Change is dropped. This is
2204         much simpler than the previous sep= nonsense, and I should have
2205         implemented it this way from the beginning. Effectively resolves
2206         SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
2207         Gedminas for the catch and suggested fixes.
2208         (ChangePerspective.perspective_addChange): implement the actual
2209         prefix comparison
2210         * buildbot/test/test_changes.py (TestChangePerspective): test it
2211         * docs/buildbot.texinfo (PBChangeSource): document it, explain
2212         how to properly use prefix=
2213         * docs/examples/twisted_master.cfg (source): update prefix= by
2214         adding the trailing slash
2217         * docs/examples/twisted_master.cfg: update to actual practice
2219         * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
2220         update test case to match new link text.. the HREF has both a
2221         class= setting and an enclosing [] pair that I didn't match in the
2222         test.
2224         * docs/buildbot.texinfo (ShellCommand.command=): explain why a
2225         list of strings is preferred over a single string with embedded
2226         spaces
2227         (ShellCommand.description=): explain that either single strings or
2228         a list of strings is acceptable, and why you might prefer one over
2229         the other. Add an example. Fixes SF#1524659, thanks to Paul
2230         Winkler for the catch.
2231         (Build Steps): update to use f.addStep() rather than using s()
2232         and the constructor list
2234         * buildbot/process/step.py (ShellCommand): accept either a single
2235         string or a list of strings in both description= and
2236         descriptionDone=
2237         * buildbot/test/test_steps.py (Steps.test_description): test it
2238         * buildbot/test/runutils.py (makeBuildStep): support for that test
2240         * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
2241         the Waterfall display a bit less ugly. Thanks to John O'Duinn for
2242         collecting the files and creating the patch.
2244         * docs/buildbot.texinfo (BuildStep URLs): document new feature:
2245         per-step URLs that will be displayed on the waterfall display,
2246         for things like the HTML output of code-coverage tools, when
2247         the results are hosted elsewhere.
2248         * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
2249         way to retrieve these URLs
2250         * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
2251         the method to retrieve these URLs. Also provide backwards
2252         compatibility for saved BuildStepStatus instances that didn't have
2253         the .urls attribute
2254         * buildbot/process/step.py (BuildStep.addURL): method to set these
2255         URLs from within a BuildStep
2256         * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
2257         (StepBox.getBox): give these external links a distinct CSS class
2258         named "BuildStep external" so a .css file can display them
2259         differently
2261         * buildbot/test/test_web.py (WaterfallSteps): test that we really
2262         do emit those links
2263         * buildbot/test/test_steps.py (Steps): test that we can all the
2264         URLs. Also add a bunch of other tests on methods that can be
2265         called from within BuildSteps
2266         * buildbot/test/runutils.py (makeBuildStep): add utility function
2268 2006-08-13  Brian Warner  <warner@lothar.com>
2270         * docs/buildbot.texinfo (BuildStep LogFiles): document them
2272 2006-08-10  Brian Warner  <warner@lothar.com>
2274         * docs/buildbot.texinfo (Index of master.cfg keys): add another
2275         index, this one of things like c['sources'] and c['schedulers']
2276         (indices): it looks like my clever idea of putting the @fooindex
2277         commands in between the @node and the @subsection (to make the
2278         HREF anchor jump to slightly above the section title, which works
2279         much better in html) confused texinfo horribly, so I'm moving the
2280         index tags back to be just after the @subsection marker. I also
2281         added extra lines between the @node/@section paragraph and the
2282         index tags, since I think maybe texinfo wants to see these be
2283         separate paragraphs.
2285         * docs/Makefile (images): make sure images get built when
2286         rendering the manual
2287         * docs/images/Makefile: same
2289         * buildbot/scripts/runner.py: rename 'buildbot master' to
2290         'buildbot create-master', and 'buildbot slave' to 'buildbot
2291         create-slave'
2292         * docs/buildbot.texinfo: same
2293         * README: same
2295         * docs/buildbot.texinfo: reimplement the "useful classes" index
2296         with actual texinfo indices. The .info rendering is a bit
2297         weird-looking but it works well, and the HTML rendering is quite
2298         nice. This also puts the index targets in the regular flow of the
2299         text, which is easier to maintain.
2301 2006-08-06  Brian Warner  <warner@lothar.com>
2303         * buildbot/slave/commands.py (ShellCommand.__init__): patch from
2304         Kevin Turner to prefer the environ= argument be a list rather than
2305         a string. If it is a list, it will be joined with a platform-local
2306         os.pathsep delimiter, and then prepended to any existing
2307         $PYTHONPATH value. This works better in cross-platform (i.e.
2308         windows buildslaves) environments when you need to push multiple
2309         directories onto the front of the path.
2310         (SlaveShellCommand): documented the new magic
2311         * docs/buildbot.texinfo (ShellCommand): documented the new magic
2312         in a user-visible form
2314         * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
2315         Turner to prefer lists over strings when creating/running VC
2316         commands during unit tests. This is clearly necessary to survive
2317         vcexe containing spaces, like "C:\Program Files\darcs.exe". I
2318         renamed the wq() function to qw() though, since that's how it's
2319         spelled in perl. Eventually I'd prefer all commands to be
2320         specified with lists.
2322         * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
2323         which are deleted (or not yet created) correctly. Also add
2324         failsafe code to not explode if the file-watching poller doesn't
2325         get started. Thanks to JP Calderone for the catch and the poller
2326         patch.
2327         * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
2328         for that case
2329         * buildbot/test/emitlogs.py: same
2331         * NEWS: summarize recent changes
2333         * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
2334         clause to avoid the "host key mismatch" warning
2336         * buildbot/process/step_twisted.py (Trial.start): if the
2337         buildslave is too old to understand logfiles=, fall back to
2338         running 'cat _trial_temp/test.log' like before.
2339         (Trial.commandComplete): same. this takes advantage of the
2340         LoggingBuildStep refactoring to stall commandComplete long enough
2341         to run a second RemoteShellCommand.
2343         * buildbot/process/step.py (LoggingBuildStep.startCommand):
2344         refactor command-completion handling, to allow methods like
2345         commandComplete/createSummary/evaluateCommand to return Deferreds.
2346         (LoggingBuildStep._commandComplete): delete the refactored method
2347         (ShellCommand.setupLogfiles): if the buildslave is too old to
2348         understand logfiles=, put a warning message both into twistd.log
2349         and into the otherwise empty user-visible LogFiles.
2351         * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
2352         callers to provide the slave-side logfile name, rather than
2353         forcing it to come from the local name of the LogFile.
2354         (BuildStep.getSlaveName): new method
2356         * buildbot/process/base.py (Build.getSlaveName): new method, so
2357         steps can find out which buildslave they're running on
2359         * buildbot/test/test_steps.py (Version.checkCompare): oops, update
2360         to match the s/cvs_ver/command_version/ change
2362 2006-08-05  Brian Warner  <warner@lothar.com>
2364         * buildbot/slave/commands.py (command_version): replace the CVS
2365         auto-updated cvs_ver keyword with a manually-updated variable,
2366         since CVS is no longer the master repository. Add a description of
2367         the remote API change starting in this version (2.1), specifically
2368         the fact that SlaveShellCommand now accepts 'initial_stdin',
2369         'keep_stdin_open', and 'logfiles'.
2371 2006-07-31  Brian Warner  <warner@lothar.com>
2373         * docs/buildbot.texinfo (System Architecture): Finally add lots of
2374         diagrams to describe how the whole system fits together. The
2375         images themselves are kept in SVG files, with ascii-art versions
2376         in corresponding .txt files. Texinfo knows how to interpolate the
2377         text version into .info files, reference the .png versions from
2378         .html files, and include .eps versions in the .ps format.
2379         * docs/images/Makefile: tools to create .png and .eps
2380         * docs/images/*.svg: created pictures with Inkscape.
2381         * .darcs-boring: ignore the generated .eps and .png files
2383 2006-07-24  Brian Warner  <warner@lothar.com>
2385         * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
2386         Scheduler names, since they cause setServiceParent to explode
2387         later.
2388         * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
2390 2006-07-20  Brian Warner  <warner@lothar.com>
2392         * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
2393         which runs the buildbot unit tests
2395         * docs/buildbot.texinfo (Index of Useful Classes): add a table of
2396         classes that are useful in master.cfg
2398 2006-07-15  Brian Warner  <warner@lothar.com>
2400         * Makefile (some-apidocs): new target to build only some epydocs
2402         * setup.py: minor comment.. does the classifiers= argument prevent
2403         the setup.py script from working on python2.2/2.3?
2405         * buildbot/scripts/sample.cfg: update manhole example, arrange into
2406         major sections
2408         * buildbot/twcompat.py: fix minor typo in comments
2410         * buildbot/manhole.py: move all Manhole-related code out to this
2411         module. Implement SSH-based manholes (with TwistedConch), and move
2412         to conch's nifty line-editing syntax-coloring REPL shell instead
2413         of the boring non-editing monochromatic (and deprecated) old
2414         'telnet' protocol.
2415         * buildbot/master.py: remove all Manhole-related code
2416         (BuildMaster.loadConfig._add): make sure the old manhole is
2417         removed before we add the new one
2418         * docs/buildbot.texinfo (Debug options): document new Manhole options
2420         * buildbot/twcompat.py (_which): fix some epydoc issues
2421         * buildbot/status/html.py (Waterfall.__init__): same
2423 2006-06-29  Brian Warner  <warner@lothar.com>
2425         * buildbot/interfaces.py: get Interface from b.twcompat to hush
2426         deprecation warnings under newer Twisteds (by using
2427         zope.interface.Interface instead of old twisted.python.components
2428         stuff)
2429         * buildbot/slave/interfaces.py: same
2431 2006-06-28  Brian Warner  <warner@lothar.com>
2433         * buildbot/slave/commands.py (SVN): add --non-interactive to all
2434         svn commands, so it will fail immediately instead of hanging while
2435         it waits for a username/password to be typed in.
2437         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
2438         log message if the step was shut down
2440         * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
2441         obsolete reference to mktap.
2443 2006-06-20  Brian Warner  <warner@lothar.com>
2445         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
2446         test to include new 'logfiles' argument sent from master to slave
2448 2006-06-19  Brian Warner  <warner@lothar.com>
2450         * buildbot/process/step_twisted.py (Trial): track Progress from
2451         _trial_temp/test.log too
2453         * buildbot/process/step.py (OutputProgressObserver): generalize
2454         the earlier StdioProgressObserver into an OutputProgressObserver
2455         that can track LogFiles other than stdio.
2456         (LoggingBuildStep.__init__): same
2458         * buildbot/process/step_twisted.py (Trial): use logfiles= to track
2459         _trial_temp/test.log, not a separate 'cat' command. TODO: this
2460         will fail under windows because of os.sep issues. It might have
2461         worked before if 'cat' was doing cygwin path conversion.
2463         * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
2464         creation of LogFileWatchers
2465         (ShellCommand._startCommand): and record the files that were
2466         watched in the 'headers' section of the ShellCommand output
2468         * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
2469         need to actually pass it to the slave if you want it to work.
2470         (ShellCommand): document it a bit
2472         * buildbot/test/test_shell.py: new test to validate LogFiles
2473         * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
2474         test LogFiles
2475         * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
2476         before printing the last batch of lines, to test that the polling
2477         logic is working properly
2479         * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
2480         handling, making it possible to track multiple logs for a single
2481         RemoteCommand. The previous single logfile is now known as the
2482         'stdio' log.
2483         (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
2484         (RemoteShellCommand.__init__): accept logfiles=
2485         (LoggingBuildStep.startCommand): stdio_log is now one of many
2486         (ShellCommand): added logfiles= argument, as well as a class-level
2487         .logfiles attribute, which will be merged together to figure out
2488         which logfiles should be tracked. The latter maybe be useful for
2489         subclasses of ShellCommand which know they will aways produce
2490         secondary logfiles in the same location.
2492         * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
2493         and closeStdin() methods, preparing to make it possible to write
2494         to a ShellCommand's stdin at any time, not just at startup. These
2495         writes are buffered if the child process hasn't started yet.
2496         (LogFileWatcher): new helper class to watch arbitrary logfiles
2497         while a ShellCommand runs. This class polls the file every two
2498         seconds, and sends back 10k chunks to the buildmaster.
2499         (ShellCommand): rename stdin= to initialStdin=, and add
2500         keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
2501         at startup.
2502         (ShellCommand.addLogfile): LogFile text is sent in updates with a
2503         key of "log" and a value of (logname, data).
2504         (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
2505         'logfiles' to the master-visible args dictionary.
2506         (SourceBase.doPatch): match s/stdin/initialStdin/ change
2507         (CVS.start): same
2508         (P4.doVCFull): same
2509         * buildbot/test/test_vc.py (Patch.testPatch): same
2512         * buildbot/test/emit.py: write to a logfile in the current
2513         directory. We use this to figure out what was used as a basedir
2514         rather than looking to see which copy of emit.py gets run, so that
2515         we can run the commands from inside _trial_temp rather than inside
2516         buildbot/test
2517         * buildbot/test/subdir/emit.py: same
2518         * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
2519         argument rather than running from buildbot/test/
2520         (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
2521         rather than using an implicit setUp()
2522         * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
2523         (ShellBase.testShell1, etc): use explicit path to emit.py instead
2524         of assuming that we're running in buildbot/test/ (and that '.' is
2525         on our $PATH)
2527         * buildbot/slave/commands.py (Command.doStart): refactor Command
2528         startup/completion a bit: now the SlaveBuilder calls doStart(),
2529         which is not meant for overridding by subclasses, and doStart()
2530         calls start(), which is. Likewise the SlaveBuilder calls
2531         doInterrupt(), and subclasses override interrupt(). This also puts
2532         responsibility for maintaining .running in Command rather than in
2533         SlaveBuilder.
2534         (Command.doInterrupt): same
2535         (Command.commandComplete): same, this is called when the deferred
2536         returned by start() completes.
2537         * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
2538         (SlaveBuilder.remote_interruptCommand): same
2539         (SlaveBuilder.stopCommand): same
2541 2006-06-16  Brian Warner  <warner@lothar.com>
2543         * buildbot/test/test_shell.py: new test file to contain everything
2544         relating to ShellCommand
2545         (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
2546         multiple logfiles in realtime" feature, not yet implemented
2547         * buildbot/test/emitlogs.py: support file for testLogFiles
2548         * docs/buildbot.texinfo (ShellCommand): document the feature
2550         * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
2552         * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
2553         for tests which exercise SlaveCommands in isolation.
2555         * buildbot/test/test_slavecommand.py: Move some utilities like
2556         SignalMixin and FakeSlaveBuilder from here ..
2557         * buildbot/test/runutils.py: .. to here, so they can be used by
2558         other test classes too
2559         * buildbot/test/test_vc.py: more SignalMixin refactoring
2560         * buildbot/test/test_control.py: same
2561         * buildbot/test/test_run.py: and some rmtree refactoring
2563 2006-06-15  Brian Warner  <warner@lothar.com>
2565         * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
2566         'testBranch' to match other VC tests and have the tests run in
2567         roughly increasing order of dependency
2569         * buildbot/test/test_steps.py (LogObserver): new test to verify
2570         LogObservers can be created at various times and still get
2571         connected up properly
2573         * buildbot/test/runutils.py (setupBuildStepStatus): utility method
2574         to create BuildStepStatus instances that actually work.
2576         * buildbot/process/step.py (LogObserver): add outReceived and
2577         errReceived base methods, to be overridden
2579         * buildbot/status/builder.py (BuildStatus.addStepWithName): change
2580         API to take a name instead of a step, reducing the coupling
2581         somewhat. This returns the BuildStepStatus object so it can be
2582         passed to the new Step, instead of jamming it directly into the
2583         Step.
2584         * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
2585         method
2586         * buildbot/process/base.py (Build.setupBuild): use both methods
2587         * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
2588         process a bit to match
2590 2006-06-14  Brian Warner  <warner@lothar.com>
2592         * docs/buildbot.texinfo (Adding LogObservers): add some limited
2593         docs on writing new LogObserver classes
2594         (Writing New Status Plugins): brief docs on how Status Plugins fit
2595         together
2597         * buildbot/process/step_twisted.py (TrialTestCaseCounter):
2598         implement a LogObserver that counts how many unit tests have been
2599         run so far
2600         (Trial.__init__): wire it in
2601         * buildbot/test/test_twisted.py (Counter): unit test for it
2603         * buildbot/process/step_twisted.py (HLint.commandComplete): update
2604         to new cmd.logs['stdio'] scheme
2605         (Trial.commandComplete): same
2606         (BuildDebs.commandComplete): same
2608         * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
2609         LogFiles, instead of just a single one. The old single logfile is
2610         now called "stdio". LoggedRemoteCommand no longer creates a
2611         LogFile for you (the code to do that was broken anyway). If you
2612         don't create a "stdio" LogFile, then stdout/stderr will be
2613         discarded.
2614         (LogObserver): implement "LogObservers", which a BuildStep can add
2615         to parse the output of a command in real-time. The primary use is
2616         to provide more useful information to the Progress code, allowing
2617         better ETA estimates.
2618         (LogLineObserver): utility subclass which feeds complete lines to
2619         the parser instead of bytes.
2620         (BuildStep.progressMetrics): this is safer as a tuple
2621         (BuildStep.setProgress): utility method, meant to be called by
2622         LogObservers
2623         (BuildStep.addLogObserver): new method, to be called at any time
2624         during the BuildStep (even before any LogFiles have been created),
2625         to attach (or schedule for eventual attachment) a LogObserver to a
2626         LogFile.
2627         (StdioProgressObserver): new LogObserver which replaces the old
2628         "output" progress gatherer
2629         (LoggingBuildStep.__init__): same
2630         (LoggingBuildStep.startCommand): set up the "stdio" LogFile
2631         (LoggingBuildStep._commandComplete): must use logs['stdio']
2632         instead of the old single ".log" attribute.
2633         * buildbot/status/builder.py (LogFile): remove old logProgressTo
2634         functionality, now subsumed into StdioProgressObserver
2635         * buildbot/test/test_status.py (Subscription._testSlave_2): the
2636         log name changed from "output" to "stdio".
2639         * buildbot/interfaces.py (ILogFile): add the Interface used from
2640         the BuildStep towards the LogFile
2641         (ILogObserver): and the one provided by a LogObserver
2642         * buildbot/status/builder.py (LogFile): implement it
2644         * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
2645         HEADER constants here ..
2646         * buildbot/status/builder.py (STDOUT): .. from here
2648 2006-06-13  Brian Warner  <warner@lothar.com>
2650         * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
2651         compatibility with python2.2, which doesn't have the 'substr in
2652         str' feature.
2653         (TestP4Poller.makeTime): utility function to construct the
2654         timestamp using the same strptime() approach as p4poller does. It
2655         turns out that time.mktime() behaves slightly differently under
2656         python2.2, probably something to do with the DST flag, and that
2657         causes the test to fail under python2.2. (changing the mktime()
2658         arguments to have dst=0 instead of -1 caused it to fail under
2659         python2.3. Go figure.)
2660         (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
2662 2006-06-12  Brian Warner  <warner@lothar.com>
2664         * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
2665         proper Perforce (P4) support. Many many thanks to Scott Lamb for
2666         contributing such an excellent patch, including docs and unit
2667         tests! This makes it *so* much easier to apply. I had to update
2668         test_vc.py to handle some recent refactorings, but everything else
2669         applied smoothly. The only remaining thing I'd like to fix would
2670         be to remove the hard-wired port 1666 used by p4d, and allow it to
2671         claim any unused port. This would allow two copies of the test
2672         suite to run on the same host at the same time, as well as
2673         allowing the test suite to run while a real (production) p4d was
2674         running on the same host. Oh, and maybe we should add a warning to
2675         step.P4 that gets emitted if the slave is too old to provide the
2676         'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
2677         * buildbot/slave/commands.py (P4): same
2678         (P4Sync): same, some minor updates
2679         * buildbot/changes/p4poller.py: same
2680         * docs/buildbot.texinfo: same
2681         * buildbot/test/test_p4poller.py: same
2682         * buildbot/test/test_vc.py (P4): same
2684         * setup.py: add Trove classifiers for PyPI
2686 2006-06-08  Brian Warner  <warner@allmydata.com>
2688         * buildbot/status/client.py
2689         (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
2690         changing this from getCurrentBuild() to getCurrentBuilds(). Each
2691         build needs to be IRemote'd separately, rather than IRemote'ing
2692         the whole list at once. I can't wait until newpb's serialization
2693         adapters make this unnecessary.
2695 2006-06-06  Brian Warner  <warner@lothar.com>
2697         * buildbot/process/step.py (WithProperties): make this inherit
2698         from ComparableMixin, so that reloading an unchanged config file
2699         doesn't cause us to spuriously reload any Builders which use them.
2700         * buildbot/test/test_config.py (ConfigTest.testWithProperties):
2701         add a test for it
2703 2006-06-03  Brian Warner  <warner@lothar.com>
2705         * contrib/windows/{setup.py, buildbot_service.py}: add support for
2706         running py2exe on windows, contributed by Mark Hammond. Addresses
2707         SF#1401121, but I think we still need to include
2708         buildbot/scripts/sample.cfg
2709         * setup.py: include buildbot_service.py as a script under windows
2710         * buildbot/status/html.py: when sys.frozen (i.e. we're running in
2711         a py2exe application), get the icon/css datafiles from a different
2712         place than usual.
2714         * buildbot/status/mail.py (MailNotifier.buildMessage): don't
2715         double-escape the build URL. Thanks to Olivier Bonnet for the
2716         patch. Fixes SF#1452801.
2718 2006-06-02  Brian Warner  <warner@lothar.com>
2720         * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
2721         first six columns of 'svnlook' output, not just the first column,
2722         since property changes appear in the other five. Thanks to Olivier
2723         Bonnet for the patch. Fixes SF#1398174.
2725 2006-06-01  Brian Warner  <warner@lothar.com>
2727         * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
2728         the fake build, so that title= has something to be set to
2730         * buildbot/status/html.py (BuildBox.getBox): set the 'title='
2731         attribute of the "Build #NN" link in the yellow start-the-build
2732         box to the build's reason. This means that you get a little
2733         tooltip explaining why the build was done when you hover over the
2734         yellow box. Thanks to Zandr Milewski for the suggestion.
2736         * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
2737         (Box.setETA): handle ETA=None (by stopping the timer)
2738         (Box.update): make the [soon] text less different than the usual
2739         text, so the rest of the text doesn't flop around so much. It
2740         would be awfully nice to figure out how to center this stuff.
2741         (ThreeRowBuilder.stepETAUpdate): more debugging printouts
2743         * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
2744         by default, so that any ShellCommand which fails marks the overall
2745         build as a failure. I should have done this from the beginning.
2746         Add flunkOnFailure=False to the arguments if you want to turn off
2747         this behavior.
2749 2006-05-30  Brian Warner  <warner@lothar.com>
2751         * buildbot/clients/gtkPanes.py: add a third row: now it shows
2752         last-build/current-build/current-step. Show what step is currently
2753         running. Show ETA for both the overall build and the current step.
2754         Update GTK calls to modern non-deprecated forms. There's still a
2755         lot of dead code and debug noise to remove.
2757         * buildbot/process/step_twisted.py (Trial): set the step name, so it
2758         shows up properly in status displays
2760 2006-05-28  Brian Warner  <warner@lothar.com>
2762         * buildbot/test/test_properties.py (Run.testInterpolate): on the
2763         build we use to verify that WithProperties works:
2765         ** set flunkOnFailure=True so that build failures get noticed
2766         ** set workdir='.' so that the build succeeds, otherwise it is trying
2767             to touch 'build/something', and 'build/' doesn't exist because
2768             usually that's created by a Source step
2769         ** set timeout=10, because Twisted-1.3.0 has a race condition that
2770             this test somehow triggers, in which the 'touch' process becomes
2771             a zombie and we wait for th etimeout before giving up on it.
2773         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
2774         to log the Build results and step logs to the twisted log.
2775         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
2776         what went wrong if a build was expected to succeed but didn't.
2778         * buildbot/process/step_twisted.py (Trial): set the default
2779         trialMode to '--reporter=bwverbose', which specifies verbose
2780         black-and-white text. Back in twisted-1.3/2.0 days we had to use
2781         '-to', but those are completely missing in modern Twisteds.
2783         * buildbot/scripts/sample.cfg: make the sample Manhole config use
2784         a localhost-only port, to encourage better security
2786         * docs/buildbot.texinfo (Change Sources): mention
2787         darcs_buildbot.py
2789         * .darcs-boring: add a Darcs boringfile
2791         * README (REQUIREMENTS): stop claiming compatibility with
2792         Twisted-1.3.0
2794         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
2795         sender
2797 2006-05-27  Brian Warner  <warner@lothar.com>
2799         * buildbot/__init__.py: bump to 0.7.3+ while between releases
2800         * docs/buildbot.texinfo: same
2802 2006-05-23  Brian Warner  <warner@lothar.com>
2804         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
2805         * docs/buildbot.texinfo: set version to match
2806         * NEWS: update for 0.7.3
2808         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
2809         give a quick mapping from VC system to possible ChangeSources
2810         (Build Properties): add 'buildername'
2812         * buildbot/process/base.py (Build.setupStatus): oops, set
2813         'buildername' and 'buildnumber' properties
2814         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
2815         test them
2817 2006-05-22  Brian Warner  <warner@lothar.com>
2819         * docs/buildbot.texinfo (Build Properties): explain the syntax of
2820         property interpolation better
2822         * README (INSTALLATION): remove old '-v' argument from recommended
2823         trial command line
2825         * docs/buildbot.texinfo (ShellCommand): add docs for description=
2826         and descriptionDone= arguments. Thanks to Niklaus Giger for the
2827         patch. SF#1475494.
2829         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
2830         'svnversion' instead of grepping the output of 'svn info', much
2831         simpler and avoids CR/LF problems on windows. Thanks to Olivier
2832         Bonnet for the suggestion.
2833         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
2834         require the WC_PATH argument, so run 'svnversion .' instead.
2836         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
2837         aren't supposed to have 'self' in their argument list
2839 2006-05-21  Brian Warner  <warner@lothar.com>
2841         * buildbot/process/step.py (ShellCommand.start): make
2842         testInterpolate pass. I was passing the uninterpolated command to
2843         the RemoteShellCommand constructor
2844         (ShellCommand._interpolateProperties): oops, handle non-list
2845         commands (i.e. strings with multiple words separated by spaces in
2846         them) properly, instead of forgetting about them.
2848         * buildbot/test/test_properties.py (Run.testInterpolate): new test
2849         to actually try to use build properties in a real build. This test
2850         fails.
2851         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
2852         to start and evaluate builds
2854         * buildbot/test/test__versions.py: add a pseudo-test to record
2855         what version of Twisted/Python/Buildbot are running. This should
2856         show up at the beginning of _trial_tmp/test.log, and exists to help
2857         debug other problems.
2859         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
2860         a filename to be served as 'robots.txt' to discourage web spiders.
2861         Adapted from a patch by Tobi Vollebregt, thanks!
2862         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
2863         (Waterfall.test_waterfall): tweak the way that filenames are put
2864         into the config file, to accomodate windows pathnames better.
2866         * docs/buildbot.texinfo (HTML Waterfall): document it
2868         * buildbot/process/process_twisted.py
2869         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
2870         changed the build process. The new setup.py no longer takes the
2871         'all' argument.
2872         (FullTwistedBuildFactory.__init__): same
2873         (TwistedReactorsBuildFactory.__init__): same
2875         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
2876         be placed in the [hooks] section of the central repository (the
2877         one that everybody pushes changes to).
2879 2006-05-20  Brian Warner  <warner@lothar.com>
2881         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
2882         .darcs-context file, use binary mode. I think this was causing a
2883         Darcs failure under windows.
2885 2006-05-19  Brian Warner  <warner@lothar.com>
2887         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
2888         use a timezone string of +0000 and gmtime, since this timestamp is
2889         sent to a buildmaster and %z is broken.
2891         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
2892         string and localtime, since this timestamp will only be consumed
2893         locally, and %z is broken.
2895         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
2896         gmtime, since this timestamp is returned to the buildmaster, and
2897         %z is broken.
2899 2006-05-18  Brian Warner  <warner@lothar.com>
2901         * NEWS: update in preparation for next release
2903         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
2904         setup-repository and do-we-have-the-vc-tools code into a separate
2905         "helper" class, which sticks around in a single module-level
2906         object. This seems more likely to continue to work in the future
2907         than having it hide in the TestCase and hope that TestCases stick
2908         around for a long time.
2910         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
2911         addremove' has been deprecated in recent versions of mercurial, so
2912         use 'hg add' instead
2914 2006-05-07  Brian Warner  <warner@lothar.com>
2916         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
2917         operating under windows, move the file before opening it, since
2918         you can't rename a file that somebody has open.
2920         * buildbot/process/base.py (Build.setupBuild): if something goes
2921         wrong while creating a Step, log the name and arguments, since the
2922         error message when you get the number of arguments wrong is really
2923         opaque.
2925 2006-05-06  Brian Warner  <warner@lothar.com>
2927         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
2928         bugs in twisted-specific code not covered by my unit tests, this
2929         time use 'cmd' argument instead of self.cmd
2931         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
2932         fix stupid braino: either use startwith or find()==0, not both.
2933         (TwistedReactorsBuildFactory.__init__): another dumb typo
2935         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
2936         mark this test as TODO under windows, since process-killing seems
2937         dodgy there. We'll come back to this later and try to fix it
2938         properly.
2940         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
2941         and don't include a timezone
2942         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
2943         This should avoid the windows-with-verbose-timezone-name problem
2944         altogether.
2945         (Patch.testPatch): add a test which runs 'patch' with less
2946         overhead than the full VCBase.do_patch sequence, to try to isolate
2947         a windows test failure. This one uses slave.commands.ShellCommand
2948         and 'patch', but none of the VC code.
2950         * buildbot/slave/commands.py (getCommand): use which() to find the
2951         executables for 'cvs', 'svn', etc. This ought to help under
2952         windows.
2954         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
2955         working directory before starting. If an earlier test failed, the
2956         leftover directory would mistakenly flunk a later test.
2957         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
2958         Make sure that we use the right commandlines if which("tla") picks
2959         up "tla.exe" (as it does under windows).
2960         (TlaSupport.do_get): factor out this tla-vs-baz difference
2961         (TlaSupport.vc_create): more tla-vs-baz differences
2963         * buildbot/test/test_slavecommand.py
2964         (ShellBase.testShellMissingCommand): stop trying to assert
2965         anything about the error message: different shells on different
2966         OSes with different languages makes it hard, and it really isn't
2967         that interesting of a thing to test anyway.
2969         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
2970         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
2971         "Panther"), because it has a bug which flunks a couple tests in
2972         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
2973         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
2974         able to test that yet.
2976 2006-04-30  Brian Warner  <warner@lothar.com>
2978         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
2979         make sure child commands emit messages in english, so our regexps
2980         will match. Thanks to Nikaus Giger for identifying the problems.
2981         (VCBase._do_vctest_export_1): mode="export" is not responsible
2982         for setting the "got_revision" property, since in many cases it is
2983         not convenient to determine.
2984         (SVNSupport.capable): when running 'svn --version' to check for
2985         ra_local, we want error messages in english
2986         * buildbot/test/test_slavecommand.py 
2987         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
2988         to emit the error message in english
2990         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
2991         the environment with $LC_ALL="C" so that Commands which need to
2992         parse the output of their child processes can obtain it in
2993         english.
2994         (SVN.parseGotRevision): call "svn info" afterwards instead of
2995         watching the output of the "svn update" or "svn checkout".
2996         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
2997         (Arch.parseGotRevision): same
2998         (Bazaar.parseGotRevision): same
2999         (Mercurial.parseGotRevision): same
3001         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
3002         $LC_ALL="C" when running commands under 'buildbot try', too
3004         * buildbot/test/__init__.py: remove the global os.environ()
3005         setting, instead we do it just for the tests that run commands and
3006         need to parse their output.
3008         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
3009         remove the overly-short .timeout on this test, because non-DNotify
3010         platforms must fall back to polling which happens at 10 second
3011         intervals, so a 5 second timeout would never succeed.
3013 2006-04-24  Brian Warner  <warner@lothar.com>
3015         * docs/buildbot.texinfo (Installing the code): update trial
3016         invocation, SF#1469116 by Niklaus Giger.
3017         (Attributes of Changes): updated branch-name examples to be
3018         a bit more realistic, SF#1475240 by Stephen Davis.
3020         * contrib/windows/buildbot2.bat: utility wrapper for windows
3021         developers, contributed by Nick Trout (after a year of neglect..
3022         sorry!). SF#1194231.
3024         * buildbot/test/test_vc.py (*.capable): store the actual VC
3025         binary's pathname in VCS[vcname], so it can be retrieved later
3026         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
3027         strip out non-numeric timezone information, specifically the funky
3028         German string that his system produced that confuses CVS.
3029         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
3030         allow Darcs tests to work on windows
3031         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
3032         procutils.which() everywhere, to allow tryclient to work under
3033         windows. Also from Niklaus Giger, SF#1463394.
3035         * buildbot/twcompat.py (which): move the replacement for a missing
3036         twisted.python.procutils.which from test_vc.py to here, so it can
3037         be used in other places too (specifically tryclient.py)
3039 2006-04-23  Brian Warner  <warner@lothar.com>
3041         * buildbot/status/html.py (StatusResourceBuild.body): replace the
3042         bare buildbotURL/projectName line with a proper DIV, along with a
3043         CSS class of "title", from Stefan Seefeld (SF#1461675).
3044         (WaterfallStatusResource.body0): remove the redundant 'table'
3045         class from the table
3046         (WaterfallStatusResource.body): same. Also add class="LastBuild"
3047         to the top-row TR, and class="Activity" to the second-row TR,
3048         rather than putting them in the individual TD nodes.
3050         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
3051         'got_revision' build property for all VC systems that implement
3052         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
3054         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
3055         to determine which revision we actually obtained
3056         (CVS.parseGotRevision): implement this for CVS, which just means
3057         to grab a timestamp. Not ideal, and it depends upon the buildslave
3058         having a clock that is reasonably well syncronized with the server,
3059         but it's better than nothing.
3060         (SVN.parseGotRevision): implement it for SVN, which is accurate
3061         (Darcs.parseGotRevision): same
3062         (Arch.parseGotRevision): same
3063         (Bazaar.parseGotRevision): same
3064         (Mercurial.parseGotRevision): same
3066         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
3067         keep a record of all non-stdout/stderr/header/rc status updates,
3068         for the benefit of RemoteCommands that send other useful things,
3069         like got_revision
3070         (Source.commandComplete): put any 'got_revision' status values
3071         into a build property of the same name
3074         * buildbot/process/step_twisted.py (Trial): update to deal with
3075         new ShellCommand refactoring
3077         * docs/buildbot.texinfo (Build Properties): document new feature
3078         that allows BuildSteps to get/set Build-wide properties like which
3079         revision was requested and/or checked out.
3081         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
3082         * buildbot/status/builder.py (BuildStatus.getProperty): implement
3083         it. Note that this bumps the persistenceVersion of the saved Build
3084         object, so add the necessary upgrade-old-version logic to include
3085         an empty properties dict.
3087         * buildbot/process/base.py (Build.setProperty): implement it
3088         (Build.getProperty): same
3089         (Build.startBuild): change build startup to set 'branch',
3090         'revision', and 'slavename' properties at the right time
3092         * buildbot/process/step.py (BuildStep.__init__): change setup to
3093         require 'build' argument in a better way
3094         (LoggingBuildStep): split ShellCommand into two pieces, for better
3095         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
3096         a single RemoteCommand that sends stdout/stderr status text. It
3097         also provides the usual commandComplete / createSummary /
3098         evaluateCommand / getText methods to be overridden...
3099         (ShellCommand): .. whereas ShellCommand is specifically for
3100         running RemoteShellCommands. Other shell-like BuildSteps (like
3101         Source) can inherit from LoggingBuildStep instead of ShellCommand
3102         (WithProperties): marker class to do build-property interpolation
3103         (Source): inherit from LoggingBuildStep instead of ShellCommand
3104         (RemoteDummy): same
3106         * buildbot/test/test_properties.py: test new functionality
3108 2006-04-21  Brian Warner  <warner@lothar.com>
3110         * buildbot/test/test_vc.py: rename testBranch to
3111         testCheckoutBranch to keep the tests in about the right
3112         alphabetical order
3114 2006-04-18  Brian Warner  <warner@lothar.com>
3116         * docs/buildbot.texinfo (PBListener): improve cross-references
3117         between PBListener and 'buildbot statusgui', thanks to John Pye
3118         for the suggestion.
3120 2006-04-17  Brian Warner  <warner@lothar.com>
3122         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
3123         running under Twisted-1.3.0, otherwise skipped tests are reported
3124         as errors.
3126         * all: use isinstance() instead of 'type(x) is foo', suggested by
3127         Neal Norwitz
3129         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3130         oops, fix a brain-fade from the other week, when making the
3131         addStep changes. I changed all the __init__ upcalls to use the
3132         wrong superclass name.
3133         (FullTwistedBuildFactory.__init__): same
3134         (TwistedDebsBuildFactory.__init__): same
3135         (TwistedReactorsBuildFactory.__init__): same
3136         (TwistedBuild.isFileImportant): use .startswith for clarity,
3137         thanks to Neal Norwitz for the suggestions.
3139         * contrib/viewcvspoll.py: script to poll a viewcvs database for
3140         changes, then deliver them over PB to a remote buildmaster.
3142         * contrib/svnpoller.py: added script by John Pye to poll a remote
3143         SVN repository (by running 'svn log') from a cronjob, and run
3144         'buildbot sendchange' to deliver the changes to a remote
3145         buildmaster.
3146         * contrib/svn_watcher.py: added script by Niklaus Giger (a
3147         modification of svnpoller.py), same purpose, but this one loops
3148         internally (rather than expecting to run from a cronjob) and works
3149         under windows.
3150         * contrib/README.txt: same
3152 2006-04-11  Brian Warner  <warner@lothar.com>
3154         * all: fix a number of incorrect names and missing imports, thanks
3155         to Anthony Baxter for the patch.
3156         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
3157         remove unused buggy method.
3158         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
3159         comes from shutil, not "shutils"
3160         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
3161         (Arch.checkSlaveVersion): same
3162         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
3163         some disabled code
3164         * buildbot/process/step_twisted2.py: add some missing imports
3165         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
3166         this code used to live in twisted.internet.defer
3168 2006-04-10  Brian Warner  <warner@lothar.com>
3170         * buildbot/process/step.py (Mercurial): add Mercurial support
3171         * buildbot/slave/commands.py (Mercurial): same
3172         * buildbot/scripts/tryclient.py (MercurialExtractor): same
3173         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
3174         not yet tested, but 'try' support *is* covered
3175         * docs/buildbot.texinfo (Mercurial): document it
3177         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
3178         some debugging messages (turned off)
3179         * buildbot/test/test_vc.py: improve debug messages
3181 2006-04-07  Brian Warner  <warner@lothar.com>
3183         * buildbot/test/test_vc.py (which): define our own which() in case
3184         we can't import twisted.python.procutils, because procutils doesn't
3185         exist in Twisted-1.3
3187         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
3188         of SlaveLocks for performance tests
3190         * docs/examples/twisted_master.cfg: update to match current usage
3192         * buildbot/changes/p4poller.py (P4Source): add new arguments:
3193         password, p4 binary, pollinterval, maximum history to check.
3194         Patch from an anonymous sf.net contributor, SF#1219384.
3195         * buildbot/process/step.py (P4Sync.__init__): add username,
3196         password, and client arguments.
3197         * buildbot/slave/commands.py (P4Sync): same
3199 2006-04-05  Brian Warner  <warner@lothar.com>
3201         * buildbot/process/factory.py (BuildFactory.addStep): new method
3202         to add steps to a BuildFactory. Use it instead of f.steps.append,
3203         and you can probably avoid using the s() convenience function.
3204         Patch from Neal Norwitz, sf.net #1412605.
3205         (other): update all factories to use addStep
3206         * buildbot/process/process_twisted.py: update all factories to use
3207         addStep.
3209 2006-04-03  Brian Warner  <warner@lothar.com>
3211         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
3212         work under windows too. Adapted from a patch by Niklaus Giger,
3213         addresses SF#1463399.
3215         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
3216         spawned commands emit parseable results in english and not some
3217         other language. Patch from Niklaus Giger, SF#1463395.
3219         * README (INSTALLATION): discourage users from running unit tests on
3220         a "network drive", patch from Niklaus Giger, SF#1463394.
3222 2006-03-22  Brian Warner  <warner@lothar.com>
3224         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
3225         function to turn a repository-relative pathname into a (branch,
3226         branch-relative-filename) tuple. Change this function to handle
3227         the branch naming policy used by your Subversion repository.
3228         Thanks to AllMyData.com for sponsoring this work.
3230 2006-03-16  Brian Warner  <warner@lothar.com>
3232         * buildbot/scripts/sample.cfg: add python-mode declaration for
3233         vim. Thanks to John Pye for the patch.
3235         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
3236         command line, mention the importance of running 'crontab' as the
3237         buildmaster/buildslave user. Thanks to John Pye for the catch.
3239 2006-03-13  Brian Warner  <warner@lothar.com>
3241         * buildbot/status/words.py (IRC): add an optional password=
3242         argument, which will be sent to Nickserv in an IDENTIFY message at
3243         login, to claim the nickname. freenode requires this before the
3244         bot can sent (or reply to) private messages. Thanks to Clement
3245         Stenac for the patch.
3246         * docs/buildbot.texinfo (IRC Bot): document it
3248         * buildbot/status/builder.py (LogFile.merge): don't write chunks
3249         larger than chunkSize. Fixes SF#1349253.
3250         * buildbot/test/test_status.py (Log.testLargeSummary): test it
3251         (Log.testConsumer): update to match new internal chunking behavior
3253 2006-03-12  Brian Warner  <warner@lothar.com>
3255         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
3257         * buildbot/test/test_maildir.py (MaildirTest): rename the
3258         'timeout' method, as it collides with trial's internals
3260         * buildbot/scripts/runner.py: add 'buildbot restart' command
3261         (stop): don't sys.exit() out of here, otherwise restart can't work
3262         * docs/buildbot.texinfo (Shutdown): document it
3264         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
3265         * buildbot/status/html.py (Waterfall.__init__): same
3266         * buildbot/process/builder.py (Builder.startBuild): same
3267         * buildbot/process/base.py (BuildRequest): same
3268         * buildbot/sourcestamp.py (SourceStamp): same
3269         * buildbot/scheduler.py (Nightly): same
3271         * buildbot/__init__.py (version): bump to 0.7.2+ while between
3272         releases
3273         * docs/buildbot.texinfo: same
3275 2006-02-17  Brian Warner  <warner@lothar.com>
3277         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
3278         * docs/buildbot.texinfo: set version number to match
3279         * NEWS: update for 0.7.2
3281 2006-02-16  Brian Warner  <warner@lothar.com>
3283         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
3285 2006-02-09  Brian Warner  <warner@lothar.com>
3287         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
3288         add text to explain per-build branch parameters
3289         * NEWS: mention --umask
3291 2006-02-08  Brian Warner  <warner@lothar.com>
3293         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
3294         method
3295         (SlaveOptions.optParameters): add --umask, to make it possible to
3296         make buildslave-generated files (including build products) be
3297         world-readable
3298         (slaveTAC): same
3299         * buildbot/slave/bot.py (BuildSlave.startService): same
3301 2006-01-23  Brian Warner  <warner@lothar.com>
3303         * buildbot/status/builder.py: urllib.quote() all URLs that include
3304         Builder names, so that builders can include characters like '/'
3305         and ' ' without completely breaking the resulting HTML. Thanks to
3306         Kevin Turner for the patch.
3307         * buildbot/status/html.py: same
3308         * buildbot/test/test_web.py (GetURL.testBuild): match changes
3310         * NEWS: update in preparation for upcoming release
3312 2006-01-18  Brian Warner  <warner@lothar.com>
3314         * docs/examples/twisted_master.cfg: update to match the Twisted
3315         buildbot: remove python2.2, switch to exarkun's buildslaves,
3316         disable the .deb builder until we figure out how to build twisted
3317         .debs from SVN, add some ktrace debugging to the OS-X build
3318         process and remove the qt build, remove threadless builders,
3319         change freebsd builder to use landonf's buildslave.
3321 2006-01-12  Brian Warner  <warner@lothar.com>
3323         * buildbot/master.py (Manhole.__init__): let port= be a strports
3324         specification string, but handle a regular int for backwards
3325         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
3326         used in master.cfg to limit connections to just the local host.
3327         (BuildMaster.loadConfig): same for c['slavePortnum']
3328         * buildbot/scheduler.py (Try_Userpass.__init__): same
3329         * buildbot/status/client.py (PBListener.__init__): same
3330         * buildbot/status/html.py (Waterfall.__init__): same, for both
3331         http_port and distrib_port. Include backwards-compatibility checks
3332         so distrib_port can be a filename string and still mean unix:/foo
3333         * docs/buildbot.texinfo (Setting the slaveport): document it
3334         (Debug options): same
3335         (HTML Waterfall): same
3336         (PBListener): same
3337         (try): same
3338         * buildbot/test/test_config.py (ConfigTest): test it
3340         * buildbot/master.py (BuildMaster.loadConfig): wait for the
3341         slaveport's disownServiceParent deferred to fire before opening
3342         the new one. Fixes an annoying bug in the unit tests.
3344 2006-01-03  Brian Warner  <warner@lothar.com>
3346         * buildbot/master.py (BuildMaster): remove the .schedulers
3347         attribute, replacing it with an allSchedulers() method that looks
3348         for all IService children that implement IScheduler. Having only
3349         one parent/child relationship means fewer opportunities for bugs.
3350         (BuildMaster.allSchedulers): new method
3351         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
3352         also fix ugly bug that caused any config-file reload to
3353         half-forget about the earlier Schedulers, causing an exception
3354         when a Change arrived and was handed to a half-connected
3355         Scheduler. The exception was in scheduler.py line 54ish:
3356           self.parent.submitBuildSet(bs)
3357           exceptions.AttributeError: 'NoneType' object has no attribute
3358           'submitBuildSet'
3359         (BuildMaster.addChange): update to use allSchedulers()
3361         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
3362         to work properly with twisted-1.3.0, where you must explicitly
3363         include the __implements__ from parent classes
3364         (BaseScheduler.__repr__): make it easier to distinguish distinct
3365         instances
3366         (BaseUpstreamScheduler.__implements__): same
3368         * buildbot/status/builder.py (Status.getSchedulers): update to
3369         use allSchedulers()
3370         * buildbot/test/test_run.py (Run.testMaster): same
3371         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
3372         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
3373         make sure Scheduler instances are left alone when an identical
3374         config file is reloaded
3375         (ConfigElements.testSchedulers): make sure Schedulers are properly
3376         comparable
3378         * Makefile (TRIALARGS): my local default Twisted version is now
3379         2.1.0, update the trial arguments accordingly
3381 2005-12-22  Brian Warner  <warner@lothar.com>
3383         * docs/examples/twisted_master.cfg: merge changes from pyr: add
3384         new win32 builders
3386         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
3387         addChange in the parent class, although I suspect this should be
3388         fixed better in the future.
3390 2005-11-26  Brian Warner  <warner@lothar.com>
3392         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
3393         explode when branch==None, thanks to Kevin Turner for the catch
3394         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
3395         it
3397         * buildbot/__init__.py (version): bump to 0.7.1+ while between
3398         releases
3399         * docs/buildbot.texinfo: same
3401 2005-11-26  Brian Warner  <warner@lothar.com>
3403         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
3404         * docs/buildbot.texinfo: set version number to match
3406 2005-11-26  Brian Warner  <warner@lothar.com>
3408         * NEWS: update for 0.7.1
3410         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
3411         sure that unsubscribe works even if we never sent an ETA update.
3412         Also, don't explode on duplicate unsubscribe.
3413         (BuildStepStatus.addLog): make the convenience "return self"-added
3414         watcher automatically unsubscribe when the Step finishes.
3415         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
3416         (BuildStatus.stepStarted): same auto-unsubscribe
3417         (BuilderStatus.buildStarted): same auto-unsubscribe
3419         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
3420         auto-unsubscribe
3421         (IStatusReceiver.stepStarted): same
3422         (IStatusReceiver.logStarted): same
3424         * buildbot/test/test_run.py (Status): move the Status test..
3425         * buildbot/test/test_status.py (Subscription): .. to here
3427 2005-11-25  Brian Warner  <warner@lothar.com>
3429         * NEWS: more updates
3431         * buildbot/locks.py: fix the problem in which loading a master.cfg
3432         file that changes some Builders (but not all of them) can result
3433         in having multiple copies of the same Lock. Now, the real Locks
3434         are kept in a table inside the BotMaster, and the Builders/Steps
3435         use "LockIDs", which are still instances of MasterLock and
3436         SlaveLock. The real Locks are instances of the new RealMasterLock
3437         and RealSlaveLock classes.
3438         * buildbot/master.py (BotMaster.getLockByID): new method to
3439         convert LockIDs into real Locks.
3440         * buildbot/process/base.py (Build.startBuild): convert LockIDs
3441         into real Locks before building
3442         * buildbot/process/step.py (BuildStep.startStep): same
3443         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
3444         exercises the problem
3447         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
3448         what Schedulers are available
3450         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
3451         work by Dobes Vandermeer and hacked mercilessly by me. This offers
3452         'cron'-style build scheduling at certain times of day, week,
3453         month, or year.
3454         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
3456         * buildbot/scheduler.py (Scheduler): change fileIsImportant
3457         handling: treat self.fileIsImportant more as an attribute that
3458         contains a callable than as a method. If the attribute is None,
3459         don't call it and assume all filenames are important. It is still
3460         possible to provide a fileIsImportant method in a subclass,
3461         however.
3462         (AnyBranchScheduler): handle fileIsImportant=None, previously it
3463         was broken
3464         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
3465         test using AnyBranchScheduler with fileIsImportant=None
3467 2005-11-24  Brian Warner  <warner@lothar.com>
3469         * buildbot/test/test_config.py (StartService): don't claim a fixed
3470         port number, instead set slavePort=0 on the first pass, figure out
3471         what port was allocated, then switch to a config file that uses
3472         the allocated port.
3474         * buildbot/master.py (BuildMaster.loadConfig): close the old
3475         slaveport before opening the new one, because unit tests might
3476         replace slavePort=0 with the same allocated portnumber, and if we
3477         don't wait for the old port to close first, we get a "port already
3478         in use" error. There is a tiny race condition here, but the only
3479         threat is from other programs that bind (statically) to the same
3480         port number we happened to be allocated, and only if those
3481         programs use SO_REUSEADDR, and only if they get control in between
3482         reactor turns.
3484         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
3486         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
3487         deleted ChangeSources before adding any new ones
3488         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
3489         compare_attrs, to make sure that a config-file reload does not
3490         unnecessarily replace an unmodified ChangeSource instance
3491         * buildbot/test/test_config.py (ConfigTest.testSources): update
3493         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
3494         mean "don't build anything", and add a warning if it gets used
3495         because it isn't actually useful.
3497         * contrib/svn_buildbot.py: update example usage to match the port
3498         number that gets used by the PBChangeSource
3499         * buildbot/scripts/sample.cfg: add example of PBChangeSource
3501 2005-11-22  Brian Warner  <warner@lothar.com>
3503         * NEWS: start collecting items for next release
3505         * buildbot/process/step.py (SVN.computeSourceRevision): assume
3506         revisions are strings
3507         (P4Sync.computeSourceRevision): same
3509         * buildbot/status/html.py (StatusResourceBuild.body): add a link
3510         to the Buildbot's overall status page
3511         (StatusResourceBuilder.body): same
3513 2005-11-15  Brian Warner  <warner@lothar.com>
3515         * buildbot/master.py (BuildMaster.loadConfig): serialize the
3516         config-file loading, specifically to make sure old StatusTargets
3517         are finished shutting down before new ones start up (thus
3518         resolving a bug in which changing the Waterfall object would fail
3519         because both new and old instances were claiming the same
3520         listening port). Also load new Schedulers after all the new
3521         Builders are set up, in case they fire off a new build right away.
3522         * buildbot/test/test_config.py (StartService): test it
3524         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
3525         the branch name to the mail body
3527         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
3528         Without it, a config-file reload fails to update an existing
3529         PBChangeSource.
3530         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
3531         username/passwd to compare_attrs, for the same reason
3532         * buildbot/status/html.py (Waterfall): add favicon to
3533         compare_attrs, same reason
3535 2005-11-05  Brian Warner  <warner@lothar.com>
3537         * buildbot/scripts/tryclient.py (createJobfile): stringify the
3538         baserev before stuffing it in the jobfile. This resolves problems
3539         under SVN (and probably Arch) where revisions are expressed as
3540         numbers. I'm inclined to use string-based revisions everywhere in
3541         the future, but this fix should be safe for now. Thanks to Steven
3542         Walter for the patch.
3544         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
3545         binary mode when opening pickle files, to make windows work
3546         better. Thanks to Dobes Vandermeer for the catch.
3547         * buildbot/status/builder.py (BuildStatus.saveYourself): same
3548         (BuilderStatus.getBuildByNumber): same
3549         (Status.builderAdded): same
3550         * buildbot/master.py (BuildMaster.loadChanges): same
3552         * buildbot/util.py (Swappable): delete unused leftover code
3554         * buildbot/process/step.py (SVN): when building on a non-default
3555         branch, add the word "[branch]" to the VC step's description, so
3556         it is obvious that we're not building the usual stuff. Likewise,
3557         when we are building a specific revision, add the text "rNNN" to
3558         indicate what that revision number is. Thanks to Brad Hards and
3559         Nathaniel Smith for the suggestion.
3560         (Darcs.startVC): same
3561         (Arch.startVC): same
3562         (Bazaar.startVC): same
3564         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
3565         typo, caught by Mark Dillavou, closes SF#1216636.
3567         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
3568         about a test to add some day
3570         * docs/examples/twisted_master.cfg: update: bot1 can now handle
3571         the 'full-2.3' build, and the 'reactors' build is now run under
3572         python-2.4 because the buildslave no longer has gtk/etc bindings
3573         for earlier versions.
3575 2005-11-03  Brian Warner  <warner@lothar.com>
3577         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
3578         method, takes an IBuildStatus and rebuilds it. It might make more
3579         sense to add this to IBuildControl instead, but that instance goes
3580         away completely once the build has finished, and resubmitting
3581         builds can take place weeks later.
3582         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
3583         * buildbot/status/html.py (StatusResourceBuild): also stash an
3584         IBuilderControl so we can use resubmitBuild.
3585         (StatusResourceBuild.body): render "resubmit" button if we can.
3586         Also add hrefs for each BuildStep
3587         (StatusResourceBuild.rebuild): add action for "resubmit" button
3588         (StatusResourceBuilder.getChild): give it an IBuilderControl
3590         * buildbot/status/builder.py (Status.getURLForThing): change the
3591         URL for BuildSteps to have a "step-" prefix, so the magic URLs
3592         that live as targets of buttons like "stop" and "rebuild" can't
3593         collide with them.
3594         * buildbot/status/builder.py (Status.getURLForThing): same
3595         * buildbot/status/html.py (StatusResourceBuild.getChild): same
3596         (StepBox.getBox): same
3597         * buildbot/test/test_web.py (GetURL): same
3598         (Logfile): same
3600         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
3601         exclusivity checks after Source.__init__ upcall, so misspelled
3602         arguments will be reported more usefully
3603         (Darcs.__init__): same
3605 2005-10-29  Brian Warner  <warner@lothar.com>
3607         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
3608         builder. Move the Try scheduler off to a separate port.
3610 2005-10-27  Brian Warner  <warner@lothar.com>
3612         * buildbot/clients/gtkPanes.py
3613         (TwoRowClient.remote_builderRemoved): disappearing Builders used
3614         to cause the app to crash, now they don't.
3616         * buildbot/clients/debug.py: display the buildmaster's location
3617         in the window's title bar
3619 2005-10-26  Brian Warner  <warner@lothar.com>
3621         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
3622         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
3623         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
3625         * buildbot/status/html.py (td): put a single non-breaking space
3626         inside otherwise empty <td> elements, as a workaround for buggy
3627         browsers which would optimize them away (along with any associated
3628         styles, like the kind that create the waterfall grid borders).
3629         Patch from Frerich Raabe.
3631         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
3632         argv-list as an argument, defaulting to ["-to"], which is
3633         appropriate for the Trial that comes with Twisted-2.1.0 and
3634         earlier. The Trial in current Twisted SVN wants
3635         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
3636         defaults to an empty list.
3637         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
3638         match it, now that trialMode= is a list instead of a single string
3640         * buildbot/__init__.py (version): bump to 0.7.0+ while between
3641         releases
3642         * docs/buildbot.texinfo: same
3644 2005-10-24  Brian Warner  <warner@lothar.com>
3646         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
3647         * docs/buildbot.texinfo: set version number to match
3649 2005-10-24  Brian Warner  <warner@lothar.com>
3651         * README: update for 0.7.0
3652         * NEWS: same
3653         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
3655         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
3656         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
3657         send the branch= argument unless the user really provided one, to
3658         retain compatibility with older buildmasters that don't accept
3659         that argument.
3660         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3661         same
3663         * docs/buildbot.texinfo: update lots of stuff
3665         * buildbot/scripts/runner.py (sendchange): add a --branch argument
3666         to the 'buildbot sendchange' command
3667         * buildbot/clients/sendchange.py (Sender.send): same
3668         * buildbot/changes/pb.py (ChangePerspective): same
3669         * buildbot/test/test_changes.py (Sender.testSender): test it
3671         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
3672         'default_branch' argument names to 'baseURL' and 'defaultBranch',
3673         for consistency with other BuildStep arguments that use camelCase.
3674         Well, at least more of them use camelCase (like flunkOnWarnings)
3675         than don't.. I wish I'd picked one style and stuck with it
3676         earlier. Annoying, but it's best done before the release, since
3677         these arguments didn't exist at all in 0.6.6 .
3678         (Darcs): same
3679         * buildbot/test/test_vc.py (SVN.testCheckout): same
3680         (Darcs.testPatch): same
3681         * docs/buildbot.texinfo (SVN): document the change
3682         (Darcs): same, add some build-on-branch docs
3683         * docs/examples/twisted_master.cfg: match change
3685         * buildbot/process/step.py (BuildStep): rename
3686         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
3687         how it is normally used.
3688         * buildbot/test/test_steps.py (Version.checkCompare): same
3690         * buildbot/process/step.py (CVS.startVC): refuse to build
3691         update/copy -style builds on a non-default branch with an old
3692         buildslave (<=0.6.6) that doesn't know how to do it properly. The
3693         concern is that it will do a VC 'update' in an existing tree when
3694         it is supposed to be switching branches (and therefore clobbering
3695         the tree to do a full checkout), thus building the wrong source.
3696         This used to be a warning, but I think the confusion it is likely
3697         to cause warrants making it an error.
3698         (SVN.startVC): same, also make mode=export on old slaves an error
3699         (Darcs.startVC): same
3700         (Git.startVC): improve error message for non-Git-enabled slaves
3701         (Arch.checkSlaveVersion): same. continue to emit a warning when a
3702         specific revision is built on a slave that doesn't pay attention
3703         to args['revision'], because for slowly-changing trees it will
3704         probably do the right thing, and because we have no way to tell
3705         whether we're asking it to build the most recent version or not.
3706         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
3708         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
3709         that 'master' is in host:portnum format, to catch errors sooner
3711 2005-10-23  Brian Warner  <warner@lothar.com>
3713         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
3714         when creating the list of warning messages, include the line
3715         immediately after each WARNING: line, since that's usually where
3716         the file and line number wind up.
3718         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
3719         TryScheduler
3721         * NEWS: update
3723 2005-10-22  Brian Warner  <warner@lothar.com>
3725         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
3726         patch from Brad Hards
3727         * buildbot/status/classic.css: same
3728         * buildbot/test/test_web.py (Waterfall): match changes
3730         * buildbot/test/test_steps.py (BuildStep.setUp): set
3731         nextBuildNumber so the test passes
3732         * buildbot/test/test_status.py (MyBuilder): same
3734         * buildbot/status/html.py (StatusResourceBuild.body): revision
3735         might be numeric, so stringify it before html-escapifying it
3736         (CurrentBox.getBox): add a "waiting" state, and show a countdown
3737         timer for the upcoming build
3738         * buildbot/status/classic.css: add background-color attributes for
3739         offline/waiting/building classes
3741         * buildbot/status/builder.py (BuildStatus): derive from
3742         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
3743         the default (i.e. unknown) .slavename to "???" instead of None,
3744         since even unknown slavenames need to be printed eventually.
3745         (BuilderStatus): also derive from styles.Versioned . More
3746         importantly, determine .nextBuildNumber at creation/unpickling
3747         time by scanning the directory of saved BuildStatus instances and
3748         choosing one larger than the highest-numbered one found. This
3749         should fix the problem where random errors during upgrades cause
3750         the buildbot to forget about earlier builds. .nextBuildNumber is
3751         no longer stored in the pickle.
3752         (Status.builderAdded): if we can't unpickle the BuilderStatus,
3753         at least log the error. Also call Builder.determineNextBuildNumber
3754         once the basedir is set.
3756         * buildbot/master.py (BuildMaster.loadChanges): do
3757         styles.doUpgrade afterwards, in case I decide to make Changes
3758         derived from styles.Versioned some day and forget to make this
3759         change later.
3762         * buildbot/test/test_runner.py (Options.testForceOptions): skip
3763         when running under older pythons (<2.3) in which the shlex module
3764         doesn't have a 'split' function.
3766         * buildbot/process/step.py (ShellCommand.start): make
3767         errorMessages= be a list of strings to stuff in the log before the
3768         command actually starts. This makes it easier to flag multiple
3769         warning messages, e.g. when the Source steps have to deal with an
3770         old buildslave.
3771         (CVS.startVC): handle slaves that don't handle multiple branches
3772         by switching into 'clobber' mode
3773         (SVN.startVC): same. Also reject branches without base_url
3774         (Darcs.startVC): same. Also reject revision= in older slaves
3775         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
3776         (Bazaar.startVC): same, and test for baz separately than for arch
3778         * buildbot/slave/commands.py (cvs_ver): document new features
3780         * buildbot/process/step.py (BuildStep.slaveVersion): document it
3781         (BuildStep.slaveVersionNewEnough): more useful utility method
3782         * buildbot/test/test_steps.py (Version): start testing it
3784         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
3785         the 'force' command requires python2.3, for the shlex.split method
3787         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
3788         since we don't use it anymore. The Twisted buildbot uses a
3789         PBChangeSource now.
3791 2005-10-21  Brian Warner  <warner@lothar.com>
3793         * buildbot/process/process_twisted.py: rework all BuildFactory
3794         classes to take a 'source' step as an argument, instead of
3795         building up the SVN instance in the factory.
3796         * docs/examples/twisted_master.cfg: enable build-on-branch by
3797         providing a base_url and default_branch
3799         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
3800         control over --branch and --revision, not that they are always
3801         legal to provide
3802         * buildbot/status/html.py (StatusResourceBuilder.force): same
3803         (StatusResourceBuild.body): display SourceStamp components
3805         * buildbot/scripts/runner.py (ForceOptions): option parser for the
3806         IRC 'force' command, so it can be shared with an eventual
3807         command-line-tool 'buildbot force' mode.
3808         * buildbot/test/test_runner.py (Options.testForceOptions): test it
3810 2005-10-20  Brian Warner  <warner@lothar.com>
3812         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
3814         * docs/examples/twisted_master.cfg: update to use Schedulers
3816         * buildbot/scripts/sample.cfg: update with Schedulers
3818         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
3819         method specifically for use by HTML "force build" button and the
3820         IRC "force" command. Raises an immediate error if there are no
3821         slaves available.
3822         (IBuilderControl.requestBuild): make this just submit a build, not
3823         try to check for existing slaves or set up any when-finished
3824         Deferreds or anything.
3825         * buildbot/process/builder.py (BuilderControl): same
3826         * buildbot/status/html.py (StatusResourceBuilder.force): same
3827         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3828         * buildbot/test/test_slaves.py: same
3829         * buildbot/test/test_web.py: same
3831 2005-10-19  Brian Warner  <warner@lothar.com>
3833         * docs/examples/twisted_master.cfg: re-sync with reality: bring
3834         back python2.2 tests, turn off OS-X threadedselect-reactor tests
3836 2005-10-18  Brian Warner  <warner@lothar.com>
3838         * buildbot/status/html.py: provide 'status' argument to most
3839         StatusResourceFOO objects
3840         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
3841         and Logfiles" section to make the Build page into a more-or-less
3842         comprehensive source of status information about the build
3844         * buildbot/status/mail.py (MailNotifier): include the Build's URL
3845         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
3847 2005-10-17  Brian Warner  <warner@lothar.com>
3849         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
3850         arguments to accomodate Twisted >=2.1.0 . I will have to figure
3851         out what to do about other projects: the correct options for
3852         recent Twisteds will not work for older ones.
3854 2005-10-15  Brian Warner  <warner@lothar.com>
3856         * buildbot/status/builder.py (Status.getURLForThing): add method
3857         to provide a URL for arbitrary IStatusFoo objects. The idea is to
3858         use this in email/IRC status clients to make them more useful, by
3859         providing the end user with hints on where to learn more about the
3860         object being reported on.
3861         * buildbot/test/test_web.py (GetURL): tests for it
3863 2005-10-14  Brian Warner  <warner@lothar.com>
3865         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
3866         fix bug resulting from deferredResult changes
3868 2005-10-13  Brian Warner  <warner@lothar.com>
3870         * buildbot/test/test_changes.py: remove use of deferredResult
3871         * buildbot/test/test_config.py: same
3872         * buildbot/test/test_control.py: same
3873         * buildbot/test/test_status.py: same
3874         * buildbot/test/test_vc.py: this is the only remaining use, since
3875         it gets used at module level. This needs to be replaced by some
3876         sort of class-level run-once routine.
3878         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
3880         * lots: implement multiple slaves per Builder, which means multiple
3881         current builds per Builder. Some highlights:
3882         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
3883         of (state,currentBuilds) instead of (state,currentBuild)
3884         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
3885         (IBuildStatus.getSlavename): new method, so you can tell which
3886         slave got used. This only gets set when the build completes.
3887         (IBuildRequestStatus.getBuilds): new method
3889         * buildbot/process/builder.py (SlaveBuilder): add a .state
3890         attribute to track things like ATTACHING and IDLE and BUILDING,
3891         instead of..
3892         (Builder): .. the .slaves attribute here, which has been turned
3893         into a simple list of available slaves. Added a separate
3894         attaching_slaves list to track ones that are not yet ready for
3895         builds.
3896         (Builder.fireTestEvent): put off the test-event callback for a
3897         reactor turn, to make tests a bit more consistent.
3898         (Ping): cleaned up the slaveping a bit, now it disconnects if the
3899         ping fails due to an exception. This needs work, I'm worried that
3900         a code error could lead to a constantly re-connecting slave.
3901         Especially since I'm trying to move to a distinct remote_ping
3902         method, separate from the remote_print that we currently use.
3903         (BuilderControl.requestBuild): return a convenience Deferred that
3904         provides an IBuildStatus when the build finishes.
3905         (BuilderControl.ping): ping all connected slaves, only return True
3906         if they all respond.
3908         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
3909         reconnect when we shut down.
3911         * buildbot/status/builder.py: implement new methods, convert
3912         one-build-at-a-time methods to handle multiple builds
3913         * buildbot/status/*.py: do the same in all default status targets
3914         * buildbot/status/html.py: report the build's slavename in the
3915         per-Build page, report all buildslaves on the per-Builder page
3917         * buildbot/test/test_run.py: update/create tests
3918         * buildbot/test/test_slaves.py: same
3919         * buildbot/test/test_scheduler.py: remove stale test
3921         * docs/buildbot.texinfo: document the new builder-specification
3922         'slavenames' parameter
3924 2005-10-12  Brian Warner  <warner@lothar.com>
3926         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
3927         report failure correctly, causing Dependent builds to run when
3928         they shouldn't have.
3929         * buildbot/status/builder.py (BuildSetStatus): same
3930         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
3931         (Set.testSuccess): test the both-pass case too
3932         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3933         fix this test: it was ending too early, masking the failure before
3934         (Logger): specialized StatusReceiver to make sure the dependent
3935         builds aren't even started, much less completed.
3937 2005-10-07  Brian Warner  <warner@lothar.com>
3939         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
3940         bot.SlaveBuilder being disowned in the middle of a build
3942         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
3943         this inherit from StatusReceiver. Also upcall in __init__. This
3944         fixes the embarrasing crash when the new buildSetSubmitted method
3945         is invoked and Waterfall/etc don't implement their own.
3946         * buildbot/test/test_run.py: add a TODO note about a test to catch
3947         just this sort of thing.
3949         * buildbot/process/builder.py (Builder.attached): remove the
3950         already-attached warning, this situation is normal. Add some
3951         comments explaining it.
3953 2005-10-02  Brian Warner  <warner@lothar.com>
3955         * buildbot/changes/maildir.py (Maildir.start): Tolerate
3956         OverflowError when setting up dnotify, because some 64-bit systems
3957         have problems with signed-vs-unsigned constants and trip up on the
3958         DN_MULTISHOT flag. Patch from Brad Hards.
3960 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
3962         * buildbot/process/step.py (BuildStep, ShellCommand): Add
3963         progressMetrics, description, descriptionDone to the 'parms' list,
3964         and make use the 'parms' list from the implementation class
3965         instead of only BuildStep to initialize the parameters.  This
3966         allows buildbot.process.factory.s() to initialize all the parms,
3967         not just those defined in directly by BuildStep.
3969 2005-09-03  Brian Warner  <warner@lothar.com>
3971         * NEWS: start adding items for the next release
3973         * docs/examples/twisted_master.cfg: (sync with reality) turn off
3974         python2.2 tests, change 'Quick' builder to only use python2.3
3976 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
3978         * buildbot/status/html.py (StatusResourceBuilder.body): only show
3979         the "Ping Builder" button if the build control is available; the
3980         user sees an exception otherwise
3982         * docs/buildbot.texinfo (PBChangeSource): fix a typo
3984 2005-09-01  Brian Warner  <warner@lothar.com>
3986         * buildbot/interfaces.py (IBuilderStatus.getState): update
3987         signature, point out that 'build' can be None
3988         (IBuildStatus.getETA): point out ETA can be none
3990         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
3991         being None
3992         * buildbot/status/words.py (IrcStatusBot.emit_status): same
3994 2005-08-31  Brian Warner  <warner@lothar.com>
3996         * buildbot/status/base.py (StatusReceiver.builderChangedState):
3997         update to match correct signature: removed 'eta' argument
3998         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
4000 2005-08-30  Brian Warner  <warner@lothar.com>
4002         * buildbot/status/builder.py (LogFile): remove the assertion that
4003         blows up when you try to overwrite an existing logfile, instead
4004         just emit a warning. This case gets hit when the buildmaster is
4005         killed and doesn't get a chance to write out the serialized
4006         BuilderStatus object, so the .nextBuildNumber attribute gets out
4007         of date.
4009         * buildbot/scripts/runner.py (sendchange): add --revision_file to
4010         the 'buildbot sendchange' arguments, for the Darcs context file
4011         * docs/buildbot.texinfo (sendchange): document it
4013         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
4014         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
4015         (IStatus.getSchedulers): new method
4016         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
4017         (Status.getSchedulers): implement
4018         * buildbot/process/builder.py (Builder): maintain
4019         BuilderStatus.pendingBuilds
4020         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
4021         (TryBase.addChange): Try schedulers should ignore Changes
4023         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
4024         for 'try' on CVS/SVN
4025         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
4027         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
4028         report status properly.
4029         (Try.createJob): implement unique buildset IDs
4031         * buildbot/status/client.py (StatusClientPerspective): add a
4032         perspective_getBuildSets method for the benefit of jobdir-style
4033         'try'.
4034         * docs/buildbot.texinfo (try): more docs
4035         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
4036         new test case
4038 2005-08-18  Brian Warner  <warner@lothar.com>
4040         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
4041         actually work. It's functional but still kind of clunky. Also, it
4042         only works with the pb-style.. needs to be made to work with the
4043         jobdir-style too.
4045         * buildbot/status/client.py (RemoteBuildSet): new class
4046         (RemoteBuildRequest): same
4047         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
4048         object, not the internal BuildStatus object.
4049         (RemoteBuild.remote_subscribe): new method to subscribe to builds
4050         outside of the usual buildStarted() return value.
4051         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
4053         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
4054         (Try_Userpass_Perspective.perspective_try): return a remotely
4055         usable BuildSetStatus object
4057         * buildbot/interfaces.py (IBuildStatus): remove obsolete
4058         isStarted()/waitUntilStarted()
4060 2005-08-16  Brian Warner  <warner@lothar.com>
4062         * buildbot/status/builder.py: implement IBuildSetStatus and
4063         IBuildRequestStatus, wire them into place.
4064         * buildbot/buildset.py: same. Add ID, move wait-until-finished
4065         methods into the BuildSetStatus object.
4066         * buildbot/interfaces.py: same
4067         (IStatus.getBuildSets): new method to get pending BuildSets
4068         (IStatusReceiver.buildsetSubmitted): new method which hears about
4069         new BuildSets
4070         * buildbot/master.py (BuildMaster.submitBuildSet): same
4071         * buildbot/process/base.py (BuildRequest): same, replace
4072         waitUntilStarted with subscribe/unsubscribe
4073         * buildbot/process/builder.py (BuilderControl.forceBuild): use
4074         subscribe instead of waitUntilStarted
4075         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
4076         for new method
4077         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
4078         same
4079         * buildbot/test/test_buildreq.py: update for new code
4080         * buildbot/test/test_control.py (Force.testRequest): same
4083         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
4084         for Darcs to not use the tempfile module, so it works under
4085         python-2.2 too. We really didn't need the full cleverness of that
4086         module, since the slave has exclusive control of its own builddir.
4088 2005-08-15  Brian Warner  <warner@lothar.com>
4090         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
4091         for CVS trees. It doesn't work for non-trunk branches,
4092         unfortunately.
4093         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
4094         branch test
4096         * Makefile: make it easier to test against python2.2
4098         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
4099         tearDown2, so things like Arch can unregister archives as they're
4100         shutting down. The previous subclass-override-tearDown technique
4101         resulted in a nested maybeWait() and test failures under
4102         Twisted-1.3.0
4104         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
4105         where we can (Arch), add a branch= argument to set the branch used
4106         when we can't
4107         (BazExtractor): extract the branch too
4108         (TlaExtractor): same
4109         * buildbot/scripts/runner.py (TryOptions): add --branch
4110         * docs/buildbot.texinfo (try): document --branch/try_branch
4112         * buildbot/slave/commands.py (Darcs): implement get-revision for
4113         Darcs, so that 'try' will work. This requires the tempfile module
4114         from python-2.3 .
4116         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
4117         of revisions, branches, and 'try' in the process.
4119 2005-08-11  Brian Warner  <warner@lothar.com>
4121         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
4122         this, it got broken at some point in the last few releases
4123         * buildbot/status/words.py (IrcBuildRequest): reply was broken
4124         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
4125         specifically the removal of ETA information from the tuple
4127         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
4128         warning message
4130         * docs/buildbot.texinfo (try): document both --builder and
4131         'try_builders' in .buildbot/options
4132         * buildbot/scripts/runner.py (TryOptions): add --builder,
4133         accumulate the values into opts['builders']
4134         * buildbot/scripts/tryclient.py (Try.__init__): set builders
4135         * buildbot/test/test_runner.py (Try): add some quick tests to make
4136         sure 'buildbot try --options' and .buildbot/options get parsed
4137         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
4138         use --builder control
4140         * docs/buildbot.texinfo (try): add --port argument to PB style
4142         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
4143         actual SourceStamp. Still need to extract a branch name, somehow.
4144         (Try): finish implementing the try client side, still need a UI
4145         for specifying which builders to use
4146         (Try.getopt): factor our options/config-file reading
4147         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
4148         test it
4149         * buildbot/test/test_vc.py: match SourceStampExtractor change
4151         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
4152         causes the twisted log to be sent to stderr
4154         * buildbot/scheduler.py (Try_Userpass): implement the PB style
4156 2005-08-10  Brian Warner  <warner@lothar.com>
4158         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
4159         style is 90% done, still missing status reporting or waiting for
4160         the buildsets to finish, and it is completely untested.
4162         * buildbot/trybuild.py: delete file, move contents to ..
4163         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
4164         * buildbot/test/test_vc.py: match the move
4166         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
4167         of the TryScheduler, no buildsetID or status-tracking support yet
4168         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
4170         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
4171         possible to set the basedir after __init__ time, so it is easier
4172         to use as a Service-child of the BuildMaster instance
4174         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
4175         that delivers messages to its Service parent instead of requiring
4176         a subclass to be useful. This turns out to be much easier to build
4177         unit tests around.
4179         * buildbot/scripts/tryclient.py (createJob): utility code to
4180         create jobfiles, will eventually be used by 'buildbot try'
4182 2005-08-08  Brian Warner  <warner@lothar.com>
4184         * docs/buildbot.texinfo (try): add docs on the
4185         as-yet-unimplemented Try scheduler
4187         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
4188         * buildbot/test/test_scheduler.py: .. here
4189         (Scheduling.testTryJobdir): add placeholder test for 'try'
4191         * buildbot/test/test_status.py (Log.testMerge3): update to match new
4192         addEntry merging (>=chunkSize) behavior
4193         (Log.testConsumer): update to handle new callLater(0) behavior
4195         * buildbot/test/test_web.py: rearrange tests a bit, add test for
4196         both the MAX_LENGTH bugfix and the resumeProducing hang.
4198         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
4199         put off the actual resumeProducing for a moment with
4200         reactor.callLater(0). This works around a twisted-1.3.0 bug which
4201         causes large logfiles to hang midway through.
4203         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
4204         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
4205         and to improve memory usage when streaming the file out to a web
4206         browser.
4207         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
4208         make this work cleanly
4210 2005-08-03  Brian Warner  <warner@lothar.com>
4212         * buildbot/trybuild.py: new file for 'try' utilities
4213         (getSourceStamp): run in a tree, find out the baserev+patch
4214         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
4215         implemented for SVN and Darcs, still working on Arch. I don't know
4216         how to make CVS work yet.
4218         * docs/buildbot.texinfo: document the 'buildbot' command-line
4219         tool, including the not-yet-implemented 'try' feature, and the
4220         in-flux .buildbot/ options directory.
4222 2005-07-20  Brian Warner  <warner@lothar.com>
4224         * buildbot/locks.py: added temporary id() numbers to Lock
4225         descriptions, to track down a not-really-sharing-the-Lock bug
4227         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
4229         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
4230         needed for python2.2 compatibility
4231         * buildbot/test/test_vc.py: python2.2 compatibility: generators
4232         are from the __future__
4234 2005-07-19  Brian Warner  <warner@lothar.com>
4236         * buildbot/master.py (BuildMaster.loadConfig): give a better error
4237         message when schedulers use unknown builders
4239         * buildbot/process/builder.py (Builder.compareToSetup): make sure
4240         SlaveLock('name') and MasterLock('name') are distinct
4242         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
4243         c['schedulers'] in such a way that we can actually accept
4244         Dependent instances
4245         * buildbot/test/test_config.py: check it
4247         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
4248         utility method to *all* the Schedulers
4249         (Periodic.listBuilderNames): same
4251         * docs/buildbot.texinfo (Interlocks): update chapter to match
4252         reality
4254         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
4255         to make sure that c['sources'], c['schedulers'], and c['status']
4256         are all lists of the appropriate objects, and that the Schedulers
4257         all point to real Builders
4258         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
4259         'listBuilderNames' utility method to support this
4260         * buildbot/scheduler.py: implement the utility method
4261         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
4263         * docs/buildbot.texinfo: add some @cindex entries
4265         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
4266         if it wasn't already set: most tla commands will fail unless one
4267         has been set.
4268         (Arch.createRepository): and disable bazaar's revision cache, since
4269         they cause test failures (the multiple repositories we create all
4270         interfere with each other through the cache)
4272         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
4273         bring it properly up to date with twisted-2.0 test guidelines
4275         * buildbot/master.py (BuildMaster): remove references to old
4276         'interlock' module, this caused a bunch of post-merge test
4277         failures
4278         * buildbot/test/test_config.py: same
4279         * buildbot/process/base.py (Build): same
4281         * buildbot/test/test_slaves.py: stubs for new test case
4283         * buildbot/scheduler.py: add test-case-name tag
4284         * buildbot/test/test_buildreq.py: same
4286         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
4287         unnecessary init code
4288         (Bot.remote_setBuilderList): match it
4290         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
4292         * buildbot/changes/mail.py (parseSyncmail): update comment
4294         * buildbot/test/test_slavecommand.py: disable Shell tests on
4295         platforms that don't suport IReactorProcess
4297         * buildbot/status/builder.py (LogFile): remove the 't' mode from
4298         all places where we open logfiles. It causes OS-X to open the file
4299         in some weird mode that that prevents us from mixing reads and
4300         writes to the same filehandle, which we depend upon to implement
4301         _generateChunks properly. This change doesn't appear to break
4302         win32, on which "b" and "t" are treated differently but a missing
4303         flag seems to be interpreted as "t".
4305 2005-07-18  Brian Warner  <warner@lothar.com>
4307         * buildbot/slave/commands.py (ShellCommand): overhaul
4308         error-handling code, to try and make timeout/interrupt work
4309         properly, and make win32 happier
4310         * buildbot/test/test_slavecommand.py: clean up, stop using
4311         reactor.iterate, add tests for timeout and interrupt
4312         * buildbot/test/sleep.py: utility for a new timeout test
4314         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
4315         code from the local-usebranches branch
4317 2005-07-17  Brian Warner  <warner@lothar.com>
4319         * buildbot/process/process_twisted.py
4320         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
4321         minutes, to match the other twisted BuildFactories, and don't
4322         excuse failures in c/qt/win32 reactors any more.
4324         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
4325         'freebsd' builders, since the buildslaves have been unavailable
4326         for quite a while
4328 2005-07-13  Brian Warner  <warner@lothar.com>
4330         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
4331         build-on-branch feature
4333         * buildbot/process/step.py (Darcs.__init__): add base_url and
4334         default_branch arguments, just like SVN
4335         (Arch.__init__): note that the version= argument is really the
4336         default branch name
4338         * buildbot/slave/commands.py (SourceBase): keep track of the
4339         repository+branch that was used for the last checkout in
4340         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
4341         match, we clobber the directory and perform a fresh checkout
4342         rather than trying to do an in-place update. This should protect
4343         us against trying to get to branch B by doing an update in a tree
4344         obtained from branch A.
4345         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
4346         (SVN.setup): same, just the svnurl
4347         (Darcs.setup): same, just the repourl
4348         (Arch.setup): same, arch coordinates (url), version, and
4349         buildconfig. Also pull the buildconfig from the args dictionary,
4350         which we weren't doing before, so the build-config was effectively
4351         disabled.
4352         (Arch.sourcedirIsUpdateable): don't try to update when we're
4353         moving to a specific revision: arch can't go backwards, so it is
4354         safer to just clobber the tree and checkout a new one at the
4355         desired revision.
4356         (Bazaar.setup): same sourcedata as Arch
4358         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
4359         use maybeWait, to work with twisted-1.3.0 and twcompat
4360         (Dependencies.testRun_Pass): same
4362         * buildbot/test/test_vc.py: rearrange, cleanup
4364         * buildbot/twcompat.py: add defer.waitForDeferred and
4365         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
4366         can work under twisted-1.3.0 .
4368         * buildbot/test/test_vc.py: rewrite. The sample repositories are
4369         now created at setUp time. This increases the runtime of the test
4370         suite considerably (from 91 seconds to 151), but it removes the
4371         need for an offline tarball, which should solve a problem I've
4372         seen where the test host has a different version of svn than the
4373         tarball build host. The new code also validates that mode=update
4374         really picks up recent commits. This approach will also make it
4375         easier to test out branches, because the code which creates the VC
4376         branches is next to the code which uses them. It will also make it
4377         possible to test some change-notification hooks, by actually
4378         performing a VC commit and watching to see the ChangeSource get
4379         notified.
4381 2005-07-12  Brian Warner  <warner@lothar.com>
4383         * docs/buildbot.texinfo (SVN): add branches example
4384         * docs/Makefile (buildbot.ps): add target for postscript manual
4386         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
4387         * buildbot/test/test_locks.py: same
4389         * buildbot/process/step.py (Darcs): comment about default branches
4391         * buildbot/master.py (BuildMaster.loadConfig): don't look for
4392         c['interlocks'] in the config file, complain if it is present.
4393         Scan all locks in c['builders'] to make sure the Locks they use
4394         are uniquely named.
4395         * buildbot/test/test_config.py: remove old c['interlocks'] test,
4396         add some tests to check for non-uniquely-named Locks
4397         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
4398         since the unique-Lock validation code requires it now
4400         * buildbot/locks.py: fix test-case-name
4402         * buildbot/interlock.py: remove old file
4404 2005-07-11  Brian Warner  <warner@lothar.com>
4406         * buildbot/test/test_interlock.py: rename to..
4407         * buildbot/test/test_locks.py: .. something shorter
4409         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
4410         versions (after 2.0.1) changed internet.TCPClient to shut down the
4411         connection in stopService. Change the code to handle this
4412         gracefully.
4414         * buildbot/process/base.py (Build): handle whole-Build locks
4415         * buildbot/process/builder.py (Builder.compareToSetup): same
4416         * buildbot/test/test_interlock.py: make tests work
4418         * buildbot/process/step.py (BuildStep.startStep): complain if a
4419         Step tries to claim a lock that's owned by its own Build
4420         (BuildStep.releaseLocks): typo
4422         * buildbot/locks.py (MasterLock): use ComparableMixin so config
4423         file reloads don't replace unchanged Builders
4424         (SlaveLock): same
4425         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
4426         rewrite to cover new Locks instead of old c['interlocks']
4427         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
4428         slave2 too
4431         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
4432         start the master and connect the buildslave
4434         * buildbot/process/step.py (FailingDummy.done): finish with a
4435         FAILURE status rather than raising an exception
4437         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
4438         stringify a BuildRequest.reason that is None
4440         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
4441         minor fix
4442         * buildbot/status/builder.py (BuildSetStatus): implement enough to
4443         allow scheduler.Dependent to work
4444         * buildbot/buildset.py (BuildSet): set .reason and .results
4446         * buildbot/test/test_interlock.py (Locks.setUp): connect both
4447         slaves, to make the test stop hanging. It still fails, of course,
4448         because I haven't even started to implement Locks.
4450         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
4452         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
4453         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
4454         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
4455         (Dependent): new class for downstream build dependencies
4456         * buildbot/test/test_dependencies.py: tests (still failing)
4458         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
4460 2005-07-07  Brian Warner  <warner@lothar.com>
4462         * buildbot/test/runutils.py (RunMixin): factored this class out..
4463         * buildbot/test/test_run.py: .. from here
4464         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
4465         added new buildbot.locks tests (which all hang right now)
4466         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
4467         * buildbot/process/step.py: claim/release per-BuildStep locks
4469         * docs/Makefile: add 'buildbot.html' target
4471         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
4472         interpreted as "HEAD", so that all VC steps can accept branch=None
4473         and have it mean the "default branch".
4475         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
4477 2005-07-07  Brian Warner  <warner@lothar.com>
4479         * docs/examples/twisted_master.cfg: update to match current usage
4481         * docs/buildbot.texinfo (System Architecture): comment out the
4482         image, it doesn't exist yet and just screws up the HTML manual.
4484 2005-07-05  Brian Warner  <warner@lothar.com>
4486         * debian/.cvsignore: oops, missed one. Removing leftover file.
4488 2005-06-17  Brian Warner  <warner@lothar.com>
4490         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
4491         changed its output in 1.2.0, don't mistakenly think that the
4492         subversion we find isn't capable of supporting our tests.
4494         * debian/*: remove the debian/ directory and its contents, to make
4495         life easier for the proper Debian maintainer
4496         * MANIFEST.in: same
4497         * Makefile (release): same
4499 2005-06-07  Brian Warner  <warner@lothar.com>
4501         * everything: create a distinct SourceStamp class to replace the
4502         ungainly 4-tuple, let it handle merging instead of BuildRequest.
4503         Changed the signature of Source.startVC to include the revision
4504         information (instead of passing it through self.args). Implement
4505         branches for SVN (now only Darcs/Git is missing support). Add more
4506         Scheduler tests.
4508 2005-06-06  Brian Warner  <warner@lothar.com>
4510         * everything: rearrange build scheduling. Create a new Scheduler
4511         object (configured in c['schedulers'], which submit BuildSets to a
4512         set of Builders. Builders can now use multiple slaves. Builds can
4513         be run on alternate branches, either requested manually or driven
4514         by changes. This changed some of the Status classes. Interlocks
4515         are out of service until they've been properly split into Locks
4516         and Dependencies. treeStableTimer, isFileImportant, and
4517         periodicBuild have all been moved from the Builder to the
4518         Scheduler.
4519         (BuilderStatus.currentBigState): removed the 'waiting' and
4520         'interlocked' states, removed the 'ETA' argument.
4522 2005-05-24  Brian Warner  <warner@lothar.com>
4524         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
4525         erroneously abandons the connection (in clientConnectionFailed)
4526         for non-UserErrors, which means that if we lose the connection due
4527         to a network problem or a timeout, we'll never try to reconnect.
4528         Fix this by not upcalling to the buggy parent method. Note:
4529         twisted-2.0 fixes this, but the function only has 3 lines so it
4530         makes more sense to copy it than to try and detect the buggyness
4531         of the parent class. Fixes SF#1207588.
4533         * buildbot/changes/changes.py (Change.branch): doh! Add a
4534         class-level attribute to accomodate old Change instances that were
4535         pickled before 0.6.5 (where .branch was added for new Changes).
4536         This fixes the exception that occurs when you try to look at an
4537         old Change (through asHTML).
4539         * buildbot/__init__.py (version): bump to 0.6.6+ while between
4540         releases
4542 2005-05-23  Brian Warner  <warner@lothar.com>
4544         * buildbot/__init__.py (version): release 0.6.6
4546 2005-05-23  Brian Warner  <warner@lothar.com>
4548         * NEWS: update for 0.6.6 release
4549         * debian/changelog: same
4551         * buildbot/scripts/runner.py (start): put the basedir in sys.path
4552         before starting: this was done by twistd back when we spawned it,
4553         now that we're importing the pieces and running them in the
4554         current process, we have to do it ourselves. This allows
4555         master.cfg to import files from the same directory without
4556         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
4557         Stichele for the catch.
4558         (Options.opt_version): Add a --version command (actually, just make
4559         the existing --version command emit Buildbot's version too)
4561         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
4562         fix to make this behave like other LogFiles, this time to handle
4563         existing LogFiles on disk. (add the missing .upgrade method)
4564         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
4566 2005-05-21  Brian Warner  <warner@lothar.com>
4568         * buildbot/test/test_runner.py (Create.testMaster): match the
4569         rawstring change in runner.py:masterTAC
4571         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
4572         TwistedWords is installed
4573         * buildbot/test/test_status.py: same, with TwistedMail
4575         * buildbot/master.py: remove old IRC/Waterfall imports (used by
4576         some old, deprecated, and removed config keys). This should enable
4577         you to use the base buildbot functionality with Twisted-2.0.0 when
4578         you don't also have TwistedWeb and TwistedWords installed
4580 2005-05-20  Brian Warner  <warner@lothar.com>
4582         * buildbot/scripts/runner.py (run): call sendchange(), not
4583         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
4584         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
4585         (stop): don't wait for process to die when sending SIGHUP
4586         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
4587         directory name gets interpreted, which you don't want
4588         (slaveTAC): same
4590         * buildbot/__init__.py (version): bump to 0.6.5+ while between
4591         releases
4593 2005-05-18  Brian Warner  <warner@lothar.com>
4595         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
4597 2005-05-18  Brian Warner  <warner@lothar.com>
4599         * README: update for 0.6.5
4600         * debian/changelog: same
4602         * buildbot/changes/changes.py: rename tag= to branch=, since
4603         that's how we're using it, and my design for the upcoming "build a
4604         specific branch" feature wants it. also, tag= was too CVS-centric
4605         * buildbot/changes/mail.py (parseSyncmail): same
4606         * buildbot/process/base.py (Build.isBranchImportant): same
4607         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
4608         * docs/buildbot.texinfo (Attributes of Changes): same
4610         * NEWS: update tag=, update for upcoming release
4612 2005-05-17  Brian Warner  <warner@lothar.com>
4614         * buildbot/scripts/runner.py (stop): actually poll once per
4615         second, instead of re-killing the poor daemon once per second.
4616         Sleep briefly (0.1s) before the first poll, since there's a good
4617         chance we can avoid waiting the full second if the daemon shuts
4618         down quickly. Also remove the sys.exit() at the end.
4619         (start): remove the unneighborly sys.exit()
4621         * Makefile: improve permission-setting to not kick Arch so badly
4623         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
4624         default --keepalive=600, since it doesn't hurt very much, and it's
4625         a hassle to discover that you need it.
4626         * buildbot/test/test_runner.py (Create.testSlave): test it
4628         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
4629         IRC bot about EXCEPTION
4631         * buildbot/status/client.py (PBListener): upcall more correctly
4633         * buildbot/process/base.py (Build.allStepsDone): if a step caused
4634         an exception mark the overall build with EXCEPTION, not SUCCESS
4636         * buildbot/scripts/runner.py (makefile_sample): remove the leading
4637         newline
4638         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
4639         * Makefile: update some release-related stuff
4641         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
4642         gets called when there isn't actually an active process, just end
4643         the Command instead of blowing up. I don't know how it gets into
4644         this state, but the twisted win32 buildslave will sometimes hang,
4645         and when it shakes its head and comes back, it thinks it's still
4646         running a Command. The next build causes this command to be
4647         interrupted, but the lack of self.process.pid breaks the interrupt
4648         attempt.
4650         * NEWS: document changes since the last release
4652         * buildbot/scripts/runner.py (start): change 'buildbot start' to
4653         look for Makefile.buildbot instead of a bare Makefile . The
4654         'buildbot start' does not install this file, so you have to
4655         manually copy it if you want to customize startup behavior.
4656         (createMaster): change 'buildbot master' command to create
4657         Makefile.sample instead of Makefile, to create master.cfg.sample
4658         instead of master.cfg (requiring you to copy it before the
4659         buildmaster can be started). Both sample files are kept up to
4660         date, i.e. they are overwritten if they have been changed. The
4661         'buildbot.tac' file is *not* overwritten, but if the new contents
4662         don't match the old, a 'buildbot.tac.new' file is created and the
4663         user is warned. This seems to be a much more sane way to handle
4664         startup files. Also, don't sys.exit(0) when done, so we can run
4665         unit tests against it.
4666         (createSlave): same. Don't overwrite the sample info/ files.
4667         * buildbot/scripts/sample.mk: remove. the contents were pulled
4668         into runner.py, since they need to match the behavior of start()
4669         * setup.py: same
4670         * MANIFEST.in: same
4672         * docs/buildbot.texinfo (Launching the daemons): document it
4673         * buildbot/test/test_runner.py (Create): test it
4675         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
4676         version that can handle string-in-string tests, because otherwise
4677         python-2.2 fails the tests. It'd be tremendous if Trial's test
4678         took two strings under 2.2 too.
4680         * everything: fixed all deprecation warnings when running against
4681         Twisted-2.0 . (at least all the ones in buildbot code, there are a
4682         few that come from Twisted itself). This involved putting most of
4683         the Twisted-version specific code in the new buildbot.twcompat
4684         module, and creating some abstract base classes in
4685         buildbot.changes.base and buildbot.status.base (which might be
4686         useful anyway). __implements__ is a nuisance and requires an ugly
4687         'if' clause everywhere.
4689         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
4690         delay before finishing the test: it seems that smtp.sendmail
4691         doesn't hang up on the server, so we must wait a moment so it can
4692         hang up on us. This removes the trial warning about an unclean
4693         reactor.
4695 2005-05-16  Brian Warner  <warner@lothar.com>
4697         * buildbot/process/step.py (Source): add 'retry' argument. It is a
4698         tuple of (delay, repeats).
4699         * buildbot/test/test_vc.py (Retry): test it
4700         * docs/buildbot.texinfo (Source Checkout): document it
4701         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
4702         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
4703         doVCFull() are handled by re-trying the checkout (after a delay)
4704         some number of times.
4705         (ShellCommand._startCommand): make header lines easier to read
4707         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
4708         shutdown
4709         (WebTest.test_logfile): make sure master gets shut down, silences
4710         some "unclean reactor" test errors
4712         * buildbot/test/test_changes.py (Sender.tearDown): spin the
4713         reactor once after shutdown, something in certain versions of
4714         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
4715         fails, svn-trunk is ok.
4717         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
4718         second win32 error message
4720         * buildbot/test/test_run.py (Status.testSlave): be smarter about
4721         validating the ETA, so the tests don't fail on slow systems
4723 2005-05-15  Brian Warner  <warner@lothar.com>
4725         * buildbot/status/builder.py (HTMLLogFile): make this behave like
4726         the new LogFile class, so upgrading works properly
4727         (LogFileProducer.resumeProducing): survive resumeProducing after
4728         we've exhausted the chunkGenerator
4730         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
4731         logs too
4732         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
4733         (Log.testUpgrade): same
4735         * docs/buildbot.texinfo (Maintenance): describe how to delete old
4736         Builds and logs with a cron job.
4738         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
4739         of the old non-offline LogFile, added code to upgrade these to
4740         new-style contents-live-on-disk instances at load time (in a way
4741         that doesn't invalidate the old Build pickles, so upgrading to
4742         0.6.5 is not a one-way operation). Got rid of everything related
4743         to 'stub' builds.
4744         (LogFile.__init__): create LogFiles with the parent step status,
4745         the log's name, and a builder-relative filename where it can keep
4746         the contents on disk.
4747         (LogFile.hasContents): new method, clients are advised to call it
4748         before getText or getChunks and friends. If it returns False, the
4749         log's contents have been deleted and getText() will raise an
4750         error.
4751         (LogFile.getChunks): made it a generator
4752         (LogFile.subscribeConsumer): new method, takes a Twisted-style
4753         Consumer (except one that takes chunks instead of strings). This
4754         enables streaming of very large logfiles without storing the whole
4755         thing in memory.
4756         (BuildStatus.generateLogfileName): create names like
4757         12-log-compile-output, with a _0 suffix if required to be unique
4758         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
4759         or earlier) logfiles into new-style ones
4760         (BuilderStatus): remove everything related to 'stub' builds. There
4761         is now only one build cache, and we don't strip logs from old
4762         builds anymore.
4763         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
4764         since we no longer fight to keep it in the cache
4766         * buildbot/status/html.py (TextLog.render_GET): use a
4767         ChunkConsumer to stream the log entries efficiently.
4768         (ChunkConsumer): wrapper which consumes chunks and writes
4769         formatted HTML.
4771         * buildbot/test/test_twisted.py (Parse.testParse): use a
4772         LogFile-like object instead of a real one
4774         * buildbot/test/test_status.py (MyLog): handle new LogFile code
4775         (Log.testMerge3): validate more merge behavior
4776         (Log.testChunks): validate LogFile.getChunks
4777         (Log.testUpgrade): validate old-style LogFile upgrading
4778         (Log.testSubscribe): validate LogFile.subscribe
4779         (Log.testConsumer): validate LogFile.subscribeConsumer
4781         * buildbot/interfaces.py (IStatusLogStub): remove
4782         (IStatusLog.subscribeConsumer): new method
4783         (IStatusLog.hasContents): new method
4784         (IStatusLogConsumer): describes things passed to subscribeConsumer
4786         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
4787         the log contents if it does not have any contents.
4788         (StatusResourceBuildStep.body): same
4789         (StatusResourceBuildStep.getChild): give a 404 for empty logs
4791 2005-05-14  Brian Warner  <warner@lothar.com>
4793         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
4794         timeouts to try and make the windows metabuildslave not hang
4796 2005-05-13  Mike Taylor  <bear@code-bear.com>
4798         * buildbot/slave/commands.py (rmdirRecursive): added a check
4799         to ensure the path passed into rmdirRecursive actually exists.
4800         On win32 a non-existant path would generate an exception.
4802 2005-05-13  Brian Warner  <warner@lothar.com>
4804         * buildbot/slave/commands.py (rmdirRecursive): replacement for
4805         shutil.rmtree which behaves correctly on windows in the face of
4806         files that you have to chmod before deleting. Thanks to Bear at
4807         the OSAF for the routine.
4808         (SourceBase.doClobber): use rmdirRecursive
4810 2005-05-12  Brian Warner  <warner@lothar.com>
4812         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
4813         method generate chunks instead of returning a big list. This
4814         allows the same method to be used for both old LogFile and new
4815         OfflineLogFile.
4816         (OfflineLogFile.getText): use the generator
4817         (OfflineLogFile.subscribe): same
4818         * buildbot/status/html.py (TextLog.resumeProducing): same
4819         * buildbot/interfaces.py (IStatusLog.getChunks): document it
4821         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
4822         point out that OfflineLogFile does not currently work with
4823         html.Waterfall . Fixing this is high-priority.
4825         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
4826         apparently windows defaults to using stdout
4828         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
4829         better message on failure so I can figure out the win32 problem
4831         * buildbot/slave/commands.py (ShellCommand._startCommand): update
4832         log messages to include more useful copies of the command being
4833         run, the argv array, and the child command's environment.
4834         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
4836 2005-05-11  Brian Warner  <warner@lothar.com>
4838         * setup.py: oops, install debug.glade so 'buildbot debugclient'
4839         will actually work
4840         * Makefile: update the deb-snapshot version
4842         * docs/buildbot.texinfo: move all .xhtml docs into a new
4843         .texinfo-format document, adding a lot of material in the process.
4844         This is starting to look like a real user's manual. Removed all
4845         the Lore-related files: *.xhtml, *.css, template.tpl .
4846         * docs/Makefile: simple makefile to run 'makeinfo'
4847         * buildbot/scripts/sample.cfg: rearrange slightly
4848         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
4850 2005-05-10  Brian Warner  <warner@lothar.com>
4852         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
4853         different name for the internal twistw module, handle it.
4855         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
4856         * setup.py: .. and stop trying to install it
4858         * buildbot/process/step.py (Git): added support for 'cogito' (aka
4859         'git'), the new linux kernel VC system (http://kernel.org/git/).
4860         Thanks to Brandon Philips for the patch.
4861         * buildbot/slave/commands.py (Git): same
4863 2005-05-06  Brian Warner  <warner@lothar.com>
4865         * buildbot/status/builder.py (OfflineLogFile): replace the default
4866         LogFile with a form that appends its new contents to a disk file
4867         as they arrive. The complete log data is never kept in RAM. This
4868         is the first step towards handling very large (100MB+) logfiles
4869         without choking quite so badly. (The other half is
4870         producer/consumer on the HTML pages).
4871         (BuildStepStatus.addLog): use OfflineLogFile by default
4872         (BuildStatus.getLogfileName): helper code to give the
4873         OfflineLogFile a filename to work with
4875         * buildbot/test/test_status.py (Results.testAddResults): update
4876         tests to handle new asserts
4877         * buildbot/test/test_vc.py (Patch.doPatch): same
4878         * buildbot/test/test_steps.py (BuildStep.setUp): same
4880 2005-05-05  Brian Warner  <warner@lothar.com>
4882         * buildbot/scripts/runner.py (start): if there is no Makefile,
4883         launch the app by importing twistd's internals and calling run(),
4884         rather than spawning a new twistd process. This stands a much
4885         better chance of working under windows.
4886         (stop): kill the process with os.kill instead of spawning
4887         /bin/kill, again to reduce the number of external programs which
4888         windows might not have in the PATH. Also wait up to 5 seconds for
4889         the process to go away, allowing things like 'buildbot stop;
4890         buildbot start' to be reliable in the face of slow shutdowns.
4892         * buildbot/master.py (Dispatcher.__getstate__): remove old
4893         .tap-related methods
4894         (BuildMaster.__getstate__): same
4895         (makeService): same
4896         * buildbot/slave/bot.py (makeService): same
4897         (Options.longdesc): same
4898         * buildbot/scripts/runner.py: copy over some old mktap option text
4900         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
4901         'buildbot master' now creates a buildbot.tac file, so there is no
4902         longer a create-instance/save/reload sequence. mktap is dead, long
4903         live twistd -y.
4904         * buildbot/scripts/sample.mk: use twistd -y, not -f
4905         * buildbot/test/test_config.py: remove mktap-based test
4906         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
4907         * README: don't reference mktap
4909         * docs/source.xhtml: document some of the attributes that Changes
4910         might have
4912         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
4914         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
4915         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
4916         * buildbot/changes/changes.py (Change)
4917         * buildbot/changes/mail.py (parseSyncmail)
4918         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
4919         (Test3.testMsgS5)
4920         * buildbot/process/base.py (Build.isTagImportant)
4921         (Build.addChange)
4924 2005-05-04  Brian Warner  <warner@lothar.com>
4926         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
4927         connection after sending the change, so that unit tests don't
4928         complain about sockets being left around
4930         * buildbot/status/html.py (WaterfallStatusResource.body): fix
4931         exception in phase=0 rendering
4932         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4934         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
4936         * buildbot/master.py (BuildMaster.loadConfig): finally remove
4937         deprecated config keys: webPortnum, webPathname, irc, manholePort,
4938         and configuring builders with tuples.
4939         * buildbot/test/test_config.py: stop testing compatibility with
4940         deprecated config keys
4941         * buildbot/test/test_run.py: same
4943 2005-05-03  Brian Warner  <warner@lothar.com>
4945         * contrib/arch_buildbot.py: survive if there are no logfiles
4946         (username): just use a string, os.getlogin isn't reliable
4948         * buildbot/scripts/runner.py (sendchange): oops, fix the command
4949         so 'buildbot sendchange' actually works. The earlier test only
4950         covered the internal (non-reactor-running) form.
4952         * contrib/arch_buildbot.py: utility that can run as an Arch hook
4953         script to notify the buildmaster about changes
4955         * buildbot/scripts/runner.py (sendchange): new command to send a
4956         change to a buildbot.changes.pb.PBChangeSource receiver.
4957         * buildbot/test/test_changes.py (Sender): test it
4959         * buildbot/master.py (BuildMaster.startService): mark .readConfig
4960         after any reading of the config file, not just when we do it in
4961         startService. This makes some tests a bit cleaner.
4963         * buildbot/changes/pb.py: add some log messages
4965         * buildbot/process/base.py (Build.startBuild): fix a bug that
4966         caused an exception when the build terminated in the very first
4967         step.
4968         (Build.stepDone): let steps return a status of EXCEPTION. This
4969         terminates the build right away, and sets the build's overall
4970         status to EXCEPTION too.
4971         * buildbot/process/step.py (BuildStep.failed): return a status of
4972         EXCEPTION when that is what has happened.
4974         * buildbot/process/step.py (Arch.computeSourceRevision): finally
4975         implement this, allowing Arch-based projects to get precise
4976         checkouts instead of always using the latest code
4977         (Bazaar): create variant of Arch to let folks use baz instead of
4978         tla. Requires a new buildslave too.
4979         * buildbot/slave/commands.py (Arch): add 'revision' argument
4980         (Bazaar): create variant of Arch that uses baz instead of tla.
4981         Remove the code that extracts the archive name from the
4982         register-archive output, since baz doesn't provide it, and require
4983         the user provide both the archive name and its location.
4984         * buildbot/test/test_vc.py (VC.testBazaar): added tests
4986 2005-05-02  Brian Warner  <warner@lothar.com>
4988         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
4989         thanks to Nick Trout.
4991         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
4992         deals better with source Makefile coming from a read-only CVS
4993         checkout. Thanks to Nick Trout for the catch.
4995         * buildbot/__init__.py (version): bump to 0.6.4+ while between
4996         releases
4998 2005-04-28  Brian Warner  <warner@lothar.com>
5000         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
5002         * debian/changelog: update for 0.6.4
5004 2005-04-28  Brian Warner  <warner@lothar.com>
5006         * README.w32: add a checklist of steps for getting buildbot
5007         running on windows.
5008         * MANIFEST.in: include it in the tarball
5010         * NEWS: update
5012         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
5013         broken .tap files from 0.6.3 by getting rid of .services,
5014         .namedServices, and .change_svc at load time.
5016 2005-04-27  Brian Warner  <warner@lothar.com>
5018         * NEWS: update in preparation for new release
5020         * buildbot/test/test_config.py (Save.testSave): don't pull in
5021         twisted.scripts.twistd, we don't need it and it isn't for windows
5022         anyway.
5024         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
5025         accomodate win32 which can't do atomic-rename
5027 2005-04-27  Brian Warner  <warner@lothar.com>
5029         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
5030         timeouts to help the slow metabuildbot not flunk them so much
5031         (Disconnect.testBuild3): same
5032         (Disconnect.testBuild4): same
5033         (Disconnect.testInterrupt): same
5035         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
5036         setup, it was completely broken for new buildmasters (those which
5037         did not have a 'change.pck' already saved. Thanks to Paul Warren
5038         for catching this (embarrassing!) bug.
5039         (Dispatcher.__getstate__): don't save our registered avatar
5040         factories, since they'll be re-populated when the config file is
5041         re-read.
5042         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
5043         tests (since the real mktap-generated BuildMaster doesn't save
5044         this attribute).
5045         (BuildMaster.__getstate__): don't save any service children,
5046         they'll all be re-populated when the config file is re-read.
5047         * buildbot/test/test_config.py (Save.testSave): test for this
5049 2005-04-26  Brian Warner  <warner@lothar.com>
5051         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
5052         rendered with Blender.. looks a bit nicer.
5053         * buildbot/docs/images/icon.blend: add the Blender file for it
5055         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
5056         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
5057         running under windows. This appears to be the best way to allow
5058         BuildSteps to do something normal like 'trial -v buildbot.test' or
5059         'make foo' and still expect it to work. The idea is to make the
5060         BuildSteps look as much like what a developer would type when
5061         compiling or testing the tree by hand. This approach probably has
5062         problems when there are spaces in the arguments, so if you've got
5063         windows buildslaves, you'll need to pay close attention to your
5064         commands.
5066         * buildbot/status/html.py (WaterfallStatusResource.body): add the
5067         timezone to the timestamp column.
5068         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
5070         * buildbot/scripts/runner.py (loadOptions): do something sane for
5071         windows, I think. We use %APPDATA%/buildbot instead of
5072         ~/.buildbot, but we still search everywhere from the current
5073         directory up to the root for a .buildbot/ subdir. The "is it under
5074         $HOME" security test was replaced with "is it owned by the current
5075         user", which is only performed under posix.
5076         * buildbot/test/test_runner.py (Options.testFindOptions): update
5077         tests to match. The "is it owned by the current user" check is
5078         untested. The test has been re-enabled for windows.
5080         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
5081         any "\n" in the expected output with the platform-specific line
5082         separator. Make this separator "\r\n" on PTYs under unix, they
5083         seem to do that and I don't know why
5085         * buildbot/test/test_runner.py (Options.optionsFile): disable on
5086         windows for now, I don't know what ~/.buildbot/ should mean there.
5088         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
5089         win32 compatibility, don't use "/tmp"
5090         (Basedir.testChangeBuilddir): remove more unixisms
5092 2005-04-26  Brian Warner  <warner@lothar.com>
5094         * buildbot/test/test_control.py (Force.rmtree): python2.2
5095         compatibility, apparently its shutil.rmtree ignore_errors=
5096         argument is ignored.
5097         * buildbot/test/test_run.py (Run.rmtree): same
5098         (RunMixin.setUp): same
5100         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
5101         not os.path.sep
5103         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
5104         'substring in string' operator, must use string.find(substr)!=-1
5105         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
5106         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
5108         * buildbot/scripts/runner.py (loadOptions): add code to search for
5109         ~/.buildbot/, a directory with things like 'options', containing
5110         defaults for various 'buildbot' subcommands. .buildbot/ can be in
5111         the current directory, your $HOME directory, or anywhere
5112         inbetween, as long as you're somewhere inside your home directory.
5113         (debugclient): look in ~/.buildbot/options for master and passwd
5114         (statuslog): look in ~/.buildbot/options for 'masterstatus'
5115         * buildbot/test/test_runner.py (Options.testFindOptions): test it
5117         * buildbot/status/client.py (makeRemote): new approach to making
5118         IRemote(None) be None, which works under Twisted-2.0
5119         * buildbot/test/test_status.py (Client.testAdaptation): test it
5121         * buildbot/status/builder.py (Status.builderAdded): when loading a
5122         pickled BuilderStatus in from disk, set its name after loading.
5123         The config file might have changed its name (but not its
5124         directory) while it wasn't looking.
5125         
5126         * buildbot/process/builder.py (Builder.attached): always return a
5127         Deferred, even if the builder was already attached
5128         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
5130 2005-04-25  Brian Warner  <warner@lothar.com>
5132         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
5133         category-related exception when announcing a build has finished
5135         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
5136         reference no-longer-existent changemaster.sources
5137         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
5139         * buildbot/__init__.py (version): bump to 0.6.3+ while between
5140         releases
5142 2005-04-25  Brian Warner  <warner@lothar.com>
5144         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
5146         * debian/changelog: update for 0.6.3
5148 2005-04-25  Brian Warner  <warner@lothar.com>
5150         * MANIFEST.in: make sure debug.glade is in the tarball
5152         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
5154         * NEWS: update for the imminent 0.6.3 release
5156         * buildbot/status/html.py (HtmlResource.content): make the
5157         stylesheet <link> always point at "buildbot.css".
5158         (StatusResource.getChild): map "buildbot.css" to a static.File
5159         containing whatever css= argument was provided to Waterfall()
5160         (Waterfall): provide the "classic" css as the default.
5161         * docs/waterfall.classic.css: move default CSS from here ..
5162         * buildbot/status/classic.css: .. to here
5164         * MANIFEST.in: make sure classic.css is included in the tarball
5165         * setup.py: and that it is installed too, under buildbot/status/
5167         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
5168         the module level, because buildbot.tap files from 0.6.2 don't have
5169         it in their attribute dictionary.
5171         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
5172         really exists at startup, might save some confusion somewhere.
5174 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
5176         * docs/waterfall.classic.css:
5177           add a stylesheet that's almost the same as the "classic"
5178           buildbot style
5180         * buildbot/status/builder.py:
5181           add EXCEPTION as a result - this is a problem for the bot
5182           maintainer, not a build problem for the changers
5183         * buildbot/process/step.py:
5184           use EXCEPTION instead of FAILURE for exceptions
5185         * buildbot/status/html.py:
5186           add build_get_class to get a class out of a build/buildstep
5187           finish naming the classes
5188           split out sourceNames to changeNames and builderNames so we
5189           can style them separately
5190         * docs/config.xhtml:
5191           finish documenting classes as they are right now
5193         * buildbot/status/html.py:
5194           name the classes as we agreed on IRC
5195         * docs/config.xhtml:
5196           and document them
5198         * buildbot/status/html.py:
5199           same for cssclass->class_
5201         * buildbot/status/html.py:
5202           as decided on IRC, use class_ for the "class" attribute to not
5203           conflict with the class keyword, and clean up the messy **{} stuff.
5205         * buildbot/status/mail.py:
5206           put back "builders" argument, and fix docstring, because the
5207           code *ignores* builders listed in this argument
5209         * buildbot/process/builder.py:
5210           remove FIXME notes - category is now indeed a cvar of BuilderStatus
5212         * docs/config.xhtml:
5213           describe the category argument for builders
5215         * buildbot/status/builder.py:
5216           Fix a silly bug due to merging
5218         * buildbot/process/builder.py:
5219           remove category from the process Builder ...
5220         * buildbot/status/builder.py:
5221           ... and add it to BuilderStatus instead.
5222           Set category on unpickled builder statuses, they might not have it.
5223         * buildbot/master.py:
5224           include category when doing builderAdded
5225         * buildbot/status/mail.py:
5226           return None instead of self for builders we are not interested in.
5227         * buildbot/test/test_run.py:
5228           fix a bug due to only doing deferredResult on "dummy" waiting
5229         * buildbot/test/test_status.py:
5230           add checks for the Mail IStatusReceiver returning None or self
5232         * buildbot/status/html.py:
5233           fix testsuite by prefixing page title with BuildBot
5235         * buildbot/status/builder.py:
5236           have .category in builder status ...
5237         * buildbot/process/builder.py:
5238           ... and set it from Builder
5239         * buildbot/status/html.py:
5240           make .css a class variable 
5241         * buildbot/test/test_status.py:
5242           write more tests to cover our categories stuff ...
5243         * buildbot/status/mail.py:
5244           ... and fix the bug that this uncovered
5246         * buildbot/changes/mail.py:
5247         * buildbot/changes/pb.py:
5248         * buildbot/master.py:
5249         * buildbot/process/base.py:
5250         * buildbot/process/factory.py:
5251         * buildbot/process/interlock.py:
5252         * buildbot/process/step.py:
5253         * buildbot/process/step_twisted.py:
5254         * buildbot/slave/commands.py:
5255         * buildbot/status/builder.py:
5256         * buildbot/status/client.py:
5257         * buildbot/status/html.py:
5258         * buildbot/status/mail.py:
5259         * buildbot/status/progress.py:
5260         * buildbot/test/test_changes.py:
5261         * buildbot/test/test_config.py:
5262         * buildbot/test/test_control.py:
5263         * buildbot/test/test_interlock.py:
5264         * buildbot/test/test_maildir.py:
5265         * buildbot/test/test_mailparse.py:
5266         * buildbot/test/test_run.py:
5267         * buildbot/test/test_slavecommand.py:
5268         * buildbot/test/test_status.py:
5269         * buildbot/test/test_steps.py:
5270         * buildbot/test/test_twisted.py:
5271         * buildbot/test/test_util.py:
5272         * buildbot/test/test_vc.py:
5273         * buildbot/test/test_web.py:
5274         * buildbot/util.py:
5275           add test-case-name at the top of a whole set of files
5277         * buildbot/status/builder.py:
5278           keep order of addition when getting builder names
5279         * buildbot/status/words.py:
5280         * buildbot/test/test_run.py:
5281           add test for getBuilderNames
5283         * buildbot/process/base.py:
5284         * buildbot/process/step.py:
5285         * buildbot/status/builder.py:
5286         * buildbot/status/html.py:
5287           make buildbot css-able
5288           replace the color code for purple with purple, don't understand
5289           why it wasn't purple to start with
5291         * buildbot/status/words.py:
5292           ok, so it doesn't look like BuilderStatus.remote is still valid.
5293           Use what waterfall uses instead.
5295         * buildbot/interfaces.py:
5296         * buildbot/status/builder.py:
5297         * buildbot/status/html.py:
5298         * buildbot/status/mail.py:
5299         * buildbot/status/words.py:
5300         * buildbot/test/test_run.py:
5301           use categories everywhere and make it be a list.  More sensible
5302           for the future.  Also make words actually respect this in
5303           buildFinished.
5305         * buildbot/interfaces.py:
5306           add category argument to getBuilderNames
5307         * buildbot/process/builder.py:
5308         * buildbot/status/builder.py:
5309         * buildbot/status/html.py:
5310         * buildbot/status/mail.py:
5311         * buildbot/status/words.py:
5312         * buildbot/test/test_run.py:
5313           move from specifying builders by name to specifying the category
5315         * buildbot/status/html.py:
5316         * buildbot/status/words.py:
5317           add "builders=" to __init__ of status clients so they can
5318           limit themselves to the given list of builders to report on
5320         * buildbot/status/html.py: set the title to the product name
5322 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
5324         * buildbot/interfaces.py:
5325         * buildbot/status/builder.py:
5326           more documentation.  Hm, not sure if ChangeLog entries make sense
5327           here...
5329 2005-04-23  Brian Warner  <warner@lothar.com>
5331         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
5333         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
5335         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
5336         the sub-commands that log buildmaster status to stdout and to a
5337         GUI window, respectively.
5339         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
5340         functionality is working again, but all the step-status and ETA
5341         stuff is missing. Commented out a lot of code pending more
5342         overhaul work.
5344         * buildbot/status/client.py: make sure that IRemote(None) is None
5346         * buildbot/changes/changes.py: import defer, oops
5347         (ChangeMaster): remove the .sources list, rely upon the fact that
5348         MultiServices can be treated as sequences of their children. This
5349         cleans up the add/remove ChangeSource routines a lot, as we keep
5350         exactly one list of the current sources instead of three.
5352         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
5353         up an empty ChangeMaster at init time.
5354         (BuildMaster.loadChanges): if there are changes to be had from
5355         disk, replace self.change_svc with the new ones. If not, keep
5356         using the empty ChangeMaster set up in __init__.
5357         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
5358         instead of a separate list, makes the code a bit cleaner.
5359         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
5360         (ConfigTest.testSources): same, also wait for loadConfig to finish.
5361         Extend the test to make sure we can get rid of the sources when
5362         we're done.
5364 2005-04-22  Brian Warner  <warner@lothar.com>
5366         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
5367         and info/host files when making the slave directory
5369         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
5370         whendone= argument, just return the Deferred and let the caller do
5371         what they want with it.
5372         (Disconnect.testBuild1): wait for shutdownSlave
5373         (Basedir.testChangeBuilddir): new test to make sure changes to the
5374         builddir actually get propagated to the slave
5376         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
5377         explicit method, rather than passing the builddir in __init__ .
5378         Make sure to update self.basedir too, this was broken before.
5379         (Bot.remote_setBuilderList): use b.setBuilddir for both new
5380         builders and for ones that have just had their builddir changed.
5381         (BotFactory): add a class-level .perspective attribute, so
5382         BuildSlave.waitUntilDisconnected won't get upset when the
5383         connection hasn't yet been established
5384         (BuildSlave.__init__): keep track of the bot.Bot instance, so
5385         tests can reach through it to inspect the SlaveBuilders
5387         * buildbot/process/base.py (Build.buildException): explain the
5388         log.err with a log.msg
5389         * buildbot/process/builder.py (Builder.startBuild): same
5390         (Builder._startBuildFailed): improve error message
5392         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
5393         occurred because we lost the brand-new connection, retry instead
5394         of giving up. If not, it's probably an authorization failure, and
5395         it makes sense to stop trying. Make sure we log.msg the reason
5396         that we're log.err'ing the failure, otherwise test failures are
5397         really hard to figure out.
5399         * buildbot/master.py: change loadConfig() to return a Deferred
5400         that doesn't fire until the change has been fully implemented.
5401         This means any connected slaves have been updated with the new
5402         builddir. This change makes it easier to test the code which
5403         actually implements this builddir-updating.
5404         (BotPerspective.addBuilder): return Deferred
5405         (BotPerspective.removeBuilder): same
5406         (BotPerspective.attached): same
5407         (BotPerspective._attached): same. finish with remote_print before
5408         starting the getSlaveInfo, instead of doing them in parallel
5409         (BotPerspective.list_done): same
5410         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
5411         actually calling slave.disconnect()
5412         (BotMaster.addBuilder): same
5413         (BotMaster.removeBuilder): same
5414         (BuildMaster.loadConfig): same
5415         (BuildMaster.loadConfig_Slaves): same
5416         (BuildMaster.loadConfig_Sources): same
5417         (BuildMaster.loadConfig_Builders): same
5418         (BuildMaster.loadConfig_status): same
5420         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
5421         a Deferred that fires when the source is finally removed
5423         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
5424         the previous tree on win32, where we have to do it synchronously,
5425         make sure we return a Deferred anyway.
5426         (SourceBase.doCopy): same
5428         * buildbot/scripts/runner.py (statusgui): use the text client for
5429         now, while I rewrite the Gtk one
5430         * buildbot/clients/base.py: strip out old code, leaving just the
5431         basic print-message-on-event functionality. I also remove the
5432         ReconnectingPBClientFactory, but it does at least quit when it
5433         loses the connection instead of going silent
5435 2005-04-21  Brian Warner  <warner@lothar.com>
5437         * Makefile: minor tweaks
5439         * NEWS: point out deprecation warnings, new features for
5440         /usr/bin/buildbot
5442         * buildbot/master.py (BuildMaster.loadConfig): emit
5443         DeprecationWarnings for Builders defined with tuples. Rearrange
5444         code to facility removal of deprecated configuration keys in the
5445         next release.
5447         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
5448         'buildbot' command to put a little Makefile in the target that
5449         helps you re-create the buildbot.tap file, start or stop the
5450         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
5451         all the files 0600, since they contain passwords.
5452         (start): if there is a Makefile, and /usr/bin/make exists, use
5453         'make start' in preference to a raw twistd command. This lets
5454         slave admins put things like PYTHONPATH variables in their
5455         Makefiles and have them still work when the slave is started with
5456         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
5457         be nice to first try the 'make' command and only fall back to
5458         twistd if it fails. TODO: the Makefile's "start" command does not
5459         add the --reactor=win32 argument when running under windows.
5460         (Options.debugclient, Options.statusgui): add sub-commands to launch
5461         the debug client (formerly in contrib/debugclient.py) and the
5462         Gtk status application (currently broken)
5463         * buildbot/clients/debug.py: move from contrib/debugclient.py
5464         * buildbot/clients/debug.glade: same
5466         * buildbot/test/test_trial.py: remove it. This requires some
5467         functionality out of Twisted that isn't there yet, and until then
5468         having it around just confuses things.
5470         * buildbot/test/test_slavecommand.py (Shell): test both with and
5471         without PTYs, and make sure that command output is properly
5472         interleaved in the with-PTY case. I think the without-PTY test
5473         should pass on windows, where we never use PTYs anyway.
5475 2005-04-20  Brian Warner  <warner@lothar.com>
5477         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
5479         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
5481         * NEWS: start creating entries for the next release
5483         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
5485         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
5486         (WebTest.test_webPathname): same
5487         (WebTest.test_webPathname_port): same
5488         (WebTest.test_waterfall): use the default favicon rather than
5489         rooting around the filesystem for it. Open the expected-icon file
5490         in binary mode, to make win32 tests happier (thanks to Nick Trout
5491         for the catch)
5492         * buildbot/status/html.py (buildbot_icon): win32 portability
5494         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
5495         win32-compatibility fixes from Nick Trout, the "file not found" message
5496         is different under windows
5497         (FakeSlaveBuilder.__init__): clean up setup a bit
5498         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
5500 2005-04-19  Brian Warner  <warner@lothar.com>
5502         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
5503         skip-if-repositories-are-unavailable test to not kill the trial
5504         that comes with Twisted-1.3.0
5506         * setup.py: install buildbot.png icon file when installing code
5508         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
5509         environment used by the command, at least on the child side.
5511         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
5512         this method needs to be added and implemented because it gets
5513         called under heavy load. I don't quite understand the
5514         producer/consumer API enough to write it.
5515         (StatusResource.getChild): add a resource for /favicon.ico
5516         (Waterfall.__init__): add favicon= argument
5517         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
5518         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
5519         (WebTest.test_webPathname): same
5520         (WebTest.test_webPathname_port): same
5521         * docs/config.xhtml: mention favicon=
5522         * buildbot/buildbot.png: add a default icon, dorky as it is
5524 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
5526         * buildbot/master.py:
5527         * buildbot/process/base.py:
5528         * buildbot/process/builder.py:
5529         * buildbot/process/interlock.py:
5530         * buildbot/status/builder.py:
5531         * buildbot/status/html.py:
5532         * buildbot/status/mail.py:
5533         * buildbot/status/words.py:
5534           new documentation while digging through the code
5536 2005-04-17  Brian Warner  <warner@lothar.com>
5538         * general: try to fix file modes on all .py files: a+r, a-x,
5539         but let buildbot/clients/*.py be +x since they're tools
5541         * docs/epyrun (addMod): when an import fails, say why
5543         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
5545 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
5547         * buildbot/process/base.py:
5548         * buildbot/process/builder.py:
5549         * buildbot/status/builder.py:
5550           new documentation while digging through the code
5552 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
5554         * buildbot/changes/changes.py:
5555         * buildbot/changes/p4poller.py:
5556         * buildbot/interfaces.py:
5557         * buildbot/process/base.py:
5558         * buildbot/process/builder.py:
5559         * buildbot/process/step.py:
5560         * buildbot/process/step_twisted.py:
5561         * buildbot/slave/bot.py:
5562         * buildbot/slave/commands.py:
5563         * buildbot/status/builder.py:
5564           fix all docstrings to make epydoc happy.  In the process of fixing
5565           some, I also moved pieces of docs, and removed some deprecated
5566           documentation
5568 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
5570         * buildbot/process/builder.py:
5571         * buildbot/process/interlock.py:
5572         * buildbot/process/process_twisted.py:
5573         * buildbot/process/step.py:
5574           BuildProcess -> Build, as it looks like that's what happened
5575         * buildbot/process/base.py:
5576         * buildbot/process/factory.py:
5577           update epydoc stuff
5579 2005-04-17  Brian Warner  <warner@lothar.com>
5581         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5582         update compile command to accomodate the Twisted split.. now
5583         instead of './setup.py build_ext -i', you do './setup.py all
5584         build_ext -i', to run build_ext over all sub-projects.
5585         (FullTwistedBuildFactory): same
5586         (TwistedReactorsBuildFactory): same
5588         * buildbot/status/html.py (TextLog.finished): null out self.req
5589         when we're done, otherwise the reference cycle of TextLog to .req
5590         to .notifications to a Deferred to TextLog.stop keeps them from
5591         being collected, and consumes a huge (610MB on pyramid at last
5592         check) amount of memory.
5594 2005-04-11  Brian Warner  <warner@lothar.com>
5596         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
5597         normalize the VC-repository location.. makes SVN happier with
5598         certain test environments.
5600         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
5601         RemoteShellCommand gets its own .env dictionary, so that code in
5602         start() doesn't mutate the original. I think this should fix the
5603         step_twisted.Trial problem where multiple identical components
5604         kept getting added to PYTHONPATH= over and over again.
5606         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
5607         adding epydoc-format docstrings to many classes. Thanks to Thomas
5608         Vander Stichele for the patches.
5609         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
5610         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
5611         * buildbot/slave/bot.py, commands.py, registry.py: same
5613 2005-04-05  Brian Warner  <warner@lothar.com>
5615         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
5616         preserve timestamps, helps incremental builds of large trees.
5617         Patch from Rene Rivera.
5619         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
5620         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
5621         for the catch.
5623 2005-04-03  Brian Warner  <warner@lothar.com>
5625         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
5626         with one dict, apparently exec has some scoping bugs when used
5627         with both global/local dicts. Thanks to Nathaniel Smith for the
5628         catch.
5630 2005-04-02  Brian Warner  <warner@lothar.com>
5632         * buildbot/process/step_twisted.py (countFailedTests): the new
5633         trial in Twisted-2.0 emits a slightly different status line than
5634         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
5635         mistakenly think the test count is unparseable.
5636         (Trial.start): note that for some reason each build causes another
5637         copy of self.testpath to be prepended to PYTHONPATH. This needs to
5638         be fixed but I'm not sure quite where the problem is.
5640 2005-04-01  Brian Warner  <warner@lothar.com>
5642         * buildbot/test/test_run.py (Run.testMaster): change some uses of
5643         deferredResult to avoid hangs/warnings under twisted-2.0
5644         (RunMixin.tearDown): same
5645         (RunMixin.shutdownSlave): same
5646         (Disconnect.testIdle1): same
5647         (Disconnect.testBuild2): same: wait one second after the build
5648         finishes for test to really be done.. this should be cleaned up to
5649         avoid wasting that second. Builder.detach uses a callLater(0),
5650         either that should be done in-line (something else needed that
5651         behavior), or it should return a Deferred that fires when the
5652         builder is really offline.
5653         (Disconnect.testBuild3): same
5654         (Disconnect.testDisappear): same
5656         * buildbot/test/test_web.py: rearrange server-setup and teardown
5657         code to remove unclean-reactor warnings from twisted-2.0
5659         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
5660         so the tests don't hang under twisted-2.0
5662 2005-03-31  Brian Warner  <warner@lothar.com>
5664         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
5665         caused a warning each time the master changed our set of builders
5667         * buildbot/status/builder.py (BuildStatus.saveYourself): under
5668         w32, don't unlink the file unless it already exists. Thanks to
5669         Baptiste Lepilleur for the catch.
5670         (BuilderStatus.saveYourself): same
5672 2005-02-01  Brian Warner  <warner@lothar.com>
5674         * buildbot/status/html.py (TextLog.getChild): use a /text child
5675         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
5676         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
5677         logfile as text/plain (no markup, no headers). This replaces the
5678         previous scheme (which used an ?text=1 argument), and gets us back
5679         to a relative link (which works better when the buildbot lives
5680         behind another web server, such as Apache configured as a reverse
5681         proxy). Thanks to Gerald Combs for spotting the problem.
5683         * buildbot/__init__.py (version): bump to 0.6.2+ while between
5684         releases
5686 2004-12-13  Brian Warner  <warner@lothar.com>
5688         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
5690         * debian/changelog: update for 0.6.2
5691         * NEWS: finalize for 0.6.2
5693 2004-12-11  Brian Warner  <warner@lothar.com>
5695         * NEWS: bring it up to date
5697         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
5698         detection code. Require some sign of life from the buildmaster
5699         every BotFactory.keepaliveInterval seconds. Provoke this
5700         indication at BotFactory.keepaliveTimeout seconds before the
5701         deadline by sending a keepalive request. We don't actually care if
5702         that request is answered in a timely fashion, what we care about
5703         is that .activity() is called before the deadline. .activity() is
5704         triggered by any PB message from the master (including an ack to
5705         one of the slave's status-update messages). With this new scheme,
5706         large status messages over slow pipes are OK, as long as any given
5707         message can be sent (and thus acked) within .keepaliveTimeout
5708         seconds (which defaults to 30).
5709         (SlaveBuilder.remote_startCommand): record activity
5710         (SlaveBuilder.ackUpdate): same
5711         (SlaveBuilder.ackComplete): same
5712         (BotFactory.gotPerspective): same
5713         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
5715 2004-12-09  Brian Warner  <warner@lothar.com>
5717         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
5718         debug message
5720         * buildbot/process/step_twisted.py (Trial._commandComplete):
5721         update self.cmd when we start the 'cat test.log' transfer. Without
5722         this, we cannot interrupt the correct RemoteCommand when we lose
5723         the connection.
5725         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
5726         trying to tell the slave to stop the command if we're already
5727         inactive, or if we no longer have a .remote
5729         * buildbot/process/builder.py (Builder._detached): don't let an
5730         exception in currentBuild.stopBuild() prevent the builder from
5731         being marked offline
5733 2004-12-07  Brian Warner  <warner@lothar.com>
5735         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
5736         KeyError that happens when you ask for a non-existent Builder, and
5737         translate it into a UsageError.
5739         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
5740         losing the slave in the middle of a remote step is handled too
5742         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
5743         be a Failure, so be sure to stringify it before using it as the
5744         contents of the 'interrupt' logfile
5745         (RemoteCommand.interrupt): use stringified 'why' in
5746         remote_interruptCommand too, just in case
5748 2004-12-06  Brian Warner  <warner@lothar.com>
5750         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
5751         instead of 'tla update', which is more efficient in case we've
5752         missed a couple of patches since the last update.
5754         * debian/changelog: update for previous (0.6.1) release. Obviously
5755         this needs to be handled better.
5757 2004-12-05  Brian Warner  <warner@lothar.com>
5759         * NEWS: update for stuff since last release
5761         * buildbot/master.py (DebugPerspective.attached): return 'self', to
5762         match the maybeDeferred change in Dispatcher.requestAvatar
5763         * buildbot/changes/pb.py (ChangePerspective.attached): same
5764         * buildbot/status/client.py (StatusClientPerspective.attached): same
5765         * buildbot/process/builder.py (Builder._attached3): same
5766         * buildbot/pbutil.py (NewCredPerspective.attached): same
5768         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
5769         the date to the top-most box, if it is not the same as today's
5770         date.
5772         * docs/slave.xhtml: provide a buildslave setup checklist
5774         * docs/source.xhtml (Arch): correct terminology
5776 2004-12-04  Brian Warner  <warner@lothar.com>
5778         * buildbot/test/test_slavecommand.py: use sys.executable instead
5779         of hard-coding 'python' for child commands, might help portability
5781         * docs/examples/twisted_master.cfg: update to current usage
5783         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
5784         'stop build' command to the IRC bot
5786         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
5787         message that broke PBChangeSource
5789         * buildbot/slave/bot.py: clean up shutdown/lose-master code
5790         (SlaveBuilder): make some attributes class-level, remove the old
5791         "update queue" which existed to support resuming a build after the
5792         master connection was lost. Try to reimplement that feature later.
5793         (SlaveBuilder.stopCommand): clear self.command when the
5794         SlaveCommand finishes, so that we don't try to kill a leftover one
5795         at shutdown time.
5796         (SlaveBuilder.commandComplete): same, merge with commandFailed and
5797         .finishCommand
5799         * buildbot/slave/commands.py (SourceBase): set self.command for
5800         all VC commands, so they can be interrupted.
5802 2004-12-03  Brian Warner  <warner@lothar.com>
5804         * buildbot/master.py: clean up slave-handling code, to handle
5805         slave-disconnect and multiple-connect better
5806         (BotPerspective): make these long-lasting, exactly one per bot
5807         listed in the config file.
5808         (BotPerspective.attached): if a slave connects while an existing
5809         one appears to still be connected, disconnect the old one first.
5810         (BotPerspective.disconnect): new method to forcibly disconnect a
5811         buildslave. Use some hacks to empty the transmit buffer quickly to
5812         avoid the long (20-min?) TCP timeout that could occur if the old
5813         slave has dropped off the net.
5814         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
5815         own their own SlaveStatus objects. Remove .attached/.detached, add
5816         .addSlave/.removeSlave, treat slaves like Builders (config file
5817         parsing sends deltas to the BotMaster). Inform the slave
5818         instances, i.e. the BotPerspective, about addBuilder and
5819         removeBuilder.
5820         (BotMaster.getPerspective): turns into a single dict lookup
5821         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
5822         which gives BotPerspective.attached a chance to disconnect the old
5823         slave first.
5824         (BuildMaster.loadConfig): add code (disabled) to validate that all
5825         builders use known slaves (listed in c['bots']). The check won't
5826         work with tuple-specified builders, which are deprecated but not
5827         yet invalid, so the check is disabled for now.
5828         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
5829         routine, do the add/changed/removed dance with them like we do
5830         with builders.
5831         (BuildMaster.loadConfig_Sources): move source-config into a
5832         separate routine too
5834         * buildbot/status/builder.py (Status.getSlave): get the
5835         SlaveStatus object from the BotPerspective, not the BotMaster.
5837         * buildbot/test/test_run.py: bunch of new tests for losing the
5838         buildslave at various points in the build, handling a slave that
5839         connects multiple times, and making sure we can interrupt a
5840         running build
5842         * buildbot/slave/bot.py (BuildSlave): make it possible to use
5843         something other than 'Bot' for the Bot object, to make certain
5844         test cases easier to write.
5845         (BuildSlave.waitUntilDisconnected): utility method for testing
5847 2004-11-30  Brian Warner  <warner@lothar.com>
5849         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
5851         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
5852         argument, return a Deferred that always fires with True or False.
5853         I don't use an errback to indicate 'ping failed' so that callers
5854         are free to ignore the deferred without causing spurious errors in
5855         the logs.
5856         * buildbot/process/builder.py (BuilderControl.ping): implement it
5858         * buildbot/test/test_run.py (Status.testDisappear): test ping
5859         (Status.disappearSlave): fix it
5861 2004-11-30  Brian Warner  <warner@lothar.com>
5863         * buildbot/interfaces.py (IBuildControl): add .stopBuild
5864         (IBuilderControl): add .getBuild(num), only works for the current
5865         build, of course, although it might be interesting to offer
5866         something for builds in the .waiting or .interlocked state.
5868         * buildbot/process/base.py (Build): have .stopBuild just do the
5869         interrupt, then let the build die by itself.
5870         (BuildControl): add .stopBuild, and add a point-event named
5871         'interrupt' just after the build so status viewers can tell that
5872         someone killed it.
5873         (BuilderControl): add .getBuild
5875         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
5876         stops when you kill it, good for testing
5877         (ShellCommand.interrupt): add a logfile named 'interrupt' which
5878         contains the 'reason' text.
5880         * buildbot/status/html.py: Add Stop Build button, if the build can
5881         still be stopped. Send a Redirect (to the top page) one second
5882         later, hopefully long enough for the interrupt to have an effect.
5883         Move make_row() up to top-level to share it between Stop Build and
5884         Force Build.
5886         * buildbot/slave/commands.py: only kill the child process once
5888         * buildbot/test/test_run.py: add testInterrupt
5890 2004-11-29  Brian Warner  <warner@lothar.com>
5892         * buildbot/process/base.py: Refactor command interruption. The
5893         Build is now responsible for noticing that the slave has gone
5894         away: Build.lostRemote() interrupts the current step and makes
5895         sure that no further ones will be started.
5896         
5897         * buildbot/process/builder.py: When the initial remote_startBuild
5898         message fails, log it: this usually indicates that the slave has
5899         gone away, but we don't really start paying attention until they
5900         fail to respond to the first step's command.
5902         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
5903         slave disconnect. Now sports a new interrupt() method. Error
5904         handling was simplified a lot by chaining deferreds, so
5905         remoteFailed/remoteComplete were merged into a single
5906         remoteComplete method (which can now get a Failure object).
5907         Likewise failed/finished were merged into just _finished.
5908         (BuildStep): Add interrupt(why) method, and if why is a
5909         ConnectionLost Failure then the step is failed with some useful
5910         error text.
5912         * buildbot/slave/bot.py: stop the current command when the remote
5913         Step reference is lost, and when the slave is shut down.
5914         (Bot): make it a MultiService, so it can have children. Use
5915         stopService to tell when the slave is shutting down.
5916         (SlaveBuilder): make it a Service, and a child of the Bot. Add
5917         remote_interruptCommand (which asks the current SlaveCommand to
5918         stop but allows it to keep emitting status messages), and
5919         stopCommand (which tells it to shut up and die).
5921         * buildbot/slave/commands.py: make commands interruptible
5922         (ShellCommand.kill): factor out os.kill logic
5923         (Command): factor out setup()
5924         (Command.sendStatus): don't send status if .running is false, this
5925         happens when the command has been halted.
5926         (Command.interrupt): new method, used to tell the command to die
5927         (SlaveShellCommand): implement .interrupt
5928         (DummyCommand): implement .interrupt
5929         (SourceBase, etc): factor out setup(), don't continue substeps if
5930         .interrupted is set
5932         * buildbot/status/builder.py: fix all waitUntilFinished() methods
5933         so they can be called after finishing
5935         * buildbot/test/test_run.py: new tests for disconnect behavior,
5936         refactor slave-shutdown routines, add different kinds of
5937         slave-shutdown
5939 2004-11-27  Brian Warner  <warner@lothar.com>
5941         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
5942         method to express ETA time like "2m45s" instead of "165 seconds"
5944 2004-11-24  Brian Warner  <warner@lothar.com>
5946         * buildbot/test/test_vc.py (VC.testArch): unregister the test
5947         archive after the test completes, to avoid cluttering the user's
5948         'tla archives' listing with a bogus entry. Arch doesn't happen to
5949         provide any way to override the use of ~/.arch-params/, so there
5950         isn't a convenient way to avoid touching the setup of the user who
5951         runs the test.
5952         (VC_HTTP.testArchHTTP): same
5954 2004-11-23  Brian Warner  <warner@lothar.com>
5956         * buildbot/status/html.py (TextLog): split render() up into
5957         render_HEAD and render_GET. Use a Producer when sending log
5958         chunks, to reduce memory requirements and avoid sending huge
5959         non-Banana-able strings over web.distrib connections. Requires
5960         peeking under the covers of IStatusLog.
5961         (TextLog.resumeProducing): fix the "as text" link, handle client
5962         disconnects that occur while we're still sending old chunks.
5964         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
5965         use defer.succeed, not the non-existent defer.success
5966         (LogFile.waitUntilFinished): same
5967         (LogFile.subscribe): don't add watchers to a finished logfile
5969         * buildbot/__init__.py (version): bump to 0.6.1+ while between
5970         releases
5972 2004-11-23  Brian Warner  <warner@lothar.com>
5974         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
5976 2004-11-23  Brian Warner  <warner@lothar.com>
5978         * NEWS: update for the 0.6.1 release
5979         * MANIFEST.in: add new files
5981         * README (INSTALLATION): explain how to enable the extra VC tests
5983         * buildbot/status/builder.py (LogFile): add .runEntries at the class
5984         level to, so old pickled builds can be displayed ok
5986 2004-11-22  Brian Warner  <warner@lothar.com>
5988         * NEWS: summarize updates since last release
5990         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
5991         Yoz Grahame. Closes SF#1050138.
5993         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
5994         SF#1042563.
5996         * buildbot/process/step_twisted.py (Trial): update docs a bit
5998         * docs/factories.xhtml: fix Trial factory docs to match reality.
5999         Closes: SF#1049758.
6001         * buildbot/process/factory.py (Trial.__init__): add args for
6002         randomly= and recurse=, making them available to instantiators
6003         instead of only to subclassers. Closes: SF#1049759.
6005 2004-11-15  Brian Warner  <warner@lothar.com>
6007         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6008         try to teach the Quick factory to use multiple versions of python
6010 2004-11-12  Brian Warner  <warner@lothar.com>
6012         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
6013         safer w32-compatible approach, and only use it on windows
6014         (BuildStatus.saveYourself): same
6016 2004-11-11  Brian Warner  <warner@lothar.com>
6018         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
6019         it: one string merge per chunk. There are now separate .entries
6020         and .runEntries lists: when enumerating over all chunks, make sure
6021         to look at both.
6022         * buildbot/test/test_status.py (Log): more tests
6024         * buildbot/status/builder.py (LogFile.addEntry): Merge string
6025         chunks together, up to 10kb per chunk. This ought to cut down on
6026         the CPU-burning overhead of large log files. Thanks to Alexander
6027         Staubo for spotting the problem.
6028         * buildbot/test/test_status.py (Log): tests for same
6030 2004-11-10  Brian Warner  <warner@lothar.com>
6032         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
6033         header to outbound mail
6034         * buildbot/test/test_status.py (Mail.testBuild1): test for same
6036 2004-11-08  Brian Warner  <warner@lothar.com>
6038         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
6039         can't do os.rename() onto an existing file, so catch the exception
6040         and unlink the target file first. This introduces a slight window
6041         where the existing file could be lost, but the main failure case
6042         (disk full) should still be handled safely.
6043         (BuildStatus.saveYourself): same
6045         * buildbot/changes/pb.py (ChangePerspective): use a configurable
6046         separator character instead of os.sep, because the filenames being
6047         split here are coming from the VC system, which can have a
6048         different pathname convention than the local host. This should
6049         help a buildmaster running on windows that uses a CVS repository
6050         which runs under unix.
6051         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
6053         * buildbot/process/step_twisted.py (Trial.createSummary): survive
6054         when there are no test failures to be parsed
6056         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
6057         instead of the unix-specific os.system("cp"), thanks to Elliot
6058         Murphy for this and the other buildbot-vs-windows catches.
6059         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
6061         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
6062         echo the command as it is run
6064         * setup.py: install sample.mk too, not just sample.cfg
6065         (scripts): install contrib/windows/buildbot.bat on windows
6067 2004-11-07  Brian Warner  <warner@lothar.com>
6069         * buildbot/process/builder.py (Builder._detached): clear the
6070         self.currentBuild reference, otherwise the next build will be
6071         skipped because we think the Builder is already in use.
6073         * docs/examples/twisted_master.cfg: update to match current usage
6074         on the Twisted buildbot
6076 2004-10-29  Brian Warner  <warner@lothar.com>
6078         * buildbot/status/mail.py (MailNotifier): fix typo in docs
6080 2004-10-28  Brian Warner  <warner@lothar.com>
6082         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
6083         have separate doVCUpdate/doVCFull methods. Catch an update failure
6084         and respond by clobbering the source directory and re-trying. This
6085         will handle local changes (like replacing a file with a directory)
6086         that will cause CVS and SVN updates to fail.
6087         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
6089         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
6090         python-2.4 warning
6092 2004-10-19  Brian Warner  <warner@lothar.com>
6094         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
6096         * buildbot/status/html.py (StatusResourceTestResults): display any
6097         TestResults that the Build might have
6098         (StatusResourceTestResult): and the logs for each TestResult
6099         (StatusResourceBuild): add link from the per-build page
6101 2004-10-15  Brian Warner  <warner@lothar.com>
6103         * buildbot/process/step_twisted.py (Trial.createSummary): parse
6104         the 'problems' portion of stdout, add TestResults to our build
6105         * buildbot/test/test_twisted.py (Parse.testParse): test it
6107         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
6108         to retrieve a dict of accumulated test results
6109         (ITestResult): define what a single test result can do
6110         * buildbot/status/builder.py (TestResult): implement ITestResult
6111         (BuildStatus.getTestResults): retrieve dict of TestResults
6112         (BuildStatus.addTestResult): add TestResults
6113         * buildbot/test/test_status.py (Results.testAddResults): test it
6115 2004-10-14  Brian Warner  <warner@lothar.com>
6117         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
6118         instead of os.system("rm -rf") for win32 portability
6120         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
6121         SignalMixin instead of starting/stopping the reactor, which is
6122         likely to cause problems with other tests
6124         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
6125         self.copyComplete() call. Yoz Grahame makes the catch.
6127         * contrib/windows/buildbot.bat: helper script to deal with path
6128         issues. Thanks to Yoz Grahame.
6130         * buildbot/master.py (BuildMaster.startService): don't register a
6131         SIGHUP handler if the signal module has no SIGHUP attribute.
6132         Apparently win32 does this.
6134         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
6136         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
6137         test if the reactor can't offer UNIX sockets
6139         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
6140         error introduced in the last commit. We really need that
6141         metabuildbot :).
6143 2004-10-12  Brian Warner  <warner@lothar.com>
6145         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
6146         when describing a maildir source. Thanks to Stephen Davis.
6148         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
6149         ETA seconds
6151         * buildbot/scripts/runner.py (createMaster): install Makefile too
6152         (start): add --no_save to 'start' command
6153         * buildbot/scripts/sample.mk: simple convenience Makefile with 
6154         start/stop/reload targets
6156         * buildbot/__init__.py (version): bump to 0.6.0+ while between
6157         releases
6159 2004-09-30  Brian Warner  <warner@lothar.com>
6161         * setup.py: Releasing buildbot-0.6.0
6163 2004-09-30  Brian Warner  <warner@lothar.com>
6165         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
6166         test_trial.py from the source tarball until support is complete.
6168         * NEWS: update for 0.6.0 release
6169         * buildbot/__init__.py (version): same
6170         * README: same
6172         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
6173         'source' command to tell users where to get the Buildbot source
6175         * docs/examples/*.cfg: update to modern standards
6177         * NEWS: update for release
6179         * buildbot/scripts/runner.py (createMaster): remove the
6180         -shutdown.tap stuff now that it isn't necessary
6181         (createSlave): same
6182         (start): launch buildbot.tap, not buildbot-shutdown.tap
6185         * buildbot/status/mail.py (Domain): shorten class name
6186         (MailNotifier): if lookup= is a string, pass it to Domain()
6187         * buildbot/test/test_status.py (Mail.testBuild1): new class name
6188         (Mail.testBuild2): test the string-to-Domain shortcut
6189         (Mail.testMail): fix test
6192         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
6193         example config file
6195         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
6196         more attributes on load
6197         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
6198         to accomodate the whole waterfall page at once, and the thrashing
6199         results in a lot of unnecessary loads
6200         (BuildStatus.saveYourself): use binary pickles, not fluffy text
6201         (BuilderStatus.saveYourself): same
6202         (BuilderStatus.eventGenerator): stop generating on the first missing
6203         build. We assume that saved builds are deleted oldest-first.
6204         (BuildStepStatus.__getstate__): .progress might not exist
6206         * buildbot/changes/changes.py (ChangeMaster): make it
6207         serializable, in $masterdir/changes.pck
6208         (ChangeMaster.stopService): save on shutdown
6209         * buildbot/master.py (BuildMaster.loadChanges): load at startup
6210         * buildbot/test/test_config.py: load Changes before config file
6213         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
6214         "Oh my god, you killed the command" header on a separate line
6216         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
6217         skip over corrupted build pickles
6218         (BuilderStatus.getFullBuildByNumber): same
6219         (BuilderStatus.eventGenerator): skip over unavailable builds
6220         (BuildStatus.saveYourself): save builds to a .tmp file first, then
6221         do an atomic rename. This prevents a corrupted pickle when some
6222         internal serialization error occurs.
6223         (BuilderStatus.saveYourself): same
6225         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
6226         the timeout for shell commands, it got lost somehow
6228         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
6229         run out of build steps, return the rest of the builder events
6231         * buildbot/interfaces.py (IBuilderControl.ping): add method
6233         * buildbot/process/builder.py (BuilderControl.ping): move
6234         slave-ping to BuilderControl, and fix the failure case in the
6235         process (Event.finish() is the verb, Event.finished is the noun).
6237         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
6238         through the BuilderControl instead of the BuilderStatus
6239         (EventBox): add adapter for builder.Event, allowing builder events to
6240         be displayed in the waterfall display
6242         * buildbot/master.py (BotMaster.stopService): add a 'master
6243         shutdown' event to the builder's log
6244         (BuildMaster.startService): and a 'master started' on startup
6246         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
6247         builder events into the BuildStep event stream
6248         (Status.builderAdded): add a 'builder created' event
6251         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
6252         command to announce the completion of a running build
6253         (IrcStatusBot.command_FORCE): announce when the build finishes
6255         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
6256         don't evict unfinished builds from the cache: they must stay in
6257         the full-cache until their logfiles have stopped changing. Make
6258         sure the eviction loop terminates if an unfinished build was hit.
6259         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
6260         This lets exceptions be dumped in an email status message. Really
6261         we need LogFiles which contain both text and HTML, instead of two
6262         separate classes.
6263         (BuildStatus.__getstate__): handle self.finished=False
6264         (Status.builderAdded): if the pickle is corrupted, abandon the
6265         history and create a new BuilderStatus object.
6267         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
6268         self.progress attribute, helped one test which doesn't fully set
6269         up the Build object.
6271         * buildbot/interfaces.py (IStatusLogStub): split out some of the
6272         IStatusLog methods into an Interface that is implemented by "stub"
6273         logs, for which all the actual text chunks are on disk (in the
6274         pickled Build instance). To show the log contents, you must first
6275         adapt the stub log to a full IStatusLog object.
6277         * buildbot/status/builder.py (LogFileStub): create separate stub
6278         log objects, which can be upgraded to a real one if necessary.
6279         (LogFile): make them persistable, and let them stubify themselves
6280         (HTMLLogFile): same
6281         (BuildStepStatus): same
6282         (BuildStatus): same
6283         (BuildStatus.saveYourself): save the whole build out to disk
6284         (BuilderStatus): make it persistable
6285         (BuilderStatus.saveYourself): save the builder to disk
6286         (BuilderStatus.addFullBuildToCache): implement two caches which
6287         hold Build objects: a small one which holds full Builds, and a
6288         larger one which holds "stubbed" Builds (ones with their LogFiles
6289         turned into LogFileStubs). This reduces memory usage by the
6290         buildmaster by not keeping more than a few (default is 2) whole
6291         build logs in RAM all the time.
6292         (BuilderStatus.getBuild): rewrite to pull from disk (through the
6293         cache)
6294         (BuilderStatus.eventGenerator): rewrite since .builds went away
6295         (BuilderStatus.buildStarted): remove the .builds array. Add the
6296         build to the "full" cache when it starts.
6297         (BuilderStatus._buildFinished): save the build to disk when it
6298         finishes
6299         (Status): give it a basedir (same as the BuildMaster's basedir)
6300         where the builder pickles can be saved
6301         (Status.builderAdded): create the BuilderStatus ourselves, by
6302         loading a pickle from disk (or creating a new instance if there
6303         was none on disk). Return the BuilderStatus so the master can glue
6304         it into the new Builder object.
6306         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
6307         all BuilderStatuses to save themselves out to disk. This is in
6308         lieu of saving anything important in the main Application pickle
6309          (the -shutdown.tap file).
6310         (BuildMaster.__init__): give Status() a basedir for its files
6311         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
6312         to get the BuilderStatus, then give it to the Builder (instead of
6313         doing it the other way around). It's ok if the status announces
6314         the new Builder before it's really ready, as the outside world can
6315         only see the BuilderStatus object anyway (and it is ready before
6316         builderAdded returns). Use the builder's "builddir" (which
6317         normally specifies where the slave will run the builder) as the
6318         master's basedir (for saving serialized builds).
6320         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
6321         coerce the logfile to IStatusLog before trying to get the text
6322         chunks out of it. This will pull the full (non-stubified) Build in
6323         from disk if necessary.
6324         (TextLog): fix the adapter registration
6326         * buildbot/test/test_control.py (Force.setUp): create the basedir
6327         * buildbot/test/test_web.py: same
6328         * buildbot/test/test_vc.py (SetupMixin.setUp): same
6329         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
6330         * buildbot/test/test_run.py (Run.testMaster): same
6331         (Status.setUp): same
6333 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
6335         * buildbot/status/html.py (Waterfall.__init__): store actual
6336         allowForce flag passed in rather than using True for everyone;
6337         make sure setting it to False doesn't cause a NameError
6338         (Waterfall.setup).
6339         (StatusResourceBuilder.__init__) add the builder name to the page
6340         title.
6341         (StatusResourceBuilder.body) move HTML generation for a name/value
6342         row into a helper method (StatusResourceBuilder.make_row); only
6343         generate the "Force Build" form if allowForce was True and the
6344         slave is connected.  Use class attributes in the generated HTML to
6345         spread a little CSS-joy.
6347 2004-09-28  Brian Warner  <warner@lothar.com>
6349         * buildbot/process/step_twisted.py (Trial.createSummary): fix
6350         warning-scanner to not ignore things like
6351         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
6353         * buildbot/status/html.py (StatusResource.control): add some
6354         class-level values for .control in an attempt to make upgrading
6355         smoother
6357         * buildbot/util.py (ComparableMixin): survive missing attributes,
6358         such as when a class is modified and we're comparing old instances
6359         against new ones
6361         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
6362         failure handling, remove a redundant try/except block. Don't
6363         return the full traceback to the IRC channel.
6364         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
6365         error messages. Get ETA properly.
6367         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
6368         the reason, since (at least) IRC message will have <> in them.
6369         (StatusResourceBuilder.__init__): take an IBuilderControl
6370         (StatusResourceBuilder.force): use the IBuilderControl we get in
6371         the constructor instead of trying to make our own. Catch the
6372         new exceptions and ignore them for now (until we make an
6373         intermediate web page where we could show the error message)
6374         (StatusResource): create with an IControl, use it to give an
6375         IBuilderControl to all children
6376         (Waterfall): take an allowForce= option, pass an IControl object
6377         to StatusResource if it is True
6379         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
6381         * buildbot/master.py (BotPerspective.perspective_forceBuild):
6382         catch new exceptions and return string forms
6384         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
6385         * buildbot/process/builder.py (Builder.forceBuild): raise them
6386         * buildbot/test/test_control.py (Force.testNoSlave): new test
6387         (Force.testBuilderInUse): same
6390         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
6392         * buildbot/test/test_run.py: use IControl
6393         * buildbot/test/test_vc.py: same
6395         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
6396         to use IControl. Still offline.
6397         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
6399         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
6400         who=None so periodic builds don't send out status mail
6401         (Builder.forceBuild): include reason in the log message
6402         (BuilderControl.forceBuild): rename 'name' to 'who'
6404         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
6405         'who' parameter, but make it None by default so builds forced by
6406         slave admins don't cause status mail to be sent to anybody
6407         (BotMaster.forceBuild): same. this method is deprecated.
6408         (DebugPerspective.perspective_forceBuild): same, use IControl.
6409         (DebugPerspective.perspective_fakeChange): use IControl..
6410         (Dispatcher.requestAvatar): .. so don't set .changemaster
6412         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
6413         parameter to avoid confusion with the name of the builder
6416         * buildbot/status/mail.py: refine comment about needing 2.3
6418         * buildbot/status/html.py: move all imports to the top
6420         * buildbot/test/test_control.py: test new interfaces
6421         * buildbot/test/test_run.py (Status): handle new interfaces
6422         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
6424         * buildbot/process/base.py (BuildControl): implement IBuildControl
6425         and its lonely getStatus() method
6427         * buildbot/process/builder.py (BuilderControl): implement
6428         IBuilderControl, obtained by adapting the Builder instance
6429         (Builder.startBuild): return a BuilderControl instead of a
6430         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
6431         accomplish the same thing.
6433         * buildbot/master.py: move all import statements to the top
6434         (Control): implement IControl, obtained by adapting the
6435         BuildMaster instance.
6437         * buildbot/interfaces.py: add IControl, IBuilderControl, and
6438         IBuildControl. These are used to force builds. Eventually they
6439         will provide ways to reconfigure the Builders, pause or abandon a
6440         Build, and perhaps control the BuildMaster itself.
6442 2004-09-26  Brian Warner  <warner@lothar.com>
6444         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
6445         ends up comparing us against something without a .__class__
6447 2004-09-24  Brian Warner  <warner@lothar.com>
6449         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
6450         usage text right.
6452         * Makefile: add 'deb-snapshot' target, to create a timestamped
6453         .deb package
6455         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
6457 2004-09-23  Brian Warner  <warner@lothar.com>
6459         * buildbot/__init__.py (version): move version string here
6460         * setup.py: get version string from buildbot.version
6461         * buildbot/status/html.py (WaterfallStatusResource.body): add
6462         buildbot version to the page footer
6463         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
6464         version when asked
6466         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
6467         slaves, let the second know where the first one is coming from
6468         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
6469         see our exceptions. It would be nice if there were a way to just
6470         send them the exception type and value, not the full traceback.
6473         * buildbot/status/mail.py (MailNotifier): add a new argument
6474         sendToInterestedUsers=, which can be set to False to disable the
6475         usual send-to-blamelist behavior.
6476         (top): handle python-2.2 which has no email.MIMEMultipart
6477         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
6478         (MailNotifier.disownServiceParent): unsubscribe on removal
6480         * buildbot/test/test_status.py (Mail.testBuild2): test it
6483         * buildbot/status/progress.py (Expectations.wavg): tolerate
6484         current=None, which happens when steps start failing badly
6485         * buildbot/test/test_status.py (Progress.testWavg): test for it
6487         * buildbot/process/step.py (SVN.startVC): when the (old) slave
6488         doesn't understand args['revision'], emit a warning instead of
6489         bailing completely. Updating to -rHEAD is probably close enough.
6491         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
6493         * buildbot/test/test_status.py: at least import bb.status.client
6494         even if we don't have any test coverage for it yet
6496         * contrib/svn_buildbot.py: don't require python2.3
6497         (main): wait, do require it (for sets.py), but explain how to
6498         make it work under python2.2
6500 2004-09-23  Brian Warner  <warner@lothar.com>
6502         * contrib/svn_buildbot.py: include the revision number in the Change
6504         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
6505         using util.now() because FreshCVS is a realtime service
6507         * buildbot/status/event.py: delete dead code
6508         * buildbot/process/step.py: don't import dead Event class
6509         * buildbot/process/step_twisted.py: same
6510         * buildbot/status/builder.py: same
6511         * buildbot/status/client.py: same
6513         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
6515         * buildbot/changes/changes.py (Change): set .when from an __init__
6516         argument (which defaults to now()), rather than having
6517         ChangeMaster.addChange set it later.
6518         (ChangeMaster.addChange): same
6520         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
6521         (parseSyncmail): same. Just use util.now() for now.
6522         (parseBonsaiMail): parse the timestamp field for when=
6524         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
6525         instead of setting .when after the fact
6527 2004-09-22  slyphon
6529         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
6530         results when the target project uses retrial. Still under
6531         development.
6532         * buildbot/test/test_trial.py: same
6534 2004-09-21  Brian Warner  <warner@lothar.com>
6536         * buildbot/status/mail.py (MailNotifier.__init__): include
6537         success/warnings/failure in the Subject line
6538         (MailNotifier.buildMessage): add the buildbot's URL to the body,
6539         use step.logname for the addLogs=True attachment filenames
6540         * buildbot/test/test_status.py (Mail): test Subject lines
6541         (Mail.testLogs): test attachment filenames
6543         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
6544         accept a 'who' argument from the debug tool
6545         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
6546         * contrib/debug.glade: add text box to set 'who'
6548         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
6549         .getBuilderName with .getBuilder().getName(), more flexible
6550         (IStatusLog.getName): logs have short names, but you can prefix
6551         them with log.getStep().getName() to make them more useful
6552         * buildbot/status/builder.py: same
6553         * buildbot/status/client.py: same
6554         * buildbot/status/html.py: same
6555         * buildbot/test/test_run.py (Status.testSlave): same
6556         * buildbot/process/step.py: tweak logfile names
6558         * buildbot/status/mail.py (MailNotifier): add lookup, change
6559         argument to extraRecipients. The notifier is now aimed at sending
6560         mail to the people involved in a particular build, with additional
6561         constant recipients as a secondary function.
6563         * buildbot/test/test_status.py: add coverage for IEmailLookup,
6564         including slow-lookup and failing-lookup. Make sure the blamelist
6565         members are included.
6567         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
6568         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
6569         (IBuildStatus.getInterestedUsers): new method
6570         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
6571         * buildbot/status/client.py (remote_getResponsibleUsers): same
6572         * buildbot/status/html.py (StatusResourceBuild.body): same
6573         * buildbot/test/test_run.py (Status.testSlave): same
6575 2004-09-20  Brian Warner  <warner@lothar.com>
6577         * docs/users.xhtml: update concepts
6579         * Makefile: add a convenience makefile, for things like 'make
6580         test'. It is not included in the source tarball.
6582 2004-09-16  Brian Warner  <warner@lothar.com>
6584         * NEWS: mention /usr/bin/buildbot, debian/*
6586         * debian/*: add preliminary debian packaging. Many thanks to
6587         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
6588         it considerably since it left their hands, I am responsible for
6589         all breakage that's resulted.
6591         * bin/buildbot: create a top-level 'buildbot' command, to be
6592         installed in /usr/bin/buildbot . For now it's just a simple
6593         frontend to mktap/twistd/kill, but eventually it will be the entry
6594         point to the 'try' command and also a status client. It is also
6595         intended to support the upcoming debian-packaging init.d scripts.
6596         * buildbot/scripts/runner.py: the real work is done here
6597         * buildbot/scripts/__init__.py: need this too
6598         * buildbot/scripts/sample.cfg: this is installed in new
6599         buildmaster directories
6600         * setup.py: install new stuff
6602 2004-09-15  Brian Warner  <warner@lothar.com>
6604         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
6605         'file:' schema (the version shipped with OS-X was built without the
6606         ra_local plugin).
6607         (SetupMixin.tearDown): stop the goofy twisted.web timer which
6608         updates the log-timestamp, to make sure it isn't still running after
6609         the test finishes
6611         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
6612         values to the config file.
6613         * docs/examples/hello.cfg: add examples
6614         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
6615         * buildbot/status/builder.py (Status.getProjectURL): implement them
6616         * buildbot/master.py (BuildMaster.loadConfig): set them from config
6617         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
6618         * buildbot/status/html.py (WaterfallStatusResource): display them
6621         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
6622         certain error cases don't suffer a secondary exception.
6623         (top): Skip tests if the corresponding VC tool is not installed.
6625         * buildbot/process/factory.py (Trial): introduce separate
6626         'buildpython' and 'trialpython' lists, since trialpython=[] is
6627         what you want to invoke /usr/bin/python, whereas ./setup.py is
6628         less likely to be executable. Add env= parameter to pass options
6629         to test cases (which is how I usually write tests, I don't know if
6630         anyone else does it this way).
6632         * buildbot/process/step_twisted.py (Trial): handle python=None.
6633         Require 'testpath' be a string, not a list. Fix tests= typo.
6634         (Trial.start): sanity-check any PYTHONPATH value for stringness.
6636         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
6637         way to deal with the possibility of removing the disconnect notify
6638         twice.
6639         (CVS): add a 'login' parameter to give a password to 'cvs login',
6640         commonly used with pserver methods (where pw="" or pw="guest")
6642         * buildbot/slave/commands.py (SourceBase): move common args
6643         extraction and setup() to __init__, so everything is ready by the
6644         time setup() is called
6645         (CVS.start): call 'cvs login' if a password was supplied
6646         (ShellCommand): special-case PYTHONPATH: prepend the master's
6647         value to any existing slave-local value.
6649         * buildbot/process/builder.py (Builder.updateBigStatus): if we
6650         don't have a remote, mark the builder as Offline. This whole
6651         function should probably go away and be replaced by individual
6652         deltas.
6653         (Builder.buildFinished): return the results to the build-finished
6654         deferred callback, helps with testing
6656 2004-09-14  Brian Warner  <warner@lothar.com>
6658         * buildbot/test/test_vc.py: put all the repositories needed to run
6659         the complete tests into a single small (1.3MB) tarball, so I can
6660         make that tarball available on the buildbot web site. Test HTTP
6661         access (for Arch and Darcs) by spawning a temporary web server
6662         while the test runs.
6664         * docs/users.xhtml: new document, describe Buildbot's limited
6665         understanding of different human users
6667         * buildbot/test/test_vc.py: rearrange test cases a bit
6669         * buildbot/process/step_twisted.py (Trial): handle testpath=
6670         * buildbot/process/factory.py (Trial): update to use step.Trial
6672         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
6674         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
6675         the overall build text (which gives you 'failed 2 tests' rather
6676         than just 'failed')
6677         (BuildStepStatus.text2): default to [], not None
6679         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
6680         must be a list
6682 2004-09-12  Brian Warner  <warner@lothar.com>
6684         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
6685         log the whole exception if it's just an AttributeError (old slave)
6687         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
6688         so (e.g.) sub-commands can be run in the right directory.
6689         (ShellCommand.start): accept an optional errorMessage= argument
6690         to make life easier for SVN.start
6691         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
6692         headers
6693         (ShellCommand.start): move ['dir'] compatibility hack..
6694         (RemoteShellCommand.start): .. to here so everyone can use it
6696         * buildbot/process/step_twisted.py (Trial): use .workdir
6698         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
6699         text displayed when debuild fails completely
6700         (Trial): snarf _trial_temp/test.log from the slave and display it
6702 2004-09-11  Brian Warner  <warner@lothar.com>
6704         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
6706         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
6707         set to 'twisted', so --recurse can find twisted/web/test/*, etc
6709         * buildbot/process/step.py (ShellCommand): call .createSummary
6710         before .evaluateCommand instead of the other way around. This
6711         makes it slightly easier to count warnings and then use that to
6712         set results=WARNINGS
6713         * buildbot/process/step_twisted.py: cosmetic, swap the methods
6715         * buildbot/process/base.py (Build.buildFinished): update status
6716         before doing progress. It's embarrassing for the build to be stuck
6717         in the "building" state when an exceptions occurs elsewhere..
6719         * buildbot/status/progress.py (Expectations.expectedBuildTime):
6720         python2.2 doesn't have 'sum'
6722         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
6723         to prevent clients from accidentally sorting it
6725         * buildbot/master.py (Manhole): add username/password
6726         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
6727         c['manholePort'], deprecate old usage
6728         * docs/config.xhtml: document c['manhole']
6729         * docs/examples/hello.cfg: show example of using a Manhole
6732         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
6733         pretend the slave is up to date
6735         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
6736         the module, overlaps with 'log', the local variable
6738         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
6740         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
6741         new method to let Steps find out the version of their
6742         corresponding SlaveCommand.
6743         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
6744         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
6745         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
6746         (SVN.startVC): same
6747         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
6748         (Arch.startVC): same
6749         (P4Sync.startVC): same
6751         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
6752         Deferred so we can catch errors in remote_startCommand
6753         (RemoteShellCommand.start): same
6755         * docs/examples/twisted_master.cfg: update sample config file
6757         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
6758         after connectionMade() is called, not before. Close stdin at that
6759         point too.
6761         * buildbot/process/process_twisted.py: update to use Trial, clean
6762         up argument passing (move to argv arrays instead of string
6763         commands)
6765         * buildbot/process/step_twisted.py (Trial): new step to replace
6766         RunUnitTests, usable by any trial-using project (not just
6767         Twisted). Arguments have changed, see the docstring for details.
6769         * buildbot/process/base.py (Build.startBuild): this now returns a
6770         Deferred. Exceptions that occur during setupBuild are now
6771         caught better and lead to fewer build_status weirdnesses, like
6772         finishing a build that was never started.
6773         (Build.buildFinished): fire the Deferred instead of calling
6774         builder.buildFinished directly. The callback argument is this
6775         Build, everything else can be extracted from it, including the
6776         new build.results attribute.
6777         * buildbot/process/builder.py (Builder.startBuild): same
6778         (Builder.buildFinished): same, extract results from build
6780         * buildbot/process/step.py (ShellCommands): remove dead code
6782 2004-09-08  Brian Warner  <warner@lothar.com>
6784         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
6785         doesn't try to use the leftover patched workdir
6786         (SourceStamp): test source-stamp computation for CVS and SVN
6788         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
6789         patched workdir ('touch .buildbot-patched') so we don't try to
6790         update it later
6791         (SourceBase.start): add ['revision'] for all Source steps
6792         (CVS): change args: use ['branch'] for -r, remove ['files']
6793         (CVS.buildVC): fix revision/branch stuff
6794         (SVN): add revision stuff
6796         * buildbot/process/step.py (BuildStep.__init__): reject unknown
6797         kwargs (except 'workdir') to avoid silent spelling errors
6798         (ShellCommand.__init__): same
6799         (Source): new base class for CVS/SVN/etc. Factor out everything
6800         common, add revision computation (perform the checkout with a -D
6801         DATE or -r REVISION that gets exactly the sources described by the
6802         last Change), overridable with step.alwaysUseLatest. Add patch
6803         handling (build.getSourceStamp can trigger the use of a base
6804         revision and a patch).
6805         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
6806         * docs/steps.xhtml: update docs
6807         * docs/source.xhtml: mention .checkoutDelay
6808         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
6810         * buildbot/process/base.py (Build.setSourceStamp): add a
6811         .sourceStamp attribute to each Build. If set, this indicates that
6812         the build should be done with something other than the most
6813         recent source tree. This will be used to implement "try" builds.
6814         (Build.allChanges): new support method
6815         (Build.lastChangeTime): remove, functionality moved to Source steps
6816         (Build.setupBuild): copy the Step args before adding ['workdir'],
6817         to avoid modifying the BuildFactory (and thus triggering spurious
6818         config changes)
6821         * buildbot/status/html.py: rename s/commits/changes/
6822         (StatusResourceChanges): same
6823         (CommitBox.getBox): same, update URL
6824         (WaterfallStatusResource): same
6825         (StatusResource.getChild): same
6827         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
6828         * contrib/debug.glade: add optional 'revision' to the fakeChange
6830         * buildbot/changes/changes.py (html_tmpl): display .revision
6831         (ChangeMaster.addChange): note .revision in log
6832         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
6833         accept a ['revision'] attribute
6835         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
6837         * buildbot/master.py (BotMaster.getPerspective): update the
6838         .connected flag in SlaveStatus when it connects
6839         (BotMaster.detach): and when it disconnects
6840         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
6841         (BuildMaster.loadConfig_Builders): walk old list correctly
6843         * buildbot/test/test_config.py: fix prefix= usage
6845 2004-09-06  Brian Warner  <warner@lothar.com>
6847         * NEWS: mention P4
6849         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
6850         poll a P4 depot looking for recent changes. Thanks to Dave
6851         Peticolas for the contribution. Probably needs some testing after
6852         I mangled it.
6854         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
6855         requires manual client setup for each buildslave. Rather
6856         experimental. Thanks again to Dave Peticolas.
6857         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
6859         * buildbot/changes/changes.py (Change): add a .revision attribute,
6860         which will eventually be used to generate source-stamp values.
6862         * buildbot/process/step.py (RemoteCommand.start): use
6863         notifyOnDisconnect to notice when we lose the slave, then treat it
6864         like an exception. This allows LogFiles to be closed and the build
6865         to be wrapped up normally. Be sure to remove the disconnect
6866         notification when the step completes so we don't accumulate a
6867         bazillion such notifications which will fire weeks later (when the
6868         slave finally disconnects normally). Fixes SF#915807, thanks to
6869         spiv (Andrew Bennetts) for the report.
6870         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
6871         really isn't Logged- specific
6872         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
6873         header, since it's almost always going to be appended to an
6874         incomplete line
6875         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
6876         update test to handle use of notifyOnDisconnect
6878         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
6879         don't clear .ETA and .currentBuild when going offline, let the
6880         current build clean up after itself
6882         * buildbot/process/builder.py (Builder.detached): wait a moment
6883         before doing things like stopping the current build, because the
6884         current step will probably notice the disconnect and cleanup the
6885         build by itself
6886         * buildbot/test/test_run.py (Status.tearDown): update test to
6887         handle asynchronous build-detachment
6889         * buildbot/process/base.py (Build.stopBuild): minor shuffles
6891         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
6892         hush a debug message
6894 2004-09-05  Brian Warner  <warner@lothar.com>
6896         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
6897         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
6898         kernels do this: the fcntl module has the F_NOTIFY constant, but
6899         the kernel itself doesn't support the operation. Thanks to Olly
6900         Betts for spotting the problem.
6902         * buildbot/process/step.py (Darcs): new source-checkout command
6903         (Arch): new source-checkout command
6904         (todo_P4): fix constructor syntax, still just a placeholder
6905         * buildbot/test/test_vc.py (VC.testDarcs): test it
6906         (VC.testDarcsHTTP): same, via localhost HTTP
6907         (VC.testArch): same
6908         (VC.testArchHTTP): same
6909         * NEWS: mention new features
6911         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
6912         which tells the step to stash stdout text locally (in .stdout).
6913         Slave-side Commands can use this to make decisions based upon the
6914         output of the the ShellCommand (not just the exit code).
6915         (Darcs): New source-checkout command
6916         (Arch): New source-checkout command, uses .keepStdout in one place
6917         where it needs to discover the archive's default name.
6919         * docs/steps.xhtml: Document options taken by Darcs and Arch.
6920         * docs/source.xhtml: add brief descriptions of Darcs and Arch
6921         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
6923         * buildbot/process/step.py (ShellCommand.describe): add an
6924         alternate .descriptionDone attribute which provides descriptive
6925         text when the step is complete. .description can be ["compiling"],
6926         for use while the step is running, then .descriptionDone can be
6927         ["compile"], used alone when the step succeeds or with "failed" when
6928         it does not. Updated other steps to use the new text.
6929         * buildbot/process/step_twisted.py: same
6930         * buildbot/test/test_run.py: update tests to match
6932 2004-08-30  Brian Warner  <warner@lothar.com>
6934         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
6935         (CVS.__init__): send 'patch' argument to slave
6936         (CVS.start): don't create the LoggedRemoteCommand until start(),
6937         so we can catch a .patch added after __init__
6938         (SVN.__init__): add 'patch' to SVN too
6939         (SVN.start): same
6941         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
6942         argument, to let commands push data into the process' stdin pipe.
6943         Move usePTY to a per-instance attribute, and clear it if 'stdin'
6944         is in use, since closing a PTY doesn't really affect the process
6945         in the right way (in particular, I couldn't run /usr/bin/patch
6946         under a pty).
6947         (SourceBase.doPatch): handle 'patch' argument
6949         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
6950         both CVS and SVN
6952         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
6953         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
6954         versions to master
6955         * buildbot/master.py (BotPerspective.got_commands): get command
6956         versions from slave, give to each builder
6957         * buildbot/process/builder.py (Builder.attached): stash slave
6958         command versions in .remoteCommands
6960         * docs/steps.xhtml: bring docs in-line with reality
6962         * buildbot/process/step.py (CVS.__init__): more brutal
6963         compatibility code removal
6964         (SVN.__init__): same
6966         * buildbot/slave/commands.py (SlaveShellCommand): update docs
6967         (SlaveShellCommand.start): require ['workdir'] argument, remove
6968         the ['dir'] fallback (compatibility will come later)
6969         (SourceBase): update docs
6970         (SourceBase.start): remove ['directory'] fallback
6971         (CVS): update docs
6972         (SVN): update docs
6973         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
6974         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6975         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
6977         * buildbot/process/step.py (RemoteShellCommand.__init__): add
6978         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
6979         code.. I will figure out 0.5.0-compatibility hooks later)
6981 2004-08-30  Brian Warner  <warner@lothar.com>
6983         * buildbot/process/process_twisted.py: rewrite in terms of new
6984         BuildFactory base class. It got significantly shorter. Yay
6985         negative code days.
6987         * buildbot/process/step_twisted.py (HLint.start): fix to make it
6988         work with the new "self.build isn't nailed down until we call
6989         step.start()" scheme: specifically, __init__ is called before the
6990         build has decided on which Changes are going in, so we don't scan
6991         build.allFiles() for .xhtml files until start()
6992         (HLint.commandComplete): use getText(), not getStdout()
6993         (RunUnitTests.start): same: don't use .build until start()
6994         (RunUnitTests.describe): oops, don't report (None) when using
6995         the default reactor
6996         (RunUnitTests.commandComplete): use getText()
6997         (RunUnitTests.createSummary): same
6998         (BuildDebs.commandComplete): same
7000         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
7001         set args['command'] until start(), since our BuildStep is allowed
7002         to change their mind up until that point
7003         (TreeSize.commandComplete): use getText(), not getStdout()
7005         * docs/examples/twisted_master.cfg: update to current standards
7007         * docs/factories.xhtml: update
7008         * buildbot/process/factory.py: implement all the common factories
7009         described in the docs. The Trial factory doesn't work yet, and
7010         I've probably broken all the process_twisted.py factories in the
7011         process. There are compatibility classes left in for things like
7012         the old BasicBuildFactory, but subclasses of them are unlikely to
7013         work.
7014         * docs/examples/glib_master.cfg: use new BuildFactories
7015         * docs/examples/hello.cfg: same
7017         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
7018         explicit 'workdir' args
7020         * buildbot/process/base.py (BuildFactory): move factories to ..
7021         * buildbot/process/factory.py (BuildFactory): .. here
7022         * buildbot/process/process_twisted.py: handle move
7023         * buildbot/test/test_config.py: same
7024         * buildbot/test/test_run.py: same
7025         * buildbot/test/test_steps.py: same
7026         * buildbot/test/test_vc.py: same
7027         * docs/factories.xhtml: same
7029         * NEWS: mention config changes that require updating master.cfg
7031         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
7032         argument to all steps that weren't given one already, pointing at
7033         the "build/" directory.
7035         * docs/examples/hello.cfg: remove explicit 'workdir' args
7037         * docs/factories.xhtml: document standard BuildFactory clases,
7038         including a bunch which are have not yet been written
7040 2004-08-29  Brian Warner  <warner@lothar.com>
7042         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
7043         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
7044         buildbot.status.builder so they aren't quite so internal
7045         * buildbot/process/base.py, buildbot/process/builder.py: same
7046         * buildbot/process/maxq.py, buildbot/process/step.py: same
7047         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
7048         * buildbot/status/mail.py, buildbot/test/test_run.py: same
7049         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
7051         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
7052         to handle new getLogs()-returns-list behavior
7053         (StatusResourceBuildStep.getChild): same
7054         (StepBox.getBox): same
7055         (WaterfallStatusResource.phase0): same
7057         * docs/source.xhtml: document how Buildbot uses version-control
7058         systems (output side: how we get source trees)
7059         * docs/changes.xhtml: rename from sources.xhtml, documents VC
7060         systems (input side: how we learn about Changes)
7062         * buildbot/master.py (Manhole): use ComparableMixin
7063         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
7064         * buildbot/changes/mail.py (MaildirSource): same
7065         * buildbot/status/client.py (PBListener): same
7066         * buildbot/status/html.py (Waterfall): same
7067         * buildbot/status/words.py (IRC): same
7069         * NEWS: start describing new features
7071         * buildbot/status/mail.py (MailNotifier): finish implementation.
7072         The message body is still a bit sparse.
7073         * buildbot/test/test_status.py (Mail): test it
7075         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
7076         and __hash__ methods I wind up adding everywhere. Specifically
7077         intended to support the buildbot config-file update scheme where
7078         we compare, say, the old list of IStatusTargets against the new
7079         one and don't touch something which shows up on both lists.
7080         * buildbot/test/test_util.py (Compare): test case for it
7082         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
7083         return a list instead of a dict
7084         (IBuildStepStatus.getLogs): same. The idea is that steps create
7085         logs with vaguely unique names (although their uniqueness is not
7086         guaranteed). Thus a compilation step should create its sole
7087         logfile with the name 'compile', and contribute it to the
7088         BuildStatus. If a step has two logfiles, try to create them with
7089         different names (like 'test.log' and 'test.summary'), and only
7090         contribute the important ones to the overall BuildStatus.
7091         * buildbot/status/builder.py (Event.getLogs): same
7092         (BuildStepStatus): fix default .text and .results
7093         (BuildStepStatus.addLog): switch to list-like .getLogs()
7094         (BuildStepStatus.stepFinished): same
7095         (BuildStatus.text): fix default .text
7096         (BuildStatus.getLogs): temporary hack to return all logs (from all
7097         child BuildStepStatus objects). Needs to be fixed to only report
7098         the significant ones (as contributed by the steps themselves)
7099         * buildbot/test/test_run.py: handle list-like .getLogs()
7100         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
7102 2004-08-28  Brian Warner  <warner@lothar.com>
7104         * buildbot/process/builder.py (Builder.attached): serialize the
7105         attachment process, so the attach-watcher isn't called until the
7106         slave is really available. Add detached watchers too, which makes
7107         testing easier.
7109         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
7111         * buildbot/test/test_swap.py: remove dead code
7113         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
7114         (ShellCommand.start): treat errors in _startCommand/spawnProcess
7115         sort of as if the command being run exited with a -1. There may
7116         still be some holes in this scheme.
7117         (CVSCommand): add 'revision' tag to the VC commands, make sure the
7118         -r option appears before the module list
7119         * buildbot/process/step.py (CVS): add 'revision' argument
7121         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
7122         when sending updates or stepComplete messages to the master, since
7123         we don't currently care whether they arrive or not. When we revamp
7124         the master/slave protocol to really resume interrupted builds,
7125         this will need revisiting.
7126         (lostRemote): remove spurious print
7128         * buildbot/master.py (BotPerspective.attached): serialize the
7129         new-builder interrogation process, to make testing easier
7130         (BotMaster.waitUntilBuilderDetached): convenience function
7132         * buildbot/status/builder.py (BuilderStatus): prune old builds
7133         (BuildStatus.pruneSteps): .. and steps
7134         (BuildStepStatus.pruneLogs): .. and logs
7135         (BuilderStatus.getBuild): handle missing builds
7136         * buildbot/status/html.py (StatusResourceBuild.body): display build
7137         status in the per-build page
7138         (BuildBox.getBox): color finished builds in the per-build box
7140 2004-08-27  Brian Warner  <warner@lothar.com>
7142         * buildbot/status/mail.py (MailNotifier): new notification class,
7143         not yet finished
7145         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
7146         variants of a common base class which handles all the mode= logic
7148         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
7149         convenience method
7150         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
7152 2004-08-26  Brian Warner  <warner@lothar.com>
7154         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
7155         interfaces
7157         * buildbot/test/test_run.py: update to new Logfile interface, new
7158         buildbot.slave modules
7159         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
7161         * MANIFEST.in: new sample config file
7162         * docs/examples/hello.cfg: same
7164         * buildbot/process/step_twisted.py: remove dead import
7166         * buildbot/process/step.py (RemoteCommand.run): catch errors
7167         during .start
7168         (RemoteCommand.remote_update): ignore updates that arrive after
7169         we've shut down
7170         (RemoteCommand.remote_complete): ignore duplicate complete msgs
7171         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
7172         the responsibilities of the subclass's methods
7173         (BuildStep.failed): catch errors during failure processing
7174         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
7175         (CVS): move to a mode= argument (described in docstring), rather
7176         than the ungainly clobber=/export=/copydir= combination.
7177         (SVN): add mode= functionality to SVN too
7178         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
7180         * buildbot/process/base.py (Build.startNextStep): catch errors
7181         during s.startStep()
7183         * buildbot/clients/base.py: update to new PB client interface.
7184         gtkPanes is still broken
7186         * buildbot/bot.py, buildbot/slavecommand.py: move to..
7187         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
7188         * setup.py: add buildbot.slave module
7189         * buildbot/bb_tap.py: handle move
7190         * buildbot/slave/registry.py: place to register commands, w/versions
7191         * buildbot/slave/bot.py: major simplifications
7192         (SlaveBuilder.remote_startCommand): use registry for slave commands,
7193         instead of a fixed table. Eventually this will make the slave more
7194         extensible. Use 'start' method on the command, not .startCommand.
7195         Fix unsafeTracebacks handling (I think).
7196         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
7197         helper class with a .start method that returns a Deferred.
7198         SlaveShellCommand is the form reached by the buildmaster. Commands
7199         which use multiple ShellCommands can just chain them as Deferreds,
7200         with some helper methods in Command (_abandonOnFailure and
7201         _checkAbandoned) to bail on rc!=0.
7202         (CVSCommand): prefer new mode= argument
7203         (SVNFetch): add mode= argument
7205         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
7206         put a useful reason string on the build
7208         * buildbot/status/builder.py (LogFile): do LogFile right: move the
7209         core functionality into an IStatusLog object
7210         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
7211         * buildbot/status/html.py (TextLog): HTML-rendering goes here
7212         (StatusResourceBuild.body): use proper accessor methods
7213         * buildbot/status/client.py (RemoteLog): PB-access goes here
7214         (StatusClientPerspective.perspective_subscribe): add "full" mode,
7215         which delivers log contents too
7216         (PBListener.__cmp__): make PBListeners comparable, thus removeable
7217         * buildbot/status/event.py: remove old Logfile completely
7219         * buildbot/interfaces.py (IStatusLog.subscribe): make the
7220         subscription interface for IStatusLog subscriptions just like all
7221         other the status subscriptions
7222         (IStatusReceiver.logChunk): method called on subscribers
7224 2004-08-24  Brian Warner  <warner@lothar.com>
7226         * buildbot/process/builder.py (Builder._pong): oops, ping response
7227         includes a result (the implicit None returned by remote_print).
7228         Accept it so the _pong method handles the response correctly.
7230 2004-08-06  Brian Warner  <warner@lothar.com>
7232         * buildbot/test/test_config.py: update IRC, PBListener tests
7234         * buildbot/status/client.py (StatusClientPerspective): total
7235         rewrite to match new IStatus interfaces. New subscription scheme.
7236         There are still a few optimizations to make (sending down extra
7237         information with event messages so the client doesn't have to do a
7238         round trip). The logfile-retrieval code is probably still broken.
7239         Moved the PB service into its own port, you can no longer share a
7240         TCP socket between a PBListener and, say, the slaveport (this
7241         should be fixed eventually).
7242         * buildbot/clients/base.py (Client): revamp to match. still needs
7243         a lot of work, but basic event reporting works fine. gtkPanes is
7244         completely broken.
7246         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
7247         instance talks to a single irc server. Threw out all the old
7248         multi-server handling code. Still need to add back in
7249         builder-control (i.e. "force build")
7251         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
7252         more random text to the as-yet-unreachable per-step page
7254         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
7255         rename to stepETAUpdate
7256         (BuildStatus.subscribe): add build-wide ETA updates
7257         (BuilderStatus.getState): remove more cruft
7258         (BuilderStatus.getCurrentBuild): remove more cruft
7259         (BuilderStatus.buildStarted): really handle tuple-subscription
7260         * buildbot/test/test_run.py (Status.testSlave): handle the
7261         stepETAUpdate rename
7263         * buildbot/master.py (BuildMaster): don't add a default
7264         StatusClientService. Don't add a default IrcStatusFactory. Both
7265         are now added through c['status'] in the config file. c['irc'] is
7266         accepted for backwards compatibility, the only quirk is you cannot
7267         use c['irc'] to specify IRC servers on ports other than 6667.
7269         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
7270         (IStatusReceiver.buildStarted): allow update-interval on subscribe
7271         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
7272         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
7275         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
7276         the buildmaster to re-read its config file
7279         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
7280         find out the port our server is running on
7281         (WebTest.test_webPathname_port): same
7283         * buildbot/test/test_config.py (testWebPortnum): test it
7284         (testWebPathname): ditto
7286         * docs/config.xhtml: document new c['status'] configuration option
7288         * buildbot/status/html.py (Waterfall): new top-level class which
7289         can be added to c['status']. This creates the Site as well as the
7290         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
7291         reachable as .parent, for everything.
7293         * buildbot/master.py (Manhole): make it a normal service Child
7294         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
7295         webPathname. It will eventually replace c['irc'] and the implicit
7296         PB listener as well. c['webPortnum'] and c['webPathname'] are left
7297         in as (deprecated) backward compatibility hooks for now.
7300         * buildbot/process/builder.py (Builder.buildFinished): don't
7301         inform out builder_status about a finished build, as it finds out
7302         through its child BuildStatus object
7304         * buildbot/status/html.py: extensive revamp. Use adapters to make
7305         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
7306         have both starting and finishing times and adjust the waterfall
7307         display accordingly, using spacers if necessary. Use SlaveStatus
7308         to get buildslave info.
7309         (StatusResourceBuildStep): new just-one-step resource, used to get
7310         logfiles. No actual href to it yet.
7312         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
7313         the time being, until I get the file-naming scheme right
7315         * buildbot/status/builder.py (Event): clean started/finished names
7316         (BuildStatus.isFinished): .finished is not None is the right test
7317         (BuildStatus.buildStarted): track started/finished times ourselves
7318         (BuilderStatus.getSlave): provide access to SlaveStatus object
7319         (BuilderStatus.getLastFinishedBuild): all builds are now in
7320         .builds, even the currently-running one. Accomodate this change.
7321         (BuilderStatus.eventGenerator): new per-builder event generator.
7322         Returns BuildStepStatus and BuildStatus objects, since they can
7323         both be adapted as necessary.
7324         (BuilderStatus.addEvent): clean up started/finished attributes
7325         (BuilderStatus.startBuild,finishBuild): remove dead code
7326         (SlaveStatus): new object to provide ISlaveStatus
7328         * buildbot/process/step.py (ShellCommand.getColor): actually
7329         return the color instead of setting it ourselves
7330         (CVS.__init__): pull .timeout and .workdir options out of
7331         **kwargs, since BuildStep will ignore them. Without this neither
7332         will be sent to the slave correctly.
7333         (SVN.__init__): same
7335         * buildbot/process/builder.py (Builder): move flags to class-level
7336         attributes
7337         (Builder.attached): remove .remoteInfo, let the BotPerspective and
7338         SlaveStatus handle that
7340         * buildbot/process/base.py (Build.firstEvent): remove dead code
7341         (Build.stopBuild): bugfix
7343         * buildbot/changes/pb.py (PBChangeSource.describe): add method
7345         * buildbot/changes/changes.py (Change): add IStatusEvent methods
7346         (ChangeMaster.eventGenerator): yield Changes, since there are now
7347         Adapters to turn them into HTML boxes
7349         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
7350         (BotPerspective.attached): feed a SlaveStatus object
7351         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
7352         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
7354         * buildbot/interfaces.py: API additions
7355         (ISlaveStatus): place to get slave status
7357 2004-08-04  Brian Warner  <warner@lothar.com>
7359         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
7360         the delay finishes, so the step is marked as SUCCESS
7362         * buildbot/test/test_run.py (Status.testSlave): cover more of
7363         IBuildStatus and IBuildStepStatus
7365         * buildbot/status/progress.py (StepProgress): move some flags to
7366         class-level attributes
7367         (StepProgress.remaining): if there are no other progress metrics
7368         to go by, fall back to elapsed time
7369         (StepProgress.setExpectations): take a dict of metrics instead of
7370         a list
7371         (BuildProgress.setExpectationsFrom): pull expectations from the
7372         Expectations, instead of having it push them to the BuildProgress
7373         (Expectations): move some flags to class-level attributes
7374         (Expectations.__init__): copy per-step times from the
7375         BuildProgress too
7376         (Expectations.expectedBuildTime): new method for per-build ETA
7378         * buildbot/status/event.py (Logfile): move some flags to
7379         class-level attributes
7380         (Logfile.logProgressTo): better method name, let step set the
7381         progress axis name (instead of always being "output")
7383         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
7384         times directly, rather than depending upon the (possibly missing)
7385         .progress object. Use 'None' to indicate "not started/finished
7386         yet"
7387         (BuildStepStatus.getExpectations): oops, return the full list of
7388         expectations
7389         (BuilderStatus._buildFinished): append finished builds to .builds
7391         * buildbot/process/step.py (BuildStep): add separate .useProgress
7392         flag, since empty .progressMetrics[] still implies that time is a
7393         useful predictor
7394         (CVS): set up the cmd in __init__, instead of waiting for start()
7396         * buildbot/process/base.py (Build.startBuild): disable the 'when'
7397         calculation, this will eventually turn into a proper sourceStamp
7398         (Build.setupBuild): tell the Progress to load from the Expectations,
7399         instead of having the Expectations stuff things into the Progress
7400         (Build.buildException): add a build-level errback to make sure the
7401         build's Deferred fires even in case of exceptions
7403         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
7404         the forced build
7405         * buildbot/process/builder.py (Builder.forceBuild): convey the
7406         reason instead of creating a fake Change
7408         * docs/examples/twisted_master.cfg: update to match reality
7410         * buildbot/test/test_config.py, buildbot/test/test_process.py:
7411         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
7412         fix or remove broken/breaking tests
7414         * buildbot/status/event.py (Logfile.__len__): remove evil method
7416         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
7417         missing .build, for test convenience
7419         * buildbot/process/step_twisted.py: import fixes
7421         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
7423         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
7424         .statusbag reference
7426         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
7427         connection at shutdown, and stop it from reconnecting
7429         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
7430         chase down remote-execution bugs
7432         * buildbot/process/step.py: more fixes, remove
7433         BuildStep.setStatus()
7434         * buildbot/status/builder.py: move setStatus() functionality into
7435         BuildStatus.addStep
7436         * buildbot/status/event.py: minor fixes
7438 2004-08-03  Brian Warner  <warner@lothar.com>
7440         * buildbot/process/base.py, buildbot/process/builder.py
7441         * buildbot/process/step.py, buildbot/status/builder.py
7442         * buildbot/status/event.py, buildbot/test/test_run.py:
7443         fix status delivery, get a basic test case working
7444         * buildbot/master.py: finish implementing basic status delivery,
7445         temporarily disable HTML/IRC/PB status sources
7447         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
7449         * buildbot/status/progress.py (BuildProgress): remove dead code
7451         * buildbot/interfaces.py
7452         * buildbot/process/base.py, buildbot/process/builder.py
7453         * buildbot/process/step.py, buildbot/process/step_twisted.py
7454         * buildbot/status/builder.py: Complete overhaul of the all
7455         status-delivery code, unifying all types of status clients (HTML,
7456         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
7457         look like. This commit is a checkpointing of the work-in-progress:
7458         the input side is mostly done (Builders/Builds sending status
7459         to the BuilderStatus/BuildStatus objects), but the output side has
7460         not yet been started (HTML resources querying BuilderStatus
7461         objects). Things are probably very broken right now and may remain
7462         so for several weeks, I apologize for the disruption.
7464         * buildbot/status/event.py: add a setHTML method to use pre-rendered
7465         HTML as the log's contents. Currently used for exception tracebacks.
7466         * buildbot/status/progress.py: minor spelling changes
7468 2004-08-02  Brian Warner  <warner@lothar.com>
7470         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
7471         in mozilla. Also added stylesheets copied from Twisted's docs.
7472         Remember that these files are meant to be run through Lore first.
7473         Thanks to Philipp Frauenfelder for the fixes.
7474         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
7475         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
7476         * docs/template.tpl: added a Lore template
7478 2004-07-29  Brian Warner  <warner@lothar.com>
7480         * buildbot/interfaces.py: revamp status delivery. This is the
7481         preview: these are the Interfaces that will be provided by new
7482         Builder code, and to which the current HTML/IRC/PB status
7483         displayers will be adapted.
7485         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
7486         on the SlaveBuilder, not the Bot.
7487         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
7488         SlaveBuilder.usePTY
7489         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
7490         set .usePTY on the FakeSlaveBuilder
7492 2004-07-25  Brian Warner  <warner@lothar.com>
7494         * buildbot/changes/freshcvs.py: add some debug log messages
7495         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
7496         disabled 'setFilter' syntax
7497         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
7498         don't end with a slash
7500         * buildbot/process/base.py (Builder._pong_failed): add TODO note
7502         * setup.py: bump to 0.5.0+ while between releases
7504 2004-07-23  Brian Warner  <warner@lothar.com>
7506         * setup.py (version): Releasing buildbot-0.5.0
7508 2004-07-23  Brian Warner  <warner@lothar.com>
7510         * README: update for 0.5.0 release
7512         * NEWS: update for 0.5.0 release
7514 2004-07-22  Brian Warner  <warner@lothar.com>
7516         * buildbot/slavecommand.py (ShellCommand): make usePTY a
7517         mktap-time configuration flag (--usepty=1, --usepty=0)
7518         * buildbot/bot.py: same
7520         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
7521         an 'info' directory being unwanted
7523         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
7524         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
7525         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
7526         and earlier), use a FreshCVSSourceOldcred instead.
7527         (test): simple test routine: connect to server, print changes
7529         * buildbot/changes/changes.py (Change.getTime): make it possible
7530         to print un-timestamped changes
7532         * buildbot/master.py (makeApp): delete ancient dead code
7533         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
7534         * buildbot/test/test_config.py (testFindConfigFile): test it
7536         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
7537         instead of win32 one
7540         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
7541         now takes a dictionary instead of a tuple. See docs/config.xhtml for
7542         details.
7544         * buildbot/process/base.py (Builder.__init__): change constructor
7545         to accept a dictionary of config data, rather than discrete
7546         name/slave/builddir/factory arguments
7548         * docs/examples/twisted_master.cfg: update to new syntax
7549         * docs/examples/glib_master.cfg: same
7550         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
7551         rough tests of the new syntax
7553         
7554         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
7555         to be an int, which means "run a web.distrib sub-server on a TCP
7556         port". This lets you publish the buildbot status page to a remote
7557         twisted.web server (using distrib.ResourceSubscription). Also
7558         rename the local attributes used to hold these web things so
7559         they're more in touch with reality.
7560         * buildbot/test/test_web.py: test webPortnum and webPathname
7561         * docs/config.xhtml: document this new use of webPathname
7563         * docs/config.xhtml: new document, slightly ahead of reality
7564         
7565         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
7566         'prefix' handling: treat it as a simple string to check with
7567         .startswith, instead of treating it as a directory. This allows
7568         sub-directories to be used. If you use prefix=, you should give it
7569         a string that starts just below the CVSROOT and ends with a slash.
7570         This prefix will be stripped from all filenames, and filenames
7571         which do not start with it will be ignored.
7573 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
7575         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
7576         and --exclude (inverse of --include).  SVN post-commit hooks
7577         now have total control over which changes get sent to buildbot and which
7578         do not.
7580 2004-07-10  Brian Warner  <warner@lothar.com>
7582         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
7583         test case to match new API
7585         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
7586         which crashed HTML display when self.entries=[] (needed to
7587         distinguish between [], which means "no entries yet", and None,
7588         which means "the entries have been swapped out to disk, go fetch
7589         them").
7591 2004-07-04  Brian Warner  <warner@lothar.com>
7593         * buildbot/process/step_twisted.py (countFailedTests): Count
7594         skips, expectedFailures, and unexpectedSuccesses. Start scanning
7595         10kb from the end because any import errors are wedged there and
7596         they would make us think the test log was unparseable.
7597         (RunUnitTests.finishStatus): add skip/todo counts to the event box
7599 2004-06-26  Brian Warner  <warner@lothar.com>
7601         * buildbot/process/step_twisted.py (RemovePYCs): turn the
7602         delete-*.pyc command into an actual BuildStep, so we can label it
7603         nicely
7604         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7605         (FullTwistedBuildFactory): same
7607 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
7609         * contrib/fakechange.py: Add an errback when sending the fake 
7610         change, so we know it didn't work.
7612 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
7614         * buildbot/process/step_twisted.py: Delete *.pyc files before
7615         calling trial, so it doesn't catch any old .pyc files whose .py
7616         files have been moved or deleted.
7618         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
7619         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
7620         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
7621         instead of ["twisted.test"], so that the end result is "trial -R
7622         twisted".
7624         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
7625         regular expression to match filenames that should be ignored when
7626         changed. Also add a --revision parameter that specifies the
7627         revision to examine, which is useful for debugging.
7629 2004-06-25  Brian Warner  <warner@lothar.com>
7631         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
7632         summary of warnings (like DeprecationWarnings), next to the
7633         "summary" file
7635 2004-05-13  Brian Warner  <warner@lothar.com>
7637         * docs/examples/twisted_master.cfg: enable the win32 builder, as
7638         we now have a w32 build slave courtesy of Mike Taylor.
7640         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
7641         so broken. Fixed a race condition that tripped up interlocked
7642         builds and caused the status to be stuck at "Interlocked" forever.
7643         The twisted buildbot's one interlocked build just so happened to
7644         never hit this case until recently (the feeding builds both pass
7645         before the interlocked build is attempted.. usually it has to wait
7646         a while).
7647         (Builder._pong_failed): fix method signature
7649         * setup.py: bump to 0.4.3+ while between releases
7651 2004-04-30  Brian Warner  <warner@lothar.com>
7653         * setup.py (version): Releasing buildbot-0.4.3
7655 2004-04-30  Brian Warner  <warner@lothar.com>
7657         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
7659         * README: update for 0.4.3 release
7661         * NEWS: update for 0.4.3 release
7663         * buildbot/master.py (BuildMaster.__getstate__): make sure
7664         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
7666         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
7667         .trial as a class attribute, for upgrade from 0.4.2
7669         * buildbot/changes/changes.py (Change.links): add .links for
7670         upgrade from 0.4.2
7672         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
7673         .textWatchers and .htmlWatchers at save time, since they are both
7674         volatile, should allow smooth 0.4.2 upgrade
7676         * buildbot/process/step.py (CVS.finishStatus): catch failed
7677         CVS/SVN commands so we can make the status box red
7679 2004-04-29  Brian Warner  <warner@lothar.com>
7681         * buildbot/changes/freshcvs.py
7682         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
7683         code to do setFilter(), which tells the freshcvs daemon to not
7684         send us stuff that we're not interested in. I will uncomment it
7685         when a new version of CVSToys is available in which setFilter()
7686         actually works, and I get a chance to test it better.
7688         * docs/examples/twisted_master.cfg: start using a PBChangeSource
7690         * buildbot/master.py (Dispatcher): use a registration scheme
7691         instead of hardwired service names
7692         (BuildMaster): keep track of the Dispatcher to support
7693         registration
7695         * buildbot/changes/changes.py (ChangeMaster): create a distinct
7696         PBChangeSource class instead of having it be an undocumented
7697         internal feature of the ChangeMaster. Split out the code into a
7698         new file.
7699         * buildbot/changes/pb.py (PBChangeSource): same
7700         * buildbot/test/test_changes.py: a few tests for PBChangeSource
7702         * docs/{factories|sources|steps}.xhtml: document some pieces
7704         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
7705         using FCMaildirSource
7706         (f23osx): update OS-X builder to use python2.3, since the slave
7707         was updated to Panther (10.3.3)
7709 2004-03-21  Brian Warner  <warner@lothar.com>
7711         * buildbot/process/process_twisted.py: factor out doCheckout, change
7712         to use SVN instead of CVS
7714         * buildbot/process/base.py (BasicBuildFactory): refactor to make
7715         an SVN subclass easier
7716         (BasicSVN): subclass which uses Subversion instead of CVS
7718 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
7720         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
7721         of /bin/sh on win32
7722         (CVSCommand.cvsComplete): don't assume chdir worked on win32
7724 2004-02-25  Brian Warner  <warner@lothar.com>
7726         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
7727         is now either a list (which is passed to spawnProcess directly) or
7728         a string (which gets passed to /bin/sh -c). This removes the useSH
7729         flag and the ArgslistCommand class. Also send status header at the
7730         start and end of each command, instead of having the master-side
7731         code do that.
7732         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
7733         -r'. Update to use list-based arguments.
7734         (SVNFetch): use list-based arguments, use ['dir'] argument to
7735         simplify code.
7736         * buildbot/test/test_steps.py (Commands): match changes
7738         * buildbot/process/step.py (InternalShellCommand.words): handle
7739         command lists
7740         (SVN): inherit from CVS, cleanup
7742         * buildbot/status/event.py (Logfile.content): render in HTML, with
7743         stderr in red and headers (like the name of the command we're
7744         about to run) in blue. Add link to a second URL (url + "?text=1")
7745         to get just stdout/stderr in text/plain without markup. There is
7746         still a problem with .entries=None causing a crash, it seems to occur
7747         when the logfile is read before it is finished.
7749         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
7750         timeout to the keepalives, and use it to explicitly do a
7751         loseConnection instead of waiting for TCP to notice the loss. This
7752         ought to clear up the silent-lossage problem.
7753         (unsafeTracebacks): pass exception tracebacks back to the master,
7754         makes it much easier to debug problems
7756 2004-02-23  Brian Warner  <warner@lothar.com>
7758         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
7759         the whole command to /bin/sh instead of execve [Johan Dahlin]
7760         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
7761         '-r HEAD' [Johan Dahlin]
7762         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
7764         * buildbot/changes/changes.py (Change): add links= argument, add
7765         asHTML method [Johan Dahlin]. Modified to make a bit more
7766         XHTMLish. Still not sure how to best use links= .
7768         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
7769         Change.asHTML to display the change, not asText
7771         * buildbot/status/html.py (StatusResourceBuilder): web button to
7772         ping slave
7774         * buildbot/test/test_run.py: test to actually start a buildmaster
7775         and poke at it
7777         * MANIFEST.in: bring back accidentally-dropped test helper files
7779         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
7780         that require cvstoys if it is not installed
7782         * buildbot/process/step_twisted.py (RunUnitTests): allow other
7783         values of "bin/trial" [Dave Peticolas]
7784         (RunUnitTests.finishStatus): say "no tests run" instead of "0
7785         tests passed" when we didn't happen to run any tests
7787         * buildbot/process/step.py (Compile): use haltOnFailure instead of
7788         flunkOnFailure [Johan Dahlin]
7790         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
7791         multiple instances of the same Step class by suffixing "_2", etc,
7792         to the name until it is unique. This name needs to be unique
7793         because it is used as a key in the dictionary that tracks build
7794         progress.
7795         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
7796         add test for it
7798         * buildbot/process/base.py (Builder.ping): add "ping slave" command
7800 2004-01-14  Brian Warner  <warner@lothar.com>
7802         * buildbot/status/words.py (IrcStatusBot): when we leave or get
7803         kicked from a channel, log it
7805         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
7806         something over whatever IRC channels the buildmaster is currently
7807         connected to. Added to try and track down a problem in which the
7808         master thinks it is still connected but the IRCd doesn't see it. I
7809         used a styles.Versioned this time, so hopefully users won't have
7810         to rebuild their .tap files this time.
7811         * contrib/debug.glade: add a "Poke IRC" button
7812         * contrib/debugclient.py: same
7814         * setup.py: bump to 0.4.2+ while between releases
7816 2004-01-08  Brian Warner  <warner@lothar.com>
7818         * setup.py (version): Releasing buildbot-0.4.2
7820 2004-01-08  Brian Warner  <warner@lothar.com>
7822         * NEWS: update for 0.4.2 release
7824         * README: document how to run the tests, now that they all pass
7826         * buildbot/changes/maildir.py (Maildir.poll): minor comment
7828         * buildbot/process/step.py (CVS): add a global_options= argument,
7829         which lets you set CVS global options for the command like "-r"
7830         for read-only checkout, or "-R" to avoid writing in the
7831         repository.
7832         * buildbot/slavecommand.py (CVSCommand): same
7834         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
7835         testing easier (it is turned off when testing, to avoid the
7836         leftover timer)
7838         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
7839         to make it easier to test: break generateStepID() out to a
7840         separate function, only update statusbag if it exists.
7841         (ShellCommands): create useful text for dict-based commands too.
7843         * test/*, buildbot/test/*: move unit tests under the buildbot/
7844         directory
7845         * setup.py (packages): install buildbot.test too
7847         * buildbot/test/test_slavecommand.py: fix it, tests pass now
7848         * buildbot/test/test_steps.py: fix it, tests pass now
7850 2004-01-06  Brian Warner  <warner@lothar.com>
7852         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
7853         freshcvs mail uses a slightly different syntax for new
7854         directories. Update parser to handle either.
7855         * test/test_mailparse.py (Test1.testMsg9): test for same
7857 2003-12-21  Brian Warner  <warner@lothar.com>
7859         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
7860         'warnOnWarnings' so that lintian errors mark the build orange
7862 2003-12-17  Brian Warner  <warner@lothar.com>
7864         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
7865         messages emitted by Bonsai, contributed by Stephen Davis.
7867         * test/*: moved all tests to use trial instead of unittest. Some
7868         still fail (test_steps, test_slavecommand, and test_process).
7870         * setup.py (version): bump to 0.4.1+ while between releases
7872 2003-12-09  Brian Warner  <warner@lothar.com>
7874         * setup.py (version): Releasing buildbot-0.4.1
7876 2003-12-09  Brian Warner  <warner@lothar.com>
7878         * NEWS: update for 0.4.1 release
7880         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
7881         freebsd builder code a little bit
7883         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
7884         don't try to compare attributes of different classes
7885         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7886         (MaildirSource.messageReceived): fix Change delivery
7888         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
7889         into the config file's namespace before loading it, like the
7890         documentation claims it does
7891         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
7892         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
7893         daemon comes back online
7895 2003-12-08  Brian Warner  <warner@lothar.com>
7897         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
7898         so the example will work with online=0 as well
7900         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
7901         fix the __implements__ line
7903         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
7904         class a twisted.application.service.Service, use startService to
7905         get it moving.
7907         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
7908         directory fd instead of simple open(). I'm sure this used to work,
7909         but the current version of python refuses to open directories with
7910         open().
7912 2003-12-05  Brian Warner  <warner@lothar.com>
7914         * setup.py (version): bump to 0.4.0+ while between releases
7916 2003-12-05  Brian Warner  <warner@lothar.com>
7918         * setup.py (version): Releasing buildbot-0.4.0
7920 2003-12-05  Brian Warner  <warner@lothar.com>
7922         * docs/examples/glib_master.cfg: replace old sample scripts with
7923         new-style config files
7924         * MANIFEST.in: include .cfg files in distribution tarball
7926         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
7927         implement a dummy method to avoid the exception that occurs when
7928         freshcvs sends this to us.
7930         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
7931         removed the method, as it broke reconnection. Apparently
7932         stopFactory is called each time the connection attempt fails. Must
7933         rethink this.
7934         (ReconnectingPBClientFactory.__getstate__): squash the _callID
7935         attribute before serialization, since without stopFactory the
7936         reconnect timer may still be active and they aren't serializable.
7938         * test/test_mailparse.py (ParseTest): test with 'self' argument
7940         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
7941         argument, as these "functions" are invoked like methods from class
7942         attributes and therefore always get an instance as the first
7943         argument.
7945         * buildbot/changes/maildir.py (Maildir.start): fix error in error
7946         message: thanks to Stephen Davis for the catch
7948 2003-12-04  Brian Warner  <warner@lothar.com>
7950         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
7951         twisted's standard ReconnectingClientFactory. Handles both oldcred
7952         and newcred connections. Also has a bug-workaround for
7953         ReconnectingClientFactory serializing its connector when it
7954         shouldn't.
7956         * buildbot/bot.py (BotFactory): rewrite connection layer with new
7957         pbutil. Replace makeApp stuff with proper newcred/mktap
7958         makeService(). Don't serialize Ephemerals on shutdown.
7960         * buildbot/changes/changes.py (ChangeMaster): make it a
7961         MultiService and add the sources as children, to get startService
7962         and stopService for free. This also gets rid of the .running flag.
7964         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
7965         new pbutil, turn into a TCPClient at the same time (to get
7966         startService for free). Two variants exist: FreshCVSSourceOldcred
7967         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
7968         yet, but when it does, we'll be ready).
7969         (FreshCVSSource.notify): handle paths which are empty after the
7970         prefix is stripped. This only happens when the top-level (prefix)
7971         directory is added, at the very beginning of a Repository's life.
7973         * buildbot/clients/base.py: use new pbutil, clean up startup code.
7974         Now the only reconnecting code is in the factory where it belongs.
7975         (Builder.unsubscribe): unregister the disconnect callback when we
7976         delete the builder on command from the master (i.e. when the
7977         buildmaster is reconfigured and that builder goes away). This
7978         fixes a multiple-delete exception when the status client is shut
7979         down afterwards.
7980         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
7981         base Client. 
7983         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
7984         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
7986 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
7988         * contrib/run_maxq.py: Accept a testdir as an argument rather than
7989         a list of globs (ugh). The testdir will be searched for files
7990         named *.tests and run the tests in the order specified in each of
7991         those files. This allows for "dependancies" between tests to be
7992         codified.
7994         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
7995         argument to pass to run_maxq.py, instead of a glob.
7997 2003-10-17  Brian Warner  <warner@lothar.com>
7999         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
8000         files that live in the sandbox
8002 2003-10-15  Brian Warner  <warner@lothar.com>
8004         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
8005         spelling error in "docs" count-warnings output
8006         (HLint.start): stupid thinko meant .xhtml files were ignored
8008         * docs/examples/twisted_master.cfg (reactors): disable cReactor
8009         tests now that cReactor is banished to the sandbox
8011 2003-10-10  Brian Warner  <warner@lothar.com>
8013         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
8014         scheme: now .xhtml are sources and .html are generated
8016 2003-10-08  Brian Warner  <warner@lothar.com>
8018         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
8019         we were ignoring the 'randomly' parameter.
8021 2003-10-01  Brian Warner  <warner@lothar.com>
8023         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
8024         posix, to kill sub-children of aborted slavecommands.
8026         * buildbot/status/builder.py: rename Builder to BuilderStatus.
8027         Clean up initialization: lastBuildStatus remains None until the
8028         first build has been completed.
8030         * buildbot/status/html.py (WaterfallStatusResource.body): handle
8031         None as a lastBuildStatus
8032         * buildbot/clients/gtkPanes.py: same
8034         * buildbot/status/client.py (StatusClientService): keep
8035         BuilderStatus objects in self.statusbags . These objects now live
8036         here in the StatusClientService and are referenced by the Builder
8037         object, rather than the other way around.
8038         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
8039         * buildbot/process/base.py (Builder): same
8040         * test/test_config.py (ConfigTest.testBuilders): same
8042         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
8043         an existing builder, leave the statusbag alone. This will preserve the
8044         event history.
8046         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
8047         hook. This will probably go away in favor of a class in upcoming
8048         Twisted versions.
8050         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
8051         serviceName from newcred FreshCVSNotifiee setup
8053 2003-09-29  Brian Warner  <warner@lothar.com>
8055         * buildbot/process/process_twisted.py: switch to new reactor
8056         abbreviations
8057         * docs/examples/twisted_master.cfg: same
8059         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
8061         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
8062         botmaster reference instead of the oldapp service lookup
8064         * buildbot/master.py (BuildMaster.__init__): give the
8065         StatusClientService a reference to the botmaster to make it easier to
8066         force builds
8068 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
8070         * buildbot/status/html.py (Box.td): escape hreffy things so you
8071         can have spaces in things like builder names
8072         (StatusResourceBuilder.body)
8073         (WaterfallStatusResource.body)
8074         (WaterfallStatusResource.body0): same
8076 2003-09-25  Brian Warner  <warner@lothar.com>
8078         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
8079         rearrange the builder list when adding or removing builders: keep
8080         them in the order the user requested.
8081         * test/test_config.py (ConfigTest.testBuilders): verify it
8083         * contrib/debug.glade: give the debug window a name
8085         * buildbot/process/base.py (Builder.buildTimerFired): builders can
8086         now wait on multiple interlocks. Fix code relating to that.
8087         (Builder.checkInterlocks): same
8088         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
8090         * buildbot/master.py (BuildMaster.loadConfig): move from
8091         deprecated pb.BrokerFactory to new pb.PBServerFactory
8092         * test/test_config.py (ConfigTest.testWebPathname): same
8094         * docs/examples/twisted_master.cfg: fix interlock declaration
8096         * buildbot/master.py (BotMaster.addInterlock): move code to attach
8097         Interlocks to their Builders into interlock.py .
8098         (BuildMaster.loadConfig_Interlocks): fix interlock handling
8100         * test/test_config.py (ConfigTest.testInterlocks): validate
8101         interlock handling
8103         * buildbot/process/base.py (Builder.__init__): better comments
8104         * buildbot/process/interlock.py (Interlock.__repr__): same
8105         (Interlock.deactivate): add .active flag, move the code that
8106         attaches/detaches builders into the Interlock
8108 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
8110         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
8111         tests using the new run_maxq.py script, and reporting failures by
8112         parsing its output.
8114         * contrib/run_maxq.py: Hacky little script for running a set of maxq
8115         tests, reporting their success or failure in a buildbot-friendly 
8116         manner.
8118 2003-09-24  Brian Warner  <warner@lothar.com>
8120         * docs/examples/twisted_master.cfg: example of a new-style config
8121         file. This lives in the buildmaster base directory as
8122         "master.cfg".
8124         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
8125         button to make the master re-read its config file
8127         * buildbot/master.py (BuildMaster.loadConfig): new code to load
8128         buildmaster configuration from a file. This file can be re-read
8129         later, and the buildmaster will update itself to match the new
8130         desired configuration. Also use new Twisted Application class.
8131         * test/Makefile, test/test_config.py: unit tests for same
8133         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
8134         FreshCVSSources comparable, to support reload.
8135         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
8137         * buildbot/process/base.py (Builder): make them comparable, make
8138         Interlocks easier to attach, to support reload. Handle
8139         re-attachment of remote slaves.
8140         * buildbot/process/interlock.py (Interlock): same
8142         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
8143         Twisted's new Application class. Requires Twisted >= 1.0.8 .
8144         buildmaster taps are now constructed with mktap.
8145         * buildbot/status/client.py (StatusClientService): same
8147         * buildbot/status/words.py: move to new Services, add support to
8148         connect to multiple networks, add reload support, allow nickname
8149         to be configured on a per-network basis
8151 2003-09-20  Brian Warner  <warner@lothar.com>
8153         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
8154         the freebsd builder, now that the machine has been upgraded and no
8155         longer has python2.2
8157         * setup.py (version): bump to 0.3.5+ while between releases
8159 2003-09-19  Brian Warner  <warner@lothar.com>
8161         * setup.py (version): Releasing buildbot-0.3.5
8163 2003-09-19  Brian Warner  <warner@lothar.com>
8165         * NEWS: add post-0.3.4 notes
8167         * README (REQUIREMENTS): note twisted-1.0.7 requirement
8169         * MANIFEST.in: add contrib/*
8171         * docs/examples/twisted_master.py (twisted_app): all build slaves must
8172         use a remote root now: cvs.twistedmatrix.com
8174         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
8175         to newcred
8176         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
8177         compatibility with old servers
8178         (FreshCVSSource.start): and provide a way to use it
8179         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
8181         * docs/examples/twisted_master.py (twisted_app): update to new
8182         makeApp interface.
8183         (twisted_app): listen on new ~buildbot socket
8184         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
8186         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
8187         to reduce cvs bandwidth (update instead of full checkout)
8189 2003-09-11  Brian Warner  <warner@lothar.com>
8191         * contrib/fakechange.py: demo how to connect to the changemaster
8192         port. You can use this technique to submit changes to the
8193         buildmaster from source control systems that offer a hook to run a
8194         script when changes are committed.
8196         * contrib/debugclient.py: tool to connect to the debug port. You
8197         can use it to force builds, submit fake changes, and wiggle the
8198         builder state
8200         * buildbot/master.py: the Big NewCred Reorganization. Use a single
8201         'Dispatcher' realm to handle all the different kinds of
8202         connections and Perspectives: buildslaves, the changemaster port,
8203         the debug port, and the status client port. NewCredPerspectives
8204         now have .attached/.detached methods called with the remote 'mind'
8205         reference, much like old perspectives did. All the pb.Services
8206         turned into ordinary app.ApplicationServices .
8207         (DebugService): went away, DebugPerspectives are now created
8208         directly by the Dispatcher.
8209         (makeApp): changed interface a little bit
8211         * buildbot/changes/changes.py: newcred
8212         * buildbot/status/client.py: newcred
8214         * buildbot/clients/base.py: newcred client side changes
8215         * buildbot/bot.py: ditto
8217         * docs/examples/glib_master.py: handle new makeApp() interface
8218         * docs/examples/twisted_master.py: ditto
8220         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
8221         base newcred Perspectives on. This should go away once Twisted
8222         itself provides something sensible.
8225 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
8227         * contrib/svn_buildbot.py: A program that you can call from your
8228         SVNREPO/hooks/post-commit file that will notify a BuildBot master
8229         when a change in an SVN repository has happened. See the top of
8230         the file for some minimal usage info.
8232 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
8234         * buildbot/slavecommand.py (ArglistCommand): Add new
8235         ArglistCommand that takes an argument list rather than a string as
8236         a parameter. Using a st.split() for argv is very bad.
8238         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
8239         update to a particular revision rather than always checking out
8240         (still not very smart about it, there may be cases where the
8241         checkout becomes inconsistent).
8243 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
8245         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
8246         SVN fetch support. It can checkout (not update!) a specified
8247         revision from a specified repository to a specified directory.
8249         * buildbot/status/progress.py (Expectations.update): Fix an
8250         obvious bug (apparently created by the change described in the
8251         previous ChangeLog message) by moving a check to *after* the
8252         variable it checks is defined.
8255 2003-09-08  Brian Warner  <warner@lothar.com>
8257         * buildbot/status/progress.py (Expectations.update): hack to catch
8258         an exception TTimo sees: sometimes the update() method seems to
8259         get called before the step has actually finished, so the .stopTime
8260         is not set, so no totalTime() is available and we average None
8261         with the previous value. Catch this and just don't update the
8262         metrics, and emit a log message.
8264 2003-08-24  Brian Warner  <warner@lothar.com>
8266         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
8267         parameter to set copydir='original' in CVS commands.
8269         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
8271         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
8272         which tells the command to maintain a separate original-source CVS
8273         workspace. For each build, this workspace will be updated, then
8274         the tree copied into a new workdir. This reduces CVS bandwidth
8275         (from a full checkout to a mere update) while doubling the local
8276         disk usage (to keep two copies of the tree).
8278 2003-08-21  Brian Warner  <warner@lothar.com>
8280         * buildbot/status/event.py (Logfile.addEntry): if the master web
8281         server dies while we're serving a page, request.write raises
8282         pb.DeadReferenceError . Catch this and treat it like a
8283         notifyFinish event by dropping the request.
8285 2003-08-18  Brian Warner  <warner@lothar.com>
8287         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
8288         (instead of blowing up) if a force-build command is given without
8289         a reason field
8291         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
8292         don't blow up if there aren't yet any Changes in the list
8294 2003-08-02  Brian Warner  <warner@lothar.com>
8296         * buildbot/bot.py (updateApplication): don't set the .tap name,
8297         since we shouldn't assume we own the whole .tap file
8299         * buildbot/bb_tap.py (updateApplication): clean up code, detect
8300         'mktap buildbot' (without a subcommand) better
8302 2003-07-29  Brian Warner  <warner@lothar.com>
8304         * buildbot/status/words.py
8305         (IrcStatusFactory.clientConnectionLost): when we lose the
8306         connection to the IRC server, schedule a reconnection attempt.
8308         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
8309         use shutil.rmtree instead of forking off an "rm -rf" command.
8310         rmtree may take a while and will block until it finishes, so we
8311         use "rm -rf" if available.
8313         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
8314         freebsd buildslave badly
8316         * setup.py (version): bump to 0.3.4+ while between releases
8318 2003-07-28  Brian Warner  <warner@lothar.com>
8320         * setup.py (version): Releasing buildbot-0.3.4
8322 2003-07-28  Brian Warner  <warner@lothar.com>
8324         * NEWS: update in preparation for release
8326         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
8327         process.signalProcess instead of os.kill, to improve w32
8328         portability
8330         * docs/examples/twisted_master.py (twisted_app): turn off
8331         win32eventreactor: the tests hang the buildslave badly
8333         * buildbot/process/base.py (Build.buildFinished): update ETA even on
8334         failed builds, since usually the failures are consistent
8336         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
8337         add compileOpts/compileOpts2 to reactors build
8339         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
8340         (twisted_app): use both default and win32eventreactor on w32 build.
8341         Use both default and kqreactor on freebsd build.
8343         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8344         add compileOpts2, which is put after the build_ext argument. w32
8345         needs "-c mingw32" here.
8347         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
8348         touch .acqpath, it goes away in recent Twisted releases
8350         * docs/examples/twisted_master.py (twisted_app): use "python" for
8351         the w32 buildslave, not "python2.2"
8353         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
8354         the directory exists.. should hush an exception under w32
8356         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
8357         ProcessTerminated -provided values for signal and exitCode rather
8358         than parsing the unix status code directly. This should remove one
8359         more roadblock for a w32-hosted buildslave.
8361         * test/test_mailparse.py: add test cases for Syncmail parser
8363         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
8364         temporary compatibility import. Note! Start importing
8365         FCMaildirSource from changes.mail instead of changes.freshcvsmail
8367         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
8369 2003-07-27  Brian Warner  <warner@lothar.com>
8371         * NEWS: started adding new features
8373         * buildbot/changes/mail.py: start work on Syncmail parser, move
8374         mail sources into their own file
8376         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
8377         as implementing IChangeSource
8378         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
8380         * buildbot/interfaces.py: define the IChangeSource interface
8382 2003-07-26  Brian Warner  <warner@lothar.com>
8384         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
8386 2003-06-25  Brian Warner  <warner@lothar.com>
8388         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
8389         seconds display
8391 2003-06-17  Brian Warner  <warner@lothar.com>
8393         * buildbot/status/words.py: clean up method usage to avoid error
8394         in silly IRC command
8395         (IrcStatusBot.emit_status): round off seconds display
8397         * buildbot/process/base.py (Build): delete the timer when saving
8398         to the .tap file, and restore it (if it should still be running)
8399         upon restore. This should fix the "next build in -34 seconds"
8400         messages that result when the master is restarted while builds are
8401         sitting in the .waiting slot. If the time for the build has
8402         already passed, start it very soon (in 1 second).
8404         * buildbot/status/words.py: more silly commands
8406         * README (REQUIREMENTS): add URLs to all required software
8408         * buildbot/status/words.py ('last'): mention results of, and time
8409         since last build
8411 2003-05-28  Brian Warner  <warner@lothar.com>
8413         * buildbot/status/words.py: add 'last' command
8414         (IrcStatusBot.emit_status): add current-small text to 'status' output
8416         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
8417         (twisted_app): remove spaces from OS-X builder name
8419         * buildbot/master.py (makeApp): add knob to turn on IRC bot
8420         * buildbot/status/words.py: IRC bot should actually be useful now
8422 2003-05-23  Brian Warner  <warner@lothar.com>
8424         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
8425         "slave information" from $(slavedir)/info/* . These files are
8426         maintained by the slave administrator, and describe the
8427         machine/environment that is hosting the slave. Information from
8428         them is put into the "Builder" HTML page. Still need to establish
8429         a set of well-known filenames and meanings for this data: at the
8430         moment, *all* info/* files are sent to the master, but only
8431         'admin' and 'host' are used on that end.
8432         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
8433         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
8434         * buildbot/master.py (BotPerspective.got_info):  ditto
8436 2003-05-22  Brian Warner  <warner@lothar.com>
8438         * setup.py (version): bump version to 0.3.3+ while between releases
8440 2003-05-21  Brian Warner  <warner@lothar.com>
8442         * setup.py: Releasing buildbot-0.3.3
8444 2003-05-21  Brian Warner  <warner@lothar.com>
8446         * NEWS: 0.3.3 news items
8448         * README: describe --keepalive and life behind a NAT box
8450         * buildbot/bot.py (Bot.connected): implement application-level
8451         keepalives to deal with NAT timeouts, turn them on with
8452         --keepalive option or when SO_KEEPALIVE doesn't work.
8454         * buildbot/master.py (BotPerspective): accept keepalives silently
8456         * buildbot/process/base.py (Build.buildException): CopiedFailures
8457         don't carry as much information as local ones, so don't try to
8458         create a big HTMLized version of them.
8460         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
8461         log file when step fails due to an exception, such as when the slave
8462         becomes unreachable
8464         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
8465         --testmodule argument instead of grepping for test-case-name tags
8466         ourselves. Remove FindUnitTests code.
8467         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
8469         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
8471 2003-05-16  Brian Warner  <warner@lothar.com>
8473         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
8474         argument to allow things like CFLAGS=-O0 to be passed without relying
8475         upon /bin/sh processing on the slave.
8477         * buildbot/process/step.py (InternalShellCommand.start): send
8478         'env' dict to slave
8479         * buildbot/slavecommand.py (ShellCommand.start): create argv with
8480         'split' instead of letting /bin/sh do it. This should also remove
8481         the need for /bin/sh on the buildslave, making it more likely to
8482         work with win32.
8484         * buildbot/status/html.py: html-escape text in blamelist.
8485         Add "force build" button to the Builder page.
8487         * buildbot/process/step_twisted.py (countFailedTests): look at
8488         last 1000 characters for status line, as import errors can put it
8489         before the -200 point.
8491 2003-05-15  Brian Warner  <warner@lothar.com>
8493         * docs/examples/twisted_master.py: use clobber=0 for remote builds
8495         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8496         make 'clobber' a parameter, so it is possible to have builds which
8497         do full tests but do a cvs update instead of hammering the CVS
8498         server with a full checkout each build
8500         * buildbot/process/step.py (InternalShellCommand): bump default
8501         timeout to 20 minutes
8503         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
8504         the master to trigger a build. Run it via manhole.
8506         * buildbot/master.py (BotPerspective.perspective_forceBuild):
8507         allow slaves to trigger any build that they host, to make life
8508         easier for slave admins who are testing out new build processes
8510         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
8511         don't flunk cReactor or qtreactor on failure, since they fail alot
8512         these days. Do warnOnFailure instead.
8514         * buildbot/process/base.py: change Builder.buildable from a list
8515         into a single slot. When we don't have a slave, new builds (once
8516         they make it past the timeout) are now merged into an existing
8517         buildable one instead of being queued. With this change, a slave
8518         which has been away for a while doesn't get pounded with all the
8519         builds it missed, but instead just does a single build.
8521 2003-05-07  Brian Warner  <warner@lothar.com>
8523         * setup.py (version): bump version to 0.3.2+ while between releases
8525 2003-05-07  Brian Warner  <warner@lothar.com>
8527         * setup.py: Releasing buildbot-0.3.2
8529 2003-05-07  Brian Warner  <warner@lothar.com>
8531         * setup.py: fix major packaging error: include subdirectories!
8532         
8533         * NEWS: add changes since last release
8535         * README (REQUIREMENTS): update twisted/python dependencies
8537         * buildbot/status/builder.py (Builder.startBuild): change
8538         BuildProcess API: now they should call startBuild/finishBuild
8539         instead of pushing firstEvent / setLastBuildStatus. Moving towards
8540         keeping a list of builds in the statusbag, to support other kinds of
8541         status delivery.
8542         (Builder.addClient): send current-activity-small to new clients
8543         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
8544         new API
8546         * buildbot/status/client.py: drop RemoteReferences at shutdown
8548         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
8550         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
8551         more debug messages for remote status client
8553         * buildbot/process/step.py (InternalBuildStep.stepComplete)
8554         (.stepFailed): only fire the Deferred once, even if both
8555         stepComplete and stepFailed are called. I think this can happen if
8556         an exception occurs at a weird time.
8558         * buildbot/status/words.py: work-in-progress: IRC status delivery
8560 2003-05-05  Brian Warner  <warner@lothar.com>
8562         * docs/examples/twisted_master.py (twisted_app): hush internal
8563         python2.3 distutils deprecation warnings
8564         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8565         add compileOpts= argument which inserts extra args before the
8566         "setup.py build_ext" command. This can be used to give -Wignore
8567         warnings, to hush some internal python-2.3 deprecation messages.
8569         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
8570         the ['twisted.test'] default test case to make it easier to change
8571         in subclasses
8573         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
8574         * buildbot/clients/gtkPanes.py: ditto
8576         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
8577         arg to collapse RunUnitTestsRandomly into RunUnitTests
8578         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8579         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
8581         * buildbot/status/html.py (StatusResource): shuffle Resources
8582         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
8583         would serve the waterfall display, but the internal links were
8584         only valid on the trailing-slash version. The correct behavior is
8585         for the non-slashed one to serve a Redirect to the slashed one.
8586         This only shows up when the buildbot page is hanging off another
8587         server, like a Twisted-Web distributed server.
8589         * buildbot/status/event.py (Event, RemoteEvent): make Events
8590         pb.Cacheable, with RemoteEvent as the cached version. This removes
8591         a lot of explicit send-an-update code.
8592         * buildbot/status/builder.py (Builder): remove send-update code
8593         * buildbot/status/client.py (ClientBuilder): remove send-update
8594         code, and log errors that occur during callRemote (mostly to catch
8595         InsecureJelly exceptions)
8597         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
8598         run Lore with the same python used in the rest of the build
8600         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
8602         * buildbot/process/step_twisted.py (HLint): accept 'python'
8603         argument. Catch rc!=0 and mark the step as failed. This marks the
8604         build orange ("has warnings").
8605         (RunUnitTestsJelly): move out to step_twisted2.py
8607         * buildbot/util.py (ignoreStaleRefs): add utility function
8609         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
8610         don't fake ETA object, it's too hard to get right
8612 2003-05-02  Brian Warner  <warner@lothar.com>
8614         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
8616 2003-05-01  Brian Warner  <warner@lothar.com>
8618         * buildbot/status/html.py (StatusResource.body): oops, I was
8619         missing a <tr>, causing the waterfall page to be misrendered in
8620         everything except Galeon.
8622 2003-04-29  Brian Warner  <warner@lothar.com>
8624         * docs/examples/twisted_master.py: make debuild use python-2.2
8625         explicitly, now that Twisted stopped supporting 2.1
8627         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
8628         handle tuple results too. I keep forgetting this, which suggests
8629         it needs to be rethought.
8631         * setup.py (setup): bump version to 0.3.1+ while between releases
8632         
8633 2003-04-29  Brian Warner  <warner@lothar.com>
8635         * setup.py: Releasing buildbot-0.3.1
8637 2003-04-29  Brian Warner  <warner@lothar.com>
8639         * README (SUPPORT): add plea to send questions to the mailing list
8641         * NEWS, MANIFEST.in: add description of recent changes
8643         * docs/examples/twisted_master.py: add the code used to create the
8644         Twisted buildmaster, with passwords and such removed out to a
8645         separate file.
8647         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
8648         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
8649         buildmasters to not require CVSToys be installed.
8650         * README, docs/examples/glib_master: update to match the change
8652         * buildbot/clients/base.py, buildbot/bot.py,
8653         buildbot/changes/changes.py, buildbot/pbutil.py: copy
8654         ReconnectingPB from CVSToys distribution to remove CVSToys
8655         dependency for build slaves and status clients. Buildmasters which
8656         use FreshCVSSources still require cvstoys be installed, of course.
8658 2003-04-25  Brian Warner  <warner@lothar.com>
8660         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
8661         runTestsRandomly arg to turn on trial -z
8663         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
8664         experimental code to use trial's machine-parseable output to get
8665         more detailed test results. Still has some major issues.
8666         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
8667         in random sequence
8669         * buildbot/status/builder.py (Builder.setCurrentBuild):
8670         anticipating moving build history into statusbag, not used yet
8672         * buildbot/status/tests.py: code to centralize test results,
8673         doesn't work quite yet
8675         * buildbot/status/event.py (Event): use hasattr("setName") instead
8676         of isinstance for now.. need better long-term solution
8678         * buildbot/status/html.py: Remove old imports
8680 2003-04-24  Brian Warner  <warner@lothar.com>
8682         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
8683         ignore changes under doc/fun/ and sandbox/
8685         * buildbot/process/step_twisted.py: update pushEvent and friends.
8687         * buildbot/status/html.py (Box.td): replace event.buildername with
8688         event.parent.getSwappableName(). Needs more thought.
8690         * buildbot/status/builder.py (Builder): Replace pushEvent and
8691         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
8692         Tell events they are being pruned with event.delete().
8694         * buildbot/process/base.py (Build): Remove Builder status-handling
8695         methods. s/pushEvent/setCurrentActivity/.
8697         * buildbot/process/step.py (BuildStep): clean up status delivery.
8698         Gouse builder.statusbag methods instead of intermediate builder
8699         methods. s/updateLastEvent/updateCurrentActivity/.
8700         s/finalizeLastEvent/finishCurrentActivity/. Use
8701         addFileToCurrentActivity for summaryFunction.
8703         * buildbot/status/event.py (Logfile): put data in a Swappable when
8704         .finish is called.
8705         (Event): add more setter methods. Remove .buildername, use .parent
8706         and getSwappableName instead (needs more thought).
8708         * buildbot/util.py (Swappable):
8709         * test/test_swap.py: don't bother setting filename at __init__
8710         time, do it later. Change setFilename args to take parent first,
8711         since it provides the most significant part of the filename.
8713 2003-04-23  Brian Warner  <warner@lothar.com>
8715         * buildbot/status/event.py (Logfile.addEntry): append to previous
8716         entry, if possible
8718         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
8719         anticipating Swappable
8720         (InternalShellCommand.remoteUpdate): split out various log-adding
8721         methods so subclasses can snarf stdout separately
8723         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
8724         in anticipation of Swappable build logs
8725         (Builder.testsFinished): anticipating TestResults, still disabled
8727         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
8728         last 100 events
8730         * buildbot/status/event.py (Logfile): add (disabled) support for
8731         Swappable, not ready for use yet
8733         * buildbot/util.py (Swappable): object which is swapped out to
8734         disk after some period of no use.
8735         * test/test_swap.py: test buildbot.utils.Swappable
8737 2003-04-14  Brian Warner  <warner@lothar.com>
8739         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
8740         periodic-build timer. Set the .periodicBuildTime on a builder
8741         instance to some number of seconds to activate it.
8743         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
8745         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
8746         a way that survives result tuples
8748 2003-04-12  Brian Warner  <warner@lothar.com>
8750         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8751         return a dict instead of a tuple: allow summarizers to provide
8752         multiple summaries if they want
8753         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
8754         (debuildSummarizer): summarize lintian warnings/errors
8756 2003-04-10  Brian Warner  <warner@lothar.com>
8758         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
8760 2003-04-09  Brian Warner  <warner@lothar.com>
8762         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
8763         empty summaries: happens when the tests fail so hard they don't emit
8764         a parseable summary line.
8766         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8767         Allow summaryFunction to return None to indicate no summary should
8768         be added.
8770         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
8771         writing to stale HTTP requests: notice when they disconnect and
8772         remove the request from the list. Also add CacheToFile from
8773         moshez, will be used later.
8775 2003-04-08  Brian Warner  <warner@lothar.com>
8777         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
8778         should be an int, not a list of strings
8780         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
8781         if we weren't actually connected
8783         * buildbot/process/step_twisted.py (trialTextSummarizer): function
8784         to show the tail end of the trial text output
8786         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
8787         hook to summarize the results of a ShellCommand
8789 2003-04-07  Brian Warner  <warner@lothar.com>
8791         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
8792         twisted test suite code into a single class.
8793         * buildbot/process/process_twisted.py: same
8795 2003-04-04  Brian Warner  <warner@lothar.com>
8797         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
8799         * README (SLAVE): document use of mktap to create slave .tap file
8800         (REQUIREMENTS): describe dependencies
8802         * buildbot/bb_tap.py, buildbot/plugins.tml:
8803         * buildbot/bot.py (updateApplication): Add mktap support for creating
8804         buildslave .tap files
8806 2003-03-28  Brian Warner  <warner@lothar.com>
8808         * buildbot/process/step.py (InternalShellCommand.finished): handle
8809         new tuple result values (fix embarrasing bug that appeared during
8810         PyCon demo)
8812 2003-03-27  Brian Warner  <warner@lothar.com>
8814         * docs/examples/glib_master.py, README: add sample buildmaster.tap
8815         -making program
8817 2003-03-25  Brian Warner  <warner@lothar.com>
8819         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
8820         to overall build status
8821         * buildbot/clients/base.py (Builder): improve event printing
8822         * buildbot/process/base.py (BasicBuildFactory): use specific steps
8823         instead of generic ShellCommand
8824         (Build): Add .stopBuild, use it when slave is detached
8826         * buildbot/process/step.py (Configure,Test): give the steps their
8827         own names and status strings
8829         * buildbot/status/html.py (StatusResource): add "show" argument,
8830         lets you limit the set of Builders being displayed.
8832 2003-03-20  Brian Warner  <warner@lothar.com>
8834         * buildbot/process/basic.py: removed
8836 2003-03-19  Brian Warner  <warner@lothar.com>
8838         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8839         turn off process-docs by default
8841         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
8842         when displaying build information without anything in allBuilds[]
8844         * buildbot/bot.py (makeApp): really take password from sys.argv
8846 2003-03-18  Brian Warner  <warner@lothar.com>
8848         * buildbot/bot.py (buildApp): take password from sys.argv
8850         * README: replace with more useful text
8852         * setup.py: add a real one
8853         * MANIFEST.in, .cvsignore: more distutils packaging stuff
8854         
8855         * docs/PyCon-2003/: added sources for PyCon paper.
8857         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
8858         now Build objects control the process and Builder only handles
8859         slave stuff and distribution of changes/status. A new BuildFactory
8860         class creates Build objects on demand.
8862         Created ConfigurableBuild which takes a list of steps to run. This
8863         makes it a lot easier to set up a new kind of build and moves us
8864         closer to being able to configure a build from a web page.
8866         * buildbot/process/step_twisted.py, process_twisted.py: move to
8867         new model. A lot of code went away.
8868         
8869         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
8870         send lots of empty progress messages to the client.
8872         * buildbot/master.py (makeApp): enforce builder-name uniqueness
8874 2003-02-20  Brian Warner  <warner@lothar.com>
8876         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
8878         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
8879         Twisted bug that prevented non-pty processes from working just got
8880         fixed, and the bug that leaks ptys is still being investigated.
8882         * buildbot/process/step.py (CVS): send timeout arg to slave
8884         * buildbot/clients/gtkPanes.py: add connection-status row, handle
8885         builders coming and going
8886         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
8887         from CVSToys, handle lost-buildmaster
8889         * buildbot/status/client.py (StatusClientService.removeBuilder):
8890         Clean up status client protocol: send builders (with references)
8891         as they are created, rather than sending a list and requiring the
8892         client to figure out which ones are new.
8893         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
8894         attempts to force a build on an unknown builder
8896 2003-02-19  Brian Warner  <warner@lothar.com>
8898         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
8899         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
8900         Twisted stops leaking them.
8901         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
8902         builder goes to an idle state.
8904         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
8905         I figure out why CVS commands hang without them, and/or I fix the
8906         hung-command timeout
8908 2003-02-16  Brian Warner  <warner@lothar.com>
8910         * buildbot/process/step_twisted.py: bin/hlint went away, replace
8911         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
8912         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
8913         GenerateDocs now that they are prefixed with WARNING:.
8915         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
8916         use manual href target instead of request.childLink
8918         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
8919         display every second, but update the ETA every 5 seconds (or
8920         whenever) as remote_progress messages arrive.
8923 2003-02-12  Brian Warner  <warner@lothar.com>
8925         * *: import current sources from home CVS repository
8926         
8928 # Local Variables:
8929 # add-log-time-format: add-log-iso8601-time-string
8930 # End: