docs: add another index, this one of all master.cfg keys
[buildbot.git] / ChangeLog
blobe4d223a3ff422083f3158c6395a3fdf151454ee4
1 2006-08-10  Brian Warner  <warner@lothar.com>
3         * docs/buildbot.texinfo (Index of master.cfg keys): add another
4         index, this one of things like c['sources'] and c['schedulers']
6         * docs/Makefile (images): make sure images get built when
7         rendering the manual
8         * docs/images/Makefile: same
10         * buildbot/scripts/runner.py: rename 'buildbot master' to
11         'buildbot create-master', and 'buildbot slave' to 'buildbot
12         create-slave'
13         * docs/buildbot.texinfo: same
14         * README: same
16         * docs/buildbot.texinfo: reimplement the "useful classes" index
17         with actual texinfo indices. The .info rendering is a bit
18         weird-looking but it works well, and the HTML rendering is quite
19         nice. This also puts the index targets in the regular flow of the
20         text, which is easier to maintain.
22 2006-08-06  Brian Warner  <warner@lothar.com>
24         * buildbot/slave/commands.py (ShellCommand.__init__): patch from
25         Kevin Turner to prefer the environ= argument be a list rather than
26         a string. If it is a list, it will be joined with a platform-local
27         os.pathsep delimiter, and then prepended to any existing
28         $PYTHONPATH value. This works better in cross-platform (i.e.
29         windows buildslaves) environments when you need to push multiple
30         directories onto the front of the path.
31         (SlaveShellCommand): documented the new magic
32         * docs/buildbot.texinfo (ShellCommand): documented the new magic
33         in a user-visible form
35         * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
36         Turner to prefer lists over strings when creating/running VC
37         commands during unit tests. This is clearly necessary to survive
38         vcexe containing spaces, like "C:\Program Files\darcs.exe". I
39         renamed the wq() function to qw() though, since that's how it's
40         spelled in perl. Eventually I'd prefer all commands to be
41         specified with lists.
43         * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
44         which are deleted (or not yet created) correctly. Also add
45         failsafe code to not explode if the file-watching poller doesn't
46         get started. Thanks to JP Calderone for the catch and the poller
47         patch.
48         * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
49         for that case
50         * buildbot/test/emitlogs.py: same
52         * NEWS: summarize recent changes
54         * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
55         clause to avoid the "host key mismatch" warning
57         * buildbot/process/step_twisted.py (Trial.start): if the
58         buildslave is too old to understand logfiles=, fall back to
59         running 'cat _trial_temp/test.log' like before.
60         (Trial.commandComplete): same. this takes advantage of the
61         LoggingBuildStep refactoring to stall commandComplete long enough
62         to run a second RemoteShellCommand.
64         * buildbot/process/step.py (LoggingBuildStep.startCommand):
65         refactor command-completion handling, to allow methods like
66         commandComplete/createSummary/evaluateCommand to return Deferreds.
67         (LoggingBuildStep._commandComplete): delete the refactored method
68         (ShellCommand.setupLogfiles): if the buildslave is too old to
69         understand logfiles=, put a warning message both into twistd.log
70         and into the otherwise empty user-visible LogFiles.
72         * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
73         callers to provide the slave-side logfile name, rather than
74         forcing it to come from the local name of the LogFile.
75         (BuildStep.getSlaveName): new method
77         * buildbot/process/base.py (Build.getSlaveName): new method, so
78         steps can find out which buildslave they're running on
80         * buildbot/test/test_steps.py (Version.checkCompare): oops, update
81         to match the s/cvs_ver/command_version/ change
83 2006-08-05  Brian Warner  <warner@lothar.com>
85         * buildbot/slave/commands.py (command_version): replace the CVS
86         auto-updated cvs_ver keyword with a manually-updated variable,
87         since CVS is no longer the master repository. Add a description of
88         the remote API change starting in this version (2.1), specifically
89         the fact that SlaveShellCommand now accepts 'initial_stdin',
90         'keep_stdin_open', and 'logfiles'.
92 2006-07-31  Brian Warner  <warner@lothar.com>
94         * docs/buildbot.texinfo (System Architecture): Finally add lots of
95         diagrams to describe how the whole system fits together. The
96         images themselves are kept in SVG files, with ascii-art versions
97         in corresponding .txt files. Texinfo knows how to interpolate the
98         text version into .info files, reference the .png versions from
99         .html files, and include .eps versions in the .ps format.
100         * docs/images/Makefile: tools to create .png and .eps
101         * docs/images/*.svg: created pictures with Inkscape.
102         * .darcs-boring: ignore the generated .eps and .png files
104 2006-07-24  Brian Warner  <warner@lothar.com>
106         * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
107         Scheduler names, since they cause setServiceParent to explode
108         later.
109         * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
111 2006-07-20  Brian Warner  <warner@lothar.com>
113         * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
114         which runs the buildbot unit tests
116         * docs/buildbot.texinfo (Index of Useful Classes): add a table of
117         classes that are useful in master.cfg
119 2006-07-15  Brian Warner  <warner@lothar.com>
121         * Makefile (some-apidocs): new target to build only some epydocs
123         * setup.py: minor comment.. does the classifiers= argument prevent
124         the setup.py script from working on python2.2/2.3?
126         * buildbot/scripts/sample.cfg: update manhole example, arrange into
127         major sections
129         * buildbot/twcompat.py: fix minor typo in comments
131         * buildbot/manhole.py: move all Manhole-related code out to this
132         module. Implement SSH-based manholes (with TwistedConch), and move
133         to conch's nifty line-editing syntax-coloring REPL shell instead
134         of the boring non-editing monochromatic (and deprecated) old
135         'telnet' protocol.
136         * buildbot/master.py: remove all Manhole-related code
137         (BuildMaster.loadConfig._add): make sure the old manhole is
138         removed before we add the new one
139         * docs/buildbot.texinfo (Debug options): document new Manhole options
141         * buildbot/twcompat.py (_which): fix some epydoc issues
142         * buildbot/status/html.py (Waterfall.__init__): same
144 2006-06-29  Brian Warner  <warner@lothar.com>
146         * buildbot/interfaces.py: get Interface from b.twcompat to hush
147         deprecation warnings under newer Twisteds (by using
148         zope.interface.Interface instead of old twisted.python.components
149         stuff)
150         * buildbot/slave/interfaces.py: same
152 2006-06-28  Brian Warner  <warner@lothar.com>
154         * buildbot/slave/commands.py (SVN): add --non-interactive to all
155         svn commands, so it will fail immediately instead of hanging while
156         it waits for a username/password to be typed in.
158         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
159         log message if the step was shut down
161         * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
162         obsolete reference to mktap.
164 2006-06-20  Brian Warner  <warner@lothar.com>
166         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
167         test to include new 'logfiles' argument sent from master to slave
169 2006-06-19  Brian Warner  <warner@lothar.com>
171         * buildbot/process/step_twisted.py (Trial): track Progress from
172         _trial_temp/test.log too
174         * buildbot/process/step.py (OutputProgressObserver): generalize
175         the earlier StdioProgressObserver into an OutputProgressObserver
176         that can track LogFiles other than stdio.
177         (LoggingBuildStep.__init__): same
179         * buildbot/process/step_twisted.py (Trial): use logfiles= to track
180         _trial_temp/test.log, not a separate 'cat' command. TODO: this
181         will fail under windows because of os.sep issues. It might have
182         worked before if 'cat' was doing cygwin path conversion.
184         * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
185         creation of LogFileWatchers
186         (ShellCommand._startCommand): and record the files that were
187         watched in the 'headers' section of the ShellCommand output
189         * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
190         need to actually pass it to the slave if you want it to work.
191         (ShellCommand): document it a bit
193         * buildbot/test/test_shell.py: new test to validate LogFiles
194         * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
195         test LogFiles
196         * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
197         before printing the last batch of lines, to test that the polling
198         logic is working properly
200         * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
201         handling, making it possible to track multiple logs for a single
202         RemoteCommand. The previous single logfile is now known as the
203         'stdio' log.
204         (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
205         (RemoteShellCommand.__init__): accept logfiles=
206         (LoggingBuildStep.startCommand): stdio_log is now one of many
207         (ShellCommand): added logfiles= argument, as well as a class-level
208         .logfiles attribute, which will be merged together to figure out
209         which logfiles should be tracked. The latter maybe be useful for
210         subclasses of ShellCommand which know they will aways produce
211         secondary logfiles in the same location.
213         * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
214         and closeStdin() methods, preparing to make it possible to write
215         to a ShellCommand's stdin at any time, not just at startup. These
216         writes are buffered if the child process hasn't started yet.
217         (LogFileWatcher): new helper class to watch arbitrary logfiles
218         while a ShellCommand runs. This class polls the file every two
219         seconds, and sends back 10k chunks to the buildmaster.
220         (ShellCommand): rename stdin= to initialStdin=, and add
221         keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
222         at startup.
223         (ShellCommand.addLogfile): LogFile text is sent in updates with a
224         key of "log" and a value of (logname, data).
225         (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
226         'logfiles' to the master-visible args dictionary.
227         (SourceBase.doPatch): match s/stdin/initialStdin/ change
228         (CVS.start): same
229         (P4.doVCFull): same
230         * buildbot/test/test_vc.py (Patch.testPatch): same
233         * buildbot/test/emit.py: write to a logfile in the current
234         directory. We use this to figure out what was used as a basedir
235         rather than looking to see which copy of emit.py gets run, so that
236         we can run the commands from inside _trial_temp rather than inside
237         buildbot/test
238         * buildbot/test/subdir/emit.py: same
239         * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
240         argument rather than running from buildbot/test/
241         (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
242         rather than using an implicit setUp()
243         * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
244         (ShellBase.testShell1, etc): use explicit path to emit.py instead
245         of assuming that we're running in buildbot/test/ (and that '.' is
246         on our $PATH)
248         * buildbot/slave/commands.py (Command.doStart): refactor Command
249         startup/completion a bit: now the SlaveBuilder calls doStart(),
250         which is not meant for overridding by subclasses, and doStart()
251         calls start(), which is. Likewise the SlaveBuilder calls
252         doInterrupt(), and subclasses override interrupt(). This also puts
253         responsibility for maintaining .running in Command rather than in
254         SlaveBuilder.
255         (Command.doInterrupt): same
256         (Command.commandComplete): same, this is called when the deferred
257         returned by start() completes.
258         * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
259         (SlaveBuilder.remote_interruptCommand): same
260         (SlaveBuilder.stopCommand): same
262 2006-06-16  Brian Warner  <warner@lothar.com>
264         * buildbot/test/test_shell.py: new test file to contain everything
265         relating to ShellCommand
266         (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
267         multiple logfiles in realtime" feature, not yet implemented
268         * buildbot/test/emitlogs.py: support file for testLogFiles
269         * docs/buildbot.texinfo (ShellCommand): document the feature
271         * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
273         * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
274         for tests which exercise SlaveCommands in isolation.
276         * buildbot/test/test_slavecommand.py: Move some utilities like
277         SignalMixin and FakeSlaveBuilder from here ..
278         * buildbot/test/runutils.py: .. to here, so they can be used by
279         other test classes too
280         * buildbot/test/test_vc.py: more SignalMixin refactoring
281         * buildbot/test/test_control.py: same
282         * buildbot/test/test_run.py: and some rmtree refactoring
284 2006-06-15  Brian Warner  <warner@lothar.com>
286         * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
287         'testBranch' to match other VC tests and have the tests run in
288         roughly increasing order of dependency
290         * buildbot/test/test_steps.py (LogObserver): new test to verify
291         LogObservers can be created at various times and still get
292         connected up properly
294         * buildbot/test/runutils.py (setupBuildStepStatus): utility method
295         to create BuildStepStatus instances that actually work.
297         * buildbot/process/step.py (LogObserver): add outReceived and
298         errReceived base methods, to be overridden
300         * buildbot/status/builder.py (BuildStatus.addStepWithName): change
301         API to take a name instead of a step, reducing the coupling
302         somewhat. This returns the BuildStepStatus object so it can be
303         passed to the new Step, instead of jamming it directly into the
304         Step.
305         * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
306         method
307         * buildbot/process/base.py (Build.setupBuild): use both methods
308         * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
309         process a bit to match
311 2006-06-14  Brian Warner  <warner@lothar.com>
313         * docs/buildbot.texinfo (Adding LogObservers): add some limited
314         docs on writing new LogObserver classes
315         (Writing New Status Plugins): brief docs on how Status Plugins fit
316         together
318         * buildbot/process/step_twisted.py (TrialTestCaseCounter):
319         implement a LogObserver that counts how many unit tests have been
320         run so far
321         (Trial.__init__): wire it in
322         * buildbot/test/test_twisted.py (Counter): unit test for it
324         * buildbot/process/step_twisted.py (HLint.commandComplete): update
325         to new cmd.logs['stdio'] scheme
326         (Trial.commandComplete): same
327         (BuildDebs.commandComplete): same
329         * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
330         LogFiles, instead of just a single one. The old single logfile is
331         now called "stdio". LoggedRemoteCommand no longer creates a
332         LogFile for you (the code to do that was broken anyway). If you
333         don't create a "stdio" LogFile, then stdout/stderr will be
334         discarded.
335         (LogObserver): implement "LogObservers", which a BuildStep can add
336         to parse the output of a command in real-time. The primary use is
337         to provide more useful information to the Progress code, allowing
338         better ETA estimates.
339         (LogLineObserver): utility subclass which feeds complete lines to
340         the parser instead of bytes.
341         (BuildStep.progressMetrics): this is safer as a tuple
342         (BuildStep.setProgress): utility method, meant to be called by
343         LogObservers
344         (BuildStep.addLogObserver): new method, to be called at any time
345         during the BuildStep (even before any LogFiles have been created),
346         to attach (or schedule for eventual attachment) a LogObserver to a
347         LogFile.
348         (StdioProgressObserver): new LogObserver which replaces the old
349         "output" progress gatherer
350         (LoggingBuildStep.__init__): same
351         (LoggingBuildStep.startCommand): set up the "stdio" LogFile
352         (LoggingBuildStep._commandComplete): must use logs['stdio']
353         instead of the old single ".log" attribute.
354         * buildbot/status/builder.py (LogFile): remove old logProgressTo
355         functionality, now subsumed into StdioProgressObserver
356         * buildbot/test/test_status.py (Subscription._testSlave_2): the
357         log name changed from "output" to "stdio".
360         * buildbot/interfaces.py (ILogFile): add the Interface used from
361         the BuildStep towards the LogFile
362         (ILogObserver): and the one provided by a LogObserver
363         * buildbot/status/builder.py (LogFile): implement it
365         * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
366         HEADER constants here ..
367         * buildbot/status/builder.py (STDOUT): .. from here
369 2006-06-13  Brian Warner  <warner@lothar.com>
371         * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
372         compatibility with python2.2, which doesn't have the 'substr in
373         str' feature.
374         (TestP4Poller.makeTime): utility function to construct the
375         timestamp using the same strptime() approach as p4poller does. It
376         turns out that time.mktime() behaves slightly differently under
377         python2.2, probably something to do with the DST flag, and that
378         causes the test to fail under python2.2. (changing the mktime()
379         arguments to have dst=0 instead of -1 caused it to fail under
380         python2.3. Go figure.)
381         (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
383 2006-06-12  Brian Warner  <warner@lothar.com>
385         * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
386         proper Perforce (P4) support. Many many thanks to Scott Lamb for
387         contributing such an excellent patch, including docs and unit
388         tests! This makes it *so* much easier to apply. I had to update
389         test_vc.py to handle some recent refactorings, but everything else
390         applied smoothly. The only remaining thing I'd like to fix would
391         be to remove the hard-wired port 1666 used by p4d, and allow it to
392         claim any unused port. This would allow two copies of the test
393         suite to run on the same host at the same time, as well as
394         allowing the test suite to run while a real (production) p4d was
395         running on the same host. Oh, and maybe we should add a warning to
396         step.P4 that gets emitted if the slave is too old to provide the
397         'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
398         * buildbot/slave/commands.py (P4): same
399         (P4Sync): same, some minor updates
400         * buildbot/changes/p4poller.py: same
401         * docs/buildbot.texinfo: same
402         * buildbot/test/test_p4poller.py: same
403         * buildbot/test/test_vc.py (P4): same
405         * setup.py: add Trove classifiers for PyPI
407 2006-06-08  Brian Warner  <warner@allmydata.com>
409         * buildbot/status/client.py
410         (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
411         changing this from getCurrentBuild() to getCurrentBuilds(). Each
412         build needs to be IRemote'd separately, rather than IRemote'ing
413         the whole list at once. I can't wait until newpb's serialization
414         adapters make this unnecessary.
416 2006-06-06  Brian Warner  <warner@lothar.com>
418         * buildbot/process/step.py (WithProperties): make this inherit
419         from ComparableMixin, so that reloading an unchanged config file
420         doesn't cause us to spuriously reload any Builders which use them.
421         * buildbot/test/test_config.py (ConfigTest.testWithProperties):
422         add a test for it
424 2006-06-03  Brian Warner  <warner@lothar.com>
426         * contrib/windows/{setup.py, buildbot_service.py}: add support for
427         running py2exe on windows, contributed by Mark Hammond. Addresses
428         SF#1401121, but I think we still need to include
429         buildbot/scripts/sample.cfg
430         * setup.py: include buildbot_service.py as a script under windows
431         * buildbot/status/html.py: when sys.frozen (i.e. we're running in
432         a py2exe application), get the icon/css datafiles from a different
433         place than usual.
435         * buildbot/status/mail.py (MailNotifier.buildMessage): don't
436         double-escape the build URL. Thanks to Olivier Bonnet for the
437         patch. Fixes SF#1452801.
439 2006-06-02  Brian Warner  <warner@lothar.com>
441         * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
442         first six columns of 'svnlook' output, not just the first column,
443         since property changes appear in the other five. Thanks to Olivier
444         Bonnet for the patch. Fixes SF#1398174.
446 2006-06-01  Brian Warner  <warner@lothar.com>
448         * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
449         the fake build, so that title= has something to be set to
451         * buildbot/status/html.py (BuildBox.getBox): set the 'title='
452         attribute of the "Build #NN" link in the yellow start-the-build
453         box to the build's reason. This means that you get a little
454         tooltip explaining why the build was done when you hover over the
455         yellow box. Thanks to Zandr Milewski for the suggestion.
457         * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
458         (Box.setETA): handle ETA=None (by stopping the timer)
459         (Box.update): make the [soon] text less different than the usual
460         text, so the rest of the text doesn't flop around so much. It
461         would be awfully nice to figure out how to center this stuff.
462         (ThreeRowBuilder.stepETAUpdate): more debugging printouts
464         * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
465         by default, so that any ShellCommand which fails marks the overall
466         build as a failure. I should have done this from the beginning.
467         Add flunkOnFailure=False to the arguments if you want to turn off
468         this behavior.
470 2006-05-30  Brian Warner  <warner@lothar.com>
472         * buildbot/clients/gtkPanes.py: add a third row: now it shows
473         last-build/current-build/current-step. Show what step is currently
474         running. Show ETA for both the overall build and the current step.
475         Update GTK calls to modern non-deprecated forms. There's still a
476         lot of dead code and debug noise to remove.
478         * buildbot/process/step_twisted.py (Trial): set the step name, so it
479         shows up properly in status displays
481 2006-05-28  Brian Warner  <warner@lothar.com>
483         * buildbot/test/test_properties.py (Run.testInterpolate): on the
484         build we use to verify that WithProperties works:
486         ** set flunkOnFailure=True so that build failures get noticed
487         ** set workdir='.' so that the build succeeds, otherwise it is trying
488             to touch 'build/something', and 'build/' doesn't exist because
489             usually that's created by a Source step
490         ** set timeout=10, because Twisted-1.3.0 has a race condition that
491             this test somehow triggers, in which the 'touch' process becomes
492             a zombie and we wait for th etimeout before giving up on it.
494         * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
495         to log the Build results and step logs to the twisted log.
496         (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
497         what went wrong if a build was expected to succeed but didn't.
499         * buildbot/process/step_twisted.py (Trial): set the default
500         trialMode to '--reporter=bwverbose', which specifies verbose
501         black-and-white text. Back in twisted-1.3/2.0 days we had to use
502         '-to', but those are completely missing in modern Twisteds.
504         * buildbot/scripts/sample.cfg: make the sample Manhole config use
505         a localhost-only port, to encourage better security
507         * docs/buildbot.texinfo (Change Sources): mention
508         darcs_buildbot.py
510         * .darcs-boring: add a Darcs boringfile
512         * README (REQUIREMENTS): stop claiming compatibility with
513         Twisted-1.3.0
515         * contrib/darcs_buildbot.py: write a darcs-commit-hook change
516         sender
518 2006-05-27  Brian Warner  <warner@lothar.com>
520         * buildbot/__init__.py: bump to 0.7.3+ while between releases
521         * docs/buildbot.texinfo: same
523 2006-05-23  Brian Warner  <warner@lothar.com>
525         * buildbot/__init__.py (version): Releasing buildbot-0.7.3
526         * docs/buildbot.texinfo: set version to match
527         * NEWS: update for 0.7.3
529         * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
530         give a quick mapping from VC system to possible ChangeSources
531         (Build Properties): add 'buildername'
533         * buildbot/process/base.py (Build.setupStatus): oops, set
534         'buildername' and 'buildnumber' properties
535         * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
536         test them
538 2006-05-22  Brian Warner  <warner@lothar.com>
540         * docs/buildbot.texinfo (Build Properties): explain the syntax of
541         property interpolation better
543         * README (INSTALLATION): remove old '-v' argument from recommended
544         trial command line
546         * docs/buildbot.texinfo (ShellCommand): add docs for description=
547         and descriptionDone= arguments. Thanks to Niklaus Giger for the
548         patch. SF#1475494.
550         * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
551         'svnversion' instead of grepping the output of 'svn info', much
552         simpler and avoids CR/LF problems on windows. Thanks to Olivier
553         Bonnet for the suggestion.
554         (SVN.parseGotRevision): oops, older verisons of 'svnversion'
555         require the WC_PATH argument, so run 'svnversion .' instead.
557         * buildbot/interfaces.py (IChangeSource): methods in Interfaces
558         aren't supposed to have 'self' in their argument list
560 2006-05-21  Brian Warner  <warner@lothar.com>
562         * buildbot/process/step.py (ShellCommand.start): make
563         testInterpolate pass. I was passing the uninterpolated command to
564         the RemoteShellCommand constructor
565         (ShellCommand._interpolateProperties): oops, handle non-list
566         commands (i.e. strings with multiple words separated by spaces in
567         them) properly, instead of forgetting about them.
569         * buildbot/test/test_properties.py (Run.testInterpolate): new test
570         to actually try to use build properties in a real build. This test
571         fails.
572         * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
573         to start and evaluate builds
575         * buildbot/test/test__versions.py: add a pseudo-test to record
576         what version of Twisted/Python/Buildbot are running. This should
577         show up at the beginning of _trial_tmp/test.log, and exists to help
578         debug other problems.
580         * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
581         a filename to be served as 'robots.txt' to discourage web spiders.
582         Adapted from a patch by Tobi Vollebregt, thanks!
583         * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
584         (Waterfall.test_waterfall): tweak the way that filenames are put
585         into the config file, to accomodate windows pathnames better.
587         * docs/buildbot.texinfo (HTML Waterfall): document it
589         * buildbot/process/process_twisted.py
590         (QuickTwistedBuildFactory.__init__): recent versions of Twisted
591         changed the build process. The new setup.py no longer takes the
592         'all' argument.
593         (FullTwistedBuildFactory.__init__): same
594         (TwistedReactorsBuildFactory.__init__): same
596         * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
597         be placed in the [hooks] section of the central repository (the
598         one that everybody pushes changes to).
600 2006-05-20  Brian Warner  <warner@lothar.com>
602         * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
603         .darcs-context file, use binary mode. I think this was causing a
604         Darcs failure under windows.
606 2006-05-19  Brian Warner  <warner@lothar.com>
608         * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
609         use a timezone string of +0000 and gmtime, since this timestamp is
610         sent to a buildmaster and %z is broken.
612         * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
613         string and localtime, since this timestamp will only be consumed
614         locally, and %z is broken.
616         * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
617         gmtime, since this timestamp is returned to the buildmaster, and
618         %z is broken.
620 2006-05-18  Brian Warner  <warner@lothar.com>
622         * NEWS: update in preparation for next release
624         * buildbot/test/test_vc.py (VCS_Helper): factor out all the
625         setup-repository and do-we-have-the-vc-tools code into a separate
626         "helper" class, which sticks around in a single module-level
627         object. This seems more likely to continue to work in the future
628         than having it hide in the TestCase and hope that TestCases stick
629         around for a long time.
631         * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
632         addremove' has been deprecated in recent versions of mercurial, so
633         use 'hg add' instead
635 2006-05-07  Brian Warner  <warner@lothar.com>
637         * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
638         operating under windows, move the file before opening it, since
639         you can't rename a file that somebody has open.
641         * buildbot/process/base.py (Build.setupBuild): if something goes
642         wrong while creating a Step, log the name and arguments, since the
643         error message when you get the number of arguments wrong is really
644         opaque.
646 2006-05-06  Brian Warner  <warner@lothar.com>
648         * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
649         bugs in twisted-specific code not covered by my unit tests, this
650         time use 'cmd' argument instead of self.cmd
652         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
653         fix stupid braino: either use startwith or find()==0, not both.
654         (TwistedReactorsBuildFactory.__init__): another dumb typo
656         * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): 
657         mark this test as TODO under windows, since process-killing seems
658         dodgy there. We'll come back to this later and try to fix it
659         properly.
661         * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
662         and don't include a timezone
663         (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
664         This should avoid the windows-with-verbose-timezone-name problem
665         altogether.
666         (Patch.testPatch): add a test which runs 'patch' with less
667         overhead than the full VCBase.do_patch sequence, to try to isolate
668         a windows test failure. This one uses slave.commands.ShellCommand
669         and 'patch', but none of the VC code.
671         * buildbot/slave/commands.py (getCommand): use which() to find the
672         executables for 'cvs', 'svn', etc. This ought to help under
673         windows.
675         * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
676         working directory before starting. If an earlier test failed, the
677         leftover directory would mistakenly flunk a later test.
678         (ArchCommon.registerRepository): fix some tla-vs-baz problems.
679         Make sure that we use the right commandlines if which("tla") picks
680         up "tla.exe" (as it does under windows).
681         (TlaSupport.do_get): factor out this tla-vs-baz difference
682         (TlaSupport.vc_create): more tla-vs-baz differences
684         * buildbot/test/test_slavecommand.py
685         (ShellBase.testShellMissingCommand): stop trying to assert
686         anything about the error message: different shells on different
687         OSes with different languages makes it hard, and it really isn't
688         that interesting of a thing to test anyway.
690         * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
691         we detect cvs-1.10 (which is the version shipped with OS-X 10.3
692         "Panther"), because it has a bug which flunks a couple tests in
693         weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
694         is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
695         able to test that yet.
697 2006-04-30  Brian Warner  <warner@lothar.com>
699         * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
700         make sure child commands emit messages in english, so our regexps
701         will match. Thanks to Nikaus Giger for identifying the problems.
702         (VCBase._do_vctest_export_1): mode="export" is not responsible
703         for setting the "got_revision" property, since in many cases it is
704         not convenient to determine.
705         (SVNSupport.capable): when running 'svn --version' to check for
706         ra_local, we want error messages in english
707         * buildbot/test/test_slavecommand.py 
708         (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
709         to emit the error message in english
711         * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
712         the environment with $LC_ALL="C" so that Commands which need to
713         parse the output of their child processes can obtain it in
714         english.
715         (SVN.parseGotRevision): call "svn info" afterwards instead of
716         watching the output of the "svn update" or "svn checkout".
717         (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
718         (Arch.parseGotRevision): same
719         (Bazaar.parseGotRevision): same
720         (Mercurial.parseGotRevision): same
722         * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
723         $LC_ALL="C" when running commands under 'buildbot try', too
725         * buildbot/test/__init__.py: remove the global os.environ()
726         setting, instead we do it just for the tests that run commands and
727         need to parse their output.
729         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
730         remove the overly-short .timeout on this test, because non-DNotify
731         platforms must fall back to polling which happens at 10 second
732         intervals, so a 5 second timeout would never succeed.
734 2006-04-24  Brian Warner  <warner@lothar.com>
736         * docs/buildbot.texinfo (Installing the code): update trial
737         invocation, SF#1469116 by Niklaus Giger.
738         (Attributes of Changes): updated branch-name examples to be
739         a bit more realistic, SF#1475240 by Stephen Davis.
741         * contrib/windows/buildbot2.bat: utility wrapper for windows
742         developers, contributed by Nick Trout (after a year of neglect..
743         sorry!). SF#1194231.
745         * buildbot/test/test_vc.py (*.capable): store the actual VC
746         binary's pathname in VCS[vcname], so it can be retrieved later
747         (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
748         strip out non-numeric timezone information, specifically the funky
749         German string that his system produced that confuses CVS.
750         (DarcsSupport.vc_create): use dovc() instead of vc(), this should
751         allow Darcs tests to work on windows
752         * buildbot/scripts/tryclient.py (SourceStampExtractor): use
753         procutils.which() everywhere, to allow tryclient to work under
754         windows. Also from Niklaus Giger, SF#1463394.
756         * buildbot/twcompat.py (which): move the replacement for a missing
757         twisted.python.procutils.which from test_vc.py to here, so it can
758         be used in other places too (specifically tryclient.py)
760 2006-04-23  Brian Warner  <warner@lothar.com>
762         * buildbot/status/html.py (StatusResourceBuild.body): replace the
763         bare buildbotURL/projectName line with a proper DIV, along with a
764         CSS class of "title", from Stefan Seefeld (SF#1461675).
765         (WaterfallStatusResource.body0): remove the redundant 'table'
766         class from the table
767         (WaterfallStatusResource.body): same. Also add class="LastBuild"
768         to the top-row TR, and class="Activity" to the second-row TR,
769         rather than putting them in the individual TD nodes.
771         * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
772         'got_revision' build property for all VC systems that implement
773         accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
775         * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
776         to determine which revision we actually obtained
777         (CVS.parseGotRevision): implement this for CVS, which just means
778         to grab a timestamp. Not ideal, and it depends upon the buildslave
779         having a clock that is reasonably well syncronized with the server,
780         but it's better than nothing.
781         (SVN.parseGotRevision): implement it for SVN, which is accurate
782         (Darcs.parseGotRevision): same
783         (Arch.parseGotRevision): same
784         (Bazaar.parseGotRevision): same
785         (Mercurial.parseGotRevision): same
787         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
788         keep a record of all non-stdout/stderr/header/rc status updates,
789         for the benefit of RemoteCommands that send other useful things,
790         like got_revision
791         (Source.commandComplete): put any 'got_revision' status values
792         into a build property of the same name
795         * buildbot/process/step_twisted.py (Trial): update to deal with
796         new ShellCommand refactoring
798         * docs/buildbot.texinfo (Build Properties): document new feature
799         that allows BuildSteps to get/set Build-wide properties like which
800         revision was requested and/or checked out.
802         * buildbot/interfaces.py (IBuildStatus.getProperty): new method
803         * buildbot/status/builder.py (BuildStatus.getProperty): implement
804         it. Note that this bumps the persistenceVersion of the saved Build
805         object, so add the necessary upgrade-old-version logic to include
806         an empty properties dict.
808         * buildbot/process/base.py (Build.setProperty): implement it
809         (Build.getProperty): same
810         (Build.startBuild): change build startup to set 'branch',
811         'revision', and 'slavename' properties at the right time
813         * buildbot/process/step.py (BuildStep.__init__): change setup to
814         require 'build' argument in a better way
815         (LoggingBuildStep): split ShellCommand into two pieces, for better
816         subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
817         a single RemoteCommand that sends stdout/stderr status text. It
818         also provides the usual commandComplete / createSummary /
819         evaluateCommand / getText methods to be overridden...
820         (ShellCommand): .. whereas ShellCommand is specifically for
821         running RemoteShellCommands. Other shell-like BuildSteps (like
822         Source) can inherit from LoggingBuildStep instead of ShellCommand
823         (WithProperties): marker class to do build-property interpolation
824         (Source): inherit from LoggingBuildStep instead of ShellCommand
825         (RemoteDummy): same
827         * buildbot/test/test_properties.py: test new functionality
829 2006-04-21  Brian Warner  <warner@lothar.com>
831         * buildbot/test/test_vc.py: rename testBranch to
832         testCheckoutBranch to keep the tests in about the right
833         alphabetical order
835 2006-04-18  Brian Warner  <warner@lothar.com>
837         * docs/buildbot.texinfo (PBListener): improve cross-references
838         between PBListener and 'buildbot statusgui', thanks to John Pye
839         for the suggestion.
841 2006-04-17  Brian Warner  <warner@lothar.com>
843         * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
844         running under Twisted-1.3.0, otherwise skipped tests are reported
845         as errors.
847         * all: use isinstance() instead of 'type(x) is foo', suggested by
848         Neal Norwitz
850         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
851         oops, fix a brain-fade from the other week, when making the
852         addStep changes. I changed all the __init__ upcalls to use the
853         wrong superclass name.
854         (FullTwistedBuildFactory.__init__): same
855         (TwistedDebsBuildFactory.__init__): same
856         (TwistedReactorsBuildFactory.__init__): same
857         (TwistedBuild.isFileImportant): use .startswith for clarity,
858         thanks to Neal Norwitz for the suggestions.
860         * contrib/viewcvspoll.py: script to poll a viewcvs database for
861         changes, then deliver them over PB to a remote buildmaster.
863         * contrib/svnpoller.py: added script by John Pye to poll a remote
864         SVN repository (by running 'svn log') from a cronjob, and run
865         'buildbot sendchange' to deliver the changes to a remote
866         buildmaster.
867         * contrib/svn_watcher.py: added script by Niklaus Giger (a
868         modification of svnpoller.py), same purpose, but this one loops
869         internally (rather than expecting to run from a cronjob) and works
870         under windows.
871         * contrib/README.txt: same
873 2006-04-11  Brian Warner  <warner@lothar.com>
875         * all: fix a number of incorrect names and missing imports, thanks
876         to Anthony Baxter for the patch.
877         * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): 
878         remove unused buggy method.
879         * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
880         comes from shutil, not "shutils"
881         * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
882         (Arch.checkSlaveVersion): same
883         * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
884         some disabled code
885         * buildbot/process/step_twisted2.py: add some missing imports
886         * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
887         this code used to live in twisted.internet.defer
889 2006-04-10  Brian Warner  <warner@lothar.com>
891         * buildbot/process/step.py (Mercurial): add Mercurial support
892         * buildbot/slave/commands.py (Mercurial): same
893         * buildbot/scripts/tryclient.py (MercurialExtractor): same
894         * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
895         not yet tested, but 'try' support *is* covered
896         * docs/buildbot.texinfo (Mercurial): document it
898         * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
899         some debugging messages (turned off)
900         * buildbot/test/test_vc.py: improve debug messages
902 2006-04-07  Brian Warner  <warner@lothar.com>
904         * buildbot/test/test_vc.py (which): define our own which() in case
905         we can't import twisted.python.procutils, because procutils doesn't
906         exist in Twisted-1.3
908         * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
909         of SlaveLocks for performance tests
911         * docs/examples/twisted_master.cfg: update to match current usage
913         * buildbot/changes/p4poller.py (P4Source): add new arguments:
914         password, p4 binary, pollinterval, maximum history to check.
915         Patch from an anonymous sf.net contributor, SF#1219384.
916         * buildbot/process/step.py (P4Sync.__init__): add username,
917         password, and client arguments.
918         * buildbot/slave/commands.py (P4Sync): same
920 2006-04-05  Brian Warner  <warner@lothar.com>
922         * buildbot/process/factory.py (BuildFactory.addStep): new method
923         to add steps to a BuildFactory. Use it instead of f.steps.append,
924         and you can probably avoid using the s() convenience function.
925         Patch from Neal Norwitz, sf.net #1412605.
926         (other): update all factories to use addStep
927         * buildbot/process/process_twisted.py: update all factories to use
928         addStep.
930 2006-04-03  Brian Warner  <warner@lothar.com>
932         * buildbot/test/test_vc.py: modified find-the-VC-command logic to
933         work under windows too. Adapted from a patch by Niklaus Giger,
934         addresses SF#1463399.
936         * buildbot/test/__init__.py: set $LANG to 'C', to insure that
937         spawned commands emit parseable results in english and not some
938         other language. Patch from Niklaus Giger, SF#1463395.
940         * README (INSTALLATION): discourage users from running unit tests on
941         a "network drive", patch from Niklaus Giger, SF#1463394.
943 2006-03-22  Brian Warner  <warner@lothar.com>
945         * contrib/svn_buildbot.py: rearrange, add an easy-to-change
946         function to turn a repository-relative pathname into a (branch,
947         branch-relative-filename) tuple. Change this function to handle
948         the branch naming policy used by your Subversion repository.
949         Thanks to AllMyData.com for sponsoring this work.
951 2006-03-16  Brian Warner  <warner@lothar.com>
953         * buildbot/scripts/sample.cfg: add python-mode declaration for
954         vim. Thanks to John Pye for the patch.
956         * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
957         command line, mention the importance of running 'crontab' as the
958         buildmaster/buildslave user. Thanks to John Pye for the catch.
960 2006-03-13  Brian Warner  <warner@lothar.com>
962         * buildbot/status/words.py (IRC): add an optional password=
963         argument, which will be sent to Nickserv in an IDENTIFY message at
964         login, to claim the nickname. freenode requires this before the
965         bot can sent (or reply to) private messages. Thanks to Clement
966         Stenac for the patch.
967         * docs/buildbot.texinfo (IRC Bot): document it
969         * buildbot/status/builder.py (LogFile.merge): don't write chunks
970         larger than chunkSize. Fixes SF#1349253.
971         * buildbot/test/test_status.py (Log.testLargeSummary): test it
972         (Log.testConsumer): update to match new internal chunking behavior
974 2006-03-12  Brian Warner  <warner@lothar.com>
976         * buildbot/test/test_vc.py: remove the last use of waitForDeferred
978         * buildbot/test/test_maildir.py (MaildirTest): rename the
979         'timeout' method, as it collides with trial's internals
981         * buildbot/scripts/runner.py: add 'buildbot restart' command
982         (stop): don't sys.exit() out of here, otherwise restart can't work
983         * docs/buildbot.texinfo (Shutdown): document it
985         * buildbot/buildset.py (BuildSet.__init__): clean up docstring
986         * buildbot/status/html.py (Waterfall.__init__): same
987         * buildbot/process/builder.py (Builder.startBuild): same
988         * buildbot/process/base.py (BuildRequest): same
989         * buildbot/sourcestamp.py (SourceStamp): same
990         * buildbot/scheduler.py (Nightly): same
992         * buildbot/__init__.py (version): bump to 0.7.2+ while between
993         releases
994         * docs/buildbot.texinfo: same
996 2006-02-17  Brian Warner  <warner@lothar.com>
998         * buildbot/__init__.py (version): Releasing buildbot-0.7.2
999         * docs/buildbot.texinfo: set version number to match
1000         * NEWS: update for 0.7.2
1002 2006-02-16  Brian Warner  <warner@lothar.com>
1004         * docs/buildbot.texinfo (Build Dependencies): add cindex tag
1006 2006-02-09  Brian Warner  <warner@lothar.com>
1008         * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
1009         add text to explain per-build branch parameters
1010         * NEWS: mention --umask
1012 2006-02-08  Brian Warner  <warner@lothar.com>
1014         * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
1015         method
1016         (SlaveOptions.optParameters): add --umask, to make it possible to
1017         make buildslave-generated files (including build products) be
1018         world-readable
1019         (slaveTAC): same
1020         * buildbot/slave/bot.py (BuildSlave.startService): same
1022 2006-01-23  Brian Warner  <warner@lothar.com>
1024         * buildbot/status/builder.py: urllib.quote() all URLs that include
1025         Builder names, so that builders can include characters like '/'
1026         and ' ' without completely breaking the resulting HTML. Thanks to
1027         Kevin Turner for the patch.
1028         * buildbot/status/html.py: same
1029         * buildbot/test/test_web.py (GetURL.testBuild): match changes
1031         * NEWS: update in preparation for upcoming release
1033 2006-01-18  Brian Warner  <warner@lothar.com>
1035         * docs/examples/twisted_master.cfg: update to match the Twisted
1036         buildbot: remove python2.2, switch to exarkun's buildslaves,
1037         disable the .deb builder until we figure out how to build twisted
1038         .debs from SVN, add some ktrace debugging to the OS-X build
1039         process and remove the qt build, remove threadless builders,
1040         change freebsd builder to use landonf's buildslave.
1042 2006-01-12  Brian Warner  <warner@lothar.com>
1044         * buildbot/master.py (Manhole.__init__): let port= be a strports
1045         specification string, but handle a regular int for backwards
1046         compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
1047         used in master.cfg to limit connections to just the local host.
1048         (BuildMaster.loadConfig): same for c['slavePortnum']
1049         * buildbot/scheduler.py (Try_Userpass.__init__): same
1050         * buildbot/status/client.py (PBListener.__init__): same
1051         * buildbot/status/html.py (Waterfall.__init__): same, for both
1052         http_port and distrib_port. Include backwards-compatibility checks
1053         so distrib_port can be a filename string and still mean unix:/foo
1054         * docs/buildbot.texinfo (Setting the slaveport): document it
1055         (Debug options): same
1056         (HTML Waterfall): same
1057         (PBListener): same
1058         (try): same
1059         * buildbot/test/test_config.py (ConfigTest): test it
1061         * buildbot/master.py (BuildMaster.loadConfig): wait for the
1062         slaveport's disownServiceParent deferred to fire before opening
1063         the new one. Fixes an annoying bug in the unit tests.
1065 2006-01-03  Brian Warner  <warner@lothar.com>
1067         * buildbot/master.py (BuildMaster): remove the .schedulers
1068         attribute, replacing it with an allSchedulers() method that looks
1069         for all IService children that implement IScheduler. Having only
1070         one parent/child relationship means fewer opportunities for bugs.
1071         (BuildMaster.allSchedulers): new method
1072         (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
1073         also fix ugly bug that caused any config-file reload to
1074         half-forget about the earlier Schedulers, causing an exception
1075         when a Change arrived and was handed to a half-connected
1076         Scheduler. The exception was in scheduler.py line 54ish:
1077           self.parent.submitBuildSet(bs)
1078           exceptions.AttributeError: 'NoneType' object has no attribute
1079           'submitBuildSet'
1080         (BuildMaster.addChange): update to use allSchedulers()
1082         * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
1083         to work properly with twisted-1.3.0, where you must explicitly
1084         include the __implements__ from parent classes
1085         (BaseScheduler.__repr__): make it easier to distinguish distinct
1086         instances
1087         (BaseUpstreamScheduler.__implements__): same
1089         * buildbot/status/builder.py (Status.getSchedulers): update to
1090         use allSchedulers()
1091         * buildbot/test/test_run.py (Run.testMaster): same
1092         * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
1093         * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
1094         make sure Scheduler instances are left alone when an identical
1095         config file is reloaded
1096         (ConfigElements.testSchedulers): make sure Schedulers are properly
1097         comparable
1099         * Makefile (TRIALARGS): my local default Twisted version is now
1100         2.1.0, update the trial arguments accordingly
1102 2005-12-22  Brian Warner  <warner@lothar.com>
1104         * docs/examples/twisted_master.cfg: merge changes from pyr: add
1105         new win32 builders
1107         * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
1108         addChange in the parent class, although I suspect this should be
1109         fixed better in the future.
1111 2005-11-26  Brian Warner  <warner@lothar.com>
1113         * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
1114         explode when branch==None, thanks to Kevin Turner for the catch
1115         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
1116         it
1118         * buildbot/__init__.py (version): bump to 0.7.1+ while between
1119         releases
1120         * docs/buildbot.texinfo: same
1122 2005-11-26  Brian Warner  <warner@lothar.com>
1124         * buildbot/__init__.py (version): Releasing buildbot-0.7.1
1125         * docs/buildbot.texinfo: set version number to match
1127 2005-11-26  Brian Warner  <warner@lothar.com>
1129         * NEWS: update for 0.7.1
1131         * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1132         sure that unsubscribe works even if we never sent an ETA update.
1133         Also, don't explode on duplicate unsubscribe.
1134         (BuildStepStatus.addLog): make the convenience "return self"-added
1135         watcher automatically unsubscribe when the Step finishes.
1136         (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1137         (BuildStatus.stepStarted): same auto-unsubscribe
1138         (BuilderStatus.buildStarted): same auto-unsubscribe
1140         * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1141         auto-unsubscribe
1142         (IStatusReceiver.stepStarted): same
1143         (IStatusReceiver.logStarted): same
1145         * buildbot/test/test_run.py (Status): move the Status test..
1146         * buildbot/test/test_status.py (Subscription): .. to here
1148 2005-11-25  Brian Warner  <warner@lothar.com>
1150         * NEWS: more updates
1152         * buildbot/locks.py: fix the problem in which loading a master.cfg
1153         file that changes some Builders (but not all of them) can result
1154         in having multiple copies of the same Lock. Now, the real Locks
1155         are kept in a table inside the BotMaster, and the Builders/Steps
1156         use "LockIDs", which are still instances of MasterLock and
1157         SlaveLock. The real Locks are instances of the new RealMasterLock
1158         and RealSlaveLock classes.
1159         * buildbot/master.py (BotMaster.getLockByID): new method to
1160         convert LockIDs into real Locks.
1161         * buildbot/process/base.py (Build.startBuild): convert LockIDs
1162         into real Locks before building
1163         * buildbot/process/step.py (BuildStep.startStep): same
1164         * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1165         exercises the problem
1168         * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1169         what Schedulers are available
1171         * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1172         work by Dobes Vandermeer and hacked mercilessly by me. This offers
1173         'cron'-style build scheduling at certain times of day, week,
1174         month, or year.
1175         * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1177         * buildbot/scheduler.py (Scheduler): change fileIsImportant
1178         handling: treat self.fileIsImportant more as an attribute that
1179         contains a callable than as a method. If the attribute is None,
1180         don't call it and assume all filenames are important. It is still
1181         possible to provide a fileIsImportant method in a subclass,
1182         however.
1183         (AnyBranchScheduler): handle fileIsImportant=None, previously it
1184         was broken
1185         * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1186         test using AnyBranchScheduler with fileIsImportant=None
1188 2005-11-24  Brian Warner  <warner@lothar.com>
1190         * buildbot/test/test_config.py (StartService): don't claim a fixed
1191         port number, instead set slavePort=0 on the first pass, figure out
1192         what port was allocated, then switch to a config file that uses
1193         the allocated port.
1195         * buildbot/master.py (BuildMaster.loadConfig): close the old
1196         slaveport before opening the new one, because unit tests might
1197         replace slavePort=0 with the same allocated portnumber, and if we
1198         don't wait for the old port to close first, we get a "port already
1199         in use" error. There is a tiny race condition here, but the only
1200         threat is from other programs that bind (statically) to the same
1201         port number we happened to be allocated, and only if those
1202         programs use SO_REUSEADDR, and only if they get control in between
1203         reactor turns.
1205         * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
1207         * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
1208         deleted ChangeSources before adding any new ones
1209         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
1210         compare_attrs, to make sure that a config-file reload does not
1211         unnecessarily replace an unmodified ChangeSource instance
1212         * buildbot/test/test_config.py (ConfigTest.testSources): update
1214         * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
1215         mean "don't build anything", and add a warning if it gets used
1216         because it isn't actually useful.
1218         * contrib/svn_buildbot.py: update example usage to match the port
1219         number that gets used by the PBChangeSource
1220         * buildbot/scripts/sample.cfg: add example of PBChangeSource
1222 2005-11-22  Brian Warner  <warner@lothar.com>
1224         * NEWS: start collecting items for next release
1226         * buildbot/process/step.py (SVN.computeSourceRevision): assume
1227         revisions are strings
1228         (P4Sync.computeSourceRevision): same
1230         * buildbot/status/html.py (StatusResourceBuild.body): add a link
1231         to the Buildbot's overall status page
1232         (StatusResourceBuilder.body): same
1234 2005-11-15  Brian Warner  <warner@lothar.com>
1236         * buildbot/master.py (BuildMaster.loadConfig): serialize the
1237         config-file loading, specifically to make sure old StatusTargets
1238         are finished shutting down before new ones start up (thus
1239         resolving a bug in which changing the Waterfall object would fail
1240         because both new and old instances were claiming the same
1241         listening port). Also load new Schedulers after all the new
1242         Builders are set up, in case they fire off a new build right away.
1243         * buildbot/test/test_config.py (StartService): test it
1245         * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
1246         the branch name to the mail body
1248         * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
1249         Without it, a config-file reload fails to update an existing
1250         PBChangeSource.
1251         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
1252         username/passwd to compare_attrs, for the same reason
1253         * buildbot/status/html.py (Waterfall): add favicon to
1254         compare_attrs, same reason
1256 2005-11-05  Brian Warner  <warner@lothar.com>
1258         * buildbot/scripts/tryclient.py (createJobfile): stringify the
1259         baserev before stuffing it in the jobfile. This resolves problems
1260         under SVN (and probably Arch) where revisions are expressed as
1261         numbers. I'm inclined to use string-based revisions everywhere in
1262         the future, but this fix should be safe for now. Thanks to Steven
1263         Walter for the patch.
1265         * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
1266         binary mode when opening pickle files, to make windows work
1267         better. Thanks to Dobes Vandermeer for the catch.
1268         * buildbot/status/builder.py (BuildStatus.saveYourself): same
1269         (BuilderStatus.getBuildByNumber): same
1270         (Status.builderAdded): same
1271         * buildbot/master.py (BuildMaster.loadChanges): same
1273         * buildbot/util.py (Swappable): delete unused leftover code
1275         * buildbot/process/step.py (SVN): when building on a non-default
1276         branch, add the word "[branch]" to the VC step's description, so
1277         it is obvious that we're not building the usual stuff. Likewise,
1278         when we are building a specific revision, add the text "rNNN" to
1279         indicate what that revision number is. Thanks to Brad Hards and
1280         Nathaniel Smith for the suggestion.
1281         (Darcs.startVC): same
1282         (Arch.startVC): same
1283         (Bazaar.startVC): same
1285         * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
1286         typo, caught by Mark Dillavou, closes SF#1216636.
1288         * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
1289         about a test to add some day
1291         * docs/examples/twisted_master.cfg: update: bot1 can now handle
1292         the 'full-2.3' build, and the 'reactors' build is now run under
1293         python-2.4 because the buildslave no longer has gtk/etc bindings
1294         for earlier versions.
1296 2005-11-03  Brian Warner  <warner@lothar.com>
1298         * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
1299         method, takes an IBuildStatus and rebuilds it. It might make more
1300         sense to add this to IBuildControl instead, but that instance goes
1301         away completely once the build has finished, and resubmitting
1302         builds can take place weeks later.
1303         * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1304         * buildbot/status/html.py (StatusResourceBuild): also stash an
1305         IBuilderControl so we can use resubmitBuild.
1306         (StatusResourceBuild.body): render "resubmit" button if we can.
1307         Also add hrefs for each BuildStep
1308         (StatusResourceBuild.rebuild): add action for "resubmit" button
1309         (StatusResourceBuilder.getChild): give it an IBuilderControl
1311         * buildbot/status/builder.py (Status.getURLForThing): change the
1312         URL for BuildSteps to have a "step-" prefix, so the magic URLs
1313         that live as targets of buttons like "stop" and "rebuild" can't
1314         collide with them.
1315         * buildbot/status/builder.py (Status.getURLForThing): same
1316         * buildbot/status/html.py (StatusResourceBuild.getChild): same
1317         (StepBox.getBox): same
1318         * buildbot/test/test_web.py (GetURL): same
1319         (Logfile): same
1321         * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1322         exclusivity checks after Source.__init__ upcall, so misspelled
1323         arguments will be reported more usefully
1324         (Darcs.__init__): same
1326 2005-10-29  Brian Warner  <warner@lothar.com>
1328         * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1329         builder. Move the Try scheduler off to a separate port.
1331 2005-10-27  Brian Warner  <warner@lothar.com>
1333         * buildbot/clients/gtkPanes.py
1334         (TwoRowClient.remote_builderRemoved): disappearing Builders used
1335         to cause the app to crash, now they don't.
1337         * buildbot/clients/debug.py: display the buildmaster's location
1338         in the window's title bar
1340 2005-10-26  Brian Warner  <warner@lothar.com>
1342         * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
1343         in case they have spaces or whatnot. Patch from Dobes Vandermeer.
1344         * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
1346         * buildbot/status/html.py (td): put a single non-breaking space
1347         inside otherwise empty <td> elements, as a workaround for buggy
1348         browsers which would optimize them away (along with any associated
1349         styles, like the kind that create the waterfall grid borders).
1350         Patch from Frerich Raabe.
1352         * buildbot/process/step_twisted.py (Trial): expose the trialMode=
1353         argv-list as an argument, defaulting to ["-to"], which is
1354         appropriate for the Trial that comes with Twisted-2.1.0 and
1355         earlier. The Trial in current Twisted SVN wants
1356         ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1357         defaults to an empty list.
1358         * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1359         match it, now that trialMode= is a list instead of a single string
1361         * buildbot/__init__.py (version): bump to 0.7.0+ while between
1362         releases
1363         * docs/buildbot.texinfo: same
1365 2005-10-24  Brian Warner  <warner@lothar.com>
1367         * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1368         * docs/buildbot.texinfo: set version number to match
1370 2005-10-24  Brian Warner  <warner@lothar.com>
1372         * README: update for 0.7.0
1373         * NEWS: same
1374         * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1376         * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1377         * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1378         send the branch= argument unless the user really provided one, to
1379         retain compatibility with older buildmasters that don't accept
1380         that argument.
1381         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1382         same
1384         * docs/buildbot.texinfo: update lots of stuff
1386         * buildbot/scripts/runner.py (sendchange): add a --branch argument
1387         to the 'buildbot sendchange' command
1388         * buildbot/clients/sendchange.py (Sender.send): same
1389         * buildbot/changes/pb.py (ChangePerspective): same
1390         * buildbot/test/test_changes.py (Sender.testSender): test it
1392         * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1393         'default_branch' argument names to 'baseURL' and 'defaultBranch',
1394         for consistency with other BuildStep arguments that use camelCase.
1395         Well, at least more of them use camelCase (like flunkOnWarnings)
1396         than don't.. I wish I'd picked one style and stuck with it
1397         earlier. Annoying, but it's best done before the release, since
1398         these arguments didn't exist at all in 0.6.6 .
1399         (Darcs): same
1400         * buildbot/test/test_vc.py (SVN.testCheckout): same
1401         (Darcs.testPatch): same
1402         * docs/buildbot.texinfo (SVN): document the change
1403         (Darcs): same, add some build-on-branch docs
1404         * docs/examples/twisted_master.cfg: match change
1406         * buildbot/process/step.py (BuildStep): rename
1407         slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1408         how it is normally used.
1409         * buildbot/test/test_steps.py (Version.checkCompare): same
1411         * buildbot/process/step.py (CVS.startVC): refuse to build
1412         update/copy -style builds on a non-default branch with an old
1413         buildslave (<=0.6.6) that doesn't know how to do it properly. The
1414         concern is that it will do a VC 'update' in an existing tree when
1415         it is supposed to be switching branches (and therefore clobbering
1416         the tree to do a full checkout), thus building the wrong source.
1417         This used to be a warning, but I think the confusion it is likely
1418         to cause warrants making it an error.
1419         (SVN.startVC): same, also make mode=export on old slaves an error
1420         (Darcs.startVC): same
1421         (Git.startVC): improve error message for non-Git-enabled slaves
1422         (Arch.checkSlaveVersion): same. continue to emit a warning when a
1423         specific revision is built on a slave that doesn't pay attention
1424         to args['revision'], because for slowly-changing trees it will
1425         probably do the right thing, and because we have no way to tell
1426         whether we're asking it to build the most recent version or not.
1427         * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1429         * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1430         that 'master' is in host:portnum format, to catch errors sooner
1432 2005-10-23  Brian Warner  <warner@lothar.com>
1434         * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1435         when creating the list of warning messages, include the line
1436         immediately after each WARNING: line, since that's usually where
1437         the file and line number wind up.
1439         * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1440         TryScheduler
1442         * NEWS: update
1444 2005-10-22  Brian Warner  <warner@lothar.com>
1446         * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1447         patch from Brad Hards
1448         * buildbot/status/classic.css: same
1449         * buildbot/test/test_web.py (Waterfall): match changes
1451         * buildbot/test/test_steps.py (BuildStep.setUp): set
1452         nextBuildNumber so the test passes
1453         * buildbot/test/test_status.py (MyBuilder): same
1455         * buildbot/status/html.py (StatusResourceBuild.body): revision
1456         might be numeric, so stringify it before html-escapifying it
1457         (CurrentBox.getBox): add a "waiting" state, and show a countdown
1458         timer for the upcoming build
1459         * buildbot/status/classic.css: add background-color attributes for
1460         offline/waiting/building classes
1462         * buildbot/status/builder.py (BuildStatus): derive from
1463         styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1464         the default (i.e. unknown) .slavename to "???" instead of None,
1465         since even unknown slavenames need to be printed eventually.
1466         (BuilderStatus): also derive from styles.Versioned . More
1467         importantly, determine .nextBuildNumber at creation/unpickling
1468         time by scanning the directory of saved BuildStatus instances and
1469         choosing one larger than the highest-numbered one found. This
1470         should fix the problem where random errors during upgrades cause
1471         the buildbot to forget about earlier builds. .nextBuildNumber is
1472         no longer stored in the pickle.
1473         (Status.builderAdded): if we can't unpickle the BuilderStatus,
1474         at least log the error. Also call Builder.determineNextBuildNumber
1475         once the basedir is set.
1477         * buildbot/master.py (BuildMaster.loadChanges): do
1478         styles.doUpgrade afterwards, in case I decide to make Changes
1479         derived from styles.Versioned some day and forget to make this
1480         change later.
1483         * buildbot/test/test_runner.py (Options.testForceOptions): skip
1484         when running under older pythons (<2.3) in which the shlex module
1485         doesn't have a 'split' function.
1487         * buildbot/process/step.py (ShellCommand.start): make
1488         errorMessages= be a list of strings to stuff in the log before the
1489         command actually starts. This makes it easier to flag multiple
1490         warning messages, e.g. when the Source steps have to deal with an
1491         old buildslave.
1492         (CVS.startVC): handle slaves that don't handle multiple branches
1493         by switching into 'clobber' mode
1494         (SVN.startVC): same. Also reject branches without base_url
1495         (Darcs.startVC): same. Also reject revision= in older slaves
1496         (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1497         (Bazaar.startVC): same, and test for baz separately than for arch
1499         * buildbot/slave/commands.py (cvs_ver): document new features
1501         * buildbot/process/step.py (BuildStep.slaveVersion): document it
1502         (BuildStep.slaveVersionNewEnough): more useful utility method
1503         * buildbot/test/test_steps.py (Version): start testing it
1505         * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1506         the 'force' command requires python2.3, for the shlex.split method
1508         * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1509         since we don't use it anymore. The Twisted buildbot uses a
1510         PBChangeSource now.
1512 2005-10-21  Brian Warner  <warner@lothar.com>
1514         * buildbot/process/process_twisted.py: rework all BuildFactory
1515         classes to take a 'source' step as an argument, instead of
1516         building up the SVN instance in the factory.
1517         * docs/examples/twisted_master.cfg: enable build-on-branch by
1518         providing a base_url and default_branch
1520         * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1521         control over --branch and --revision, not that they are always
1522         legal to provide
1523         * buildbot/status/html.py (StatusResourceBuilder.force): same
1524         (StatusResourceBuild.body): display SourceStamp components
1526         * buildbot/scripts/runner.py (ForceOptions): option parser for the
1527         IRC 'force' command, so it can be shared with an eventual
1528         command-line-tool 'buildbot force' mode.
1529         * buildbot/test/test_runner.py (Options.testForceOptions): test it
1531 2005-10-20  Brian Warner  <warner@lothar.com>
1533         * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1535         * docs/examples/twisted_master.cfg: update to use Schedulers
1537         * buildbot/scripts/sample.cfg: update with Schedulers
1539         * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1540         method specifically for use by HTML "force build" button and the
1541         IRC "force" command. Raises an immediate error if there are no
1542         slaves available.
1543         (IBuilderControl.requestBuild): make this just submit a build, not
1544         try to check for existing slaves or set up any when-finished
1545         Deferreds or anything.
1546         * buildbot/process/builder.py (BuilderControl): same
1547         * buildbot/status/html.py (StatusResourceBuilder.force): same
1548         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1549         * buildbot/test/test_slaves.py: same
1550         * buildbot/test/test_web.py: same
1552 2005-10-19  Brian Warner  <warner@lothar.com>
1554         * docs/examples/twisted_master.cfg: re-sync with reality: bring
1555         back python2.2 tests, turn off OS-X threadedselect-reactor tests
1557 2005-10-18  Brian Warner  <warner@lothar.com>
1559         * buildbot/status/html.py: provide 'status' argument to most
1560         StatusResourceFOO objects
1561         (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1562         and Logfiles" section to make the Build page into a more-or-less
1563         comprehensive source of status information about the build
1565         * buildbot/status/mail.py (MailNotifier): include the Build's URL
1566         * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1568 2005-10-17  Brian Warner  <warner@lothar.com>
1570         * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1571         arguments to accomodate Twisted >=2.1.0 . I will have to figure
1572         out what to do about other projects: the correct options for
1573         recent Twisteds will not work for older ones.
1575 2005-10-15  Brian Warner  <warner@lothar.com>
1577         * buildbot/status/builder.py (Status.getURLForThing): add method
1578         to provide a URL for arbitrary IStatusFoo objects. The idea is to
1579         use this in email/IRC status clients to make them more useful, by
1580         providing the end user with hints on where to learn more about the
1581         object being reported on.
1582         * buildbot/test/test_web.py (GetURL): tests for it
1584 2005-10-14  Brian Warner  <warner@lothar.com>
1586         * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1587         fix bug resulting from deferredResult changes
1589 2005-10-13  Brian Warner  <warner@lothar.com>
1591         * buildbot/test/test_changes.py: remove use of deferredResult
1592         * buildbot/test/test_config.py: same
1593         * buildbot/test/test_control.py: same
1594         * buildbot/test/test_status.py: same
1595         * buildbot/test/test_vc.py: this is the only remaining use, since
1596         it gets used at module level. This needs to be replaced by some
1597         sort of class-level run-once routine.
1599         * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1601         * lots: implement multiple slaves per Builder, which means multiple
1602         current builds per Builder. Some highlights:
1603         * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1604         of (state,currentBuilds) instead of (state,currentBuild)
1605         (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1606         (IBuildStatus.getSlavename): new method, so you can tell which
1607         slave got used. This only gets set when the build completes.
1608         (IBuildRequestStatus.getBuilds): new method
1610         * buildbot/process/builder.py (SlaveBuilder): add a .state
1611         attribute to track things like ATTACHING and IDLE and BUILDING,
1612         instead of..
1613         (Builder): .. the .slaves attribute here, which has been turned
1614         into a simple list of available slaves. Added a separate
1615         attaching_slaves list to track ones that are not yet ready for
1616         builds.
1617         (Builder.fireTestEvent): put off the test-event callback for a
1618         reactor turn, to make tests a bit more consistent.
1619         (Ping): cleaned up the slaveping a bit, now it disconnects if the
1620         ping fails due to an exception. This needs work, I'm worried that
1621         a code error could lead to a constantly re-connecting slave.
1622         Especially since I'm trying to move to a distinct remote_ping
1623         method, separate from the remote_print that we currently use.
1624         (BuilderControl.requestBuild): return a convenience Deferred that
1625         provides an IBuildStatus when the build finishes.
1626         (BuilderControl.ping): ping all connected slaves, only return True
1627         if they all respond.
1629         * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1630         reconnect when we shut down.
1632         * buildbot/status/builder.py: implement new methods, convert
1633         one-build-at-a-time methods to handle multiple builds
1634         * buildbot/status/*.py: do the same in all default status targets
1635         * buildbot/status/html.py: report the build's slavename in the
1636         per-Build page, report all buildslaves on the per-Builder page
1638         * buildbot/test/test_run.py: update/create tests
1639         * buildbot/test/test_slaves.py: same
1640         * buildbot/test/test_scheduler.py: remove stale test
1642         * docs/buildbot.texinfo: document the new builder-specification
1643         'slavenames' parameter
1645 2005-10-12  Brian Warner  <warner@lothar.com>
1647         * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1648         report failure correctly, causing Dependent builds to run when
1649         they shouldn't have.
1650         * buildbot/status/builder.py (BuildSetStatus): same
1651         * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1652         (Set.testSuccess): test the both-pass case too
1653         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1654         fix this test: it was ending too early, masking the failure before
1655         (Logger): specialized StatusReceiver to make sure the dependent
1656         builds aren't even started, much less completed.
1658 2005-10-07  Brian Warner  <warner@lothar.com>
1660         * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1661         bot.SlaveBuilder being disowned in the middle of a build
1663         * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1664         this inherit from StatusReceiver. Also upcall in __init__. This
1665         fixes the embarrasing crash when the new buildSetSubmitted method
1666         is invoked and Waterfall/etc don't implement their own.
1667         * buildbot/test/test_run.py: add a TODO note about a test to catch
1668         just this sort of thing.
1670         * buildbot/process/builder.py (Builder.attached): remove the
1671         already-attached warning, this situation is normal. Add some
1672         comments explaining it.
1674 2005-10-02  Brian Warner  <warner@lothar.com>
1676         * buildbot/changes/maildir.py (Maildir.start): Tolerate
1677         OverflowError when setting up dnotify, because some 64-bit systems
1678         have problems with signed-vs-unsigned constants and trip up on the
1679         DN_MULTISHOT flag. Patch from Brad Hards.
1681 2005-09-06  Fred Drake  <fdrake@users.sourceforge.net>
1683         * buildbot/process/step.py (BuildStep, ShellCommand): Add
1684         progressMetrics, description, descriptionDone to the 'parms' list,
1685         and make use the 'parms' list from the implementation class
1686         instead of only BuildStep to initialize the parameters.  This
1687         allows buildbot.process.factory.s() to initialize all the parms,
1688         not just those defined in directly by BuildStep.
1690 2005-09-03  Brian Warner  <warner@lothar.com>
1692         * NEWS: start adding items for the next release
1694         * docs/examples/twisted_master.cfg: (sync with reality) turn off
1695         python2.2 tests, change 'Quick' builder to only use python2.3
1697 2005-09-02  Fred Drake  <fdrake@users.sourceforge.net>
1699         * buildbot/status/html.py (StatusResourceBuilder.body): only show
1700         the "Ping Builder" button if the build control is available; the
1701         user sees an exception otherwise
1703         * docs/buildbot.texinfo (PBChangeSource): fix a typo
1705 2005-09-01  Brian Warner  <warner@lothar.com>
1707         * buildbot/interfaces.py (IBuilderStatus.getState): update
1708         signature, point out that 'build' can be None
1709         (IBuildStatus.getETA): point out ETA can be none
1711         * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1712         being None
1713         * buildbot/status/words.py (IrcStatusBot.emit_status): same
1715 2005-08-31  Brian Warner  <warner@lothar.com>
1717         * buildbot/status/base.py (StatusReceiver.builderChangedState):
1718         update to match correct signature: removed 'eta' argument
1719         * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1721 2005-08-30  Brian Warner  <warner@lothar.com>
1723         * buildbot/status/builder.py (LogFile): remove the assertion that
1724         blows up when you try to overwrite an existing logfile, instead
1725         just emit a warning. This case gets hit when the buildmaster is
1726         killed and doesn't get a chance to write out the serialized
1727         BuilderStatus object, so the .nextBuildNumber attribute gets out
1728         of date.
1730         * buildbot/scripts/runner.py (sendchange): add --revision_file to
1731         the 'buildbot sendchange' arguments, for the Darcs context file
1732         * docs/buildbot.texinfo (sendchange): document it
1734         * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1735         * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1736         (IStatus.getSchedulers): new method
1737         * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1738         (Status.getSchedulers): implement
1739         * buildbot/process/builder.py (Builder): maintain
1740         BuilderStatus.pendingBuilds
1741         * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1742         (TryBase.addChange): Try schedulers should ignore Changes
1744         * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1745         for 'try' on CVS/SVN
1746         * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1748         * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1749         report status properly.
1750         (Try.createJob): implement unique buildset IDs
1752         * buildbot/status/client.py (StatusClientPerspective): add a
1753         perspective_getBuildSets method for the benefit of jobdir-style
1754         'try'.
1755         * docs/buildbot.texinfo (try): more docs
1756         * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1757         new test case
1759 2005-08-18  Brian Warner  <warner@lothar.com>
1761         * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1762         actually work. It's functional but still kind of clunky. Also, it
1763         only works with the pb-style.. needs to be made to work with the
1764         jobdir-style too.
1766         * buildbot/status/client.py (RemoteBuildSet): new class
1767         (RemoteBuildRequest): same
1768         (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1769         object, not the internal BuildStatus object.
1770         (RemoteBuild.remote_subscribe): new method to subscribe to builds
1771         outside of the usual buildStarted() return value.
1772         (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1774         * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1775         (Try_Userpass_Perspective.perspective_try): return a remotely
1776         usable BuildSetStatus object
1778         * buildbot/interfaces.py (IBuildStatus): remove obsolete
1779         isStarted()/waitUntilStarted()
1781 2005-08-16  Brian Warner  <warner@lothar.com>
1783         * buildbot/status/builder.py: implement IBuildSetStatus and
1784         IBuildRequestStatus, wire them into place.
1785         * buildbot/buildset.py: same. Add ID, move wait-until-finished
1786         methods into the BuildSetStatus object.
1787         * buildbot/interfaces.py: same
1788         (IStatus.getBuildSets): new method to get pending BuildSets
1789         (IStatusReceiver.buildsetSubmitted): new method which hears about
1790         new BuildSets
1791         * buildbot/master.py (BuildMaster.submitBuildSet): same
1792         * buildbot/process/base.py (BuildRequest): same, replace
1793         waitUntilStarted with subscribe/unsubscribe
1794         * buildbot/process/builder.py (BuilderControl.forceBuild): use
1795         subscribe instead of waitUntilStarted
1796         * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1797         for new method
1798         * buildbot/status/client.py (StatusClientPerspective.builderRemoved): 
1799         same
1800         * buildbot/test/test_buildreq.py: update for new code
1801         * buildbot/test/test_control.py (Force.testRequest): same
1804         * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1805         for Darcs to not use the tempfile module, so it works under
1806         python-2.2 too. We really didn't need the full cleverness of that
1807         module, since the slave has exclusive control of its own builddir.
1809 2005-08-15  Brian Warner  <warner@lothar.com>
1811         * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1812         for CVS trees. It doesn't work for non-trunk branches,
1813         unfortunately.
1814         * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1815         branch test
1817         * Makefile: make it easier to test against python2.2
1819         * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1820         tearDown2, so things like Arch can unregister archives as they're
1821         shutting down. The previous subclass-override-tearDown technique
1822         resulted in a nested maybeWait() and test failures under
1823         Twisted-1.3.0
1825         * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1826         where we can (Arch), add a branch= argument to set the branch used
1827         when we can't
1828         (BazExtractor): extract the branch too
1829         (TlaExtractor): same
1830         * buildbot/scripts/runner.py (TryOptions): add --branch
1831         * docs/buildbot.texinfo (try): document --branch/try_branch
1833         * buildbot/slave/commands.py (Darcs): implement get-revision for
1834         Darcs, so that 'try' will work. This requires the tempfile module
1835         from python-2.3 .
1837         * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1838         of revisions, branches, and 'try' in the process.
1840 2005-08-11  Brian Warner  <warner@lothar.com>
1842         * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1843         this, it got broken at some point in the last few releases
1844         * buildbot/status/words.py (IrcBuildRequest): reply was broken
1845         (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1846         specifically the removal of ETA information from the tuple
1848         * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1849         warning message
1851         * docs/buildbot.texinfo (try): document both --builder and
1852         'try_builders' in .buildbot/options
1853         * buildbot/scripts/runner.py (TryOptions): add --builder,
1854         accumulate the values into opts['builders']
1855         * buildbot/scripts/tryclient.py (Try.__init__): set builders
1856         * buildbot/test/test_runner.py (Try): add some quick tests to make
1857         sure 'buildbot try --options' and .buildbot/options get parsed
1858         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1859         use --builder control
1861         * docs/buildbot.texinfo (try): add --port argument to PB style
1863         * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1864         actual SourceStamp. Still need to extract a branch name, somehow.
1865         (Try): finish implementing the try client side, still need a UI
1866         for specifying which builders to use
1867         (Try.getopt): factor our options/config-file reading
1868         * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1869         test it
1870         * buildbot/test/test_vc.py: match SourceStampExtractor change
1872         * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1873         causes the twisted log to be sent to stderr
1875         * buildbot/scheduler.py (Try_Userpass): implement the PB style
1877 2005-08-10  Brian Warner  <warner@lothar.com>
1879         * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1880         style is 90% done, still missing status reporting or waiting for
1881         the buildsets to finish, and it is completely untested.
1883         * buildbot/trybuild.py: delete file, move contents to ..
1884         * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1885         * buildbot/test/test_vc.py: match the move
1887         * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1888         of the TryScheduler, no buildsetID or status-tracking support yet
1889         * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1891         * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1892         possible to set the basedir after __init__ time, so it is easier
1893         to use as a Service-child of the BuildMaster instance
1895         * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1896         that delivers messages to its Service parent instead of requiring
1897         a subclass to be useful. This turns out to be much easier to build
1898         unit tests around.
1900         * buildbot/scripts/tryclient.py (createJob): utility code to
1901         create jobfiles, will eventually be used by 'buildbot try'
1903 2005-08-08  Brian Warner  <warner@lothar.com>
1905         * docs/buildbot.texinfo (try): add docs on the
1906         as-yet-unimplemented Try scheduler
1908         * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1909         * buildbot/test/test_scheduler.py: .. here
1910         (Scheduling.testTryJobdir): add placeholder test for 'try'
1912         * buildbot/test/test_status.py (Log.testMerge3): update to match new
1913         addEntry merging (>=chunkSize) behavior
1914         (Log.testConsumer): update to handle new callLater(0) behavior
1916         * buildbot/test/test_web.py: rearrange tests a bit, add test for
1917         both the MAX_LENGTH bugfix and the resumeProducing hang.
1919         * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1920         put off the actual resumeProducing for a moment with
1921         reactor.callLater(0). This works around a twisted-1.3.0 bug which
1922         causes large logfiles to hang midway through.
1924         * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1925         logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1926         and to improve memory usage when streaming the file out to a web
1927         browser.
1928         * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1929         make this work cleanly
1931 2005-08-03  Brian Warner  <warner@lothar.com>
1933         * buildbot/trybuild.py: new file for 'try' utilities
1934         (getSourceStamp): run in a tree, find out the baserev+patch
1935         * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1936         implemented for SVN and Darcs, still working on Arch. I don't know
1937         how to make CVS work yet.
1939         * docs/buildbot.texinfo: document the 'buildbot' command-line
1940         tool, including the not-yet-implemented 'try' feature, and the
1941         in-flux .buildbot/ options directory.
1943 2005-07-20  Brian Warner  <warner@lothar.com>
1945         * buildbot/locks.py: added temporary id() numbers to Lock
1946         descriptions, to track down a not-really-sharing-the-Lock bug
1948         * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1950         * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1951         needed for python2.2 compatibility
1952         * buildbot/test/test_vc.py: python2.2 compatibility: generators
1953         are from the __future__
1955 2005-07-19  Brian Warner  <warner@lothar.com>
1957         * buildbot/master.py (BuildMaster.loadConfig): give a better error
1958         message when schedulers use unknown builders
1960         * buildbot/process/builder.py (Builder.compareToSetup): make sure
1961         SlaveLock('name') and MasterLock('name') are distinct
1963         * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1964         c['schedulers'] in such a way that we can actually accept
1965         Dependent instances
1966         * buildbot/test/test_config.py: check it
1968         * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1969         utility method to *all* the Schedulers
1970         (Periodic.listBuilderNames): same
1972         * docs/buildbot.texinfo (Interlocks): update chapter to match
1973         reality
1975         * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1976         to make sure that c['sources'], c['schedulers'], and c['status']
1977         are all lists of the appropriate objects, and that the Schedulers
1978         all point to real Builders
1979         * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1980         'listBuilderNames' utility method to support this
1981         * buildbot/scheduler.py: implement the utility method
1982         * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1984         * docs/buildbot.texinfo: add some @cindex entries
1986         * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1987         if it wasn't already set: most tla commands will fail unless one
1988         has been set.
1989         (Arch.createRepository): and disable bazaar's revision cache, since
1990         they cause test failures (the multiple repositories we create all
1991         interfere with each other through the cache)
1993         * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1994         bring it properly up to date with twisted-2.0 test guidelines
1996         * buildbot/master.py (BuildMaster): remove references to old
1997         'interlock' module, this caused a bunch of post-merge test
1998         failures
1999         * buildbot/test/test_config.py: same
2000         * buildbot/process/base.py (Build): same
2002         * buildbot/test/test_slaves.py: stubs for new test case
2004         * buildbot/scheduler.py: add test-case-name tag
2005         * buildbot/test/test_buildreq.py: same
2007         * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
2008         unnecessary init code
2009         (Bot.remote_setBuilderList): match it
2011         * docs/buildbot.texinfo (@settitle): don't claim version 1.0
2013         * buildbot/changes/mail.py (parseSyncmail): update comment
2015         * buildbot/test/test_slavecommand.py: disable Shell tests on
2016         platforms that don't suport IReactorProcess
2018         * buildbot/status/builder.py (LogFile): remove the 't' mode from
2019         all places where we open logfiles. It causes OS-X to open the file
2020         in some weird mode that that prevents us from mixing reads and
2021         writes to the same filehandle, which we depend upon to implement
2022         _generateChunks properly. This change doesn't appear to break
2023         win32, on which "b" and "t" are treated differently but a missing
2024         flag seems to be interpreted as "t".
2026 2005-07-18  Brian Warner  <warner@lothar.com>
2028         * buildbot/slave/commands.py (ShellCommand): overhaul
2029         error-handling code, to try and make timeout/interrupt work
2030         properly, and make win32 happier
2031         * buildbot/test/test_slavecommand.py: clean up, stop using
2032         reactor.iterate, add tests for timeout and interrupt
2033         * buildbot/test/sleep.py: utility for a new timeout test
2035         * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
2036         code from the local-usebranches branch
2038 2005-07-17  Brian Warner  <warner@lothar.com>
2040         * buildbot/process/process_twisted.py
2041         (TwistedReactorsBuildFactory): change the treeStableTimer to 5
2042         minutes, to match the other twisted BuildFactories, and don't
2043         excuse failures in c/qt/win32 reactors any more.
2045         * docs/examples/twisted_master.cfg: turn off the 'threadless' and
2046         'freebsd' builders, since the buildslaves have been unavailable
2047         for quite a while
2049 2005-07-13  Brian Warner  <warner@lothar.com>
2051         * buildbot/test/test_vc.py (VCBase.do_branch): test the new
2052         build-on-branch feature
2054         * buildbot/process/step.py (Darcs.__init__): add base_url and
2055         default_branch arguments, just like SVN
2056         (Arch.__init__): note that the version= argument is really the
2057         default branch name
2059         * buildbot/slave/commands.py (SourceBase): keep track of the
2060         repository+branch that was used for the last checkout in
2061         SRCDIR/.buildbot-sourcedata . If the contents of this file do not
2062         match, we clobber the directory and perform a fresh checkout
2063         rather than trying to do an in-place update. This should protect
2064         us against trying to get to branch B by doing an update in a tree
2065         obtained from branch A.
2066         (CVS.setup): add CVS-specific sourcedata: root, module, and branch
2067         (SVN.setup): same, just the svnurl
2068         (Darcs.setup): same, just the repourl
2069         (Arch.setup): same, arch coordinates (url), version, and
2070         buildconfig. Also pull the buildconfig from the args dictionary,
2071         which we weren't doing before, so the build-config was effectively
2072         disabled.
2073         (Arch.sourcedirIsUpdateable): don't try to update when we're
2074         moving to a specific revision: arch can't go backwards, so it is
2075         safer to just clobber the tree and checkout a new one at the
2076         desired revision.
2077         (Bazaar.setup): same sourcedata as Arch
2079         * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
2080         use maybeWait, to work with twisted-1.3.0 and twcompat
2081         (Dependencies.testRun_Pass): same
2083         * buildbot/test/test_vc.py: rearrange, cleanup
2085         * buildbot/twcompat.py: add defer.waitForDeferred and
2086         utils.getProcessOutputAndValue, so test_vc.py (which uses them)
2087         can work under twisted-1.3.0 .
2089         * buildbot/test/test_vc.py: rewrite. The sample repositories are
2090         now created at setUp time. This increases the runtime of the test
2091         suite considerably (from 91 seconds to 151), but it removes the
2092         need for an offline tarball, which should solve a problem I've
2093         seen where the test host has a different version of svn than the
2094         tarball build host. The new code also validates that mode=update
2095         really picks up recent commits. This approach will also make it
2096         easier to test out branches, because the code which creates the VC
2097         branches is next to the code which uses them. It will also make it
2098         possible to test some change-notification hooks, by actually
2099         performing a VC commit and watching to see the ChangeSource get
2100         notified.
2102 2005-07-12  Brian Warner  <warner@lothar.com>
2104         * docs/buildbot.texinfo (SVN): add branches example
2105         * docs/Makefile (buildbot.ps): add target for postscript manual
2107         * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ 
2108         * buildbot/test/test_locks.py: same
2110         * buildbot/process/step.py (Darcs): comment about default branches
2112         * buildbot/master.py (BuildMaster.loadConfig): don't look for
2113         c['interlocks'] in the config file, complain if it is present.
2114         Scan all locks in c['builders'] to make sure the Locks they use
2115         are uniquely named.
2116         * buildbot/test/test_config.py: remove old c['interlocks'] test,
2117         add some tests to check for non-uniquely-named Locks
2118         * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
2119         since the unique-Lock validation code requires it now
2121         * buildbot/locks.py: fix test-case-name
2123         * buildbot/interlock.py: remove old file
2125 2005-07-11  Brian Warner  <warner@lothar.com>
2127         * buildbot/test/test_interlock.py: rename to..
2128         * buildbot/test/test_locks.py: .. something shorter
2130         * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2131         versions (after 2.0.1) changed internet.TCPClient to shut down the
2132         connection in stopService. Change the code to handle this
2133         gracefully.
2135         * buildbot/process/base.py (Build): handle whole-Build locks
2136         * buildbot/process/builder.py (Builder.compareToSetup): same
2137         * buildbot/test/test_interlock.py: make tests work
2139         * buildbot/process/step.py (BuildStep.startStep): complain if a
2140         Step tries to claim a lock that's owned by its own Build
2141         (BuildStep.releaseLocks): typo
2143         * buildbot/locks.py (MasterLock): use ComparableMixin so config
2144         file reloads don't replace unchanged Builders
2145         (SlaveLock): same
2146         * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2147         rewrite to cover new Locks instead of old c['interlocks']
2148         * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2149         slave2 too
2152         * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2153         start the master and connect the buildslave
2155         * buildbot/process/step.py (FailingDummy.done): finish with a
2156         FAILURE status rather than raising an exception
2158         * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2159         stringify a BuildRequest.reason that is None
2161         * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2162         minor fix
2163         * buildbot/status/builder.py (BuildSetStatus): implement enough to
2164         allow scheduler.Dependent to work
2165         * buildbot/buildset.py (BuildSet): set .reason and .results
2167         * buildbot/test/test_interlock.py (Locks.setUp): connect both
2168         slaves, to make the test stop hanging. It still fails, of course,
2169         because I haven't even started to implement Locks.
2171         * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2173         * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2174         * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2175         * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2176         (Dependent): new class for downstream build dependencies
2177         * buildbot/test/test_dependencies.py: tests (still failing)
2179         * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2181 2005-07-07  Brian Warner  <warner@lothar.com>
2183         * buildbot/test/runutils.py (RunMixin): factored this class out..
2184         * buildbot/test/test_run.py: .. from here
2185         * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2186         added new buildbot.locks tests (which all hang right now)
2187         * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2188         * buildbot/process/step.py: claim/release per-BuildStep locks
2190         * docs/Makefile: add 'buildbot.html' target
2192         * buildbot/process/step.py (CVS.__init__): allow branch=None to be
2193         interpreted as "HEAD", so that all VC steps can accept branch=None
2194         and have it mean the "default branch".
2196         * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
2198 2005-07-07  Brian Warner  <warner@lothar.com>
2200         * docs/examples/twisted_master.cfg: update to match current usage
2202         * docs/buildbot.texinfo (System Architecture): comment out the
2203         image, it doesn't exist yet and just screws up the HTML manual.
2205 2005-07-05  Brian Warner  <warner@lothar.com>
2207         * debian/.cvsignore: oops, missed one. Removing leftover file.
2209 2005-06-17  Brian Warner  <warner@lothar.com>
2211         * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
2212         changed its output in 1.2.0, don't mistakenly think that the
2213         subversion we find isn't capable of supporting our tests.
2215         * debian/*: remove the debian/ directory and its contents, to make
2216         life easier for the proper Debian maintainer
2217         * MANIFEST.in: same
2218         * Makefile (release): same
2220 2005-06-07  Brian Warner  <warner@lothar.com>
2222         * everything: create a distinct SourceStamp class to replace the
2223         ungainly 4-tuple, let it handle merging instead of BuildRequest.
2224         Changed the signature of Source.startVC to include the revision
2225         information (instead of passing it through self.args). Implement
2226         branches for SVN (now only Darcs/Git is missing support). Add more
2227         Scheduler tests.
2229 2005-06-06  Brian Warner  <warner@lothar.com>
2231         * everything: rearrange build scheduling. Create a new Scheduler
2232         object (configured in c['schedulers'], which submit BuildSets to a
2233         set of Builders. Builders can now use multiple slaves. Builds can
2234         be run on alternate branches, either requested manually or driven
2235         by changes. This changed some of the Status classes. Interlocks
2236         are out of service until they've been properly split into Locks
2237         and Dependencies. treeStableTimer, isFileImportant, and
2238         periodicBuild have all been moved from the Builder to the
2239         Scheduler.
2240         (BuilderStatus.currentBigState): removed the 'waiting' and
2241         'interlocked' states, removed the 'ETA' argument.
2243 2005-05-24  Brian Warner  <warner@lothar.com>
2245         * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
2246         erroneously abandons the connection (in clientConnectionFailed)
2247         for non-UserErrors, which means that if we lose the connection due
2248         to a network problem or a timeout, we'll never try to reconnect.
2249         Fix this by not upcalling to the buggy parent method. Note:
2250         twisted-2.0 fixes this, but the function only has 3 lines so it
2251         makes more sense to copy it than to try and detect the buggyness
2252         of the parent class. Fixes SF#1207588.
2254         * buildbot/changes/changes.py (Change.branch): doh! Add a
2255         class-level attribute to accomodate old Change instances that were
2256         pickled before 0.6.5 (where .branch was added for new Changes).
2257         This fixes the exception that occurs when you try to look at an
2258         old Change (through asHTML).
2260         * buildbot/__init__.py (version): bump to 0.6.6+ while between
2261         releases
2263 2005-05-23  Brian Warner  <warner@lothar.com>
2265         * buildbot/__init__.py (version): release 0.6.6
2267 2005-05-23  Brian Warner  <warner@lothar.com>
2269         * NEWS: update for 0.6.6 release
2270         * debian/changelog: same
2272         * buildbot/scripts/runner.py (start): put the basedir in sys.path
2273         before starting: this was done by twistd back when we spawned it,
2274         now that we're importing the pieces and running them in the
2275         current process, we have to do it ourselves. This allows
2276         master.cfg to import files from the same directory without
2277         explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
2278         Stichele for the catch.
2279         (Options.opt_version): Add a --version command (actually, just make
2280         the existing --version command emit Buildbot's version too)
2282         * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
2283         fix to make this behave like other LogFiles, this time to handle
2284         existing LogFiles on disk. (add the missing .upgrade method)
2285         * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
2287 2005-05-21  Brian Warner  <warner@lothar.com>
2289         * buildbot/test/test_runner.py (Create.testMaster): match the
2290         rawstring change in runner.py:masterTAC
2292         * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
2293         TwistedWords is installed
2294         * buildbot/test/test_status.py: same, with TwistedMail
2296         * buildbot/master.py: remove old IRC/Waterfall imports (used by
2297         some old, deprecated, and removed config keys). This should enable
2298         you to use the base buildbot functionality with Twisted-2.0.0 when
2299         you don't also have TwistedWeb and TwistedWords installed
2301 2005-05-20  Brian Warner  <warner@lothar.com>
2303         * buildbot/scripts/runner.py (run): call sendchange(), not
2304         do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
2305         (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
2306         (stop): don't wait for process to die when sending SIGHUP
2307         (masterTAC): use a rawstring for basedir=, otherwise '\' in the
2308         directory name gets interpreted, which you don't want
2309         (slaveTAC): same
2311         * buildbot/__init__.py (version): bump to 0.6.5+ while between
2312         releases
2314 2005-05-18  Brian Warner  <warner@lothar.com>
2316         * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2318 2005-05-18  Brian Warner  <warner@lothar.com>
2320         * README: update for 0.6.5
2321         * debian/changelog: same
2323         * buildbot/changes/changes.py: rename tag= to branch=, since
2324         that's how we're using it, and my design for the upcoming "build a
2325         specific branch" feature wants it. also, tag= was too CVS-centric
2326         * buildbot/changes/mail.py (parseSyncmail): same
2327         * buildbot/process/base.py (Build.isBranchImportant): same
2328         * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2329         * docs/buildbot.texinfo (Attributes of Changes): same
2331         * NEWS: update tag=, update for upcoming release
2333 2005-05-17  Brian Warner  <warner@lothar.com>
2335         * buildbot/scripts/runner.py (stop): actually poll once per
2336         second, instead of re-killing the poor daemon once per second.
2337         Sleep briefly (0.1s) before the first poll, since there's a good
2338         chance we can avoid waiting the full second if the daemon shuts
2339         down quickly. Also remove the sys.exit() at the end.
2340         (start): remove the unneighborly sys.exit()
2342         * Makefile: improve permission-setting to not kick Arch so badly
2344         * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
2345         default --keepalive=600, since it doesn't hurt very much, and it's
2346         a hassle to discover that you need it.
2347         * buildbot/test/test_runner.py (Create.testSlave): test it
2349         * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
2350         IRC bot about EXCEPTION
2352         * buildbot/status/client.py (PBListener): upcall more correctly
2354         * buildbot/process/base.py (Build.allStepsDone): if a step caused
2355         an exception mark the overall build with EXCEPTION, not SUCCESS
2357         * buildbot/scripts/runner.py (makefile_sample): remove the leading
2358         newline
2359         * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2360         * Makefile: update some release-related stuff
2362         * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2363         gets called when there isn't actually an active process, just end
2364         the Command instead of blowing up. I don't know how it gets into
2365         this state, but the twisted win32 buildslave will sometimes hang,
2366         and when it shakes its head and comes back, it thinks it's still
2367         running a Command. The next build causes this command to be
2368         interrupted, but the lack of self.process.pid breaks the interrupt
2369         attempt.
2371         * NEWS: document changes since the last release
2373         * buildbot/scripts/runner.py (start): change 'buildbot start' to
2374         look for Makefile.buildbot instead of a bare Makefile . The
2375         'buildbot start' does not install this file, so you have to
2376         manually copy it if you want to customize startup behavior.
2377         (createMaster): change 'buildbot master' command to create
2378         Makefile.sample instead of Makefile, to create master.cfg.sample
2379         instead of master.cfg (requiring you to copy it before the
2380         buildmaster can be started). Both sample files are kept up to
2381         date, i.e. they are overwritten if they have been changed. The
2382         'buildbot.tac' file is *not* overwritten, but if the new contents
2383         don't match the old, a 'buildbot.tac.new' file is created and the
2384         user is warned. This seems to be a much more sane way to handle
2385         startup files. Also, don't sys.exit(0) when done, so we can run
2386         unit tests against it.
2387         (createSlave): same. Don't overwrite the sample info/ files.
2388         * buildbot/scripts/sample.mk: remove. the contents were pulled
2389         into runner.py, since they need to match the behavior of start()
2390         * setup.py: same
2391         * MANIFEST.in: same
2393         * docs/buildbot.texinfo (Launching the daemons): document it
2394         * buildbot/test/test_runner.py (Create): test it
2396         * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2397         version that can handle string-in-string tests, because otherwise
2398         python-2.2 fails the tests. It'd be tremendous if Trial's test
2399         took two strings under 2.2 too.
2401         * everything: fixed all deprecation warnings when running against
2402         Twisted-2.0 . (at least all the ones in buildbot code, there are a
2403         few that come from Twisted itself). This involved putting most of
2404         the Twisted-version specific code in the new buildbot.twcompat
2405         module, and creating some abstract base classes in
2406         buildbot.changes.base and buildbot.status.base (which might be
2407         useful anyway). __implements__ is a nuisance and requires an ugly
2408         'if' clause everywhere.
2410         * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2411         delay before finishing the test: it seems that smtp.sendmail
2412         doesn't hang up on the server, so we must wait a moment so it can
2413         hang up on us. This removes the trial warning about an unclean
2414         reactor.
2416 2005-05-16  Brian Warner  <warner@lothar.com>
2418         * buildbot/process/step.py (Source): add 'retry' argument. It is a
2419         tuple of (delay, repeats).
2420         * buildbot/test/test_vc.py (Retry): test it
2421         * docs/buildbot.texinfo (Source Checkout): document it
2422         * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2423         (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2424         doVCFull() are handled by re-trying the checkout (after a delay)
2425         some number of times.
2426         (ShellCommand._startCommand): make header lines easier to read
2428         * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2429         shutdown
2430         (WebTest.test_logfile): make sure master gets shut down, silences
2431         some "unclean reactor" test errors
2433         * buildbot/test/test_changes.py (Sender.tearDown): spin the
2434         reactor once after shutdown, something in certain versions of
2435         Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2436         fails, svn-trunk is ok.
2438         * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2439         second win32 error message
2441         * buildbot/test/test_run.py (Status.testSlave): be smarter about
2442         validating the ETA, so the tests don't fail on slow systems
2444 2005-05-15  Brian Warner  <warner@lothar.com>
2446         * buildbot/status/builder.py (HTMLLogFile): make this behave like
2447         the new LogFile class, so upgrading works properly
2448         (LogFileProducer.resumeProducing): survive resumeProducing after
2449         we've exhausted the chunkGenerator
2451         * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2452         logs too
2453         * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2454         (Log.testUpgrade): same
2456         * docs/buildbot.texinfo (Maintenance): describe how to delete old
2457         Builds and logs with a cron job.
2459         * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2460         of the old non-offline LogFile, added code to upgrade these to
2461         new-style contents-live-on-disk instances at load time (in a way
2462         that doesn't invalidate the old Build pickles, so upgrading to
2463         0.6.5 is not a one-way operation). Got rid of everything related
2464         to 'stub' builds.
2465         (LogFile.__init__): create LogFiles with the parent step status,
2466         the log's name, and a builder-relative filename where it can keep
2467         the contents on disk.
2468         (LogFile.hasContents): new method, clients are advised to call it
2469         before getText or getChunks and friends. If it returns False, the
2470         log's contents have been deleted and getText() will raise an
2471         error.
2472         (LogFile.getChunks): made it a generator
2473         (LogFile.subscribeConsumer): new method, takes a Twisted-style
2474         Consumer (except one that takes chunks instead of strings). This
2475         enables streaming of very large logfiles without storing the whole
2476         thing in memory.
2477         (BuildStatus.generateLogfileName): create names like
2478         12-log-compile-output, with a _0 suffix if required to be unique
2479         (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2480         or earlier) logfiles into new-style ones
2481         (BuilderStatus): remove everything related to 'stub' builds. There
2482         is now only one build cache, and we don't strip logs from old
2483         builds anymore.
2484         (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2485         since we no longer fight to keep it in the cache
2487         * buildbot/status/html.py (TextLog.render_GET): use a
2488         ChunkConsumer to stream the log entries efficiently.
2489         (ChunkConsumer): wrapper which consumes chunks and writes
2490         formatted HTML.
2492         * buildbot/test/test_twisted.py (Parse.testParse): use a
2493         LogFile-like object instead of a real one
2495         * buildbot/test/test_status.py (MyLog): handle new LogFile code
2496         (Log.testMerge3): validate more merge behavior
2497         (Log.testChunks): validate LogFile.getChunks
2498         (Log.testUpgrade): validate old-style LogFile upgrading
2499         (Log.testSubscribe): validate LogFile.subscribe
2500         (Log.testConsumer): validate LogFile.subscribeConsumer
2502         * buildbot/interfaces.py (IStatusLogStub): remove
2503         (IStatusLog.subscribeConsumer): new method
2504         (IStatusLog.hasContents): new method
2505         (IStatusLogConsumer): describes things passed to subscribeConsumer
2507         * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2508         the log contents if it does not have any contents.
2509         (StatusResourceBuildStep.body): same
2510         (StatusResourceBuildStep.getChild): give a 404 for empty logs
2512 2005-05-14  Brian Warner  <warner@lothar.com>
2514         * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2515         timeouts to try and make the windows metabuildslave not hang
2517 2005-05-13  Mike Taylor  <bear@code-bear.com>
2519         * buildbot/slave/commands.py (rmdirRecursive): added a check
2520         to ensure the path passed into rmdirRecursive actually exists.
2521         On win32 a non-existant path would generate an exception.
2523 2005-05-13  Brian Warner  <warner@lothar.com>
2525         * buildbot/slave/commands.py (rmdirRecursive): replacement for
2526         shutil.rmtree which behaves correctly on windows in the face of
2527         files that you have to chmod before deleting. Thanks to Bear at
2528         the OSAF for the routine.
2529         (SourceBase.doClobber): use rmdirRecursive
2531 2005-05-12  Brian Warner  <warner@lothar.com>
2533         * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2534         method generate chunks instead of returning a big list. This
2535         allows the same method to be used for both old LogFile and new
2536         OfflineLogFile.
2537         (OfflineLogFile.getText): use the generator
2538         (OfflineLogFile.subscribe): same
2539         * buildbot/status/html.py (TextLog.resumeProducing): same
2540         * buildbot/interfaces.py (IStatusLog.getChunks): document it
2542         * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2543         point out that OfflineLogFile does not currently work with
2544         html.Waterfall . Fixing this is high-priority.
2546         * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2547         apparently windows defaults to using stdout
2549         * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2550         better message on failure so I can figure out the win32 problem
2552         * buildbot/slave/commands.py (ShellCommand._startCommand): update
2553         log messages to include more useful copies of the command being
2554         run, the argv array, and the child command's environment.
2555         (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2557 2005-05-11  Brian Warner  <warner@lothar.com>
2559         * setup.py: oops, install debug.glade so 'buildbot debugclient'
2560         will actually work
2561         * Makefile: update the deb-snapshot version
2563         * docs/buildbot.texinfo: move all .xhtml docs into a new
2564         .texinfo-format document, adding a lot of material in the process.
2565         This is starting to look like a real user's manual. Removed all
2566         the Lore-related files: *.xhtml, *.css, template.tpl .
2567         * docs/Makefile: simple makefile to run 'makeinfo'
2568         * buildbot/scripts/sample.cfg: rearrange slightly
2569         * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2571 2005-05-10  Brian Warner  <warner@lothar.com>
2573         * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2574         different name for the internal twistw module, handle it.
2576         * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2577         * setup.py: .. and stop trying to install it
2579         * buildbot/process/step.py (Git): added support for 'cogito' (aka
2580         'git'), the new linux kernel VC system (http://kernel.org/git/).
2581         Thanks to Brandon Philips for the patch.
2582         * buildbot/slave/commands.py (Git): same
2584 2005-05-06  Brian Warner  <warner@lothar.com>
2586         * buildbot/status/builder.py (OfflineLogFile): replace the default
2587         LogFile with a form that appends its new contents to a disk file
2588         as they arrive. The complete log data is never kept in RAM. This
2589         is the first step towards handling very large (100MB+) logfiles
2590         without choking quite so badly. (The other half is
2591         producer/consumer on the HTML pages).
2592         (BuildStepStatus.addLog): use OfflineLogFile by default
2593         (BuildStatus.getLogfileName): helper code to give the
2594         OfflineLogFile a filename to work with
2596         * buildbot/test/test_status.py (Results.testAddResults): update
2597         tests to handle new asserts
2598         * buildbot/test/test_vc.py (Patch.doPatch): same
2599         * buildbot/test/test_steps.py (BuildStep.setUp): same
2601 2005-05-05  Brian Warner  <warner@lothar.com>
2603         * buildbot/scripts/runner.py (start): if there is no Makefile,
2604         launch the app by importing twistd's internals and calling run(),
2605         rather than spawning a new twistd process. This stands a much
2606         better chance of working under windows.
2607         (stop): kill the process with os.kill instead of spawning
2608         /bin/kill, again to reduce the number of external programs which
2609         windows might not have in the PATH. Also wait up to 5 seconds for
2610         the process to go away, allowing things like 'buildbot stop;
2611         buildbot start' to be reliable in the face of slow shutdowns.
2613         * buildbot/master.py (Dispatcher.__getstate__): remove old
2614         .tap-related methods
2615         (BuildMaster.__getstate__): same
2616         (makeService): same
2617         * buildbot/slave/bot.py (makeService): same
2618         (Options.longdesc): same
2619         * buildbot/scripts/runner.py: copy over some old mktap option text
2621         * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2622         'buildbot master' now creates a buildbot.tac file, so there is no
2623         longer a create-instance/save/reload sequence. mktap is dead, long
2624         live twistd -y.
2625         * buildbot/scripts/sample.mk: use twistd -y, not -f
2626         * buildbot/test/test_config.py: remove mktap-based test
2627         * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2628         * README: don't reference mktap
2630         * docs/source.xhtml: document some of the attributes that Changes
2631         might have
2633         * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2635         * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2636         [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2637         * buildbot/changes/changes.py (Change)
2638         * buildbot/changes/mail.py (parseSyncmail)
2639         * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2640         (Test3.testMsgS5)
2641         * buildbot/process/base.py (Build.isTagImportant)
2642         (Build.addChange)
2645 2005-05-04  Brian Warner  <warner@lothar.com>
2647         * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2648         connection after sending the change, so that unit tests don't
2649         complain about sockets being left around
2651         * buildbot/status/html.py (WaterfallStatusResource.body): fix
2652         exception in phase=0 rendering
2653         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2655         * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2657         * buildbot/master.py (BuildMaster.loadConfig): finally remove
2658         deprecated config keys: webPortnum, webPathname, irc, manholePort,
2659         and configuring builders with tuples.
2660         * buildbot/test/test_config.py: stop testing compatibility with
2661         deprecated config keys
2662         * buildbot/test/test_run.py: same
2664 2005-05-03  Brian Warner  <warner@lothar.com>
2666         * contrib/arch_buildbot.py: survive if there are no logfiles
2667         (username): just use a string, os.getlogin isn't reliable
2669         * buildbot/scripts/runner.py (sendchange): oops, fix the command
2670         so 'buildbot sendchange' actually works. The earlier test only
2671         covered the internal (non-reactor-running) form.
2673         * contrib/arch_buildbot.py: utility that can run as an Arch hook
2674         script to notify the buildmaster about changes
2676         * buildbot/scripts/runner.py (sendchange): new command to send a
2677         change to a buildbot.changes.pb.PBChangeSource receiver.
2678         * buildbot/test/test_changes.py (Sender): test it
2680         * buildbot/master.py (BuildMaster.startService): mark .readConfig
2681         after any reading of the config file, not just when we do it in
2682         startService. This makes some tests a bit cleaner.
2684         * buildbot/changes/pb.py: add some log messages
2686         * buildbot/process/base.py (Build.startBuild): fix a bug that
2687         caused an exception when the build terminated in the very first
2688         step.
2689         (Build.stepDone): let steps return a status of EXCEPTION. This
2690         terminates the build right away, and sets the build's overall
2691         status to EXCEPTION too.
2692         * buildbot/process/step.py (BuildStep.failed): return a status of
2693         EXCEPTION when that is what has happened.
2695         * buildbot/process/step.py (Arch.computeSourceRevision): finally
2696         implement this, allowing Arch-based projects to get precise
2697         checkouts instead of always using the latest code
2698         (Bazaar): create variant of Arch to let folks use baz instead of
2699         tla. Requires a new buildslave too.
2700         * buildbot/slave/commands.py (Arch): add 'revision' argument
2701         (Bazaar): create variant of Arch that uses baz instead of tla.
2702         Remove the code that extracts the archive name from the
2703         register-archive output, since baz doesn't provide it, and require
2704         the user provide both the archive name and its location.
2705         * buildbot/test/test_vc.py (VC.testBazaar): added tests
2707 2005-05-02  Brian Warner  <warner@lothar.com>
2709         * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2710         thanks to Nick Trout.
2712         * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2713         deals better with source Makefile coming from a read-only CVS
2714         checkout. Thanks to Nick Trout for the catch.
2716         * buildbot/__init__.py (version): bump to 0.6.4+ while between
2717         releases
2719 2005-04-28  Brian Warner  <warner@lothar.com>
2721         * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2723         * debian/changelog: update for 0.6.4
2725 2005-04-28  Brian Warner  <warner@lothar.com>
2727         * README.w32: add a checklist of steps for getting buildbot
2728         running on windows.
2729         * MANIFEST.in: include it in the tarball
2731         * NEWS: update
2733         * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2734         broken .tap files from 0.6.3 by getting rid of .services,
2735         .namedServices, and .change_svc at load time.
2737 2005-04-27  Brian Warner  <warner@lothar.com>
2739         * NEWS: update in preparation for new release
2741         * buildbot/test/test_config.py (Save.testSave): don't pull in
2742         twisted.scripts.twistd, we don't need it and it isn't for windows
2743         anyway.
2745         * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2746         accomodate win32 which can't do atomic-rename
2748 2005-04-27  Brian Warner  <warner@lothar.com>
2750         * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2751         timeouts to help the slow metabuildbot not flunk them so much
2752         (Disconnect.testBuild3): same
2753         (Disconnect.testBuild4): same
2754         (Disconnect.testInterrupt): same
2756         * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2757         setup, it was completely broken for new buildmasters (those which
2758         did not have a 'change.pck' already saved. Thanks to Paul Warren
2759         for catching this (embarrassing!) bug.
2760         (Dispatcher.__getstate__): don't save our registered avatar
2761         factories, since they'll be re-populated when the config file is
2762         re-read.
2763         (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2764         tests (since the real mktap-generated BuildMaster doesn't save
2765         this attribute).
2766         (BuildMaster.__getstate__): don't save any service children,
2767         they'll all be re-populated when the config file is re-read.
2768         * buildbot/test/test_config.py (Save.testSave): test for this
2770 2005-04-26  Brian Warner  <warner@lothar.com>
2772         * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2773         rendered with Blender.. looks a bit nicer.
2774         * buildbot/docs/images/icon.blend: add the Blender file for it
2776         * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2777         'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2778         running under windows. This appears to be the best way to allow
2779         BuildSteps to do something normal like 'trial -v buildbot.test' or
2780         'make foo' and still expect it to work. The idea is to make the
2781         BuildSteps look as much like what a developer would type when
2782         compiling or testing the tree by hand. This approach probably has
2783         problems when there are spaces in the arguments, so if you've got
2784         windows buildslaves, you'll need to pay close attention to your
2785         commands.
2787         * buildbot/status/html.py (WaterfallStatusResource.body): add the
2788         timezone to the timestamp column.
2789         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2791         * buildbot/scripts/runner.py (loadOptions): do something sane for
2792         windows, I think. We use %APPDATA%/buildbot instead of
2793         ~/.buildbot, but we still search everywhere from the current
2794         directory up to the root for a .buildbot/ subdir. The "is it under
2795         $HOME" security test was replaced with "is it owned by the current
2796         user", which is only performed under posix.
2797         * buildbot/test/test_runner.py (Options.testFindOptions): update
2798         tests to match. The "is it owned by the current user" check is
2799         untested. The test has been re-enabled for windows.
2801         * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2802         any "\n" in the expected output with the platform-specific line
2803         separator. Make this separator "\r\n" on PTYs under unix, they
2804         seem to do that and I don't know why
2806         * buildbot/test/test_runner.py (Options.optionsFile): disable on
2807         windows for now, I don't know what ~/.buildbot/ should mean there.
2809         * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2810         win32 compatibility, don't use "/tmp"
2811         (Basedir.testChangeBuilddir): remove more unixisms
2813 2005-04-26  Brian Warner  <warner@lothar.com>
2815         * buildbot/test/test_control.py (Force.rmtree): python2.2
2816         compatibility, apparently its shutil.rmtree ignore_errors=
2817         argument is ignored.
2818         * buildbot/test/test_run.py (Run.rmtree): same
2819         (RunMixin.setUp): same
2821         * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2822         not os.path.sep
2824         * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2825         'substring in string' operator, must use string.find(substr)!=-1
2826         * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2827         * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2829         * buildbot/scripts/runner.py (loadOptions): add code to search for
2830         ~/.buildbot/, a directory with things like 'options', containing
2831         defaults for various 'buildbot' subcommands. .buildbot/ can be in
2832         the current directory, your $HOME directory, or anywhere
2833         inbetween, as long as you're somewhere inside your home directory.
2834         (debugclient): look in ~/.buildbot/options for master and passwd
2835         (statuslog): look in ~/.buildbot/options for 'masterstatus'
2836         * buildbot/test/test_runner.py (Options.testFindOptions): test it
2838         * buildbot/status/client.py (makeRemote): new approach to making
2839         IRemote(None) be None, which works under Twisted-2.0
2840         * buildbot/test/test_status.py (Client.testAdaptation): test it
2842         * buildbot/status/builder.py (Status.builderAdded): when loading a
2843         pickled BuilderStatus in from disk, set its name after loading.
2844         The config file might have changed its name (but not its
2845         directory) while it wasn't looking.
2846         
2847         * buildbot/process/builder.py (Builder.attached): always return a
2848         Deferred, even if the builder was already attached
2849         * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2851 2005-04-25  Brian Warner  <warner@lothar.com>
2853         * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2854         category-related exception when announcing a build has finished
2856         * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2857         reference no-longer-existent changemaster.sources
2858         * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2860         * buildbot/__init__.py (version): bump to 0.6.3+ while between
2861         releases
2863 2005-04-25  Brian Warner  <warner@lothar.com>
2865         * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2867         * debian/changelog: update for 0.6.3
2869 2005-04-25  Brian Warner  <warner@lothar.com>
2871         * MANIFEST.in: make sure debug.glade is in the tarball
2873         * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2875         * NEWS: update for the imminent 0.6.3 release
2877         * buildbot/status/html.py (HtmlResource.content): make the
2878         stylesheet <link> always point at "buildbot.css".
2879         (StatusResource.getChild): map "buildbot.css" to a static.File
2880         containing whatever css= argument was provided to Waterfall()
2881         (Waterfall): provide the "classic" css as the default.
2882         * docs/waterfall.classic.css: move default CSS from here ..
2883         * buildbot/status/classic.css: .. to here
2885         * MANIFEST.in: make sure classic.css is included in the tarball
2886         * setup.py: and that it is installed too, under buildbot/status/
2888         * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2889         the module level, because buildbot.tap files from 0.6.2 don't have
2890         it in their attribute dictionary.
2892         * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2893         really exists at startup, might save some confusion somewhere.
2895 2005-04-24  Thomas Vander Stichele  <thomas at apestaart dot org>
2897         * docs/waterfall.classic.css:
2898           add a stylesheet that's almost the same as the "classic"
2899           buildbot style
2901         * buildbot/status/builder.py:
2902           add EXCEPTION as a result - this is a problem for the bot
2903           maintainer, not a build problem for the changers
2904         * buildbot/process/step.py:
2905           use EXCEPTION instead of FAILURE for exceptions
2906         * buildbot/status/html.py:
2907           add build_get_class to get a class out of a build/buildstep
2908           finish naming the classes
2909           split out sourceNames to changeNames and builderNames so we
2910           can style them separately
2911         * docs/config.xhtml:
2912           finish documenting classes as they are right now
2914         * buildbot/status/html.py:
2915           name the classes as we agreed on IRC
2916         * docs/config.xhtml:
2917           and document them
2919         * buildbot/status/html.py:
2920           same for cssclass->class_
2922         * buildbot/status/html.py:
2923           as decided on IRC, use class_ for the "class" attribute to not
2924           conflict with the class keyword, and clean up the messy **{} stuff.
2926         * buildbot/status/mail.py:
2927           put back "builders" argument, and fix docstring, because the
2928           code *ignores* builders listed in this argument
2930         * buildbot/process/builder.py:
2931           remove FIXME notes - category is now indeed a cvar of BuilderStatus
2933         * docs/config.xhtml:
2934           describe the category argument for builders
2936         * buildbot/status/builder.py:
2937           Fix a silly bug due to merging
2939         * buildbot/process/builder.py:
2940           remove category from the process Builder ...
2941         * buildbot/status/builder.py:
2942           ... and add it to BuilderStatus instead.
2943           Set category on unpickled builder statuses, they might not have it.
2944         * buildbot/master.py:
2945           include category when doing builderAdded
2946         * buildbot/status/mail.py:
2947           return None instead of self for builders we are not interested in.
2948         * buildbot/test/test_run.py:
2949           fix a bug due to only doing deferredResult on "dummy" waiting
2950         * buildbot/test/test_status.py:
2951           add checks for the Mail IStatusReceiver returning None or self
2953         * buildbot/status/html.py:
2954           fix testsuite by prefixing page title with BuildBot
2956         * buildbot/status/builder.py:
2957           have .category in builder status ...
2958         * buildbot/process/builder.py:
2959           ... and set it from Builder
2960         * buildbot/status/html.py:
2961           make .css a class variable 
2962         * buildbot/test/test_status.py:
2963           write more tests to cover our categories stuff ...
2964         * buildbot/status/mail.py:
2965           ... and fix the bug that this uncovered
2967         * buildbot/changes/mail.py:
2968         * buildbot/changes/pb.py:
2969         * buildbot/master.py:
2970         * buildbot/process/base.py:
2971         * buildbot/process/factory.py:
2972         * buildbot/process/interlock.py:
2973         * buildbot/process/step.py:
2974         * buildbot/process/step_twisted.py:
2975         * buildbot/slave/commands.py:
2976         * buildbot/status/builder.py:
2977         * buildbot/status/client.py:
2978         * buildbot/status/html.py:
2979         * buildbot/status/mail.py:
2980         * buildbot/status/progress.py:
2981         * buildbot/test/test_changes.py:
2982         * buildbot/test/test_config.py:
2983         * buildbot/test/test_control.py:
2984         * buildbot/test/test_interlock.py:
2985         * buildbot/test/test_maildir.py:
2986         * buildbot/test/test_mailparse.py:
2987         * buildbot/test/test_run.py:
2988         * buildbot/test/test_slavecommand.py:
2989         * buildbot/test/test_status.py:
2990         * buildbot/test/test_steps.py:
2991         * buildbot/test/test_twisted.py:
2992         * buildbot/test/test_util.py:
2993         * buildbot/test/test_vc.py:
2994         * buildbot/test/test_web.py:
2995         * buildbot/util.py:
2996           add test-case-name at the top of a whole set of files
2998         * buildbot/status/builder.py:
2999           keep order of addition when getting builder names
3000         * buildbot/status/words.py:
3001         * buildbot/test/test_run.py:
3002           add test for getBuilderNames
3004         * buildbot/process/base.py:
3005         * buildbot/process/step.py:
3006         * buildbot/status/builder.py:
3007         * buildbot/status/html.py:
3008           make buildbot css-able
3009           replace the color code for purple with purple, don't understand
3010           why it wasn't purple to start with
3012         * buildbot/status/words.py:
3013           ok, so it doesn't look like BuilderStatus.remote is still valid.
3014           Use what waterfall uses instead.
3016         * buildbot/interfaces.py:
3017         * buildbot/status/builder.py:
3018         * buildbot/status/html.py:
3019         * buildbot/status/mail.py:
3020         * buildbot/status/words.py:
3021         * buildbot/test/test_run.py:
3022           use categories everywhere and make it be a list.  More sensible
3023           for the future.  Also make words actually respect this in
3024           buildFinished.
3026         * buildbot/interfaces.py:
3027           add category argument to getBuilderNames
3028         * buildbot/process/builder.py:
3029         * buildbot/status/builder.py:
3030         * buildbot/status/html.py:
3031         * buildbot/status/mail.py:
3032         * buildbot/status/words.py:
3033         * buildbot/test/test_run.py:
3034           move from specifying builders by name to specifying the category
3036         * buildbot/status/html.py:
3037         * buildbot/status/words.py:
3038           add "builders=" to __init__ of status clients so they can
3039           limit themselves to the given list of builders to report on
3041         * buildbot/status/html.py: set the title to the product name
3043 2005-04-23  Thomas Vander Stichele  <thomas at apestaart dot org>
3045         * buildbot/interfaces.py:
3046         * buildbot/status/builder.py:
3047           more documentation.  Hm, not sure if ChangeLog entries make sense
3048           here...
3050 2005-04-23  Brian Warner  <warner@lothar.com>
3052         * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
3054         * buildbot/test/test_slavecommand.py (Shell): increase timeouts
3056         * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
3057         the sub-commands that log buildmaster status to stdout and to a
3058         GUI window, respectively.
3060         * buildbot/clients/gtkPanes.py: overhaul. basic two-row
3061         functionality is working again, but all the step-status and ETA
3062         stuff is missing. Commented out a lot of code pending more
3063         overhaul work.
3065         * buildbot/status/client.py: make sure that IRemote(None) is None
3067         * buildbot/changes/changes.py: import defer, oops
3068         (ChangeMaster): remove the .sources list, rely upon the fact that
3069         MultiServices can be treated as sequences of their children. This
3070         cleans up the add/remove ChangeSource routines a lot, as we keep
3071         exactly one list of the current sources instead of three.
3073         * buildbot/master.py (BuildMaster.__init__): remove .sources, set
3074         up an empty ChangeMaster at init time.
3075         (BuildMaster.loadChanges): if there are changes to be had from
3076         disk, replace self.change_svc with the new ones. If not, keep
3077         using the empty ChangeMaster set up in __init__.
3078         (BuildMaster.loadConfig_Sources): use list(self.change_svc)
3079         instead of a separate list, makes the code a bit cleaner.
3080         * buildbot/test/test_config.py (ConfigTest.testSimple): match it
3081         (ConfigTest.testSources): same, also wait for loadConfig to finish.
3082         Extend the test to make sure we can get rid of the sources when
3083         we're done.
3085 2005-04-22  Brian Warner  <warner@lothar.com>
3087         * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
3088         and info/host files when making the slave directory
3090         * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
3091         whendone= argument, just return the Deferred and let the caller do
3092         what they want with it.
3093         (Disconnect.testBuild1): wait for shutdownSlave
3094         (Basedir.testChangeBuilddir): new test to make sure changes to the
3095         builddir actually get propagated to the slave
3097         * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
3098         explicit method, rather than passing the builddir in __init__ .
3099         Make sure to update self.basedir too, this was broken before.
3100         (Bot.remote_setBuilderList): use b.setBuilddir for both new
3101         builders and for ones that have just had their builddir changed.
3102         (BotFactory): add a class-level .perspective attribute, so
3103         BuildSlave.waitUntilDisconnected won't get upset when the
3104         connection hasn't yet been established
3105         (BuildSlave.__init__): keep track of the bot.Bot instance, so
3106         tests can reach through it to inspect the SlaveBuilders
3108         * buildbot/process/base.py (Build.buildException): explain the
3109         log.err with a log.msg
3110         * buildbot/process/builder.py (Builder.startBuild): same
3111         (Builder._startBuildFailed): improve error message
3113         * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
3114         occurred because we lost the brand-new connection, retry instead
3115         of giving up. If not, it's probably an authorization failure, and
3116         it makes sense to stop trying. Make sure we log.msg the reason
3117         that we're log.err'ing the failure, otherwise test failures are
3118         really hard to figure out.
3120         * buildbot/master.py: change loadConfig() to return a Deferred
3121         that doesn't fire until the change has been fully implemented.
3122         This means any connected slaves have been updated with the new
3123         builddir. This change makes it easier to test the code which
3124         actually implements this builddir-updating.
3125         (BotPerspective.addBuilder): return Deferred
3126         (BotPerspective.removeBuilder): same
3127         (BotPerspective.attached): same
3128         (BotPerspective._attached): same. finish with remote_print before
3129         starting the getSlaveInfo, instead of doing them in parallel
3130         (BotPerspective.list_done): same
3131         (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3132         actually calling slave.disconnect()
3133         (BotMaster.addBuilder): same
3134         (BotMaster.removeBuilder): same
3135         (BuildMaster.loadConfig): same
3136         (BuildMaster.loadConfig_Slaves): same
3137         (BuildMaster.loadConfig_Sources): same
3138         (BuildMaster.loadConfig_Builders): same
3139         (BuildMaster.loadConfig_status): same
3141         * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3142         a Deferred that fires when the source is finally removed
3144         * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3145         the previous tree on win32, where we have to do it synchronously,
3146         make sure we return a Deferred anyway.
3147         (SourceBase.doCopy): same
3149         * buildbot/scripts/runner.py (statusgui): use the text client for
3150         now, while I rewrite the Gtk one
3151         * buildbot/clients/base.py: strip out old code, leaving just the
3152         basic print-message-on-event functionality. I also remove the
3153         ReconnectingPBClientFactory, but it does at least quit when it
3154         loses the connection instead of going silent
3156 2005-04-21  Brian Warner  <warner@lothar.com>
3158         * Makefile: minor tweaks
3160         * NEWS: point out deprecation warnings, new features for
3161         /usr/bin/buildbot
3163         * buildbot/master.py (BuildMaster.loadConfig): emit
3164         DeprecationWarnings for Builders defined with tuples. Rearrange
3165         code to facility removal of deprecated configuration keys in the
3166         next release.
3168         * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3169         'buildbot' command to put a little Makefile in the target that
3170         helps you re-create the buildbot.tap file, start or stop the
3171         master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3172         all the files 0600, since they contain passwords.
3173         (start): if there is a Makefile, and /usr/bin/make exists, use
3174         'make start' in preference to a raw twistd command. This lets
3175         slave admins put things like PYTHONPATH variables in their
3176         Makefiles and have them still work when the slave is started with
3177         'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3178         be nice to first try the 'make' command and only fall back to
3179         twistd if it fails. TODO: the Makefile's "start" command does not
3180         add the --reactor=win32 argument when running under windows.
3181         (Options.debugclient, Options.statusgui): add sub-commands to launch
3182         the debug client (formerly in contrib/debugclient.py) and the
3183         Gtk status application (currently broken)
3184         * buildbot/clients/debug.py: move from contrib/debugclient.py
3185         * buildbot/clients/debug.glade: same
3187         * buildbot/test/test_trial.py: remove it. This requires some
3188         functionality out of Twisted that isn't there yet, and until then
3189         having it around just confuses things.
3191         * buildbot/test/test_slavecommand.py (Shell): test both with and
3192         without PTYs, and make sure that command output is properly
3193         interleaved in the with-PTY case. I think the without-PTY test
3194         should pass on windows, where we never use PTYs anyway.
3196 2005-04-20  Brian Warner  <warner@lothar.com>
3198         * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
3200         * MANIFEST.in: add epyrun, gen-reference, buildbot.png
3202         * NEWS: start creating entries for the next release
3204         * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
3206         * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
3207         (WebTest.test_webPathname): same
3208         (WebTest.test_webPathname_port): same
3209         (WebTest.test_waterfall): use the default favicon rather than
3210         rooting around the filesystem for it. Open the expected-icon file
3211         in binary mode, to make win32 tests happier (thanks to Nick Trout
3212         for the catch)
3213         * buildbot/status/html.py (buildbot_icon): win32 portability
3215         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
3216         win32-compatibility fixes from Nick Trout, the "file not found" message
3217         is different under windows
3218         (FakeSlaveBuilder.__init__): clean up setup a bit
3219         * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
3221 2005-04-19  Brian Warner  <warner@lothar.com>
3223         * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
3224         skip-if-repositories-are-unavailable test to not kill the trial
3225         that comes with Twisted-1.3.0
3227         * setup.py: install buildbot.png icon file when installing code
3229         * buildbot/slave/commands.py (ShellCommand._startCommand): log the
3230         environment used by the command, at least on the child side.
3232         * buildbot/status/html.py (TextLog.pauseProducing): add a note,
3233         this method needs to be added and implemented because it gets
3234         called under heavy load. I don't quite understand the
3235         producer/consumer API enough to write it.
3236         (StatusResource.getChild): add a resource for /favicon.ico
3237         (Waterfall.__init__): add favicon= argument
3238         * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3239         (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
3240         (WebTest.test_webPathname): same
3241         (WebTest.test_webPathname_port): same
3242         * docs/config.xhtml: mention favicon=
3243         * buildbot/buildbot.png: add a default icon, dorky as it is
3245 2005-04-18  Thomas Vander Stichele  <thomas at apestaart dot org>
3247         * buildbot/master.py:
3248         * buildbot/process/base.py:
3249         * buildbot/process/builder.py:
3250         * buildbot/process/interlock.py:
3251         * buildbot/status/builder.py:
3252         * buildbot/status/html.py:
3253         * buildbot/status/mail.py:
3254         * buildbot/status/words.py:
3255           new documentation while digging through the code
3257 2005-04-17  Brian Warner  <warner@lothar.com>
3259         * general: try to fix file modes on all .py files: a+r, a-x,
3260         but let buildbot/clients/*.py be +x since they're tools
3262         * docs/epyrun (addMod): when an import fails, say why
3264         * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
3266 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
3268         * buildbot/process/base.py:
3269         * buildbot/process/builder.py:
3270         * buildbot/status/builder.py:
3271           new documentation while digging through the code
3273 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
3275         * buildbot/changes/changes.py:
3276         * buildbot/changes/p4poller.py:
3277         * buildbot/interfaces.py:
3278         * buildbot/process/base.py:
3279         * buildbot/process/builder.py:
3280         * buildbot/process/step.py:
3281         * buildbot/process/step_twisted.py:
3282         * buildbot/slave/bot.py:
3283         * buildbot/slave/commands.py:
3284         * buildbot/status/builder.py:
3285           fix all docstrings to make epydoc happy.  In the process of fixing
3286           some, I also moved pieces of docs, and removed some deprecated
3287           documentation
3289 2005-04-17  Thomas Vander Stichele  <thomas at apestaart dot org>
3291         * buildbot/process/builder.py:
3292         * buildbot/process/interlock.py:
3293         * buildbot/process/process_twisted.py:
3294         * buildbot/process/step.py:
3295           BuildProcess -> Build, as it looks like that's what happened
3296         * buildbot/process/base.py:
3297         * buildbot/process/factory.py:
3298           update epydoc stuff
3300 2005-04-17  Brian Warner  <warner@lothar.com>
3302         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3303         update compile command to accomodate the Twisted split.. now
3304         instead of './setup.py build_ext -i', you do './setup.py all
3305         build_ext -i', to run build_ext over all sub-projects.
3306         (FullTwistedBuildFactory): same
3307         (TwistedReactorsBuildFactory): same
3309         * buildbot/status/html.py (TextLog.finished): null out self.req
3310         when we're done, otherwise the reference cycle of TextLog to .req
3311         to .notifications to a Deferred to TextLog.stop keeps them from
3312         being collected, and consumes a huge (610MB on pyramid at last
3313         check) amount of memory.
3315 2005-04-11  Brian Warner  <warner@lothar.com>
3317         * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3318         normalize the VC-repository location.. makes SVN happier with
3319         certain test environments.
3321         * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3322         RemoteShellCommand gets its own .env dictionary, so that code in
3323         start() doesn't mutate the original. I think this should fix the
3324         step_twisted.Trial problem where multiple identical components
3325         kept getting added to PYTHONPATH= over and over again.
3327         * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3328         adding epydoc-format docstrings to many classes. Thanks to Thomas
3329         Vander Stichele for the patches.
3330         * docs/epyrun, docs/gen-reference: add epydoc-generating tools
3331         * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
3332         * buildbot/slave/bot.py, commands.py, registry.py: same
3334 2005-04-05  Brian Warner  <warner@lothar.com>
3336         * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
3337         preserve timestamps, helps incremental builds of large trees.
3338         Patch from Rene Rivera.
3340         * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
3341         'failure' and not the non-existent 'why'. Thanks to Rene Rivera
3342         for the catch.
3344 2005-04-03  Brian Warner  <warner@lothar.com>
3346         * buildbot/master.py (BuildMaster.loadConfig): only call exec()
3347         with one dict, apparently exec has some scoping bugs when used
3348         with both global/local dicts. Thanks to Nathaniel Smith for the
3349         catch.
3351 2005-04-02  Brian Warner  <warner@lothar.com>
3353         * buildbot/process/step_twisted.py (countFailedTests): the new
3354         trial in Twisted-2.0 emits a slightly different status line than
3355         old trial ("PASSED.." instead of "OK.."). Handle it so we don't
3356         mistakenly think the test count is unparseable.
3357         (Trial.start): note that for some reason each build causes another
3358         copy of self.testpath to be prepended to PYTHONPATH. This needs to
3359         be fixed but I'm not sure quite where the problem is.
3361 2005-04-01  Brian Warner  <warner@lothar.com>
3363         * buildbot/test/test_run.py (Run.testMaster): change some uses of
3364         deferredResult to avoid hangs/warnings under twisted-2.0
3365         (RunMixin.tearDown): same
3366         (RunMixin.shutdownSlave): same
3367         (Disconnect.testIdle1): same
3368         (Disconnect.testBuild2): same: wait one second after the build
3369         finishes for test to really be done.. this should be cleaned up to
3370         avoid wasting that second. Builder.detach uses a callLater(0),
3371         either that should be done in-line (something else needed that
3372         behavior), or it should return a Deferred that fires when the
3373         builder is really offline.
3374         (Disconnect.testBuild3): same
3375         (Disconnect.testDisappear): same
3377         * buildbot/test/test_web.py: rearrange server-setup and teardown
3378         code to remove unclean-reactor warnings from twisted-2.0
3380         * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3381         so the tests don't hang under twisted-2.0
3383 2005-03-31  Brian Warner  <warner@lothar.com>
3385         * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3386         caused a warning each time the master changed our set of builders
3388         * buildbot/status/builder.py (BuildStatus.saveYourself): under
3389         w32, don't unlink the file unless it already exists. Thanks to
3390         Baptiste Lepilleur for the catch.
3391         (BuilderStatus.saveYourself): same
3393 2005-02-01  Brian Warner  <warner@lothar.com>
3395         * buildbot/status/html.py (TextLog.getChild): use a /text child
3396         URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3397         of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3398         logfile as text/plain (no markup, no headers). This replaces the
3399         previous scheme (which used an ?text=1 argument), and gets us back
3400         to a relative link (which works better when the buildbot lives
3401         behind another web server, such as Apache configured as a reverse
3402         proxy). Thanks to Gerald Combs for spotting the problem.
3404         * buildbot/__init__.py (version): bump to 0.6.2+ while between
3405         releases
3407 2004-12-13  Brian Warner  <warner@lothar.com>
3409         * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3411         * debian/changelog: update for 0.6.2
3412         * NEWS: finalize for 0.6.2
3414 2004-12-11  Brian Warner  <warner@lothar.com>
3416         * NEWS: bring it up to date
3418         * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3419         detection code. Require some sign of life from the buildmaster
3420         every BotFactory.keepaliveInterval seconds. Provoke this
3421         indication at BotFactory.keepaliveTimeout seconds before the
3422         deadline by sending a keepalive request. We don't actually care if
3423         that request is answered in a timely fashion, what we care about
3424         is that .activity() is called before the deadline. .activity() is
3425         triggered by any PB message from the master (including an ack to
3426         one of the slave's status-update messages). With this new scheme,
3427         large status messages over slow pipes are OK, as long as any given
3428         message can be sent (and thus acked) within .keepaliveTimeout
3429         seconds (which defaults to 30).
3430         (SlaveBuilder.remote_startCommand): record activity
3431         (SlaveBuilder.ackUpdate): same
3432         (SlaveBuilder.ackComplete): same
3433         (BotFactory.gotPerspective): same
3434         * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3436 2004-12-09  Brian Warner  <warner@lothar.com>
3438         * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3439         debug message
3441         * buildbot/process/step_twisted.py (Trial._commandComplete):
3442         update self.cmd when we start the 'cat test.log' transfer. Without
3443         this, we cannot interrupt the correct RemoteCommand when we lose
3444         the connection.
3446         * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3447         trying to tell the slave to stop the command if we're already
3448         inactive, or if we no longer have a .remote
3450         * buildbot/process/builder.py (Builder._detached): don't let an
3451         exception in currentBuild.stopBuild() prevent the builder from
3452         being marked offline
3454 2004-12-07  Brian Warner  <warner@lothar.com>
3456         * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3457         KeyError that happens when you ask for a non-existent Builder, and
3458         translate it into a UsageError.
3460         * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3461         losing the slave in the middle of a remote step is handled too
3463         * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3464         be a Failure, so be sure to stringify it before using it as the
3465         contents of the 'interrupt' logfile
3466         (RemoteCommand.interrupt): use stringified 'why' in
3467         remote_interruptCommand too, just in case
3469 2004-12-06  Brian Warner  <warner@lothar.com>
3471         * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3472         instead of 'tla update', which is more efficient in case we've
3473         missed a couple of patches since the last update.
3475         * debian/changelog: update for previous (0.6.1) release. Obviously
3476         this needs to be handled better.
3478 2004-12-05  Brian Warner  <warner@lothar.com>
3480         * NEWS: update for stuff since last release
3482         * buildbot/master.py (DebugPerspective.attached): return 'self', to
3483         match the maybeDeferred change in Dispatcher.requestAvatar
3484         * buildbot/changes/pb.py (ChangePerspective.attached): same
3485         * buildbot/status/client.py (StatusClientPerspective.attached): same
3486         * buildbot/process/builder.py (Builder._attached3): same
3487         * buildbot/pbutil.py (NewCredPerspective.attached): same
3489         * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3490         the date to the top-most box, if it is not the same as today's
3491         date.
3493         * docs/slave.xhtml: provide a buildslave setup checklist
3495         * docs/source.xhtml (Arch): correct terminology
3497 2004-12-04  Brian Warner  <warner@lothar.com>
3499         * buildbot/test/test_slavecommand.py: use sys.executable instead
3500         of hard-coding 'python' for child commands, might help portability
3502         * docs/examples/twisted_master.cfg: update to current usage
3504         * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3505         'stop build' command to the IRC bot
3507         * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3508         message that broke PBChangeSource
3510         * buildbot/slave/bot.py: clean up shutdown/lose-master code
3511         (SlaveBuilder): make some attributes class-level, remove the old
3512         "update queue" which existed to support resuming a build after the
3513         master connection was lost. Try to reimplement that feature later.
3514         (SlaveBuilder.stopCommand): clear self.command when the
3515         SlaveCommand finishes, so that we don't try to kill a leftover one
3516         at shutdown time.
3517         (SlaveBuilder.commandComplete): same, merge with commandFailed and
3518         .finishCommand
3520         * buildbot/slave/commands.py (SourceBase): set self.command for
3521         all VC commands, so they can be interrupted.
3523 2004-12-03  Brian Warner  <warner@lothar.com>
3525         * buildbot/master.py: clean up slave-handling code, to handle
3526         slave-disconnect and multiple-connect better
3527         (BotPerspective): make these long-lasting, exactly one per bot
3528         listed in the config file.
3529         (BotPerspective.attached): if a slave connects while an existing
3530         one appears to still be connected, disconnect the old one first.
3531         (BotPerspective.disconnect): new method to forcibly disconnect a
3532         buildslave. Use some hacks to empty the transmit buffer quickly to
3533         avoid the long (20-min?) TCP timeout that could occur if the old
3534         slave has dropped off the net.
3535         (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3536         own their own SlaveStatus objects. Remove .attached/.detached, add
3537         .addSlave/.removeSlave, treat slaves like Builders (config file
3538         parsing sends deltas to the BotMaster). Inform the slave
3539         instances, i.e. the BotPerspective, about addBuilder and
3540         removeBuilder.
3541         (BotMaster.getPerspective): turns into a single dict lookup
3542         (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3543         which gives BotPerspective.attached a chance to disconnect the old
3544         slave first.
3545         (BuildMaster.loadConfig): add code (disabled) to validate that all
3546         builders use known slaves (listed in c['bots']). The check won't
3547         work with tuple-specified builders, which are deprecated but not
3548         yet invalid, so the check is disabled for now.
3549         (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3550         routine, do the add/changed/removed dance with them like we do
3551         with builders.
3552         (BuildMaster.loadConfig_Sources): move source-config into a
3553         separate routine too
3555         * buildbot/status/builder.py (Status.getSlave): get the
3556         SlaveStatus object from the BotPerspective, not the BotMaster.
3558         * buildbot/test/test_run.py: bunch of new tests for losing the
3559         buildslave at various points in the build, handling a slave that
3560         connects multiple times, and making sure we can interrupt a
3561         running build
3563         * buildbot/slave/bot.py (BuildSlave): make it possible to use
3564         something other than 'Bot' for the Bot object, to make certain
3565         test cases easier to write.
3566         (BuildSlave.waitUntilDisconnected): utility method for testing
3568 2004-11-30  Brian Warner  <warner@lothar.com>
3570         * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3572         * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3573         argument, return a Deferred that always fires with True or False.
3574         I don't use an errback to indicate 'ping failed' so that callers
3575         are free to ignore the deferred without causing spurious errors in
3576         the logs.
3577         * buildbot/process/builder.py (BuilderControl.ping): implement it
3579         * buildbot/test/test_run.py (Status.testDisappear): test ping
3580         (Status.disappearSlave): fix it
3582 2004-11-30  Brian Warner  <warner@lothar.com>
3584         * buildbot/interfaces.py (IBuildControl): add .stopBuild
3585         (IBuilderControl): add .getBuild(num), only works for the current
3586         build, of course, although it might be interesting to offer
3587         something for builds in the .waiting or .interlocked state.
3589         * buildbot/process/base.py (Build): have .stopBuild just do the
3590         interrupt, then let the build die by itself.
3591         (BuildControl): add .stopBuild, and add a point-event named
3592         'interrupt' just after the build so status viewers can tell that
3593         someone killed it.
3594         (BuilderControl): add .getBuild
3596         * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3597         stops when you kill it, good for testing
3598         (ShellCommand.interrupt): add a logfile named 'interrupt' which
3599         contains the 'reason' text.
3601         * buildbot/status/html.py: Add Stop Build button, if the build can
3602         still be stopped. Send a Redirect (to the top page) one second
3603         later, hopefully long enough for the interrupt to have an effect.
3604         Move make_row() up to top-level to share it between Stop Build and
3605         Force Build.
3607         * buildbot/slave/commands.py: only kill the child process once
3609         * buildbot/test/test_run.py: add testInterrupt
3611 2004-11-29  Brian Warner  <warner@lothar.com>
3613         * buildbot/process/base.py: Refactor command interruption. The
3614         Build is now responsible for noticing that the slave has gone
3615         away: Build.lostRemote() interrupts the current step and makes
3616         sure that no further ones will be started.
3617         
3618         * buildbot/process/builder.py: When the initial remote_startBuild
3619         message fails, log it: this usually indicates that the slave has
3620         gone away, but we don't really start paying attention until they
3621         fail to respond to the first step's command.
3623         * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3624         slave disconnect. Now sports a new interrupt() method. Error
3625         handling was simplified a lot by chaining deferreds, so
3626         remoteFailed/remoteComplete were merged into a single
3627         remoteComplete method (which can now get a Failure object).
3628         Likewise failed/finished were merged into just _finished.
3629         (BuildStep): Add interrupt(why) method, and if why is a
3630         ConnectionLost Failure then the step is failed with some useful
3631         error text.
3633         * buildbot/slave/bot.py: stop the current command when the remote
3634         Step reference is lost, and when the slave is shut down.
3635         (Bot): make it a MultiService, so it can have children. Use
3636         stopService to tell when the slave is shutting down.
3637         (SlaveBuilder): make it a Service, and a child of the Bot. Add
3638         remote_interruptCommand (which asks the current SlaveCommand to
3639         stop but allows it to keep emitting status messages), and
3640         stopCommand (which tells it to shut up and die).
3642         * buildbot/slave/commands.py: make commands interruptible
3643         (ShellCommand.kill): factor out os.kill logic
3644         (Command): factor out setup()
3645         (Command.sendStatus): don't send status if .running is false, this
3646         happens when the command has been halted.
3647         (Command.interrupt): new method, used to tell the command to die
3648         (SlaveShellCommand): implement .interrupt
3649         (DummyCommand): implement .interrupt
3650         (SourceBase, etc): factor out setup(), don't continue substeps if
3651         .interrupted is set
3653         * buildbot/status/builder.py: fix all waitUntilFinished() methods
3654         so they can be called after finishing
3656         * buildbot/test/test_run.py: new tests for disconnect behavior,
3657         refactor slave-shutdown routines, add different kinds of
3658         slave-shutdown
3660 2004-11-27  Brian Warner  <warner@lothar.com>
3662         * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3663         method to express ETA time like "2m45s" instead of "165 seconds"
3665 2004-11-24  Brian Warner  <warner@lothar.com>
3667         * buildbot/test/test_vc.py (VC.testArch): unregister the test
3668         archive after the test completes, to avoid cluttering the user's
3669         'tla archives' listing with a bogus entry. Arch doesn't happen to
3670         provide any way to override the use of ~/.arch-params/, so there
3671         isn't a convenient way to avoid touching the setup of the user who
3672         runs the test.
3673         (VC_HTTP.testArchHTTP): same
3675 2004-11-23  Brian Warner  <warner@lothar.com>
3677         * buildbot/status/html.py (TextLog): split render() up into
3678         render_HEAD and render_GET. Use a Producer when sending log
3679         chunks, to reduce memory requirements and avoid sending huge
3680         non-Banana-able strings over web.distrib connections. Requires
3681         peeking under the covers of IStatusLog.
3682         (TextLog.resumeProducing): fix the "as text" link, handle client
3683         disconnects that occur while we're still sending old chunks.
3685         * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3686         use defer.succeed, not the non-existent defer.success
3687         (LogFile.waitUntilFinished): same
3688         (LogFile.subscribe): don't add watchers to a finished logfile
3690         * buildbot/__init__.py (version): bump to 0.6.1+ while between
3691         releases
3693 2004-11-23  Brian Warner  <warner@lothar.com>
3695         * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3697 2004-11-23  Brian Warner  <warner@lothar.com>
3699         * NEWS: update for the 0.6.1 release
3700         * MANIFEST.in: add new files
3702         * README (INSTALLATION): explain how to enable the extra VC tests
3704         * buildbot/status/builder.py (LogFile): add .runEntries at the class
3705         level to, so old pickled builds can be displayed ok
3707 2004-11-22  Brian Warner  <warner@lothar.com>
3709         * NEWS: summarize updates since last release
3711         * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3712         Yoz Grahame. Closes SF#1050138.
3714         * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3715         SF#1042563.
3717         * buildbot/process/step_twisted.py (Trial): update docs a bit
3719         * docs/factories.xhtml: fix Trial factory docs to match reality.
3720         Closes: SF#1049758.
3722         * buildbot/process/factory.py (Trial.__init__): add args for
3723         randomly= and recurse=, making them available to instantiators
3724         instead of only to subclassers. Closes: SF#1049759.
3726 2004-11-15  Brian Warner  <warner@lothar.com>
3728         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3729         try to teach the Quick factory to use multiple versions of python
3731 2004-11-12  Brian Warner  <warner@lothar.com>
3733         * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3734         safer w32-compatible approach, and only use it on windows
3735         (BuildStatus.saveYourself): same
3737 2004-11-11  Brian Warner  <warner@lothar.com>
3739         * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3740         it: one string merge per chunk. There are now separate .entries
3741         and .runEntries lists: when enumerating over all chunks, make sure
3742         to look at both.
3743         * buildbot/test/test_status.py (Log): more tests
3745         * buildbot/status/builder.py (LogFile.addEntry): Merge string
3746         chunks together, up to 10kb per chunk. This ought to cut down on
3747         the CPU-burning overhead of large log files. Thanks to Alexander
3748         Staubo for spotting the problem.
3749         * buildbot/test/test_status.py (Log): tests for same
3751 2004-11-10  Brian Warner  <warner@lothar.com>
3753         * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3754         header to outbound mail
3755         * buildbot/test/test_status.py (Mail.testBuild1): test for same
3757 2004-11-08  Brian Warner  <warner@lothar.com>
3759         * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3760         can't do os.rename() onto an existing file, so catch the exception
3761         and unlink the target file first. This introduces a slight window
3762         where the existing file could be lost, but the main failure case
3763         (disk full) should still be handled safely.
3764         (BuildStatus.saveYourself): same
3766         * buildbot/changes/pb.py (ChangePerspective): use a configurable
3767         separator character instead of os.sep, because the filenames being
3768         split here are coming from the VC system, which can have a
3769         different pathname convention than the local host. This should
3770         help a buildmaster running on windows that uses a CVS repository
3771         which runs under unix.
3772         * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3774         * buildbot/process/step_twisted.py (Trial.createSummary): survive
3775         when there are no test failures to be parsed
3777         * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3778         instead of the unix-specific os.system("cp"), thanks to Elliot
3779         Murphy for this and the other buildbot-vs-windows catches.
3780         * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3782         * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3783         echo the command as it is run
3785         * setup.py: install sample.mk too, not just sample.cfg
3786         (scripts): install contrib/windows/buildbot.bat on windows
3788 2004-11-07  Brian Warner  <warner@lothar.com>
3790         * buildbot/process/builder.py (Builder._detached): clear the
3791         self.currentBuild reference, otherwise the next build will be
3792         skipped because we think the Builder is already in use.
3794         * docs/examples/twisted_master.cfg: update to match current usage
3795         on the Twisted buildbot
3797 2004-10-29  Brian Warner  <warner@lothar.com>
3799         * buildbot/status/mail.py (MailNotifier): fix typo in docs
3801 2004-10-28  Brian Warner  <warner@lothar.com>
3803         * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3804         have separate doVCUpdate/doVCFull methods. Catch an update failure
3805         and respond by clobbering the source directory and re-trying. This
3806         will handle local changes (like replacing a file with a directory)
3807         that will cause CVS and SVN updates to fail.
3808         * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3810         * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3811         python-2.4 warning
3813 2004-10-19  Brian Warner  <warner@lothar.com>
3815         * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3817         * buildbot/status/html.py (StatusResourceTestResults): display any
3818         TestResults that the Build might have
3819         (StatusResourceTestResult): and the logs for each TestResult
3820         (StatusResourceBuild): add link from the per-build page
3822 2004-10-15  Brian Warner  <warner@lothar.com>
3824         * buildbot/process/step_twisted.py (Trial.createSummary): parse
3825         the 'problems' portion of stdout, add TestResults to our build
3826         * buildbot/test/test_twisted.py (Parse.testParse): test it
3828         * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3829         to retrieve a dict of accumulated test results
3830         (ITestResult): define what a single test result can do
3831         * buildbot/status/builder.py (TestResult): implement ITestResult
3832         (BuildStatus.getTestResults): retrieve dict of TestResults
3833         (BuildStatus.addTestResult): add TestResults
3834         * buildbot/test/test_status.py (Results.testAddResults): test it
3836 2004-10-14  Brian Warner  <warner@lothar.com>
3838         * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3839         instead of os.system("rm -rf") for win32 portability
3841         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3842         SignalMixin instead of starting/stopping the reactor, which is
3843         likely to cause problems with other tests
3845         * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3846         self.copyComplete() call. Yoz Grahame makes the catch.
3848         * contrib/windows/buildbot.bat: helper script to deal with path
3849         issues. Thanks to Yoz Grahame.
3851         * buildbot/master.py (BuildMaster.startService): don't register a
3852         SIGHUP handler if the signal module has no SIGHUP attribute.
3853         Apparently win32 does this.
3855         * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3857         * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3858         test if the reactor can't offer UNIX sockets
3860         * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3861         error introduced in the last commit. We really need that
3862         metabuildbot :).
3864 2004-10-12  Brian Warner  <warner@lothar.com>
3866         * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3867         when describing a maildir source. Thanks to Stephen Davis.
3869         * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3870         ETA seconds
3872         * buildbot/scripts/runner.py (createMaster): install Makefile too
3873         (start): add --no_save to 'start' command
3874         * buildbot/scripts/sample.mk: simple convenience Makefile with 
3875         start/stop/reload targets
3877         * buildbot/__init__.py (version): bump to 0.6.0+ while between
3878         releases
3880 2004-09-30  Brian Warner  <warner@lothar.com>
3882         * setup.py: Releasing buildbot-0.6.0
3884 2004-09-30  Brian Warner  <warner@lothar.com>
3886         * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3887         test_trial.py from the source tarball until support is complete.
3889         * NEWS: update for 0.6.0 release
3890         * buildbot/__init__.py (version): same
3891         * README: same
3893         * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3894         'source' command to tell users where to get the Buildbot source
3896         * docs/examples/*.cfg: update to modern standards
3898         * NEWS: update for release
3900         * buildbot/scripts/runner.py (createMaster): remove the
3901         -shutdown.tap stuff now that it isn't necessary
3902         (createSlave): same
3903         (start): launch buildbot.tap, not buildbot-shutdown.tap
3906         * buildbot/status/mail.py (Domain): shorten class name
3907         (MailNotifier): if lookup= is a string, pass it to Domain()
3908         * buildbot/test/test_status.py (Mail.testBuild1): new class name
3909         (Mail.testBuild2): test the string-to-Domain shortcut
3910         (Mail.testMail): fix test
3913         * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3914         example config file
3916         * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3917         more attributes on load
3918         (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3919         to accomodate the whole waterfall page at once, and the thrashing
3920         results in a lot of unnecessary loads
3921         (BuildStatus.saveYourself): use binary pickles, not fluffy text
3922         (BuilderStatus.saveYourself): same
3923         (BuilderStatus.eventGenerator): stop generating on the first missing
3924         build. We assume that saved builds are deleted oldest-first.
3925         (BuildStepStatus.__getstate__): .progress might not exist
3927         * buildbot/changes/changes.py (ChangeMaster): make it
3928         serializable, in $masterdir/changes.pck
3929         (ChangeMaster.stopService): save on shutdown
3930         * buildbot/master.py (BuildMaster.loadChanges): load at startup
3931         * buildbot/test/test_config.py: load Changes before config file
3934         * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3935         "Oh my god, you killed the command" header on a separate line
3937         * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3938         skip over corrupted build pickles
3939         (BuilderStatus.getFullBuildByNumber): same
3940         (BuilderStatus.eventGenerator): skip over unavailable builds
3941         (BuildStatus.saveYourself): save builds to a .tmp file first, then
3942         do an atomic rename. This prevents a corrupted pickle when some
3943         internal serialization error occurs.
3944         (BuilderStatus.saveYourself): same
3946         * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3947         the timeout for shell commands, it got lost somehow
3949         * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3950         run out of build steps, return the rest of the builder events
3952         * buildbot/interfaces.py (IBuilderControl.ping): add method
3954         * buildbot/process/builder.py (BuilderControl.ping): move
3955         slave-ping to BuilderControl, and fix the failure case in the
3956         process (Event.finish() is the verb, Event.finished is the noun).
3958         * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3959         through the BuilderControl instead of the BuilderStatus
3960         (EventBox): add adapter for builder.Event, allowing builder events to
3961         be displayed in the waterfall display
3963         * buildbot/master.py (BotMaster.stopService): add a 'master
3964         shutdown' event to the builder's log
3965         (BuildMaster.startService): and a 'master started' on startup
3967         * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3968         builder events into the BuildStep event stream
3969         (Status.builderAdded): add a 'builder created' event
3972         * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3973         command to announce the completion of a running build
3974         (IrcStatusBot.command_FORCE): announce when the build finishes
3976         * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3977         don't evict unfinished builds from the cache: they must stay in
3978         the full-cache until their logfiles have stopped changing. Make
3979         sure the eviction loop terminates if an unfinished build was hit.
3980         (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3981         This lets exceptions be dumped in an email status message. Really
3982         we need LogFiles which contain both text and HTML, instead of two
3983         separate classes.
3984         (BuildStatus.__getstate__): handle self.finished=False
3985         (Status.builderAdded): if the pickle is corrupted, abandon the
3986         history and create a new BuilderStatus object.
3988         * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3989         self.progress attribute, helped one test which doesn't fully set
3990         up the Build object.
3992         * buildbot/interfaces.py (IStatusLogStub): split out some of the
3993         IStatusLog methods into an Interface that is implemented by "stub"
3994         logs, for which all the actual text chunks are on disk (in the
3995         pickled Build instance). To show the log contents, you must first
3996         adapt the stub log to a full IStatusLog object.
3998         * buildbot/status/builder.py (LogFileStub): create separate stub
3999         log objects, which can be upgraded to a real one if necessary.
4000         (LogFile): make them persistable, and let them stubify themselves
4001         (HTMLLogFile): same
4002         (BuildStepStatus): same
4003         (BuildStatus): same
4004         (BuildStatus.saveYourself): save the whole build out to disk
4005         (BuilderStatus): make it persistable
4006         (BuilderStatus.saveYourself): save the builder to disk
4007         (BuilderStatus.addFullBuildToCache): implement two caches which
4008         hold Build objects: a small one which holds full Builds, and a
4009         larger one which holds "stubbed" Builds (ones with their LogFiles
4010         turned into LogFileStubs). This reduces memory usage by the
4011         buildmaster by not keeping more than a few (default is 2) whole
4012         build logs in RAM all the time.
4013         (BuilderStatus.getBuild): rewrite to pull from disk (through the
4014         cache)
4015         (BuilderStatus.eventGenerator): rewrite since .builds went away
4016         (BuilderStatus.buildStarted): remove the .builds array. Add the
4017         build to the "full" cache when it starts.
4018         (BuilderStatus._buildFinished): save the build to disk when it
4019         finishes
4020         (Status): give it a basedir (same as the BuildMaster's basedir)
4021         where the builder pickles can be saved
4022         (Status.builderAdded): create the BuilderStatus ourselves, by
4023         loading a pickle from disk (or creating a new instance if there
4024         was none on disk). Return the BuilderStatus so the master can glue
4025         it into the new Builder object.
4027         * buildbot/master.py (BotMaster.stopService): on shutdown, tell
4028         all BuilderStatuses to save themselves out to disk. This is in
4029         lieu of saving anything important in the main Application pickle
4030          (the -shutdown.tap file).
4031         (BuildMaster.__init__): give Status() a basedir for its files
4032         (BuildMaster.loadConfig_Builders): do status.builderAdded first,
4033         to get the BuilderStatus, then give it to the Builder (instead of
4034         doing it the other way around). It's ok if the status announces
4035         the new Builder before it's really ready, as the outside world can
4036         only see the BuilderStatus object anyway (and it is ready before
4037         builderAdded returns). Use the builder's "builddir" (which
4038         normally specifies where the slave will run the builder) as the
4039         master's basedir (for saving serialized builds).
4041         * buildbot/status/html.py (StatusResourceBuildStep.getChild):
4042         coerce the logfile to IStatusLog before trying to get the text
4043         chunks out of it. This will pull the full (non-stubified) Build in
4044         from disk if necessary.
4045         (TextLog): fix the adapter registration
4047         * buildbot/test/test_control.py (Force.setUp): create the basedir
4048         * buildbot/test/test_web.py: same
4049         * buildbot/test/test_vc.py (SetupMixin.setUp): same
4050         * buildbot/test/test_status.py (Mail.makeBuild): match new setup
4051         * buildbot/test/test_run.py (Run.testMaster): same
4052         (Status.setUp): same
4054 2004-09-29  Fred L. Drake, Jr.  <fdrake@acm.org>
4056         * buildbot/status/html.py (Waterfall.__init__): store actual
4057         allowForce flag passed in rather than using True for everyone;
4058         make sure setting it to False doesn't cause a NameError
4059         (Waterfall.setup).
4060         (StatusResourceBuilder.__init__) add the builder name to the page
4061         title.
4062         (StatusResourceBuilder.body) move HTML generation for a name/value
4063         row into a helper method (StatusResourceBuilder.make_row); only
4064         generate the "Force Build" form if allowForce was True and the
4065         slave is connected.  Use class attributes in the generated HTML to
4066         spread a little CSS-joy.
4068 2004-09-28  Brian Warner  <warner@lothar.com>
4070         * buildbot/process/step_twisted.py (Trial.createSummary): fix
4071         warning-scanner to not ignore things like
4072         'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
4074         * buildbot/status/html.py (StatusResource.control): add some
4075         class-level values for .control in an attempt to make upgrading
4076         smoother
4078         * buildbot/util.py (ComparableMixin): survive missing attributes,
4079         such as when a class is modified and we're comparing old instances
4080         against new ones
4082         * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
4083         failure handling, remove a redundant try/except block. Don't
4084         return the full traceback to the IRC channel.
4085         (IrcStatusBot.command_FORCE): catch new exceptions, return useful
4086         error messages. Get ETA properly.
4088         * buildbot/status/html.py (StatusResourceBuild.body): html.escape
4089         the reason, since (at least) IRC message will have <> in them.
4090         (StatusResourceBuilder.__init__): take an IBuilderControl
4091         (StatusResourceBuilder.force): use the IBuilderControl we get in
4092         the constructor instead of trying to make our own. Catch the
4093         new exceptions and ignore them for now (until we make an
4094         intermediate web page where we could show the error message)
4095         (StatusResource): create with an IControl, use it to give an
4096         IBuilderControl to all children
4097         (Waterfall): take an allowForce= option, pass an IControl object
4098         to StatusResource if it is True
4100         * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
4102         * buildbot/master.py (BotPerspective.perspective_forceBuild):
4103         catch new exceptions and return string forms
4105         * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
4106         * buildbot/process/builder.py (Builder.forceBuild): raise them
4107         * buildbot/test/test_control.py (Force.testNoSlave): new test
4108         (Force.testBuilderInUse): same
4111         * buildbot/status/words.py (IrcStatusBot): enable build-forcing
4113         * buildbot/test/test_run.py: use IControl
4114         * buildbot/test/test_vc.py: same
4116         * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
4117         to use IControl. Still offline.
4118         * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
4120         * buildbot/process/builder.py (Builder.doPeriodicBuild): set
4121         who=None so periodic builds don't send out status mail
4122         (Builder.forceBuild): include reason in the log message
4123         (BuilderControl.forceBuild): rename 'name' to 'who'
4125         * buildbot/master.py (BotPerspective.perspective_forceBuild): add
4126         'who' parameter, but make it None by default so builds forced by
4127         slave admins don't cause status mail to be sent to anybody
4128         (BotMaster.forceBuild): same. this method is deprecated.
4129         (DebugPerspective.perspective_forceBuild): same, use IControl.
4130         (DebugPerspective.perspective_fakeChange): use IControl..
4131         (Dispatcher.requestAvatar): .. so don't set .changemaster
4133         * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4134         parameter to avoid confusion with the name of the builder
4137         * buildbot/status/mail.py: refine comment about needing 2.3
4139         * buildbot/status/html.py: move all imports to the top
4141         * buildbot/test/test_control.py: test new interfaces
4142         * buildbot/test/test_run.py (Status): handle new interfaces
4143         * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4145         * buildbot/process/base.py (BuildControl): implement IBuildControl
4146         and its lonely getStatus() method
4148         * buildbot/process/builder.py (BuilderControl): implement
4149         IBuilderControl, obtained by adapting the Builder instance
4150         (Builder.startBuild): return a BuilderControl instead of a
4151         Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4152         accomplish the same thing.
4154         * buildbot/master.py: move all import statements to the top
4155         (Control): implement IControl, obtained by adapting the
4156         BuildMaster instance.
4158         * buildbot/interfaces.py: add IControl, IBuilderControl, and
4159         IBuildControl. These are used to force builds. Eventually they
4160         will provide ways to reconfigure the Builders, pause or abandon a
4161         Build, and perhaps control the BuildMaster itself.
4163 2004-09-26  Brian Warner  <warner@lothar.com>
4165         * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4166         ends up comparing us against something without a .__class__
4168 2004-09-24  Brian Warner  <warner@lothar.com>
4170         * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4171         usage text right.
4173         * Makefile: add 'deb-snapshot' target, to create a timestamped
4174         .deb package
4176         * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4178 2004-09-23  Brian Warner  <warner@lothar.com>
4180         * buildbot/__init__.py (version): move version string here
4181         * setup.py: get version string from buildbot.version
4182         * buildbot/status/html.py (WaterfallStatusResource.body): add
4183         buildbot version to the page footer
4184         * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4185         version when asked
4187         * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4188         slaves, let the second know where the first one is coming from
4189         (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
4190         see our exceptions. It would be nice if there were a way to just
4191         send them the exception type and value, not the full traceback.
4194         * buildbot/status/mail.py (MailNotifier): add a new argument
4195         sendToInterestedUsers=, which can be set to False to disable the
4196         usual send-to-blamelist behavior.
4197         (top): handle python-2.2 which has no email.MIMEMultipart
4198         (MailNotifier.buildMessage): don't send logs without MIMEMultipart
4199         (MailNotifier.disownServiceParent): unsubscribe on removal
4201         * buildbot/test/test_status.py (Mail.testBuild2): test it
4204         * buildbot/status/progress.py (Expectations.wavg): tolerate
4205         current=None, which happens when steps start failing badly
4206         * buildbot/test/test_status.py (Progress.testWavg): test for it
4208         * buildbot/process/step.py (SVN.startVC): when the (old) slave
4209         doesn't understand args['revision'], emit a warning instead of
4210         bailing completely. Updating to -rHEAD is probably close enough.
4212         * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
4214         * buildbot/test/test_status.py: at least import bb.status.client
4215         even if we don't have any test coverage for it yet
4217         * contrib/svn_buildbot.py: don't require python2.3
4218         (main): wait, do require it (for sets.py), but explain how to
4219         make it work under python2.2
4221 2004-09-23  Brian Warner  <warner@lothar.com>
4223         * contrib/svn_buildbot.py: include the revision number in the Change
4225         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
4226         using util.now() because FreshCVS is a realtime service
4228         * buildbot/status/event.py: delete dead code
4229         * buildbot/process/step.py: don't import dead Event class
4230         * buildbot/process/step_twisted.py: same
4231         * buildbot/status/builder.py: same
4232         * buildbot/status/client.py: same
4234         * buildbot/test/test_process.py: kill buggy out-of-date disabled test
4236         * buildbot/changes/changes.py (Change): set .when from an __init__
4237         argument (which defaults to now()), rather than having
4238         ChangeMaster.addChange set it later.
4239         (ChangeMaster.addChange): same
4241         * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
4242         (parseSyncmail): same. Just use util.now() for now.
4243         (parseBonsaiMail): parse the timestamp field for when=
4245         * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
4246         instead of setting .when after the fact
4248 2004-09-22  slyphon
4250         * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
4251         results when the target project uses retrial. Still under
4252         development.
4253         * buildbot/test/test_trial.py: same
4255 2004-09-21  Brian Warner  <warner@lothar.com>
4257         * buildbot/status/mail.py (MailNotifier.__init__): include
4258         success/warnings/failure in the Subject line
4259         (MailNotifier.buildMessage): add the buildbot's URL to the body,
4260         use step.logname for the addLogs=True attachment filenames
4261         * buildbot/test/test_status.py (Mail): test Subject lines
4262         (Mail.testLogs): test attachment filenames
4264         * buildbot/master.py (DebugPerspective.perspective_fakeChange):
4265         accept a 'who' argument from the debug tool
4266         * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
4267         * contrib/debug.glade: add text box to set 'who'
4269         * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
4270         .getBuilderName with .getBuilder().getName(), more flexible
4271         (IStatusLog.getName): logs have short names, but you can prefix
4272         them with log.getStep().getName() to make them more useful
4273         * buildbot/status/builder.py: same
4274         * buildbot/status/client.py: same
4275         * buildbot/status/html.py: same
4276         * buildbot/test/test_run.py (Status.testSlave): same
4277         * buildbot/process/step.py: tweak logfile names
4279         * buildbot/status/mail.py (MailNotifier): add lookup, change
4280         argument to extraRecipients. The notifier is now aimed at sending
4281         mail to the people involved in a particular build, with additional
4282         constant recipients as a secondary function.
4284         * buildbot/test/test_status.py: add coverage for IEmailLookup,
4285         including slow-lookup and failing-lookup. Make sure the blamelist
4286         members are included.
4288         * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
4289         (IBuildStatus.getResponsibleUsers): rename from getBlamelist
4290         (IBuildStatus.getInterestedUsers): new method
4291         * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
4292         * buildbot/status/client.py (remote_getResponsibleUsers): same
4293         * buildbot/status/html.py (StatusResourceBuild.body): same
4294         * buildbot/test/test_run.py (Status.testSlave): same
4296 2004-09-20  Brian Warner  <warner@lothar.com>
4298         * docs/users.xhtml: update concepts
4300         * Makefile: add a convenience makefile, for things like 'make
4301         test'. It is not included in the source tarball.
4303 2004-09-16  Brian Warner  <warner@lothar.com>
4305         * NEWS: mention /usr/bin/buildbot, debian/*
4307         * debian/*: add preliminary debian packaging. Many thanks to
4308         Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
4309         it considerably since it left their hands, I am responsible for
4310         all breakage that's resulted.
4312         * bin/buildbot: create a top-level 'buildbot' command, to be
4313         installed in /usr/bin/buildbot . For now it's just a simple
4314         frontend to mktap/twistd/kill, but eventually it will be the entry
4315         point to the 'try' command and also a status client. It is also
4316         intended to support the upcoming debian-packaging init.d scripts.
4317         * buildbot/scripts/runner.py: the real work is done here
4318         * buildbot/scripts/__init__.py: need this too
4319         * buildbot/scripts/sample.cfg: this is installed in new
4320         buildmaster directories
4321         * setup.py: install new stuff
4323 2004-09-15  Brian Warner  <warner@lothar.com>
4325         * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4326         'file:' schema (the version shipped with OS-X was built without the
4327         ra_local plugin).
4328         (SetupMixin.tearDown): stop the goofy twisted.web timer which
4329         updates the log-timestamp, to make sure it isn't still running after
4330         the test finishes
4332         * docs/config.xhtml: Add projectName, projectURL, buildbotURL
4333         values to the config file.
4334         * docs/examples/hello.cfg: add examples
4335         * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
4336         * buildbot/status/builder.py (Status.getProjectURL): implement them
4337         * buildbot/master.py (BuildMaster.loadConfig): set them from config
4338         * buildbot/test/test_config.py (ConfigTest.testSimple): test them
4339         * buildbot/status/html.py (WaterfallStatusResource): display them
4342         * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
4343         certain error cases don't suffer a secondary exception.
4344         (top): Skip tests if the corresponding VC tool is not installed.
4346         * buildbot/process/factory.py (Trial): introduce separate
4347         'buildpython' and 'trialpython' lists, since trialpython=[] is
4348         what you want to invoke /usr/bin/python, whereas ./setup.py is
4349         less likely to be executable. Add env= parameter to pass options
4350         to test cases (which is how I usually write tests, I don't know if
4351         anyone else does it this way).
4353         * buildbot/process/step_twisted.py (Trial): handle python=None.
4354         Require 'testpath' be a string, not a list. Fix tests= typo.
4355         (Trial.start): sanity-check any PYTHONPATH value for stringness.
4357         * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4358         way to deal with the possibility of removing the disconnect notify
4359         twice.
4360         (CVS): add a 'login' parameter to give a password to 'cvs login',
4361         commonly used with pserver methods (where pw="" or pw="guest")
4363         * buildbot/slave/commands.py (SourceBase): move common args
4364         extraction and setup() to __init__, so everything is ready by the
4365         time setup() is called
4366         (CVS.start): call 'cvs login' if a password was supplied
4367         (ShellCommand): special-case PYTHONPATH: prepend the master's
4368         value to any existing slave-local value.
4370         * buildbot/process/builder.py (Builder.updateBigStatus): if we
4371         don't have a remote, mark the builder as Offline. This whole
4372         function should probably go away and be replaced by individual
4373         deltas.
4374         (Builder.buildFinished): return the results to the build-finished
4375         deferred callback, helps with testing
4377 2004-09-14  Brian Warner  <warner@lothar.com>
4379         * buildbot/test/test_vc.py: put all the repositories needed to run
4380         the complete tests into a single small (1.3MB) tarball, so I can
4381         make that tarball available on the buildbot web site. Test HTTP
4382         access (for Arch and Darcs) by spawning a temporary web server
4383         while the test runs.
4385         * docs/users.xhtml: new document, describe Buildbot's limited
4386         understanding of different human users
4388         * buildbot/test/test_vc.py: rearrange test cases a bit
4390         * buildbot/process/step_twisted.py (Trial): handle testpath=
4391         * buildbot/process/factory.py (Trial): update to use step.Trial
4393         * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4395         * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4396         the overall build text (which gives you 'failed 2 tests' rather
4397         than just 'failed')
4398         (BuildStepStatus.text2): default to [], not None
4400         * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4401         must be a list
4403 2004-09-12  Brian Warner  <warner@lothar.com>
4405         * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4406         log the whole exception if it's just an AttributeError (old slave)
4408         * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4409         so (e.g.) sub-commands can be run in the right directory.
4410         (ShellCommand.start): accept an optional errorMessage= argument
4411         to make life easier for SVN.start
4412         (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4413         headers
4414         (ShellCommand.start): move ['dir'] compatibility hack..
4415         (RemoteShellCommand.start): .. to here so everyone can use it
4417         * buildbot/process/step_twisted.py (Trial): use .workdir
4419         * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4420         text displayed when debuild fails completely
4421         (Trial): snarf _trial_temp/test.log from the slave and display it
4423 2004-09-11  Brian Warner  <warner@lothar.com>
4425         * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4427         * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4428         set to 'twisted', so --recurse can find twisted/web/test/*, etc
4430         * buildbot/process/step.py (ShellCommand): call .createSummary
4431         before .evaluateCommand instead of the other way around. This
4432         makes it slightly easier to count warnings and then use that to
4433         set results=WARNINGS
4434         * buildbot/process/step_twisted.py: cosmetic, swap the methods
4436         * buildbot/process/base.py (Build.buildFinished): update status
4437         before doing progress. It's embarrassing for the build to be stuck
4438         in the "building" state when an exceptions occurs elsewhere..
4440         * buildbot/status/progress.py (Expectations.expectedBuildTime):
4441         python2.2 doesn't have 'sum'
4443         * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4444         to prevent clients from accidentally sorting it
4446         * buildbot/master.py (Manhole): add username/password
4447         (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4448         c['manholePort'], deprecate old usage
4449         * docs/config.xhtml: document c['manhole']
4450         * docs/examples/hello.cfg: show example of using a Manhole
4453         * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4454         pretend the slave is up to date
4456         * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4457         the module, overlaps with 'log', the local variable
4459         * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4461         * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4462         new method to let Steps find out the version of their
4463         corresponding SlaveCommand.
4464         * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4465         (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4466         (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4467         (SVN.startVC): same
4468         (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4469         (Arch.startVC): same
4470         (P4Sync.startVC): same
4472         * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4473         Deferred so we can catch errors in remote_startCommand
4474         (RemoteShellCommand.start): same
4476         * docs/examples/twisted_master.cfg: update sample config file
4478         * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4479         after connectionMade() is called, not before. Close stdin at that
4480         point too.
4482         * buildbot/process/process_twisted.py: update to use Trial, clean
4483         up argument passing (move to argv arrays instead of string
4484         commands)
4486         * buildbot/process/step_twisted.py (Trial): new step to replace
4487         RunUnitTests, usable by any trial-using project (not just
4488         Twisted). Arguments have changed, see the docstring for details.
4490         * buildbot/process/base.py (Build.startBuild): this now returns a
4491         Deferred. Exceptions that occur during setupBuild are now
4492         caught better and lead to fewer build_status weirdnesses, like
4493         finishing a build that was never started.
4494         (Build.buildFinished): fire the Deferred instead of calling
4495         builder.buildFinished directly. The callback argument is this
4496         Build, everything else can be extracted from it, including the
4497         new build.results attribute.
4498         * buildbot/process/builder.py (Builder.startBuild): same
4499         (Builder.buildFinished): same, extract results from build
4501         * buildbot/process/step.py (ShellCommands): remove dead code
4503 2004-09-08  Brian Warner  <warner@lothar.com>
4505         * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4506         doesn't try to use the leftover patched workdir
4507         (SourceStamp): test source-stamp computation for CVS and SVN
4509         * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4510         patched workdir ('touch .buildbot-patched') so we don't try to
4511         update it later
4512         (SourceBase.start): add ['revision'] for all Source steps
4513         (CVS): change args: use ['branch'] for -r, remove ['files']
4514         (CVS.buildVC): fix revision/branch stuff
4515         (SVN): add revision stuff
4517         * buildbot/process/step.py (BuildStep.__init__): reject unknown
4518         kwargs (except 'workdir') to avoid silent spelling errors
4519         (ShellCommand.__init__): same
4520         (Source): new base class for CVS/SVN/etc. Factor out everything
4521         common, add revision computation (perform the checkout with a -D
4522         DATE or -r REVISION that gets exactly the sources described by the
4523         last Change), overridable with step.alwaysUseLatest. Add patch
4524         handling (build.getSourceStamp can trigger the use of a base
4525         revision and a patch).
4526         (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4527         * docs/steps.xhtml: update docs
4528         * docs/source.xhtml: mention .checkoutDelay
4529         * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4531         * buildbot/process/base.py (Build.setSourceStamp): add a
4532         .sourceStamp attribute to each Build. If set, this indicates that
4533         the build should be done with something other than the most
4534         recent source tree. This will be used to implement "try" builds.
4535         (Build.allChanges): new support method
4536         (Build.lastChangeTime): remove, functionality moved to Source steps
4537         (Build.setupBuild): copy the Step args before adding ['workdir'],
4538         to avoid modifying the BuildFactory (and thus triggering spurious
4539         config changes)
4542         * buildbot/status/html.py: rename s/commits/changes/
4543         (StatusResourceChanges): same
4544         (CommitBox.getBox): same, update URL
4545         (WaterfallStatusResource): same
4546         (StatusResource.getChild): same
4548         * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4549         * contrib/debug.glade: add optional 'revision' to the fakeChange
4551         * buildbot/changes/changes.py (html_tmpl): display .revision
4552         (ChangeMaster.addChange): note .revision in log
4553         * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4554         accept a ['revision'] attribute
4556         * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4558         * buildbot/master.py (BotMaster.getPerspective): update the
4559         .connected flag in SlaveStatus when it connects
4560         (BotMaster.detach): and when it disconnects
4561         (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4562         (BuildMaster.loadConfig_Builders): walk old list correctly
4564         * buildbot/test/test_config.py: fix prefix= usage
4566 2004-09-06  Brian Warner  <warner@lothar.com>
4568         * NEWS: mention P4
4570         * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4571         poll a P4 depot looking for recent changes. Thanks to Dave
4572         Peticolas for the contribution. Probably needs some testing after
4573         I mangled it.
4575         * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4576         requires manual client setup for each buildslave. Rather
4577         experimental. Thanks again to Dave Peticolas.
4578         * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4580         * buildbot/changes/changes.py (Change): add a .revision attribute,
4581         which will eventually be used to generate source-stamp values.
4583         * buildbot/process/step.py (RemoteCommand.start): use
4584         notifyOnDisconnect to notice when we lose the slave, then treat it
4585         like an exception. This allows LogFiles to be closed and the build
4586         to be wrapped up normally. Be sure to remove the disconnect
4587         notification when the step completes so we don't accumulate a
4588         bazillion such notifications which will fire weeks later (when the
4589         slave finally disconnects normally). Fixes SF#915807, thanks to
4590         spiv (Andrew Bennetts) for the report.
4591         (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4592         really isn't Logged- specific
4593         (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4594         header, since it's almost always going to be appended to an
4595         incomplete line
4596         * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4597         update test to handle use of notifyOnDisconnect
4599         * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4600         don't clear .ETA and .currentBuild when going offline, let the
4601         current build clean up after itself
4603         * buildbot/process/builder.py (Builder.detached): wait a moment
4604         before doing things like stopping the current build, because the
4605         current step will probably notice the disconnect and cleanup the
4606         build by itself
4607         * buildbot/test/test_run.py (Status.tearDown): update test to
4608         handle asynchronous build-detachment
4610         * buildbot/process/base.py (Build.stopBuild): minor shuffles
4612         * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4613         hush a debug message
4615 2004-09-05  Brian Warner  <warner@lothar.com>
4617         * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4618         when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4619         kernels do this: the fcntl module has the F_NOTIFY constant, but
4620         the kernel itself doesn't support the operation. Thanks to Olly
4621         Betts for spotting the problem.
4623         * buildbot/process/step.py (Darcs): new source-checkout command
4624         (Arch): new source-checkout command
4625         (todo_P4): fix constructor syntax, still just a placeholder
4626         * buildbot/test/test_vc.py (VC.testDarcs): test it
4627         (VC.testDarcsHTTP): same, via localhost HTTP
4628         (VC.testArch): same
4629         (VC.testArchHTTP): same
4630         * NEWS: mention new features
4632         * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4633         which tells the step to stash stdout text locally (in .stdout).
4634         Slave-side Commands can use this to make decisions based upon the
4635         output of the the ShellCommand (not just the exit code).
4636         (Darcs): New source-checkout command
4637         (Arch): New source-checkout command, uses .keepStdout in one place
4638         where it needs to discover the archive's default name.
4640         * docs/steps.xhtml: Document options taken by Darcs and Arch.
4641         * docs/source.xhtml: add brief descriptions of Darcs and Arch
4642         * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4644         * buildbot/process/step.py (ShellCommand.describe): add an
4645         alternate .descriptionDone attribute which provides descriptive
4646         text when the step is complete. .description can be ["compiling"],
4647         for use while the step is running, then .descriptionDone can be
4648         ["compile"], used alone when the step succeeds or with "failed" when
4649         it does not. Updated other steps to use the new text.
4650         * buildbot/process/step_twisted.py: same
4651         * buildbot/test/test_run.py: update tests to match
4653 2004-08-30  Brian Warner  <warner@lothar.com>
4655         * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4656         (CVS.__init__): send 'patch' argument to slave
4657         (CVS.start): don't create the LoggedRemoteCommand until start(),
4658         so we can catch a .patch added after __init__
4659         (SVN.__init__): add 'patch' to SVN too
4660         (SVN.start): same
4662         * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4663         argument, to let commands push data into the process' stdin pipe.
4664         Move usePTY to a per-instance attribute, and clear it if 'stdin'
4665         is in use, since closing a PTY doesn't really affect the process
4666         in the right way (in particular, I couldn't run /usr/bin/patch
4667         under a pty).
4668         (SourceBase.doPatch): handle 'patch' argument
4670         * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4671         both CVS and SVN
4673         * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4674         * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4675         versions to master
4676         * buildbot/master.py (BotPerspective.got_commands): get command
4677         versions from slave, give to each builder
4678         * buildbot/process/builder.py (Builder.attached): stash slave
4679         command versions in .remoteCommands
4681         * docs/steps.xhtml: bring docs in-line with reality
4683         * buildbot/process/step.py (CVS.__init__): more brutal
4684         compatibility code removal
4685         (SVN.__init__): same
4687         * buildbot/slave/commands.py (SlaveShellCommand): update docs
4688         (SlaveShellCommand.start): require ['workdir'] argument, remove
4689         the ['dir'] fallback (compatibility will come later)
4690         (SourceBase): update docs
4691         (SourceBase.start): remove ['directory'] fallback
4692         (CVS): update docs
4693         (SVN): update docs
4694         * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4695         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4696         * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4698         * buildbot/process/step.py (RemoteShellCommand.__init__): add
4699         want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4700         code.. I will figure out 0.5.0-compatibility hooks later)
4702 2004-08-30  Brian Warner  <warner@lothar.com>
4704         * buildbot/process/process_twisted.py: rewrite in terms of new
4705         BuildFactory base class. It got significantly shorter. Yay
4706         negative code days.
4708         * buildbot/process/step_twisted.py (HLint.start): fix to make it
4709         work with the new "self.build isn't nailed down until we call
4710         step.start()" scheme: specifically, __init__ is called before the
4711         build has decided on which Changes are going in, so we don't scan
4712         build.allFiles() for .xhtml files until start()
4713         (HLint.commandComplete): use getText(), not getStdout()
4714         (RunUnitTests.start): same: don't use .build until start()
4715         (RunUnitTests.describe): oops, don't report (None) when using
4716         the default reactor
4717         (RunUnitTests.commandComplete): use getText()
4718         (RunUnitTests.createSummary): same
4719         (BuildDebs.commandComplete): same
4721         * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4722         set args['command'] until start(), since our BuildStep is allowed
4723         to change their mind up until that point
4724         (TreeSize.commandComplete): use getText(), not getStdout()
4726         * docs/examples/twisted_master.cfg: update to current standards
4728         * docs/factories.xhtml: update
4729         * buildbot/process/factory.py: implement all the common factories
4730         described in the docs. The Trial factory doesn't work yet, and
4731         I've probably broken all the process_twisted.py factories in the
4732         process. There are compatibility classes left in for things like
4733         the old BasicBuildFactory, but subclasses of them are unlikely to
4734         work.
4735         * docs/examples/glib_master.cfg: use new BuildFactories
4736         * docs/examples/hello.cfg: same
4738         * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4739         explicit 'workdir' args
4741         * buildbot/process/base.py (BuildFactory): move factories to ..
4742         * buildbot/process/factory.py (BuildFactory): .. here
4743         * buildbot/process/process_twisted.py: handle move
4744         * buildbot/test/test_config.py: same
4745         * buildbot/test/test_run.py: same
4746         * buildbot/test/test_steps.py: same
4747         * buildbot/test/test_vc.py: same
4748         * docs/factories.xhtml: same
4750         * NEWS: mention config changes that require updating master.cfg
4752         * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4753         argument to all steps that weren't given one already, pointing at
4754         the "build/" directory.
4756         * docs/examples/hello.cfg: remove explicit 'workdir' args
4758         * docs/factories.xhtml: document standard BuildFactory clases,
4759         including a bunch which are have not yet been written
4761 2004-08-29  Brian Warner  <warner@lothar.com>
4763         * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4764         result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4765         buildbot.status.builder so they aren't quite so internal
4766         * buildbot/process/base.py, buildbot/process/builder.py: same
4767         * buildbot/process/maxq.py, buildbot/process/step.py: same
4768         * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4769         * buildbot/status/mail.py, buildbot/test/test_run.py: same
4770         * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4772         * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4773         to handle new getLogs()-returns-list behavior
4774         (StatusResourceBuildStep.getChild): same
4775         (StepBox.getBox): same
4776         (WaterfallStatusResource.phase0): same
4778         * docs/source.xhtml: document how Buildbot uses version-control
4779         systems (output side: how we get source trees)
4780         * docs/changes.xhtml: rename from sources.xhtml, documents VC
4781         systems (input side: how we learn about Changes)
4783         * buildbot/master.py (Manhole): use ComparableMixin
4784         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4785         * buildbot/changes/mail.py (MaildirSource): same
4786         * buildbot/status/client.py (PBListener): same
4787         * buildbot/status/html.py (Waterfall): same
4788         * buildbot/status/words.py (IRC): same
4790         * NEWS: start describing new features
4792         * buildbot/status/mail.py (MailNotifier): finish implementation.
4793         The message body is still a bit sparse.
4794         * buildbot/test/test_status.py (Mail): test it
4796         * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4797         and __hash__ methods I wind up adding everywhere. Specifically
4798         intended to support the buildbot config-file update scheme where
4799         we compare, say, the old list of IStatusTargets against the new
4800         one and don't touch something which shows up on both lists.
4801         * buildbot/test/test_util.py (Compare): test case for it
4803         * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4804         return a list instead of a dict
4805         (IBuildStepStatus.getLogs): same. The idea is that steps create
4806         logs with vaguely unique names (although their uniqueness is not
4807         guaranteed). Thus a compilation step should create its sole
4808         logfile with the name 'compile', and contribute it to the
4809         BuildStatus. If a step has two logfiles, try to create them with
4810         different names (like 'test.log' and 'test.summary'), and only
4811         contribute the important ones to the overall BuildStatus.
4812         * buildbot/status/builder.py (Event.getLogs): same
4813         (BuildStepStatus): fix default .text and .results
4814         (BuildStepStatus.addLog): switch to list-like .getLogs()
4815         (BuildStepStatus.stepFinished): same
4816         (BuildStatus.text): fix default .text
4817         (BuildStatus.getLogs): temporary hack to return all logs (from all
4818         child BuildStepStatus objects). Needs to be fixed to only report
4819         the significant ones (as contributed by the steps themselves)
4820         * buildbot/test/test_run.py: handle list-like .getLogs()
4821         * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4823 2004-08-28  Brian Warner  <warner@lothar.com>
4825         * buildbot/process/builder.py (Builder.attached): serialize the
4826         attachment process, so the attach-watcher isn't called until the
4827         slave is really available. Add detached watchers too, which makes
4828         testing easier.
4830         * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4832         * buildbot/test/test_swap.py: remove dead code
4834         * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4835         (ShellCommand.start): treat errors in _startCommand/spawnProcess
4836         sort of as if the command being run exited with a -1. There may
4837         still be some holes in this scheme.
4838         (CVSCommand): add 'revision' tag to the VC commands, make sure the
4839         -r option appears before the module list
4840         * buildbot/process/step.py (CVS): add 'revision' argument
4842         * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4843         when sending updates or stepComplete messages to the master, since
4844         we don't currently care whether they arrive or not. When we revamp
4845         the master/slave protocol to really resume interrupted builds,
4846         this will need revisiting.
4847         (lostRemote): remove spurious print
4849         * buildbot/master.py (BotPerspective.attached): serialize the
4850         new-builder interrogation process, to make testing easier
4851         (BotMaster.waitUntilBuilderDetached): convenience function
4853         * buildbot/status/builder.py (BuilderStatus): prune old builds
4854         (BuildStatus.pruneSteps): .. and steps
4855         (BuildStepStatus.pruneLogs): .. and logs
4856         (BuilderStatus.getBuild): handle missing builds
4857         * buildbot/status/html.py (StatusResourceBuild.body): display build
4858         status in the per-build page
4859         (BuildBox.getBox): color finished builds in the per-build box
4861 2004-08-27  Brian Warner  <warner@lothar.com>
4863         * buildbot/status/mail.py (MailNotifier): new notification class,
4864         not yet finished
4866         * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4867         variants of a common base class which handles all the mode= logic
4869         * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4870         convenience method
4871         * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4873 2004-08-26  Brian Warner  <warner@lothar.com>
4875         * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4876         interfaces
4878         * buildbot/test/test_run.py: update to new Logfile interface, new
4879         buildbot.slave modules
4880         * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4882         * MANIFEST.in: new sample config file
4883         * docs/examples/hello.cfg: same
4885         * buildbot/process/step_twisted.py: remove dead import
4887         * buildbot/process/step.py (RemoteCommand.run): catch errors
4888         during .start
4889         (RemoteCommand.remote_update): ignore updates that arrive after
4890         we've shut down
4891         (RemoteCommand.remote_complete): ignore duplicate complete msgs
4892         (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4893         the responsibilities of the subclass's methods
4894         (BuildStep.failed): catch errors during failure processing
4895         (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4896         (CVS): move to a mode= argument (described in docstring), rather
4897         than the ungainly clobber=/export=/copydir= combination.
4898         (SVN): add mode= functionality to SVN too
4899         (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4901         * buildbot/process/base.py (Build.startNextStep): catch errors
4902         during s.startStep()
4904         * buildbot/clients/base.py: update to new PB client interface.
4905         gtkPanes is still broken
4907         * buildbot/bot.py, buildbot/slavecommand.py: move to..
4908         * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4909         * setup.py: add buildbot.slave module
4910         * buildbot/bb_tap.py: handle move
4911         * buildbot/slave/registry.py: place to register commands, w/versions
4912         * buildbot/slave/bot.py: major simplifications
4913         (SlaveBuilder.remote_startCommand): use registry for slave commands,
4914         instead of a fixed table. Eventually this will make the slave more
4915         extensible. Use 'start' method on the command, not .startCommand.
4916         Fix unsafeTracebacks handling (I think).
4917         * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4918         helper class with a .start method that returns a Deferred.
4919         SlaveShellCommand is the form reached by the buildmaster. Commands
4920         which use multiple ShellCommands can just chain them as Deferreds,
4921         with some helper methods in Command (_abandonOnFailure and
4922         _checkAbandoned) to bail on rc!=0.
4923         (CVSCommand): prefer new mode= argument
4924         (SVNFetch): add mode= argument
4926         * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4927         put a useful reason string on the build
4929         * buildbot/status/builder.py (LogFile): do LogFile right: move the
4930         core functionality into an IStatusLog object
4931         (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4932         * buildbot/status/html.py (TextLog): HTML-rendering goes here
4933         (StatusResourceBuild.body): use proper accessor methods
4934         * buildbot/status/client.py (RemoteLog): PB-access goes here
4935         (StatusClientPerspective.perspective_subscribe): add "full" mode,
4936         which delivers log contents too
4937         (PBListener.__cmp__): make PBListeners comparable, thus removeable
4938         * buildbot/status/event.py: remove old Logfile completely
4940         * buildbot/interfaces.py (IStatusLog.subscribe): make the
4941         subscription interface for IStatusLog subscriptions just like all
4942         other the status subscriptions
4943         (IStatusReceiver.logChunk): method called on subscribers
4945 2004-08-24  Brian Warner  <warner@lothar.com>
4947         * buildbot/process/builder.py (Builder._pong): oops, ping response
4948         includes a result (the implicit None returned by remote_print).
4949         Accept it so the _pong method handles the response correctly.
4951 2004-08-06  Brian Warner  <warner@lothar.com>
4953         * buildbot/test/test_config.py: update IRC, PBListener tests
4955         * buildbot/status/client.py (StatusClientPerspective): total
4956         rewrite to match new IStatus interfaces. New subscription scheme.
4957         There are still a few optimizations to make (sending down extra
4958         information with event messages so the client doesn't have to do a
4959         round trip). The logfile-retrieval code is probably still broken.
4960         Moved the PB service into its own port, you can no longer share a
4961         TCP socket between a PBListener and, say, the slaveport (this
4962         should be fixed eventually).
4963         * buildbot/clients/base.py (Client): revamp to match. still needs
4964         a lot of work, but basic event reporting works fine. gtkPanes is
4965         completely broken.
4967         * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4968         instance talks to a single irc server. Threw out all the old
4969         multi-server handling code. Still need to add back in
4970         builder-control (i.e. "force build")
4972         * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4973         more random text to the as-yet-unreachable per-step page
4975         * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4976         rename to stepETAUpdate
4977         (BuildStatus.subscribe): add build-wide ETA updates
4978         (BuilderStatus.getState): remove more cruft
4979         (BuilderStatus.getCurrentBuild): remove more cruft
4980         (BuilderStatus.buildStarted): really handle tuple-subscription
4981         * buildbot/test/test_run.py (Status.testSlave): handle the
4982         stepETAUpdate rename
4984         * buildbot/master.py (BuildMaster): don't add a default
4985         StatusClientService. Don't add a default IrcStatusFactory. Both
4986         are now added through c['status'] in the config file. c['irc'] is
4987         accepted for backwards compatibility, the only quirk is you cannot
4988         use c['irc'] to specify IRC servers on ports other than 6667.
4990         * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4991         (IStatusReceiver.buildStarted): allow update-interval on subscribe
4992         (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4993         (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4996         * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4997         the buildmaster to re-read its config file
5000         * buildbot/test/test_web.py (test_webPortnum): need a new hack to
5001         find out the port our server is running on
5002         (WebTest.test_webPathname_port): same
5004         * buildbot/test/test_config.py (testWebPortnum): test it
5005         (testWebPathname): ditto
5007         * docs/config.xhtml: document new c['status'] configuration option
5009         * buildbot/status/html.py (Waterfall): new top-level class which
5010         can be added to c['status']. This creates the Site as well as the
5011         necessary TCPServer/UNIXServer. It goes through the BuildMaster,
5012         reachable as .parent, for everything.
5014         * buildbot/master.py (Manhole): make it a normal service Child
5015         (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
5016         webPathname. It will eventually replace c['irc'] and the implicit
5017         PB listener as well. c['webPortnum'] and c['webPathname'] are left
5018         in as (deprecated) backward compatibility hooks for now.
5021         * buildbot/process/builder.py (Builder.buildFinished): don't
5022         inform out builder_status about a finished build, as it finds out
5023         through its child BuildStatus object
5025         * buildbot/status/html.py: extensive revamp. Use adapters to make
5026         Boxes out of BuildStepStatus and friends. Acknowledge that Steps
5027         have both starting and finishing times and adjust the waterfall
5028         display accordingly, using spacers if necessary. Use SlaveStatus
5029         to get buildslave info.
5030         (StatusResourceBuildStep): new just-one-step resource, used to get
5031         logfiles. No actual href to it yet.
5033         * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
5034         the time being, until I get the file-naming scheme right
5036         * buildbot/status/builder.py (Event): clean started/finished names
5037         (BuildStatus.isFinished): .finished is not None is the right test
5038         (BuildStatus.buildStarted): track started/finished times ourselves
5039         (BuilderStatus.getSlave): provide access to SlaveStatus object
5040         (BuilderStatus.getLastFinishedBuild): all builds are now in
5041         .builds, even the currently-running one. Accomodate this change.
5042         (BuilderStatus.eventGenerator): new per-builder event generator.
5043         Returns BuildStepStatus and BuildStatus objects, since they can
5044         both be adapted as necessary.
5045         (BuilderStatus.addEvent): clean up started/finished attributes
5046         (BuilderStatus.startBuild,finishBuild): remove dead code
5047         (SlaveStatus): new object to provide ISlaveStatus
5049         * buildbot/process/step.py (ShellCommand.getColor): actually
5050         return the color instead of setting it ourselves
5051         (CVS.__init__): pull .timeout and .workdir options out of
5052         **kwargs, since BuildStep will ignore them. Without this neither
5053         will be sent to the slave correctly.
5054         (SVN.__init__): same
5056         * buildbot/process/builder.py (Builder): move flags to class-level
5057         attributes
5058         (Builder.attached): remove .remoteInfo, let the BotPerspective and
5059         SlaveStatus handle that
5061         * buildbot/process/base.py (Build.firstEvent): remove dead code
5062         (Build.stopBuild): bugfix
5064         * buildbot/changes/pb.py (PBChangeSource.describe): add method
5066         * buildbot/changes/changes.py (Change): add IStatusEvent methods
5067         (ChangeMaster.eventGenerator): yield Changes, since there are now
5068         Adapters to turn them into HTML boxes
5070         * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
5071         (BotPerspective.attached): feed a SlaveStatus object
5072         (BuildMaster.loadConfig): add a manhole port (debug over telnet)
5073         (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
5075         * buildbot/interfaces.py: API additions
5076         (ISlaveStatus): place to get slave status
5078 2004-08-04  Brian Warner  <warner@lothar.com>
5080         * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
5081         the delay finishes, so the step is marked as SUCCESS
5083         * buildbot/test/test_run.py (Status.testSlave): cover more of
5084         IBuildStatus and IBuildStepStatus
5086         * buildbot/status/progress.py (StepProgress): move some flags to
5087         class-level attributes
5088         (StepProgress.remaining): if there are no other progress metrics
5089         to go by, fall back to elapsed time
5090         (StepProgress.setExpectations): take a dict of metrics instead of
5091         a list
5092         (BuildProgress.setExpectationsFrom): pull expectations from the
5093         Expectations, instead of having it push them to the BuildProgress
5094         (Expectations): move some flags to class-level attributes
5095         (Expectations.__init__): copy per-step times from the
5096         BuildProgress too
5097         (Expectations.expectedBuildTime): new method for per-build ETA
5099         * buildbot/status/event.py (Logfile): move some flags to
5100         class-level attributes
5101         (Logfile.logProgressTo): better method name, let step set the
5102         progress axis name (instead of always being "output")
5104         * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
5105         times directly, rather than depending upon the (possibly missing)
5106         .progress object. Use 'None' to indicate "not started/finished
5107         yet"
5108         (BuildStepStatus.getExpectations): oops, return the full list of
5109         expectations
5110         (BuilderStatus._buildFinished): append finished builds to .builds
5112         * buildbot/process/step.py (BuildStep): add separate .useProgress
5113         flag, since empty .progressMetrics[] still implies that time is a
5114         useful predictor
5115         (CVS): set up the cmd in __init__, instead of waiting for start()
5117         * buildbot/process/base.py (Build.startBuild): disable the 'when'
5118         calculation, this will eventually turn into a proper sourceStamp
5119         (Build.setupBuild): tell the Progress to load from the Expectations,
5120         instead of having the Expectations stuff things into the Progress
5121         (Build.buildException): add a build-level errback to make sure the
5122         build's Deferred fires even in case of exceptions
5124         * buildbot/master.py (BotMaster.forceBuild): convey the reason into
5125         the forced build
5126         * buildbot/process/builder.py (Builder.forceBuild): convey the
5127         reason instead of creating a fake Change
5129         * docs/examples/twisted_master.cfg: update to match reality
5131         * buildbot/test/test_config.py, buildbot/test/test_process.py:
5132         * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5133         fix or remove broken/breaking tests
5135         * buildbot/status/event.py (Logfile.__len__): remove evil method
5137         * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5138         missing .build, for test convenience
5140         * buildbot/process/step_twisted.py: import fixes
5142         * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5144         * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5145         .statusbag reference
5147         * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5148         connection at shutdown, and stop it from reconnecting
5150         * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5151         chase down remote-execution bugs
5153         * buildbot/process/step.py: more fixes, remove
5154         BuildStep.setStatus()
5155         * buildbot/status/builder.py: move setStatus() functionality into
5156         BuildStatus.addStep
5157         * buildbot/status/event.py: minor fixes
5159 2004-08-03  Brian Warner  <warner@lothar.com>
5161         * buildbot/process/base.py, buildbot/process/builder.py
5162         * buildbot/process/step.py, buildbot/status/builder.py
5163         * buildbot/status/event.py, buildbot/test/test_run.py:
5164         fix status delivery, get a basic test case working
5165         * buildbot/master.py: finish implementing basic status delivery,
5166         temporarily disable HTML/IRC/PB status sources
5168         * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5170         * buildbot/status/progress.py (BuildProgress): remove dead code
5172         * buildbot/interfaces.py
5173         * buildbot/process/base.py, buildbot/process/builder.py
5174         * buildbot/process/step.py, buildbot/process/step_twisted.py
5175         * buildbot/status/builder.py: Complete overhaul of the all
5176         status-delivery code, unifying all types of status clients (HTML,
5177         IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5178         look like. This commit is a checkpointing of the work-in-progress:
5179         the input side is mostly done (Builders/Builds sending status
5180         to the BuilderStatus/BuildStatus objects), but the output side has
5181         not yet been started (HTML resources querying BuilderStatus
5182         objects). Things are probably very broken right now and may remain
5183         so for several weeks, I apologize for the disruption.
5185         * buildbot/status/event.py: add a setHTML method to use pre-rendered
5186         HTML as the log's contents. Currently used for exception tracebacks.
5187         * buildbot/status/progress.py: minor spelling changes
5189 2004-08-02  Brian Warner  <warner@lothar.com>
5191         * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
5192         in mozilla. Also added stylesheets copied from Twisted's docs.
5193         Remember that these files are meant to be run through Lore first.
5194         Thanks to Philipp Frauenfelder for the fixes.
5195         * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
5196         * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
5197         * docs/template.tpl: added a Lore template
5199 2004-07-29  Brian Warner  <warner@lothar.com>
5201         * buildbot/interfaces.py: revamp status delivery. This is the
5202         preview: these are the Interfaces that will be provided by new
5203         Builder code, and to which the current HTML/IRC/PB status
5204         displayers will be adapted.
5206         * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
5207         on the SlaveBuilder, not the Bot.
5208         * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
5209         SlaveBuilder.usePTY
5210         * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
5211         set .usePTY on the FakeSlaveBuilder
5213 2004-07-25  Brian Warner  <warner@lothar.com>
5215         * buildbot/changes/freshcvs.py: add some debug log messages
5216         (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
5217         disabled 'setFilter' syntax
5218         (FreshCVSSourceNewcred.__init__): warn about prefix= values that
5219         don't end with a slash
5221         * buildbot/process/base.py (Builder._pong_failed): add TODO note
5223         * setup.py: bump to 0.5.0+ while between releases
5225 2004-07-23  Brian Warner  <warner@lothar.com>
5227         * setup.py (version): Releasing buildbot-0.5.0
5229 2004-07-23  Brian Warner  <warner@lothar.com>
5231         * README: update for 0.5.0 release
5233         * NEWS: update for 0.5.0 release
5235 2004-07-22  Brian Warner  <warner@lothar.com>
5237         * buildbot/slavecommand.py (ShellCommand): make usePTY a
5238         mktap-time configuration flag (--usepty=1, --usepty=0)
5239         * buildbot/bot.py: same
5241         * buildbot/master.py (BotPerspective.got_dirs): don't complain about
5242         an 'info' directory being unwanted
5244         * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
5245         newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
5246         the default. To communicate with an oldcred daemond (CVSToys-1.0.9
5247         and earlier), use a FreshCVSSourceOldcred instead.
5248         (test): simple test routine: connect to server, print changes
5250         * buildbot/changes/changes.py (Change.getTime): make it possible
5251         to print un-timestamped changes
5253         * buildbot/master.py (makeApp): delete ancient dead code
5254         (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
5255         * buildbot/test/test_config.py (testFindConfigFile): test it
5257         * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
5258         instead of win32 one
5261         * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
5262         now takes a dictionary instead of a tuple. See docs/config.xhtml for
5263         details.
5265         * buildbot/process/base.py (Builder.__init__): change constructor
5266         to accept a dictionary of config data, rather than discrete
5267         name/slave/builddir/factory arguments
5269         * docs/examples/twisted_master.cfg: update to new syntax
5270         * docs/examples/glib_master.cfg: same
5271         * buildbot/test/test_config.py (ConfigTest.testBuilders): some
5272         rough tests of the new syntax
5274         
5275         * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
5276         to be an int, which means "run a web.distrib sub-server on a TCP
5277         port". This lets you publish the buildbot status page to a remote
5278         twisted.web server (using distrib.ResourceSubscription). Also
5279         rename the local attributes used to hold these web things so
5280         they're more in touch with reality.
5281         * buildbot/test/test_web.py: test webPortnum and webPathname
5282         * docs/config.xhtml: document this new use of webPathname
5284         * docs/config.xhtml: new document, slightly ahead of reality
5285         
5286         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
5287         'prefix' handling: treat it as a simple string to check with
5288         .startswith, instead of treating it as a directory. This allows
5289         sub-directories to be used. If you use prefix=, you should give it
5290         a string that starts just below the CVSROOT and ends with a slash.
5291         This prefix will be stripped from all filenames, and filenames
5292         which do not start with it will be ignored.
5294 2004-07-20  Cory Dodt  <corydodt@twistedmatrix.com>
5296         * contrib/svn_buildbot.py: Add --include (synonym for --filter)
5297         and --exclude (inverse of --include).  SVN post-commit hooks
5298         now have total control over which changes get sent to buildbot and which
5299         do not.
5301 2004-07-10  Brian Warner  <warner@lothar.com>
5303         * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
5304         test case to match new API
5306         * buildbot/status/event.py (Logfile.getEntries): fix silly bug
5307         which crashed HTML display when self.entries=[] (needed to
5308         distinguish between [], which means "no entries yet", and None,
5309         which means "the entries have been swapped out to disk, go fetch
5310         them").
5312 2004-07-04  Brian Warner  <warner@lothar.com>
5314         * buildbot/process/step_twisted.py (countFailedTests): Count
5315         skips, expectedFailures, and unexpectedSuccesses. Start scanning
5316         10kb from the end because any import errors are wedged there and
5317         they would make us think the test log was unparseable.
5318         (RunUnitTests.finishStatus): add skip/todo counts to the event box
5320 2004-06-26  Brian Warner  <warner@lothar.com>
5322         * buildbot/process/step_twisted.py (RemovePYCs): turn the
5323         delete-*.pyc command into an actual BuildStep, so we can label it
5324         nicely
5325         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5326         (FullTwistedBuildFactory): same
5328 2004-06-25  Cory Dodt  <corydodt@twistedmatrix.com>
5330         * contrib/fakechange.py: Add an errback when sending the fake 
5331         change, so we know it didn't work.
5333 2004-06-25  Christopher Armstrong  <radix@twistedmatrix.com>
5335         * buildbot/process/step_twisted.py: Delete *.pyc files before
5336         calling trial, so it doesn't catch any old .pyc files whose .py
5337         files have been moved or deleted.
5339         * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
5340         parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
5341         imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
5342         instead of ["twisted.test"], so that the end result is "trial -R
5343         twisted".
5345         * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
5346         regular expression to match filenames that should be ignored when
5347         changed. Also add a --revision parameter that specifies the
5348         revision to examine, which is useful for debugging.
5350 2004-06-25  Brian Warner  <warner@lothar.com>
5352         * buildbot/process/step_twisted.py (trialTextSummarizer): create a
5353         summary of warnings (like DeprecationWarnings), next to the
5354         "summary" file
5356 2004-05-13  Brian Warner  <warner@lothar.com>
5358         * docs/examples/twisted_master.cfg: enable the win32 builder, as
5359         we now have a w32 build slave courtesy of Mike Taylor.
5361         * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5362         so broken. Fixed a race condition that tripped up interlocked
5363         builds and caused the status to be stuck at "Interlocked" forever.
5364         The twisted buildbot's one interlocked build just so happened to
5365         never hit this case until recently (the feeding builds both pass
5366         before the interlocked build is attempted.. usually it has to wait
5367         a while).
5368         (Builder._pong_failed): fix method signature
5370         * setup.py: bump to 0.4.3+ while between releases
5372 2004-04-30  Brian Warner  <warner@lothar.com>
5374         * setup.py (version): Releasing buildbot-0.4.3
5376 2004-04-30  Brian Warner  <warner@lothar.com>
5378         * MANIFEST.in: add the doc fragments in  docs/*.xhtml
5380         * README: update for 0.4.3 release
5382         * NEWS: update for 0.4.3 release
5384         * buildbot/master.py (BuildMaster.__getstate__): make sure
5385         Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5387         * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5388         .trial as a class attribute, for upgrade from 0.4.2
5390         * buildbot/changes/changes.py (Change.links): add .links for
5391         upgrade from 0.4.2
5393         * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5394         .textWatchers and .htmlWatchers at save time, since they are both
5395         volatile, should allow smooth 0.4.2 upgrade
5397         * buildbot/process/step.py (CVS.finishStatus): catch failed
5398         CVS/SVN commands so we can make the status box red
5400 2004-04-29  Brian Warner  <warner@lothar.com>
5402         * buildbot/changes/freshcvs.py
5403         (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5404         code to do setFilter(), which tells the freshcvs daemon to not
5405         send us stuff that we're not interested in. I will uncomment it
5406         when a new version of CVSToys is available in which setFilter()
5407         actually works, and I get a chance to test it better.
5409         * docs/examples/twisted_master.cfg: start using a PBChangeSource
5411         * buildbot/master.py (Dispatcher): use a registration scheme
5412         instead of hardwired service names
5413         (BuildMaster): keep track of the Dispatcher to support
5414         registration
5416         * buildbot/changes/changes.py (ChangeMaster): create a distinct
5417         PBChangeSource class instead of having it be an undocumented
5418         internal feature of the ChangeMaster. Split out the code into a
5419         new file.
5420         * buildbot/changes/pb.py (PBChangeSource): same
5421         * buildbot/test/test_changes.py: a few tests for PBChangeSource
5423         * docs/{factories|sources|steps}.xhtml: document some pieces
5425         * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5426         using FCMaildirSource
5427         (f23osx): update OS-X builder to use python2.3, since the slave
5428         was updated to Panther (10.3.3)
5430 2004-03-21  Brian Warner  <warner@lothar.com>
5432         * buildbot/process/process_twisted.py: factor out doCheckout, change
5433         to use SVN instead of CVS
5435         * buildbot/process/base.py (BasicBuildFactory): refactor to make
5436         an SVN subclass easier
5437         (BasicSVN): subclass which uses Subversion instead of CVS
5439 2004-03-15  Christopher Armstrong  <radix@twistedmatrix.com>
5441         * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5442         of /bin/sh on win32
5443         (CVSCommand.cvsComplete): don't assume chdir worked on win32
5445 2004-02-25  Brian Warner  <warner@lothar.com>
5447         * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5448         is now either a list (which is passed to spawnProcess directly) or
5449         a string (which gets passed to /bin/sh -c). This removes the useSH
5450         flag and the ArgslistCommand class. Also send status header at the
5451         start and end of each command, instead of having the master-side
5452         code do that.
5453         (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5454         -r'. Update to use list-based arguments.
5455         (SVNFetch): use list-based arguments, use ['dir'] argument to
5456         simplify code.
5457         * buildbot/test/test_steps.py (Commands): match changes
5459         * buildbot/process/step.py (InternalShellCommand.words): handle
5460         command lists
5461         (SVN): inherit from CVS, cleanup
5463         * buildbot/status/event.py (Logfile.content): render in HTML, with
5464         stderr in red and headers (like the name of the command we're
5465         about to run) in blue. Add link to a second URL (url + "?text=1")
5466         to get just stdout/stderr in text/plain without markup. There is
5467         still a problem with .entries=None causing a crash, it seems to occur
5468         when the logfile is read before it is finished.
5470         * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5471         timeout to the keepalives, and use it to explicitly do a
5472         loseConnection instead of waiting for TCP to notice the loss. This
5473         ought to clear up the silent-lossage problem.
5474         (unsafeTracebacks): pass exception tracebacks back to the master,
5475         makes it much easier to debug problems
5477 2004-02-23  Brian Warner  <warner@lothar.com>
5479         * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5480         the whole command to /bin/sh instead of execve [Johan Dahlin]
5481         (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5482         '-r HEAD' [Johan Dahlin]
5483         (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5485         * buildbot/changes/changes.py (Change): add links= argument, add
5486         asHTML method [Johan Dahlin]. Modified to make a bit more
5487         XHTMLish. Still not sure how to best use links= .
5489         * buildbot/status/html.py (StatusResourceCommits.getChild): use 
5490         Change.asHTML to display the change, not asText
5492         * buildbot/status/html.py (StatusResourceBuilder): web button to
5493         ping slave
5495         * buildbot/test/test_run.py: test to actually start a buildmaster
5496         and poke at it
5498         * MANIFEST.in: bring back accidentally-dropped test helper files
5500         * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5501         that require cvstoys if it is not installed
5503         * buildbot/process/step_twisted.py (RunUnitTests): allow other
5504         values of "bin/trial" [Dave Peticolas]
5505         (RunUnitTests.finishStatus): say "no tests run" instead of "0
5506         tests passed" when we didn't happen to run any tests
5508         * buildbot/process/step.py (Compile): use haltOnFailure instead of
5509         flunkOnFailure [Johan Dahlin]
5511         * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5512         multiple instances of the same Step class by suffixing "_2", etc,
5513         to the name until it is unique. This name needs to be unique
5514         because it is used as a key in the dictionary that tracks build
5515         progress.
5516         * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5517         add test for it
5519         * buildbot/process/base.py (Builder.ping): add "ping slave" command
5521 2004-01-14  Brian Warner  <warner@lothar.com>
5523         * buildbot/status/words.py (IrcStatusBot): when we leave or get
5524         kicked from a channel, log it
5526         * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5527         something over whatever IRC channels the buildmaster is currently
5528         connected to. Added to try and track down a problem in which the
5529         master thinks it is still connected but the IRCd doesn't see it. I
5530         used a styles.Versioned this time, so hopefully users won't have
5531         to rebuild their .tap files this time.
5532         * contrib/debug.glade: add a "Poke IRC" button
5533         * contrib/debugclient.py: same
5535         * setup.py: bump to 0.4.2+ while between releases
5537 2004-01-08  Brian Warner  <warner@lothar.com>
5539         * setup.py (version): Releasing buildbot-0.4.2
5541 2004-01-08  Brian Warner  <warner@lothar.com>
5543         * NEWS: update for 0.4.2 release
5545         * README: document how to run the tests, now that they all pass
5547         * buildbot/changes/maildir.py (Maildir.poll): minor comment
5549         * buildbot/process/step.py (CVS): add a global_options= argument,
5550         which lets you set CVS global options for the command like "-r"
5551         for read-only checkout, or "-R" to avoid writing in the
5552         repository.
5553         * buildbot/slavecommand.py (CVSCommand): same
5555         * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5556         testing easier (it is turned off when testing, to avoid the
5557         leftover timer)
5559         * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5560         to make it easier to test: break generateStepID() out to a
5561         separate function, only update statusbag if it exists.
5562         (ShellCommands): create useful text for dict-based commands too.
5564         * test/*, buildbot/test/*: move unit tests under the buildbot/
5565         directory
5566         * setup.py (packages): install buildbot.test too
5568         * buildbot/test/test_slavecommand.py: fix it, tests pass now
5569         * buildbot/test/test_steps.py: fix it, tests pass now
5571 2004-01-06  Brian Warner  <warner@lothar.com>
5573         * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5574         freshcvs mail uses a slightly different syntax for new
5575         directories. Update parser to handle either.
5576         * test/test_mailparse.py (Test1.testMsg9): test for same
5578 2003-12-21  Brian Warner  <warner@lothar.com>
5580         * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5581         'warnOnWarnings' so that lintian errors mark the build orange
5583 2003-12-17  Brian Warner  <warner@lothar.com>
5585         * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5586         messages emitted by Bonsai, contributed by Stephen Davis.
5588         * test/*: moved all tests to use trial instead of unittest. Some
5589         still fail (test_steps, test_slavecommand, and test_process).
5591         * setup.py (version): bump to 0.4.1+ while between releases
5593 2003-12-09  Brian Warner  <warner@lothar.com>
5595         * setup.py (version): Releasing buildbot-0.4.1
5597 2003-12-09  Brian Warner  <warner@lothar.com>
5599         * NEWS: update for 0.4.1 release
5601         * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5602         freebsd builder code a little bit
5604         * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5605         don't try to compare attributes of different classes
5606         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5607         (MaildirSource.messageReceived): fix Change delivery
5609         * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5610         into the config file's namespace before loading it, like the
5611         documentation claims it does
5612         * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5613         (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5614         daemon comes back online
5616 2003-12-08  Brian Warner  <warner@lothar.com>
5618         * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5619         so the example will work with online=0 as well
5621         * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5622         fix the __implements__ line
5624         * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5625         class a twisted.application.service.Service, use startService to
5626         get it moving.
5628         * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5629         directory fd instead of simple open(). I'm sure this used to work,
5630         but the current version of python refuses to open directories with
5631         open().
5633 2003-12-05  Brian Warner  <warner@lothar.com>
5635         * setup.py (version): bump to 0.4.0+ while between releases
5637 2003-12-05  Brian Warner  <warner@lothar.com>
5639         * setup.py (version): Releasing buildbot-0.4.0
5641 2003-12-05  Brian Warner  <warner@lothar.com>
5643         * docs/examples/glib_master.cfg: replace old sample scripts with
5644         new-style config files
5645         * MANIFEST.in: include .cfg files in distribution tarball
5647         * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5648         implement a dummy method to avoid the exception that occurs when
5649         freshcvs sends this to us.
5651         * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5652         removed the method, as it broke reconnection. Apparently
5653         stopFactory is called each time the connection attempt fails. Must
5654         rethink this.
5655         (ReconnectingPBClientFactory.__getstate__): squash the _callID
5656         attribute before serialization, since without stopFactory the
5657         reconnect timer may still be active and they aren't serializable.
5659         * test/test_mailparse.py (ParseTest): test with 'self' argument
5661         * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5662         argument, as these "functions" are invoked like methods from class
5663         attributes and therefore always get an instance as the first
5664         argument.
5666         * buildbot/changes/maildir.py (Maildir.start): fix error in error
5667         message: thanks to Stephen Davis for the catch
5669 2003-12-04  Brian Warner  <warner@lothar.com>
5671         * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5672         twisted's standard ReconnectingClientFactory. Handles both oldcred
5673         and newcred connections. Also has a bug-workaround for
5674         ReconnectingClientFactory serializing its connector when it
5675         shouldn't.
5677         * buildbot/bot.py (BotFactory): rewrite connection layer with new
5678         pbutil. Replace makeApp stuff with proper newcred/mktap
5679         makeService(). Don't serialize Ephemerals on shutdown.
5681         * buildbot/changes/changes.py (ChangeMaster): make it a
5682         MultiService and add the sources as children, to get startService
5683         and stopService for free. This also gets rid of the .running flag.
5685         * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5686         new pbutil, turn into a TCPClient at the same time (to get
5687         startService for free). Two variants exist: FreshCVSSourceOldcred
5688         and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5689         yet, but when it does, we'll be ready).
5690         (FreshCVSSource.notify): handle paths which are empty after the
5691         prefix is stripped. This only happens when the top-level (prefix)
5692         directory is added, at the very beginning of a Repository's life.
5694         * buildbot/clients/base.py: use new pbutil, clean up startup code.
5695         Now the only reconnecting code is in the factory where it belongs.
5696         (Builder.unsubscribe): unregister the disconnect callback when we
5697         delete the builder on command from the master (i.e. when the
5698         buildmaster is reconfigured and that builder goes away). This
5699         fixes a multiple-delete exception when the status client is shut
5700         down afterwards.
5701         * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5702         base Client. 
5704         * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5705         (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5707 2003-10-20  Christopher Armstrong  <radix@twistedmatrix.com>
5709         * contrib/run_maxq.py: Accept a testdir as an argument rather than
5710         a list of globs (ugh). The testdir will be searched for files
5711         named *.tests and run the tests in the order specified in each of
5712         those files. This allows for "dependancies" between tests to be
5713         codified.
5715         * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5716         argument to pass to run_maxq.py, instead of a glob.
5718 2003-10-17  Brian Warner  <warner@lothar.com>
5720         * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5721         files that live in the sandbox
5723 2003-10-15  Brian Warner  <warner@lothar.com>
5725         * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5726         spelling error in "docs" count-warnings output
5727         (HLint.start): stupid thinko meant .xhtml files were ignored
5729         * docs/examples/twisted_master.cfg (reactors): disable cReactor
5730         tests now that cReactor is banished to the sandbox
5732 2003-10-10  Brian Warner  <warner@lothar.com>
5734         * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5735         scheme: now .xhtml are sources and .html are generated
5737 2003-10-08  Brian Warner  <warner@lothar.com>
5739         * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5740         we were ignoring the 'randomly' parameter.
5742 2003-10-01  Brian Warner  <warner@lothar.com>
5744         * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5745         posix, to kill sub-children of aborted slavecommands.
5747         * buildbot/status/builder.py: rename Builder to BuilderStatus.
5748         Clean up initialization: lastBuildStatus remains None until the
5749         first build has been completed.
5751         * buildbot/status/html.py (WaterfallStatusResource.body): handle
5752         None as a lastBuildStatus
5753         * buildbot/clients/gtkPanes.py: same
5755         * buildbot/status/client.py (StatusClientService): keep
5756         BuilderStatus objects in self.statusbags . These objects now live
5757         here in the StatusClientService and are referenced by the Builder
5758         object, rather than the other way around.
5759         * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5760         * buildbot/process/base.py (Builder): same
5761         * test/test_config.py (ConfigTest.testBuilders): same
5763         * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5764         an existing builder, leave the statusbag alone. This will preserve the
5765         event history.
5767         * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5768         hook. This will probably go away in favor of a class in upcoming
5769         Twisted versions.
5771         * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5772         serviceName from newcred FreshCVSNotifiee setup
5774 2003-09-29  Brian Warner  <warner@lothar.com>
5776         * buildbot/process/process_twisted.py: switch to new reactor
5777         abbreviations
5778         * docs/examples/twisted_master.cfg: same
5780         * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5782         * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5783         botmaster reference instead of the oldapp service lookup
5785         * buildbot/master.py (BuildMaster.__init__): give the
5786         StatusClientService a reference to the botmaster to make it easier to
5787         force builds
5789 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5791         * buildbot/status/html.py (Box.td): escape hreffy things so you
5792         can have spaces in things like builder names
5793         (StatusResourceBuilder.body)
5794         (WaterfallStatusResource.body)
5795         (WaterfallStatusResource.body0): same
5797 2003-09-25  Brian Warner  <warner@lothar.com>
5799         * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5800         rearrange the builder list when adding or removing builders: keep
5801         them in the order the user requested.
5802         * test/test_config.py (ConfigTest.testBuilders): verify it
5804         * contrib/debug.glade: give the debug window a name
5806         * buildbot/process/base.py (Builder.buildTimerFired): builders can
5807         now wait on multiple interlocks. Fix code relating to that.
5808         (Builder.checkInterlocks): same
5809         * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5811         * buildbot/master.py (BuildMaster.loadConfig): move from
5812         deprecated pb.BrokerFactory to new pb.PBServerFactory
5813         * test/test_config.py (ConfigTest.testWebPathname): same
5815         * docs/examples/twisted_master.cfg: fix interlock declaration
5817         * buildbot/master.py (BotMaster.addInterlock): move code to attach
5818         Interlocks to their Builders into interlock.py .
5819         (BuildMaster.loadConfig_Interlocks): fix interlock handling
5821         * test/test_config.py (ConfigTest.testInterlocks): validate
5822         interlock handling
5824         * buildbot/process/base.py (Builder.__init__): better comments
5825         * buildbot/process/interlock.py (Interlock.__repr__): same
5826         (Interlock.deactivate): add .active flag, move the code that
5827         attaches/detaches builders into the Interlock
5829 2003-09-24  Christopher Armstrong  <radix@twistedmatrix.com>
5831         * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5832         tests using the new run_maxq.py script, and reporting failures by
5833         parsing its output.
5835         * contrib/run_maxq.py: Hacky little script for running a set of maxq
5836         tests, reporting their success or failure in a buildbot-friendly 
5837         manner.
5839 2003-09-24  Brian Warner  <warner@lothar.com>
5841         * docs/examples/twisted_master.cfg: example of a new-style config
5842         file. This lives in the buildmaster base directory as
5843         "master.cfg".
5845         * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5846         button to make the master re-read its config file
5848         * buildbot/master.py (BuildMaster.loadConfig): new code to load
5849         buildmaster configuration from a file. This file can be re-read
5850         later, and the buildmaster will update itself to match the new
5851         desired configuration. Also use new Twisted Application class.
5852         * test/Makefile, test/test_config.py: unit tests for same
5854         * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5855         FreshCVSSources comparable, to support reload.
5856         * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5858         * buildbot/process/base.py (Builder): make them comparable, make
5859         Interlocks easier to attach, to support reload. Handle
5860         re-attachment of remote slaves.
5861         * buildbot/process/interlock.py (Interlock): same
5863         * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5864         Twisted's new Application class. Requires Twisted >= 1.0.8 .
5865         buildmaster taps are now constructed with mktap.
5866         * buildbot/status/client.py (StatusClientService): same
5868         * buildbot/status/words.py: move to new Services, add support to
5869         connect to multiple networks, add reload support, allow nickname
5870         to be configured on a per-network basis
5872 2003-09-20  Brian Warner  <warner@lothar.com>
5874         * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5875         the freebsd builder, now that the machine has been upgraded and no
5876         longer has python2.2
5878         * setup.py (version): bump to 0.3.5+ while between releases
5880 2003-09-19  Brian Warner  <warner@lothar.com>
5882         * setup.py (version): Releasing buildbot-0.3.5
5884 2003-09-19  Brian Warner  <warner@lothar.com>
5886         * NEWS: add post-0.3.4 notes
5888         * README (REQUIREMENTS): note twisted-1.0.7 requirement
5890         * MANIFEST.in: add contrib/*
5892         * docs/examples/twisted_master.py (twisted_app): all build slaves must
5893         use a remote root now: cvs.twistedmatrix.com
5895         * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5896         to newcred
5897         (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5898         compatibility with old servers
5899         (FreshCVSSource.start): and provide a way to use it
5900         (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5902         * docs/examples/twisted_master.py (twisted_app): update to new
5903         makeApp interface.
5904         (twisted_app): listen on new ~buildbot socket
5905         (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5907         * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5908         to reduce cvs bandwidth (update instead of full checkout)
5910 2003-09-11  Brian Warner  <warner@lothar.com>
5912         * contrib/fakechange.py: demo how to connect to the changemaster
5913         port. You can use this technique to submit changes to the
5914         buildmaster from source control systems that offer a hook to run a
5915         script when changes are committed.
5917         * contrib/debugclient.py: tool to connect to the debug port. You
5918         can use it to force builds, submit fake changes, and wiggle the
5919         builder state
5921         * buildbot/master.py: the Big NewCred Reorganization. Use a single
5922         'Dispatcher' realm to handle all the different kinds of
5923         connections and Perspectives: buildslaves, the changemaster port,
5924         the debug port, and the status client port. NewCredPerspectives
5925         now have .attached/.detached methods called with the remote 'mind'
5926         reference, much like old perspectives did. All the pb.Services
5927         turned into ordinary app.ApplicationServices .
5928         (DebugService): went away, DebugPerspectives are now created
5929         directly by the Dispatcher.
5930         (makeApp): changed interface a little bit
5932         * buildbot/changes/changes.py: newcred
5933         * buildbot/status/client.py: newcred
5935         * buildbot/clients/base.py: newcred client side changes
5936         * buildbot/bot.py: ditto
5938         * docs/examples/glib_master.py: handle new makeApp() interface
5939         * docs/examples/twisted_master.py: ditto
5941         * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5942         base newcred Perspectives on. This should go away once Twisted
5943         itself provides something sensible.
5946 2003-09-11  Christopher Armstrong  <radix@twistedmatrix.com>
5948         * contrib/svn_buildbot.py: A program that you can call from your
5949         SVNREPO/hooks/post-commit file that will notify a BuildBot master
5950         when a change in an SVN repository has happened. See the top of
5951         the file for some minimal usage info.
5953 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5955         * buildbot/slavecommand.py (ArglistCommand): Add new
5956         ArglistCommand that takes an argument list rather than a string as
5957         a parameter. Using a st.split() for argv is very bad.
5959         * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5960         update to a particular revision rather than always checking out
5961         (still not very smart about it, there may be cases where the
5962         checkout becomes inconsistent).
5964 2003-09-10  Christopher Armstrong  <radix@twistedmatrix.com>
5966         * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5967         SVN fetch support. It can checkout (not update!) a specified
5968         revision from a specified repository to a specified directory.
5970         * buildbot/status/progress.py (Expectations.update): Fix an
5971         obvious bug (apparently created by the change described in the
5972         previous ChangeLog message) by moving a check to *after* the
5973         variable it checks is defined.
5976 2003-09-08  Brian Warner  <warner@lothar.com>
5978         * buildbot/status/progress.py (Expectations.update): hack to catch
5979         an exception TTimo sees: sometimes the update() method seems to
5980         get called before the step has actually finished, so the .stopTime
5981         is not set, so no totalTime() is available and we average None
5982         with the previous value. Catch this and just don't update the
5983         metrics, and emit a log message.
5985 2003-08-24  Brian Warner  <warner@lothar.com>
5987         * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5988         parameter to set copydir='original' in CVS commands.
5990         * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5992         * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5993         which tells the command to maintain a separate original-source CVS
5994         workspace. For each build, this workspace will be updated, then
5995         the tree copied into a new workdir. This reduces CVS bandwidth
5996         (from a full checkout to a mere update) while doubling the local
5997         disk usage (to keep two copies of the tree).
5999 2003-08-21  Brian Warner  <warner@lothar.com>
6001         * buildbot/status/event.py (Logfile.addEntry): if the master web
6002         server dies while we're serving a page, request.write raises
6003         pb.DeadReferenceError . Catch this and treat it like a
6004         notifyFinish event by dropping the request.
6006 2003-08-18  Brian Warner  <warner@lothar.com>
6008         * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
6009         (instead of blowing up) if a force-build command is given without
6010         a reason field
6012         * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
6013         don't blow up if there aren't yet any Changes in the list
6015 2003-08-02  Brian Warner  <warner@lothar.com>
6017         * buildbot/bot.py (updateApplication): don't set the .tap name,
6018         since we shouldn't assume we own the whole .tap file
6020         * buildbot/bb_tap.py (updateApplication): clean up code, detect
6021         'mktap buildbot' (without a subcommand) better
6023 2003-07-29  Brian Warner  <warner@lothar.com>
6025         * buildbot/status/words.py
6026         (IrcStatusFactory.clientConnectionLost): when we lose the
6027         connection to the IRC server, schedule a reconnection attempt.
6029         * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
6030         use shutil.rmtree instead of forking off an "rm -rf" command.
6031         rmtree may take a while and will block until it finishes, so we
6032         use "rm -rf" if available.
6034         * docs/examples/twisted_master.py: turn off kqreactor, it hangs
6035         freebsd buildslave badly
6037         * setup.py (version): bump to 0.3.4+ while between releases
6039 2003-07-28  Brian Warner  <warner@lothar.com>
6041         * setup.py (version): Releasing buildbot-0.3.4
6043 2003-07-28  Brian Warner  <warner@lothar.com>
6045         * NEWS: update in preparation for release
6047         * buildbot/slavecommand.py (ShellCommand.doTimeout): use
6048         process.signalProcess instead of os.kill, to improve w32
6049         portability
6051         * docs/examples/twisted_master.py (twisted_app): turn off
6052         win32eventreactor: the tests hang the buildslave badly
6054         * buildbot/process/base.py (Build.buildFinished): update ETA even on
6055         failed builds, since usually the failures are consistent
6057         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6058         add compileOpts/compileOpts2 to reactors build
6060         * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
6061         (twisted_app): use both default and win32eventreactor on w32 build.
6062         Use both default and kqreactor on freebsd build.
6064         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6065         add compileOpts2, which is put after the build_ext argument. w32
6066         needs "-c mingw32" here.
6068         * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
6069         touch .acqpath, it goes away in recent Twisted releases
6071         * docs/examples/twisted_master.py (twisted_app): use "python" for
6072         the w32 buildslave, not "python2.2"
6074         * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
6075         the directory exists.. should hush an exception under w32
6077         * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
6078         ProcessTerminated -provided values for signal and exitCode rather
6079         than parsing the unix status code directly. This should remove one
6080         more roadblock for a w32-hosted buildslave.
6082         * test/test_mailparse.py: add test cases for Syncmail parser
6084         * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
6085         temporary compatibility import. Note! Start importing
6086         FCMaildirSource from changes.mail instead of changes.freshcvsmail
6088         * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
6090 2003-07-27  Brian Warner  <warner@lothar.com>
6092         * NEWS: started adding new features
6094         * buildbot/changes/mail.py: start work on Syncmail parser, move
6095         mail sources into their own file
6097         * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
6098         as implementing IChangeSource
6099         * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
6101         * buildbot/interfaces.py: define the IChangeSource interface
6103 2003-07-26  Brian Warner  <warner@lothar.com>
6105         * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
6107 2003-06-25  Brian Warner  <warner@lothar.com>
6109         * buildbot/status/words.py (IrcStatusBot.emit_last): round off
6110         seconds display
6112 2003-06-17  Brian Warner  <warner@lothar.com>
6114         * buildbot/status/words.py: clean up method usage to avoid error
6115         in silly IRC command
6116         (IrcStatusBot.emit_status): round off seconds display
6118         * buildbot/process/base.py (Build): delete the timer when saving
6119         to the .tap file, and restore it (if it should still be running)
6120         upon restore. This should fix the "next build in -34 seconds"
6121         messages that result when the master is restarted while builds are
6122         sitting in the .waiting slot. If the time for the build has
6123         already passed, start it very soon (in 1 second).
6125         * buildbot/status/words.py: more silly commands
6127         * README (REQUIREMENTS): add URLs to all required software
6129         * buildbot/status/words.py ('last'): mention results of, and time
6130         since last build
6132 2003-05-28  Brian Warner  <warner@lothar.com>
6134         * buildbot/status/words.py: add 'last' command
6135         (IrcStatusBot.emit_status): add current-small text to 'status' output
6137         * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6138         (twisted_app): remove spaces from OS-X builder name
6140         * buildbot/master.py (makeApp): add knob to turn on IRC bot
6141         * buildbot/status/words.py: IRC bot should actually be useful now
6143 2003-05-23  Brian Warner  <warner@lothar.com>
6145         * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6146         "slave information" from $(slavedir)/info/* . These files are
6147         maintained by the slave administrator, and describe the
6148         machine/environment that is hosting the slave. Information from
6149         them is put into the "Builder" HTML page. Still need to establish
6150         a set of well-known filenames and meanings for this data: at the
6151         moment, *all* info/* files are sent to the master, but only
6152         'admin' and 'host' are used on that end.
6153         * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6154         * buildbot/process/base.py (Builder.setRemoteInfo):  ditto
6155         * buildbot/master.py (BotPerspective.got_info):  ditto
6157 2003-05-22  Brian Warner  <warner@lothar.com>
6159         * setup.py (version): bump version to 0.3.3+ while between releases
6161 2003-05-21  Brian Warner  <warner@lothar.com>
6163         * setup.py: Releasing buildbot-0.3.3
6165 2003-05-21  Brian Warner  <warner@lothar.com>
6167         * NEWS: 0.3.3 news items
6169         * README: describe --keepalive and life behind a NAT box
6171         * buildbot/bot.py (Bot.connected): implement application-level
6172         keepalives to deal with NAT timeouts, turn them on with
6173         --keepalive option or when SO_KEEPALIVE doesn't work.
6175         * buildbot/master.py (BotPerspective): accept keepalives silently
6177         * buildbot/process/base.py (Build.buildException): CopiedFailures
6178         don't carry as much information as local ones, so don't try to
6179         create a big HTMLized version of them.
6181         * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6182         log file when step fails due to an exception, such as when the slave
6183         becomes unreachable
6185         * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6186         --testmodule argument instead of grepping for test-case-name tags
6187         ourselves. Remove FindUnitTests code.
6188         * buildbot/slavecommand.py, buildbot/bot.py: remove old code
6190         * MANIFEST.in: Add docs/examples, files under test/ . Oops!
6192 2003-05-16  Brian Warner  <warner@lothar.com>
6194         * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
6195         argument to allow things like CFLAGS=-O0 to be passed without relying
6196         upon /bin/sh processing on the slave.
6198         * buildbot/process/step.py (InternalShellCommand.start): send
6199         'env' dict to slave
6200         * buildbot/slavecommand.py (ShellCommand.start): create argv with
6201         'split' instead of letting /bin/sh do it. This should also remove
6202         the need for /bin/sh on the buildslave, making it more likely to
6203         work with win32.
6205         * buildbot/status/html.py: html-escape text in blamelist.
6206         Add "force build" button to the Builder page.
6208         * buildbot/process/step_twisted.py (countFailedTests): look at
6209         last 1000 characters for status line, as import errors can put it
6210         before the -200 point.
6212 2003-05-15  Brian Warner  <warner@lothar.com>
6214         * docs/examples/twisted_master.py: use clobber=0 for remote builds
6216         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6217         make 'clobber' a parameter, so it is possible to have builds which
6218         do full tests but do a cvs update instead of hammering the CVS
6219         server with a full checkout each build
6221         * buildbot/process/step.py (InternalShellCommand): bump default
6222         timeout to 20 minutes
6224         * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
6225         the master to trigger a build. Run it via manhole.
6227         * buildbot/master.py (BotPerspective.perspective_forceBuild):
6228         allow slaves to trigger any build that they host, to make life
6229         easier for slave admins who are testing out new build processes
6231         * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6232         don't flunk cReactor or qtreactor on failure, since they fail alot
6233         these days. Do warnOnFailure instead.
6235         * buildbot/process/base.py: change Builder.buildable from a list
6236         into a single slot. When we don't have a slave, new builds (once
6237         they make it past the timeout) are now merged into an existing
6238         buildable one instead of being queued. With this change, a slave
6239         which has been away for a while doesn't get pounded with all the
6240         builds it missed, but instead just does a single build.
6242 2003-05-07  Brian Warner  <warner@lothar.com>
6244         * setup.py (version): bump version to 0.3.2+ while between releases
6246 2003-05-07  Brian Warner  <warner@lothar.com>
6248         * setup.py: Releasing buildbot-0.3.2
6250 2003-05-07  Brian Warner  <warner@lothar.com>
6252         * setup.py: fix major packaging error: include subdirectories!
6253         
6254         * NEWS: add changes since last release
6256         * README (REQUIREMENTS): update twisted/python dependencies
6258         * buildbot/status/builder.py (Builder.startBuild): change
6259         BuildProcess API: now they should call startBuild/finishBuild
6260         instead of pushing firstEvent / setLastBuildStatus. Moving towards
6261         keeping a list of builds in the statusbag, to support other kinds of
6262         status delivery.
6263         (Builder.addClient): send current-activity-small to new clients
6264         * buildbot/process/base.py (Build.startBuild, .buildFinished): use
6265         new API
6267         * buildbot/status/client.py: drop RemoteReferences at shutdown
6269         * buildbot/status/event.py (Event.stoppedObserving): oops, add it
6271         * buildbot/status/progress.py (BuildProgress.remote_subscribe):
6272         more debug messages for remote status client
6274         * buildbot/process/step.py (InternalBuildStep.stepComplete)
6275         (.stepFailed): only fire the Deferred once, even if both
6276         stepComplete and stepFailed are called. I think this can happen if
6277         an exception occurs at a weird time.
6279         * buildbot/status/words.py: work-in-progress: IRC status delivery
6281 2003-05-05  Brian Warner  <warner@lothar.com>
6283         * docs/examples/twisted_master.py (twisted_app): hush internal
6284         python2.3 distutils deprecation warnings
6285         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6286         add compileOpts= argument which inserts extra args before the
6287         "setup.py build_ext" command. This can be used to give -Wignore
6288         warnings, to hush some internal python-2.3 deprecation messages.
6290         * buildbot/process/step_twisted.py (RunUnitTests): parameterize
6291         the ['twisted.test'] default test case to make it easier to change
6292         in subclasses
6294         * buildbot/clients/base.py: switch to pb.Cacheable-style Events
6295         * buildbot/clients/gtkPanes.py: ditto
6297         * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
6298         arg to collapse RunUnitTestsRandomly into RunUnitTests
6299         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6300         use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
6302         * buildbot/status/html.py (StatusResource): shuffle Resources
6303         around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
6304         would serve the waterfall display, but the internal links were
6305         only valid on the trailing-slash version. The correct behavior is
6306         for the non-slashed one to serve a Redirect to the slashed one.
6307         This only shows up when the buildbot page is hanging off another
6308         server, like a Twisted-Web distributed server.
6310         * buildbot/status/event.py (Event, RemoteEvent): make Events
6311         pb.Cacheable, with RemoteEvent as the cached version. This removes
6312         a lot of explicit send-an-update code.
6313         * buildbot/status/builder.py (Builder): remove send-update code
6314         * buildbot/status/client.py (ClientBuilder): remove send-update
6315         code, and log errors that occur during callRemote (mostly to catch
6316         InsecureJelly exceptions)
6318         * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6319         run Lore with the same python used in the rest of the build
6321         * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6323         * buildbot/process/step_twisted.py (HLint): accept 'python'
6324         argument. Catch rc!=0 and mark the step as failed. This marks the
6325         build orange ("has warnings").
6326         (RunUnitTestsJelly): move out to step_twisted2.py
6328         * buildbot/util.py (ignoreStaleRefs): add utility function
6330         * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
6331         don't fake ETA object, it's too hard to get right
6333 2003-05-02  Brian Warner  <warner@lothar.com>
6335         * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
6337 2003-05-01  Brian Warner  <warner@lothar.com>
6339         * buildbot/status/html.py (StatusResource.body): oops, I was
6340         missing a <tr>, causing the waterfall page to be misrendered in
6341         everything except Galeon.
6343 2003-04-29  Brian Warner  <warner@lothar.com>
6345         * docs/examples/twisted_master.py: make debuild use python-2.2
6346         explicitly, now that Twisted stopped supporting 2.1
6348         * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
6349         handle tuple results too. I keep forgetting this, which suggests
6350         it needs to be rethought.
6352         * setup.py (setup): bump version to 0.3.1+ while between releases
6353         
6354 2003-04-29  Brian Warner  <warner@lothar.com>
6356         * setup.py: Releasing buildbot-0.3.1
6358 2003-04-29  Brian Warner  <warner@lothar.com>
6360         * README (SUPPORT): add plea to send questions to the mailing list
6362         * NEWS, MANIFEST.in: add description of recent changes
6364         * docs/examples/twisted_master.py: add the code used to create the
6365         Twisted buildmaster, with passwords and such removed out to a
6366         separate file.
6368         * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6369         out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6370         buildmasters to not require CVSToys be installed.
6371         * README, docs/examples/glib_master: update to match the change
6373         * buildbot/clients/base.py, buildbot/bot.py,
6374         buildbot/changes/changes.py, buildbot/pbutil.py: copy
6375         ReconnectingPB from CVSToys distribution to remove CVSToys
6376         dependency for build slaves and status clients. Buildmasters which
6377         use FreshCVSSources still require cvstoys be installed, of course.
6379 2003-04-25  Brian Warner  <warner@lothar.com>
6381         * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6382         runTestsRandomly arg to turn on trial -z
6384         * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6385         experimental code to use trial's machine-parseable output to get
6386         more detailed test results. Still has some major issues.
6387         (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6388         in random sequence
6390         * buildbot/status/builder.py (Builder.setCurrentBuild):
6391         anticipating moving build history into statusbag, not used yet
6393         * buildbot/status/tests.py: code to centralize test results,
6394         doesn't work quite yet
6396         * buildbot/status/event.py (Event): use hasattr("setName") instead
6397         of isinstance for now.. need better long-term solution
6399         * buildbot/status/html.py: Remove old imports
6401 2003-04-24  Brian Warner  <warner@lothar.com>
6403         * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6404         ignore changes under doc/fun/ and sandbox/
6406         * buildbot/process/step_twisted.py: update pushEvent and friends.
6408         * buildbot/status/html.py (Box.td): replace event.buildername with
6409         event.parent.getSwappableName(). Needs more thought.
6411         * buildbot/status/builder.py (Builder): Replace pushEvent and
6412         getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6413         Tell events they are being pruned with event.delete().
6415         * buildbot/process/base.py (Build): Remove Builder status-handling
6416         methods. s/pushEvent/setCurrentActivity/.
6418         * buildbot/process/step.py (BuildStep): clean up status delivery.
6419         Gouse builder.statusbag methods instead of intermediate builder
6420         methods. s/updateLastEvent/updateCurrentActivity/.
6421         s/finalizeLastEvent/finishCurrentActivity/. Use
6422         addFileToCurrentActivity for summaryFunction.
6424         * buildbot/status/event.py (Logfile): put data in a Swappable when
6425         .finish is called.
6426         (Event): add more setter methods. Remove .buildername, use .parent
6427         and getSwappableName instead (needs more thought).
6429         * buildbot/util.py (Swappable):
6430         * test/test_swap.py: don't bother setting filename at __init__
6431         time, do it later. Change setFilename args to take parent first,
6432         since it provides the most significant part of the filename.
6434 2003-04-23  Brian Warner  <warner@lothar.com>
6436         * buildbot/status/event.py (Logfile.addEntry): append to previous
6437         entry, if possible
6439         * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6440         anticipating Swappable
6441         (InternalShellCommand.remoteUpdate): split out various log-adding
6442         methods so subclasses can snarf stdout separately
6444         * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6445         in anticipation of Swappable build logs
6446         (Builder.testsFinished): anticipating TestResults, still disabled
6448         * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6449         last 100 events
6451         * buildbot/status/event.py (Logfile): add (disabled) support for
6452         Swappable, not ready for use yet
6454         * buildbot/util.py (Swappable): object which is swapped out to
6455         disk after some period of no use.
6456         * test/test_swap.py: test buildbot.utils.Swappable
6458 2003-04-14  Brian Warner  <warner@lothar.com>
6460         * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6461         periodic-build timer. Set the .periodicBuildTime on a builder
6462         instance to some number of seconds to activate it.
6464         * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6466         * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6467         a way that survives result tuples
6469 2003-04-12  Brian Warner  <warner@lothar.com>
6471         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6472         return a dict instead of a tuple: allow summarizers to provide
6473         multiple summaries if they want
6474         * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6475         (debuildSummarizer): summarize lintian warnings/errors
6477 2003-04-10  Brian Warner  <warner@lothar.com>
6479         * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6481 2003-04-09  Brian Warner  <warner@lothar.com>
6483         * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6484         empty summaries: happens when the tests fail so hard they don't emit
6485         a parseable summary line.
6487         * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6488         Allow summaryFunction to return None to indicate no summary should
6489         be added.
6491         * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6492         writing to stale HTTP requests: notice when they disconnect and
6493         remove the request from the list. Also add CacheToFile from
6494         moshez, will be used later.
6496 2003-04-08  Brian Warner  <warner@lothar.com>
6498         * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6499         should be an int, not a list of strings
6501         * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6502         if we weren't actually connected
6504         * buildbot/process/step_twisted.py (trialTextSummarizer): function
6505         to show the tail end of the trial text output
6507         * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6508         hook to summarize the results of a ShellCommand
6510 2003-04-07  Brian Warner  <warner@lothar.com>
6512         * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6513         twisted test suite code into a single class.
6514         * buildbot/process/process_twisted.py: same
6516 2003-04-04  Brian Warner  <warner@lothar.com>
6518         * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6520         * README (SLAVE): document use of mktap to create slave .tap file
6521         (REQUIREMENTS): describe dependencies
6523         * buildbot/bb_tap.py, buildbot/plugins.tml:
6524         * buildbot/bot.py (updateApplication): Add mktap support for creating
6525         buildslave .tap files
6527 2003-03-28  Brian Warner  <warner@lothar.com>
6529         * buildbot/process/step.py (InternalShellCommand.finished): handle
6530         new tuple result values (fix embarrasing bug that appeared during
6531         PyCon demo)
6533 2003-03-27  Brian Warner  <warner@lothar.com>
6535         * docs/examples/glib_master.py, README: add sample buildmaster.tap
6536         -making program
6538 2003-03-25  Brian Warner  <warner@lothar.com>
6540         * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6541         to overall build status
6542         * buildbot/clients/base.py (Builder): improve event printing
6543         * buildbot/process/base.py (BasicBuildFactory): use specific steps
6544         instead of generic ShellCommand
6545         (Build): Add .stopBuild, use it when slave is detached
6547         * buildbot/process/step.py (Configure,Test): give the steps their
6548         own names and status strings
6550         * buildbot/status/html.py (StatusResource): add "show" argument,
6551         lets you limit the set of Builders being displayed.
6553 2003-03-20  Brian Warner  <warner@lothar.com>
6555         * buildbot/process/basic.py: removed
6557 2003-03-19  Brian Warner  <warner@lothar.com>
6559         * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6560         turn off process-docs by default
6562         * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6563         when displaying build information without anything in allBuilds[]
6565         * buildbot/bot.py (makeApp): really take password from sys.argv
6567 2003-03-18  Brian Warner  <warner@lothar.com>
6569         * buildbot/bot.py (buildApp): take password from sys.argv
6571         * README: replace with more useful text
6573         * setup.py: add a real one
6574         * MANIFEST.in, .cvsignore: more distutils packaging stuff
6575         
6576         * docs/PyCon-2003/: added sources for PyCon paper.
6578         * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6579         now Build objects control the process and Builder only handles
6580         slave stuff and distribution of changes/status. A new BuildFactory
6581         class creates Build objects on demand.
6583         Created ConfigurableBuild which takes a list of steps to run. This
6584         makes it a lot easier to set up a new kind of build and moves us
6585         closer to being able to configure a build from a web page.
6587         * buildbot/process/step_twisted.py, process_twisted.py: move to
6588         new model. A lot of code went away.
6589         
6590         * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6591         send lots of empty progress messages to the client.
6593         * buildbot/master.py (makeApp): enforce builder-name uniqueness
6595 2003-02-20  Brian Warner  <warner@lothar.com>
6597         * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6599         * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6600         Twisted bug that prevented non-pty processes from working just got
6601         fixed, and the bug that leaks ptys is still being investigated.
6603         * buildbot/process/step.py (CVS): send timeout arg to slave
6605         * buildbot/clients/gtkPanes.py: add connection-status row, handle
6606         builders coming and going
6607         * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6608         from CVSToys, handle lost-buildmaster
6610         * buildbot/status/client.py (StatusClientService.removeBuilder):
6611         Clean up status client protocol: send builders (with references)
6612         as they are created, rather than sending a list and requiring the
6613         client to figure out which ones are new.
6614         * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6615         attempts to force a build on an unknown builder
6617 2003-02-19  Brian Warner  <warner@lothar.com>
6619         * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6620         * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6621         Twisted stops leaking them.
6622         * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6623         builder goes to an idle state.
6625         * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6626         I figure out why CVS commands hang without them, and/or I fix the
6627         hung-command timeout
6629 2003-02-16  Brian Warner  <warner@lothar.com>
6631         * buildbot/process/step_twisted.py: bin/hlint went away, replace
6632         with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6633         ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6634         GenerateDocs now that they are prefixed with WARNING:.
6636         * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6637         use manual href target instead of request.childLink
6639         * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6640         display every second, but update the ETA every 5 seconds (or
6641         whenever) as remote_progress messages arrive.
6644 2003-02-12  Brian Warner  <warner@lothar.com>
6646         * *: import current sources from home CVS repository
6647         
6649 # Local Variables:
6650 # add-log-time-format: add-log-iso8601-time-string
6651 # End: