1 2006-07-15 Brian Warner <warner@lothar.com>
3 * buildbot/manhole.py: move all Manhole-related code out to this
4 module. Implement SSH-based manholes (with TwistedConch), and move
5 to conch's nifty line-editing syntax-coloring REPL shell instead
6 of the boring non-editing monochromatic (and deprecated) old
8 * buildbot/master.py: remove all Manhole-related code
9 (BuildMaster.loadConfig._add): make sure the old manhole is
10 removed before we add the new one
11 * docs/buildbot.texinfo (Debug options): document new Manhole options
13 * buildbot/twcompat.py (_which): fix some epydoc issues
14 * buildbot/status/html.py (Waterfall.__init__): same
16 2006-06-29 Brian Warner <warner@lothar.com>
18 * buildbot/interfaces.py: get Interface from b.twcompat to hush
19 deprecation warnings under newer Twisteds (by using
20 zope.interface.Interface instead of old twisted.python.components
22 * buildbot/slave/interfaces.py: same
24 2006-06-28 Brian Warner <warner@lothar.com>
26 * buildbot/slave/commands.py (SVN): add --non-interactive to all
27 svn commands, so it will fail immediately instead of hanging while
28 it waits for a username/password to be typed in.
30 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
31 log message if the step was shut down
33 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
34 obsolete reference to mktap.
36 2006-06-20 Brian Warner <warner@lothar.com>
38 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
39 test to include new 'logfiles' argument sent from master to slave
41 2006-06-19 Brian Warner <warner@lothar.com>
43 * buildbot/process/step_twisted.py (Trial): track Progress from
44 _trial_temp/test.log too
46 * buildbot/process/step.py (OutputProgressObserver): generalize
47 the earlier StdioProgressObserver into an OutputProgressObserver
48 that can track LogFiles other than stdio.
49 (LoggingBuildStep.__init__): same
51 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
52 _trial_temp/test.log, not a separate 'cat' command. TODO: this
53 will fail under windows because of os.sep issues. It might have
54 worked before if 'cat' was doing cygwin path conversion.
56 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
57 creation of LogFileWatchers
58 (ShellCommand._startCommand): and record the files that were
59 watched in the 'headers' section of the ShellCommand output
61 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
62 need to actually pass it to the slave if you want it to work.
63 (ShellCommand): document it a bit
65 * buildbot/test/test_shell.py: new test to validate LogFiles
66 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
68 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
69 before printing the last batch of lines, to test that the polling
70 logic is working properly
72 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
73 handling, making it possible to track multiple logs for a single
74 RemoteCommand. The previous single logfile is now known as the
76 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
77 (RemoteShellCommand.__init__): accept logfiles=
78 (LoggingBuildStep.startCommand): stdio_log is now one of many
79 (ShellCommand): added logfiles= argument, as well as a class-level
80 .logfiles attribute, which will be merged together to figure out
81 which logfiles should be tracked. The latter maybe be useful for
82 subclasses of ShellCommand which know they will aways produce
83 secondary logfiles in the same location.
85 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
86 and closeStdin() methods, preparing to make it possible to write
87 to a ShellCommand's stdin at any time, not just at startup. These
88 writes are buffered if the child process hasn't started yet.
89 (LogFileWatcher): new helper class to watch arbitrary logfiles
90 while a ShellCommand runs. This class polls the file every two
91 seconds, and sends back 10k chunks to the buildmaster.
92 (ShellCommand): rename stdin= to initialStdin=, and add
93 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
95 (ShellCommand.addLogfile): LogFile text is sent in updates with a
96 key of "log" and a value of (logname, data).
97 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
98 'logfiles' to the master-visible args dictionary.
99 (SourceBase.doPatch): match s/stdin/initialStdin/ change
102 * buildbot/test/test_vc.py (Patch.testPatch): same
105 * buildbot/test/emit.py: write to a logfile in the current
106 directory. We use this to figure out what was used as a basedir
107 rather than looking to see which copy of emit.py gets run, so that
108 we can run the commands from inside _trial_temp rather than inside
110 * buildbot/test/subdir/emit.py: same
111 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
112 argument rather than running from buildbot/test/
113 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
114 rather than using an implicit setUp()
115 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
116 (ShellBase.testShell1, etc): use explicit path to emit.py instead
117 of assuming that we're running in buildbot/test/ (and that '.' is
120 * buildbot/slave/commands.py (Command.doStart): refactor Command
121 startup/completion a bit: now the SlaveBuilder calls doStart(),
122 which is not meant for overridding by subclasses, and doStart()
123 calls start(), which is. Likewise the SlaveBuilder calls
124 doInterrupt(), and subclasses override interrupt(). This also puts
125 responsibility for maintaining .running in Command rather than in
127 (Command.doInterrupt): same
128 (Command.commandComplete): same, this is called when the deferred
129 returned by start() completes.
130 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
131 (SlaveBuilder.remote_interruptCommand): same
132 (SlaveBuilder.stopCommand): same
134 2006-06-16 Brian Warner <warner@lothar.com>
136 * buildbot/test/test_shell.py: new test file to contain everything
137 relating to ShellCommand
138 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
139 multiple logfiles in realtime" feature, not yet implemented
140 * buildbot/test/emitlogs.py: support file for testLogFiles
141 * docs/buildbot.texinfo (ShellCommand): document the feature
143 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
145 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
146 for tests which exercise SlaveCommands in isolation.
148 * buildbot/test/test_slavecommand.py: Move some utilities like
149 SignalMixin and FakeSlaveBuilder from here ..
150 * buildbot/test/runutils.py: .. to here, so they can be used by
151 other test classes too
152 * buildbot/test/test_vc.py: more SignalMixin refactoring
153 * buildbot/test/test_control.py: same
154 * buildbot/test/test_run.py: and some rmtree refactoring
156 2006-06-15 Brian Warner <warner@lothar.com>
158 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
159 'testBranch' to match other VC tests and have the tests run in
160 roughly increasing order of dependency
162 * buildbot/test/test_steps.py (LogObserver): new test to verify
163 LogObservers can be created at various times and still get
164 connected up properly
166 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
167 to create BuildStepStatus instances that actually work.
169 * buildbot/process/step.py (LogObserver): add outReceived and
170 errReceived base methods, to be overridden
172 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
173 API to take a name instead of a step, reducing the coupling
174 somewhat. This returns the BuildStepStatus object so it can be
175 passed to the new Step, instead of jamming it directly into the
177 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
179 * buildbot/process/base.py (Build.setupBuild): use both methods
180 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
181 process a bit to match
183 2006-06-14 Brian Warner <warner@lothar.com>
185 * docs/buildbot.texinfo (Adding LogObservers): add some limited
186 docs on writing new LogObserver classes
187 (Writing New Status Plugins): brief docs on how Status Plugins fit
190 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
191 implement a LogObserver that counts how many unit tests have been
193 (Trial.__init__): wire it in
194 * buildbot/test/test_twisted.py (Counter): unit test for it
196 * buildbot/process/step_twisted.py (HLint.commandComplete): update
197 to new cmd.logs['stdio'] scheme
198 (Trial.commandComplete): same
199 (BuildDebs.commandComplete): same
201 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
202 LogFiles, instead of just a single one. The old single logfile is
203 now called "stdio". LoggedRemoteCommand no longer creates a
204 LogFile for you (the code to do that was broken anyway). If you
205 don't create a "stdio" LogFile, then stdout/stderr will be
207 (LogObserver): implement "LogObservers", which a BuildStep can add
208 to parse the output of a command in real-time. The primary use is
209 to provide more useful information to the Progress code, allowing
210 better ETA estimates.
211 (LogLineObserver): utility subclass which feeds complete lines to
212 the parser instead of bytes.
213 (BuildStep.progressMetrics): this is safer as a tuple
214 (BuildStep.setProgress): utility method, meant to be called by
216 (BuildStep.addLogObserver): new method, to be called at any time
217 during the BuildStep (even before any LogFiles have been created),
218 to attach (or schedule for eventual attachment) a LogObserver to a
220 (StdioProgressObserver): new LogObserver which replaces the old
221 "output" progress gatherer
222 (LoggingBuildStep.__init__): same
223 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
224 (LoggingBuildStep._commandComplete): must use logs['stdio']
225 instead of the old single ".log" attribute.
226 * buildbot/status/builder.py (LogFile): remove old logProgressTo
227 functionality, now subsumed into StdioProgressObserver
228 * buildbot/test/test_status.py (Subscription._testSlave_2): the
229 log name changed from "output" to "stdio".
232 * buildbot/interfaces.py (ILogFile): add the Interface used from
233 the BuildStep towards the LogFile
234 (ILogObserver): and the one provided by a LogObserver
235 * buildbot/status/builder.py (LogFile): implement it
237 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
238 HEADER constants here ..
239 * buildbot/status/builder.py (STDOUT): .. from here
241 2006-06-13 Brian Warner <warner@lothar.com>
243 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
244 compatibility with python2.2, which doesn't have the 'substr in
246 (TestP4Poller.makeTime): utility function to construct the
247 timestamp using the same strptime() approach as p4poller does. It
248 turns out that time.mktime() behaves slightly differently under
249 python2.2, probably something to do with the DST flag, and that
250 causes the test to fail under python2.2. (changing the mktime()
251 arguments to have dst=0 instead of -1 caused it to fail under
252 python2.3. Go figure.)
253 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
255 2006-06-12 Brian Warner <warner@lothar.com>
257 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
258 proper Perforce (P4) support. Many many thanks to Scott Lamb for
259 contributing such an excellent patch, including docs and unit
260 tests! This makes it *so* much easier to apply. I had to update
261 test_vc.py to handle some recent refactorings, but everything else
262 applied smoothly. The only remaining thing I'd like to fix would
263 be to remove the hard-wired port 1666 used by p4d, and allow it to
264 claim any unused port. This would allow two copies of the test
265 suite to run on the same host at the same time, as well as
266 allowing the test suite to run while a real (production) p4d was
267 running on the same host. Oh, and maybe we should add a warning to
268 step.P4 that gets emitted if the slave is too old to provide the
269 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
270 * buildbot/slave/commands.py (P4): same
271 (P4Sync): same, some minor updates
272 * buildbot/changes/p4poller.py: same
273 * docs/buildbot.texinfo: same
274 * buildbot/test/test_p4poller.py: same
275 * buildbot/test/test_vc.py (P4): same
277 * setup.py: add Trove classifiers for PyPI
279 2006-06-08 Brian Warner <warner@allmydata.com>
281 * buildbot/status/client.py
282 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
283 changing this from getCurrentBuild() to getCurrentBuilds(). Each
284 build needs to be IRemote'd separately, rather than IRemote'ing
285 the whole list at once. I can't wait until newpb's serialization
286 adapters make this unnecessary.
288 2006-06-06 Brian Warner <warner@lothar.com>
290 * buildbot/process/step.py (WithProperties): make this inherit
291 from ComparableMixin, so that reloading an unchanged config file
292 doesn't cause us to spuriously reload any Builders which use them.
293 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
296 2006-06-03 Brian Warner <warner@lothar.com>
298 * contrib/windows/{setup.py, buildbot_service.py}: add support for
299 running py2exe on windows, contributed by Mark Hammond. Addresses
300 SF#1401121, but I think we still need to include
301 buildbot/scripts/sample.cfg
302 * setup.py: include buildbot_service.py as a script under windows
303 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
304 a py2exe application), get the icon/css datafiles from a different
307 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
308 double-escape the build URL. Thanks to Olivier Bonnet for the
309 patch. Fixes SF#1452801.
311 2006-06-02 Brian Warner <warner@lothar.com>
313 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
314 first six columns of 'svnlook' output, not just the first column,
315 since property changes appear in the other five. Thanks to Olivier
316 Bonnet for the patch. Fixes SF#1398174.
318 2006-06-01 Brian Warner <warner@lothar.com>
320 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
321 the fake build, so that title= has something to be set to
323 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
324 attribute of the "Build #NN" link in the yellow start-the-build
325 box to the build's reason. This means that you get a little
326 tooltip explaining why the build was done when you hover over the
327 yellow box. Thanks to Zandr Milewski for the suggestion.
329 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
330 (Box.setETA): handle ETA=None (by stopping the timer)
331 (Box.update): make the [soon] text less different than the usual
332 text, so the rest of the text doesn't flop around so much. It
333 would be awfully nice to figure out how to center this stuff.
334 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
336 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
337 by default, so that any ShellCommand which fails marks the overall
338 build as a failure. I should have done this from the beginning.
339 Add flunkOnFailure=False to the arguments if you want to turn off
342 2006-05-30 Brian Warner <warner@lothar.com>
344 * buildbot/clients/gtkPanes.py: add a third row: now it shows
345 last-build/current-build/current-step. Show what step is currently
346 running. Show ETA for both the overall build and the current step.
347 Update GTK calls to modern non-deprecated forms. There's still a
348 lot of dead code and debug noise to remove.
350 * buildbot/process/step_twisted.py (Trial): set the step name, so it
351 shows up properly in status displays
353 2006-05-28 Brian Warner <warner@lothar.com>
355 * buildbot/test/test_properties.py (Run.testInterpolate): on the
356 build we use to verify that WithProperties works:
358 ** set flunkOnFailure=True so that build failures get noticed
359 ** set workdir='.' so that the build succeeds, otherwise it is trying
360 to touch 'build/something', and 'build/' doesn't exist because
361 usually that's created by a Source step
362 ** set timeout=10, because Twisted-1.3.0 has a race condition that
363 this test somehow triggers, in which the 'touch' process becomes
364 a zombie and we wait for th etimeout before giving up on it.
366 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
367 to log the Build results and step logs to the twisted log.
368 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
369 what went wrong if a build was expected to succeed but didn't.
371 * buildbot/process/step_twisted.py (Trial): set the default
372 trialMode to '--reporter=bwverbose', which specifies verbose
373 black-and-white text. Back in twisted-1.3/2.0 days we had to use
374 '-to', but those are completely missing in modern Twisteds.
376 * buildbot/scripts/sample.cfg: make the sample Manhole config use
377 a localhost-only port, to encourage better security
379 * docs/buildbot.texinfo (Change Sources): mention
382 * .darcs-boring: add a Darcs boringfile
384 * README (REQUIREMENTS): stop claiming compatibility with
387 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
390 2006-05-27 Brian Warner <warner@lothar.com>
392 * buildbot/__init__.py: bump to 0.7.3+ while between releases
393 * docs/buildbot.texinfo: same
395 2006-05-23 Brian Warner <warner@lothar.com>
397 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
398 * docs/buildbot.texinfo: set version to match
399 * NEWS: update for 0.7.3
401 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
402 give a quick mapping from VC system to possible ChangeSources
403 (Build Properties): add 'buildername'
405 * buildbot/process/base.py (Build.setupStatus): oops, set
406 'buildername' and 'buildnumber' properties
407 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
410 2006-05-22 Brian Warner <warner@lothar.com>
412 * docs/buildbot.texinfo (Build Properties): explain the syntax of
413 property interpolation better
415 * README (INSTALLATION): remove old '-v' argument from recommended
418 * docs/buildbot.texinfo (ShellCommand): add docs for description=
419 and descriptionDone= arguments. Thanks to Niklaus Giger for the
422 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
423 'svnversion' instead of grepping the output of 'svn info', much
424 simpler and avoids CR/LF problems on windows. Thanks to Olivier
425 Bonnet for the suggestion.
426 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
427 require the WC_PATH argument, so run 'svnversion .' instead.
429 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
430 aren't supposed to have 'self' in their argument list
432 2006-05-21 Brian Warner <warner@lothar.com>
434 * buildbot/process/step.py (ShellCommand.start): make
435 testInterpolate pass. I was passing the uninterpolated command to
436 the RemoteShellCommand constructor
437 (ShellCommand._interpolateProperties): oops, handle non-list
438 commands (i.e. strings with multiple words separated by spaces in
439 them) properly, instead of forgetting about them.
441 * buildbot/test/test_properties.py (Run.testInterpolate): new test
442 to actually try to use build properties in a real build. This test
444 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
445 to start and evaluate builds
447 * buildbot/test/test__versions.py: add a pseudo-test to record
448 what version of Twisted/Python/Buildbot are running. This should
449 show up at the beginning of _trial_tmp/test.log, and exists to help
450 debug other problems.
452 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
453 a filename to be served as 'robots.txt' to discourage web spiders.
454 Adapted from a patch by Tobi Vollebregt, thanks!
455 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
456 (Waterfall.test_waterfall): tweak the way that filenames are put
457 into the config file, to accomodate windows pathnames better.
459 * docs/buildbot.texinfo (HTML Waterfall): document it
461 * buildbot/process/process_twisted.py
462 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
463 changed the build process. The new setup.py no longer takes the
465 (FullTwistedBuildFactory.__init__): same
466 (TwistedReactorsBuildFactory.__init__): same
468 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
469 be placed in the [hooks] section of the central repository (the
470 one that everybody pushes changes to).
472 2006-05-20 Brian Warner <warner@lothar.com>
474 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
475 .darcs-context file, use binary mode. I think this was causing a
476 Darcs failure under windows.
478 2006-05-19 Brian Warner <warner@lothar.com>
480 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
481 use a timezone string of +0000 and gmtime, since this timestamp is
482 sent to a buildmaster and %z is broken.
484 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
485 string and localtime, since this timestamp will only be consumed
486 locally, and %z is broken.
488 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
489 gmtime, since this timestamp is returned to the buildmaster, and
492 2006-05-18 Brian Warner <warner@lothar.com>
494 * NEWS: update in preparation for next release
496 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
497 setup-repository and do-we-have-the-vc-tools code into a separate
498 "helper" class, which sticks around in a single module-level
499 object. This seems more likely to continue to work in the future
500 than having it hide in the TestCase and hope that TestCases stick
501 around for a long time.
503 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
504 addremove' has been deprecated in recent versions of mercurial, so
507 2006-05-07 Brian Warner <warner@lothar.com>
509 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
510 operating under windows, move the file before opening it, since
511 you can't rename a file that somebody has open.
513 * buildbot/process/base.py (Build.setupBuild): if something goes
514 wrong while creating a Step, log the name and arguments, since the
515 error message when you get the number of arguments wrong is really
518 2006-05-06 Brian Warner <warner@lothar.com>
520 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
521 bugs in twisted-specific code not covered by my unit tests, this
522 time use 'cmd' argument instead of self.cmd
524 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
525 fix stupid braino: either use startwith or find()==0, not both.
526 (TwistedReactorsBuildFactory.__init__): another dumb typo
528 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
529 mark this test as TODO under windows, since process-killing seems
530 dodgy there. We'll come back to this later and try to fix it
533 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
534 and don't include a timezone
535 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
536 This should avoid the windows-with-verbose-timezone-name problem
538 (Patch.testPatch): add a test which runs 'patch' with less
539 overhead than the full VCBase.do_patch sequence, to try to isolate
540 a windows test failure. This one uses slave.commands.ShellCommand
541 and 'patch', but none of the VC code.
543 * buildbot/slave/commands.py (getCommand): use which() to find the
544 executables for 'cvs', 'svn', etc. This ought to help under
547 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
548 working directory before starting. If an earlier test failed, the
549 leftover directory would mistakenly flunk a later test.
550 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
551 Make sure that we use the right commandlines if which("tla") picks
552 up "tla.exe" (as it does under windows).
553 (TlaSupport.do_get): factor out this tla-vs-baz difference
554 (TlaSupport.vc_create): more tla-vs-baz differences
556 * buildbot/test/test_slavecommand.py
557 (ShellBase.testShellMissingCommand): stop trying to assert
558 anything about the error message: different shells on different
559 OSes with different languages makes it hard, and it really isn't
560 that interesting of a thing to test anyway.
562 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
563 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
564 "Panther"), because it has a bug which flunks a couple tests in
565 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
566 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
567 able to test that yet.
569 2006-04-30 Brian Warner <warner@lothar.com>
571 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
572 make sure child commands emit messages in english, so our regexps
573 will match. Thanks to Nikaus Giger for identifying the problems.
574 (VCBase._do_vctest_export_1): mode="export" is not responsible
575 for setting the "got_revision" property, since in many cases it is
576 not convenient to determine.
577 (SVNSupport.capable): when running 'svn --version' to check for
578 ra_local, we want error messages in english
579 * buildbot/test/test_slavecommand.py
580 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
581 to emit the error message in english
583 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
584 the environment with $LC_ALL="C" so that Commands which need to
585 parse the output of their child processes can obtain it in
587 (SVN.parseGotRevision): call "svn info" afterwards instead of
588 watching the output of the "svn update" or "svn checkout".
589 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
590 (Arch.parseGotRevision): same
591 (Bazaar.parseGotRevision): same
592 (Mercurial.parseGotRevision): same
594 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
595 $LC_ALL="C" when running commands under 'buildbot try', too
597 * buildbot/test/__init__.py: remove the global os.environ()
598 setting, instead we do it just for the tests that run commands and
599 need to parse their output.
601 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
602 remove the overly-short .timeout on this test, because non-DNotify
603 platforms must fall back to polling which happens at 10 second
604 intervals, so a 5 second timeout would never succeed.
606 2006-04-24 Brian Warner <warner@lothar.com>
608 * docs/buildbot.texinfo (Installing the code): update trial
609 invocation, SF#1469116 by Niklaus Giger.
610 (Attributes of Changes): updated branch-name examples to be
611 a bit more realistic, SF#1475240 by Stephen Davis.
613 * contrib/windows/buildbot2.bat: utility wrapper for windows
614 developers, contributed by Nick Trout (after a year of neglect..
617 * buildbot/test/test_vc.py (*.capable): store the actual VC
618 binary's pathname in VCS[vcname], so it can be retrieved later
619 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
620 strip out non-numeric timezone information, specifically the funky
621 German string that his system produced that confuses CVS.
622 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
623 allow Darcs tests to work on windows
624 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
625 procutils.which() everywhere, to allow tryclient to work under
626 windows. Also from Niklaus Giger, SF#1463394.
628 * buildbot/twcompat.py (which): move the replacement for a missing
629 twisted.python.procutils.which from test_vc.py to here, so it can
630 be used in other places too (specifically tryclient.py)
632 2006-04-23 Brian Warner <warner@lothar.com>
634 * buildbot/status/html.py (StatusResourceBuild.body): replace the
635 bare buildbotURL/projectName line with a proper DIV, along with a
636 CSS class of "title", from Stefan Seefeld (SF#1461675).
637 (WaterfallStatusResource.body0): remove the redundant 'table'
639 (WaterfallStatusResource.body): same. Also add class="LastBuild"
640 to the top-row TR, and class="Activity" to the second-row TR,
641 rather than putting them in the individual TD nodes.
643 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
644 'got_revision' build property for all VC systems that implement
645 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
647 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
648 to determine which revision we actually obtained
649 (CVS.parseGotRevision): implement this for CVS, which just means
650 to grab a timestamp. Not ideal, and it depends upon the buildslave
651 having a clock that is reasonably well syncronized with the server,
652 but it's better than nothing.
653 (SVN.parseGotRevision): implement it for SVN, which is accurate
654 (Darcs.parseGotRevision): same
655 (Arch.parseGotRevision): same
656 (Bazaar.parseGotRevision): same
657 (Mercurial.parseGotRevision): same
659 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
660 keep a record of all non-stdout/stderr/header/rc status updates,
661 for the benefit of RemoteCommands that send other useful things,
663 (Source.commandComplete): put any 'got_revision' status values
664 into a build property of the same name
667 * buildbot/process/step_twisted.py (Trial): update to deal with
668 new ShellCommand refactoring
670 * docs/buildbot.texinfo (Build Properties): document new feature
671 that allows BuildSteps to get/set Build-wide properties like which
672 revision was requested and/or checked out.
674 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
675 * buildbot/status/builder.py (BuildStatus.getProperty): implement
676 it. Note that this bumps the persistenceVersion of the saved Build
677 object, so add the necessary upgrade-old-version logic to include
678 an empty properties dict.
680 * buildbot/process/base.py (Build.setProperty): implement it
681 (Build.getProperty): same
682 (Build.startBuild): change build startup to set 'branch',
683 'revision', and 'slavename' properties at the right time
685 * buildbot/process/step.py (BuildStep.__init__): change setup to
686 require 'build' argument in a better way
687 (LoggingBuildStep): split ShellCommand into two pieces, for better
688 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
689 a single RemoteCommand that sends stdout/stderr status text. It
690 also provides the usual commandComplete / createSummary /
691 evaluateCommand / getText methods to be overridden...
692 (ShellCommand): .. whereas ShellCommand is specifically for
693 running RemoteShellCommands. Other shell-like BuildSteps (like
694 Source) can inherit from LoggingBuildStep instead of ShellCommand
695 (WithProperties): marker class to do build-property interpolation
696 (Source): inherit from LoggingBuildStep instead of ShellCommand
699 * buildbot/test/test_properties.py: test new functionality
701 2006-04-21 Brian Warner <warner@lothar.com>
703 * buildbot/test/test_vc.py: rename testBranch to
704 testCheckoutBranch to keep the tests in about the right
707 2006-04-18 Brian Warner <warner@lothar.com>
709 * docs/buildbot.texinfo (PBListener): improve cross-references
710 between PBListener and 'buildbot statusgui', thanks to John Pye
713 2006-04-17 Brian Warner <warner@lothar.com>
715 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
716 running under Twisted-1.3.0, otherwise skipped tests are reported
719 * all: use isinstance() instead of 'type(x) is foo', suggested by
722 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
723 oops, fix a brain-fade from the other week, when making the
724 addStep changes. I changed all the __init__ upcalls to use the
725 wrong superclass name.
726 (FullTwistedBuildFactory.__init__): same
727 (TwistedDebsBuildFactory.__init__): same
728 (TwistedReactorsBuildFactory.__init__): same
729 (TwistedBuild.isFileImportant): use .startswith for clarity,
730 thanks to Neal Norwitz for the suggestions.
732 * contrib/viewcvspoll.py: script to poll a viewcvs database for
733 changes, then deliver them over PB to a remote buildmaster.
735 * contrib/svnpoller.py: added script by John Pye to poll a remote
736 SVN repository (by running 'svn log') from a cronjob, and run
737 'buildbot sendchange' to deliver the changes to a remote
739 * contrib/svn_watcher.py: added script by Niklaus Giger (a
740 modification of svnpoller.py), same purpose, but this one loops
741 internally (rather than expecting to run from a cronjob) and works
743 * contrib/README.txt: same
745 2006-04-11 Brian Warner <warner@lothar.com>
747 * all: fix a number of incorrect names and missing imports, thanks
748 to Anthony Baxter for the patch.
749 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
750 remove unused buggy method.
751 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
752 comes from shutil, not "shutils"
753 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
754 (Arch.checkSlaveVersion): same
755 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
757 * buildbot/process/step_twisted2.py: add some missing imports
758 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
759 this code used to live in twisted.internet.defer
761 2006-04-10 Brian Warner <warner@lothar.com>
763 * buildbot/process/step.py (Mercurial): add Mercurial support
764 * buildbot/slave/commands.py (Mercurial): same
765 * buildbot/scripts/tryclient.py (MercurialExtractor): same
766 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
767 not yet tested, but 'try' support *is* covered
768 * docs/buildbot.texinfo (Mercurial): document it
770 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
771 some debugging messages (turned off)
772 * buildbot/test/test_vc.py: improve debug messages
774 2006-04-07 Brian Warner <warner@lothar.com>
776 * buildbot/test/test_vc.py (which): define our own which() in case
777 we can't import twisted.python.procutils, because procutils doesn't
780 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
781 of SlaveLocks for performance tests
783 * docs/examples/twisted_master.cfg: update to match current usage
785 * buildbot/changes/p4poller.py (P4Source): add new arguments:
786 password, p4 binary, pollinterval, maximum history to check.
787 Patch from an anonymous sf.net contributor, SF#1219384.
788 * buildbot/process/step.py (P4Sync.__init__): add username,
789 password, and client arguments.
790 * buildbot/slave/commands.py (P4Sync): same
792 2006-04-05 Brian Warner <warner@lothar.com>
794 * buildbot/process/factory.py (BuildFactory.addStep): new method
795 to add steps to a BuildFactory. Use it instead of f.steps.append,
796 and you can probably avoid using the s() convenience function.
797 Patch from Neal Norwitz, sf.net #1412605.
798 (other): update all factories to use addStep
799 * buildbot/process/process_twisted.py: update all factories to use
802 2006-04-03 Brian Warner <warner@lothar.com>
804 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
805 work under windows too. Adapted from a patch by Niklaus Giger,
806 addresses SF#1463399.
808 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
809 spawned commands emit parseable results in english and not some
810 other language. Patch from Niklaus Giger, SF#1463395.
812 * README (INSTALLATION): discourage users from running unit tests on
813 a "network drive", patch from Niklaus Giger, SF#1463394.
815 2006-03-22 Brian Warner <warner@lothar.com>
817 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
818 function to turn a repository-relative pathname into a (branch,
819 branch-relative-filename) tuple. Change this function to handle
820 the branch naming policy used by your Subversion repository.
821 Thanks to AllMyData.com for sponsoring this work.
823 2006-03-16 Brian Warner <warner@lothar.com>
825 * buildbot/scripts/sample.cfg: add python-mode declaration for
826 vim. Thanks to John Pye for the patch.
828 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
829 command line, mention the importance of running 'crontab' as the
830 buildmaster/buildslave user. Thanks to John Pye for the catch.
832 2006-03-13 Brian Warner <warner@lothar.com>
834 * buildbot/status/words.py (IRC): add an optional password=
835 argument, which will be sent to Nickserv in an IDENTIFY message at
836 login, to claim the nickname. freenode requires this before the
837 bot can sent (or reply to) private messages. Thanks to Clement
838 Stenac for the patch.
839 * docs/buildbot.texinfo (IRC Bot): document it
841 * buildbot/status/builder.py (LogFile.merge): don't write chunks
842 larger than chunkSize. Fixes SF#1349253.
843 * buildbot/test/test_status.py (Log.testLargeSummary): test it
844 (Log.testConsumer): update to match new internal chunking behavior
846 2006-03-12 Brian Warner <warner@lothar.com>
848 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
850 * buildbot/test/test_maildir.py (MaildirTest): rename the
851 'timeout' method, as it collides with trial's internals
853 * buildbot/scripts/runner.py: add 'buildbot restart' command
854 (stop): don't sys.exit() out of here, otherwise restart can't work
855 * docs/buildbot.texinfo (Shutdown): document it
857 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
858 * buildbot/status/html.py (Waterfall.__init__): same
859 * buildbot/process/builder.py (Builder.startBuild): same
860 * buildbot/process/base.py (BuildRequest): same
861 * buildbot/sourcestamp.py (SourceStamp): same
862 * buildbot/scheduler.py (Nightly): same
864 * buildbot/__init__.py (version): bump to 0.7.2+ while between
866 * docs/buildbot.texinfo: same
868 2006-02-17 Brian Warner <warner@lothar.com>
870 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
871 * docs/buildbot.texinfo: set version number to match
872 * NEWS: update for 0.7.2
874 2006-02-16 Brian Warner <warner@lothar.com>
876 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
878 2006-02-09 Brian Warner <warner@lothar.com>
880 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
881 add text to explain per-build branch parameters
882 * NEWS: mention --umask
884 2006-02-08 Brian Warner <warner@lothar.com>
886 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
888 (SlaveOptions.optParameters): add --umask, to make it possible to
889 make buildslave-generated files (including build products) be
892 * buildbot/slave/bot.py (BuildSlave.startService): same
894 2006-01-23 Brian Warner <warner@lothar.com>
896 * buildbot/status/builder.py: urllib.quote() all URLs that include
897 Builder names, so that builders can include characters like '/'
898 and ' ' without completely breaking the resulting HTML. Thanks to
899 Kevin Turner for the patch.
900 * buildbot/status/html.py: same
901 * buildbot/test/test_web.py (GetURL.testBuild): match changes
903 * NEWS: update in preparation for upcoming release
905 2006-01-18 Brian Warner <warner@lothar.com>
907 * docs/examples/twisted_master.cfg: update to match the Twisted
908 buildbot: remove python2.2, switch to exarkun's buildslaves,
909 disable the .deb builder until we figure out how to build twisted
910 .debs from SVN, add some ktrace debugging to the OS-X build
911 process and remove the qt build, remove threadless builders,
912 change freebsd builder to use landonf's buildslave.
914 2006-01-12 Brian Warner <warner@lothar.com>
916 * buildbot/master.py (Manhole.__init__): let port= be a strports
917 specification string, but handle a regular int for backwards
918 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
919 used in master.cfg to limit connections to just the local host.
920 (BuildMaster.loadConfig): same for c['slavePortnum']
921 * buildbot/scheduler.py (Try_Userpass.__init__): same
922 * buildbot/status/client.py (PBListener.__init__): same
923 * buildbot/status/html.py (Waterfall.__init__): same, for both
924 http_port and distrib_port. Include backwards-compatibility checks
925 so distrib_port can be a filename string and still mean unix:/foo
926 * docs/buildbot.texinfo (Setting the slaveport): document it
927 (Debug options): same
928 (HTML Waterfall): same
931 * buildbot/test/test_config.py (ConfigTest): test it
933 * buildbot/master.py (BuildMaster.loadConfig): wait for the
934 slaveport's disownServiceParent deferred to fire before opening
935 the new one. Fixes an annoying bug in the unit tests.
937 2006-01-03 Brian Warner <warner@lothar.com>
939 * buildbot/master.py (BuildMaster): remove the .schedulers
940 attribute, replacing it with an allSchedulers() method that looks
941 for all IService children that implement IScheduler. Having only
942 one parent/child relationship means fewer opportunities for bugs.
943 (BuildMaster.allSchedulers): new method
944 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
945 also fix ugly bug that caused any config-file reload to
946 half-forget about the earlier Schedulers, causing an exception
947 when a Change arrived and was handed to a half-connected
948 Scheduler. The exception was in scheduler.py line 54ish:
949 self.parent.submitBuildSet(bs)
950 exceptions.AttributeError: 'NoneType' object has no attribute
952 (BuildMaster.addChange): update to use allSchedulers()
954 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
955 to work properly with twisted-1.3.0, where you must explicitly
956 include the __implements__ from parent classes
957 (BaseScheduler.__repr__): make it easier to distinguish distinct
959 (BaseUpstreamScheduler.__implements__): same
961 * buildbot/status/builder.py (Status.getSchedulers): update to
963 * buildbot/test/test_run.py (Run.testMaster): same
964 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
965 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
966 make sure Scheduler instances are left alone when an identical
967 config file is reloaded
968 (ConfigElements.testSchedulers): make sure Schedulers are properly
971 * Makefile (TRIALARGS): my local default Twisted version is now
972 2.1.0, update the trial arguments accordingly
974 2005-12-22 Brian Warner <warner@lothar.com>
976 * docs/examples/twisted_master.cfg: merge changes from pyr: add
979 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
980 addChange in the parent class, although I suspect this should be
981 fixed better in the future.
983 2005-11-26 Brian Warner <warner@lothar.com>
985 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
986 explode when branch==None, thanks to Kevin Turner for the catch
987 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
990 * buildbot/__init__.py (version): bump to 0.7.1+ while between
992 * docs/buildbot.texinfo: same
994 2005-11-26 Brian Warner <warner@lothar.com>
996 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
997 * docs/buildbot.texinfo: set version number to match
999 2005-11-26 Brian Warner <warner@lothar.com>
1001 * NEWS: update for 0.7.1
1003 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
1004 sure that unsubscribe works even if we never sent an ETA update.
1005 Also, don't explode on duplicate unsubscribe.
1006 (BuildStepStatus.addLog): make the convenience "return self"-added
1007 watcher automatically unsubscribe when the Step finishes.
1008 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
1009 (BuildStatus.stepStarted): same auto-unsubscribe
1010 (BuilderStatus.buildStarted): same auto-unsubscribe
1012 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
1014 (IStatusReceiver.stepStarted): same
1015 (IStatusReceiver.logStarted): same
1017 * buildbot/test/test_run.py (Status): move the Status test..
1018 * buildbot/test/test_status.py (Subscription): .. to here
1020 2005-11-25 Brian Warner <warner@lothar.com>
1022 * NEWS: more updates
1024 * buildbot/locks.py: fix the problem in which loading a master.cfg
1025 file that changes some Builders (but not all of them) can result
1026 in having multiple copies of the same Lock. Now, the real Locks
1027 are kept in a table inside the BotMaster, and the Builders/Steps
1028 use "LockIDs", which are still instances of MasterLock and
1029 SlaveLock. The real Locks are instances of the new RealMasterLock
1030 and RealSlaveLock classes.
1031 * buildbot/master.py (BotMaster.getLockByID): new method to
1032 convert LockIDs into real Locks.
1033 * buildbot/process/base.py (Build.startBuild): convert LockIDs
1034 into real Locks before building
1035 * buildbot/process/step.py (BuildStep.startStep): same
1036 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
1037 exercises the problem
1040 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
1041 what Schedulers are available
1043 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
1044 work by Dobes Vandermeer and hacked mercilessly by me. This offers
1045 'cron'-style build scheduling at certain times of day, week,
1047 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
1049 * buildbot/scheduler.py (Scheduler): change fileIsImportant
1050 handling: treat self.fileIsImportant more as an attribute that
1051 contains a callable than as a method. If the attribute is None,
1052 don't call it and assume all filenames are important. It is still
1053 possible to provide a fileIsImportant method in a subclass,
1055 (AnyBranchScheduler): handle fileIsImportant=None, previously it
1057 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
1058 test using AnyBranchScheduler with fileIsImportant=None
1060 2005-11-24 Brian Warner <warner@lothar.com>
1062 * buildbot/test/test_config.py (StartService): don't claim a fixed
1063 port number, instead set slavePort=0 on the first pass, figure out
1064 what port was allocated, then switch to a config file that uses
1067 * buildbot/master.py (BuildMaster.loadConfig): close the old
1068 slaveport before opening the new one, because unit tests might
1069 replace slavePort=0 with the same allocated portnumber, and if we
1070 don't wait for the old port to close first, we get a "port already
1071 in use" error. There is a tiny race condition here, but the only
1072 threat is from other programs that bind (statically) to the same
1073 port number we happened to be allocated, and only if those
1074 programs use SO_REUSEADDR, and only if they get control in between
1077 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
1079 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
1080 deleted ChangeSources before adding any new ones
1081 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
1082 compare_attrs, to make sure that a config-file reload does not
1083 unnecessarily replace an unmodified ChangeSource instance
1084 * buildbot/test/test_config.py (ConfigTest.testSources): update
1086 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
1087 mean "don't build anything", and add a warning if it gets used
1088 because it isn't actually useful.
1090 * contrib/svn_buildbot.py: update example usage to match the port
1091 number that gets used by the PBChangeSource
1092 * buildbot/scripts/sample.cfg: add example of PBChangeSource
1094 2005-11-22 Brian Warner <warner@lothar.com>
1096 * NEWS: start collecting items for next release
1098 * buildbot/process/step.py (SVN.computeSourceRevision): assume
1099 revisions are strings
1100 (P4Sync.computeSourceRevision): same
1102 * buildbot/status/html.py (StatusResourceBuild.body): add a link
1103 to the Buildbot's overall status page
1104 (StatusResourceBuilder.body): same
1106 2005-11-15 Brian Warner <warner@lothar.com>
1108 * buildbot/master.py (BuildMaster.loadConfig): serialize the
1109 config-file loading, specifically to make sure old StatusTargets
1110 are finished shutting down before new ones start up (thus
1111 resolving a bug in which changing the Waterfall object would fail
1112 because both new and old instances were claiming the same
1113 listening port). Also load new Schedulers after all the new
1114 Builders are set up, in case they fire off a new build right away.
1115 * buildbot/test/test_config.py (StartService): test it
1117 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
1118 the branch name to the mail body
1120 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
1121 Without it, a config-file reload fails to update an existing
1123 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
1124 username/passwd to compare_attrs, for the same reason
1125 * buildbot/status/html.py (Waterfall): add favicon to
1126 compare_attrs, same reason
1128 2005-11-05 Brian Warner <warner@lothar.com>
1130 * buildbot/scripts/tryclient.py (createJobfile): stringify the
1131 baserev before stuffing it in the jobfile. This resolves problems
1132 under SVN (and probably Arch) where revisions are expressed as
1133 numbers. I'm inclined to use string-based revisions everywhere in
1134 the future, but this fix should be safe for now. Thanks to Steven
1135 Walter for the patch.
1137 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
1138 binary mode when opening pickle files, to make windows work
1139 better. Thanks to Dobes Vandermeer for the catch.
1140 * buildbot/status/builder.py (BuildStatus.saveYourself): same
1141 (BuilderStatus.getBuildByNumber): same
1142 (Status.builderAdded): same
1143 * buildbot/master.py (BuildMaster.loadChanges): same
1145 * buildbot/util.py (Swappable): delete unused leftover code
1147 * buildbot/process/step.py (SVN): when building on a non-default
1148 branch, add the word "[branch]" to the VC step's description, so
1149 it is obvious that we're not building the usual stuff. Likewise,
1150 when we are building a specific revision, add the text "rNNN" to
1151 indicate what that revision number is. Thanks to Brad Hards and
1152 Nathaniel Smith for the suggestion.
1153 (Darcs.startVC): same
1154 (Arch.startVC): same
1155 (Bazaar.startVC): same
1157 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
1158 typo, caught by Mark Dillavou, closes SF#1216636.
1160 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
1161 about a test to add some day
1163 * docs/examples/twisted_master.cfg: update: bot1 can now handle
1164 the 'full-2.3' build, and the 'reactors' build is now run under
1165 python-2.4 because the buildslave no longer has gtk/etc bindings
1166 for earlier versions.
1168 2005-11-03 Brian Warner <warner@lothar.com>
1170 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
1171 method, takes an IBuildStatus and rebuilds it. It might make more
1172 sense to add this to IBuildControl instead, but that instance goes
1173 away completely once the build has finished, and resubmitting
1174 builds can take place weeks later.
1175 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
1176 * buildbot/status/html.py (StatusResourceBuild): also stash an
1177 IBuilderControl so we can use resubmitBuild.
1178 (StatusResourceBuild.body): render "resubmit" button if we can.
1179 Also add hrefs for each BuildStep
1180 (StatusResourceBuild.rebuild): add action for "resubmit" button
1181 (StatusResourceBuilder.getChild): give it an IBuilderControl
1183 * buildbot/status/builder.py (Status.getURLForThing): change the
1184 URL for BuildSteps to have a "step-" prefix, so the magic URLs
1185 that live as targets of buttons like "stop" and "rebuild" can't
1187 * buildbot/status/builder.py (Status.getURLForThing): same
1188 * buildbot/status/html.py (StatusResourceBuild.getChild): same
1189 (StepBox.getBox): same
1190 * buildbot/test/test_web.py (GetURL): same
1193 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1194 exclusivity checks after Source.__init__ upcall, so misspelled
1195 arguments will be reported more usefully
1196 (Darcs.__init__): same
1198 2005-10-29 Brian Warner <warner@lothar.com>
1200 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1201 builder. Move the Try scheduler off to a separate port.
1203 2005-10-27 Brian Warner <warner@lothar.com>
1205 * buildbot/clients/gtkPanes.py
1206 (TwoRowClient.remote_builderRemoved): disappearing Builders used
1207 to cause the app to crash, now they don't.
1209 * buildbot/clients/debug.py: display the buildmaster's location
1210 in the window's title bar
1212 2005-10-26 Brian Warner <warner@lothar.com>
1214 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
1215 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
1216 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
1218 * buildbot/status/html.py (td): put a single non-breaking space
1219 inside otherwise empty <td> elements, as a workaround for buggy
1220 browsers which would optimize them away (along with any associated
1221 styles, like the kind that create the waterfall grid borders).
1222 Patch from Frerich Raabe.
1224 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
1225 argv-list as an argument, defaulting to ["-to"], which is
1226 appropriate for the Trial that comes with Twisted-2.1.0 and
1227 earlier. The Trial in current Twisted SVN wants
1228 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1229 defaults to an empty list.
1230 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1231 match it, now that trialMode= is a list instead of a single string
1233 * buildbot/__init__.py (version): bump to 0.7.0+ while between
1235 * docs/buildbot.texinfo: same
1237 2005-10-24 Brian Warner <warner@lothar.com>
1239 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1240 * docs/buildbot.texinfo: set version number to match
1242 2005-10-24 Brian Warner <warner@lothar.com>
1244 * README: update for 0.7.0
1246 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1248 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1249 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1250 send the branch= argument unless the user really provided one, to
1251 retain compatibility with older buildmasters that don't accept
1253 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1256 * docs/buildbot.texinfo: update lots of stuff
1258 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1259 to the 'buildbot sendchange' command
1260 * buildbot/clients/sendchange.py (Sender.send): same
1261 * buildbot/changes/pb.py (ChangePerspective): same
1262 * buildbot/test/test_changes.py (Sender.testSender): test it
1264 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1265 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1266 for consistency with other BuildStep arguments that use camelCase.
1267 Well, at least more of them use camelCase (like flunkOnWarnings)
1268 than don't.. I wish I'd picked one style and stuck with it
1269 earlier. Annoying, but it's best done before the release, since
1270 these arguments didn't exist at all in 0.6.6 .
1272 * buildbot/test/test_vc.py (SVN.testCheckout): same
1273 (Darcs.testPatch): same
1274 * docs/buildbot.texinfo (SVN): document the change
1275 (Darcs): same, add some build-on-branch docs
1276 * docs/examples/twisted_master.cfg: match change
1278 * buildbot/process/step.py (BuildStep): rename
1279 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1280 how it is normally used.
1281 * buildbot/test/test_steps.py (Version.checkCompare): same
1283 * buildbot/process/step.py (CVS.startVC): refuse to build
1284 update/copy -style builds on a non-default branch with an old
1285 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1286 concern is that it will do a VC 'update' in an existing tree when
1287 it is supposed to be switching branches (and therefore clobbering
1288 the tree to do a full checkout), thus building the wrong source.
1289 This used to be a warning, but I think the confusion it is likely
1290 to cause warrants making it an error.
1291 (SVN.startVC): same, also make mode=export on old slaves an error
1292 (Darcs.startVC): same
1293 (Git.startVC): improve error message for non-Git-enabled slaves
1294 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1295 specific revision is built on a slave that doesn't pay attention
1296 to args['revision'], because for slowly-changing trees it will
1297 probably do the right thing, and because we have no way to tell
1298 whether we're asking it to build the most recent version or not.
1299 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1301 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1302 that 'master' is in host:portnum format, to catch errors sooner
1304 2005-10-23 Brian Warner <warner@lothar.com>
1306 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1307 when creating the list of warning messages, include the line
1308 immediately after each WARNING: line, since that's usually where
1309 the file and line number wind up.
1311 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1316 2005-10-22 Brian Warner <warner@lothar.com>
1318 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1319 patch from Brad Hards
1320 * buildbot/status/classic.css: same
1321 * buildbot/test/test_web.py (Waterfall): match changes
1323 * buildbot/test/test_steps.py (BuildStep.setUp): set
1324 nextBuildNumber so the test passes
1325 * buildbot/test/test_status.py (MyBuilder): same
1327 * buildbot/status/html.py (StatusResourceBuild.body): revision
1328 might be numeric, so stringify it before html-escapifying it
1329 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1330 timer for the upcoming build
1331 * buildbot/status/classic.css: add background-color attributes for
1332 offline/waiting/building classes
1334 * buildbot/status/builder.py (BuildStatus): derive from
1335 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1336 the default (i.e. unknown) .slavename to "???" instead of None,
1337 since even unknown slavenames need to be printed eventually.
1338 (BuilderStatus): also derive from styles.Versioned . More
1339 importantly, determine .nextBuildNumber at creation/unpickling
1340 time by scanning the directory of saved BuildStatus instances and
1341 choosing one larger than the highest-numbered one found. This
1342 should fix the problem where random errors during upgrades cause
1343 the buildbot to forget about earlier builds. .nextBuildNumber is
1344 no longer stored in the pickle.
1345 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1346 at least log the error. Also call Builder.determineNextBuildNumber
1347 once the basedir is set.
1349 * buildbot/master.py (BuildMaster.loadChanges): do
1350 styles.doUpgrade afterwards, in case I decide to make Changes
1351 derived from styles.Versioned some day and forget to make this
1355 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1356 when running under older pythons (<2.3) in which the shlex module
1357 doesn't have a 'split' function.
1359 * buildbot/process/step.py (ShellCommand.start): make
1360 errorMessages= be a list of strings to stuff in the log before the
1361 command actually starts. This makes it easier to flag multiple
1362 warning messages, e.g. when the Source steps have to deal with an
1364 (CVS.startVC): handle slaves that don't handle multiple branches
1365 by switching into 'clobber' mode
1366 (SVN.startVC): same. Also reject branches without base_url
1367 (Darcs.startVC): same. Also reject revision= in older slaves
1368 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1369 (Bazaar.startVC): same, and test for baz separately than for arch
1371 * buildbot/slave/commands.py (cvs_ver): document new features
1373 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1374 (BuildStep.slaveVersionNewEnough): more useful utility method
1375 * buildbot/test/test_steps.py (Version): start testing it
1377 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1378 the 'force' command requires python2.3, for the shlex.split method
1380 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1381 since we don't use it anymore. The Twisted buildbot uses a
1384 2005-10-21 Brian Warner <warner@lothar.com>
1386 * buildbot/process/process_twisted.py: rework all BuildFactory
1387 classes to take a 'source' step as an argument, instead of
1388 building up the SVN instance in the factory.
1389 * docs/examples/twisted_master.cfg: enable build-on-branch by
1390 providing a base_url and default_branch
1392 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1393 control over --branch and --revision, not that they are always
1395 * buildbot/status/html.py (StatusResourceBuilder.force): same
1396 (StatusResourceBuild.body): display SourceStamp components
1398 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1399 IRC 'force' command, so it can be shared with an eventual
1400 command-line-tool 'buildbot force' mode.
1401 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1403 2005-10-20 Brian Warner <warner@lothar.com>
1405 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1407 * docs/examples/twisted_master.cfg: update to use Schedulers
1409 * buildbot/scripts/sample.cfg: update with Schedulers
1411 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1412 method specifically for use by HTML "force build" button and the
1413 IRC "force" command. Raises an immediate error if there are no
1415 (IBuilderControl.requestBuild): make this just submit a build, not
1416 try to check for existing slaves or set up any when-finished
1417 Deferreds or anything.
1418 * buildbot/process/builder.py (BuilderControl): same
1419 * buildbot/status/html.py (StatusResourceBuilder.force): same
1420 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1421 * buildbot/test/test_slaves.py: same
1422 * buildbot/test/test_web.py: same
1424 2005-10-19 Brian Warner <warner@lothar.com>
1426 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1427 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1429 2005-10-18 Brian Warner <warner@lothar.com>
1431 * buildbot/status/html.py: provide 'status' argument to most
1432 StatusResourceFOO objects
1433 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1434 and Logfiles" section to make the Build page into a more-or-less
1435 comprehensive source of status information about the build
1437 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1438 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1440 2005-10-17 Brian Warner <warner@lothar.com>
1442 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1443 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1444 out what to do about other projects: the correct options for
1445 recent Twisteds will not work for older ones.
1447 2005-10-15 Brian Warner <warner@lothar.com>
1449 * buildbot/status/builder.py (Status.getURLForThing): add method
1450 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1451 use this in email/IRC status clients to make them more useful, by
1452 providing the end user with hints on where to learn more about the
1453 object being reported on.
1454 * buildbot/test/test_web.py (GetURL): tests for it
1456 2005-10-14 Brian Warner <warner@lothar.com>
1458 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1459 fix bug resulting from deferredResult changes
1461 2005-10-13 Brian Warner <warner@lothar.com>
1463 * buildbot/test/test_changes.py: remove use of deferredResult
1464 * buildbot/test/test_config.py: same
1465 * buildbot/test/test_control.py: same
1466 * buildbot/test/test_status.py: same
1467 * buildbot/test/test_vc.py: this is the only remaining use, since
1468 it gets used at module level. This needs to be replaced by some
1469 sort of class-level run-once routine.
1471 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1473 * lots: implement multiple slaves per Builder, which means multiple
1474 current builds per Builder. Some highlights:
1475 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1476 of (state,currentBuilds) instead of (state,currentBuild)
1477 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1478 (IBuildStatus.getSlavename): new method, so you can tell which
1479 slave got used. This only gets set when the build completes.
1480 (IBuildRequestStatus.getBuilds): new method
1482 * buildbot/process/builder.py (SlaveBuilder): add a .state
1483 attribute to track things like ATTACHING and IDLE and BUILDING,
1485 (Builder): .. the .slaves attribute here, which has been turned
1486 into a simple list of available slaves. Added a separate
1487 attaching_slaves list to track ones that are not yet ready for
1489 (Builder.fireTestEvent): put off the test-event callback for a
1490 reactor turn, to make tests a bit more consistent.
1491 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1492 ping fails due to an exception. This needs work, I'm worried that
1493 a code error could lead to a constantly re-connecting slave.
1494 Especially since I'm trying to move to a distinct remote_ping
1495 method, separate from the remote_print that we currently use.
1496 (BuilderControl.requestBuild): return a convenience Deferred that
1497 provides an IBuildStatus when the build finishes.
1498 (BuilderControl.ping): ping all connected slaves, only return True
1499 if they all respond.
1501 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1502 reconnect when we shut down.
1504 * buildbot/status/builder.py: implement new methods, convert
1505 one-build-at-a-time methods to handle multiple builds
1506 * buildbot/status/*.py: do the same in all default status targets
1507 * buildbot/status/html.py: report the build's slavename in the
1508 per-Build page, report all buildslaves on the per-Builder page
1510 * buildbot/test/test_run.py: update/create tests
1511 * buildbot/test/test_slaves.py: same
1512 * buildbot/test/test_scheduler.py: remove stale test
1514 * docs/buildbot.texinfo: document the new builder-specification
1515 'slavenames' parameter
1517 2005-10-12 Brian Warner <warner@lothar.com>
1519 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1520 report failure correctly, causing Dependent builds to run when
1521 they shouldn't have.
1522 * buildbot/status/builder.py (BuildSetStatus): same
1523 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1524 (Set.testSuccess): test the both-pass case too
1525 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1526 fix this test: it was ending too early, masking the failure before
1527 (Logger): specialized StatusReceiver to make sure the dependent
1528 builds aren't even started, much less completed.
1530 2005-10-07 Brian Warner <warner@lothar.com>
1532 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1533 bot.SlaveBuilder being disowned in the middle of a build
1535 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1536 this inherit from StatusReceiver. Also upcall in __init__. This
1537 fixes the embarrasing crash when the new buildSetSubmitted method
1538 is invoked and Waterfall/etc don't implement their own.
1539 * buildbot/test/test_run.py: add a TODO note about a test to catch
1540 just this sort of thing.
1542 * buildbot/process/builder.py (Builder.attached): remove the
1543 already-attached warning, this situation is normal. Add some
1544 comments explaining it.
1546 2005-10-02 Brian Warner <warner@lothar.com>
1548 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1549 OverflowError when setting up dnotify, because some 64-bit systems
1550 have problems with signed-vs-unsigned constants and trip up on the
1551 DN_MULTISHOT flag. Patch from Brad Hards.
1553 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1555 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1556 progressMetrics, description, descriptionDone to the 'parms' list,
1557 and make use the 'parms' list from the implementation class
1558 instead of only BuildStep to initialize the parameters. This
1559 allows buildbot.process.factory.s() to initialize all the parms,
1560 not just those defined in directly by BuildStep.
1562 2005-09-03 Brian Warner <warner@lothar.com>
1564 * NEWS: start adding items for the next release
1566 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1567 python2.2 tests, change 'Quick' builder to only use python2.3
1569 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1571 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1572 the "Ping Builder" button if the build control is available; the
1573 user sees an exception otherwise
1575 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1577 2005-09-01 Brian Warner <warner@lothar.com>
1579 * buildbot/interfaces.py (IBuilderStatus.getState): update
1580 signature, point out that 'build' can be None
1581 (IBuildStatus.getETA): point out ETA can be none
1583 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1585 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1587 2005-08-31 Brian Warner <warner@lothar.com>
1589 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1590 update to match correct signature: removed 'eta' argument
1591 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1593 2005-08-30 Brian Warner <warner@lothar.com>
1595 * buildbot/status/builder.py (LogFile): remove the assertion that
1596 blows up when you try to overwrite an existing logfile, instead
1597 just emit a warning. This case gets hit when the buildmaster is
1598 killed and doesn't get a chance to write out the serialized
1599 BuilderStatus object, so the .nextBuildNumber attribute gets out
1602 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1603 the 'buildbot sendchange' arguments, for the Darcs context file
1604 * docs/buildbot.texinfo (sendchange): document it
1606 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1607 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1608 (IStatus.getSchedulers): new method
1609 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1610 (Status.getSchedulers): implement
1611 * buildbot/process/builder.py (Builder): maintain
1612 BuilderStatus.pendingBuilds
1613 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1614 (TryBase.addChange): Try schedulers should ignore Changes
1616 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1617 for 'try' on CVS/SVN
1618 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1620 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1621 report status properly.
1622 (Try.createJob): implement unique buildset IDs
1624 * buildbot/status/client.py (StatusClientPerspective): add a
1625 perspective_getBuildSets method for the benefit of jobdir-style
1627 * docs/buildbot.texinfo (try): more docs
1628 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1631 2005-08-18 Brian Warner <warner@lothar.com>
1633 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1634 actually work. It's functional but still kind of clunky. Also, it
1635 only works with the pb-style.. needs to be made to work with the
1638 * buildbot/status/client.py (RemoteBuildSet): new class
1639 (RemoteBuildRequest): same
1640 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1641 object, not the internal BuildStatus object.
1642 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1643 outside of the usual buildStarted() return value.
1644 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1646 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1647 (Try_Userpass_Perspective.perspective_try): return a remotely
1648 usable BuildSetStatus object
1650 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1651 isStarted()/waitUntilStarted()
1653 2005-08-16 Brian Warner <warner@lothar.com>
1655 * buildbot/status/builder.py: implement IBuildSetStatus and
1656 IBuildRequestStatus, wire them into place.
1657 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1658 methods into the BuildSetStatus object.
1659 * buildbot/interfaces.py: same
1660 (IStatus.getBuildSets): new method to get pending BuildSets
1661 (IStatusReceiver.buildsetSubmitted): new method which hears about
1663 * buildbot/master.py (BuildMaster.submitBuildSet): same
1664 * buildbot/process/base.py (BuildRequest): same, replace
1665 waitUntilStarted with subscribe/unsubscribe
1666 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1667 subscribe instead of waitUntilStarted
1668 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1670 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1672 * buildbot/test/test_buildreq.py: update for new code
1673 * buildbot/test/test_control.py (Force.testRequest): same
1676 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1677 for Darcs to not use the tempfile module, so it works under
1678 python-2.2 too. We really didn't need the full cleverness of that
1679 module, since the slave has exclusive control of its own builddir.
1681 2005-08-15 Brian Warner <warner@lothar.com>
1683 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1684 for CVS trees. It doesn't work for non-trunk branches,
1686 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1689 * Makefile: make it easier to test against python2.2
1691 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1692 tearDown2, so things like Arch can unregister archives as they're
1693 shutting down. The previous subclass-override-tearDown technique
1694 resulted in a nested maybeWait() and test failures under
1697 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1698 where we can (Arch), add a branch= argument to set the branch used
1700 (BazExtractor): extract the branch too
1701 (TlaExtractor): same
1702 * buildbot/scripts/runner.py (TryOptions): add --branch
1703 * docs/buildbot.texinfo (try): document --branch/try_branch
1705 * buildbot/slave/commands.py (Darcs): implement get-revision for
1706 Darcs, so that 'try' will work. This requires the tempfile module
1709 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1710 of revisions, branches, and 'try' in the process.
1712 2005-08-11 Brian Warner <warner@lothar.com>
1714 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1715 this, it got broken at some point in the last few releases
1716 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1717 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1718 specifically the removal of ETA information from the tuple
1720 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1723 * docs/buildbot.texinfo (try): document both --builder and
1724 'try_builders' in .buildbot/options
1725 * buildbot/scripts/runner.py (TryOptions): add --builder,
1726 accumulate the values into opts['builders']
1727 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1728 * buildbot/test/test_runner.py (Try): add some quick tests to make
1729 sure 'buildbot try --options' and .buildbot/options get parsed
1730 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1731 use --builder control
1733 * docs/buildbot.texinfo (try): add --port argument to PB style
1735 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1736 actual SourceStamp. Still need to extract a branch name, somehow.
1737 (Try): finish implementing the try client side, still need a UI
1738 for specifying which builders to use
1739 (Try.getopt): factor our options/config-file reading
1740 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1742 * buildbot/test/test_vc.py: match SourceStampExtractor change
1744 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1745 causes the twisted log to be sent to stderr
1747 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1749 2005-08-10 Brian Warner <warner@lothar.com>
1751 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1752 style is 90% done, still missing status reporting or waiting for
1753 the buildsets to finish, and it is completely untested.
1755 * buildbot/trybuild.py: delete file, move contents to ..
1756 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1757 * buildbot/test/test_vc.py: match the move
1759 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1760 of the TryScheduler, no buildsetID or status-tracking support yet
1761 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1763 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1764 possible to set the basedir after __init__ time, so it is easier
1765 to use as a Service-child of the BuildMaster instance
1767 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1768 that delivers messages to its Service parent instead of requiring
1769 a subclass to be useful. This turns out to be much easier to build
1772 * buildbot/scripts/tryclient.py (createJob): utility code to
1773 create jobfiles, will eventually be used by 'buildbot try'
1775 2005-08-08 Brian Warner <warner@lothar.com>
1777 * docs/buildbot.texinfo (try): add docs on the
1778 as-yet-unimplemented Try scheduler
1780 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1781 * buildbot/test/test_scheduler.py: .. here
1782 (Scheduling.testTryJobdir): add placeholder test for 'try'
1784 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1785 addEntry merging (>=chunkSize) behavior
1786 (Log.testConsumer): update to handle new callLater(0) behavior
1788 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1789 both the MAX_LENGTH bugfix and the resumeProducing hang.
1791 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1792 put off the actual resumeProducing for a moment with
1793 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1794 causes large logfiles to hang midway through.
1796 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1797 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1798 and to improve memory usage when streaming the file out to a web
1800 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1801 make this work cleanly
1803 2005-08-03 Brian Warner <warner@lothar.com>
1805 * buildbot/trybuild.py: new file for 'try' utilities
1806 (getSourceStamp): run in a tree, find out the baserev+patch
1807 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1808 implemented for SVN and Darcs, still working on Arch. I don't know
1809 how to make CVS work yet.
1811 * docs/buildbot.texinfo: document the 'buildbot' command-line
1812 tool, including the not-yet-implemented 'try' feature, and the
1813 in-flux .buildbot/ options directory.
1815 2005-07-20 Brian Warner <warner@lothar.com>
1817 * buildbot/locks.py: added temporary id() numbers to Lock
1818 descriptions, to track down a not-really-sharing-the-Lock bug
1820 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1822 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1823 needed for python2.2 compatibility
1824 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1825 are from the __future__
1827 2005-07-19 Brian Warner <warner@lothar.com>
1829 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1830 message when schedulers use unknown builders
1832 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1833 SlaveLock('name') and MasterLock('name') are distinct
1835 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1836 c['schedulers'] in such a way that we can actually accept
1838 * buildbot/test/test_config.py: check it
1840 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1841 utility method to *all* the Schedulers
1842 (Periodic.listBuilderNames): same
1844 * docs/buildbot.texinfo (Interlocks): update chapter to match
1847 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1848 to make sure that c['sources'], c['schedulers'], and c['status']
1849 are all lists of the appropriate objects, and that the Schedulers
1850 all point to real Builders
1851 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1852 'listBuilderNames' utility method to support this
1853 * buildbot/scheduler.py: implement the utility method
1854 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1856 * docs/buildbot.texinfo: add some @cindex entries
1858 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1859 if it wasn't already set: most tla commands will fail unless one
1861 (Arch.createRepository): and disable bazaar's revision cache, since
1862 they cause test failures (the multiple repositories we create all
1863 interfere with each other through the cache)
1865 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1866 bring it properly up to date with twisted-2.0 test guidelines
1868 * buildbot/master.py (BuildMaster): remove references to old
1869 'interlock' module, this caused a bunch of post-merge test
1871 * buildbot/test/test_config.py: same
1872 * buildbot/process/base.py (Build): same
1874 * buildbot/test/test_slaves.py: stubs for new test case
1876 * buildbot/scheduler.py: add test-case-name tag
1877 * buildbot/test/test_buildreq.py: same
1879 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1880 unnecessary init code
1881 (Bot.remote_setBuilderList): match it
1883 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1885 * buildbot/changes/mail.py (parseSyncmail): update comment
1887 * buildbot/test/test_slavecommand.py: disable Shell tests on
1888 platforms that don't suport IReactorProcess
1890 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1891 all places where we open logfiles. It causes OS-X to open the file
1892 in some weird mode that that prevents us from mixing reads and
1893 writes to the same filehandle, which we depend upon to implement
1894 _generateChunks properly. This change doesn't appear to break
1895 win32, on which "b" and "t" are treated differently but a missing
1896 flag seems to be interpreted as "t".
1898 2005-07-18 Brian Warner <warner@lothar.com>
1900 * buildbot/slave/commands.py (ShellCommand): overhaul
1901 error-handling code, to try and make timeout/interrupt work
1902 properly, and make win32 happier
1903 * buildbot/test/test_slavecommand.py: clean up, stop using
1904 reactor.iterate, add tests for timeout and interrupt
1905 * buildbot/test/sleep.py: utility for a new timeout test
1907 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1908 code from the local-usebranches branch
1910 2005-07-17 Brian Warner <warner@lothar.com>
1912 * buildbot/process/process_twisted.py
1913 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1914 minutes, to match the other twisted BuildFactories, and don't
1915 excuse failures in c/qt/win32 reactors any more.
1917 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1918 'freebsd' builders, since the buildslaves have been unavailable
1921 2005-07-13 Brian Warner <warner@lothar.com>
1923 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1924 build-on-branch feature
1926 * buildbot/process/step.py (Darcs.__init__): add base_url and
1927 default_branch arguments, just like SVN
1928 (Arch.__init__): note that the version= argument is really the
1931 * buildbot/slave/commands.py (SourceBase): keep track of the
1932 repository+branch that was used for the last checkout in
1933 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1934 match, we clobber the directory and perform a fresh checkout
1935 rather than trying to do an in-place update. This should protect
1936 us against trying to get to branch B by doing an update in a tree
1937 obtained from branch A.
1938 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1939 (SVN.setup): same, just the svnurl
1940 (Darcs.setup): same, just the repourl
1941 (Arch.setup): same, arch coordinates (url), version, and
1942 buildconfig. Also pull the buildconfig from the args dictionary,
1943 which we weren't doing before, so the build-config was effectively
1945 (Arch.sourcedirIsUpdateable): don't try to update when we're
1946 moving to a specific revision: arch can't go backwards, so it is
1947 safer to just clobber the tree and checkout a new one at the
1949 (Bazaar.setup): same sourcedata as Arch
1951 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1952 use maybeWait, to work with twisted-1.3.0 and twcompat
1953 (Dependencies.testRun_Pass): same
1955 * buildbot/test/test_vc.py: rearrange, cleanup
1957 * buildbot/twcompat.py: add defer.waitForDeferred and
1958 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1959 can work under twisted-1.3.0 .
1961 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1962 now created at setUp time. This increases the runtime of the test
1963 suite considerably (from 91 seconds to 151), but it removes the
1964 need for an offline tarball, which should solve a problem I've
1965 seen where the test host has a different version of svn than the
1966 tarball build host. The new code also validates that mode=update
1967 really picks up recent commits. This approach will also make it
1968 easier to test out branches, because the code which creates the VC
1969 branches is next to the code which uses them. It will also make it
1970 possible to test some change-notification hooks, by actually
1971 performing a VC commit and watching to see the ChangeSource get
1974 2005-07-12 Brian Warner <warner@lothar.com>
1976 * docs/buildbot.texinfo (SVN): add branches example
1977 * docs/Makefile (buildbot.ps): add target for postscript manual
1979 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1980 * buildbot/test/test_locks.py: same
1982 * buildbot/process/step.py (Darcs): comment about default branches
1984 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1985 c['interlocks'] in the config file, complain if it is present.
1986 Scan all locks in c['builders'] to make sure the Locks they use
1988 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1989 add some tests to check for non-uniquely-named Locks
1990 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1991 since the unique-Lock validation code requires it now
1993 * buildbot/locks.py: fix test-case-name
1995 * buildbot/interlock.py: remove old file
1997 2005-07-11 Brian Warner <warner@lothar.com>
1999 * buildbot/test/test_interlock.py: rename to..
2000 * buildbot/test/test_locks.py: .. something shorter
2002 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
2003 versions (after 2.0.1) changed internet.TCPClient to shut down the
2004 connection in stopService. Change the code to handle this
2007 * buildbot/process/base.py (Build): handle whole-Build locks
2008 * buildbot/process/builder.py (Builder.compareToSetup): same
2009 * buildbot/test/test_interlock.py: make tests work
2011 * buildbot/process/step.py (BuildStep.startStep): complain if a
2012 Step tries to claim a lock that's owned by its own Build
2013 (BuildStep.releaseLocks): typo
2015 * buildbot/locks.py (MasterLock): use ComparableMixin so config
2016 file reloads don't replace unchanged Builders
2018 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
2019 rewrite to cover new Locks instead of old c['interlocks']
2020 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
2024 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
2025 start the master and connect the buildslave
2027 * buildbot/process/step.py (FailingDummy.done): finish with a
2028 FAILURE status rather than raising an exception
2030 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
2031 stringify a BuildRequest.reason that is None
2033 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
2035 * buildbot/status/builder.py (BuildSetStatus): implement enough to
2036 allow scheduler.Dependent to work
2037 * buildbot/buildset.py (BuildSet): set .reason and .results
2039 * buildbot/test/test_interlock.py (Locks.setUp): connect both
2040 slaves, to make the test stop hanging. It still fails, of course,
2041 because I haven't even started to implement Locks.
2043 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
2045 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
2046 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
2047 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
2048 (Dependent): new class for downstream build dependencies
2049 * buildbot/test/test_dependencies.py: tests (still failing)
2051 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
2053 2005-07-07 Brian Warner <warner@lothar.com>
2055 * buildbot/test/runutils.py (RunMixin): factored this class out..
2056 * buildbot/test/test_run.py: .. from here
2057 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
2058 added new buildbot.locks tests (which all hang right now)
2059 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
2060 * buildbot/process/step.py: claim/release per-BuildStep locks
2062 * docs/Makefile: add 'buildbot.html' target
2064 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
2065 interpreted as "HEAD", so that all VC steps can accept branch=None
2066 and have it mean the "default branch".
2068 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
2070 2005-07-07 Brian Warner <warner@lothar.com>
2072 * docs/examples/twisted_master.cfg: update to match current usage
2074 * docs/buildbot.texinfo (System Architecture): comment out the
2075 image, it doesn't exist yet and just screws up the HTML manual.
2077 2005-07-05 Brian Warner <warner@lothar.com>
2079 * debian/.cvsignore: oops, missed one. Removing leftover file.
2081 2005-06-17 Brian Warner <warner@lothar.com>
2083 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
2084 changed its output in 1.2.0, don't mistakenly think that the
2085 subversion we find isn't capable of supporting our tests.
2087 * debian/*: remove the debian/ directory and its contents, to make
2088 life easier for the proper Debian maintainer
2090 * Makefile (release): same
2092 2005-06-07 Brian Warner <warner@lothar.com>
2094 * everything: create a distinct SourceStamp class to replace the
2095 ungainly 4-tuple, let it handle merging instead of BuildRequest.
2096 Changed the signature of Source.startVC to include the revision
2097 information (instead of passing it through self.args). Implement
2098 branches for SVN (now only Darcs/Git is missing support). Add more
2101 2005-06-06 Brian Warner <warner@lothar.com>
2103 * everything: rearrange build scheduling. Create a new Scheduler
2104 object (configured in c['schedulers'], which submit BuildSets to a
2105 set of Builders. Builders can now use multiple slaves. Builds can
2106 be run on alternate branches, either requested manually or driven
2107 by changes. This changed some of the Status classes. Interlocks
2108 are out of service until they've been properly split into Locks
2109 and Dependencies. treeStableTimer, isFileImportant, and
2110 periodicBuild have all been moved from the Builder to the
2112 (BuilderStatus.currentBigState): removed the 'waiting' and
2113 'interlocked' states, removed the 'ETA' argument.
2115 2005-05-24 Brian Warner <warner@lothar.com>
2117 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
2118 erroneously abandons the connection (in clientConnectionFailed)
2119 for non-UserErrors, which means that if we lose the connection due
2120 to a network problem or a timeout, we'll never try to reconnect.
2121 Fix this by not upcalling to the buggy parent method. Note:
2122 twisted-2.0 fixes this, but the function only has 3 lines so it
2123 makes more sense to copy it than to try and detect the buggyness
2124 of the parent class. Fixes SF#1207588.
2126 * buildbot/changes/changes.py (Change.branch): doh! Add a
2127 class-level attribute to accomodate old Change instances that were
2128 pickled before 0.6.5 (where .branch was added for new Changes).
2129 This fixes the exception that occurs when you try to look at an
2130 old Change (through asHTML).
2132 * buildbot/__init__.py (version): bump to 0.6.6+ while between
2135 2005-05-23 Brian Warner <warner@lothar.com>
2137 * buildbot/__init__.py (version): release 0.6.6
2139 2005-05-23 Brian Warner <warner@lothar.com>
2141 * NEWS: update for 0.6.6 release
2142 * debian/changelog: same
2144 * buildbot/scripts/runner.py (start): put the basedir in sys.path
2145 before starting: this was done by twistd back when we spawned it,
2146 now that we're importing the pieces and running them in the
2147 current process, we have to do it ourselves. This allows
2148 master.cfg to import files from the same directory without
2149 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
2150 Stichele for the catch.
2151 (Options.opt_version): Add a --version command (actually, just make
2152 the existing --version command emit Buildbot's version too)
2154 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
2155 fix to make this behave like other LogFiles, this time to handle
2156 existing LogFiles on disk. (add the missing .upgrade method)
2157 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
2159 2005-05-21 Brian Warner <warner@lothar.com>
2161 * buildbot/test/test_runner.py (Create.testMaster): match the
2162 rawstring change in runner.py:masterTAC
2164 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
2165 TwistedWords is installed
2166 * buildbot/test/test_status.py: same, with TwistedMail
2168 * buildbot/master.py: remove old IRC/Waterfall imports (used by
2169 some old, deprecated, and removed config keys). This should enable
2170 you to use the base buildbot functionality with Twisted-2.0.0 when
2171 you don't also have TwistedWeb and TwistedWords installed
2173 2005-05-20 Brian Warner <warner@lothar.com>
2175 * buildbot/scripts/runner.py (run): call sendchange(), not
2176 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
2177 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
2178 (stop): don't wait for process to die when sending SIGHUP
2179 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
2180 directory name gets interpreted, which you don't want
2183 * buildbot/__init__.py (version): bump to 0.6.5+ while between
2186 2005-05-18 Brian Warner <warner@lothar.com>
2188 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2190 2005-05-18 Brian Warner <warner@lothar.com>
2192 * README: update for 0.6.5
2193 * debian/changelog: same
2195 * buildbot/changes/changes.py: rename tag= to branch=, since
2196 that's how we're using it, and my design for the upcoming "build a
2197 specific branch" feature wants it. also, tag= was too CVS-centric
2198 * buildbot/changes/mail.py (parseSyncmail): same
2199 * buildbot/process/base.py (Build.isBranchImportant): same
2200 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2201 * docs/buildbot.texinfo (Attributes of Changes): same
2203 * NEWS: update tag=, update for upcoming release
2205 2005-05-17 Brian Warner <warner@lothar.com>
2207 * buildbot/scripts/runner.py (stop): actually poll once per
2208 second, instead of re-killing the poor daemon once per second.
2209 Sleep briefly (0.1s) before the first poll, since there's a good
2210 chance we can avoid waiting the full second if the daemon shuts
2211 down quickly. Also remove the sys.exit() at the end.
2212 (start): remove the unneighborly sys.exit()
2214 * Makefile: improve permission-setting to not kick Arch so badly
2216 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
2217 default --keepalive=600, since it doesn't hurt very much, and it's
2218 a hassle to discover that you need it.
2219 * buildbot/test/test_runner.py (Create.testSlave): test it
2221 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
2222 IRC bot about EXCEPTION
2224 * buildbot/status/client.py (PBListener): upcall more correctly
2226 * buildbot/process/base.py (Build.allStepsDone): if a step caused
2227 an exception mark the overall build with EXCEPTION, not SUCCESS
2229 * buildbot/scripts/runner.py (makefile_sample): remove the leading
2231 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2232 * Makefile: update some release-related stuff
2234 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2235 gets called when there isn't actually an active process, just end
2236 the Command instead of blowing up. I don't know how it gets into
2237 this state, but the twisted win32 buildslave will sometimes hang,
2238 and when it shakes its head and comes back, it thinks it's still
2239 running a Command. The next build causes this command to be
2240 interrupted, but the lack of self.process.pid breaks the interrupt
2243 * NEWS: document changes since the last release
2245 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2246 look for Makefile.buildbot instead of a bare Makefile . The
2247 'buildbot start' does not install this file, so you have to
2248 manually copy it if you want to customize startup behavior.
2249 (createMaster): change 'buildbot master' command to create
2250 Makefile.sample instead of Makefile, to create master.cfg.sample
2251 instead of master.cfg (requiring you to copy it before the
2252 buildmaster can be started). Both sample files are kept up to
2253 date, i.e. they are overwritten if they have been changed. The
2254 'buildbot.tac' file is *not* overwritten, but if the new contents
2255 don't match the old, a 'buildbot.tac.new' file is created and the
2256 user is warned. This seems to be a much more sane way to handle
2257 startup files. Also, don't sys.exit(0) when done, so we can run
2258 unit tests against it.
2259 (createSlave): same. Don't overwrite the sample info/ files.
2260 * buildbot/scripts/sample.mk: remove. the contents were pulled
2261 into runner.py, since they need to match the behavior of start()
2265 * docs/buildbot.texinfo (Launching the daemons): document it
2266 * buildbot/test/test_runner.py (Create): test it
2268 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2269 version that can handle string-in-string tests, because otherwise
2270 python-2.2 fails the tests. It'd be tremendous if Trial's test
2271 took two strings under 2.2 too.
2273 * everything: fixed all deprecation warnings when running against
2274 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2275 few that come from Twisted itself). This involved putting most of
2276 the Twisted-version specific code in the new buildbot.twcompat
2277 module, and creating some abstract base classes in
2278 buildbot.changes.base and buildbot.status.base (which might be
2279 useful anyway). __implements__ is a nuisance and requires an ugly
2280 'if' clause everywhere.
2282 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2283 delay before finishing the test: it seems that smtp.sendmail
2284 doesn't hang up on the server, so we must wait a moment so it can
2285 hang up on us. This removes the trial warning about an unclean
2288 2005-05-16 Brian Warner <warner@lothar.com>
2290 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2291 tuple of (delay, repeats).
2292 * buildbot/test/test_vc.py (Retry): test it
2293 * docs/buildbot.texinfo (Source Checkout): document it
2294 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2295 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2296 doVCFull() are handled by re-trying the checkout (after a delay)
2297 some number of times.
2298 (ShellCommand._startCommand): make header lines easier to read
2300 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2302 (WebTest.test_logfile): make sure master gets shut down, silences
2303 some "unclean reactor" test errors
2305 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2306 reactor once after shutdown, something in certain versions of
2307 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2308 fails, svn-trunk is ok.
2310 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2311 second win32 error message
2313 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2314 validating the ETA, so the tests don't fail on slow systems
2316 2005-05-15 Brian Warner <warner@lothar.com>
2318 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2319 the new LogFile class, so upgrading works properly
2320 (LogFileProducer.resumeProducing): survive resumeProducing after
2321 we've exhausted the chunkGenerator
2323 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2325 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2326 (Log.testUpgrade): same
2328 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2329 Builds and logs with a cron job.
2331 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2332 of the old non-offline LogFile, added code to upgrade these to
2333 new-style contents-live-on-disk instances at load time (in a way
2334 that doesn't invalidate the old Build pickles, so upgrading to
2335 0.6.5 is not a one-way operation). Got rid of everything related
2337 (LogFile.__init__): create LogFiles with the parent step status,
2338 the log's name, and a builder-relative filename where it can keep
2339 the contents on disk.
2340 (LogFile.hasContents): new method, clients are advised to call it
2341 before getText or getChunks and friends. If it returns False, the
2342 log's contents have been deleted and getText() will raise an
2344 (LogFile.getChunks): made it a generator
2345 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2346 Consumer (except one that takes chunks instead of strings). This
2347 enables streaming of very large logfiles without storing the whole
2349 (BuildStatus.generateLogfileName): create names like
2350 12-log-compile-output, with a _0 suffix if required to be unique
2351 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2352 or earlier) logfiles into new-style ones
2353 (BuilderStatus): remove everything related to 'stub' builds. There
2354 is now only one build cache, and we don't strip logs from old
2356 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2357 since we no longer fight to keep it in the cache
2359 * buildbot/status/html.py (TextLog.render_GET): use a
2360 ChunkConsumer to stream the log entries efficiently.
2361 (ChunkConsumer): wrapper which consumes chunks and writes
2364 * buildbot/test/test_twisted.py (Parse.testParse): use a
2365 LogFile-like object instead of a real one
2367 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2368 (Log.testMerge3): validate more merge behavior
2369 (Log.testChunks): validate LogFile.getChunks
2370 (Log.testUpgrade): validate old-style LogFile upgrading
2371 (Log.testSubscribe): validate LogFile.subscribe
2372 (Log.testConsumer): validate LogFile.subscribeConsumer
2374 * buildbot/interfaces.py (IStatusLogStub): remove
2375 (IStatusLog.subscribeConsumer): new method
2376 (IStatusLog.hasContents): new method
2377 (IStatusLogConsumer): describes things passed to subscribeConsumer
2379 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2380 the log contents if it does not have any contents.
2381 (StatusResourceBuildStep.body): same
2382 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2384 2005-05-14 Brian Warner <warner@lothar.com>
2386 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2387 timeouts to try and make the windows metabuildslave not hang
2389 2005-05-13 Mike Taylor <bear@code-bear.com>
2391 * buildbot/slave/commands.py (rmdirRecursive): added a check
2392 to ensure the path passed into rmdirRecursive actually exists.
2393 On win32 a non-existant path would generate an exception.
2395 2005-05-13 Brian Warner <warner@lothar.com>
2397 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2398 shutil.rmtree which behaves correctly on windows in the face of
2399 files that you have to chmod before deleting. Thanks to Bear at
2400 the OSAF for the routine.
2401 (SourceBase.doClobber): use rmdirRecursive
2403 2005-05-12 Brian Warner <warner@lothar.com>
2405 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2406 method generate chunks instead of returning a big list. This
2407 allows the same method to be used for both old LogFile and new
2409 (OfflineLogFile.getText): use the generator
2410 (OfflineLogFile.subscribe): same
2411 * buildbot/status/html.py (TextLog.resumeProducing): same
2412 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2414 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2415 point out that OfflineLogFile does not currently work with
2416 html.Waterfall . Fixing this is high-priority.
2418 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2419 apparently windows defaults to using stdout
2421 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2422 better message on failure so I can figure out the win32 problem
2424 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2425 log messages to include more useful copies of the command being
2426 run, the argv array, and the child command's environment.
2427 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2429 2005-05-11 Brian Warner <warner@lothar.com>
2431 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2433 * Makefile: update the deb-snapshot version
2435 * docs/buildbot.texinfo: move all .xhtml docs into a new
2436 .texinfo-format document, adding a lot of material in the process.
2437 This is starting to look like a real user's manual. Removed all
2438 the Lore-related files: *.xhtml, *.css, template.tpl .
2439 * docs/Makefile: simple makefile to run 'makeinfo'
2440 * buildbot/scripts/sample.cfg: rearrange slightly
2441 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2443 2005-05-10 Brian Warner <warner@lothar.com>
2445 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2446 different name for the internal twistw module, handle it.
2448 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2449 * setup.py: .. and stop trying to install it
2451 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2452 'git'), the new linux kernel VC system (http://kernel.org/git/).
2453 Thanks to Brandon Philips for the patch.
2454 * buildbot/slave/commands.py (Git): same
2456 2005-05-06 Brian Warner <warner@lothar.com>
2458 * buildbot/status/builder.py (OfflineLogFile): replace the default
2459 LogFile with a form that appends its new contents to a disk file
2460 as they arrive. The complete log data is never kept in RAM. This
2461 is the first step towards handling very large (100MB+) logfiles
2462 without choking quite so badly. (The other half is
2463 producer/consumer on the HTML pages).
2464 (BuildStepStatus.addLog): use OfflineLogFile by default
2465 (BuildStatus.getLogfileName): helper code to give the
2466 OfflineLogFile a filename to work with
2468 * buildbot/test/test_status.py (Results.testAddResults): update
2469 tests to handle new asserts
2470 * buildbot/test/test_vc.py (Patch.doPatch): same
2471 * buildbot/test/test_steps.py (BuildStep.setUp): same
2473 2005-05-05 Brian Warner <warner@lothar.com>
2475 * buildbot/scripts/runner.py (start): if there is no Makefile,
2476 launch the app by importing twistd's internals and calling run(),
2477 rather than spawning a new twistd process. This stands a much
2478 better chance of working under windows.
2479 (stop): kill the process with os.kill instead of spawning
2480 /bin/kill, again to reduce the number of external programs which
2481 windows might not have in the PATH. Also wait up to 5 seconds for
2482 the process to go away, allowing things like 'buildbot stop;
2483 buildbot start' to be reliable in the face of slow shutdowns.
2485 * buildbot/master.py (Dispatcher.__getstate__): remove old
2486 .tap-related methods
2487 (BuildMaster.__getstate__): same
2489 * buildbot/slave/bot.py (makeService): same
2490 (Options.longdesc): same
2491 * buildbot/scripts/runner.py: copy over some old mktap option text
2493 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2494 'buildbot master' now creates a buildbot.tac file, so there is no
2495 longer a create-instance/save/reload sequence. mktap is dead, long
2497 * buildbot/scripts/sample.mk: use twistd -y, not -f
2498 * buildbot/test/test_config.py: remove mktap-based test
2499 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2500 * README: don't reference mktap
2502 * docs/source.xhtml: document some of the attributes that Changes
2505 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2507 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2508 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2509 * buildbot/changes/changes.py (Change)
2510 * buildbot/changes/mail.py (parseSyncmail)
2511 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2513 * buildbot/process/base.py (Build.isTagImportant)
2517 2005-05-04 Brian Warner <warner@lothar.com>
2519 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2520 connection after sending the change, so that unit tests don't
2521 complain about sockets being left around
2523 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2524 exception in phase=0 rendering
2525 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2527 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2529 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2530 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2531 and configuring builders with tuples.
2532 * buildbot/test/test_config.py: stop testing compatibility with
2533 deprecated config keys
2534 * buildbot/test/test_run.py: same
2536 2005-05-03 Brian Warner <warner@lothar.com>
2538 * contrib/arch_buildbot.py: survive if there are no logfiles
2539 (username): just use a string, os.getlogin isn't reliable
2541 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2542 so 'buildbot sendchange' actually works. The earlier test only
2543 covered the internal (non-reactor-running) form.
2545 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2546 script to notify the buildmaster about changes
2548 * buildbot/scripts/runner.py (sendchange): new command to send a
2549 change to a buildbot.changes.pb.PBChangeSource receiver.
2550 * buildbot/test/test_changes.py (Sender): test it
2552 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2553 after any reading of the config file, not just when we do it in
2554 startService. This makes some tests a bit cleaner.
2556 * buildbot/changes/pb.py: add some log messages
2558 * buildbot/process/base.py (Build.startBuild): fix a bug that
2559 caused an exception when the build terminated in the very first
2561 (Build.stepDone): let steps return a status of EXCEPTION. This
2562 terminates the build right away, and sets the build's overall
2563 status to EXCEPTION too.
2564 * buildbot/process/step.py (BuildStep.failed): return a status of
2565 EXCEPTION when that is what has happened.
2567 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2568 implement this, allowing Arch-based projects to get precise
2569 checkouts instead of always using the latest code
2570 (Bazaar): create variant of Arch to let folks use baz instead of
2571 tla. Requires a new buildslave too.
2572 * buildbot/slave/commands.py (Arch): add 'revision' argument
2573 (Bazaar): create variant of Arch that uses baz instead of tla.
2574 Remove the code that extracts the archive name from the
2575 register-archive output, since baz doesn't provide it, and require
2576 the user provide both the archive name and its location.
2577 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2579 2005-05-02 Brian Warner <warner@lothar.com>
2581 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2582 thanks to Nick Trout.
2584 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2585 deals better with source Makefile coming from a read-only CVS
2586 checkout. Thanks to Nick Trout for the catch.
2588 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2591 2005-04-28 Brian Warner <warner@lothar.com>
2593 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2595 * debian/changelog: update for 0.6.4
2597 2005-04-28 Brian Warner <warner@lothar.com>
2599 * README.w32: add a checklist of steps for getting buildbot
2601 * MANIFEST.in: include it in the tarball
2605 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2606 broken .tap files from 0.6.3 by getting rid of .services,
2607 .namedServices, and .change_svc at load time.
2609 2005-04-27 Brian Warner <warner@lothar.com>
2611 * NEWS: update in preparation for new release
2613 * buildbot/test/test_config.py (Save.testSave): don't pull in
2614 twisted.scripts.twistd, we don't need it and it isn't for windows
2617 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2618 accomodate win32 which can't do atomic-rename
2620 2005-04-27 Brian Warner <warner@lothar.com>
2622 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2623 timeouts to help the slow metabuildbot not flunk them so much
2624 (Disconnect.testBuild3): same
2625 (Disconnect.testBuild4): same
2626 (Disconnect.testInterrupt): same
2628 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2629 setup, it was completely broken for new buildmasters (those which
2630 did not have a 'change.pck' already saved. Thanks to Paul Warren
2631 for catching this (embarrassing!) bug.
2632 (Dispatcher.__getstate__): don't save our registered avatar
2633 factories, since they'll be re-populated when the config file is
2635 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2636 tests (since the real mktap-generated BuildMaster doesn't save
2638 (BuildMaster.__getstate__): don't save any service children,
2639 they'll all be re-populated when the config file is re-read.
2640 * buildbot/test/test_config.py (Save.testSave): test for this
2642 2005-04-26 Brian Warner <warner@lothar.com>
2644 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2645 rendered with Blender.. looks a bit nicer.
2646 * buildbot/docs/images/icon.blend: add the Blender file for it
2648 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2649 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2650 running under windows. This appears to be the best way to allow
2651 BuildSteps to do something normal like 'trial -v buildbot.test' or
2652 'make foo' and still expect it to work. The idea is to make the
2653 BuildSteps look as much like what a developer would type when
2654 compiling or testing the tree by hand. This approach probably has
2655 problems when there are spaces in the arguments, so if you've got
2656 windows buildslaves, you'll need to pay close attention to your
2659 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2660 timezone to the timestamp column.
2661 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2663 * buildbot/scripts/runner.py (loadOptions): do something sane for
2664 windows, I think. We use %APPDATA%/buildbot instead of
2665 ~/.buildbot, but we still search everywhere from the current
2666 directory up to the root for a .buildbot/ subdir. The "is it under
2667 $HOME" security test was replaced with "is it owned by the current
2668 user", which is only performed under posix.
2669 * buildbot/test/test_runner.py (Options.testFindOptions): update
2670 tests to match. The "is it owned by the current user" check is
2671 untested. The test has been re-enabled for windows.
2673 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2674 any "\n" in the expected output with the platform-specific line
2675 separator. Make this separator "\r\n" on PTYs under unix, they
2676 seem to do that and I don't know why
2678 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2679 windows for now, I don't know what ~/.buildbot/ should mean there.
2681 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2682 win32 compatibility, don't use "/tmp"
2683 (Basedir.testChangeBuilddir): remove more unixisms
2685 2005-04-26 Brian Warner <warner@lothar.com>
2687 * buildbot/test/test_control.py (Force.rmtree): python2.2
2688 compatibility, apparently its shutil.rmtree ignore_errors=
2689 argument is ignored.
2690 * buildbot/test/test_run.py (Run.rmtree): same
2691 (RunMixin.setUp): same
2693 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2696 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2697 'substring in string' operator, must use string.find(substr)!=-1
2698 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2699 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2701 * buildbot/scripts/runner.py (loadOptions): add code to search for
2702 ~/.buildbot/, a directory with things like 'options', containing
2703 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2704 the current directory, your $HOME directory, or anywhere
2705 inbetween, as long as you're somewhere inside your home directory.
2706 (debugclient): look in ~/.buildbot/options for master and passwd
2707 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2708 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2710 * buildbot/status/client.py (makeRemote): new approach to making
2711 IRemote(None) be None, which works under Twisted-2.0
2712 * buildbot/test/test_status.py (Client.testAdaptation): test it
2714 * buildbot/status/builder.py (Status.builderAdded): when loading a
2715 pickled BuilderStatus in from disk, set its name after loading.
2716 The config file might have changed its name (but not its
2717 directory) while it wasn't looking.
2719 * buildbot/process/builder.py (Builder.attached): always return a
2720 Deferred, even if the builder was already attached
2721 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2723 2005-04-25 Brian Warner <warner@lothar.com>
2725 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2726 category-related exception when announcing a build has finished
2728 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2729 reference no-longer-existent changemaster.sources
2730 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2732 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2735 2005-04-25 Brian Warner <warner@lothar.com>
2737 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2739 * debian/changelog: update for 0.6.3
2741 2005-04-25 Brian Warner <warner@lothar.com>
2743 * MANIFEST.in: make sure debug.glade is in the tarball
2745 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2747 * NEWS: update for the imminent 0.6.3 release
2749 * buildbot/status/html.py (HtmlResource.content): make the
2750 stylesheet <link> always point at "buildbot.css".
2751 (StatusResource.getChild): map "buildbot.css" to a static.File
2752 containing whatever css= argument was provided to Waterfall()
2753 (Waterfall): provide the "classic" css as the default.
2754 * docs/waterfall.classic.css: move default CSS from here ..
2755 * buildbot/status/classic.css: .. to here
2757 * MANIFEST.in: make sure classic.css is included in the tarball
2758 * setup.py: and that it is installed too, under buildbot/status/
2760 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2761 the module level, because buildbot.tap files from 0.6.2 don't have
2762 it in their attribute dictionary.
2764 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2765 really exists at startup, might save some confusion somewhere.
2767 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2769 * docs/waterfall.classic.css:
2770 add a stylesheet that's almost the same as the "classic"
2773 * buildbot/status/builder.py:
2774 add EXCEPTION as a result - this is a problem for the bot
2775 maintainer, not a build problem for the changers
2776 * buildbot/process/step.py:
2777 use EXCEPTION instead of FAILURE for exceptions
2778 * buildbot/status/html.py:
2779 add build_get_class to get a class out of a build/buildstep
2780 finish naming the classes
2781 split out sourceNames to changeNames and builderNames so we
2782 can style them separately
2783 * docs/config.xhtml:
2784 finish documenting classes as they are right now
2786 * buildbot/status/html.py:
2787 name the classes as we agreed on IRC
2788 * docs/config.xhtml:
2791 * buildbot/status/html.py:
2792 same for cssclass->class_
2794 * buildbot/status/html.py:
2795 as decided on IRC, use class_ for the "class" attribute to not
2796 conflict with the class keyword, and clean up the messy **{} stuff.
2798 * buildbot/status/mail.py:
2799 put back "builders" argument, and fix docstring, because the
2800 code *ignores* builders listed in this argument
2802 * buildbot/process/builder.py:
2803 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2805 * docs/config.xhtml:
2806 describe the category argument for builders
2808 * buildbot/status/builder.py:
2809 Fix a silly bug due to merging
2811 * buildbot/process/builder.py:
2812 remove category from the process Builder ...
2813 * buildbot/status/builder.py:
2814 ... and add it to BuilderStatus instead.
2815 Set category on unpickled builder statuses, they might not have it.
2816 * buildbot/master.py:
2817 include category when doing builderAdded
2818 * buildbot/status/mail.py:
2819 return None instead of self for builders we are not interested in.
2820 * buildbot/test/test_run.py:
2821 fix a bug due to only doing deferredResult on "dummy" waiting
2822 * buildbot/test/test_status.py:
2823 add checks for the Mail IStatusReceiver returning None or self
2825 * buildbot/status/html.py:
2826 fix testsuite by prefixing page title with BuildBot
2828 * buildbot/status/builder.py:
2829 have .category in builder status ...
2830 * buildbot/process/builder.py:
2831 ... and set it from Builder
2832 * buildbot/status/html.py:
2833 make .css a class variable
2834 * buildbot/test/test_status.py:
2835 write more tests to cover our categories stuff ...
2836 * buildbot/status/mail.py:
2837 ... and fix the bug that this uncovered
2839 * buildbot/changes/mail.py:
2840 * buildbot/changes/pb.py:
2841 * buildbot/master.py:
2842 * buildbot/process/base.py:
2843 * buildbot/process/factory.py:
2844 * buildbot/process/interlock.py:
2845 * buildbot/process/step.py:
2846 * buildbot/process/step_twisted.py:
2847 * buildbot/slave/commands.py:
2848 * buildbot/status/builder.py:
2849 * buildbot/status/client.py:
2850 * buildbot/status/html.py:
2851 * buildbot/status/mail.py:
2852 * buildbot/status/progress.py:
2853 * buildbot/test/test_changes.py:
2854 * buildbot/test/test_config.py:
2855 * buildbot/test/test_control.py:
2856 * buildbot/test/test_interlock.py:
2857 * buildbot/test/test_maildir.py:
2858 * buildbot/test/test_mailparse.py:
2859 * buildbot/test/test_run.py:
2860 * buildbot/test/test_slavecommand.py:
2861 * buildbot/test/test_status.py:
2862 * buildbot/test/test_steps.py:
2863 * buildbot/test/test_twisted.py:
2864 * buildbot/test/test_util.py:
2865 * buildbot/test/test_vc.py:
2866 * buildbot/test/test_web.py:
2868 add test-case-name at the top of a whole set of files
2870 * buildbot/status/builder.py:
2871 keep order of addition when getting builder names
2872 * buildbot/status/words.py:
2873 * buildbot/test/test_run.py:
2874 add test for getBuilderNames
2876 * buildbot/process/base.py:
2877 * buildbot/process/step.py:
2878 * buildbot/status/builder.py:
2879 * buildbot/status/html.py:
2880 make buildbot css-able
2881 replace the color code for purple with purple, don't understand
2882 why it wasn't purple to start with
2884 * buildbot/status/words.py:
2885 ok, so it doesn't look like BuilderStatus.remote is still valid.
2886 Use what waterfall uses instead.
2888 * buildbot/interfaces.py:
2889 * buildbot/status/builder.py:
2890 * buildbot/status/html.py:
2891 * buildbot/status/mail.py:
2892 * buildbot/status/words.py:
2893 * buildbot/test/test_run.py:
2894 use categories everywhere and make it be a list. More sensible
2895 for the future. Also make words actually respect this in
2898 * buildbot/interfaces.py:
2899 add category argument to getBuilderNames
2900 * buildbot/process/builder.py:
2901 * buildbot/status/builder.py:
2902 * buildbot/status/html.py:
2903 * buildbot/status/mail.py:
2904 * buildbot/status/words.py:
2905 * buildbot/test/test_run.py:
2906 move from specifying builders by name to specifying the category
2908 * buildbot/status/html.py:
2909 * buildbot/status/words.py:
2910 add "builders=" to __init__ of status clients so they can
2911 limit themselves to the given list of builders to report on
2913 * buildbot/status/html.py: set the title to the product name
2915 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2917 * buildbot/interfaces.py:
2918 * buildbot/status/builder.py:
2919 more documentation. Hm, not sure if ChangeLog entries make sense
2922 2005-04-23 Brian Warner <warner@lothar.com>
2924 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2926 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2928 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2929 the sub-commands that log buildmaster status to stdout and to a
2930 GUI window, respectively.
2932 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2933 functionality is working again, but all the step-status and ETA
2934 stuff is missing. Commented out a lot of code pending more
2937 * buildbot/status/client.py: make sure that IRemote(None) is None
2939 * buildbot/changes/changes.py: import defer, oops
2940 (ChangeMaster): remove the .sources list, rely upon the fact that
2941 MultiServices can be treated as sequences of their children. This
2942 cleans up the add/remove ChangeSource routines a lot, as we keep
2943 exactly one list of the current sources instead of three.
2945 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2946 up an empty ChangeMaster at init time.
2947 (BuildMaster.loadChanges): if there are changes to be had from
2948 disk, replace self.change_svc with the new ones. If not, keep
2949 using the empty ChangeMaster set up in __init__.
2950 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2951 instead of a separate list, makes the code a bit cleaner.
2952 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2953 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2954 Extend the test to make sure we can get rid of the sources when
2957 2005-04-22 Brian Warner <warner@lothar.com>
2959 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2960 and info/host files when making the slave directory
2962 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2963 whendone= argument, just return the Deferred and let the caller do
2964 what they want with it.
2965 (Disconnect.testBuild1): wait for shutdownSlave
2966 (Basedir.testChangeBuilddir): new test to make sure changes to the
2967 builddir actually get propagated to the slave
2969 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2970 explicit method, rather than passing the builddir in __init__ .
2971 Make sure to update self.basedir too, this was broken before.
2972 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2973 builders and for ones that have just had their builddir changed.
2974 (BotFactory): add a class-level .perspective attribute, so
2975 BuildSlave.waitUntilDisconnected won't get upset when the
2976 connection hasn't yet been established
2977 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2978 tests can reach through it to inspect the SlaveBuilders
2980 * buildbot/process/base.py (Build.buildException): explain the
2981 log.err with a log.msg
2982 * buildbot/process/builder.py (Builder.startBuild): same
2983 (Builder._startBuildFailed): improve error message
2985 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2986 occurred because we lost the brand-new connection, retry instead
2987 of giving up. If not, it's probably an authorization failure, and
2988 it makes sense to stop trying. Make sure we log.msg the reason
2989 that we're log.err'ing the failure, otherwise test failures are
2990 really hard to figure out.
2992 * buildbot/master.py: change loadConfig() to return a Deferred
2993 that doesn't fire until the change has been fully implemented.
2994 This means any connected slaves have been updated with the new
2995 builddir. This change makes it easier to test the code which
2996 actually implements this builddir-updating.
2997 (BotPerspective.addBuilder): return Deferred
2998 (BotPerspective.removeBuilder): same
2999 (BotPerspective.attached): same
3000 (BotPerspective._attached): same. finish with remote_print before
3001 starting the getSlaveInfo, instead of doing them in parallel
3002 (BotPerspective.list_done): same
3003 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
3004 actually calling slave.disconnect()
3005 (BotMaster.addBuilder): same
3006 (BotMaster.removeBuilder): same
3007 (BuildMaster.loadConfig): same
3008 (BuildMaster.loadConfig_Slaves): same
3009 (BuildMaster.loadConfig_Sources): same
3010 (BuildMaster.loadConfig_Builders): same
3011 (BuildMaster.loadConfig_status): same
3013 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
3014 a Deferred that fires when the source is finally removed
3016 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
3017 the previous tree on win32, where we have to do it synchronously,
3018 make sure we return a Deferred anyway.
3019 (SourceBase.doCopy): same
3021 * buildbot/scripts/runner.py (statusgui): use the text client for
3022 now, while I rewrite the Gtk one
3023 * buildbot/clients/base.py: strip out old code, leaving just the
3024 basic print-message-on-event functionality. I also remove the
3025 ReconnectingPBClientFactory, but it does at least quit when it
3026 loses the connection instead of going silent
3028 2005-04-21 Brian Warner <warner@lothar.com>
3030 * Makefile: minor tweaks
3032 * NEWS: point out deprecation warnings, new features for
3035 * buildbot/master.py (BuildMaster.loadConfig): emit
3036 DeprecationWarnings for Builders defined with tuples. Rearrange
3037 code to facility removal of deprecated configuration keys in the
3040 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
3041 'buildbot' command to put a little Makefile in the target that
3042 helps you re-create the buildbot.tap file, start or stop the
3043 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
3044 all the files 0600, since they contain passwords.
3045 (start): if there is a Makefile, and /usr/bin/make exists, use
3046 'make start' in preference to a raw twistd command. This lets
3047 slave admins put things like PYTHONPATH variables in their
3048 Makefiles and have them still work when the slave is started with
3049 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
3050 be nice to first try the 'make' command and only fall back to
3051 twistd if it fails. TODO: the Makefile's "start" command does not
3052 add the --reactor=win32 argument when running under windows.
3053 (Options.debugclient, Options.statusgui): add sub-commands to launch
3054 the debug client (formerly in contrib/debugclient.py) and the
3055 Gtk status application (currently broken)
3056 * buildbot/clients/debug.py: move from contrib/debugclient.py
3057 * buildbot/clients/debug.glade: same
3059 * buildbot/test/test_trial.py: remove it. This requires some
3060 functionality out of Twisted that isn't there yet, and until then
3061 having it around just confuses things.
3063 * buildbot/test/test_slavecommand.py (Shell): test both with and
3064 without PTYs, and make sure that command output is properly
3065 interleaved in the with-PTY case. I think the without-PTY test
3066 should pass on windows, where we never use PTYs anyway.
3068 2005-04-20 Brian Warner <warner@lothar.com>
3070 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
3072 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
3074 * NEWS: start creating entries for the next release
3076 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
3078 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
3079 (WebTest.test_webPathname): same
3080 (WebTest.test_webPathname_port): same
3081 (WebTest.test_waterfall): use the default favicon rather than
3082 rooting around the filesystem for it. Open the expected-icon file
3083 in binary mode, to make win32 tests happier (thanks to Nick Trout
3085 * buildbot/status/html.py (buildbot_icon): win32 portability
3087 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
3088 win32-compatibility fixes from Nick Trout, the "file not found" message
3089 is different under windows
3090 (FakeSlaveBuilder.__init__): clean up setup a bit
3091 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
3093 2005-04-19 Brian Warner <warner@lothar.com>
3095 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
3096 skip-if-repositories-are-unavailable test to not kill the trial
3097 that comes with Twisted-1.3.0
3099 * setup.py: install buildbot.png icon file when installing code
3101 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
3102 environment used by the command, at least on the child side.
3104 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
3105 this method needs to be added and implemented because it gets
3106 called under heavy load. I don't quite understand the
3107 producer/consumer API enough to write it.
3108 (StatusResource.getChild): add a resource for /favicon.ico
3109 (Waterfall.__init__): add favicon= argument
3110 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
3111 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
3112 (WebTest.test_webPathname): same
3113 (WebTest.test_webPathname_port): same
3114 * docs/config.xhtml: mention favicon=
3115 * buildbot/buildbot.png: add a default icon, dorky as it is
3117 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
3119 * buildbot/master.py:
3120 * buildbot/process/base.py:
3121 * buildbot/process/builder.py:
3122 * buildbot/process/interlock.py:
3123 * buildbot/status/builder.py:
3124 * buildbot/status/html.py:
3125 * buildbot/status/mail.py:
3126 * buildbot/status/words.py:
3127 new documentation while digging through the code
3129 2005-04-17 Brian Warner <warner@lothar.com>
3131 * general: try to fix file modes on all .py files: a+r, a-x,
3132 but let buildbot/clients/*.py be +x since they're tools
3134 * docs/epyrun (addMod): when an import fails, say why
3136 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
3138 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3140 * buildbot/process/base.py:
3141 * buildbot/process/builder.py:
3142 * buildbot/status/builder.py:
3143 new documentation while digging through the code
3145 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3147 * buildbot/changes/changes.py:
3148 * buildbot/changes/p4poller.py:
3149 * buildbot/interfaces.py:
3150 * buildbot/process/base.py:
3151 * buildbot/process/builder.py:
3152 * buildbot/process/step.py:
3153 * buildbot/process/step_twisted.py:
3154 * buildbot/slave/bot.py:
3155 * buildbot/slave/commands.py:
3156 * buildbot/status/builder.py:
3157 fix all docstrings to make epydoc happy. In the process of fixing
3158 some, I also moved pieces of docs, and removed some deprecated
3161 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
3163 * buildbot/process/builder.py:
3164 * buildbot/process/interlock.py:
3165 * buildbot/process/process_twisted.py:
3166 * buildbot/process/step.py:
3167 BuildProcess -> Build, as it looks like that's what happened
3168 * buildbot/process/base.py:
3169 * buildbot/process/factory.py:
3172 2005-04-17 Brian Warner <warner@lothar.com>
3174 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3175 update compile command to accomodate the Twisted split.. now
3176 instead of './setup.py build_ext -i', you do './setup.py all
3177 build_ext -i', to run build_ext over all sub-projects.
3178 (FullTwistedBuildFactory): same
3179 (TwistedReactorsBuildFactory): same
3181 * buildbot/status/html.py (TextLog.finished): null out self.req
3182 when we're done, otherwise the reference cycle of TextLog to .req
3183 to .notifications to a Deferred to TextLog.stop keeps them from
3184 being collected, and consumes a huge (610MB on pyramid at last
3185 check) amount of memory.
3187 2005-04-11 Brian Warner <warner@lothar.com>
3189 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3190 normalize the VC-repository location.. makes SVN happier with
3191 certain test environments.
3193 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3194 RemoteShellCommand gets its own .env dictionary, so that code in
3195 start() doesn't mutate the original. I think this should fix the
3196 step_twisted.Trial problem where multiple identical components
3197 kept getting added to PYTHONPATH= over and over again.
3199 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3200 adding epydoc-format docstrings to many classes. Thanks to Thomas
3201 Vander Stichele for the patches.
3202 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
3203 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
3204 * buildbot/slave/bot.py, commands.py, registry.py: same
3206 2005-04-05 Brian Warner <warner@lothar.com>
3208 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
3209 preserve timestamps, helps incremental builds of large trees.
3210 Patch from Rene Rivera.
3212 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
3213 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
3216 2005-04-03 Brian Warner <warner@lothar.com>
3218 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
3219 with one dict, apparently exec has some scoping bugs when used
3220 with both global/local dicts. Thanks to Nathaniel Smith for the
3223 2005-04-02 Brian Warner <warner@lothar.com>
3225 * buildbot/process/step_twisted.py (countFailedTests): the new
3226 trial in Twisted-2.0 emits a slightly different status line than
3227 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
3228 mistakenly think the test count is unparseable.
3229 (Trial.start): note that for some reason each build causes another
3230 copy of self.testpath to be prepended to PYTHONPATH. This needs to
3231 be fixed but I'm not sure quite where the problem is.
3233 2005-04-01 Brian Warner <warner@lothar.com>
3235 * buildbot/test/test_run.py (Run.testMaster): change some uses of
3236 deferredResult to avoid hangs/warnings under twisted-2.0
3237 (RunMixin.tearDown): same
3238 (RunMixin.shutdownSlave): same
3239 (Disconnect.testIdle1): same
3240 (Disconnect.testBuild2): same: wait one second after the build
3241 finishes for test to really be done.. this should be cleaned up to
3242 avoid wasting that second. Builder.detach uses a callLater(0),
3243 either that should be done in-line (something else needed that
3244 behavior), or it should return a Deferred that fires when the
3245 builder is really offline.
3246 (Disconnect.testBuild3): same
3247 (Disconnect.testDisappear): same
3249 * buildbot/test/test_web.py: rearrange server-setup and teardown
3250 code to remove unclean-reactor warnings from twisted-2.0
3252 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3253 so the tests don't hang under twisted-2.0
3255 2005-03-31 Brian Warner <warner@lothar.com>
3257 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3258 caused a warning each time the master changed our set of builders
3260 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3261 w32, don't unlink the file unless it already exists. Thanks to
3262 Baptiste Lepilleur for the catch.
3263 (BuilderStatus.saveYourself): same
3265 2005-02-01 Brian Warner <warner@lothar.com>
3267 * buildbot/status/html.py (TextLog.getChild): use a /text child
3268 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3269 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3270 logfile as text/plain (no markup, no headers). This replaces the
3271 previous scheme (which used an ?text=1 argument), and gets us back
3272 to a relative link (which works better when the buildbot lives
3273 behind another web server, such as Apache configured as a reverse
3274 proxy). Thanks to Gerald Combs for spotting the problem.
3276 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3279 2004-12-13 Brian Warner <warner@lothar.com>
3281 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3283 * debian/changelog: update for 0.6.2
3284 * NEWS: finalize for 0.6.2
3286 2004-12-11 Brian Warner <warner@lothar.com>
3288 * NEWS: bring it up to date
3290 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3291 detection code. Require some sign of life from the buildmaster
3292 every BotFactory.keepaliveInterval seconds. Provoke this
3293 indication at BotFactory.keepaliveTimeout seconds before the
3294 deadline by sending a keepalive request. We don't actually care if
3295 that request is answered in a timely fashion, what we care about
3296 is that .activity() is called before the deadline. .activity() is
3297 triggered by any PB message from the master (including an ack to
3298 one of the slave's status-update messages). With this new scheme,
3299 large status messages over slow pipes are OK, as long as any given
3300 message can be sent (and thus acked) within .keepaliveTimeout
3301 seconds (which defaults to 30).
3302 (SlaveBuilder.remote_startCommand): record activity
3303 (SlaveBuilder.ackUpdate): same
3304 (SlaveBuilder.ackComplete): same
3305 (BotFactory.gotPerspective): same
3306 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3308 2004-12-09 Brian Warner <warner@lothar.com>
3310 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3313 * buildbot/process/step_twisted.py (Trial._commandComplete):
3314 update self.cmd when we start the 'cat test.log' transfer. Without
3315 this, we cannot interrupt the correct RemoteCommand when we lose
3318 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3319 trying to tell the slave to stop the command if we're already
3320 inactive, or if we no longer have a .remote
3322 * buildbot/process/builder.py (Builder._detached): don't let an
3323 exception in currentBuild.stopBuild() prevent the builder from
3324 being marked offline
3326 2004-12-07 Brian Warner <warner@lothar.com>
3328 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3329 KeyError that happens when you ask for a non-existent Builder, and
3330 translate it into a UsageError.
3332 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3333 losing the slave in the middle of a remote step is handled too
3335 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3336 be a Failure, so be sure to stringify it before using it as the
3337 contents of the 'interrupt' logfile
3338 (RemoteCommand.interrupt): use stringified 'why' in
3339 remote_interruptCommand too, just in case
3341 2004-12-06 Brian Warner <warner@lothar.com>
3343 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3344 instead of 'tla update', which is more efficient in case we've
3345 missed a couple of patches since the last update.
3347 * debian/changelog: update for previous (0.6.1) release. Obviously
3348 this needs to be handled better.
3350 2004-12-05 Brian Warner <warner@lothar.com>
3352 * NEWS: update for stuff since last release
3354 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3355 match the maybeDeferred change in Dispatcher.requestAvatar
3356 * buildbot/changes/pb.py (ChangePerspective.attached): same
3357 * buildbot/status/client.py (StatusClientPerspective.attached): same
3358 * buildbot/process/builder.py (Builder._attached3): same
3359 * buildbot/pbutil.py (NewCredPerspective.attached): same
3361 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3362 the date to the top-most box, if it is not the same as today's
3365 * docs/slave.xhtml: provide a buildslave setup checklist
3367 * docs/source.xhtml (Arch): correct terminology
3369 2004-12-04 Brian Warner <warner@lothar.com>
3371 * buildbot/test/test_slavecommand.py: use sys.executable instead
3372 of hard-coding 'python' for child commands, might help portability
3374 * docs/examples/twisted_master.cfg: update to current usage
3376 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3377 'stop build' command to the IRC bot
3379 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3380 message that broke PBChangeSource
3382 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3383 (SlaveBuilder): make some attributes class-level, remove the old
3384 "update queue" which existed to support resuming a build after the
3385 master connection was lost. Try to reimplement that feature later.
3386 (SlaveBuilder.stopCommand): clear self.command when the
3387 SlaveCommand finishes, so that we don't try to kill a leftover one
3389 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3392 * buildbot/slave/commands.py (SourceBase): set self.command for
3393 all VC commands, so they can be interrupted.
3395 2004-12-03 Brian Warner <warner@lothar.com>
3397 * buildbot/master.py: clean up slave-handling code, to handle
3398 slave-disconnect and multiple-connect better
3399 (BotPerspective): make these long-lasting, exactly one per bot
3400 listed in the config file.
3401 (BotPerspective.attached): if a slave connects while an existing
3402 one appears to still be connected, disconnect the old one first.
3403 (BotPerspective.disconnect): new method to forcibly disconnect a
3404 buildslave. Use some hacks to empty the transmit buffer quickly to
3405 avoid the long (20-min?) TCP timeout that could occur if the old
3406 slave has dropped off the net.
3407 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3408 own their own SlaveStatus objects. Remove .attached/.detached, add
3409 .addSlave/.removeSlave, treat slaves like Builders (config file
3410 parsing sends deltas to the BotMaster). Inform the slave
3411 instances, i.e. the BotPerspective, about addBuilder and
3413 (BotMaster.getPerspective): turns into a single dict lookup
3414 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3415 which gives BotPerspective.attached a chance to disconnect the old
3417 (BuildMaster.loadConfig): add code (disabled) to validate that all
3418 builders use known slaves (listed in c['bots']). The check won't
3419 work with tuple-specified builders, which are deprecated but not
3420 yet invalid, so the check is disabled for now.
3421 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3422 routine, do the add/changed/removed dance with them like we do
3424 (BuildMaster.loadConfig_Sources): move source-config into a
3425 separate routine too
3427 * buildbot/status/builder.py (Status.getSlave): get the
3428 SlaveStatus object from the BotPerspective, not the BotMaster.
3430 * buildbot/test/test_run.py: bunch of new tests for losing the
3431 buildslave at various points in the build, handling a slave that
3432 connects multiple times, and making sure we can interrupt a
3435 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3436 something other than 'Bot' for the Bot object, to make certain
3437 test cases easier to write.
3438 (BuildSlave.waitUntilDisconnected): utility method for testing
3440 2004-11-30 Brian Warner <warner@lothar.com>
3442 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3444 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3445 argument, return a Deferred that always fires with True or False.
3446 I don't use an errback to indicate 'ping failed' so that callers
3447 are free to ignore the deferred without causing spurious errors in
3449 * buildbot/process/builder.py (BuilderControl.ping): implement it
3451 * buildbot/test/test_run.py (Status.testDisappear): test ping
3452 (Status.disappearSlave): fix it
3454 2004-11-30 Brian Warner <warner@lothar.com>
3456 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3457 (IBuilderControl): add .getBuild(num), only works for the current
3458 build, of course, although it might be interesting to offer
3459 something for builds in the .waiting or .interlocked state.
3461 * buildbot/process/base.py (Build): have .stopBuild just do the
3462 interrupt, then let the build die by itself.
3463 (BuildControl): add .stopBuild, and add a point-event named
3464 'interrupt' just after the build so status viewers can tell that
3466 (BuilderControl): add .getBuild
3468 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3469 stops when you kill it, good for testing
3470 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3471 contains the 'reason' text.
3473 * buildbot/status/html.py: Add Stop Build button, if the build can
3474 still be stopped. Send a Redirect (to the top page) one second
3475 later, hopefully long enough for the interrupt to have an effect.
3476 Move make_row() up to top-level to share it between Stop Build and
3479 * buildbot/slave/commands.py: only kill the child process once
3481 * buildbot/test/test_run.py: add testInterrupt
3483 2004-11-29 Brian Warner <warner@lothar.com>
3485 * buildbot/process/base.py: Refactor command interruption. The
3486 Build is now responsible for noticing that the slave has gone
3487 away: Build.lostRemote() interrupts the current step and makes
3488 sure that no further ones will be started.
3490 * buildbot/process/builder.py: When the initial remote_startBuild
3491 message fails, log it: this usually indicates that the slave has
3492 gone away, but we don't really start paying attention until they
3493 fail to respond to the first step's command.
3495 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3496 slave disconnect. Now sports a new interrupt() method. Error
3497 handling was simplified a lot by chaining deferreds, so
3498 remoteFailed/remoteComplete were merged into a single
3499 remoteComplete method (which can now get a Failure object).
3500 Likewise failed/finished were merged into just _finished.
3501 (BuildStep): Add interrupt(why) method, and if why is a
3502 ConnectionLost Failure then the step is failed with some useful
3505 * buildbot/slave/bot.py: stop the current command when the remote
3506 Step reference is lost, and when the slave is shut down.
3507 (Bot): make it a MultiService, so it can have children. Use
3508 stopService to tell when the slave is shutting down.
3509 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3510 remote_interruptCommand (which asks the current SlaveCommand to
3511 stop but allows it to keep emitting status messages), and
3512 stopCommand (which tells it to shut up and die).
3514 * buildbot/slave/commands.py: make commands interruptible
3515 (ShellCommand.kill): factor out os.kill logic
3516 (Command): factor out setup()
3517 (Command.sendStatus): don't send status if .running is false, this
3518 happens when the command has been halted.
3519 (Command.interrupt): new method, used to tell the command to die
3520 (SlaveShellCommand): implement .interrupt
3521 (DummyCommand): implement .interrupt
3522 (SourceBase, etc): factor out setup(), don't continue substeps if
3525 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3526 so they can be called after finishing
3528 * buildbot/test/test_run.py: new tests for disconnect behavior,
3529 refactor slave-shutdown routines, add different kinds of
3532 2004-11-27 Brian Warner <warner@lothar.com>
3534 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3535 method to express ETA time like "2m45s" instead of "165 seconds"
3537 2004-11-24 Brian Warner <warner@lothar.com>
3539 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3540 archive after the test completes, to avoid cluttering the user's
3541 'tla archives' listing with a bogus entry. Arch doesn't happen to
3542 provide any way to override the use of ~/.arch-params/, so there
3543 isn't a convenient way to avoid touching the setup of the user who
3545 (VC_HTTP.testArchHTTP): same
3547 2004-11-23 Brian Warner <warner@lothar.com>
3549 * buildbot/status/html.py (TextLog): split render() up into
3550 render_HEAD and render_GET. Use a Producer when sending log
3551 chunks, to reduce memory requirements and avoid sending huge
3552 non-Banana-able strings over web.distrib connections. Requires
3553 peeking under the covers of IStatusLog.
3554 (TextLog.resumeProducing): fix the "as text" link, handle client
3555 disconnects that occur while we're still sending old chunks.
3557 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3558 use defer.succeed, not the non-existent defer.success
3559 (LogFile.waitUntilFinished): same
3560 (LogFile.subscribe): don't add watchers to a finished logfile
3562 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3565 2004-11-23 Brian Warner <warner@lothar.com>
3567 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3569 2004-11-23 Brian Warner <warner@lothar.com>
3571 * NEWS: update for the 0.6.1 release
3572 * MANIFEST.in: add new files
3574 * README (INSTALLATION): explain how to enable the extra VC tests
3576 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3577 level to, so old pickled builds can be displayed ok
3579 2004-11-22 Brian Warner <warner@lothar.com>
3581 * NEWS: summarize updates since last release
3583 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3584 Yoz Grahame. Closes SF#1050138.
3586 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3589 * buildbot/process/step_twisted.py (Trial): update docs a bit
3591 * docs/factories.xhtml: fix Trial factory docs to match reality.
3594 * buildbot/process/factory.py (Trial.__init__): add args for
3595 randomly= and recurse=, making them available to instantiators
3596 instead of only to subclassers. Closes: SF#1049759.
3598 2004-11-15 Brian Warner <warner@lothar.com>
3600 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3601 try to teach the Quick factory to use multiple versions of python
3603 2004-11-12 Brian Warner <warner@lothar.com>
3605 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3606 safer w32-compatible approach, and only use it on windows
3607 (BuildStatus.saveYourself): same
3609 2004-11-11 Brian Warner <warner@lothar.com>
3611 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3612 it: one string merge per chunk. There are now separate .entries
3613 and .runEntries lists: when enumerating over all chunks, make sure
3615 * buildbot/test/test_status.py (Log): more tests
3617 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3618 chunks together, up to 10kb per chunk. This ought to cut down on
3619 the CPU-burning overhead of large log files. Thanks to Alexander
3620 Staubo for spotting the problem.
3621 * buildbot/test/test_status.py (Log): tests for same
3623 2004-11-10 Brian Warner <warner@lothar.com>
3625 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3626 header to outbound mail
3627 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3629 2004-11-08 Brian Warner <warner@lothar.com>
3631 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3632 can't do os.rename() onto an existing file, so catch the exception
3633 and unlink the target file first. This introduces a slight window
3634 where the existing file could be lost, but the main failure case
3635 (disk full) should still be handled safely.
3636 (BuildStatus.saveYourself): same
3638 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3639 separator character instead of os.sep, because the filenames being
3640 split here are coming from the VC system, which can have a
3641 different pathname convention than the local host. This should
3642 help a buildmaster running on windows that uses a CVS repository
3643 which runs under unix.
3644 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3646 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3647 when there are no test failures to be parsed
3649 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3650 instead of the unix-specific os.system("cp"), thanks to Elliot
3651 Murphy for this and the other buildbot-vs-windows catches.
3652 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3654 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3655 echo the command as it is run
3657 * setup.py: install sample.mk too, not just sample.cfg
3658 (scripts): install contrib/windows/buildbot.bat on windows
3660 2004-11-07 Brian Warner <warner@lothar.com>
3662 * buildbot/process/builder.py (Builder._detached): clear the
3663 self.currentBuild reference, otherwise the next build will be
3664 skipped because we think the Builder is already in use.
3666 * docs/examples/twisted_master.cfg: update to match current usage
3667 on the Twisted buildbot
3669 2004-10-29 Brian Warner <warner@lothar.com>
3671 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3673 2004-10-28 Brian Warner <warner@lothar.com>
3675 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3676 have separate doVCUpdate/doVCFull methods. Catch an update failure
3677 and respond by clobbering the source directory and re-trying. This
3678 will handle local changes (like replacing a file with a directory)
3679 that will cause CVS and SVN updates to fail.
3680 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3682 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3685 2004-10-19 Brian Warner <warner@lothar.com>
3687 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3689 * buildbot/status/html.py (StatusResourceTestResults): display any
3690 TestResults that the Build might have
3691 (StatusResourceTestResult): and the logs for each TestResult
3692 (StatusResourceBuild): add link from the per-build page
3694 2004-10-15 Brian Warner <warner@lothar.com>
3696 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3697 the 'problems' portion of stdout, add TestResults to our build
3698 * buildbot/test/test_twisted.py (Parse.testParse): test it
3700 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3701 to retrieve a dict of accumulated test results
3702 (ITestResult): define what a single test result can do
3703 * buildbot/status/builder.py (TestResult): implement ITestResult
3704 (BuildStatus.getTestResults): retrieve dict of TestResults
3705 (BuildStatus.addTestResult): add TestResults
3706 * buildbot/test/test_status.py (Results.testAddResults): test it
3708 2004-10-14 Brian Warner <warner@lothar.com>
3710 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3711 instead of os.system("rm -rf") for win32 portability
3713 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3714 SignalMixin instead of starting/stopping the reactor, which is
3715 likely to cause problems with other tests
3717 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3718 self.copyComplete() call. Yoz Grahame makes the catch.
3720 * contrib/windows/buildbot.bat: helper script to deal with path
3721 issues. Thanks to Yoz Grahame.
3723 * buildbot/master.py (BuildMaster.startService): don't register a
3724 SIGHUP handler if the signal module has no SIGHUP attribute.
3725 Apparently win32 does this.
3727 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3729 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3730 test if the reactor can't offer UNIX sockets
3732 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3733 error introduced in the last commit. We really need that
3736 2004-10-12 Brian Warner <warner@lothar.com>
3738 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3739 when describing a maildir source. Thanks to Stephen Davis.
3741 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3744 * buildbot/scripts/runner.py (createMaster): install Makefile too
3745 (start): add --no_save to 'start' command
3746 * buildbot/scripts/sample.mk: simple convenience Makefile with
3747 start/stop/reload targets
3749 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3752 2004-09-30 Brian Warner <warner@lothar.com>
3754 * setup.py: Releasing buildbot-0.6.0
3756 2004-09-30 Brian Warner <warner@lothar.com>
3758 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3759 test_trial.py from the source tarball until support is complete.
3761 * NEWS: update for 0.6.0 release
3762 * buildbot/__init__.py (version): same
3765 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3766 'source' command to tell users where to get the Buildbot source
3768 * docs/examples/*.cfg: update to modern standards
3770 * NEWS: update for release
3772 * buildbot/scripts/runner.py (createMaster): remove the
3773 -shutdown.tap stuff now that it isn't necessary
3775 (start): launch buildbot.tap, not buildbot-shutdown.tap
3778 * buildbot/status/mail.py (Domain): shorten class name
3779 (MailNotifier): if lookup= is a string, pass it to Domain()
3780 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3781 (Mail.testBuild2): test the string-to-Domain shortcut
3782 (Mail.testMail): fix test
3785 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3788 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3789 more attributes on load
3790 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3791 to accomodate the whole waterfall page at once, and the thrashing
3792 results in a lot of unnecessary loads
3793 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3794 (BuilderStatus.saveYourself): same
3795 (BuilderStatus.eventGenerator): stop generating on the first missing
3796 build. We assume that saved builds are deleted oldest-first.
3797 (BuildStepStatus.__getstate__): .progress might not exist
3799 * buildbot/changes/changes.py (ChangeMaster): make it
3800 serializable, in $masterdir/changes.pck
3801 (ChangeMaster.stopService): save on shutdown
3802 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3803 * buildbot/test/test_config.py: load Changes before config file
3806 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3807 "Oh my god, you killed the command" header on a separate line
3809 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3810 skip over corrupted build pickles
3811 (BuilderStatus.getFullBuildByNumber): same
3812 (BuilderStatus.eventGenerator): skip over unavailable builds
3813 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3814 do an atomic rename. This prevents a corrupted pickle when some
3815 internal serialization error occurs.
3816 (BuilderStatus.saveYourself): same
3818 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3819 the timeout for shell commands, it got lost somehow
3821 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3822 run out of build steps, return the rest of the builder events
3824 * buildbot/interfaces.py (IBuilderControl.ping): add method
3826 * buildbot/process/builder.py (BuilderControl.ping): move
3827 slave-ping to BuilderControl, and fix the failure case in the
3828 process (Event.finish() is the verb, Event.finished is the noun).
3830 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3831 through the BuilderControl instead of the BuilderStatus
3832 (EventBox): add adapter for builder.Event, allowing builder events to
3833 be displayed in the waterfall display
3835 * buildbot/master.py (BotMaster.stopService): add a 'master
3836 shutdown' event to the builder's log
3837 (BuildMaster.startService): and a 'master started' on startup
3839 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3840 builder events into the BuildStep event stream
3841 (Status.builderAdded): add a 'builder created' event
3844 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3845 command to announce the completion of a running build
3846 (IrcStatusBot.command_FORCE): announce when the build finishes
3848 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3849 don't evict unfinished builds from the cache: they must stay in
3850 the full-cache until their logfiles have stopped changing. Make
3851 sure the eviction loop terminates if an unfinished build was hit.
3852 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3853 This lets exceptions be dumped in an email status message. Really
3854 we need LogFiles which contain both text and HTML, instead of two
3856 (BuildStatus.__getstate__): handle self.finished=False
3857 (Status.builderAdded): if the pickle is corrupted, abandon the
3858 history and create a new BuilderStatus object.
3860 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3861 self.progress attribute, helped one test which doesn't fully set
3862 up the Build object.
3864 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3865 IStatusLog methods into an Interface that is implemented by "stub"
3866 logs, for which all the actual text chunks are on disk (in the
3867 pickled Build instance). To show the log contents, you must first
3868 adapt the stub log to a full IStatusLog object.
3870 * buildbot/status/builder.py (LogFileStub): create separate stub
3871 log objects, which can be upgraded to a real one if necessary.
3872 (LogFile): make them persistable, and let them stubify themselves
3874 (BuildStepStatus): same
3876 (BuildStatus.saveYourself): save the whole build out to disk
3877 (BuilderStatus): make it persistable
3878 (BuilderStatus.saveYourself): save the builder to disk
3879 (BuilderStatus.addFullBuildToCache): implement two caches which
3880 hold Build objects: a small one which holds full Builds, and a
3881 larger one which holds "stubbed" Builds (ones with their LogFiles
3882 turned into LogFileStubs). This reduces memory usage by the
3883 buildmaster by not keeping more than a few (default is 2) whole
3884 build logs in RAM all the time.
3885 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3887 (BuilderStatus.eventGenerator): rewrite since .builds went away
3888 (BuilderStatus.buildStarted): remove the .builds array. Add the
3889 build to the "full" cache when it starts.
3890 (BuilderStatus._buildFinished): save the build to disk when it
3892 (Status): give it a basedir (same as the BuildMaster's basedir)
3893 where the builder pickles can be saved
3894 (Status.builderAdded): create the BuilderStatus ourselves, by
3895 loading a pickle from disk (or creating a new instance if there
3896 was none on disk). Return the BuilderStatus so the master can glue
3897 it into the new Builder object.
3899 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3900 all BuilderStatuses to save themselves out to disk. This is in
3901 lieu of saving anything important in the main Application pickle
3902 (the -shutdown.tap file).
3903 (BuildMaster.__init__): give Status() a basedir for its files
3904 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3905 to get the BuilderStatus, then give it to the Builder (instead of
3906 doing it the other way around). It's ok if the status announces
3907 the new Builder before it's really ready, as the outside world can
3908 only see the BuilderStatus object anyway (and it is ready before
3909 builderAdded returns). Use the builder's "builddir" (which
3910 normally specifies where the slave will run the builder) as the
3911 master's basedir (for saving serialized builds).
3913 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3914 coerce the logfile to IStatusLog before trying to get the text
3915 chunks out of it. This will pull the full (non-stubified) Build in
3916 from disk if necessary.
3917 (TextLog): fix the adapter registration
3919 * buildbot/test/test_control.py (Force.setUp): create the basedir
3920 * buildbot/test/test_web.py: same
3921 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3922 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3923 * buildbot/test/test_run.py (Run.testMaster): same
3924 (Status.setUp): same
3926 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3928 * buildbot/status/html.py (Waterfall.__init__): store actual
3929 allowForce flag passed in rather than using True for everyone;
3930 make sure setting it to False doesn't cause a NameError
3932 (StatusResourceBuilder.__init__) add the builder name to the page
3934 (StatusResourceBuilder.body) move HTML generation for a name/value
3935 row into a helper method (StatusResourceBuilder.make_row); only
3936 generate the "Force Build" form if allowForce was True and the
3937 slave is connected. Use class attributes in the generated HTML to
3938 spread a little CSS-joy.
3940 2004-09-28 Brian Warner <warner@lothar.com>
3942 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3943 warning-scanner to not ignore things like
3944 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3946 * buildbot/status/html.py (StatusResource.control): add some
3947 class-level values for .control in an attempt to make upgrading
3950 * buildbot/util.py (ComparableMixin): survive missing attributes,
3951 such as when a class is modified and we're comparing old instances
3954 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3955 failure handling, remove a redundant try/except block. Don't
3956 return the full traceback to the IRC channel.
3957 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3958 error messages. Get ETA properly.
3960 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3961 the reason, since (at least) IRC message will have <> in them.
3962 (StatusResourceBuilder.__init__): take an IBuilderControl
3963 (StatusResourceBuilder.force): use the IBuilderControl we get in
3964 the constructor instead of trying to make our own. Catch the
3965 new exceptions and ignore them for now (until we make an
3966 intermediate web page where we could show the error message)
3967 (StatusResource): create with an IControl, use it to give an
3968 IBuilderControl to all children
3969 (Waterfall): take an allowForce= option, pass an IControl object
3970 to StatusResource if it is True
3972 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3974 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3975 catch new exceptions and return string forms
3977 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3978 * buildbot/process/builder.py (Builder.forceBuild): raise them
3979 * buildbot/test/test_control.py (Force.testNoSlave): new test
3980 (Force.testBuilderInUse): same
3983 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3985 * buildbot/test/test_run.py: use IControl
3986 * buildbot/test/test_vc.py: same
3988 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3989 to use IControl. Still offline.
3990 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3992 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3993 who=None so periodic builds don't send out status mail
3994 (Builder.forceBuild): include reason in the log message
3995 (BuilderControl.forceBuild): rename 'name' to 'who'
3997 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3998 'who' parameter, but make it None by default so builds forced by
3999 slave admins don't cause status mail to be sent to anybody
4000 (BotMaster.forceBuild): same. this method is deprecated.
4001 (DebugPerspective.perspective_forceBuild): same, use IControl.
4002 (DebugPerspective.perspective_fakeChange): use IControl..
4003 (Dispatcher.requestAvatar): .. so don't set .changemaster
4005 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
4006 parameter to avoid confusion with the name of the builder
4009 * buildbot/status/mail.py: refine comment about needing 2.3
4011 * buildbot/status/html.py: move all imports to the top
4013 * buildbot/test/test_control.py: test new interfaces
4014 * buildbot/test/test_run.py (Status): handle new interfaces
4015 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
4017 * buildbot/process/base.py (BuildControl): implement IBuildControl
4018 and its lonely getStatus() method
4020 * buildbot/process/builder.py (BuilderControl): implement
4021 IBuilderControl, obtained by adapting the Builder instance
4022 (Builder.startBuild): return a BuilderControl instead of a
4023 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
4024 accomplish the same thing.
4026 * buildbot/master.py: move all import statements to the top
4027 (Control): implement IControl, obtained by adapting the
4028 BuildMaster instance.
4030 * buildbot/interfaces.py: add IControl, IBuilderControl, and
4031 IBuildControl. These are used to force builds. Eventually they
4032 will provide ways to reconfigure the Builders, pause or abandon a
4033 Build, and perhaps control the BuildMaster itself.
4035 2004-09-26 Brian Warner <warner@lothar.com>
4037 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
4038 ends up comparing us against something without a .__class__
4040 2004-09-24 Brian Warner <warner@lothar.com>
4042 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
4045 * Makefile: add 'deb-snapshot' target, to create a timestamped
4048 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
4050 2004-09-23 Brian Warner <warner@lothar.com>
4052 * buildbot/__init__.py (version): move version string here
4053 * setup.py: get version string from buildbot.version
4054 * buildbot/status/html.py (WaterfallStatusResource.body): add
4055 buildbot version to the page footer
4056 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
4059 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
4060 slaves, let the second know where the first one is coming from
4061 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
4062 see our exceptions. It would be nice if there were a way to just
4063 send them the exception type and value, not the full traceback.
4066 * buildbot/status/mail.py (MailNotifier): add a new argument
4067 sendToInterestedUsers=, which can be set to False to disable the
4068 usual send-to-blamelist behavior.
4069 (top): handle python-2.2 which has no email.MIMEMultipart
4070 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
4071 (MailNotifier.disownServiceParent): unsubscribe on removal
4073 * buildbot/test/test_status.py (Mail.testBuild2): test it
4076 * buildbot/status/progress.py (Expectations.wavg): tolerate
4077 current=None, which happens when steps start failing badly
4078 * buildbot/test/test_status.py (Progress.testWavg): test for it
4080 * buildbot/process/step.py (SVN.startVC): when the (old) slave
4081 doesn't understand args['revision'], emit a warning instead of
4082 bailing completely. Updating to -rHEAD is probably close enough.
4084 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
4086 * buildbot/test/test_status.py: at least import bb.status.client
4087 even if we don't have any test coverage for it yet
4089 * contrib/svn_buildbot.py: don't require python2.3
4090 (main): wait, do require it (for sets.py), but explain how to
4091 make it work under python2.2
4093 2004-09-23 Brian Warner <warner@lothar.com>
4095 * contrib/svn_buildbot.py: include the revision number in the Change
4097 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
4098 using util.now() because FreshCVS is a realtime service
4100 * buildbot/status/event.py: delete dead code
4101 * buildbot/process/step.py: don't import dead Event class
4102 * buildbot/process/step_twisted.py: same
4103 * buildbot/status/builder.py: same
4104 * buildbot/status/client.py: same
4106 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
4108 * buildbot/changes/changes.py (Change): set .when from an __init__
4109 argument (which defaults to now()), rather than having
4110 ChangeMaster.addChange set it later.
4111 (ChangeMaster.addChange): same
4113 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
4114 (parseSyncmail): same. Just use util.now() for now.
4115 (parseBonsaiMail): parse the timestamp field for when=
4117 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
4118 instead of setting .when after the fact
4122 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
4123 results when the target project uses retrial. Still under
4125 * buildbot/test/test_trial.py: same
4127 2004-09-21 Brian Warner <warner@lothar.com>
4129 * buildbot/status/mail.py (MailNotifier.__init__): include
4130 success/warnings/failure in the Subject line
4131 (MailNotifier.buildMessage): add the buildbot's URL to the body,
4132 use step.logname for the addLogs=True attachment filenames
4133 * buildbot/test/test_status.py (Mail): test Subject lines
4134 (Mail.testLogs): test attachment filenames
4136 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
4137 accept a 'who' argument from the debug tool
4138 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
4139 * contrib/debug.glade: add text box to set 'who'
4141 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
4142 .getBuilderName with .getBuilder().getName(), more flexible
4143 (IStatusLog.getName): logs have short names, but you can prefix
4144 them with log.getStep().getName() to make them more useful
4145 * buildbot/status/builder.py: same
4146 * buildbot/status/client.py: same
4147 * buildbot/status/html.py: same
4148 * buildbot/test/test_run.py (Status.testSlave): same
4149 * buildbot/process/step.py: tweak logfile names
4151 * buildbot/status/mail.py (MailNotifier): add lookup, change
4152 argument to extraRecipients. The notifier is now aimed at sending
4153 mail to the people involved in a particular build, with additional
4154 constant recipients as a secondary function.
4156 * buildbot/test/test_status.py: add coverage for IEmailLookup,
4157 including slow-lookup and failing-lookup. Make sure the blamelist
4158 members are included.
4160 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
4161 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
4162 (IBuildStatus.getInterestedUsers): new method
4163 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
4164 * buildbot/status/client.py (remote_getResponsibleUsers): same
4165 * buildbot/status/html.py (StatusResourceBuild.body): same
4166 * buildbot/test/test_run.py (Status.testSlave): same
4168 2004-09-20 Brian Warner <warner@lothar.com>
4170 * docs/users.xhtml: update concepts
4172 * Makefile: add a convenience makefile, for things like 'make
4173 test'. It is not included in the source tarball.
4175 2004-09-16 Brian Warner <warner@lothar.com>
4177 * NEWS: mention /usr/bin/buildbot, debian/*
4179 * debian/*: add preliminary debian packaging. Many thanks to
4180 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
4181 it considerably since it left their hands, I am responsible for
4182 all breakage that's resulted.
4184 * bin/buildbot: create a top-level 'buildbot' command, to be
4185 installed in /usr/bin/buildbot . For now it's just a simple
4186 frontend to mktap/twistd/kill, but eventually it will be the entry
4187 point to the 'try' command and also a status client. It is also
4188 intended to support the upcoming debian-packaging init.d scripts.
4189 * buildbot/scripts/runner.py: the real work is done here
4190 * buildbot/scripts/__init__.py: need this too
4191 * buildbot/scripts/sample.cfg: this is installed in new
4192 buildmaster directories
4193 * setup.py: install new stuff
4195 2004-09-15 Brian Warner <warner@lothar.com>
4197 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4198 'file:' schema (the version shipped with OS-X was built without the
4200 (SetupMixin.tearDown): stop the goofy twisted.web timer which
4201 updates the log-timestamp, to make sure it isn't still running after
4204 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
4205 values to the config file.
4206 * docs/examples/hello.cfg: add examples
4207 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
4208 * buildbot/status/builder.py (Status.getProjectURL): implement them
4209 * buildbot/master.py (BuildMaster.loadConfig): set them from config
4210 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
4211 * buildbot/status/html.py (WaterfallStatusResource): display them
4214 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
4215 certain error cases don't suffer a secondary exception.
4216 (top): Skip tests if the corresponding VC tool is not installed.
4218 * buildbot/process/factory.py (Trial): introduce separate
4219 'buildpython' and 'trialpython' lists, since trialpython=[] is
4220 what you want to invoke /usr/bin/python, whereas ./setup.py is
4221 less likely to be executable. Add env= parameter to pass options
4222 to test cases (which is how I usually write tests, I don't know if
4223 anyone else does it this way).
4225 * buildbot/process/step_twisted.py (Trial): handle python=None.
4226 Require 'testpath' be a string, not a list. Fix tests= typo.
4227 (Trial.start): sanity-check any PYTHONPATH value for stringness.
4229 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4230 way to deal with the possibility of removing the disconnect notify
4232 (CVS): add a 'login' parameter to give a password to 'cvs login',
4233 commonly used with pserver methods (where pw="" or pw="guest")
4235 * buildbot/slave/commands.py (SourceBase): move common args
4236 extraction and setup() to __init__, so everything is ready by the
4237 time setup() is called
4238 (CVS.start): call 'cvs login' if a password was supplied
4239 (ShellCommand): special-case PYTHONPATH: prepend the master's
4240 value to any existing slave-local value.
4242 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4243 don't have a remote, mark the builder as Offline. This whole
4244 function should probably go away and be replaced by individual
4246 (Builder.buildFinished): return the results to the build-finished
4247 deferred callback, helps with testing
4249 2004-09-14 Brian Warner <warner@lothar.com>
4251 * buildbot/test/test_vc.py: put all the repositories needed to run
4252 the complete tests into a single small (1.3MB) tarball, so I can
4253 make that tarball available on the buildbot web site. Test HTTP
4254 access (for Arch and Darcs) by spawning a temporary web server
4255 while the test runs.
4257 * docs/users.xhtml: new document, describe Buildbot's limited
4258 understanding of different human users
4260 * buildbot/test/test_vc.py: rearrange test cases a bit
4262 * buildbot/process/step_twisted.py (Trial): handle testpath=
4263 * buildbot/process/factory.py (Trial): update to use step.Trial
4265 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4267 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4268 the overall build text (which gives you 'failed 2 tests' rather
4270 (BuildStepStatus.text2): default to [], not None
4272 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4275 2004-09-12 Brian Warner <warner@lothar.com>
4277 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4278 log the whole exception if it's just an AttributeError (old slave)
4280 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4281 so (e.g.) sub-commands can be run in the right directory.
4282 (ShellCommand.start): accept an optional errorMessage= argument
4283 to make life easier for SVN.start
4284 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4286 (ShellCommand.start): move ['dir'] compatibility hack..
4287 (RemoteShellCommand.start): .. to here so everyone can use it
4289 * buildbot/process/step_twisted.py (Trial): use .workdir
4291 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4292 text displayed when debuild fails completely
4293 (Trial): snarf _trial_temp/test.log from the slave and display it
4295 2004-09-11 Brian Warner <warner@lothar.com>
4297 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4299 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4300 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4302 * buildbot/process/step.py (ShellCommand): call .createSummary
4303 before .evaluateCommand instead of the other way around. This
4304 makes it slightly easier to count warnings and then use that to
4305 set results=WARNINGS
4306 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4308 * buildbot/process/base.py (Build.buildFinished): update status
4309 before doing progress. It's embarrassing for the build to be stuck
4310 in the "building" state when an exceptions occurs elsewhere..
4312 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4313 python2.2 doesn't have 'sum'
4315 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4316 to prevent clients from accidentally sorting it
4318 * buildbot/master.py (Manhole): add username/password
4319 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4320 c['manholePort'], deprecate old usage
4321 * docs/config.xhtml: document c['manhole']
4322 * docs/examples/hello.cfg: show example of using a Manhole
4325 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4326 pretend the slave is up to date
4328 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4329 the module, overlaps with 'log', the local variable
4331 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4333 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4334 new method to let Steps find out the version of their
4335 corresponding SlaveCommand.
4336 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4337 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4338 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4340 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4341 (Arch.startVC): same
4342 (P4Sync.startVC): same
4344 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4345 Deferred so we can catch errors in remote_startCommand
4346 (RemoteShellCommand.start): same
4348 * docs/examples/twisted_master.cfg: update sample config file
4350 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4351 after connectionMade() is called, not before. Close stdin at that
4354 * buildbot/process/process_twisted.py: update to use Trial, clean
4355 up argument passing (move to argv arrays instead of string
4358 * buildbot/process/step_twisted.py (Trial): new step to replace
4359 RunUnitTests, usable by any trial-using project (not just
4360 Twisted). Arguments have changed, see the docstring for details.
4362 * buildbot/process/base.py (Build.startBuild): this now returns a
4363 Deferred. Exceptions that occur during setupBuild are now
4364 caught better and lead to fewer build_status weirdnesses, like
4365 finishing a build that was never started.
4366 (Build.buildFinished): fire the Deferred instead of calling
4367 builder.buildFinished directly. The callback argument is this
4368 Build, everything else can be extracted from it, including the
4369 new build.results attribute.
4370 * buildbot/process/builder.py (Builder.startBuild): same
4371 (Builder.buildFinished): same, extract results from build
4373 * buildbot/process/step.py (ShellCommands): remove dead code
4375 2004-09-08 Brian Warner <warner@lothar.com>
4377 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4378 doesn't try to use the leftover patched workdir
4379 (SourceStamp): test source-stamp computation for CVS and SVN
4381 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4382 patched workdir ('touch .buildbot-patched') so we don't try to
4384 (SourceBase.start): add ['revision'] for all Source steps
4385 (CVS): change args: use ['branch'] for -r, remove ['files']
4386 (CVS.buildVC): fix revision/branch stuff
4387 (SVN): add revision stuff
4389 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4390 kwargs (except 'workdir') to avoid silent spelling errors
4391 (ShellCommand.__init__): same
4392 (Source): new base class for CVS/SVN/etc. Factor out everything
4393 common, add revision computation (perform the checkout with a -D
4394 DATE or -r REVISION that gets exactly the sources described by the
4395 last Change), overridable with step.alwaysUseLatest. Add patch
4396 handling (build.getSourceStamp can trigger the use of a base
4397 revision and a patch).
4398 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4399 * docs/steps.xhtml: update docs
4400 * docs/source.xhtml: mention .checkoutDelay
4401 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4403 * buildbot/process/base.py (Build.setSourceStamp): add a
4404 .sourceStamp attribute to each Build. If set, this indicates that
4405 the build should be done with something other than the most
4406 recent source tree. This will be used to implement "try" builds.
4407 (Build.allChanges): new support method
4408 (Build.lastChangeTime): remove, functionality moved to Source steps
4409 (Build.setupBuild): copy the Step args before adding ['workdir'],
4410 to avoid modifying the BuildFactory (and thus triggering spurious
4414 * buildbot/status/html.py: rename s/commits/changes/
4415 (StatusResourceChanges): same
4416 (CommitBox.getBox): same, update URL
4417 (WaterfallStatusResource): same
4418 (StatusResource.getChild): same
4420 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4421 * contrib/debug.glade: add optional 'revision' to the fakeChange
4423 * buildbot/changes/changes.py (html_tmpl): display .revision
4424 (ChangeMaster.addChange): note .revision in log
4425 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4426 accept a ['revision'] attribute
4428 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4430 * buildbot/master.py (BotMaster.getPerspective): update the
4431 .connected flag in SlaveStatus when it connects
4432 (BotMaster.detach): and when it disconnects
4433 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4434 (BuildMaster.loadConfig_Builders): walk old list correctly
4436 * buildbot/test/test_config.py: fix prefix= usage
4438 2004-09-06 Brian Warner <warner@lothar.com>
4442 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4443 poll a P4 depot looking for recent changes. Thanks to Dave
4444 Peticolas for the contribution. Probably needs some testing after
4447 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4448 requires manual client setup for each buildslave. Rather
4449 experimental. Thanks again to Dave Peticolas.
4450 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4452 * buildbot/changes/changes.py (Change): add a .revision attribute,
4453 which will eventually be used to generate source-stamp values.
4455 * buildbot/process/step.py (RemoteCommand.start): use
4456 notifyOnDisconnect to notice when we lose the slave, then treat it
4457 like an exception. This allows LogFiles to be closed and the build
4458 to be wrapped up normally. Be sure to remove the disconnect
4459 notification when the step completes so we don't accumulate a
4460 bazillion such notifications which will fire weeks later (when the
4461 slave finally disconnects normally). Fixes SF#915807, thanks to
4462 spiv (Andrew Bennetts) for the report.
4463 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4464 really isn't Logged- specific
4465 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4466 header, since it's almost always going to be appended to an
4468 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4469 update test to handle use of notifyOnDisconnect
4471 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4472 don't clear .ETA and .currentBuild when going offline, let the
4473 current build clean up after itself
4475 * buildbot/process/builder.py (Builder.detached): wait a moment
4476 before doing things like stopping the current build, because the
4477 current step will probably notice the disconnect and cleanup the
4479 * buildbot/test/test_run.py (Status.tearDown): update test to
4480 handle asynchronous build-detachment
4482 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4484 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4485 hush a debug message
4487 2004-09-05 Brian Warner <warner@lothar.com>
4489 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4490 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4491 kernels do this: the fcntl module has the F_NOTIFY constant, but
4492 the kernel itself doesn't support the operation. Thanks to Olly
4493 Betts for spotting the problem.
4495 * buildbot/process/step.py (Darcs): new source-checkout command
4496 (Arch): new source-checkout command
4497 (todo_P4): fix constructor syntax, still just a placeholder
4498 * buildbot/test/test_vc.py (VC.testDarcs): test it
4499 (VC.testDarcsHTTP): same, via localhost HTTP
4501 (VC.testArchHTTP): same
4502 * NEWS: mention new features
4504 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4505 which tells the step to stash stdout text locally (in .stdout).
4506 Slave-side Commands can use this to make decisions based upon the
4507 output of the the ShellCommand (not just the exit code).
4508 (Darcs): New source-checkout command
4509 (Arch): New source-checkout command, uses .keepStdout in one place
4510 where it needs to discover the archive's default name.
4512 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4513 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4514 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4516 * buildbot/process/step.py (ShellCommand.describe): add an
4517 alternate .descriptionDone attribute which provides descriptive
4518 text when the step is complete. .description can be ["compiling"],
4519 for use while the step is running, then .descriptionDone can be
4520 ["compile"], used alone when the step succeeds or with "failed" when
4521 it does not. Updated other steps to use the new text.
4522 * buildbot/process/step_twisted.py: same
4523 * buildbot/test/test_run.py: update tests to match
4525 2004-08-30 Brian Warner <warner@lothar.com>
4527 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4528 (CVS.__init__): send 'patch' argument to slave
4529 (CVS.start): don't create the LoggedRemoteCommand until start(),
4530 so we can catch a .patch added after __init__
4531 (SVN.__init__): add 'patch' to SVN too
4534 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4535 argument, to let commands push data into the process' stdin pipe.
4536 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4537 is in use, since closing a PTY doesn't really affect the process
4538 in the right way (in particular, I couldn't run /usr/bin/patch
4540 (SourceBase.doPatch): handle 'patch' argument
4542 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4545 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4546 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4548 * buildbot/master.py (BotPerspective.got_commands): get command
4549 versions from slave, give to each builder
4550 * buildbot/process/builder.py (Builder.attached): stash slave
4551 command versions in .remoteCommands
4553 * docs/steps.xhtml: bring docs in-line with reality
4555 * buildbot/process/step.py (CVS.__init__): more brutal
4556 compatibility code removal
4557 (SVN.__init__): same
4559 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4560 (SlaveShellCommand.start): require ['workdir'] argument, remove
4561 the ['dir'] fallback (compatibility will come later)
4562 (SourceBase): update docs
4563 (SourceBase.start): remove ['directory'] fallback
4566 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4567 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4568 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4570 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4571 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4572 code.. I will figure out 0.5.0-compatibility hooks later)
4574 2004-08-30 Brian Warner <warner@lothar.com>
4576 * buildbot/process/process_twisted.py: rewrite in terms of new
4577 BuildFactory base class. It got significantly shorter. Yay
4580 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4581 work with the new "self.build isn't nailed down until we call
4582 step.start()" scheme: specifically, __init__ is called before the
4583 build has decided on which Changes are going in, so we don't scan
4584 build.allFiles() for .xhtml files until start()
4585 (HLint.commandComplete): use getText(), not getStdout()
4586 (RunUnitTests.start): same: don't use .build until start()
4587 (RunUnitTests.describe): oops, don't report (None) when using
4589 (RunUnitTests.commandComplete): use getText()
4590 (RunUnitTests.createSummary): same
4591 (BuildDebs.commandComplete): same
4593 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4594 set args['command'] until start(), since our BuildStep is allowed
4595 to change their mind up until that point
4596 (TreeSize.commandComplete): use getText(), not getStdout()
4598 * docs/examples/twisted_master.cfg: update to current standards
4600 * docs/factories.xhtml: update
4601 * buildbot/process/factory.py: implement all the common factories
4602 described in the docs. The Trial factory doesn't work yet, and
4603 I've probably broken all the process_twisted.py factories in the
4604 process. There are compatibility classes left in for things like
4605 the old BasicBuildFactory, but subclasses of them are unlikely to
4607 * docs/examples/glib_master.cfg: use new BuildFactories
4608 * docs/examples/hello.cfg: same
4610 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4611 explicit 'workdir' args
4613 * buildbot/process/base.py (BuildFactory): move factories to ..
4614 * buildbot/process/factory.py (BuildFactory): .. here
4615 * buildbot/process/process_twisted.py: handle move
4616 * buildbot/test/test_config.py: same
4617 * buildbot/test/test_run.py: same
4618 * buildbot/test/test_steps.py: same
4619 * buildbot/test/test_vc.py: same
4620 * docs/factories.xhtml: same
4622 * NEWS: mention config changes that require updating master.cfg
4624 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4625 argument to all steps that weren't given one already, pointing at
4626 the "build/" directory.
4628 * docs/examples/hello.cfg: remove explicit 'workdir' args
4630 * docs/factories.xhtml: document standard BuildFactory clases,
4631 including a bunch which are have not yet been written
4633 2004-08-29 Brian Warner <warner@lothar.com>
4635 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4636 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4637 buildbot.status.builder so they aren't quite so internal
4638 * buildbot/process/base.py, buildbot/process/builder.py: same
4639 * buildbot/process/maxq.py, buildbot/process/step.py: same
4640 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4641 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4642 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4644 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4645 to handle new getLogs()-returns-list behavior
4646 (StatusResourceBuildStep.getChild): same
4647 (StepBox.getBox): same
4648 (WaterfallStatusResource.phase0): same
4650 * docs/source.xhtml: document how Buildbot uses version-control
4651 systems (output side: how we get source trees)
4652 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4653 systems (input side: how we learn about Changes)
4655 * buildbot/master.py (Manhole): use ComparableMixin
4656 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4657 * buildbot/changes/mail.py (MaildirSource): same
4658 * buildbot/status/client.py (PBListener): same
4659 * buildbot/status/html.py (Waterfall): same
4660 * buildbot/status/words.py (IRC): same
4662 * NEWS: start describing new features
4664 * buildbot/status/mail.py (MailNotifier): finish implementation.
4665 The message body is still a bit sparse.
4666 * buildbot/test/test_status.py (Mail): test it
4668 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4669 and __hash__ methods I wind up adding everywhere. Specifically
4670 intended to support the buildbot config-file update scheme where
4671 we compare, say, the old list of IStatusTargets against the new
4672 one and don't touch something which shows up on both lists.
4673 * buildbot/test/test_util.py (Compare): test case for it
4675 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4676 return a list instead of a dict
4677 (IBuildStepStatus.getLogs): same. The idea is that steps create
4678 logs with vaguely unique names (although their uniqueness is not
4679 guaranteed). Thus a compilation step should create its sole
4680 logfile with the name 'compile', and contribute it to the
4681 BuildStatus. If a step has two logfiles, try to create them with
4682 different names (like 'test.log' and 'test.summary'), and only
4683 contribute the important ones to the overall BuildStatus.
4684 * buildbot/status/builder.py (Event.getLogs): same
4685 (BuildStepStatus): fix default .text and .results
4686 (BuildStepStatus.addLog): switch to list-like .getLogs()
4687 (BuildStepStatus.stepFinished): same
4688 (BuildStatus.text): fix default .text
4689 (BuildStatus.getLogs): temporary hack to return all logs (from all
4690 child BuildStepStatus objects). Needs to be fixed to only report
4691 the significant ones (as contributed by the steps themselves)
4692 * buildbot/test/test_run.py: handle list-like .getLogs()
4693 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4695 2004-08-28 Brian Warner <warner@lothar.com>
4697 * buildbot/process/builder.py (Builder.attached): serialize the
4698 attachment process, so the attach-watcher isn't called until the
4699 slave is really available. Add detached watchers too, which makes
4702 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4704 * buildbot/test/test_swap.py: remove dead code
4706 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4707 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4708 sort of as if the command being run exited with a -1. There may
4709 still be some holes in this scheme.
4710 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4711 -r option appears before the module list
4712 * buildbot/process/step.py (CVS): add 'revision' argument
4714 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4715 when sending updates or stepComplete messages to the master, since
4716 we don't currently care whether they arrive or not. When we revamp
4717 the master/slave protocol to really resume interrupted builds,
4718 this will need revisiting.
4719 (lostRemote): remove spurious print
4721 * buildbot/master.py (BotPerspective.attached): serialize the
4722 new-builder interrogation process, to make testing easier
4723 (BotMaster.waitUntilBuilderDetached): convenience function
4725 * buildbot/status/builder.py (BuilderStatus): prune old builds
4726 (BuildStatus.pruneSteps): .. and steps
4727 (BuildStepStatus.pruneLogs): .. and logs
4728 (BuilderStatus.getBuild): handle missing builds
4729 * buildbot/status/html.py (StatusResourceBuild.body): display build
4730 status in the per-build page
4731 (BuildBox.getBox): color finished builds in the per-build box
4733 2004-08-27 Brian Warner <warner@lothar.com>
4735 * buildbot/status/mail.py (MailNotifier): new notification class,
4738 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4739 variants of a common base class which handles all the mode= logic
4741 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4743 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4745 2004-08-26 Brian Warner <warner@lothar.com>
4747 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4750 * buildbot/test/test_run.py: update to new Logfile interface, new
4751 buildbot.slave modules
4752 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4754 * MANIFEST.in: new sample config file
4755 * docs/examples/hello.cfg: same
4757 * buildbot/process/step_twisted.py: remove dead import
4759 * buildbot/process/step.py (RemoteCommand.run): catch errors
4761 (RemoteCommand.remote_update): ignore updates that arrive after
4763 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4764 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4765 the responsibilities of the subclass's methods
4766 (BuildStep.failed): catch errors during failure processing
4767 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4768 (CVS): move to a mode= argument (described in docstring), rather
4769 than the ungainly clobber=/export=/copydir= combination.
4770 (SVN): add mode= functionality to SVN too
4771 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4773 * buildbot/process/base.py (Build.startNextStep): catch errors
4774 during s.startStep()
4776 * buildbot/clients/base.py: update to new PB client interface.
4777 gtkPanes is still broken
4779 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4780 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4781 * setup.py: add buildbot.slave module
4782 * buildbot/bb_tap.py: handle move
4783 * buildbot/slave/registry.py: place to register commands, w/versions
4784 * buildbot/slave/bot.py: major simplifications
4785 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4786 instead of a fixed table. Eventually this will make the slave more
4787 extensible. Use 'start' method on the command, not .startCommand.
4788 Fix unsafeTracebacks handling (I think).
4789 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4790 helper class with a .start method that returns a Deferred.
4791 SlaveShellCommand is the form reached by the buildmaster. Commands
4792 which use multiple ShellCommands can just chain them as Deferreds,
4793 with some helper methods in Command (_abandonOnFailure and
4794 _checkAbandoned) to bail on rc!=0.
4795 (CVSCommand): prefer new mode= argument
4796 (SVNFetch): add mode= argument
4798 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4799 put a useful reason string on the build
4801 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4802 core functionality into an IStatusLog object
4803 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4804 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4805 (StatusResourceBuild.body): use proper accessor methods
4806 * buildbot/status/client.py (RemoteLog): PB-access goes here
4807 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4808 which delivers log contents too
4809 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4810 * buildbot/status/event.py: remove old Logfile completely
4812 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4813 subscription interface for IStatusLog subscriptions just like all
4814 other the status subscriptions
4815 (IStatusReceiver.logChunk): method called on subscribers
4817 2004-08-24 Brian Warner <warner@lothar.com>
4819 * buildbot/process/builder.py (Builder._pong): oops, ping response
4820 includes a result (the implicit None returned by remote_print).
4821 Accept it so the _pong method handles the response correctly.
4823 2004-08-06 Brian Warner <warner@lothar.com>
4825 * buildbot/test/test_config.py: update IRC, PBListener tests
4827 * buildbot/status/client.py (StatusClientPerspective): total
4828 rewrite to match new IStatus interfaces. New subscription scheme.
4829 There are still a few optimizations to make (sending down extra
4830 information with event messages so the client doesn't have to do a
4831 round trip). The logfile-retrieval code is probably still broken.
4832 Moved the PB service into its own port, you can no longer share a
4833 TCP socket between a PBListener and, say, the slaveport (this
4834 should be fixed eventually).
4835 * buildbot/clients/base.py (Client): revamp to match. still needs
4836 a lot of work, but basic event reporting works fine. gtkPanes is
4839 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4840 instance talks to a single irc server. Threw out all the old
4841 multi-server handling code. Still need to add back in
4842 builder-control (i.e. "force build")
4844 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4845 more random text to the as-yet-unreachable per-step page
4847 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4848 rename to stepETAUpdate
4849 (BuildStatus.subscribe): add build-wide ETA updates
4850 (BuilderStatus.getState): remove more cruft
4851 (BuilderStatus.getCurrentBuild): remove more cruft
4852 (BuilderStatus.buildStarted): really handle tuple-subscription
4853 * buildbot/test/test_run.py (Status.testSlave): handle the
4854 stepETAUpdate rename
4856 * buildbot/master.py (BuildMaster): don't add a default
4857 StatusClientService. Don't add a default IrcStatusFactory. Both
4858 are now added through c['status'] in the config file. c['irc'] is
4859 accepted for backwards compatibility, the only quirk is you cannot
4860 use c['irc'] to specify IRC servers on ports other than 6667.
4862 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4863 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4864 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4865 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4868 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4869 the buildmaster to re-read its config file
4872 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4873 find out the port our server is running on
4874 (WebTest.test_webPathname_port): same
4876 * buildbot/test/test_config.py (testWebPortnum): test it
4877 (testWebPathname): ditto
4879 * docs/config.xhtml: document new c['status'] configuration option
4881 * buildbot/status/html.py (Waterfall): new top-level class which
4882 can be added to c['status']. This creates the Site as well as the
4883 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4884 reachable as .parent, for everything.
4886 * buildbot/master.py (Manhole): make it a normal service Child
4887 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4888 webPathname. It will eventually replace c['irc'] and the implicit
4889 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4890 in as (deprecated) backward compatibility hooks for now.
4893 * buildbot/process/builder.py (Builder.buildFinished): don't
4894 inform out builder_status about a finished build, as it finds out
4895 through its child BuildStatus object
4897 * buildbot/status/html.py: extensive revamp. Use adapters to make
4898 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4899 have both starting and finishing times and adjust the waterfall
4900 display accordingly, using spacers if necessary. Use SlaveStatus
4901 to get buildslave info.
4902 (StatusResourceBuildStep): new just-one-step resource, used to get
4903 logfiles. No actual href to it yet.
4905 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4906 the time being, until I get the file-naming scheme right
4908 * buildbot/status/builder.py (Event): clean started/finished names
4909 (BuildStatus.isFinished): .finished is not None is the right test
4910 (BuildStatus.buildStarted): track started/finished times ourselves
4911 (BuilderStatus.getSlave): provide access to SlaveStatus object
4912 (BuilderStatus.getLastFinishedBuild): all builds are now in
4913 .builds, even the currently-running one. Accomodate this change.
4914 (BuilderStatus.eventGenerator): new per-builder event generator.
4915 Returns BuildStepStatus and BuildStatus objects, since they can
4916 both be adapted as necessary.
4917 (BuilderStatus.addEvent): clean up started/finished attributes
4918 (BuilderStatus.startBuild,finishBuild): remove dead code
4919 (SlaveStatus): new object to provide ISlaveStatus
4921 * buildbot/process/step.py (ShellCommand.getColor): actually
4922 return the color instead of setting it ourselves
4923 (CVS.__init__): pull .timeout and .workdir options out of
4924 **kwargs, since BuildStep will ignore them. Without this neither
4925 will be sent to the slave correctly.
4926 (SVN.__init__): same
4928 * buildbot/process/builder.py (Builder): move flags to class-level
4930 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4931 SlaveStatus handle that
4933 * buildbot/process/base.py (Build.firstEvent): remove dead code
4934 (Build.stopBuild): bugfix
4936 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4938 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4939 (ChangeMaster.eventGenerator): yield Changes, since there are now
4940 Adapters to turn them into HTML boxes
4942 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4943 (BotPerspective.attached): feed a SlaveStatus object
4944 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4945 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4947 * buildbot/interfaces.py: API additions
4948 (ISlaveStatus): place to get slave status
4950 2004-08-04 Brian Warner <warner@lothar.com>
4952 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4953 the delay finishes, so the step is marked as SUCCESS
4955 * buildbot/test/test_run.py (Status.testSlave): cover more of
4956 IBuildStatus and IBuildStepStatus
4958 * buildbot/status/progress.py (StepProgress): move some flags to
4959 class-level attributes
4960 (StepProgress.remaining): if there are no other progress metrics
4961 to go by, fall back to elapsed time
4962 (StepProgress.setExpectations): take a dict of metrics instead of
4964 (BuildProgress.setExpectationsFrom): pull expectations from the
4965 Expectations, instead of having it push them to the BuildProgress
4966 (Expectations): move some flags to class-level attributes
4967 (Expectations.__init__): copy per-step times from the
4969 (Expectations.expectedBuildTime): new method for per-build ETA
4971 * buildbot/status/event.py (Logfile): move some flags to
4972 class-level attributes
4973 (Logfile.logProgressTo): better method name, let step set the
4974 progress axis name (instead of always being "output")
4976 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4977 times directly, rather than depending upon the (possibly missing)
4978 .progress object. Use 'None' to indicate "not started/finished
4980 (BuildStepStatus.getExpectations): oops, return the full list of
4982 (BuilderStatus._buildFinished): append finished builds to .builds
4984 * buildbot/process/step.py (BuildStep): add separate .useProgress
4985 flag, since empty .progressMetrics[] still implies that time is a
4987 (CVS): set up the cmd in __init__, instead of waiting for start()
4989 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4990 calculation, this will eventually turn into a proper sourceStamp
4991 (Build.setupBuild): tell the Progress to load from the Expectations,
4992 instead of having the Expectations stuff things into the Progress
4993 (Build.buildException): add a build-level errback to make sure the
4994 build's Deferred fires even in case of exceptions
4996 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4998 * buildbot/process/builder.py (Builder.forceBuild): convey the
4999 reason instead of creating a fake Change
5001 * docs/examples/twisted_master.cfg: update to match reality
5003 * buildbot/test/test_config.py, buildbot/test/test_process.py:
5004 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
5005 fix or remove broken/breaking tests
5007 * buildbot/status/event.py (Logfile.__len__): remove evil method
5009 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
5010 missing .build, for test convenience
5012 * buildbot/process/step_twisted.py: import fixes
5014 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
5016 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
5017 .statusbag reference
5019 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
5020 connection at shutdown, and stop it from reconnecting
5022 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
5023 chase down remote-execution bugs
5025 * buildbot/process/step.py: more fixes, remove
5026 BuildStep.setStatus()
5027 * buildbot/status/builder.py: move setStatus() functionality into
5029 * buildbot/status/event.py: minor fixes
5031 2004-08-03 Brian Warner <warner@lothar.com>
5033 * buildbot/process/base.py, buildbot/process/builder.py
5034 * buildbot/process/step.py, buildbot/status/builder.py
5035 * buildbot/status/event.py, buildbot/test/test_run.py:
5036 fix status delivery, get a basic test case working
5037 * buildbot/master.py: finish implementing basic status delivery,
5038 temporarily disable HTML/IRC/PB status sources
5040 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
5042 * buildbot/status/progress.py (BuildProgress): remove dead code
5044 * buildbot/interfaces.py
5045 * buildbot/process/base.py, buildbot/process/builder.py
5046 * buildbot/process/step.py, buildbot/process/step_twisted.py
5047 * buildbot/status/builder.py: Complete overhaul of the all
5048 status-delivery code, unifying all types of status clients (HTML,
5049 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
5050 look like. This commit is a checkpointing of the work-in-progress:
5051 the input side is mostly done (Builders/Builds sending status
5052 to the BuilderStatus/BuildStatus objects), but the output side has
5053 not yet been started (HTML resources querying BuilderStatus
5054 objects). Things are probably very broken right now and may remain
5055 so for several weeks, I apologize for the disruption.
5057 * buildbot/status/event.py: add a setHTML method to use pre-rendered
5058 HTML as the log's contents. Currently used for exception tracebacks.
5059 * buildbot/status/progress.py: minor spelling changes
5061 2004-08-02 Brian Warner <warner@lothar.com>
5063 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
5064 in mozilla. Also added stylesheets copied from Twisted's docs.
5065 Remember that these files are meant to be run through Lore first.
5066 Thanks to Philipp Frauenfelder for the fixes.
5067 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
5068 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
5069 * docs/template.tpl: added a Lore template
5071 2004-07-29 Brian Warner <warner@lothar.com>
5073 * buildbot/interfaces.py: revamp status delivery. This is the
5074 preview: these are the Interfaces that will be provided by new
5075 Builder code, and to which the current HTML/IRC/PB status
5076 displayers will be adapted.
5078 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
5079 on the SlaveBuilder, not the Bot.
5080 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
5082 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
5083 set .usePTY on the FakeSlaveBuilder
5085 2004-07-25 Brian Warner <warner@lothar.com>
5087 * buildbot/changes/freshcvs.py: add some debug log messages
5088 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
5089 disabled 'setFilter' syntax
5090 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
5091 don't end with a slash
5093 * buildbot/process/base.py (Builder._pong_failed): add TODO note
5095 * setup.py: bump to 0.5.0+ while between releases
5097 2004-07-23 Brian Warner <warner@lothar.com>
5099 * setup.py (version): Releasing buildbot-0.5.0
5101 2004-07-23 Brian Warner <warner@lothar.com>
5103 * README: update for 0.5.0 release
5105 * NEWS: update for 0.5.0 release
5107 2004-07-22 Brian Warner <warner@lothar.com>
5109 * buildbot/slavecommand.py (ShellCommand): make usePTY a
5110 mktap-time configuration flag (--usepty=1, --usepty=0)
5111 * buildbot/bot.py: same
5113 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
5114 an 'info' directory being unwanted
5116 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
5117 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
5118 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
5119 and earlier), use a FreshCVSSourceOldcred instead.
5120 (test): simple test routine: connect to server, print changes
5122 * buildbot/changes/changes.py (Change.getTime): make it possible
5123 to print un-timestamped changes
5125 * buildbot/master.py (makeApp): delete ancient dead code
5126 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
5127 * buildbot/test/test_config.py (testFindConfigFile): test it
5129 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
5130 instead of win32 one
5133 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
5134 now takes a dictionary instead of a tuple. See docs/config.xhtml for
5137 * buildbot/process/base.py (Builder.__init__): change constructor
5138 to accept a dictionary of config data, rather than discrete
5139 name/slave/builddir/factory arguments
5141 * docs/examples/twisted_master.cfg: update to new syntax
5142 * docs/examples/glib_master.cfg: same
5143 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
5144 rough tests of the new syntax
5147 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
5148 to be an int, which means "run a web.distrib sub-server on a TCP
5149 port". This lets you publish the buildbot status page to a remote
5150 twisted.web server (using distrib.ResourceSubscription). Also
5151 rename the local attributes used to hold these web things so
5152 they're more in touch with reality.
5153 * buildbot/test/test_web.py: test webPortnum and webPathname
5154 * docs/config.xhtml: document this new use of webPathname
5156 * docs/config.xhtml: new document, slightly ahead of reality
5158 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
5159 'prefix' handling: treat it as a simple string to check with
5160 .startswith, instead of treating it as a directory. This allows
5161 sub-directories to be used. If you use prefix=, you should give it
5162 a string that starts just below the CVSROOT and ends with a slash.
5163 This prefix will be stripped from all filenames, and filenames
5164 which do not start with it will be ignored.
5166 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
5168 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
5169 and --exclude (inverse of --include). SVN post-commit hooks
5170 now have total control over which changes get sent to buildbot and which
5173 2004-07-10 Brian Warner <warner@lothar.com>
5175 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
5176 test case to match new API
5178 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
5179 which crashed HTML display when self.entries=[] (needed to
5180 distinguish between [], which means "no entries yet", and None,
5181 which means "the entries have been swapped out to disk, go fetch
5184 2004-07-04 Brian Warner <warner@lothar.com>
5186 * buildbot/process/step_twisted.py (countFailedTests): Count
5187 skips, expectedFailures, and unexpectedSuccesses. Start scanning
5188 10kb from the end because any import errors are wedged there and
5189 they would make us think the test log was unparseable.
5190 (RunUnitTests.finishStatus): add skip/todo counts to the event box
5192 2004-06-26 Brian Warner <warner@lothar.com>
5194 * buildbot/process/step_twisted.py (RemovePYCs): turn the
5195 delete-*.pyc command into an actual BuildStep, so we can label it
5197 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5198 (FullTwistedBuildFactory): same
5200 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
5202 * contrib/fakechange.py: Add an errback when sending the fake
5203 change, so we know it didn't work.
5205 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
5207 * buildbot/process/step_twisted.py: Delete *.pyc files before
5208 calling trial, so it doesn't catch any old .pyc files whose .py
5209 files have been moved or deleted.
5211 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
5212 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
5213 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
5214 instead of ["twisted.test"], so that the end result is "trial -R
5217 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
5218 regular expression to match filenames that should be ignored when
5219 changed. Also add a --revision parameter that specifies the
5220 revision to examine, which is useful for debugging.
5222 2004-06-25 Brian Warner <warner@lothar.com>
5224 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
5225 summary of warnings (like DeprecationWarnings), next to the
5228 2004-05-13 Brian Warner <warner@lothar.com>
5230 * docs/examples/twisted_master.cfg: enable the win32 builder, as
5231 we now have a w32 build slave courtesy of Mike Taylor.
5233 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5234 so broken. Fixed a race condition that tripped up interlocked
5235 builds and caused the status to be stuck at "Interlocked" forever.
5236 The twisted buildbot's one interlocked build just so happened to
5237 never hit this case until recently (the feeding builds both pass
5238 before the interlocked build is attempted.. usually it has to wait
5240 (Builder._pong_failed): fix method signature
5242 * setup.py: bump to 0.4.3+ while between releases
5244 2004-04-30 Brian Warner <warner@lothar.com>
5246 * setup.py (version): Releasing buildbot-0.4.3
5248 2004-04-30 Brian Warner <warner@lothar.com>
5250 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5252 * README: update for 0.4.3 release
5254 * NEWS: update for 0.4.3 release
5256 * buildbot/master.py (BuildMaster.__getstate__): make sure
5257 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5259 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5260 .trial as a class attribute, for upgrade from 0.4.2
5262 * buildbot/changes/changes.py (Change.links): add .links for
5265 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5266 .textWatchers and .htmlWatchers at save time, since they are both
5267 volatile, should allow smooth 0.4.2 upgrade
5269 * buildbot/process/step.py (CVS.finishStatus): catch failed
5270 CVS/SVN commands so we can make the status box red
5272 2004-04-29 Brian Warner <warner@lothar.com>
5274 * buildbot/changes/freshcvs.py
5275 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5276 code to do setFilter(), which tells the freshcvs daemon to not
5277 send us stuff that we're not interested in. I will uncomment it
5278 when a new version of CVSToys is available in which setFilter()
5279 actually works, and I get a chance to test it better.
5281 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5283 * buildbot/master.py (Dispatcher): use a registration scheme
5284 instead of hardwired service names
5285 (BuildMaster): keep track of the Dispatcher to support
5288 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5289 PBChangeSource class instead of having it be an undocumented
5290 internal feature of the ChangeMaster. Split out the code into a
5292 * buildbot/changes/pb.py (PBChangeSource): same
5293 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5295 * docs/{factories|sources|steps}.xhtml: document some pieces
5297 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5298 using FCMaildirSource
5299 (f23osx): update OS-X builder to use python2.3, since the slave
5300 was updated to Panther (10.3.3)
5302 2004-03-21 Brian Warner <warner@lothar.com>
5304 * buildbot/process/process_twisted.py: factor out doCheckout, change
5305 to use SVN instead of CVS
5307 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5308 an SVN subclass easier
5309 (BasicSVN): subclass which uses Subversion instead of CVS
5311 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5313 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5315 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5317 2004-02-25 Brian Warner <warner@lothar.com>
5319 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5320 is now either a list (which is passed to spawnProcess directly) or
5321 a string (which gets passed to /bin/sh -c). This removes the useSH
5322 flag and the ArgslistCommand class. Also send status header at the
5323 start and end of each command, instead of having the master-side
5325 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5326 -r'. Update to use list-based arguments.
5327 (SVNFetch): use list-based arguments, use ['dir'] argument to
5329 * buildbot/test/test_steps.py (Commands): match changes
5331 * buildbot/process/step.py (InternalShellCommand.words): handle
5333 (SVN): inherit from CVS, cleanup
5335 * buildbot/status/event.py (Logfile.content): render in HTML, with
5336 stderr in red and headers (like the name of the command we're
5337 about to run) in blue. Add link to a second URL (url + "?text=1")
5338 to get just stdout/stderr in text/plain without markup. There is
5339 still a problem with .entries=None causing a crash, it seems to occur
5340 when the logfile is read before it is finished.
5342 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5343 timeout to the keepalives, and use it to explicitly do a
5344 loseConnection instead of waiting for TCP to notice the loss. This
5345 ought to clear up the silent-lossage problem.
5346 (unsafeTracebacks): pass exception tracebacks back to the master,
5347 makes it much easier to debug problems
5349 2004-02-23 Brian Warner <warner@lothar.com>
5351 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5352 the whole command to /bin/sh instead of execve [Johan Dahlin]
5353 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5354 '-r HEAD' [Johan Dahlin]
5355 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5357 * buildbot/changes/changes.py (Change): add links= argument, add
5358 asHTML method [Johan Dahlin]. Modified to make a bit more
5359 XHTMLish. Still not sure how to best use links= .
5361 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5362 Change.asHTML to display the change, not asText
5364 * buildbot/status/html.py (StatusResourceBuilder): web button to
5367 * buildbot/test/test_run.py: test to actually start a buildmaster
5370 * MANIFEST.in: bring back accidentally-dropped test helper files
5372 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5373 that require cvstoys if it is not installed
5375 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5376 values of "bin/trial" [Dave Peticolas]
5377 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5378 tests passed" when we didn't happen to run any tests
5380 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5381 flunkOnFailure [Johan Dahlin]
5383 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5384 multiple instances of the same Step class by suffixing "_2", etc,
5385 to the name until it is unique. This name needs to be unique
5386 because it is used as a key in the dictionary that tracks build
5388 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5391 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5393 2004-01-14 Brian Warner <warner@lothar.com>
5395 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5396 kicked from a channel, log it
5398 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5399 something over whatever IRC channels the buildmaster is currently
5400 connected to. Added to try and track down a problem in which the
5401 master thinks it is still connected but the IRCd doesn't see it. I
5402 used a styles.Versioned this time, so hopefully users won't have
5403 to rebuild their .tap files this time.
5404 * contrib/debug.glade: add a "Poke IRC" button
5405 * contrib/debugclient.py: same
5407 * setup.py: bump to 0.4.2+ while between releases
5409 2004-01-08 Brian Warner <warner@lothar.com>
5411 * setup.py (version): Releasing buildbot-0.4.2
5413 2004-01-08 Brian Warner <warner@lothar.com>
5415 * NEWS: update for 0.4.2 release
5417 * README: document how to run the tests, now that they all pass
5419 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5421 * buildbot/process/step.py (CVS): add a global_options= argument,
5422 which lets you set CVS global options for the command like "-r"
5423 for read-only checkout, or "-R" to avoid writing in the
5425 * buildbot/slavecommand.py (CVSCommand): same
5427 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5428 testing easier (it is turned off when testing, to avoid the
5431 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5432 to make it easier to test: break generateStepID() out to a
5433 separate function, only update statusbag if it exists.
5434 (ShellCommands): create useful text for dict-based commands too.
5436 * test/*, buildbot/test/*: move unit tests under the buildbot/
5438 * setup.py (packages): install buildbot.test too
5440 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5441 * buildbot/test/test_steps.py: fix it, tests pass now
5443 2004-01-06 Brian Warner <warner@lothar.com>
5445 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5446 freshcvs mail uses a slightly different syntax for new
5447 directories. Update parser to handle either.
5448 * test/test_mailparse.py (Test1.testMsg9): test for same
5450 2003-12-21 Brian Warner <warner@lothar.com>
5452 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5453 'warnOnWarnings' so that lintian errors mark the build orange
5455 2003-12-17 Brian Warner <warner@lothar.com>
5457 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5458 messages emitted by Bonsai, contributed by Stephen Davis.
5460 * test/*: moved all tests to use trial instead of unittest. Some
5461 still fail (test_steps, test_slavecommand, and test_process).
5463 * setup.py (version): bump to 0.4.1+ while between releases
5465 2003-12-09 Brian Warner <warner@lothar.com>
5467 * setup.py (version): Releasing buildbot-0.4.1
5469 2003-12-09 Brian Warner <warner@lothar.com>
5471 * NEWS: update for 0.4.1 release
5473 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5474 freebsd builder code a little bit
5476 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5477 don't try to compare attributes of different classes
5478 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5479 (MaildirSource.messageReceived): fix Change delivery
5481 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5482 into the config file's namespace before loading it, like the
5483 documentation claims it does
5484 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5485 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5486 daemon comes back online
5488 2003-12-08 Brian Warner <warner@lothar.com>
5490 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5491 so the example will work with online=0 as well
5493 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5494 fix the __implements__ line
5496 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5497 class a twisted.application.service.Service, use startService to
5500 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5501 directory fd instead of simple open(). I'm sure this used to work,
5502 but the current version of python refuses to open directories with
5505 2003-12-05 Brian Warner <warner@lothar.com>
5507 * setup.py (version): bump to 0.4.0+ while between releases
5509 2003-12-05 Brian Warner <warner@lothar.com>
5511 * setup.py (version): Releasing buildbot-0.4.0
5513 2003-12-05 Brian Warner <warner@lothar.com>
5515 * docs/examples/glib_master.cfg: replace old sample scripts with
5516 new-style config files
5517 * MANIFEST.in: include .cfg files in distribution tarball
5519 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5520 implement a dummy method to avoid the exception that occurs when
5521 freshcvs sends this to us.
5523 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5524 removed the method, as it broke reconnection. Apparently
5525 stopFactory is called each time the connection attempt fails. Must
5527 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5528 attribute before serialization, since without stopFactory the
5529 reconnect timer may still be active and they aren't serializable.
5531 * test/test_mailparse.py (ParseTest): test with 'self' argument
5533 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5534 argument, as these "functions" are invoked like methods from class
5535 attributes and therefore always get an instance as the first
5538 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5539 message: thanks to Stephen Davis for the catch
5541 2003-12-04 Brian Warner <warner@lothar.com>
5543 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5544 twisted's standard ReconnectingClientFactory. Handles both oldcred
5545 and newcred connections. Also has a bug-workaround for
5546 ReconnectingClientFactory serializing its connector when it
5549 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5550 pbutil. Replace makeApp stuff with proper newcred/mktap
5551 makeService(). Don't serialize Ephemerals on shutdown.
5553 * buildbot/changes/changes.py (ChangeMaster): make it a
5554 MultiService and add the sources as children, to get startService
5555 and stopService for free. This also gets rid of the .running flag.
5557 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5558 new pbutil, turn into a TCPClient at the same time (to get
5559 startService for free). Two variants exist: FreshCVSSourceOldcred
5560 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5561 yet, but when it does, we'll be ready).
5562 (FreshCVSSource.notify): handle paths which are empty after the
5563 prefix is stripped. This only happens when the top-level (prefix)
5564 directory is added, at the very beginning of a Repository's life.
5566 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5567 Now the only reconnecting code is in the factory where it belongs.
5568 (Builder.unsubscribe): unregister the disconnect callback when we
5569 delete the builder on command from the master (i.e. when the
5570 buildmaster is reconfigured and that builder goes away). This
5571 fixes a multiple-delete exception when the status client is shut
5573 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5576 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5577 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5579 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5581 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5582 a list of globs (ugh). The testdir will be searched for files
5583 named *.tests and run the tests in the order specified in each of
5584 those files. This allows for "dependancies" between tests to be
5587 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5588 argument to pass to run_maxq.py, instead of a glob.
5590 2003-10-17 Brian Warner <warner@lothar.com>
5592 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5593 files that live in the sandbox
5595 2003-10-15 Brian Warner <warner@lothar.com>
5597 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5598 spelling error in "docs" count-warnings output
5599 (HLint.start): stupid thinko meant .xhtml files were ignored
5601 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5602 tests now that cReactor is banished to the sandbox
5604 2003-10-10 Brian Warner <warner@lothar.com>
5606 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5607 scheme: now .xhtml are sources and .html are generated
5609 2003-10-08 Brian Warner <warner@lothar.com>
5611 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5612 we were ignoring the 'randomly' parameter.
5614 2003-10-01 Brian Warner <warner@lothar.com>
5616 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5617 posix, to kill sub-children of aborted slavecommands.
5619 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5620 Clean up initialization: lastBuildStatus remains None until the
5621 first build has been completed.
5623 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5624 None as a lastBuildStatus
5625 * buildbot/clients/gtkPanes.py: same
5627 * buildbot/status/client.py (StatusClientService): keep
5628 BuilderStatus objects in self.statusbags . These objects now live
5629 here in the StatusClientService and are referenced by the Builder
5630 object, rather than the other way around.
5631 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5632 * buildbot/process/base.py (Builder): same
5633 * test/test_config.py (ConfigTest.testBuilders): same
5635 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5636 an existing builder, leave the statusbag alone. This will preserve the
5639 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5640 hook. This will probably go away in favor of a class in upcoming
5643 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5644 serviceName from newcred FreshCVSNotifiee setup
5646 2003-09-29 Brian Warner <warner@lothar.com>
5648 * buildbot/process/process_twisted.py: switch to new reactor
5650 * docs/examples/twisted_master.cfg: same
5652 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5654 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5655 botmaster reference instead of the oldapp service lookup
5657 * buildbot/master.py (BuildMaster.__init__): give the
5658 StatusClientService a reference to the botmaster to make it easier to
5661 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5663 * buildbot/status/html.py (Box.td): escape hreffy things so you
5664 can have spaces in things like builder names
5665 (StatusResourceBuilder.body)
5666 (WaterfallStatusResource.body)
5667 (WaterfallStatusResource.body0): same
5669 2003-09-25 Brian Warner <warner@lothar.com>
5671 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5672 rearrange the builder list when adding or removing builders: keep
5673 them in the order the user requested.
5674 * test/test_config.py (ConfigTest.testBuilders): verify it
5676 * contrib/debug.glade: give the debug window a name
5678 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5679 now wait on multiple interlocks. Fix code relating to that.
5680 (Builder.checkInterlocks): same
5681 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5683 * buildbot/master.py (BuildMaster.loadConfig): move from
5684 deprecated pb.BrokerFactory to new pb.PBServerFactory
5685 * test/test_config.py (ConfigTest.testWebPathname): same
5687 * docs/examples/twisted_master.cfg: fix interlock declaration
5689 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5690 Interlocks to their Builders into interlock.py .
5691 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5693 * test/test_config.py (ConfigTest.testInterlocks): validate
5696 * buildbot/process/base.py (Builder.__init__): better comments
5697 * buildbot/process/interlock.py (Interlock.__repr__): same
5698 (Interlock.deactivate): add .active flag, move the code that
5699 attaches/detaches builders into the Interlock
5701 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5703 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5704 tests using the new run_maxq.py script, and reporting failures by
5707 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5708 tests, reporting their success or failure in a buildbot-friendly
5711 2003-09-24 Brian Warner <warner@lothar.com>
5713 * docs/examples/twisted_master.cfg: example of a new-style config
5714 file. This lives in the buildmaster base directory as
5717 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5718 button to make the master re-read its config file
5720 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5721 buildmaster configuration from a file. This file can be re-read
5722 later, and the buildmaster will update itself to match the new
5723 desired configuration. Also use new Twisted Application class.
5724 * test/Makefile, test/test_config.py: unit tests for same
5726 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5727 FreshCVSSources comparable, to support reload.
5728 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5730 * buildbot/process/base.py (Builder): make them comparable, make
5731 Interlocks easier to attach, to support reload. Handle
5732 re-attachment of remote slaves.
5733 * buildbot/process/interlock.py (Interlock): same
5735 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5736 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5737 buildmaster taps are now constructed with mktap.
5738 * buildbot/status/client.py (StatusClientService): same
5740 * buildbot/status/words.py: move to new Services, add support to
5741 connect to multiple networks, add reload support, allow nickname
5742 to be configured on a per-network basis
5744 2003-09-20 Brian Warner <warner@lothar.com>
5746 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5747 the freebsd builder, now that the machine has been upgraded and no
5748 longer has python2.2
5750 * setup.py (version): bump to 0.3.5+ while between releases
5752 2003-09-19 Brian Warner <warner@lothar.com>
5754 * setup.py (version): Releasing buildbot-0.3.5
5756 2003-09-19 Brian Warner <warner@lothar.com>
5758 * NEWS: add post-0.3.4 notes
5760 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5762 * MANIFEST.in: add contrib/*
5764 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5765 use a remote root now: cvs.twistedmatrix.com
5767 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5769 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5770 compatibility with old servers
5771 (FreshCVSSource.start): and provide a way to use it
5772 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5774 * docs/examples/twisted_master.py (twisted_app): update to new
5776 (twisted_app): listen on new ~buildbot socket
5777 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5779 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5780 to reduce cvs bandwidth (update instead of full checkout)
5782 2003-09-11 Brian Warner <warner@lothar.com>
5784 * contrib/fakechange.py: demo how to connect to the changemaster
5785 port. You can use this technique to submit changes to the
5786 buildmaster from source control systems that offer a hook to run a
5787 script when changes are committed.
5789 * contrib/debugclient.py: tool to connect to the debug port. You
5790 can use it to force builds, submit fake changes, and wiggle the
5793 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5794 'Dispatcher' realm to handle all the different kinds of
5795 connections and Perspectives: buildslaves, the changemaster port,
5796 the debug port, and the status client port. NewCredPerspectives
5797 now have .attached/.detached methods called with the remote 'mind'
5798 reference, much like old perspectives did. All the pb.Services
5799 turned into ordinary app.ApplicationServices .
5800 (DebugService): went away, DebugPerspectives are now created
5801 directly by the Dispatcher.
5802 (makeApp): changed interface a little bit
5804 * buildbot/changes/changes.py: newcred
5805 * buildbot/status/client.py: newcred
5807 * buildbot/clients/base.py: newcred client side changes
5808 * buildbot/bot.py: ditto
5810 * docs/examples/glib_master.py: handle new makeApp() interface
5811 * docs/examples/twisted_master.py: ditto
5813 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5814 base newcred Perspectives on. This should go away once Twisted
5815 itself provides something sensible.
5818 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5820 * contrib/svn_buildbot.py: A program that you can call from your
5821 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5822 when a change in an SVN repository has happened. See the top of
5823 the file for some minimal usage info.
5825 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5827 * buildbot/slavecommand.py (ArglistCommand): Add new
5828 ArglistCommand that takes an argument list rather than a string as
5829 a parameter. Using a st.split() for argv is very bad.
5831 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5832 update to a particular revision rather than always checking out
5833 (still not very smart about it, there may be cases where the
5834 checkout becomes inconsistent).
5836 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5838 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5839 SVN fetch support. It can checkout (not update!) a specified
5840 revision from a specified repository to a specified directory.
5842 * buildbot/status/progress.py (Expectations.update): Fix an
5843 obvious bug (apparently created by the change described in the
5844 previous ChangeLog message) by moving a check to *after* the
5845 variable it checks is defined.
5848 2003-09-08 Brian Warner <warner@lothar.com>
5850 * buildbot/status/progress.py (Expectations.update): hack to catch
5851 an exception TTimo sees: sometimes the update() method seems to
5852 get called before the step has actually finished, so the .stopTime
5853 is not set, so no totalTime() is available and we average None
5854 with the previous value. Catch this and just don't update the
5855 metrics, and emit a log message.
5857 2003-08-24 Brian Warner <warner@lothar.com>
5859 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5860 parameter to set copydir='original' in CVS commands.
5862 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5864 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5865 which tells the command to maintain a separate original-source CVS
5866 workspace. For each build, this workspace will be updated, then
5867 the tree copied into a new workdir. This reduces CVS bandwidth
5868 (from a full checkout to a mere update) while doubling the local
5869 disk usage (to keep two copies of the tree).
5871 2003-08-21 Brian Warner <warner@lothar.com>
5873 * buildbot/status/event.py (Logfile.addEntry): if the master web
5874 server dies while we're serving a page, request.write raises
5875 pb.DeadReferenceError . Catch this and treat it like a
5876 notifyFinish event by dropping the request.
5878 2003-08-18 Brian Warner <warner@lothar.com>
5880 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5881 (instead of blowing up) if a force-build command is given without
5884 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5885 don't blow up if there aren't yet any Changes in the list
5887 2003-08-02 Brian Warner <warner@lothar.com>
5889 * buildbot/bot.py (updateApplication): don't set the .tap name,
5890 since we shouldn't assume we own the whole .tap file
5892 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5893 'mktap buildbot' (without a subcommand) better
5895 2003-07-29 Brian Warner <warner@lothar.com>
5897 * buildbot/status/words.py
5898 (IrcStatusFactory.clientConnectionLost): when we lose the
5899 connection to the IRC server, schedule a reconnection attempt.
5901 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5902 use shutil.rmtree instead of forking off an "rm -rf" command.
5903 rmtree may take a while and will block until it finishes, so we
5904 use "rm -rf" if available.
5906 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5907 freebsd buildslave badly
5909 * setup.py (version): bump to 0.3.4+ while between releases
5911 2003-07-28 Brian Warner <warner@lothar.com>
5913 * setup.py (version): Releasing buildbot-0.3.4
5915 2003-07-28 Brian Warner <warner@lothar.com>
5917 * NEWS: update in preparation for release
5919 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5920 process.signalProcess instead of os.kill, to improve w32
5923 * docs/examples/twisted_master.py (twisted_app): turn off
5924 win32eventreactor: the tests hang the buildslave badly
5926 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5927 failed builds, since usually the failures are consistent
5929 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5930 add compileOpts/compileOpts2 to reactors build
5932 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5933 (twisted_app): use both default and win32eventreactor on w32 build.
5934 Use both default and kqreactor on freebsd build.
5936 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5937 add compileOpts2, which is put after the build_ext argument. w32
5938 needs "-c mingw32" here.
5940 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5941 touch .acqpath, it goes away in recent Twisted releases
5943 * docs/examples/twisted_master.py (twisted_app): use "python" for
5944 the w32 buildslave, not "python2.2"
5946 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5947 the directory exists.. should hush an exception under w32
5949 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5950 ProcessTerminated -provided values for signal and exitCode rather
5951 than parsing the unix status code directly. This should remove one
5952 more roadblock for a w32-hosted buildslave.
5954 * test/test_mailparse.py: add test cases for Syncmail parser
5956 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5957 temporary compatibility import. Note! Start importing
5958 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5960 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5962 2003-07-27 Brian Warner <warner@lothar.com>
5964 * NEWS: started adding new features
5966 * buildbot/changes/mail.py: start work on Syncmail parser, move
5967 mail sources into their own file
5969 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5970 as implementing IChangeSource
5971 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5973 * buildbot/interfaces.py: define the IChangeSource interface
5975 2003-07-26 Brian Warner <warner@lothar.com>
5977 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5979 2003-06-25 Brian Warner <warner@lothar.com>
5981 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5984 2003-06-17 Brian Warner <warner@lothar.com>
5986 * buildbot/status/words.py: clean up method usage to avoid error
5987 in silly IRC command
5988 (IrcStatusBot.emit_status): round off seconds display
5990 * buildbot/process/base.py (Build): delete the timer when saving
5991 to the .tap file, and restore it (if it should still be running)
5992 upon restore. This should fix the "next build in -34 seconds"
5993 messages that result when the master is restarted while builds are
5994 sitting in the .waiting slot. If the time for the build has
5995 already passed, start it very soon (in 1 second).
5997 * buildbot/status/words.py: more silly commands
5999 * README (REQUIREMENTS): add URLs to all required software
6001 * buildbot/status/words.py ('last'): mention results of, and time
6004 2003-05-28 Brian Warner <warner@lothar.com>
6006 * buildbot/status/words.py: add 'last' command
6007 (IrcStatusBot.emit_status): add current-small text to 'status' output
6009 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
6010 (twisted_app): remove spaces from OS-X builder name
6012 * buildbot/master.py (makeApp): add knob to turn on IRC bot
6013 * buildbot/status/words.py: IRC bot should actually be useful now
6015 2003-05-23 Brian Warner <warner@lothar.com>
6017 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
6018 "slave information" from $(slavedir)/info/* . These files are
6019 maintained by the slave administrator, and describe the
6020 machine/environment that is hosting the slave. Information from
6021 them is put into the "Builder" HTML page. Still need to establish
6022 a set of well-known filenames and meanings for this data: at the
6023 moment, *all* info/* files are sent to the master, but only
6024 'admin' and 'host' are used on that end.
6025 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
6026 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
6027 * buildbot/master.py (BotPerspective.got_info): ditto
6029 2003-05-22 Brian Warner <warner@lothar.com>
6031 * setup.py (version): bump version to 0.3.3+ while between releases
6033 2003-05-21 Brian Warner <warner@lothar.com>
6035 * setup.py: Releasing buildbot-0.3.3
6037 2003-05-21 Brian Warner <warner@lothar.com>
6039 * NEWS: 0.3.3 news items
6041 * README: describe --keepalive and life behind a NAT box
6043 * buildbot/bot.py (Bot.connected): implement application-level
6044 keepalives to deal with NAT timeouts, turn them on with
6045 --keepalive option or when SO_KEEPALIVE doesn't work.
6047 * buildbot/master.py (BotPerspective): accept keepalives silently
6049 * buildbot/process/base.py (Build.buildException): CopiedFailures
6050 don't carry as much information as local ones, so don't try to
6051 create a big HTMLized version of them.
6053 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
6054 log file when step fails due to an exception, such as when the slave
6057 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
6058 --testmodule argument instead of grepping for test-case-name tags
6059 ourselves. Remove FindUnitTests code.
6060 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
6062 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
6064 2003-05-16 Brian Warner <warner@lothar.com>
6066 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
6067 argument to allow things like CFLAGS=-O0 to be passed without relying
6068 upon /bin/sh processing on the slave.
6070 * buildbot/process/step.py (InternalShellCommand.start): send
6072 * buildbot/slavecommand.py (ShellCommand.start): create argv with
6073 'split' instead of letting /bin/sh do it. This should also remove
6074 the need for /bin/sh on the buildslave, making it more likely to
6077 * buildbot/status/html.py: html-escape text in blamelist.
6078 Add "force build" button to the Builder page.
6080 * buildbot/process/step_twisted.py (countFailedTests): look at
6081 last 1000 characters for status line, as import errors can put it
6082 before the -200 point.
6084 2003-05-15 Brian Warner <warner@lothar.com>
6086 * docs/examples/twisted_master.py: use clobber=0 for remote builds
6088 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6089 make 'clobber' a parameter, so it is possible to have builds which
6090 do full tests but do a cvs update instead of hammering the CVS
6091 server with a full checkout each build
6093 * buildbot/process/step.py (InternalShellCommand): bump default
6094 timeout to 20 minutes
6096 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
6097 the master to trigger a build. Run it via manhole.
6099 * buildbot/master.py (BotPerspective.perspective_forceBuild):
6100 allow slaves to trigger any build that they host, to make life
6101 easier for slave admins who are testing out new build processes
6103 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
6104 don't flunk cReactor or qtreactor on failure, since they fail alot
6105 these days. Do warnOnFailure instead.
6107 * buildbot/process/base.py: change Builder.buildable from a list
6108 into a single slot. When we don't have a slave, new builds (once
6109 they make it past the timeout) are now merged into an existing
6110 buildable one instead of being queued. With this change, a slave
6111 which has been away for a while doesn't get pounded with all the
6112 builds it missed, but instead just does a single build.
6114 2003-05-07 Brian Warner <warner@lothar.com>
6116 * setup.py (version): bump version to 0.3.2+ while between releases
6118 2003-05-07 Brian Warner <warner@lothar.com>
6120 * setup.py: Releasing buildbot-0.3.2
6122 2003-05-07 Brian Warner <warner@lothar.com>
6124 * setup.py: fix major packaging error: include subdirectories!
6126 * NEWS: add changes since last release
6128 * README (REQUIREMENTS): update twisted/python dependencies
6130 * buildbot/status/builder.py (Builder.startBuild): change
6131 BuildProcess API: now they should call startBuild/finishBuild
6132 instead of pushing firstEvent / setLastBuildStatus. Moving towards
6133 keeping a list of builds in the statusbag, to support other kinds of
6135 (Builder.addClient): send current-activity-small to new clients
6136 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
6139 * buildbot/status/client.py: drop RemoteReferences at shutdown
6141 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
6143 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
6144 more debug messages for remote status client
6146 * buildbot/process/step.py (InternalBuildStep.stepComplete)
6147 (.stepFailed): only fire the Deferred once, even if both
6148 stepComplete and stepFailed are called. I think this can happen if
6149 an exception occurs at a weird time.
6151 * buildbot/status/words.py: work-in-progress: IRC status delivery
6153 2003-05-05 Brian Warner <warner@lothar.com>
6155 * docs/examples/twisted_master.py (twisted_app): hush internal
6156 python2.3 distutils deprecation warnings
6157 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6158 add compileOpts= argument which inserts extra args before the
6159 "setup.py build_ext" command. This can be used to give -Wignore
6160 warnings, to hush some internal python-2.3 deprecation messages.
6162 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
6163 the ['twisted.test'] default test case to make it easier to change
6166 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
6167 * buildbot/clients/gtkPanes.py: ditto
6169 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
6170 arg to collapse RunUnitTestsRandomly into RunUnitTests
6171 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6172 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
6174 * buildbot/status/html.py (StatusResource): shuffle Resources
6175 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
6176 would serve the waterfall display, but the internal links were
6177 only valid on the trailing-slash version. The correct behavior is
6178 for the non-slashed one to serve a Redirect to the slashed one.
6179 This only shows up when the buildbot page is hanging off another
6180 server, like a Twisted-Web distributed server.
6182 * buildbot/status/event.py (Event, RemoteEvent): make Events
6183 pb.Cacheable, with RemoteEvent as the cached version. This removes
6184 a lot of explicit send-an-update code.
6185 * buildbot/status/builder.py (Builder): remove send-update code
6186 * buildbot/status/client.py (ClientBuilder): remove send-update
6187 code, and log errors that occur during callRemote (mostly to catch
6188 InsecureJelly exceptions)
6190 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6191 run Lore with the same python used in the rest of the build
6193 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6195 * buildbot/process/step_twisted.py (HLint): accept 'python'
6196 argument. Catch rc!=0 and mark the step as failed. This marks the
6197 build orange ("has warnings").
6198 (RunUnitTestsJelly): move out to step_twisted2.py
6200 * buildbot/util.py (ignoreStaleRefs): add utility function
6202 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
6203 don't fake ETA object, it's too hard to get right
6205 2003-05-02 Brian Warner <warner@lothar.com>
6207 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
6209 2003-05-01 Brian Warner <warner@lothar.com>
6211 * buildbot/status/html.py (StatusResource.body): oops, I was
6212 missing a <tr>, causing the waterfall page to be misrendered in
6213 everything except Galeon.
6215 2003-04-29 Brian Warner <warner@lothar.com>
6217 * docs/examples/twisted_master.py: make debuild use python-2.2
6218 explicitly, now that Twisted stopped supporting 2.1
6220 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
6221 handle tuple results too. I keep forgetting this, which suggests
6222 it needs to be rethought.
6224 * setup.py (setup): bump version to 0.3.1+ while between releases
6226 2003-04-29 Brian Warner <warner@lothar.com>
6228 * setup.py: Releasing buildbot-0.3.1
6230 2003-04-29 Brian Warner <warner@lothar.com>
6232 * README (SUPPORT): add plea to send questions to the mailing list
6234 * NEWS, MANIFEST.in: add description of recent changes
6236 * docs/examples/twisted_master.py: add the code used to create the
6237 Twisted buildmaster, with passwords and such removed out to a
6240 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6241 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6242 buildmasters to not require CVSToys be installed.
6243 * README, docs/examples/glib_master: update to match the change
6245 * buildbot/clients/base.py, buildbot/bot.py,
6246 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6247 ReconnectingPB from CVSToys distribution to remove CVSToys
6248 dependency for build slaves and status clients. Buildmasters which
6249 use FreshCVSSources still require cvstoys be installed, of course.
6251 2003-04-25 Brian Warner <warner@lothar.com>
6253 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6254 runTestsRandomly arg to turn on trial -z
6256 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6257 experimental code to use trial's machine-parseable output to get
6258 more detailed test results. Still has some major issues.
6259 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6262 * buildbot/status/builder.py (Builder.setCurrentBuild):
6263 anticipating moving build history into statusbag, not used yet
6265 * buildbot/status/tests.py: code to centralize test results,
6266 doesn't work quite yet
6268 * buildbot/status/event.py (Event): use hasattr("setName") instead
6269 of isinstance for now.. need better long-term solution
6271 * buildbot/status/html.py: Remove old imports
6273 2003-04-24 Brian Warner <warner@lothar.com>
6275 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6276 ignore changes under doc/fun/ and sandbox/
6278 * buildbot/process/step_twisted.py: update pushEvent and friends.
6280 * buildbot/status/html.py (Box.td): replace event.buildername with
6281 event.parent.getSwappableName(). Needs more thought.
6283 * buildbot/status/builder.py (Builder): Replace pushEvent and
6284 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6285 Tell events they are being pruned with event.delete().
6287 * buildbot/process/base.py (Build): Remove Builder status-handling
6288 methods. s/pushEvent/setCurrentActivity/.
6290 * buildbot/process/step.py (BuildStep): clean up status delivery.
6291 Gouse builder.statusbag methods instead of intermediate builder
6292 methods. s/updateLastEvent/updateCurrentActivity/.
6293 s/finalizeLastEvent/finishCurrentActivity/. Use
6294 addFileToCurrentActivity for summaryFunction.
6296 * buildbot/status/event.py (Logfile): put data in a Swappable when
6298 (Event): add more setter methods. Remove .buildername, use .parent
6299 and getSwappableName instead (needs more thought).
6301 * buildbot/util.py (Swappable):
6302 * test/test_swap.py: don't bother setting filename at __init__
6303 time, do it later. Change setFilename args to take parent first,
6304 since it provides the most significant part of the filename.
6306 2003-04-23 Brian Warner <warner@lothar.com>
6308 * buildbot/status/event.py (Logfile.addEntry): append to previous
6311 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6312 anticipating Swappable
6313 (InternalShellCommand.remoteUpdate): split out various log-adding
6314 methods so subclasses can snarf stdout separately
6316 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6317 in anticipation of Swappable build logs
6318 (Builder.testsFinished): anticipating TestResults, still disabled
6320 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6323 * buildbot/status/event.py (Logfile): add (disabled) support for
6324 Swappable, not ready for use yet
6326 * buildbot/util.py (Swappable): object which is swapped out to
6327 disk after some period of no use.
6328 * test/test_swap.py: test buildbot.utils.Swappable
6330 2003-04-14 Brian Warner <warner@lothar.com>
6332 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6333 periodic-build timer. Set the .periodicBuildTime on a builder
6334 instance to some number of seconds to activate it.
6336 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6338 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6339 a way that survives result tuples
6341 2003-04-12 Brian Warner <warner@lothar.com>
6343 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6344 return a dict instead of a tuple: allow summarizers to provide
6345 multiple summaries if they want
6346 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6347 (debuildSummarizer): summarize lintian warnings/errors
6349 2003-04-10 Brian Warner <warner@lothar.com>
6351 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6353 2003-04-09 Brian Warner <warner@lothar.com>
6355 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6356 empty summaries: happens when the tests fail so hard they don't emit
6357 a parseable summary line.
6359 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6360 Allow summaryFunction to return None to indicate no summary should
6363 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6364 writing to stale HTTP requests: notice when they disconnect and
6365 remove the request from the list. Also add CacheToFile from
6366 moshez, will be used later.
6368 2003-04-08 Brian Warner <warner@lothar.com>
6370 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6371 should be an int, not a list of strings
6373 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6374 if we weren't actually connected
6376 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6377 to show the tail end of the trial text output
6379 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6380 hook to summarize the results of a ShellCommand
6382 2003-04-07 Brian Warner <warner@lothar.com>
6384 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6385 twisted test suite code into a single class.
6386 * buildbot/process/process_twisted.py: same
6388 2003-04-04 Brian Warner <warner@lothar.com>
6390 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6392 * README (SLAVE): document use of mktap to create slave .tap file
6393 (REQUIREMENTS): describe dependencies
6395 * buildbot/bb_tap.py, buildbot/plugins.tml:
6396 * buildbot/bot.py (updateApplication): Add mktap support for creating
6397 buildslave .tap files
6399 2003-03-28 Brian Warner <warner@lothar.com>
6401 * buildbot/process/step.py (InternalShellCommand.finished): handle
6402 new tuple result values (fix embarrasing bug that appeared during
6405 2003-03-27 Brian Warner <warner@lothar.com>
6407 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6410 2003-03-25 Brian Warner <warner@lothar.com>
6412 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6413 to overall build status
6414 * buildbot/clients/base.py (Builder): improve event printing
6415 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6416 instead of generic ShellCommand
6417 (Build): Add .stopBuild, use it when slave is detached
6419 * buildbot/process/step.py (Configure,Test): give the steps their
6420 own names and status strings
6422 * buildbot/status/html.py (StatusResource): add "show" argument,
6423 lets you limit the set of Builders being displayed.
6425 2003-03-20 Brian Warner <warner@lothar.com>
6427 * buildbot/process/basic.py: removed
6429 2003-03-19 Brian Warner <warner@lothar.com>
6431 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6432 turn off process-docs by default
6434 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6435 when displaying build information without anything in allBuilds[]
6437 * buildbot/bot.py (makeApp): really take password from sys.argv
6439 2003-03-18 Brian Warner <warner@lothar.com>
6441 * buildbot/bot.py (buildApp): take password from sys.argv
6443 * README: replace with more useful text
6445 * setup.py: add a real one
6446 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6448 * docs/PyCon-2003/: added sources for PyCon paper.
6450 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6451 now Build objects control the process and Builder only handles
6452 slave stuff and distribution of changes/status. A new BuildFactory
6453 class creates Build objects on demand.
6455 Created ConfigurableBuild which takes a list of steps to run. This
6456 makes it a lot easier to set up a new kind of build and moves us
6457 closer to being able to configure a build from a web page.
6459 * buildbot/process/step_twisted.py, process_twisted.py: move to
6460 new model. A lot of code went away.
6462 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6463 send lots of empty progress messages to the client.
6465 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6467 2003-02-20 Brian Warner <warner@lothar.com>
6469 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6471 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6472 Twisted bug that prevented non-pty processes from working just got
6473 fixed, and the bug that leaks ptys is still being investigated.
6475 * buildbot/process/step.py (CVS): send timeout arg to slave
6477 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6478 builders coming and going
6479 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6480 from CVSToys, handle lost-buildmaster
6482 * buildbot/status/client.py (StatusClientService.removeBuilder):
6483 Clean up status client protocol: send builders (with references)
6484 as they are created, rather than sending a list and requiring the
6485 client to figure out which ones are new.
6486 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6487 attempts to force a build on an unknown builder
6489 2003-02-19 Brian Warner <warner@lothar.com>
6491 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6492 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6493 Twisted stops leaking them.
6494 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6495 builder goes to an idle state.
6497 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6498 I figure out why CVS commands hang without them, and/or I fix the
6499 hung-command timeout
6501 2003-02-16 Brian Warner <warner@lothar.com>
6503 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6504 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6505 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6506 GenerateDocs now that they are prefixed with WARNING:.
6508 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6509 use manual href target instead of request.childLink
6511 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6512 display every second, but update the ETA every 5 seconds (or
6513 whenever) as remote_progress messages arrive.
6516 2003-02-12 Brian Warner <warner@lothar.com>
6518 * *: import current sources from home CVS repository
6522 # add-log-time-format: add-log-iso8601-time-string