1 2006-06-14 Brian Warner <warner@lothar.com>
3 * docs/buildbot.texinfo (Adding LogObservers): add some limited
4 docs on writing new LogObserver classes
5 (Writing New Status Plugins): brief docs on how Status Plugins fit
8 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
9 implement a LogObserver that counts how many unit tests have been
11 (Trial.__init__): wire it in
12 * buildbot/test/test_twisted.py (Counter): unit test for it
14 * buildbot/process/step_twisted.py (HLint.commandComplete): update
15 to new cmd.logs['stdio'] scheme
16 (Trial.commandComplete): same
17 (BuildDebs.commandComplete): same
19 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
20 LogFiles, instead of just a single one. The old single logfile is
21 now called "stdio". LoggedRemoteCommand no longer creates a
22 LogFile for you (the code to do that was broken anyway). If you
23 don't create a "stdio" LogFile, then stdout/stderr will be
25 (LogObserver): implement "LogObservers", which a BuildStep can add
26 to parse the output of a command in real-time. The primary use is
27 to provide more useful information to the Progress code, allowing
29 (LogLineObserver): utility subclass which feeds complete lines to
30 the parser instead of bytes.
31 (BuildStep.progressMetrics): this is safer as a tuple
32 (BuildStep.setProgress): utility method, meant to be called by
34 (BuildStep.addLogObserver): new method, to be called at any time
35 during the BuildStep (even before any LogFiles have been created),
36 to attach (or schedule for eventual attachment) a LogObserver to a
38 (StdioProgressObserver): new LogObserver which replaces the old
39 "output" progress gatherer
40 (LoggingBuildStep.__init__): same
41 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
42 (LoggingBuildStep._commandComplete): must use logs['stdio']
43 instead of the old single ".log" attribute.
44 * buildbot/status/builder.py (LogFile): remove old logProgressTo
45 functionality, now subsumed into StdioProgressObserver
46 * buildbot/test/test_status.py (Subscription._testSlave_2): the
47 log name changed from "output" to "stdio".
50 * buildbot/interfaces.py (ILogFile): add the Interface used from
51 the BuildStep towards the LogFile
52 (ILogObserver): and the one provided by a LogObserver
53 * buildbot/status/builder.py (LogFile): implement it
55 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
56 HEADER constants here ..
57 * buildbot/status/builder.py (STDOUT): .. from here
59 2006-06-13 Brian Warner <warner@lothar.com>
61 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
62 compatibility with python2.2, which doesn't have the 'substr in
64 (TestP4Poller.makeTime): utility function to construct the
65 timestamp using the same strptime() approach as p4poller does. It
66 turns out that time.mktime() behaves slightly differently under
67 python2.2, probably something to do with the DST flag, and that
68 causes the test to fail under python2.2. (changing the mktime()
69 arguments to have dst=0 instead of -1 caused it to fail under
70 python2.3. Go figure.)
71 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
73 2006-06-12 Brian Warner <warner@lothar.com>
75 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
76 proper Perforce (P4) support. Many many thanks to Scott Lamb for
77 contributing such an excellent patch, including docs and unit
78 tests! This makes it *so* much easier to apply. I had to update
79 test_vc.py to handle some recent refactorings, but everything else
80 applied smoothly. The only remaining thing I'd like to fix would
81 be to remove the hard-wired port 1666 used by p4d, and allow it to
82 claim any unused port. This would allow two copies of the test
83 suite to run on the same host at the same time, as well as
84 allowing the test suite to run while a real (production) p4d was
85 running on the same host. Oh, and maybe we should add a warning to
86 step.P4 that gets emitted if the slave is too old to provide the
87 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
88 * buildbot/slave/commands.py (P4): same
89 (P4Sync): same, some minor updates
90 * buildbot/changes/p4poller.py: same
91 * docs/buildbot.texinfo: same
92 * buildbot/test/test_p4poller.py: same
93 * buildbot/test/test_vc.py (P4): same
95 * setup.py: add Trove classifiers for PyPI
97 2006-06-08 Brian Warner <warner@allmydata.com>
99 * buildbot/status/client.py
100 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
101 changing this from getCurrentBuild() to getCurrentBuilds(). Each
102 build needs to be IRemote'd separately, rather than IRemote'ing
103 the whole list at once. I can't wait until newpb's serialization
104 adapters make this unnecessary.
106 2006-06-06 Brian Warner <warner@lothar.com>
108 * buildbot/process/step.py (WithProperties): make this inherit
109 from ComparableMixin, so that reloading an unchanged config file
110 doesn't cause us to spuriously reload any Builders which use them.
111 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
114 2006-06-03 Brian Warner <warner@lothar.com>
116 * contrib/windows/{setup.py, buildbot_service.py}: add support for
117 running py2exe on windows, contributed by Mark Hammond. Addresses
118 SF#1401121, but I think we still need to include
119 buildbot/scripts/sample.cfg
120 * setup.py: include buildbot_service.py as a script under windows
121 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
122 a py2exe application), get the icon/css datafiles from a different
125 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
126 double-escape the build URL. Thanks to Olivier Bonnet for the
127 patch. Fixes SF#1452801.
129 2006-06-02 Brian Warner <warner@lothar.com>
131 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
132 first six columns of 'svnlook' output, not just the first column,
133 since property changes appear in the other five. Thanks to Olivier
134 Bonnet for the patch. Fixes SF#1398174.
136 2006-06-01 Brian Warner <warner@lothar.com>
138 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
139 the fake build, so that title= has something to be set to
141 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
142 attribute of the "Build #NN" link in the yellow start-the-build
143 box to the build's reason. This means that you get a little
144 tooltip explaining why the build was done when you hover over the
145 yellow box. Thanks to Zandr Milewski for the suggestion.
147 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
148 (Box.setETA): handle ETA=None (by stopping the timer)
149 (Box.update): make the [soon] text less different than the usual
150 text, so the rest of the text doesn't flop around so much. It
151 would be awfully nice to figure out how to center this stuff.
152 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
154 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
155 by default, so that any ShellCommand which fails marks the overall
156 build as a failure. I should have done this from the beginning.
157 Add flunkOnFailure=False to the arguments if you want to turn off
160 2006-05-30 Brian Warner <warner@lothar.com>
162 * buildbot/clients/gtkPanes.py: add a third row: now it shows
163 last-build/current-build/current-step. Show what step is currently
164 running. Show ETA for both the overall build and the current step.
165 Update GTK calls to modern non-deprecated forms. There's still a
166 lot of dead code and debug noise to remove.
168 * buildbot/process/step_twisted.py (Trial): set the step name, so it
169 shows up properly in status displays
171 2006-05-28 Brian Warner <warner@lothar.com>
173 * buildbot/test/test_properties.py (Run.testInterpolate): on the
174 build we use to verify that WithProperties works:
176 ** set flunkOnFailure=True so that build failures get noticed
177 ** set workdir='.' so that the build succeeds, otherwise it is trying
178 to touch 'build/something', and 'build/' doesn't exist because
179 usually that's created by a Source step
180 ** set timeout=10, because Twisted-1.3.0 has a race condition that
181 this test somehow triggers, in which the 'touch' process becomes
182 a zombie and we wait for th etimeout before giving up on it.
184 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
185 to log the Build results and step logs to the twisted log.
186 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
187 what went wrong if a build was expected to succeed but didn't.
189 * buildbot/process/step_twisted.py (Trial): set the default
190 trialMode to '--reporter=bwverbose', which specifies verbose
191 black-and-white text. Back in twisted-1.3/2.0 days we had to use
192 '-to', but those are completely missing in modern Twisteds.
194 * buildbot/scripts/sample.cfg: make the sample Manhole config use
195 a localhost-only port, to encourage better security
197 * docs/buildbot.texinfo (Change Sources): mention
200 * .darcs-boring: add a Darcs boringfile
202 * README (REQUIREMENTS): stop claiming compatibility with
205 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
208 2006-05-27 Brian Warner <warner@lothar.com>
210 * buildbot/__init__.py: bump to 0.7.3+ while between releases
211 * docs/buildbot.texinfo: same
213 2006-05-23 Brian Warner <warner@lothar.com>
215 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
216 * docs/buildbot.texinfo: set version to match
217 * NEWS: update for 0.7.3
219 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
220 give a quick mapping from VC system to possible ChangeSources
221 (Build Properties): add 'buildername'
223 * buildbot/process/base.py (Build.setupStatus): oops, set
224 'buildername' and 'buildnumber' properties
225 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
228 2006-05-22 Brian Warner <warner@lothar.com>
230 * docs/buildbot.texinfo (Build Properties): explain the syntax of
231 property interpolation better
233 * README (INSTALLATION): remove old '-v' argument from recommended
236 * docs/buildbot.texinfo (ShellCommand): add docs for description=
237 and descriptionDone= arguments. Thanks to Niklaus Giger for the
240 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
241 'svnversion' instead of grepping the output of 'svn info', much
242 simpler and avoids CR/LF problems on windows. Thanks to Olivier
243 Bonnet for the suggestion.
244 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
245 require the WC_PATH argument, so run 'svnversion .' instead.
247 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
248 aren't supposed to have 'self' in their argument list
250 2006-05-21 Brian Warner <warner@lothar.com>
252 * buildbot/process/step.py (ShellCommand.start): make
253 testInterpolate pass. I was passing the uninterpolated command to
254 the RemoteShellCommand constructor
255 (ShellCommand._interpolateProperties): oops, handle non-list
256 commands (i.e. strings with multiple words separated by spaces in
257 them) properly, instead of forgetting about them.
259 * buildbot/test/test_properties.py (Run.testInterpolate): new test
260 to actually try to use build properties in a real build. This test
262 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
263 to start and evaluate builds
265 * buildbot/test/test__versions.py: add a pseudo-test to record
266 what version of Twisted/Python/Buildbot are running. This should
267 show up at the beginning of _trial_tmp/test.log, and exists to help
268 debug other problems.
270 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
271 a filename to be served as 'robots.txt' to discourage web spiders.
272 Adapted from a patch by Tobi Vollebregt, thanks!
273 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
274 (Waterfall.test_waterfall): tweak the way that filenames are put
275 into the config file, to accomodate windows pathnames better.
277 * docs/buildbot.texinfo (HTML Waterfall): document it
279 * buildbot/process/process_twisted.py
280 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
281 changed the build process. The new setup.py no longer takes the
283 (FullTwistedBuildFactory.__init__): same
284 (TwistedReactorsBuildFactory.__init__): same
286 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
287 be placed in the [hooks] section of the central repository (the
288 one that everybody pushes changes to).
290 2006-05-20 Brian Warner <warner@lothar.com>
292 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
293 .darcs-context file, use binary mode. I think this was causing a
294 Darcs failure under windows.
296 2006-05-19 Brian Warner <warner@lothar.com>
298 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
299 use a timezone string of +0000 and gmtime, since this timestamp is
300 sent to a buildmaster and %z is broken.
302 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
303 string and localtime, since this timestamp will only be consumed
304 locally, and %z is broken.
306 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
307 gmtime, since this timestamp is returned to the buildmaster, and
310 2006-05-18 Brian Warner <warner@lothar.com>
312 * NEWS: update in preparation for next release
314 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
315 setup-repository and do-we-have-the-vc-tools code into a separate
316 "helper" class, which sticks around in a single module-level
317 object. This seems more likely to continue to work in the future
318 than having it hide in the TestCase and hope that TestCases stick
319 around for a long time.
321 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
322 addremove' has been deprecated in recent versions of mercurial, so
325 2006-05-07 Brian Warner <warner@lothar.com>
327 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
328 operating under windows, move the file before opening it, since
329 you can't rename a file that somebody has open.
331 * buildbot/process/base.py (Build.setupBuild): if something goes
332 wrong while creating a Step, log the name and arguments, since the
333 error message when you get the number of arguments wrong is really
336 2006-05-06 Brian Warner <warner@lothar.com>
338 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
339 bugs in twisted-specific code not covered by my unit tests, this
340 time use 'cmd' argument instead of self.cmd
342 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
343 fix stupid braino: either use startwith or find()==0, not both.
344 (TwistedReactorsBuildFactory.__init__): another dumb typo
346 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
347 mark this test as TODO under windows, since process-killing seems
348 dodgy there. We'll come back to this later and try to fix it
351 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
352 and don't include a timezone
353 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
354 This should avoid the windows-with-verbose-timezone-name problem
356 (Patch.testPatch): add a test which runs 'patch' with less
357 overhead than the full VCBase.do_patch sequence, to try to isolate
358 a windows test failure. This one uses slave.commands.ShellCommand
359 and 'patch', but none of the VC code.
361 * buildbot/slave/commands.py (getCommand): use which() to find the
362 executables for 'cvs', 'svn', etc. This ought to help under
365 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
366 working directory before starting. If an earlier test failed, the
367 leftover directory would mistakenly flunk a later test.
368 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
369 Make sure that we use the right commandlines if which("tla") picks
370 up "tla.exe" (as it does under windows).
371 (TlaSupport.do_get): factor out this tla-vs-baz difference
372 (TlaSupport.vc_create): more tla-vs-baz differences
374 * buildbot/test/test_slavecommand.py
375 (ShellBase.testShellMissingCommand): stop trying to assert
376 anything about the error message: different shells on different
377 OSes with different languages makes it hard, and it really isn't
378 that interesting of a thing to test anyway.
380 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
381 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
382 "Panther"), because it has a bug which flunks a couple tests in
383 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
384 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
385 able to test that yet.
387 2006-04-30 Brian Warner <warner@lothar.com>
389 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
390 make sure child commands emit messages in english, so our regexps
391 will match. Thanks to Nikaus Giger for identifying the problems.
392 (VCBase._do_vctest_export_1): mode="export" is not responsible
393 for setting the "got_revision" property, since in many cases it is
394 not convenient to determine.
395 (SVNSupport.capable): when running 'svn --version' to check for
396 ra_local, we want error messages in english
397 * buildbot/test/test_slavecommand.py
398 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
399 to emit the error message in english
401 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
402 the environment with $LC_ALL="C" so that Commands which need to
403 parse the output of their child processes can obtain it in
405 (SVN.parseGotRevision): call "svn info" afterwards instead of
406 watching the output of the "svn update" or "svn checkout".
407 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
408 (Arch.parseGotRevision): same
409 (Bazaar.parseGotRevision): same
410 (Mercurial.parseGotRevision): same
412 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
413 $LC_ALL="C" when running commands under 'buildbot try', too
415 * buildbot/test/__init__.py: remove the global os.environ()
416 setting, instead we do it just for the tests that run commands and
417 need to parse their output.
419 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
420 remove the overly-short .timeout on this test, because non-DNotify
421 platforms must fall back to polling which happens at 10 second
422 intervals, so a 5 second timeout would never succeed.
424 2006-04-24 Brian Warner <warner@lothar.com>
426 * docs/buildbot.texinfo (Installing the code): update trial
427 invocation, SF#1469116 by Niklaus Giger.
428 (Attributes of Changes): updated branch-name examples to be
429 a bit more realistic, SF#1475240 by Stephen Davis.
431 * contrib/windows/buildbot2.bat: utility wrapper for windows
432 developers, contributed by Nick Trout (after a year of neglect..
435 * buildbot/test/test_vc.py (*.capable): store the actual VC
436 binary's pathname in VCS[vcname], so it can be retrieved later
437 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
438 strip out non-numeric timezone information, specifically the funky
439 German string that his system produced that confuses CVS.
440 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
441 allow Darcs tests to work on windows
442 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
443 procutils.which() everywhere, to allow tryclient to work under
444 windows. Also from Niklaus Giger, SF#1463394.
446 * buildbot/twcompat.py (which): move the replacement for a missing
447 twisted.python.procutils.which from test_vc.py to here, so it can
448 be used in other places too (specifically tryclient.py)
450 2006-04-23 Brian Warner <warner@lothar.com>
452 * buildbot/status/html.py (StatusResourceBuild.body): replace the
453 bare buildbotURL/projectName line with a proper DIV, along with a
454 CSS class of "title", from Stefan Seefeld (SF#1461675).
455 (WaterfallStatusResource.body0): remove the redundant 'table'
457 (WaterfallStatusResource.body): same. Also add class="LastBuild"
458 to the top-row TR, and class="Activity" to the second-row TR,
459 rather than putting them in the individual TD nodes.
461 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
462 'got_revision' build property for all VC systems that implement
463 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
465 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
466 to determine which revision we actually obtained
467 (CVS.parseGotRevision): implement this for CVS, which just means
468 to grab a timestamp. Not ideal, and it depends upon the buildslave
469 having a clock that is reasonably well syncronized with the server,
470 but it's better than nothing.
471 (SVN.parseGotRevision): implement it for SVN, which is accurate
472 (Darcs.parseGotRevision): same
473 (Arch.parseGotRevision): same
474 (Bazaar.parseGotRevision): same
475 (Mercurial.parseGotRevision): same
477 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
478 keep a record of all non-stdout/stderr/header/rc status updates,
479 for the benefit of RemoteCommands that send other useful things,
481 (Source.commandComplete): put any 'got_revision' status values
482 into a build property of the same name
485 * buildbot/process/step_twisted.py (Trial): update to deal with
486 new ShellCommand refactoring
488 * docs/buildbot.texinfo (Build Properties): document new feature
489 that allows BuildSteps to get/set Build-wide properties like which
490 revision was requested and/or checked out.
492 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
493 * buildbot/status/builder.py (BuildStatus.getProperty): implement
494 it. Note that this bumps the persistenceVersion of the saved Build
495 object, so add the necessary upgrade-old-version logic to include
496 an empty properties dict.
498 * buildbot/process/base.py (Build.setProperty): implement it
499 (Build.getProperty): same
500 (Build.startBuild): change build startup to set 'branch',
501 'revision', and 'slavename' properties at the right time
503 * buildbot/process/step.py (BuildStep.__init__): change setup to
504 require 'build' argument in a better way
505 (LoggingBuildStep): split ShellCommand into two pieces, for better
506 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
507 a single RemoteCommand that sends stdout/stderr status text. It
508 also provides the usual commandComplete / createSummary /
509 evaluateCommand / getText methods to be overridden...
510 (ShellCommand): .. whereas ShellCommand is specifically for
511 running RemoteShellCommands. Other shell-like BuildSteps (like
512 Source) can inherit from LoggingBuildStep instead of ShellCommand
513 (WithProperties): marker class to do build-property interpolation
514 (Source): inherit from LoggingBuildStep instead of ShellCommand
517 * buildbot/test/test_properties.py: test new functionality
519 2006-04-21 Brian Warner <warner@lothar.com>
521 * buildbot/test/test_vc.py: rename testBranch to
522 testCheckoutBranch to keep the tests in about the right
525 2006-04-18 Brian Warner <warner@lothar.com>
527 * docs/buildbot.texinfo (PBListener): improve cross-references
528 between PBListener and 'buildbot statusgui', thanks to John Pye
531 2006-04-17 Brian Warner <warner@lothar.com>
533 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
534 running under Twisted-1.3.0, otherwise skipped tests are reported
537 * all: use isinstance() instead of 'type(x) is foo', suggested by
540 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
541 oops, fix a brain-fade from the other week, when making the
542 addStep changes. I changed all the __init__ upcalls to use the
543 wrong superclass name.
544 (FullTwistedBuildFactory.__init__): same
545 (TwistedDebsBuildFactory.__init__): same
546 (TwistedReactorsBuildFactory.__init__): same
547 (TwistedBuild.isFileImportant): use .startswith for clarity,
548 thanks to Neal Norwitz for the suggestions.
550 * contrib/viewcvspoll.py: script to poll a viewcvs database for
551 changes, then deliver them over PB to a remote buildmaster.
553 * contrib/svnpoller.py: added script by John Pye to poll a remote
554 SVN repository (by running 'svn log') from a cronjob, and run
555 'buildbot sendchange' to deliver the changes to a remote
557 * contrib/svn_watcher.py: added script by Niklaus Giger (a
558 modification of svnpoller.py), same purpose, but this one loops
559 internally (rather than expecting to run from a cronjob) and works
561 * contrib/README.txt: same
563 2006-04-11 Brian Warner <warner@lothar.com>
565 * all: fix a number of incorrect names and missing imports, thanks
566 to Anthony Baxter for the patch.
567 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
568 remove unused buggy method.
569 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
570 comes from shutil, not "shutils"
571 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
572 (Arch.checkSlaveVersion): same
573 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
575 * buildbot/process/step_twisted2.py: add some missing imports
576 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
577 this code used to live in twisted.internet.defer
579 2006-04-10 Brian Warner <warner@lothar.com>
581 * buildbot/process/step.py (Mercurial): add Mercurial support
582 * buildbot/slave/commands.py (Mercurial): same
583 * buildbot/scripts/tryclient.py (MercurialExtractor): same
584 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
585 not yet tested, but 'try' support *is* covered
586 * docs/buildbot.texinfo (Mercurial): document it
588 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
589 some debugging messages (turned off)
590 * buildbot/test/test_vc.py: improve debug messages
592 2006-04-07 Brian Warner <warner@lothar.com>
594 * buildbot/test/test_vc.py (which): define our own which() in case
595 we can't import twisted.python.procutils, because procutils doesn't
598 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
599 of SlaveLocks for performance tests
601 * docs/examples/twisted_master.cfg: update to match current usage
603 * buildbot/changes/p4poller.py (P4Source): add new arguments:
604 password, p4 binary, pollinterval, maximum history to check.
605 Patch from an anonymous sf.net contributor, SF#1219384.
606 * buildbot/process/step.py (P4Sync.__init__): add username,
607 password, and client arguments.
608 * buildbot/slave/commands.py (P4Sync): same
610 2006-04-05 Brian Warner <warner@lothar.com>
612 * buildbot/process/factory.py (BuildFactory.addStep): new method
613 to add steps to a BuildFactory. Use it instead of f.steps.append,
614 and you can probably avoid using the s() convenience function.
615 Patch from Neal Norwitz, sf.net #1412605.
616 (other): update all factories to use addStep
617 * buildbot/process/process_twisted.py: update all factories to use
620 2006-04-03 Brian Warner <warner@lothar.com>
622 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
623 work under windows too. Adapted from a patch by Niklaus Giger,
624 addresses SF#1463399.
626 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
627 spawned commands emit parseable results in english and not some
628 other language. Patch from Niklaus Giger, SF#1463395.
630 * README (INSTALLATION): discourage users from running unit tests on
631 a "network drive", patch from Niklaus Giger, SF#1463394.
633 2006-03-22 Brian Warner <warner@lothar.com>
635 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
636 function to turn a repository-relative pathname into a (branch,
637 branch-relative-filename) tuple. Change this function to handle
638 the branch naming policy used by your Subversion repository.
639 Thanks to AllMyData.com for sponsoring this work.
641 2006-03-16 Brian Warner <warner@lothar.com>
643 * buildbot/scripts/sample.cfg: add python-mode declaration for
644 vim. Thanks to John Pye for the patch.
646 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
647 command line, mention the importance of running 'crontab' as the
648 buildmaster/buildslave user. Thanks to John Pye for the catch.
650 2006-03-13 Brian Warner <warner@lothar.com>
652 * buildbot/status/words.py (IRC): add an optional password=
653 argument, which will be sent to Nickserv in an IDENTIFY message at
654 login, to claim the nickname. freenode requires this before the
655 bot can sent (or reply to) private messages. Thanks to Clement
656 Stenac for the patch.
657 * docs/buildbot.texinfo (IRC Bot): document it
659 * buildbot/status/builder.py (LogFile.merge): don't write chunks
660 larger than chunkSize. Fixes SF#1349253.
661 * buildbot/test/test_status.py (Log.testLargeSummary): test it
662 (Log.testConsumer): update to match new internal chunking behavior
664 2006-03-12 Brian Warner <warner@lothar.com>
666 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
668 * buildbot/test/test_maildir.py (MaildirTest): rename the
669 'timeout' method, as it collides with trial's internals
671 * buildbot/scripts/runner.py: add 'buildbot restart' command
672 (stop): don't sys.exit() out of here, otherwise restart can't work
673 * docs/buildbot.texinfo (Shutdown): document it
675 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
676 * buildbot/status/html.py (Waterfall.__init__): same
677 * buildbot/process/builder.py (Builder.startBuild): same
678 * buildbot/process/base.py (BuildRequest): same
679 * buildbot/sourcestamp.py (SourceStamp): same
680 * buildbot/scheduler.py (Nightly): same
682 * buildbot/__init__.py (version): bump to 0.7.2+ while between
684 * docs/buildbot.texinfo: same
686 2006-02-17 Brian Warner <warner@lothar.com>
688 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
689 * docs/buildbot.texinfo: set version number to match
690 * NEWS: update for 0.7.2
692 2006-02-16 Brian Warner <warner@lothar.com>
694 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
696 2006-02-09 Brian Warner <warner@lothar.com>
698 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
699 add text to explain per-build branch parameters
700 * NEWS: mention --umask
702 2006-02-08 Brian Warner <warner@lothar.com>
704 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
706 (SlaveOptions.optParameters): add --umask, to make it possible to
707 make buildslave-generated files (including build products) be
710 * buildbot/slave/bot.py (BuildSlave.startService): same
712 2006-01-23 Brian Warner <warner@lothar.com>
714 * buildbot/status/builder.py: urllib.quote() all URLs that include
715 Builder names, so that builders can include characters like '/'
716 and ' ' without completely breaking the resulting HTML. Thanks to
717 Kevin Turner for the patch.
718 * buildbot/status/html.py: same
719 * buildbot/test/test_web.py (GetURL.testBuild): match changes
721 * NEWS: update in preparation for upcoming release
723 2006-01-18 Brian Warner <warner@lothar.com>
725 * docs/examples/twisted_master.cfg: update to match the Twisted
726 buildbot: remove python2.2, switch to exarkun's buildslaves,
727 disable the .deb builder until we figure out how to build twisted
728 .debs from SVN, add some ktrace debugging to the OS-X build
729 process and remove the qt build, remove threadless builders,
730 change freebsd builder to use landonf's buildslave.
732 2006-01-12 Brian Warner <warner@lothar.com>
734 * buildbot/master.py (Manhole.__init__): let port= be a strports
735 specification string, but handle a regular int for backwards
736 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
737 used in master.cfg to limit connections to just the local host.
738 (BuildMaster.loadConfig): same for c['slavePortnum']
739 * buildbot/scheduler.py (Try_Userpass.__init__): same
740 * buildbot/status/client.py (PBListener.__init__): same
741 * buildbot/status/html.py (Waterfall.__init__): same, for both
742 http_port and distrib_port. Include backwards-compatibility checks
743 so distrib_port can be a filename string and still mean unix:/foo
744 * docs/buildbot.texinfo (Setting the slaveport): document it
745 (Debug options): same
746 (HTML Waterfall): same
749 * buildbot/test/test_config.py (ConfigTest): test it
751 * buildbot/master.py (BuildMaster.loadConfig): wait for the
752 slaveport's disownServiceParent deferred to fire before opening
753 the new one. Fixes an annoying bug in the unit tests.
755 2006-01-03 Brian Warner <warner@lothar.com>
757 * buildbot/master.py (BuildMaster): remove the .schedulers
758 attribute, replacing it with an allSchedulers() method that looks
759 for all IService children that implement IScheduler. Having only
760 one parent/child relationship means fewer opportunities for bugs.
761 (BuildMaster.allSchedulers): new method
762 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
763 also fix ugly bug that caused any config-file reload to
764 half-forget about the earlier Schedulers, causing an exception
765 when a Change arrived and was handed to a half-connected
766 Scheduler. The exception was in scheduler.py line 54ish:
767 self.parent.submitBuildSet(bs)
768 exceptions.AttributeError: 'NoneType' object has no attribute
770 (BuildMaster.addChange): update to use allSchedulers()
772 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
773 to work properly with twisted-1.3.0, where you must explicitly
774 include the __implements__ from parent classes
775 (BaseScheduler.__repr__): make it easier to distinguish distinct
777 (BaseUpstreamScheduler.__implements__): same
779 * buildbot/status/builder.py (Status.getSchedulers): update to
781 * buildbot/test/test_run.py (Run.testMaster): same
782 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
783 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
784 make sure Scheduler instances are left alone when an identical
785 config file is reloaded
786 (ConfigElements.testSchedulers): make sure Schedulers are properly
789 * Makefile (TRIALARGS): my local default Twisted version is now
790 2.1.0, update the trial arguments accordingly
792 2005-12-22 Brian Warner <warner@lothar.com>
794 * docs/examples/twisted_master.cfg: merge changes from pyr: add
797 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
798 addChange in the parent class, although I suspect this should be
799 fixed better in the future.
801 2005-11-26 Brian Warner <warner@lothar.com>
803 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
804 explode when branch==None, thanks to Kevin Turner for the catch
805 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
808 * buildbot/__init__.py (version): bump to 0.7.1+ while between
810 * docs/buildbot.texinfo: same
812 2005-11-26 Brian Warner <warner@lothar.com>
814 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
815 * docs/buildbot.texinfo: set version number to match
817 2005-11-26 Brian Warner <warner@lothar.com>
819 * NEWS: update for 0.7.1
821 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
822 sure that unsubscribe works even if we never sent an ETA update.
823 Also, don't explode on duplicate unsubscribe.
824 (BuildStepStatus.addLog): make the convenience "return self"-added
825 watcher automatically unsubscribe when the Step finishes.
826 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
827 (BuildStatus.stepStarted): same auto-unsubscribe
828 (BuilderStatus.buildStarted): same auto-unsubscribe
830 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
832 (IStatusReceiver.stepStarted): same
833 (IStatusReceiver.logStarted): same
835 * buildbot/test/test_run.py (Status): move the Status test..
836 * buildbot/test/test_status.py (Subscription): .. to here
838 2005-11-25 Brian Warner <warner@lothar.com>
842 * buildbot/locks.py: fix the problem in which loading a master.cfg
843 file that changes some Builders (but not all of them) can result
844 in having multiple copies of the same Lock. Now, the real Locks
845 are kept in a table inside the BotMaster, and the Builders/Steps
846 use "LockIDs", which are still instances of MasterLock and
847 SlaveLock. The real Locks are instances of the new RealMasterLock
848 and RealSlaveLock classes.
849 * buildbot/master.py (BotMaster.getLockByID): new method to
850 convert LockIDs into real Locks.
851 * buildbot/process/base.py (Build.startBuild): convert LockIDs
852 into real Locks before building
853 * buildbot/process/step.py (BuildStep.startStep): same
854 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
855 exercises the problem
858 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
859 what Schedulers are available
861 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
862 work by Dobes Vandermeer and hacked mercilessly by me. This offers
863 'cron'-style build scheduling at certain times of day, week,
865 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
867 * buildbot/scheduler.py (Scheduler): change fileIsImportant
868 handling: treat self.fileIsImportant more as an attribute that
869 contains a callable than as a method. If the attribute is None,
870 don't call it and assume all filenames are important. It is still
871 possible to provide a fileIsImportant method in a subclass,
873 (AnyBranchScheduler): handle fileIsImportant=None, previously it
875 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
876 test using AnyBranchScheduler with fileIsImportant=None
878 2005-11-24 Brian Warner <warner@lothar.com>
880 * buildbot/test/test_config.py (StartService): don't claim a fixed
881 port number, instead set slavePort=0 on the first pass, figure out
882 what port was allocated, then switch to a config file that uses
885 * buildbot/master.py (BuildMaster.loadConfig): close the old
886 slaveport before opening the new one, because unit tests might
887 replace slavePort=0 with the same allocated portnumber, and if we
888 don't wait for the old port to close first, we get a "port already
889 in use" error. There is a tiny race condition here, but the only
890 threat is from other programs that bind (statically) to the same
891 port number we happened to be allocated, and only if those
892 programs use SO_REUSEADDR, and only if they get control in between
895 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
897 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
898 deleted ChangeSources before adding any new ones
899 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
900 compare_attrs, to make sure that a config-file reload does not
901 unnecessarily replace an unmodified ChangeSource instance
902 * buildbot/test/test_config.py (ConfigTest.testSources): update
904 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
905 mean "don't build anything", and add a warning if it gets used
906 because it isn't actually useful.
908 * contrib/svn_buildbot.py: update example usage to match the port
909 number that gets used by the PBChangeSource
910 * buildbot/scripts/sample.cfg: add example of PBChangeSource
912 2005-11-22 Brian Warner <warner@lothar.com>
914 * NEWS: start collecting items for next release
916 * buildbot/process/step.py (SVN.computeSourceRevision): assume
917 revisions are strings
918 (P4Sync.computeSourceRevision): same
920 * buildbot/status/html.py (StatusResourceBuild.body): add a link
921 to the Buildbot's overall status page
922 (StatusResourceBuilder.body): same
924 2005-11-15 Brian Warner <warner@lothar.com>
926 * buildbot/master.py (BuildMaster.loadConfig): serialize the
927 config-file loading, specifically to make sure old StatusTargets
928 are finished shutting down before new ones start up (thus
929 resolving a bug in which changing the Waterfall object would fail
930 because both new and old instances were claiming the same
931 listening port). Also load new Schedulers after all the new
932 Builders are set up, in case they fire off a new build right away.
933 * buildbot/test/test_config.py (StartService): test it
935 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
936 the branch name to the mail body
938 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
939 Without it, a config-file reload fails to update an existing
941 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
942 username/passwd to compare_attrs, for the same reason
943 * buildbot/status/html.py (Waterfall): add favicon to
944 compare_attrs, same reason
946 2005-11-05 Brian Warner <warner@lothar.com>
948 * buildbot/scripts/tryclient.py (createJobfile): stringify the
949 baserev before stuffing it in the jobfile. This resolves problems
950 under SVN (and probably Arch) where revisions are expressed as
951 numbers. I'm inclined to use string-based revisions everywhere in
952 the future, but this fix should be safe for now. Thanks to Steven
953 Walter for the patch.
955 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
956 binary mode when opening pickle files, to make windows work
957 better. Thanks to Dobes Vandermeer for the catch.
958 * buildbot/status/builder.py (BuildStatus.saveYourself): same
959 (BuilderStatus.getBuildByNumber): same
960 (Status.builderAdded): same
961 * buildbot/master.py (BuildMaster.loadChanges): same
963 * buildbot/util.py (Swappable): delete unused leftover code
965 * buildbot/process/step.py (SVN): when building on a non-default
966 branch, add the word "[branch]" to the VC step's description, so
967 it is obvious that we're not building the usual stuff. Likewise,
968 when we are building a specific revision, add the text "rNNN" to
969 indicate what that revision number is. Thanks to Brad Hards and
970 Nathaniel Smith for the suggestion.
971 (Darcs.startVC): same
973 (Bazaar.startVC): same
975 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
976 typo, caught by Mark Dillavou, closes SF#1216636.
978 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
979 about a test to add some day
981 * docs/examples/twisted_master.cfg: update: bot1 can now handle
982 the 'full-2.3' build, and the 'reactors' build is now run under
983 python-2.4 because the buildslave no longer has gtk/etc bindings
984 for earlier versions.
986 2005-11-03 Brian Warner <warner@lothar.com>
988 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
989 method, takes an IBuildStatus and rebuilds it. It might make more
990 sense to add this to IBuildControl instead, but that instance goes
991 away completely once the build has finished, and resubmitting
992 builds can take place weeks later.
993 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
994 * buildbot/status/html.py (StatusResourceBuild): also stash an
995 IBuilderControl so we can use resubmitBuild.
996 (StatusResourceBuild.body): render "resubmit" button if we can.
997 Also add hrefs for each BuildStep
998 (StatusResourceBuild.rebuild): add action for "resubmit" button
999 (StatusResourceBuilder.getChild): give it an IBuilderControl
1001 * buildbot/status/builder.py (Status.getURLForThing): change the
1002 URL for BuildSteps to have a "step-" prefix, so the magic URLs
1003 that live as targets of buttons like "stop" and "rebuild" can't
1005 * buildbot/status/builder.py (Status.getURLForThing): same
1006 * buildbot/status/html.py (StatusResourceBuild.getChild): same
1007 (StepBox.getBox): same
1008 * buildbot/test/test_web.py (GetURL): same
1011 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
1012 exclusivity checks after Source.__init__ upcall, so misspelled
1013 arguments will be reported more usefully
1014 (Darcs.__init__): same
1016 2005-10-29 Brian Warner <warner@lothar.com>
1018 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
1019 builder. Move the Try scheduler off to a separate port.
1021 2005-10-27 Brian Warner <warner@lothar.com>
1023 * buildbot/clients/gtkPanes.py
1024 (TwoRowClient.remote_builderRemoved): disappearing Builders used
1025 to cause the app to crash, now they don't.
1027 * buildbot/clients/debug.py: display the buildmaster's location
1028 in the window's title bar
1030 2005-10-26 Brian Warner <warner@lothar.com>
1032 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
1033 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
1034 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
1036 * buildbot/status/html.py (td): put a single non-breaking space
1037 inside otherwise empty <td> elements, as a workaround for buggy
1038 browsers which would optimize them away (along with any associated
1039 styles, like the kind that create the waterfall grid borders).
1040 Patch from Frerich Raabe.
1042 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
1043 argv-list as an argument, defaulting to ["-to"], which is
1044 appropriate for the Trial that comes with Twisted-2.1.0 and
1045 earlier. The Trial in current Twisted SVN wants
1046 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
1047 defaults to an empty list.
1048 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
1049 match it, now that trialMode= is a list instead of a single string
1051 * buildbot/__init__.py (version): bump to 0.7.0+ while between
1053 * docs/buildbot.texinfo: same
1055 2005-10-24 Brian Warner <warner@lothar.com>
1057 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
1058 * docs/buildbot.texinfo: set version number to match
1060 2005-10-24 Brian Warner <warner@lothar.com>
1062 * README: update for 0.7.0
1064 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
1066 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
1067 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
1068 send the branch= argument unless the user really provided one, to
1069 retain compatibility with older buildmasters that don't accept
1071 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
1074 * docs/buildbot.texinfo: update lots of stuff
1076 * buildbot/scripts/runner.py (sendchange): add a --branch argument
1077 to the 'buildbot sendchange' command
1078 * buildbot/clients/sendchange.py (Sender.send): same
1079 * buildbot/changes/pb.py (ChangePerspective): same
1080 * buildbot/test/test_changes.py (Sender.testSender): test it
1082 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
1083 'default_branch' argument names to 'baseURL' and 'defaultBranch',
1084 for consistency with other BuildStep arguments that use camelCase.
1085 Well, at least more of them use camelCase (like flunkOnWarnings)
1086 than don't.. I wish I'd picked one style and stuck with it
1087 earlier. Annoying, but it's best done before the release, since
1088 these arguments didn't exist at all in 0.6.6 .
1090 * buildbot/test/test_vc.py (SVN.testCheckout): same
1091 (Darcs.testPatch): same
1092 * docs/buildbot.texinfo (SVN): document the change
1093 (Darcs): same, add some build-on-branch docs
1094 * docs/examples/twisted_master.cfg: match change
1096 * buildbot/process/step.py (BuildStep): rename
1097 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
1098 how it is normally used.
1099 * buildbot/test/test_steps.py (Version.checkCompare): same
1101 * buildbot/process/step.py (CVS.startVC): refuse to build
1102 update/copy -style builds on a non-default branch with an old
1103 buildslave (<=0.6.6) that doesn't know how to do it properly. The
1104 concern is that it will do a VC 'update' in an existing tree when
1105 it is supposed to be switching branches (and therefore clobbering
1106 the tree to do a full checkout), thus building the wrong source.
1107 This used to be a warning, but I think the confusion it is likely
1108 to cause warrants making it an error.
1109 (SVN.startVC): same, also make mode=export on old slaves an error
1110 (Darcs.startVC): same
1111 (Git.startVC): improve error message for non-Git-enabled slaves
1112 (Arch.checkSlaveVersion): same. continue to emit a warning when a
1113 specific revision is built on a slave that doesn't pay attention
1114 to args['revision'], because for slowly-changing trees it will
1115 probably do the right thing, and because we have no way to tell
1116 whether we're asking it to build the most recent version or not.
1117 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
1119 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
1120 that 'master' is in host:portnum format, to catch errors sooner
1122 2005-10-23 Brian Warner <warner@lothar.com>
1124 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
1125 when creating the list of warning messages, include the line
1126 immediately after each WARNING: line, since that's usually where
1127 the file and line number wind up.
1129 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
1134 2005-10-22 Brian Warner <warner@lothar.com>
1136 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
1137 patch from Brad Hards
1138 * buildbot/status/classic.css: same
1139 * buildbot/test/test_web.py (Waterfall): match changes
1141 * buildbot/test/test_steps.py (BuildStep.setUp): set
1142 nextBuildNumber so the test passes
1143 * buildbot/test/test_status.py (MyBuilder): same
1145 * buildbot/status/html.py (StatusResourceBuild.body): revision
1146 might be numeric, so stringify it before html-escapifying it
1147 (CurrentBox.getBox): add a "waiting" state, and show a countdown
1148 timer for the upcoming build
1149 * buildbot/status/classic.css: add background-color attributes for
1150 offline/waiting/building classes
1152 * buildbot/status/builder.py (BuildStatus): derive from
1153 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
1154 the default (i.e. unknown) .slavename to "???" instead of None,
1155 since even unknown slavenames need to be printed eventually.
1156 (BuilderStatus): also derive from styles.Versioned . More
1157 importantly, determine .nextBuildNumber at creation/unpickling
1158 time by scanning the directory of saved BuildStatus instances and
1159 choosing one larger than the highest-numbered one found. This
1160 should fix the problem where random errors during upgrades cause
1161 the buildbot to forget about earlier builds. .nextBuildNumber is
1162 no longer stored in the pickle.
1163 (Status.builderAdded): if we can't unpickle the BuilderStatus,
1164 at least log the error. Also call Builder.determineNextBuildNumber
1165 once the basedir is set.
1167 * buildbot/master.py (BuildMaster.loadChanges): do
1168 styles.doUpgrade afterwards, in case I decide to make Changes
1169 derived from styles.Versioned some day and forget to make this
1173 * buildbot/test/test_runner.py (Options.testForceOptions): skip
1174 when running under older pythons (<2.3) in which the shlex module
1175 doesn't have a 'split' function.
1177 * buildbot/process/step.py (ShellCommand.start): make
1178 errorMessages= be a list of strings to stuff in the log before the
1179 command actually starts. This makes it easier to flag multiple
1180 warning messages, e.g. when the Source steps have to deal with an
1182 (CVS.startVC): handle slaves that don't handle multiple branches
1183 by switching into 'clobber' mode
1184 (SVN.startVC): same. Also reject branches without base_url
1185 (Darcs.startVC): same. Also reject revision= in older slaves
1186 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
1187 (Bazaar.startVC): same, and test for baz separately than for arch
1189 * buildbot/slave/commands.py (cvs_ver): document new features
1191 * buildbot/process/step.py (BuildStep.slaveVersion): document it
1192 (BuildStep.slaveVersionNewEnough): more useful utility method
1193 * buildbot/test/test_steps.py (Version): start testing it
1195 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
1196 the 'force' command requires python2.3, for the shlex.split method
1198 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
1199 since we don't use it anymore. The Twisted buildbot uses a
1202 2005-10-21 Brian Warner <warner@lothar.com>
1204 * buildbot/process/process_twisted.py: rework all BuildFactory
1205 classes to take a 'source' step as an argument, instead of
1206 building up the SVN instance in the factory.
1207 * docs/examples/twisted_master.cfg: enable build-on-branch by
1208 providing a base_url and default_branch
1210 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
1211 control over --branch and --revision, not that they are always
1213 * buildbot/status/html.py (StatusResourceBuilder.force): same
1214 (StatusResourceBuild.body): display SourceStamp components
1216 * buildbot/scripts/runner.py (ForceOptions): option parser for the
1217 IRC 'force' command, so it can be shared with an eventual
1218 command-line-tool 'buildbot force' mode.
1219 * buildbot/test/test_runner.py (Options.testForceOptions): test it
1221 2005-10-20 Brian Warner <warner@lothar.com>
1223 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
1225 * docs/examples/twisted_master.cfg: update to use Schedulers
1227 * buildbot/scripts/sample.cfg: update with Schedulers
1229 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
1230 method specifically for use by HTML "force build" button and the
1231 IRC "force" command. Raises an immediate error if there are no
1233 (IBuilderControl.requestBuild): make this just submit a build, not
1234 try to check for existing slaves or set up any when-finished
1235 Deferreds or anything.
1236 * buildbot/process/builder.py (BuilderControl): same
1237 * buildbot/status/html.py (StatusResourceBuilder.force): same
1238 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
1239 * buildbot/test/test_slaves.py: same
1240 * buildbot/test/test_web.py: same
1242 2005-10-19 Brian Warner <warner@lothar.com>
1244 * docs/examples/twisted_master.cfg: re-sync with reality: bring
1245 back python2.2 tests, turn off OS-X threadedselect-reactor tests
1247 2005-10-18 Brian Warner <warner@lothar.com>
1249 * buildbot/status/html.py: provide 'status' argument to most
1250 StatusResourceFOO objects
1251 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
1252 and Logfiles" section to make the Build page into a more-or-less
1253 comprehensive source of status information about the build
1255 * buildbot/status/mail.py (MailNotifier): include the Build's URL
1256 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
1258 2005-10-17 Brian Warner <warner@lothar.com>
1260 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
1261 arguments to accomodate Twisted >=2.1.0 . I will have to figure
1262 out what to do about other projects: the correct options for
1263 recent Twisteds will not work for older ones.
1265 2005-10-15 Brian Warner <warner@lothar.com>
1267 * buildbot/status/builder.py (Status.getURLForThing): add method
1268 to provide a URL for arbitrary IStatusFoo objects. The idea is to
1269 use this in email/IRC status clients to make them more useful, by
1270 providing the end user with hints on where to learn more about the
1271 object being reported on.
1272 * buildbot/test/test_web.py (GetURL): tests for it
1274 2005-10-14 Brian Warner <warner@lothar.com>
1276 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
1277 fix bug resulting from deferredResult changes
1279 2005-10-13 Brian Warner <warner@lothar.com>
1281 * buildbot/test/test_changes.py: remove use of deferredResult
1282 * buildbot/test/test_config.py: same
1283 * buildbot/test/test_control.py: same
1284 * buildbot/test/test_status.py: same
1285 * buildbot/test/test_vc.py: this is the only remaining use, since
1286 it gets used at module level. This needs to be replaced by some
1287 sort of class-level run-once routine.
1289 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
1291 * lots: implement multiple slaves per Builder, which means multiple
1292 current builds per Builder. Some highlights:
1293 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
1294 of (state,currentBuilds) instead of (state,currentBuild)
1295 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
1296 (IBuildStatus.getSlavename): new method, so you can tell which
1297 slave got used. This only gets set when the build completes.
1298 (IBuildRequestStatus.getBuilds): new method
1300 * buildbot/process/builder.py (SlaveBuilder): add a .state
1301 attribute to track things like ATTACHING and IDLE and BUILDING,
1303 (Builder): .. the .slaves attribute here, which has been turned
1304 into a simple list of available slaves. Added a separate
1305 attaching_slaves list to track ones that are not yet ready for
1307 (Builder.fireTestEvent): put off the test-event callback for a
1308 reactor turn, to make tests a bit more consistent.
1309 (Ping): cleaned up the slaveping a bit, now it disconnects if the
1310 ping fails due to an exception. This needs work, I'm worried that
1311 a code error could lead to a constantly re-connecting slave.
1312 Especially since I'm trying to move to a distinct remote_ping
1313 method, separate from the remote_print that we currently use.
1314 (BuilderControl.requestBuild): return a convenience Deferred that
1315 provides an IBuildStatus when the build finishes.
1316 (BuilderControl.ping): ping all connected slaves, only return True
1317 if they all respond.
1319 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
1320 reconnect when we shut down.
1322 * buildbot/status/builder.py: implement new methods, convert
1323 one-build-at-a-time methods to handle multiple builds
1324 * buildbot/status/*.py: do the same in all default status targets
1325 * buildbot/status/html.py: report the build's slavename in the
1326 per-Build page, report all buildslaves on the per-Builder page
1328 * buildbot/test/test_run.py: update/create tests
1329 * buildbot/test/test_slaves.py: same
1330 * buildbot/test/test_scheduler.py: remove stale test
1332 * docs/buildbot.texinfo: document the new builder-specification
1333 'slavenames' parameter
1335 2005-10-12 Brian Warner <warner@lothar.com>
1337 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
1338 report failure correctly, causing Dependent builds to run when
1339 they shouldn't have.
1340 * buildbot/status/builder.py (BuildSetStatus): same
1341 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
1342 (Set.testSuccess): test the both-pass case too
1343 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1344 fix this test: it was ending too early, masking the failure before
1345 (Logger): specialized StatusReceiver to make sure the dependent
1346 builds aren't even started, much less completed.
1348 2005-10-07 Brian Warner <warner@lothar.com>
1350 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
1351 bot.SlaveBuilder being disowned in the middle of a build
1353 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
1354 this inherit from StatusReceiver. Also upcall in __init__. This
1355 fixes the embarrasing crash when the new buildSetSubmitted method
1356 is invoked and Waterfall/etc don't implement their own.
1357 * buildbot/test/test_run.py: add a TODO note about a test to catch
1358 just this sort of thing.
1360 * buildbot/process/builder.py (Builder.attached): remove the
1361 already-attached warning, this situation is normal. Add some
1362 comments explaining it.
1364 2005-10-02 Brian Warner <warner@lothar.com>
1366 * buildbot/changes/maildir.py (Maildir.start): Tolerate
1367 OverflowError when setting up dnotify, because some 64-bit systems
1368 have problems with signed-vs-unsigned constants and trip up on the
1369 DN_MULTISHOT flag. Patch from Brad Hards.
1371 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
1373 * buildbot/process/step.py (BuildStep, ShellCommand): Add
1374 progressMetrics, description, descriptionDone to the 'parms' list,
1375 and make use the 'parms' list from the implementation class
1376 instead of only BuildStep to initialize the parameters. This
1377 allows buildbot.process.factory.s() to initialize all the parms,
1378 not just those defined in directly by BuildStep.
1380 2005-09-03 Brian Warner <warner@lothar.com>
1382 * NEWS: start adding items for the next release
1384 * docs/examples/twisted_master.cfg: (sync with reality) turn off
1385 python2.2 tests, change 'Quick' builder to only use python2.3
1387 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
1389 * buildbot/status/html.py (StatusResourceBuilder.body): only show
1390 the "Ping Builder" button if the build control is available; the
1391 user sees an exception otherwise
1393 * docs/buildbot.texinfo (PBChangeSource): fix a typo
1395 2005-09-01 Brian Warner <warner@lothar.com>
1397 * buildbot/interfaces.py (IBuilderStatus.getState): update
1398 signature, point out that 'build' can be None
1399 (IBuildStatus.getETA): point out ETA can be none
1401 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
1403 * buildbot/status/words.py (IrcStatusBot.emit_status): same
1405 2005-08-31 Brian Warner <warner@lothar.com>
1407 * buildbot/status/base.py (StatusReceiver.builderChangedState):
1408 update to match correct signature: removed 'eta' argument
1409 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
1411 2005-08-30 Brian Warner <warner@lothar.com>
1413 * buildbot/status/builder.py (LogFile): remove the assertion that
1414 blows up when you try to overwrite an existing logfile, instead
1415 just emit a warning. This case gets hit when the buildmaster is
1416 killed and doesn't get a chance to write out the serialized
1417 BuilderStatus object, so the .nextBuildNumber attribute gets out
1420 * buildbot/scripts/runner.py (sendchange): add --revision_file to
1421 the 'buildbot sendchange' arguments, for the Darcs context file
1422 * docs/buildbot.texinfo (sendchange): document it
1424 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
1425 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
1426 (IStatus.getSchedulers): new method
1427 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
1428 (Status.getSchedulers): implement
1429 * buildbot/process/builder.py (Builder): maintain
1430 BuilderStatus.pendingBuilds
1431 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
1432 (TryBase.addChange): Try schedulers should ignore Changes
1434 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
1435 for 'try' on CVS/SVN
1436 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
1438 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
1439 report status properly.
1440 (Try.createJob): implement unique buildset IDs
1442 * buildbot/status/client.py (StatusClientPerspective): add a
1443 perspective_getBuildSets method for the benefit of jobdir-style
1445 * docs/buildbot.texinfo (try): more docs
1446 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
1449 2005-08-18 Brian Warner <warner@lothar.com>
1451 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
1452 actually work. It's functional but still kind of clunky. Also, it
1453 only works with the pb-style.. needs to be made to work with the
1456 * buildbot/status/client.py (RemoteBuildSet): new class
1457 (RemoteBuildRequest): same
1458 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
1459 object, not the internal BuildStatus object.
1460 (RemoteBuild.remote_subscribe): new method to subscribe to builds
1461 outside of the usual buildStarted() return value.
1462 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
1464 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
1465 (Try_Userpass_Perspective.perspective_try): return a remotely
1466 usable BuildSetStatus object
1468 * buildbot/interfaces.py (IBuildStatus): remove obsolete
1469 isStarted()/waitUntilStarted()
1471 2005-08-16 Brian Warner <warner@lothar.com>
1473 * buildbot/status/builder.py: implement IBuildSetStatus and
1474 IBuildRequestStatus, wire them into place.
1475 * buildbot/buildset.py: same. Add ID, move wait-until-finished
1476 methods into the BuildSetStatus object.
1477 * buildbot/interfaces.py: same
1478 (IStatus.getBuildSets): new method to get pending BuildSets
1479 (IStatusReceiver.buildsetSubmitted): new method which hears about
1481 * buildbot/master.py (BuildMaster.submitBuildSet): same
1482 * buildbot/process/base.py (BuildRequest): same, replace
1483 waitUntilStarted with subscribe/unsubscribe
1484 * buildbot/process/builder.py (BuilderControl.forceBuild): use
1485 subscribe instead of waitUntilStarted
1486 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
1488 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
1490 * buildbot/test/test_buildreq.py: update for new code
1491 * buildbot/test/test_control.py (Force.testRequest): same
1494 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
1495 for Darcs to not use the tempfile module, so it works under
1496 python-2.2 too. We really didn't need the full cleverness of that
1497 module, since the slave has exclusive control of its own builddir.
1499 2005-08-15 Brian Warner <warner@lothar.com>
1501 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
1502 for CVS trees. It doesn't work for non-trunk branches,
1504 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
1507 * Makefile: make it easier to test against python2.2
1509 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
1510 tearDown2, so things like Arch can unregister archives as they're
1511 shutting down. The previous subclass-override-tearDown technique
1512 resulted in a nested maybeWait() and test failures under
1515 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
1516 where we can (Arch), add a branch= argument to set the branch used
1518 (BazExtractor): extract the branch too
1519 (TlaExtractor): same
1520 * buildbot/scripts/runner.py (TryOptions): add --branch
1521 * docs/buildbot.texinfo (try): document --branch/try_branch
1523 * buildbot/slave/commands.py (Darcs): implement get-revision for
1524 Darcs, so that 'try' will work. This requires the tempfile module
1527 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
1528 of revisions, branches, and 'try' in the process.
1530 2005-08-11 Brian Warner <warner@lothar.com>
1532 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
1533 this, it got broken at some point in the last few releases
1534 * buildbot/status/words.py (IrcBuildRequest): reply was broken
1535 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
1536 specifically the removal of ETA information from the tuple
1538 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
1541 * docs/buildbot.texinfo (try): document both --builder and
1542 'try_builders' in .buildbot/options
1543 * buildbot/scripts/runner.py (TryOptions): add --builder,
1544 accumulate the values into opts['builders']
1545 * buildbot/scripts/tryclient.py (Try.__init__): set builders
1546 * buildbot/test/test_runner.py (Try): add some quick tests to make
1547 sure 'buildbot try --options' and .buildbot/options get parsed
1548 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1549 use --builder control
1551 * docs/buildbot.texinfo (try): add --port argument to PB style
1553 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
1554 actual SourceStamp. Still need to extract a branch name, somehow.
1555 (Try): finish implementing the try client side, still need a UI
1556 for specifying which builders to use
1557 (Try.getopt): factor our options/config-file reading
1558 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
1560 * buildbot/test/test_vc.py: match SourceStampExtractor change
1562 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
1563 causes the twisted log to be sent to stderr
1565 * buildbot/scheduler.py (Try_Userpass): implement the PB style
1567 2005-08-10 Brian Warner <warner@lothar.com>
1569 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
1570 style is 90% done, still missing status reporting or waiting for
1571 the buildsets to finish, and it is completely untested.
1573 * buildbot/trybuild.py: delete file, move contents to ..
1574 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
1575 * buildbot/test/test_vc.py: match the move
1577 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
1578 of the TryScheduler, no buildsetID or status-tracking support yet
1579 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
1581 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
1582 possible to set the basedir after __init__ time, so it is easier
1583 to use as a Service-child of the BuildMaster instance
1585 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
1586 that delivers messages to its Service parent instead of requiring
1587 a subclass to be useful. This turns out to be much easier to build
1590 * buildbot/scripts/tryclient.py (createJob): utility code to
1591 create jobfiles, will eventually be used by 'buildbot try'
1593 2005-08-08 Brian Warner <warner@lothar.com>
1595 * docs/buildbot.texinfo (try): add docs on the
1596 as-yet-unimplemented Try scheduler
1598 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
1599 * buildbot/test/test_scheduler.py: .. here
1600 (Scheduling.testTryJobdir): add placeholder test for 'try'
1602 * buildbot/test/test_status.py (Log.testMerge3): update to match new
1603 addEntry merging (>=chunkSize) behavior
1604 (Log.testConsumer): update to handle new callLater(0) behavior
1606 * buildbot/test/test_web.py: rearrange tests a bit, add test for
1607 both the MAX_LENGTH bugfix and the resumeProducing hang.
1609 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
1610 put off the actual resumeProducing for a moment with
1611 reactor.callLater(0). This works around a twisted-1.3.0 bug which
1612 causes large logfiles to hang midway through.
1614 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
1615 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
1616 and to improve memory usage when streaming the file out to a web
1618 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
1619 make this work cleanly
1621 2005-08-03 Brian Warner <warner@lothar.com>
1623 * buildbot/trybuild.py: new file for 'try' utilities
1624 (getSourceStamp): run in a tree, find out the baserev+patch
1625 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
1626 implemented for SVN and Darcs, still working on Arch. I don't know
1627 how to make CVS work yet.
1629 * docs/buildbot.texinfo: document the 'buildbot' command-line
1630 tool, including the not-yet-implemented 'try' feature, and the
1631 in-flux .buildbot/ options directory.
1633 2005-07-20 Brian Warner <warner@lothar.com>
1635 * buildbot/locks.py: added temporary id() numbers to Lock
1636 descriptions, to track down a not-really-sharing-the-Lock bug
1638 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
1640 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
1641 needed for python2.2 compatibility
1642 * buildbot/test/test_vc.py: python2.2 compatibility: generators
1643 are from the __future__
1645 2005-07-19 Brian Warner <warner@lothar.com>
1647 * buildbot/master.py (BuildMaster.loadConfig): give a better error
1648 message when schedulers use unknown builders
1650 * buildbot/process/builder.py (Builder.compareToSetup): make sure
1651 SlaveLock('name') and MasterLock('name') are distinct
1653 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
1654 c['schedulers'] in such a way that we can actually accept
1656 * buildbot/test/test_config.py: check it
1658 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
1659 utility method to *all* the Schedulers
1660 (Periodic.listBuilderNames): same
1662 * docs/buildbot.texinfo (Interlocks): update chapter to match
1665 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
1666 to make sure that c['sources'], c['schedulers'], and c['status']
1667 are all lists of the appropriate objects, and that the Schedulers
1668 all point to real Builders
1669 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
1670 'listBuilderNames' utility method to support this
1671 * buildbot/scheduler.py: implement the utility method
1672 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
1674 * docs/buildbot.texinfo: add some @cindex entries
1676 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
1677 if it wasn't already set: most tla commands will fail unless one
1679 (Arch.createRepository): and disable bazaar's revision cache, since
1680 they cause test failures (the multiple repositories we create all
1681 interfere with each other through the cache)
1683 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
1684 bring it properly up to date with twisted-2.0 test guidelines
1686 * buildbot/master.py (BuildMaster): remove references to old
1687 'interlock' module, this caused a bunch of post-merge test
1689 * buildbot/test/test_config.py: same
1690 * buildbot/process/base.py (Build): same
1692 * buildbot/test/test_slaves.py: stubs for new test case
1694 * buildbot/scheduler.py: add test-case-name tag
1695 * buildbot/test/test_buildreq.py: same
1697 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
1698 unnecessary init code
1699 (Bot.remote_setBuilderList): match it
1701 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
1703 * buildbot/changes/mail.py (parseSyncmail): update comment
1705 * buildbot/test/test_slavecommand.py: disable Shell tests on
1706 platforms that don't suport IReactorProcess
1708 * buildbot/status/builder.py (LogFile): remove the 't' mode from
1709 all places where we open logfiles. It causes OS-X to open the file
1710 in some weird mode that that prevents us from mixing reads and
1711 writes to the same filehandle, which we depend upon to implement
1712 _generateChunks properly. This change doesn't appear to break
1713 win32, on which "b" and "t" are treated differently but a missing
1714 flag seems to be interpreted as "t".
1716 2005-07-18 Brian Warner <warner@lothar.com>
1718 * buildbot/slave/commands.py (ShellCommand): overhaul
1719 error-handling code, to try and make timeout/interrupt work
1720 properly, and make win32 happier
1721 * buildbot/test/test_slavecommand.py: clean up, stop using
1722 reactor.iterate, add tests for timeout and interrupt
1723 * buildbot/test/sleep.py: utility for a new timeout test
1725 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
1726 code from the local-usebranches branch
1728 2005-07-17 Brian Warner <warner@lothar.com>
1730 * buildbot/process/process_twisted.py
1731 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
1732 minutes, to match the other twisted BuildFactories, and don't
1733 excuse failures in c/qt/win32 reactors any more.
1735 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
1736 'freebsd' builders, since the buildslaves have been unavailable
1739 2005-07-13 Brian Warner <warner@lothar.com>
1741 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
1742 build-on-branch feature
1744 * buildbot/process/step.py (Darcs.__init__): add base_url and
1745 default_branch arguments, just like SVN
1746 (Arch.__init__): note that the version= argument is really the
1749 * buildbot/slave/commands.py (SourceBase): keep track of the
1750 repository+branch that was used for the last checkout in
1751 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
1752 match, we clobber the directory and perform a fresh checkout
1753 rather than trying to do an in-place update. This should protect
1754 us against trying to get to branch B by doing an update in a tree
1755 obtained from branch A.
1756 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
1757 (SVN.setup): same, just the svnurl
1758 (Darcs.setup): same, just the repourl
1759 (Arch.setup): same, arch coordinates (url), version, and
1760 buildconfig. Also pull the buildconfig from the args dictionary,
1761 which we weren't doing before, so the build-config was effectively
1763 (Arch.sourcedirIsUpdateable): don't try to update when we're
1764 moving to a specific revision: arch can't go backwards, so it is
1765 safer to just clobber the tree and checkout a new one at the
1767 (Bazaar.setup): same sourcedata as Arch
1769 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
1770 use maybeWait, to work with twisted-1.3.0 and twcompat
1771 (Dependencies.testRun_Pass): same
1773 * buildbot/test/test_vc.py: rearrange, cleanup
1775 * buildbot/twcompat.py: add defer.waitForDeferred and
1776 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
1777 can work under twisted-1.3.0 .
1779 * buildbot/test/test_vc.py: rewrite. The sample repositories are
1780 now created at setUp time. This increases the runtime of the test
1781 suite considerably (from 91 seconds to 151), but it removes the
1782 need for an offline tarball, which should solve a problem I've
1783 seen where the test host has a different version of svn than the
1784 tarball build host. The new code also validates that mode=update
1785 really picks up recent commits. This approach will also make it
1786 easier to test out branches, because the code which creates the VC
1787 branches is next to the code which uses them. It will also make it
1788 possible to test some change-notification hooks, by actually
1789 performing a VC commit and watching to see the ChangeSource get
1792 2005-07-12 Brian Warner <warner@lothar.com>
1794 * docs/buildbot.texinfo (SVN): add branches example
1795 * docs/Makefile (buildbot.ps): add target for postscript manual
1797 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
1798 * buildbot/test/test_locks.py: same
1800 * buildbot/process/step.py (Darcs): comment about default branches
1802 * buildbot/master.py (BuildMaster.loadConfig): don't look for
1803 c['interlocks'] in the config file, complain if it is present.
1804 Scan all locks in c['builders'] to make sure the Locks they use
1806 * buildbot/test/test_config.py: remove old c['interlocks'] test,
1807 add some tests to check for non-uniquely-named Locks
1808 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
1809 since the unique-Lock validation code requires it now
1811 * buildbot/locks.py: fix test-case-name
1813 * buildbot/interlock.py: remove old file
1815 2005-07-11 Brian Warner <warner@lothar.com>
1817 * buildbot/test/test_interlock.py: rename to..
1818 * buildbot/test/test_locks.py: .. something shorter
1820 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
1821 versions (after 2.0.1) changed internet.TCPClient to shut down the
1822 connection in stopService. Change the code to handle this
1825 * buildbot/process/base.py (Build): handle whole-Build locks
1826 * buildbot/process/builder.py (Builder.compareToSetup): same
1827 * buildbot/test/test_interlock.py: make tests work
1829 * buildbot/process/step.py (BuildStep.startStep): complain if a
1830 Step tries to claim a lock that's owned by its own Build
1831 (BuildStep.releaseLocks): typo
1833 * buildbot/locks.py (MasterLock): use ComparableMixin so config
1834 file reloads don't replace unchanged Builders
1836 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
1837 rewrite to cover new Locks instead of old c['interlocks']
1838 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
1842 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
1843 start the master and connect the buildslave
1845 * buildbot/process/step.py (FailingDummy.done): finish with a
1846 FAILURE status rather than raising an exception
1848 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
1849 stringify a BuildRequest.reason that is None
1851 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
1853 * buildbot/status/builder.py (BuildSetStatus): implement enough to
1854 allow scheduler.Dependent to work
1855 * buildbot/buildset.py (BuildSet): set .reason and .results
1857 * buildbot/test/test_interlock.py (Locks.setUp): connect both
1858 slaves, to make the test stop hanging. It still fails, of course,
1859 because I haven't even started to implement Locks.
1861 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
1863 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
1864 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
1865 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
1866 (Dependent): new class for downstream build dependencies
1867 * buildbot/test/test_dependencies.py: tests (still failing)
1869 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
1871 2005-07-07 Brian Warner <warner@lothar.com>
1873 * buildbot/test/runutils.py (RunMixin): factored this class out..
1874 * buildbot/test/test_run.py: .. from here
1875 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
1876 added new buildbot.locks tests (which all hang right now)
1877 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
1878 * buildbot/process/step.py: claim/release per-BuildStep locks
1880 * docs/Makefile: add 'buildbot.html' target
1882 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
1883 interpreted as "HEAD", so that all VC steps can accept branch=None
1884 and have it mean the "default branch".
1886 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
1888 2005-07-07 Brian Warner <warner@lothar.com>
1890 * docs/examples/twisted_master.cfg: update to match current usage
1892 * docs/buildbot.texinfo (System Architecture): comment out the
1893 image, it doesn't exist yet and just screws up the HTML manual.
1895 2005-07-05 Brian Warner <warner@lothar.com>
1897 * debian/.cvsignore: oops, missed one. Removing leftover file.
1899 2005-06-17 Brian Warner <warner@lothar.com>
1901 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
1902 changed its output in 1.2.0, don't mistakenly think that the
1903 subversion we find isn't capable of supporting our tests.
1905 * debian/*: remove the debian/ directory and its contents, to make
1906 life easier for the proper Debian maintainer
1908 * Makefile (release): same
1910 2005-06-07 Brian Warner <warner@lothar.com>
1912 * everything: create a distinct SourceStamp class to replace the
1913 ungainly 4-tuple, let it handle merging instead of BuildRequest.
1914 Changed the signature of Source.startVC to include the revision
1915 information (instead of passing it through self.args). Implement
1916 branches for SVN (now only Darcs/Git is missing support). Add more
1919 2005-06-06 Brian Warner <warner@lothar.com>
1921 * everything: rearrange build scheduling. Create a new Scheduler
1922 object (configured in c['schedulers'], which submit BuildSets to a
1923 set of Builders. Builders can now use multiple slaves. Builds can
1924 be run on alternate branches, either requested manually or driven
1925 by changes. This changed some of the Status classes. Interlocks
1926 are out of service until they've been properly split into Locks
1927 and Dependencies. treeStableTimer, isFileImportant, and
1928 periodicBuild have all been moved from the Builder to the
1930 (BuilderStatus.currentBigState): removed the 'waiting' and
1931 'interlocked' states, removed the 'ETA' argument.
1933 2005-05-24 Brian Warner <warner@lothar.com>
1935 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
1936 erroneously abandons the connection (in clientConnectionFailed)
1937 for non-UserErrors, which means that if we lose the connection due
1938 to a network problem or a timeout, we'll never try to reconnect.
1939 Fix this by not upcalling to the buggy parent method. Note:
1940 twisted-2.0 fixes this, but the function only has 3 lines so it
1941 makes more sense to copy it than to try and detect the buggyness
1942 of the parent class. Fixes SF#1207588.
1944 * buildbot/changes/changes.py (Change.branch): doh! Add a
1945 class-level attribute to accomodate old Change instances that were
1946 pickled before 0.6.5 (where .branch was added for new Changes).
1947 This fixes the exception that occurs when you try to look at an
1948 old Change (through asHTML).
1950 * buildbot/__init__.py (version): bump to 0.6.6+ while between
1953 2005-05-23 Brian Warner <warner@lothar.com>
1955 * buildbot/__init__.py (version): release 0.6.6
1957 2005-05-23 Brian Warner <warner@lothar.com>
1959 * NEWS: update for 0.6.6 release
1960 * debian/changelog: same
1962 * buildbot/scripts/runner.py (start): put the basedir in sys.path
1963 before starting: this was done by twistd back when we spawned it,
1964 now that we're importing the pieces and running them in the
1965 current process, we have to do it ourselves. This allows
1966 master.cfg to import files from the same directory without
1967 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
1968 Stichele for the catch.
1969 (Options.opt_version): Add a --version command (actually, just make
1970 the existing --version command emit Buildbot's version too)
1972 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
1973 fix to make this behave like other LogFiles, this time to handle
1974 existing LogFiles on disk. (add the missing .upgrade method)
1975 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
1977 2005-05-21 Brian Warner <warner@lothar.com>
1979 * buildbot/test/test_runner.py (Create.testMaster): match the
1980 rawstring change in runner.py:masterTAC
1982 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
1983 TwistedWords is installed
1984 * buildbot/test/test_status.py: same, with TwistedMail
1986 * buildbot/master.py: remove old IRC/Waterfall imports (used by
1987 some old, deprecated, and removed config keys). This should enable
1988 you to use the base buildbot functionality with Twisted-2.0.0 when
1989 you don't also have TwistedWeb and TwistedWords installed
1991 2005-05-20 Brian Warner <warner@lothar.com>
1993 * buildbot/scripts/runner.py (run): call sendchange(), not
1994 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
1995 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
1996 (stop): don't wait for process to die when sending SIGHUP
1997 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
1998 directory name gets interpreted, which you don't want
2001 * buildbot/__init__.py (version): bump to 0.6.5+ while between
2004 2005-05-18 Brian Warner <warner@lothar.com>
2006 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
2008 2005-05-18 Brian Warner <warner@lothar.com>
2010 * README: update for 0.6.5
2011 * debian/changelog: same
2013 * buildbot/changes/changes.py: rename tag= to branch=, since
2014 that's how we're using it, and my design for the upcoming "build a
2015 specific branch" feature wants it. also, tag= was too CVS-centric
2016 * buildbot/changes/mail.py (parseSyncmail): same
2017 * buildbot/process/base.py (Build.isBranchImportant): same
2018 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
2019 * docs/buildbot.texinfo (Attributes of Changes): same
2021 * NEWS: update tag=, update for upcoming release
2023 2005-05-17 Brian Warner <warner@lothar.com>
2025 * buildbot/scripts/runner.py (stop): actually poll once per
2026 second, instead of re-killing the poor daemon once per second.
2027 Sleep briefly (0.1s) before the first poll, since there's a good
2028 chance we can avoid waiting the full second if the daemon shuts
2029 down quickly. Also remove the sys.exit() at the end.
2030 (start): remove the unneighborly sys.exit()
2032 * Makefile: improve permission-setting to not kick Arch so badly
2034 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
2035 default --keepalive=600, since it doesn't hurt very much, and it's
2036 a hassle to discover that you need it.
2037 * buildbot/test/test_runner.py (Create.testSlave): test it
2039 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
2040 IRC bot about EXCEPTION
2042 * buildbot/status/client.py (PBListener): upcall more correctly
2044 * buildbot/process/base.py (Build.allStepsDone): if a step caused
2045 an exception mark the overall build with EXCEPTION, not SUCCESS
2047 * buildbot/scripts/runner.py (makefile_sample): remove the leading
2049 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
2050 * Makefile: update some release-related stuff
2052 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
2053 gets called when there isn't actually an active process, just end
2054 the Command instead of blowing up. I don't know how it gets into
2055 this state, but the twisted win32 buildslave will sometimes hang,
2056 and when it shakes its head and comes back, it thinks it's still
2057 running a Command. The next build causes this command to be
2058 interrupted, but the lack of self.process.pid breaks the interrupt
2061 * NEWS: document changes since the last release
2063 * buildbot/scripts/runner.py (start): change 'buildbot start' to
2064 look for Makefile.buildbot instead of a bare Makefile . The
2065 'buildbot start' does not install this file, so you have to
2066 manually copy it if you want to customize startup behavior.
2067 (createMaster): change 'buildbot master' command to create
2068 Makefile.sample instead of Makefile, to create master.cfg.sample
2069 instead of master.cfg (requiring you to copy it before the
2070 buildmaster can be started). Both sample files are kept up to
2071 date, i.e. they are overwritten if they have been changed. The
2072 'buildbot.tac' file is *not* overwritten, but if the new contents
2073 don't match the old, a 'buildbot.tac.new' file is created and the
2074 user is warned. This seems to be a much more sane way to handle
2075 startup files. Also, don't sys.exit(0) when done, so we can run
2076 unit tests against it.
2077 (createSlave): same. Don't overwrite the sample info/ files.
2078 * buildbot/scripts/sample.mk: remove. the contents were pulled
2079 into runner.py, since they need to match the behavior of start()
2083 * docs/buildbot.texinfo (Launching the daemons): document it
2084 * buildbot/test/test_runner.py (Create): test it
2086 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
2087 version that can handle string-in-string tests, because otherwise
2088 python-2.2 fails the tests. It'd be tremendous if Trial's test
2089 took two strings under 2.2 too.
2091 * everything: fixed all deprecation warnings when running against
2092 Twisted-2.0 . (at least all the ones in buildbot code, there are a
2093 few that come from Twisted itself). This involved putting most of
2094 the Twisted-version specific code in the new buildbot.twcompat
2095 module, and creating some abstract base classes in
2096 buildbot.changes.base and buildbot.status.base (which might be
2097 useful anyway). __implements__ is a nuisance and requires an ugly
2098 'if' clause everywhere.
2100 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
2101 delay before finishing the test: it seems that smtp.sendmail
2102 doesn't hang up on the server, so we must wait a moment so it can
2103 hang up on us. This removes the trial warning about an unclean
2106 2005-05-16 Brian Warner <warner@lothar.com>
2108 * buildbot/process/step.py (Source): add 'retry' argument. It is a
2109 tuple of (delay, repeats).
2110 * buildbot/test/test_vc.py (Retry): test it
2111 * docs/buildbot.texinfo (Source Checkout): document it
2112 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
2113 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
2114 doVCFull() are handled by re-trying the checkout (after a delay)
2115 some number of times.
2116 (ShellCommand._startCommand): make header lines easier to read
2118 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
2120 (WebTest.test_logfile): make sure master gets shut down, silences
2121 some "unclean reactor" test errors
2123 * buildbot/test/test_changes.py (Sender.tearDown): spin the
2124 reactor once after shutdown, something in certain versions of
2125 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
2126 fails, svn-trunk is ok.
2128 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
2129 second win32 error message
2131 * buildbot/test/test_run.py (Status.testSlave): be smarter about
2132 validating the ETA, so the tests don't fail on slow systems
2134 2005-05-15 Brian Warner <warner@lothar.com>
2136 * buildbot/status/builder.py (HTMLLogFile): make this behave like
2137 the new LogFile class, so upgrading works properly
2138 (LogFileProducer.resumeProducing): survive resumeProducing after
2139 we've exhausted the chunkGenerator
2141 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
2143 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
2144 (Log.testUpgrade): same
2146 * docs/buildbot.texinfo (Maintenance): describe how to delete old
2147 Builds and logs with a cron job.
2149 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
2150 of the old non-offline LogFile, added code to upgrade these to
2151 new-style contents-live-on-disk instances at load time (in a way
2152 that doesn't invalidate the old Build pickles, so upgrading to
2153 0.6.5 is not a one-way operation). Got rid of everything related
2155 (LogFile.__init__): create LogFiles with the parent step status,
2156 the log's name, and a builder-relative filename where it can keep
2157 the contents on disk.
2158 (LogFile.hasContents): new method, clients are advised to call it
2159 before getText or getChunks and friends. If it returns False, the
2160 log's contents have been deleted and getText() will raise an
2162 (LogFile.getChunks): made it a generator
2163 (LogFile.subscribeConsumer): new method, takes a Twisted-style
2164 Consumer (except one that takes chunks instead of strings). This
2165 enables streaming of very large logfiles without storing the whole
2167 (BuildStatus.generateLogfileName): create names like
2168 12-log-compile-output, with a _0 suffix if required to be unique
2169 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
2170 or earlier) logfiles into new-style ones
2171 (BuilderStatus): remove everything related to 'stub' builds. There
2172 is now only one build cache, and we don't strip logs from old
2174 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
2175 since we no longer fight to keep it in the cache
2177 * buildbot/status/html.py (TextLog.render_GET): use a
2178 ChunkConsumer to stream the log entries efficiently.
2179 (ChunkConsumer): wrapper which consumes chunks and writes
2182 * buildbot/test/test_twisted.py (Parse.testParse): use a
2183 LogFile-like object instead of a real one
2185 * buildbot/test/test_status.py (MyLog): handle new LogFile code
2186 (Log.testMerge3): validate more merge behavior
2187 (Log.testChunks): validate LogFile.getChunks
2188 (Log.testUpgrade): validate old-style LogFile upgrading
2189 (Log.testSubscribe): validate LogFile.subscribe
2190 (Log.testConsumer): validate LogFile.subscribeConsumer
2192 * buildbot/interfaces.py (IStatusLogStub): remove
2193 (IStatusLog.subscribeConsumer): new method
2194 (IStatusLog.hasContents): new method
2195 (IStatusLogConsumer): describes things passed to subscribeConsumer
2197 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
2198 the log contents if it does not have any contents.
2199 (StatusResourceBuildStep.body): same
2200 (StatusResourceBuildStep.getChild): give a 404 for empty logs
2202 2005-05-14 Brian Warner <warner@lothar.com>
2204 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
2205 timeouts to try and make the windows metabuildslave not hang
2207 2005-05-13 Mike Taylor <bear@code-bear.com>
2209 * buildbot/slave/commands.py (rmdirRecursive): added a check
2210 to ensure the path passed into rmdirRecursive actually exists.
2211 On win32 a non-existant path would generate an exception.
2213 2005-05-13 Brian Warner <warner@lothar.com>
2215 * buildbot/slave/commands.py (rmdirRecursive): replacement for
2216 shutil.rmtree which behaves correctly on windows in the face of
2217 files that you have to chmod before deleting. Thanks to Bear at
2218 the OSAF for the routine.
2219 (SourceBase.doClobber): use rmdirRecursive
2221 2005-05-12 Brian Warner <warner@lothar.com>
2223 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
2224 method generate chunks instead of returning a big list. This
2225 allows the same method to be used for both old LogFile and new
2227 (OfflineLogFile.getText): use the generator
2228 (OfflineLogFile.subscribe): same
2229 * buildbot/status/html.py (TextLog.resumeProducing): same
2230 * buildbot/interfaces.py (IStatusLog.getChunks): document it
2232 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
2233 point out that OfflineLogFile does not currently work with
2234 html.Waterfall . Fixing this is high-priority.
2236 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
2237 apparently windows defaults to using stdout
2239 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
2240 better message on failure so I can figure out the win32 problem
2242 * buildbot/slave/commands.py (ShellCommand._startCommand): update
2243 log messages to include more useful copies of the command being
2244 run, the argv array, and the child command's environment.
2245 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
2247 2005-05-11 Brian Warner <warner@lothar.com>
2249 * setup.py: oops, install debug.glade so 'buildbot debugclient'
2251 * Makefile: update the deb-snapshot version
2253 * docs/buildbot.texinfo: move all .xhtml docs into a new
2254 .texinfo-format document, adding a lot of material in the process.
2255 This is starting to look like a real user's manual. Removed all
2256 the Lore-related files: *.xhtml, *.css, template.tpl .
2257 * docs/Makefile: simple makefile to run 'makeinfo'
2258 * buildbot/scripts/sample.cfg: rearrange slightly
2259 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
2261 2005-05-10 Brian Warner <warner@lothar.com>
2263 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
2264 different name for the internal twistw module, handle it.
2266 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
2267 * setup.py: .. and stop trying to install it
2269 * buildbot/process/step.py (Git): added support for 'cogito' (aka
2270 'git'), the new linux kernel VC system (http://kernel.org/git/).
2271 Thanks to Brandon Philips for the patch.
2272 * buildbot/slave/commands.py (Git): same
2274 2005-05-06 Brian Warner <warner@lothar.com>
2276 * buildbot/status/builder.py (OfflineLogFile): replace the default
2277 LogFile with a form that appends its new contents to a disk file
2278 as they arrive. The complete log data is never kept in RAM. This
2279 is the first step towards handling very large (100MB+) logfiles
2280 without choking quite so badly. (The other half is
2281 producer/consumer on the HTML pages).
2282 (BuildStepStatus.addLog): use OfflineLogFile by default
2283 (BuildStatus.getLogfileName): helper code to give the
2284 OfflineLogFile a filename to work with
2286 * buildbot/test/test_status.py (Results.testAddResults): update
2287 tests to handle new asserts
2288 * buildbot/test/test_vc.py (Patch.doPatch): same
2289 * buildbot/test/test_steps.py (BuildStep.setUp): same
2291 2005-05-05 Brian Warner <warner@lothar.com>
2293 * buildbot/scripts/runner.py (start): if there is no Makefile,
2294 launch the app by importing twistd's internals and calling run(),
2295 rather than spawning a new twistd process. This stands a much
2296 better chance of working under windows.
2297 (stop): kill the process with os.kill instead of spawning
2298 /bin/kill, again to reduce the number of external programs which
2299 windows might not have in the PATH. Also wait up to 5 seconds for
2300 the process to go away, allowing things like 'buildbot stop;
2301 buildbot start' to be reliable in the face of slow shutdowns.
2303 * buildbot/master.py (Dispatcher.__getstate__): remove old
2304 .tap-related methods
2305 (BuildMaster.__getstate__): same
2307 * buildbot/slave/bot.py (makeService): same
2308 (Options.longdesc): same
2309 * buildbot/scripts/runner.py: copy over some old mktap option text
2311 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
2312 'buildbot master' now creates a buildbot.tac file, so there is no
2313 longer a create-instance/save/reload sequence. mktap is dead, long
2315 * buildbot/scripts/sample.mk: use twistd -y, not -f
2316 * buildbot/test/test_config.py: remove mktap-based test
2317 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
2318 * README: don't reference mktap
2320 * docs/source.xhtml: document some of the attributes that Changes
2323 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
2325 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
2326 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
2327 * buildbot/changes/changes.py (Change)
2328 * buildbot/changes/mail.py (parseSyncmail)
2329 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
2331 * buildbot/process/base.py (Build.isTagImportant)
2335 2005-05-04 Brian Warner <warner@lothar.com>
2337 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
2338 connection after sending the change, so that unit tests don't
2339 complain about sockets being left around
2341 * buildbot/status/html.py (WaterfallStatusResource.body): fix
2342 exception in phase=0 rendering
2343 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2345 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
2347 * buildbot/master.py (BuildMaster.loadConfig): finally remove
2348 deprecated config keys: webPortnum, webPathname, irc, manholePort,
2349 and configuring builders with tuples.
2350 * buildbot/test/test_config.py: stop testing compatibility with
2351 deprecated config keys
2352 * buildbot/test/test_run.py: same
2354 2005-05-03 Brian Warner <warner@lothar.com>
2356 * contrib/arch_buildbot.py: survive if there are no logfiles
2357 (username): just use a string, os.getlogin isn't reliable
2359 * buildbot/scripts/runner.py (sendchange): oops, fix the command
2360 so 'buildbot sendchange' actually works. The earlier test only
2361 covered the internal (non-reactor-running) form.
2363 * contrib/arch_buildbot.py: utility that can run as an Arch hook
2364 script to notify the buildmaster about changes
2366 * buildbot/scripts/runner.py (sendchange): new command to send a
2367 change to a buildbot.changes.pb.PBChangeSource receiver.
2368 * buildbot/test/test_changes.py (Sender): test it
2370 * buildbot/master.py (BuildMaster.startService): mark .readConfig
2371 after any reading of the config file, not just when we do it in
2372 startService. This makes some tests a bit cleaner.
2374 * buildbot/changes/pb.py: add some log messages
2376 * buildbot/process/base.py (Build.startBuild): fix a bug that
2377 caused an exception when the build terminated in the very first
2379 (Build.stepDone): let steps return a status of EXCEPTION. This
2380 terminates the build right away, and sets the build's overall
2381 status to EXCEPTION too.
2382 * buildbot/process/step.py (BuildStep.failed): return a status of
2383 EXCEPTION when that is what has happened.
2385 * buildbot/process/step.py (Arch.computeSourceRevision): finally
2386 implement this, allowing Arch-based projects to get precise
2387 checkouts instead of always using the latest code
2388 (Bazaar): create variant of Arch to let folks use baz instead of
2389 tla. Requires a new buildslave too.
2390 * buildbot/slave/commands.py (Arch): add 'revision' argument
2391 (Bazaar): create variant of Arch that uses baz instead of tla.
2392 Remove the code that extracts the archive name from the
2393 register-archive output, since baz doesn't provide it, and require
2394 the user provide both the archive name and its location.
2395 * buildbot/test/test_vc.py (VC.testBazaar): added tests
2397 2005-05-02 Brian Warner <warner@lothar.com>
2399 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
2400 thanks to Nick Trout.
2402 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
2403 deals better with source Makefile coming from a read-only CVS
2404 checkout. Thanks to Nick Trout for the catch.
2406 * buildbot/__init__.py (version): bump to 0.6.4+ while between
2409 2005-04-28 Brian Warner <warner@lothar.com>
2411 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
2413 * debian/changelog: update for 0.6.4
2415 2005-04-28 Brian Warner <warner@lothar.com>
2417 * README.w32: add a checklist of steps for getting buildbot
2419 * MANIFEST.in: include it in the tarball
2423 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
2424 broken .tap files from 0.6.3 by getting rid of .services,
2425 .namedServices, and .change_svc at load time.
2427 2005-04-27 Brian Warner <warner@lothar.com>
2429 * NEWS: update in preparation for new release
2431 * buildbot/test/test_config.py (Save.testSave): don't pull in
2432 twisted.scripts.twistd, we don't need it and it isn't for windows
2435 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
2436 accomodate win32 which can't do atomic-rename
2438 2005-04-27 Brian Warner <warner@lothar.com>
2440 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
2441 timeouts to help the slow metabuildbot not flunk them so much
2442 (Disconnect.testBuild3): same
2443 (Disconnect.testBuild4): same
2444 (Disconnect.testInterrupt): same
2446 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
2447 setup, it was completely broken for new buildmasters (those which
2448 did not have a 'change.pck' already saved. Thanks to Paul Warren
2449 for catching this (embarrassing!) bug.
2450 (Dispatcher.__getstate__): don't save our registered avatar
2451 factories, since they'll be re-populated when the config file is
2453 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
2454 tests (since the real mktap-generated BuildMaster doesn't save
2456 (BuildMaster.__getstate__): don't save any service children,
2457 they'll all be re-populated when the config file is re-read.
2458 * buildbot/test/test_config.py (Save.testSave): test for this
2460 2005-04-26 Brian Warner <warner@lothar.com>
2462 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
2463 rendered with Blender.. looks a bit nicer.
2464 * buildbot/docs/images/icon.blend: add the Blender file for it
2466 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
2467 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
2468 running under windows. This appears to be the best way to allow
2469 BuildSteps to do something normal like 'trial -v buildbot.test' or
2470 'make foo' and still expect it to work. The idea is to make the
2471 BuildSteps look as much like what a developer would type when
2472 compiling or testing the tree by hand. This approach probably has
2473 problems when there are spaces in the arguments, so if you've got
2474 windows buildslaves, you'll need to pay close attention to your
2477 * buildbot/status/html.py (WaterfallStatusResource.body): add the
2478 timezone to the timestamp column.
2479 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2481 * buildbot/scripts/runner.py (loadOptions): do something sane for
2482 windows, I think. We use %APPDATA%/buildbot instead of
2483 ~/.buildbot, but we still search everywhere from the current
2484 directory up to the root for a .buildbot/ subdir. The "is it under
2485 $HOME" security test was replaced with "is it owned by the current
2486 user", which is only performed under posix.
2487 * buildbot/test/test_runner.py (Options.testFindOptions): update
2488 tests to match. The "is it owned by the current user" check is
2489 untested. The test has been re-enabled for windows.
2491 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
2492 any "\n" in the expected output with the platform-specific line
2493 separator. Make this separator "\r\n" on PTYs under unix, they
2494 seem to do that and I don't know why
2496 * buildbot/test/test_runner.py (Options.optionsFile): disable on
2497 windows for now, I don't know what ~/.buildbot/ should mean there.
2499 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
2500 win32 compatibility, don't use "/tmp"
2501 (Basedir.testChangeBuilddir): remove more unixisms
2503 2005-04-26 Brian Warner <warner@lothar.com>
2505 * buildbot/test/test_control.py (Force.rmtree): python2.2
2506 compatibility, apparently its shutil.rmtree ignore_errors=
2507 argument is ignored.
2508 * buildbot/test/test_run.py (Run.rmtree): same
2509 (RunMixin.setUp): same
2511 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
2514 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
2515 'substring in string' operator, must use string.find(substr)!=-1
2516 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
2517 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
2519 * buildbot/scripts/runner.py (loadOptions): add code to search for
2520 ~/.buildbot/, a directory with things like 'options', containing
2521 defaults for various 'buildbot' subcommands. .buildbot/ can be in
2522 the current directory, your $HOME directory, or anywhere
2523 inbetween, as long as you're somewhere inside your home directory.
2524 (debugclient): look in ~/.buildbot/options for master and passwd
2525 (statuslog): look in ~/.buildbot/options for 'masterstatus'
2526 * buildbot/test/test_runner.py (Options.testFindOptions): test it
2528 * buildbot/status/client.py (makeRemote): new approach to making
2529 IRemote(None) be None, which works under Twisted-2.0
2530 * buildbot/test/test_status.py (Client.testAdaptation): test it
2532 * buildbot/status/builder.py (Status.builderAdded): when loading a
2533 pickled BuilderStatus in from disk, set its name after loading.
2534 The config file might have changed its name (but not its
2535 directory) while it wasn't looking.
2537 * buildbot/process/builder.py (Builder.attached): always return a
2538 Deferred, even if the builder was already attached
2539 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
2541 2005-04-25 Brian Warner <warner@lothar.com>
2543 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
2544 category-related exception when announcing a build has finished
2546 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
2547 reference no-longer-existent changemaster.sources
2548 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
2550 * buildbot/__init__.py (version): bump to 0.6.3+ while between
2553 2005-04-25 Brian Warner <warner@lothar.com>
2555 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
2557 * debian/changelog: update for 0.6.3
2559 2005-04-25 Brian Warner <warner@lothar.com>
2561 * MANIFEST.in: make sure debug.glade is in the tarball
2563 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
2565 * NEWS: update for the imminent 0.6.3 release
2567 * buildbot/status/html.py (HtmlResource.content): make the
2568 stylesheet <link> always point at "buildbot.css".
2569 (StatusResource.getChild): map "buildbot.css" to a static.File
2570 containing whatever css= argument was provided to Waterfall()
2571 (Waterfall): provide the "classic" css as the default.
2572 * docs/waterfall.classic.css: move default CSS from here ..
2573 * buildbot/status/classic.css: .. to here
2575 * MANIFEST.in: make sure classic.css is included in the tarball
2576 * setup.py: and that it is installed too, under buildbot/status/
2578 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
2579 the module level, because buildbot.tap files from 0.6.2 don't have
2580 it in their attribute dictionary.
2582 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
2583 really exists at startup, might save some confusion somewhere.
2585 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
2587 * docs/waterfall.classic.css:
2588 add a stylesheet that's almost the same as the "classic"
2591 * buildbot/status/builder.py:
2592 add EXCEPTION as a result - this is a problem for the bot
2593 maintainer, not a build problem for the changers
2594 * buildbot/process/step.py:
2595 use EXCEPTION instead of FAILURE for exceptions
2596 * buildbot/status/html.py:
2597 add build_get_class to get a class out of a build/buildstep
2598 finish naming the classes
2599 split out sourceNames to changeNames and builderNames so we
2600 can style them separately
2601 * docs/config.xhtml:
2602 finish documenting classes as they are right now
2604 * buildbot/status/html.py:
2605 name the classes as we agreed on IRC
2606 * docs/config.xhtml:
2609 * buildbot/status/html.py:
2610 same for cssclass->class_
2612 * buildbot/status/html.py:
2613 as decided on IRC, use class_ for the "class" attribute to not
2614 conflict with the class keyword, and clean up the messy **{} stuff.
2616 * buildbot/status/mail.py:
2617 put back "builders" argument, and fix docstring, because the
2618 code *ignores* builders listed in this argument
2620 * buildbot/process/builder.py:
2621 remove FIXME notes - category is now indeed a cvar of BuilderStatus
2623 * docs/config.xhtml:
2624 describe the category argument for builders
2626 * buildbot/status/builder.py:
2627 Fix a silly bug due to merging
2629 * buildbot/process/builder.py:
2630 remove category from the process Builder ...
2631 * buildbot/status/builder.py:
2632 ... and add it to BuilderStatus instead.
2633 Set category on unpickled builder statuses, they might not have it.
2634 * buildbot/master.py:
2635 include category when doing builderAdded
2636 * buildbot/status/mail.py:
2637 return None instead of self for builders we are not interested in.
2638 * buildbot/test/test_run.py:
2639 fix a bug due to only doing deferredResult on "dummy" waiting
2640 * buildbot/test/test_status.py:
2641 add checks for the Mail IStatusReceiver returning None or self
2643 * buildbot/status/html.py:
2644 fix testsuite by prefixing page title with BuildBot
2646 * buildbot/status/builder.py:
2647 have .category in builder status ...
2648 * buildbot/process/builder.py:
2649 ... and set it from Builder
2650 * buildbot/status/html.py:
2651 make .css a class variable
2652 * buildbot/test/test_status.py:
2653 write more tests to cover our categories stuff ...
2654 * buildbot/status/mail.py:
2655 ... and fix the bug that this uncovered
2657 * buildbot/changes/mail.py:
2658 * buildbot/changes/pb.py:
2659 * buildbot/master.py:
2660 * buildbot/process/base.py:
2661 * buildbot/process/factory.py:
2662 * buildbot/process/interlock.py:
2663 * buildbot/process/step.py:
2664 * buildbot/process/step_twisted.py:
2665 * buildbot/slave/commands.py:
2666 * buildbot/status/builder.py:
2667 * buildbot/status/client.py:
2668 * buildbot/status/html.py:
2669 * buildbot/status/mail.py:
2670 * buildbot/status/progress.py:
2671 * buildbot/test/test_changes.py:
2672 * buildbot/test/test_config.py:
2673 * buildbot/test/test_control.py:
2674 * buildbot/test/test_interlock.py:
2675 * buildbot/test/test_maildir.py:
2676 * buildbot/test/test_mailparse.py:
2677 * buildbot/test/test_run.py:
2678 * buildbot/test/test_slavecommand.py:
2679 * buildbot/test/test_status.py:
2680 * buildbot/test/test_steps.py:
2681 * buildbot/test/test_twisted.py:
2682 * buildbot/test/test_util.py:
2683 * buildbot/test/test_vc.py:
2684 * buildbot/test/test_web.py:
2686 add test-case-name at the top of a whole set of files
2688 * buildbot/status/builder.py:
2689 keep order of addition when getting builder names
2690 * buildbot/status/words.py:
2691 * buildbot/test/test_run.py:
2692 add test for getBuilderNames
2694 * buildbot/process/base.py:
2695 * buildbot/process/step.py:
2696 * buildbot/status/builder.py:
2697 * buildbot/status/html.py:
2698 make buildbot css-able
2699 replace the color code for purple with purple, don't understand
2700 why it wasn't purple to start with
2702 * buildbot/status/words.py:
2703 ok, so it doesn't look like BuilderStatus.remote is still valid.
2704 Use what waterfall uses instead.
2706 * buildbot/interfaces.py:
2707 * buildbot/status/builder.py:
2708 * buildbot/status/html.py:
2709 * buildbot/status/mail.py:
2710 * buildbot/status/words.py:
2711 * buildbot/test/test_run.py:
2712 use categories everywhere and make it be a list. More sensible
2713 for the future. Also make words actually respect this in
2716 * buildbot/interfaces.py:
2717 add category argument to getBuilderNames
2718 * buildbot/process/builder.py:
2719 * buildbot/status/builder.py:
2720 * buildbot/status/html.py:
2721 * buildbot/status/mail.py:
2722 * buildbot/status/words.py:
2723 * buildbot/test/test_run.py:
2724 move from specifying builders by name to specifying the category
2726 * buildbot/status/html.py:
2727 * buildbot/status/words.py:
2728 add "builders=" to __init__ of status clients so they can
2729 limit themselves to the given list of builders to report on
2731 * buildbot/status/html.py: set the title to the product name
2733 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
2735 * buildbot/interfaces.py:
2736 * buildbot/status/builder.py:
2737 more documentation. Hm, not sure if ChangeLog entries make sense
2740 2005-04-23 Brian Warner <warner@lothar.com>
2742 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
2744 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
2746 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
2747 the sub-commands that log buildmaster status to stdout and to a
2748 GUI window, respectively.
2750 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
2751 functionality is working again, but all the step-status and ETA
2752 stuff is missing. Commented out a lot of code pending more
2755 * buildbot/status/client.py: make sure that IRemote(None) is None
2757 * buildbot/changes/changes.py: import defer, oops
2758 (ChangeMaster): remove the .sources list, rely upon the fact that
2759 MultiServices can be treated as sequences of their children. This
2760 cleans up the add/remove ChangeSource routines a lot, as we keep
2761 exactly one list of the current sources instead of three.
2763 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
2764 up an empty ChangeMaster at init time.
2765 (BuildMaster.loadChanges): if there are changes to be had from
2766 disk, replace self.change_svc with the new ones. If not, keep
2767 using the empty ChangeMaster set up in __init__.
2768 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
2769 instead of a separate list, makes the code a bit cleaner.
2770 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
2771 (ConfigTest.testSources): same, also wait for loadConfig to finish.
2772 Extend the test to make sure we can get rid of the sources when
2775 2005-04-22 Brian Warner <warner@lothar.com>
2777 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
2778 and info/host files when making the slave directory
2780 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
2781 whendone= argument, just return the Deferred and let the caller do
2782 what they want with it.
2783 (Disconnect.testBuild1): wait for shutdownSlave
2784 (Basedir.testChangeBuilddir): new test to make sure changes to the
2785 builddir actually get propagated to the slave
2787 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
2788 explicit method, rather than passing the builddir in __init__ .
2789 Make sure to update self.basedir too, this was broken before.
2790 (Bot.remote_setBuilderList): use b.setBuilddir for both new
2791 builders and for ones that have just had their builddir changed.
2792 (BotFactory): add a class-level .perspective attribute, so
2793 BuildSlave.waitUntilDisconnected won't get upset when the
2794 connection hasn't yet been established
2795 (BuildSlave.__init__): keep track of the bot.Bot instance, so
2796 tests can reach through it to inspect the SlaveBuilders
2798 * buildbot/process/base.py (Build.buildException): explain the
2799 log.err with a log.msg
2800 * buildbot/process/builder.py (Builder.startBuild): same
2801 (Builder._startBuildFailed): improve error message
2803 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
2804 occurred because we lost the brand-new connection, retry instead
2805 of giving up. If not, it's probably an authorization failure, and
2806 it makes sense to stop trying. Make sure we log.msg the reason
2807 that we're log.err'ing the failure, otherwise test failures are
2808 really hard to figure out.
2810 * buildbot/master.py: change loadConfig() to return a Deferred
2811 that doesn't fire until the change has been fully implemented.
2812 This means any connected slaves have been updated with the new
2813 builddir. This change makes it easier to test the code which
2814 actually implements this builddir-updating.
2815 (BotPerspective.addBuilder): return Deferred
2816 (BotPerspective.removeBuilder): same
2817 (BotPerspective.attached): same
2818 (BotPerspective._attached): same. finish with remote_print before
2819 starting the getSlaveInfo, instead of doing them in parallel
2820 (BotPerspective.list_done): same
2821 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
2822 actually calling slave.disconnect()
2823 (BotMaster.addBuilder): same
2824 (BotMaster.removeBuilder): same
2825 (BuildMaster.loadConfig): same
2826 (BuildMaster.loadConfig_Slaves): same
2827 (BuildMaster.loadConfig_Sources): same
2828 (BuildMaster.loadConfig_Builders): same
2829 (BuildMaster.loadConfig_status): same
2831 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
2832 a Deferred that fires when the source is finally removed
2834 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
2835 the previous tree on win32, where we have to do it synchronously,
2836 make sure we return a Deferred anyway.
2837 (SourceBase.doCopy): same
2839 * buildbot/scripts/runner.py (statusgui): use the text client for
2840 now, while I rewrite the Gtk one
2841 * buildbot/clients/base.py: strip out old code, leaving just the
2842 basic print-message-on-event functionality. I also remove the
2843 ReconnectingPBClientFactory, but it does at least quit when it
2844 loses the connection instead of going silent
2846 2005-04-21 Brian Warner <warner@lothar.com>
2848 * Makefile: minor tweaks
2850 * NEWS: point out deprecation warnings, new features for
2853 * buildbot/master.py (BuildMaster.loadConfig): emit
2854 DeprecationWarnings for Builders defined with tuples. Rearrange
2855 code to facility removal of deprecated configuration keys in the
2858 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
2859 'buildbot' command to put a little Makefile in the target that
2860 helps you re-create the buildbot.tap file, start or stop the
2861 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
2862 all the files 0600, since they contain passwords.
2863 (start): if there is a Makefile, and /usr/bin/make exists, use
2864 'make start' in preference to a raw twistd command. This lets
2865 slave admins put things like PYTHONPATH variables in their
2866 Makefiles and have them still work when the slave is started with
2867 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
2868 be nice to first try the 'make' command and only fall back to
2869 twistd if it fails. TODO: the Makefile's "start" command does not
2870 add the --reactor=win32 argument when running under windows.
2871 (Options.debugclient, Options.statusgui): add sub-commands to launch
2872 the debug client (formerly in contrib/debugclient.py) and the
2873 Gtk status application (currently broken)
2874 * buildbot/clients/debug.py: move from contrib/debugclient.py
2875 * buildbot/clients/debug.glade: same
2877 * buildbot/test/test_trial.py: remove it. This requires some
2878 functionality out of Twisted that isn't there yet, and until then
2879 having it around just confuses things.
2881 * buildbot/test/test_slavecommand.py (Shell): test both with and
2882 without PTYs, and make sure that command output is properly
2883 interleaved in the with-PTY case. I think the without-PTY test
2884 should pass on windows, where we never use PTYs anyway.
2886 2005-04-20 Brian Warner <warner@lothar.com>
2888 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
2890 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
2892 * NEWS: start creating entries for the next release
2894 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
2896 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
2897 (WebTest.test_webPathname): same
2898 (WebTest.test_webPathname_port): same
2899 (WebTest.test_waterfall): use the default favicon rather than
2900 rooting around the filesystem for it. Open the expected-icon file
2901 in binary mode, to make win32 tests happier (thanks to Nick Trout
2903 * buildbot/status/html.py (buildbot_icon): win32 portability
2905 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
2906 win32-compatibility fixes from Nick Trout, the "file not found" message
2907 is different under windows
2908 (FakeSlaveBuilder.__init__): clean up setup a bit
2909 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
2911 2005-04-19 Brian Warner <warner@lothar.com>
2913 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
2914 skip-if-repositories-are-unavailable test to not kill the trial
2915 that comes with Twisted-1.3.0
2917 * setup.py: install buildbot.png icon file when installing code
2919 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
2920 environment used by the command, at least on the child side.
2922 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
2923 this method needs to be added and implemented because it gets
2924 called under heavy load. I don't quite understand the
2925 producer/consumer API enough to write it.
2926 (StatusResource.getChild): add a resource for /favicon.ico
2927 (Waterfall.__init__): add favicon= argument
2928 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
2929 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
2930 (WebTest.test_webPathname): same
2931 (WebTest.test_webPathname_port): same
2932 * docs/config.xhtml: mention favicon=
2933 * buildbot/buildbot.png: add a default icon, dorky as it is
2935 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
2937 * buildbot/master.py:
2938 * buildbot/process/base.py:
2939 * buildbot/process/builder.py:
2940 * buildbot/process/interlock.py:
2941 * buildbot/status/builder.py:
2942 * buildbot/status/html.py:
2943 * buildbot/status/mail.py:
2944 * buildbot/status/words.py:
2945 new documentation while digging through the code
2947 2005-04-17 Brian Warner <warner@lothar.com>
2949 * general: try to fix file modes on all .py files: a+r, a-x,
2950 but let buildbot/clients/*.py be +x since they're tools
2952 * docs/epyrun (addMod): when an import fails, say why
2954 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
2956 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2958 * buildbot/process/base.py:
2959 * buildbot/process/builder.py:
2960 * buildbot/status/builder.py:
2961 new documentation while digging through the code
2963 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2965 * buildbot/changes/changes.py:
2966 * buildbot/changes/p4poller.py:
2967 * buildbot/interfaces.py:
2968 * buildbot/process/base.py:
2969 * buildbot/process/builder.py:
2970 * buildbot/process/step.py:
2971 * buildbot/process/step_twisted.py:
2972 * buildbot/slave/bot.py:
2973 * buildbot/slave/commands.py:
2974 * buildbot/status/builder.py:
2975 fix all docstrings to make epydoc happy. In the process of fixing
2976 some, I also moved pieces of docs, and removed some deprecated
2979 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
2981 * buildbot/process/builder.py:
2982 * buildbot/process/interlock.py:
2983 * buildbot/process/process_twisted.py:
2984 * buildbot/process/step.py:
2985 BuildProcess -> Build, as it looks like that's what happened
2986 * buildbot/process/base.py:
2987 * buildbot/process/factory.py:
2990 2005-04-17 Brian Warner <warner@lothar.com>
2992 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2993 update compile command to accomodate the Twisted split.. now
2994 instead of './setup.py build_ext -i', you do './setup.py all
2995 build_ext -i', to run build_ext over all sub-projects.
2996 (FullTwistedBuildFactory): same
2997 (TwistedReactorsBuildFactory): same
2999 * buildbot/status/html.py (TextLog.finished): null out self.req
3000 when we're done, otherwise the reference cycle of TextLog to .req
3001 to .notifications to a Deferred to TextLog.stop keeps them from
3002 being collected, and consumes a huge (610MB on pyramid at last
3003 check) amount of memory.
3005 2005-04-11 Brian Warner <warner@lothar.com>
3007 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
3008 normalize the VC-repository location.. makes SVN happier with
3009 certain test environments.
3011 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
3012 RemoteShellCommand gets its own .env dictionary, so that code in
3013 start() doesn't mutate the original. I think this should fix the
3014 step_twisted.Trial problem where multiple identical components
3015 kept getting added to PYTHONPATH= over and over again.
3017 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
3018 adding epydoc-format docstrings to many classes. Thanks to Thomas
3019 Vander Stichele for the patches.
3020 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
3021 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
3022 * buildbot/slave/bot.py, commands.py, registry.py: same
3024 2005-04-05 Brian Warner <warner@lothar.com>
3026 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
3027 preserve timestamps, helps incremental builds of large trees.
3028 Patch from Rene Rivera.
3030 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
3031 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
3034 2005-04-03 Brian Warner <warner@lothar.com>
3036 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
3037 with one dict, apparently exec has some scoping bugs when used
3038 with both global/local dicts. Thanks to Nathaniel Smith for the
3041 2005-04-02 Brian Warner <warner@lothar.com>
3043 * buildbot/process/step_twisted.py (countFailedTests): the new
3044 trial in Twisted-2.0 emits a slightly different status line than
3045 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
3046 mistakenly think the test count is unparseable.
3047 (Trial.start): note that for some reason each build causes another
3048 copy of self.testpath to be prepended to PYTHONPATH. This needs to
3049 be fixed but I'm not sure quite where the problem is.
3051 2005-04-01 Brian Warner <warner@lothar.com>
3053 * buildbot/test/test_run.py (Run.testMaster): change some uses of
3054 deferredResult to avoid hangs/warnings under twisted-2.0
3055 (RunMixin.tearDown): same
3056 (RunMixin.shutdownSlave): same
3057 (Disconnect.testIdle1): same
3058 (Disconnect.testBuild2): same: wait one second after the build
3059 finishes for test to really be done.. this should be cleaned up to
3060 avoid wasting that second. Builder.detach uses a callLater(0),
3061 either that should be done in-line (something else needed that
3062 behavior), or it should return a Deferred that fires when the
3063 builder is really offline.
3064 (Disconnect.testBuild3): same
3065 (Disconnect.testDisappear): same
3067 * buildbot/test/test_web.py: rearrange server-setup and teardown
3068 code to remove unclean-reactor warnings from twisted-2.0
3070 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
3071 so the tests don't hang under twisted-2.0
3073 2005-03-31 Brian Warner <warner@lothar.com>
3075 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
3076 caused a warning each time the master changed our set of builders
3078 * buildbot/status/builder.py (BuildStatus.saveYourself): under
3079 w32, don't unlink the file unless it already exists. Thanks to
3080 Baptiste Lepilleur for the catch.
3081 (BuilderStatus.saveYourself): same
3083 2005-02-01 Brian Warner <warner@lothar.com>
3085 * buildbot/status/html.py (TextLog.getChild): use a /text child
3086 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
3087 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
3088 logfile as text/plain (no markup, no headers). This replaces the
3089 previous scheme (which used an ?text=1 argument), and gets us back
3090 to a relative link (which works better when the buildbot lives
3091 behind another web server, such as Apache configured as a reverse
3092 proxy). Thanks to Gerald Combs for spotting the problem.
3094 * buildbot/__init__.py (version): bump to 0.6.2+ while between
3097 2004-12-13 Brian Warner <warner@lothar.com>
3099 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
3101 * debian/changelog: update for 0.6.2
3102 * NEWS: finalize for 0.6.2
3104 2004-12-11 Brian Warner <warner@lothar.com>
3106 * NEWS: bring it up to date
3108 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
3109 detection code. Require some sign of life from the buildmaster
3110 every BotFactory.keepaliveInterval seconds. Provoke this
3111 indication at BotFactory.keepaliveTimeout seconds before the
3112 deadline by sending a keepalive request. We don't actually care if
3113 that request is answered in a timely fashion, what we care about
3114 is that .activity() is called before the deadline. .activity() is
3115 triggered by any PB message from the master (including an ack to
3116 one of the slave's status-update messages). With this new scheme,
3117 large status messages over slow pipes are OK, as long as any given
3118 message can be sent (and thus acked) within .keepaliveTimeout
3119 seconds (which defaults to 30).
3120 (SlaveBuilder.remote_startCommand): record activity
3121 (SlaveBuilder.ackUpdate): same
3122 (SlaveBuilder.ackComplete): same
3123 (BotFactory.gotPerspective): same
3124 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
3126 2004-12-09 Brian Warner <warner@lothar.com>
3128 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
3131 * buildbot/process/step_twisted.py (Trial._commandComplete):
3132 update self.cmd when we start the 'cat test.log' transfer. Without
3133 this, we cannot interrupt the correct RemoteCommand when we lose
3136 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
3137 trying to tell the slave to stop the command if we're already
3138 inactive, or if we no longer have a .remote
3140 * buildbot/process/builder.py (Builder._detached): don't let an
3141 exception in currentBuild.stopBuild() prevent the builder from
3142 being marked offline
3144 2004-12-07 Brian Warner <warner@lothar.com>
3146 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
3147 KeyError that happens when you ask for a non-existent Builder, and
3148 translate it into a UsageError.
3150 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
3151 losing the slave in the middle of a remote step is handled too
3153 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
3154 be a Failure, so be sure to stringify it before using it as the
3155 contents of the 'interrupt' logfile
3156 (RemoteCommand.interrupt): use stringified 'why' in
3157 remote_interruptCommand too, just in case
3159 2004-12-06 Brian Warner <warner@lothar.com>
3161 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
3162 instead of 'tla update', which is more efficient in case we've
3163 missed a couple of patches since the last update.
3165 * debian/changelog: update for previous (0.6.1) release. Obviously
3166 this needs to be handled better.
3168 2004-12-05 Brian Warner <warner@lothar.com>
3170 * NEWS: update for stuff since last release
3172 * buildbot/master.py (DebugPerspective.attached): return 'self', to
3173 match the maybeDeferred change in Dispatcher.requestAvatar
3174 * buildbot/changes/pb.py (ChangePerspective.attached): same
3175 * buildbot/status/client.py (StatusClientPerspective.attached): same
3176 * buildbot/process/builder.py (Builder._attached3): same
3177 * buildbot/pbutil.py (NewCredPerspective.attached): same
3179 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
3180 the date to the top-most box, if it is not the same as today's
3183 * docs/slave.xhtml: provide a buildslave setup checklist
3185 * docs/source.xhtml (Arch): correct terminology
3187 2004-12-04 Brian Warner <warner@lothar.com>
3189 * buildbot/test/test_slavecommand.py: use sys.executable instead
3190 of hard-coding 'python' for child commands, might help portability
3192 * docs/examples/twisted_master.cfg: update to current usage
3194 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
3195 'stop build' command to the IRC bot
3197 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
3198 message that broke PBChangeSource
3200 * buildbot/slave/bot.py: clean up shutdown/lose-master code
3201 (SlaveBuilder): make some attributes class-level, remove the old
3202 "update queue" which existed to support resuming a build after the
3203 master connection was lost. Try to reimplement that feature later.
3204 (SlaveBuilder.stopCommand): clear self.command when the
3205 SlaveCommand finishes, so that we don't try to kill a leftover one
3207 (SlaveBuilder.commandComplete): same, merge with commandFailed and
3210 * buildbot/slave/commands.py (SourceBase): set self.command for
3211 all VC commands, so they can be interrupted.
3213 2004-12-03 Brian Warner <warner@lothar.com>
3215 * buildbot/master.py: clean up slave-handling code, to handle
3216 slave-disconnect and multiple-connect better
3217 (BotPerspective): make these long-lasting, exactly one per bot
3218 listed in the config file.
3219 (BotPerspective.attached): if a slave connects while an existing
3220 one appears to still be connected, disconnect the old one first.
3221 (BotPerspective.disconnect): new method to forcibly disconnect a
3222 buildslave. Use some hacks to empty the transmit buffer quickly to
3223 avoid the long (20-min?) TCP timeout that could occur if the old
3224 slave has dropped off the net.
3225 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
3226 own their own SlaveStatus objects. Remove .attached/.detached, add
3227 .addSlave/.removeSlave, treat slaves like Builders (config file
3228 parsing sends deltas to the BotMaster). Inform the slave
3229 instances, i.e. the BotPerspective, about addBuilder and
3231 (BotMaster.getPerspective): turns into a single dict lookup
3232 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
3233 which gives BotPerspective.attached a chance to disconnect the old
3235 (BuildMaster.loadConfig): add code (disabled) to validate that all
3236 builders use known slaves (listed in c['bots']). The check won't
3237 work with tuple-specified builders, which are deprecated but not
3238 yet invalid, so the check is disabled for now.
3239 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
3240 routine, do the add/changed/removed dance with them like we do
3242 (BuildMaster.loadConfig_Sources): move source-config into a
3243 separate routine too
3245 * buildbot/status/builder.py (Status.getSlave): get the
3246 SlaveStatus object from the BotPerspective, not the BotMaster.
3248 * buildbot/test/test_run.py: bunch of new tests for losing the
3249 buildslave at various points in the build, handling a slave that
3250 connects multiple times, and making sure we can interrupt a
3253 * buildbot/slave/bot.py (BuildSlave): make it possible to use
3254 something other than 'Bot' for the Bot object, to make certain
3255 test cases easier to write.
3256 (BuildSlave.waitUntilDisconnected): utility method for testing
3258 2004-11-30 Brian Warner <warner@lothar.com>
3260 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
3262 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
3263 argument, return a Deferred that always fires with True or False.
3264 I don't use an errback to indicate 'ping failed' so that callers
3265 are free to ignore the deferred without causing spurious errors in
3267 * buildbot/process/builder.py (BuilderControl.ping): implement it
3269 * buildbot/test/test_run.py (Status.testDisappear): test ping
3270 (Status.disappearSlave): fix it
3272 2004-11-30 Brian Warner <warner@lothar.com>
3274 * buildbot/interfaces.py (IBuildControl): add .stopBuild
3275 (IBuilderControl): add .getBuild(num), only works for the current
3276 build, of course, although it might be interesting to offer
3277 something for builds in the .waiting or .interlocked state.
3279 * buildbot/process/base.py (Build): have .stopBuild just do the
3280 interrupt, then let the build die by itself.
3281 (BuildControl): add .stopBuild, and add a point-event named
3282 'interrupt' just after the build so status viewers can tell that
3284 (BuilderControl): add .getBuild
3286 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
3287 stops when you kill it, good for testing
3288 (ShellCommand.interrupt): add a logfile named 'interrupt' which
3289 contains the 'reason' text.
3291 * buildbot/status/html.py: Add Stop Build button, if the build can
3292 still be stopped. Send a Redirect (to the top page) one second
3293 later, hopefully long enough for the interrupt to have an effect.
3294 Move make_row() up to top-level to share it between Stop Build and
3297 * buildbot/slave/commands.py: only kill the child process once
3299 * buildbot/test/test_run.py: add testInterrupt
3301 2004-11-29 Brian Warner <warner@lothar.com>
3303 * buildbot/process/base.py: Refactor command interruption. The
3304 Build is now responsible for noticing that the slave has gone
3305 away: Build.lostRemote() interrupts the current step and makes
3306 sure that no further ones will be started.
3308 * buildbot/process/builder.py: When the initial remote_startBuild
3309 message fails, log it: this usually indicates that the slave has
3310 gone away, but we don't really start paying attention until they
3311 fail to respond to the first step's command.
3313 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
3314 slave disconnect. Now sports a new interrupt() method. Error
3315 handling was simplified a lot by chaining deferreds, so
3316 remoteFailed/remoteComplete were merged into a single
3317 remoteComplete method (which can now get a Failure object).
3318 Likewise failed/finished were merged into just _finished.
3319 (BuildStep): Add interrupt(why) method, and if why is a
3320 ConnectionLost Failure then the step is failed with some useful
3323 * buildbot/slave/bot.py: stop the current command when the remote
3324 Step reference is lost, and when the slave is shut down.
3325 (Bot): make it a MultiService, so it can have children. Use
3326 stopService to tell when the slave is shutting down.
3327 (SlaveBuilder): make it a Service, and a child of the Bot. Add
3328 remote_interruptCommand (which asks the current SlaveCommand to
3329 stop but allows it to keep emitting status messages), and
3330 stopCommand (which tells it to shut up and die).
3332 * buildbot/slave/commands.py: make commands interruptible
3333 (ShellCommand.kill): factor out os.kill logic
3334 (Command): factor out setup()
3335 (Command.sendStatus): don't send status if .running is false, this
3336 happens when the command has been halted.
3337 (Command.interrupt): new method, used to tell the command to die
3338 (SlaveShellCommand): implement .interrupt
3339 (DummyCommand): implement .interrupt
3340 (SourceBase, etc): factor out setup(), don't continue substeps if
3343 * buildbot/status/builder.py: fix all waitUntilFinished() methods
3344 so they can be called after finishing
3346 * buildbot/test/test_run.py: new tests for disconnect behavior,
3347 refactor slave-shutdown routines, add different kinds of
3350 2004-11-27 Brian Warner <warner@lothar.com>
3352 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
3353 method to express ETA time like "2m45s" instead of "165 seconds"
3355 2004-11-24 Brian Warner <warner@lothar.com>
3357 * buildbot/test/test_vc.py (VC.testArch): unregister the test
3358 archive after the test completes, to avoid cluttering the user's
3359 'tla archives' listing with a bogus entry. Arch doesn't happen to
3360 provide any way to override the use of ~/.arch-params/, so there
3361 isn't a convenient way to avoid touching the setup of the user who
3363 (VC_HTTP.testArchHTTP): same
3365 2004-11-23 Brian Warner <warner@lothar.com>
3367 * buildbot/status/html.py (TextLog): split render() up into
3368 render_HEAD and render_GET. Use a Producer when sending log
3369 chunks, to reduce memory requirements and avoid sending huge
3370 non-Banana-able strings over web.distrib connections. Requires
3371 peeking under the covers of IStatusLog.
3372 (TextLog.resumeProducing): fix the "as text" link, handle client
3373 disconnects that occur while we're still sending old chunks.
3375 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
3376 use defer.succeed, not the non-existent defer.success
3377 (LogFile.waitUntilFinished): same
3378 (LogFile.subscribe): don't add watchers to a finished logfile
3380 * buildbot/__init__.py (version): bump to 0.6.1+ while between
3383 2004-11-23 Brian Warner <warner@lothar.com>
3385 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
3387 2004-11-23 Brian Warner <warner@lothar.com>
3389 * NEWS: update for the 0.6.1 release
3390 * MANIFEST.in: add new files
3392 * README (INSTALLATION): explain how to enable the extra VC tests
3394 * buildbot/status/builder.py (LogFile): add .runEntries at the class
3395 level to, so old pickled builds can be displayed ok
3397 2004-11-22 Brian Warner <warner@lothar.com>
3399 * NEWS: summarize updates since last release
3401 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
3402 Yoz Grahame. Closes SF#1050138.
3404 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
3407 * buildbot/process/step_twisted.py (Trial): update docs a bit
3409 * docs/factories.xhtml: fix Trial factory docs to match reality.
3412 * buildbot/process/factory.py (Trial.__init__): add args for
3413 randomly= and recurse=, making them available to instantiators
3414 instead of only to subclassers. Closes: SF#1049759.
3416 2004-11-15 Brian Warner <warner@lothar.com>
3418 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
3419 try to teach the Quick factory to use multiple versions of python
3421 2004-11-12 Brian Warner <warner@lothar.com>
3423 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
3424 safer w32-compatible approach, and only use it on windows
3425 (BuildStatus.saveYourself): same
3427 2004-11-11 Brian Warner <warner@lothar.com>
3429 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
3430 it: one string merge per chunk. There are now separate .entries
3431 and .runEntries lists: when enumerating over all chunks, make sure
3433 * buildbot/test/test_status.py (Log): more tests
3435 * buildbot/status/builder.py (LogFile.addEntry): Merge string
3436 chunks together, up to 10kb per chunk. This ought to cut down on
3437 the CPU-burning overhead of large log files. Thanks to Alexander
3438 Staubo for spotting the problem.
3439 * buildbot/test/test_status.py (Log): tests for same
3441 2004-11-10 Brian Warner <warner@lothar.com>
3443 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
3444 header to outbound mail
3445 * buildbot/test/test_status.py (Mail.testBuild1): test for same
3447 2004-11-08 Brian Warner <warner@lothar.com>
3449 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
3450 can't do os.rename() onto an existing file, so catch the exception
3451 and unlink the target file first. This introduces a slight window
3452 where the existing file could be lost, but the main failure case
3453 (disk full) should still be handled safely.
3454 (BuildStatus.saveYourself): same
3456 * buildbot/changes/pb.py (ChangePerspective): use a configurable
3457 separator character instead of os.sep, because the filenames being
3458 split here are coming from the VC system, which can have a
3459 different pathname convention than the local host. This should
3460 help a buildmaster running on windows that uses a CVS repository
3461 which runs under unix.
3462 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
3464 * buildbot/process/step_twisted.py (Trial.createSummary): survive
3465 when there are no test failures to be parsed
3467 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
3468 instead of the unix-specific os.system("cp"), thanks to Elliot
3469 Murphy for this and the other buildbot-vs-windows catches.
3470 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
3472 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
3473 echo the command as it is run
3475 * setup.py: install sample.mk too, not just sample.cfg
3476 (scripts): install contrib/windows/buildbot.bat on windows
3478 2004-11-07 Brian Warner <warner@lothar.com>
3480 * buildbot/process/builder.py (Builder._detached): clear the
3481 self.currentBuild reference, otherwise the next build will be
3482 skipped because we think the Builder is already in use.
3484 * docs/examples/twisted_master.cfg: update to match current usage
3485 on the Twisted buildbot
3487 2004-10-29 Brian Warner <warner@lothar.com>
3489 * buildbot/status/mail.py (MailNotifier): fix typo in docs
3491 2004-10-28 Brian Warner <warner@lothar.com>
3493 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
3494 have separate doVCUpdate/doVCFull methods. Catch an update failure
3495 and respond by clobbering the source directory and re-trying. This
3496 will handle local changes (like replacing a file with a directory)
3497 that will cause CVS and SVN updates to fail.
3498 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
3500 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
3503 2004-10-19 Brian Warner <warner@lothar.com>
3505 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
3507 * buildbot/status/html.py (StatusResourceTestResults): display any
3508 TestResults that the Build might have
3509 (StatusResourceTestResult): and the logs for each TestResult
3510 (StatusResourceBuild): add link from the per-build page
3512 2004-10-15 Brian Warner <warner@lothar.com>
3514 * buildbot/process/step_twisted.py (Trial.createSummary): parse
3515 the 'problems' portion of stdout, add TestResults to our build
3516 * buildbot/test/test_twisted.py (Parse.testParse): test it
3518 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
3519 to retrieve a dict of accumulated test results
3520 (ITestResult): define what a single test result can do
3521 * buildbot/status/builder.py (TestResult): implement ITestResult
3522 (BuildStatus.getTestResults): retrieve dict of TestResults
3523 (BuildStatus.addTestResult): add TestResults
3524 * buildbot/test/test_status.py (Results.testAddResults): test it
3526 2004-10-14 Brian Warner <warner@lothar.com>
3528 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
3529 instead of os.system("rm -rf") for win32 portability
3531 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
3532 SignalMixin instead of starting/stopping the reactor, which is
3533 likely to cause problems with other tests
3535 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
3536 self.copyComplete() call. Yoz Grahame makes the catch.
3538 * contrib/windows/buildbot.bat: helper script to deal with path
3539 issues. Thanks to Yoz Grahame.
3541 * buildbot/master.py (BuildMaster.startService): don't register a
3542 SIGHUP handler if the signal module has no SIGHUP attribute.
3543 Apparently win32 does this.
3545 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
3547 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
3548 test if the reactor can't offer UNIX sockets
3550 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
3551 error introduced in the last commit. We really need that
3554 2004-10-12 Brian Warner <warner@lothar.com>
3556 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
3557 when describing a maildir source. Thanks to Stephen Davis.
3559 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
3562 * buildbot/scripts/runner.py (createMaster): install Makefile too
3563 (start): add --no_save to 'start' command
3564 * buildbot/scripts/sample.mk: simple convenience Makefile with
3565 start/stop/reload targets
3567 * buildbot/__init__.py (version): bump to 0.6.0+ while between
3570 2004-09-30 Brian Warner <warner@lothar.com>
3572 * setup.py: Releasing buildbot-0.6.0
3574 2004-09-30 Brian Warner <warner@lothar.com>
3576 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
3577 test_trial.py from the source tarball until support is complete.
3579 * NEWS: update for 0.6.0 release
3580 * buildbot/__init__.py (version): same
3583 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
3584 'source' command to tell users where to get the Buildbot source
3586 * docs/examples/*.cfg: update to modern standards
3588 * NEWS: update for release
3590 * buildbot/scripts/runner.py (createMaster): remove the
3591 -shutdown.tap stuff now that it isn't necessary
3593 (start): launch buildbot.tap, not buildbot-shutdown.tap
3596 * buildbot/status/mail.py (Domain): shorten class name
3597 (MailNotifier): if lookup= is a string, pass it to Domain()
3598 * buildbot/test/test_status.py (Mail.testBuild1): new class name
3599 (Mail.testBuild2): test the string-to-Domain shortcut
3600 (Mail.testMail): fix test
3603 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
3606 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
3607 more attributes on load
3608 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
3609 to accomodate the whole waterfall page at once, and the thrashing
3610 results in a lot of unnecessary loads
3611 (BuildStatus.saveYourself): use binary pickles, not fluffy text
3612 (BuilderStatus.saveYourself): same
3613 (BuilderStatus.eventGenerator): stop generating on the first missing
3614 build. We assume that saved builds are deleted oldest-first.
3615 (BuildStepStatus.__getstate__): .progress might not exist
3617 * buildbot/changes/changes.py (ChangeMaster): make it
3618 serializable, in $masterdir/changes.pck
3619 (ChangeMaster.stopService): save on shutdown
3620 * buildbot/master.py (BuildMaster.loadChanges): load at startup
3621 * buildbot/test/test_config.py: load Changes before config file
3624 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
3625 "Oh my god, you killed the command" header on a separate line
3627 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
3628 skip over corrupted build pickles
3629 (BuilderStatus.getFullBuildByNumber): same
3630 (BuilderStatus.eventGenerator): skip over unavailable builds
3631 (BuildStatus.saveYourself): save builds to a .tmp file first, then
3632 do an atomic rename. This prevents a corrupted pickle when some
3633 internal serialization error occurs.
3634 (BuilderStatus.saveYourself): same
3636 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
3637 the timeout for shell commands, it got lost somehow
3639 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
3640 run out of build steps, return the rest of the builder events
3642 * buildbot/interfaces.py (IBuilderControl.ping): add method
3644 * buildbot/process/builder.py (BuilderControl.ping): move
3645 slave-ping to BuilderControl, and fix the failure case in the
3646 process (Event.finish() is the verb, Event.finished is the noun).
3648 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
3649 through the BuilderControl instead of the BuilderStatus
3650 (EventBox): add adapter for builder.Event, allowing builder events to
3651 be displayed in the waterfall display
3653 * buildbot/master.py (BotMaster.stopService): add a 'master
3654 shutdown' event to the builder's log
3655 (BuildMaster.startService): and a 'master started' on startup
3657 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
3658 builder events into the BuildStep event stream
3659 (Status.builderAdded): add a 'builder created' event
3662 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
3663 command to announce the completion of a running build
3664 (IrcStatusBot.command_FORCE): announce when the build finishes
3666 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
3667 don't evict unfinished builds from the cache: they must stay in
3668 the full-cache until their logfiles have stopped changing. Make
3669 sure the eviction loop terminates if an unfinished build was hit.
3670 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
3671 This lets exceptions be dumped in an email status message. Really
3672 we need LogFiles which contain both text and HTML, instead of two
3674 (BuildStatus.__getstate__): handle self.finished=False
3675 (Status.builderAdded): if the pickle is corrupted, abandon the
3676 history and create a new BuilderStatus object.
3678 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
3679 self.progress attribute, helped one test which doesn't fully set
3680 up the Build object.
3682 * buildbot/interfaces.py (IStatusLogStub): split out some of the
3683 IStatusLog methods into an Interface that is implemented by "stub"
3684 logs, for which all the actual text chunks are on disk (in the
3685 pickled Build instance). To show the log contents, you must first
3686 adapt the stub log to a full IStatusLog object.
3688 * buildbot/status/builder.py (LogFileStub): create separate stub
3689 log objects, which can be upgraded to a real one if necessary.
3690 (LogFile): make them persistable, and let them stubify themselves
3692 (BuildStepStatus): same
3694 (BuildStatus.saveYourself): save the whole build out to disk
3695 (BuilderStatus): make it persistable
3696 (BuilderStatus.saveYourself): save the builder to disk
3697 (BuilderStatus.addFullBuildToCache): implement two caches which
3698 hold Build objects: a small one which holds full Builds, and a
3699 larger one which holds "stubbed" Builds (ones with their LogFiles
3700 turned into LogFileStubs). This reduces memory usage by the
3701 buildmaster by not keeping more than a few (default is 2) whole
3702 build logs in RAM all the time.
3703 (BuilderStatus.getBuild): rewrite to pull from disk (through the
3705 (BuilderStatus.eventGenerator): rewrite since .builds went away
3706 (BuilderStatus.buildStarted): remove the .builds array. Add the
3707 build to the "full" cache when it starts.
3708 (BuilderStatus._buildFinished): save the build to disk when it
3710 (Status): give it a basedir (same as the BuildMaster's basedir)
3711 where the builder pickles can be saved
3712 (Status.builderAdded): create the BuilderStatus ourselves, by
3713 loading a pickle from disk (or creating a new instance if there
3714 was none on disk). Return the BuilderStatus so the master can glue
3715 it into the new Builder object.
3717 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
3718 all BuilderStatuses to save themselves out to disk. This is in
3719 lieu of saving anything important in the main Application pickle
3720 (the -shutdown.tap file).
3721 (BuildMaster.__init__): give Status() a basedir for its files
3722 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
3723 to get the BuilderStatus, then give it to the Builder (instead of
3724 doing it the other way around). It's ok if the status announces
3725 the new Builder before it's really ready, as the outside world can
3726 only see the BuilderStatus object anyway (and it is ready before
3727 builderAdded returns). Use the builder's "builddir" (which
3728 normally specifies where the slave will run the builder) as the
3729 master's basedir (for saving serialized builds).
3731 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
3732 coerce the logfile to IStatusLog before trying to get the text
3733 chunks out of it. This will pull the full (non-stubified) Build in
3734 from disk if necessary.
3735 (TextLog): fix the adapter registration
3737 * buildbot/test/test_control.py (Force.setUp): create the basedir
3738 * buildbot/test/test_web.py: same
3739 * buildbot/test/test_vc.py (SetupMixin.setUp): same
3740 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
3741 * buildbot/test/test_run.py (Run.testMaster): same
3742 (Status.setUp): same
3744 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
3746 * buildbot/status/html.py (Waterfall.__init__): store actual
3747 allowForce flag passed in rather than using True for everyone;
3748 make sure setting it to False doesn't cause a NameError
3750 (StatusResourceBuilder.__init__) add the builder name to the page
3752 (StatusResourceBuilder.body) move HTML generation for a name/value
3753 row into a helper method (StatusResourceBuilder.make_row); only
3754 generate the "Force Build" form if allowForce was True and the
3755 slave is connected. Use class attributes in the generated HTML to
3756 spread a little CSS-joy.
3758 2004-09-28 Brian Warner <warner@lothar.com>
3760 * buildbot/process/step_twisted.py (Trial.createSummary): fix
3761 warning-scanner to not ignore things like
3762 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
3764 * buildbot/status/html.py (StatusResource.control): add some
3765 class-level values for .control in an attempt to make upgrading
3768 * buildbot/util.py (ComparableMixin): survive missing attributes,
3769 such as when a class is modified and we're comparing old instances
3772 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
3773 failure handling, remove a redundant try/except block. Don't
3774 return the full traceback to the IRC channel.
3775 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
3776 error messages. Get ETA properly.
3778 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
3779 the reason, since (at least) IRC message will have <> in them.
3780 (StatusResourceBuilder.__init__): take an IBuilderControl
3781 (StatusResourceBuilder.force): use the IBuilderControl we get in
3782 the constructor instead of trying to make our own. Catch the
3783 new exceptions and ignore them for now (until we make an
3784 intermediate web page where we could show the error message)
3785 (StatusResource): create with an IControl, use it to give an
3786 IBuilderControl to all children
3787 (Waterfall): take an allowForce= option, pass an IControl object
3788 to StatusResource if it is True
3790 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
3792 * buildbot/master.py (BotPerspective.perspective_forceBuild):
3793 catch new exceptions and return string forms
3795 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
3796 * buildbot/process/builder.py (Builder.forceBuild): raise them
3797 * buildbot/test/test_control.py (Force.testNoSlave): new test
3798 (Force.testBuilderInUse): same
3801 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
3803 * buildbot/test/test_run.py: use IControl
3804 * buildbot/test/test_vc.py: same
3806 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
3807 to use IControl. Still offline.
3808 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3810 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
3811 who=None so periodic builds don't send out status mail
3812 (Builder.forceBuild): include reason in the log message
3813 (BuilderControl.forceBuild): rename 'name' to 'who'
3815 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
3816 'who' parameter, but make it None by default so builds forced by
3817 slave admins don't cause status mail to be sent to anybody
3818 (BotMaster.forceBuild): same. this method is deprecated.
3819 (DebugPerspective.perspective_forceBuild): same, use IControl.
3820 (DebugPerspective.perspective_fakeChange): use IControl..
3821 (Dispatcher.requestAvatar): .. so don't set .changemaster
3823 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
3824 parameter to avoid confusion with the name of the builder
3827 * buildbot/status/mail.py: refine comment about needing 2.3
3829 * buildbot/status/html.py: move all imports to the top
3831 * buildbot/test/test_control.py: test new interfaces
3832 * buildbot/test/test_run.py (Status): handle new interfaces
3833 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
3835 * buildbot/process/base.py (BuildControl): implement IBuildControl
3836 and its lonely getStatus() method
3838 * buildbot/process/builder.py (BuilderControl): implement
3839 IBuilderControl, obtained by adapting the Builder instance
3840 (Builder.startBuild): return a BuilderControl instead of a
3841 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
3842 accomplish the same thing.
3844 * buildbot/master.py: move all import statements to the top
3845 (Control): implement IControl, obtained by adapting the
3846 BuildMaster instance.
3848 * buildbot/interfaces.py: add IControl, IBuilderControl, and
3849 IBuildControl. These are used to force builds. Eventually they
3850 will provide ways to reconfigure the Builders, pause or abandon a
3851 Build, and perhaps control the BuildMaster itself.
3853 2004-09-26 Brian Warner <warner@lothar.com>
3855 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
3856 ends up comparing us against something without a .__class__
3858 2004-09-24 Brian Warner <warner@lothar.com>
3860 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
3863 * Makefile: add 'deb-snapshot' target, to create a timestamped
3866 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
3868 2004-09-23 Brian Warner <warner@lothar.com>
3870 * buildbot/__init__.py (version): move version string here
3871 * setup.py: get version string from buildbot.version
3872 * buildbot/status/html.py (WaterfallStatusResource.body): add
3873 buildbot version to the page footer
3874 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
3877 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
3878 slaves, let the second know where the first one is coming from
3879 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
3880 see our exceptions. It would be nice if there were a way to just
3881 send them the exception type and value, not the full traceback.
3884 * buildbot/status/mail.py (MailNotifier): add a new argument
3885 sendToInterestedUsers=, which can be set to False to disable the
3886 usual send-to-blamelist behavior.
3887 (top): handle python-2.2 which has no email.MIMEMultipart
3888 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
3889 (MailNotifier.disownServiceParent): unsubscribe on removal
3891 * buildbot/test/test_status.py (Mail.testBuild2): test it
3894 * buildbot/status/progress.py (Expectations.wavg): tolerate
3895 current=None, which happens when steps start failing badly
3896 * buildbot/test/test_status.py (Progress.testWavg): test for it
3898 * buildbot/process/step.py (SVN.startVC): when the (old) slave
3899 doesn't understand args['revision'], emit a warning instead of
3900 bailing completely. Updating to -rHEAD is probably close enough.
3902 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
3904 * buildbot/test/test_status.py: at least import bb.status.client
3905 even if we don't have any test coverage for it yet
3907 * contrib/svn_buildbot.py: don't require python2.3
3908 (main): wait, do require it (for sets.py), but explain how to
3909 make it work under python2.2
3911 2004-09-23 Brian Warner <warner@lothar.com>
3913 * contrib/svn_buildbot.py: include the revision number in the Change
3915 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
3916 using util.now() because FreshCVS is a realtime service
3918 * buildbot/status/event.py: delete dead code
3919 * buildbot/process/step.py: don't import dead Event class
3920 * buildbot/process/step_twisted.py: same
3921 * buildbot/status/builder.py: same
3922 * buildbot/status/client.py: same
3924 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
3926 * buildbot/changes/changes.py (Change): set .when from an __init__
3927 argument (which defaults to now()), rather than having
3928 ChangeMaster.addChange set it later.
3929 (ChangeMaster.addChange): same
3931 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
3932 (parseSyncmail): same. Just use util.now() for now.
3933 (parseBonsaiMail): parse the timestamp field for when=
3935 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
3936 instead of setting .when after the fact
3940 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
3941 results when the target project uses retrial. Still under
3943 * buildbot/test/test_trial.py: same
3945 2004-09-21 Brian Warner <warner@lothar.com>
3947 * buildbot/status/mail.py (MailNotifier.__init__): include
3948 success/warnings/failure in the Subject line
3949 (MailNotifier.buildMessage): add the buildbot's URL to the body,
3950 use step.logname for the addLogs=True attachment filenames
3951 * buildbot/test/test_status.py (Mail): test Subject lines
3952 (Mail.testLogs): test attachment filenames
3954 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3955 accept a 'who' argument from the debug tool
3956 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
3957 * contrib/debug.glade: add text box to set 'who'
3959 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
3960 .getBuilderName with .getBuilder().getName(), more flexible
3961 (IStatusLog.getName): logs have short names, but you can prefix
3962 them with log.getStep().getName() to make them more useful
3963 * buildbot/status/builder.py: same
3964 * buildbot/status/client.py: same
3965 * buildbot/status/html.py: same
3966 * buildbot/test/test_run.py (Status.testSlave): same
3967 * buildbot/process/step.py: tweak logfile names
3969 * buildbot/status/mail.py (MailNotifier): add lookup, change
3970 argument to extraRecipients. The notifier is now aimed at sending
3971 mail to the people involved in a particular build, with additional
3972 constant recipients as a secondary function.
3974 * buildbot/test/test_status.py: add coverage for IEmailLookup,
3975 including slow-lookup and failing-lookup. Make sure the blamelist
3976 members are included.
3978 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
3979 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
3980 (IBuildStatus.getInterestedUsers): new method
3981 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
3982 * buildbot/status/client.py (remote_getResponsibleUsers): same
3983 * buildbot/status/html.py (StatusResourceBuild.body): same
3984 * buildbot/test/test_run.py (Status.testSlave): same
3986 2004-09-20 Brian Warner <warner@lothar.com>
3988 * docs/users.xhtml: update concepts
3990 * Makefile: add a convenience makefile, for things like 'make
3991 test'. It is not included in the source tarball.
3993 2004-09-16 Brian Warner <warner@lothar.com>
3995 * NEWS: mention /usr/bin/buildbot, debian/*
3997 * debian/*: add preliminary debian packaging. Many thanks to
3998 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
3999 it considerably since it left their hands, I am responsible for
4000 all breakage that's resulted.
4002 * bin/buildbot: create a top-level 'buildbot' command, to be
4003 installed in /usr/bin/buildbot . For now it's just a simple
4004 frontend to mktap/twistd/kill, but eventually it will be the entry
4005 point to the 'try' command and also a status client. It is also
4006 intended to support the upcoming debian-packaging init.d scripts.
4007 * buildbot/scripts/runner.py: the real work is done here
4008 * buildbot/scripts/__init__.py: need this too
4009 * buildbot/scripts/sample.cfg: this is installed in new
4010 buildmaster directories
4011 * setup.py: install new stuff
4013 2004-09-15 Brian Warner <warner@lothar.com>
4015 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
4016 'file:' schema (the version shipped with OS-X was built without the
4018 (SetupMixin.tearDown): stop the goofy twisted.web timer which
4019 updates the log-timestamp, to make sure it isn't still running after
4022 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
4023 values to the config file.
4024 * docs/examples/hello.cfg: add examples
4025 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
4026 * buildbot/status/builder.py (Status.getProjectURL): implement them
4027 * buildbot/master.py (BuildMaster.loadConfig): set them from config
4028 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
4029 * buildbot/status/html.py (WaterfallStatusResource): display them
4032 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
4033 certain error cases don't suffer a secondary exception.
4034 (top): Skip tests if the corresponding VC tool is not installed.
4036 * buildbot/process/factory.py (Trial): introduce separate
4037 'buildpython' and 'trialpython' lists, since trialpython=[] is
4038 what you want to invoke /usr/bin/python, whereas ./setup.py is
4039 less likely to be executable. Add env= parameter to pass options
4040 to test cases (which is how I usually write tests, I don't know if
4041 anyone else does it this way).
4043 * buildbot/process/step_twisted.py (Trial): handle python=None.
4044 Require 'testpath' be a string, not a list. Fix tests= typo.
4045 (Trial.start): sanity-check any PYTHONPATH value for stringness.
4047 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
4048 way to deal with the possibility of removing the disconnect notify
4050 (CVS): add a 'login' parameter to give a password to 'cvs login',
4051 commonly used with pserver methods (where pw="" or pw="guest")
4053 * buildbot/slave/commands.py (SourceBase): move common args
4054 extraction and setup() to __init__, so everything is ready by the
4055 time setup() is called
4056 (CVS.start): call 'cvs login' if a password was supplied
4057 (ShellCommand): special-case PYTHONPATH: prepend the master's
4058 value to any existing slave-local value.
4060 * buildbot/process/builder.py (Builder.updateBigStatus): if we
4061 don't have a remote, mark the builder as Offline. This whole
4062 function should probably go away and be replaced by individual
4064 (Builder.buildFinished): return the results to the build-finished
4065 deferred callback, helps with testing
4067 2004-09-14 Brian Warner <warner@lothar.com>
4069 * buildbot/test/test_vc.py: put all the repositories needed to run
4070 the complete tests into a single small (1.3MB) tarball, so I can
4071 make that tarball available on the buildbot web site. Test HTTP
4072 access (for Arch and Darcs) by spawning a temporary web server
4073 while the test runs.
4075 * docs/users.xhtml: new document, describe Buildbot's limited
4076 understanding of different human users
4078 * buildbot/test/test_vc.py: rearrange test cases a bit
4080 * buildbot/process/step_twisted.py (Trial): handle testpath=
4081 * buildbot/process/factory.py (Trial): update to use step.Trial
4083 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
4085 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
4086 the overall build text (which gives you 'failed 2 tests' rather
4088 (BuildStepStatus.text2): default to [], not None
4090 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
4093 2004-09-12 Brian Warner <warner@lothar.com>
4095 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
4096 log the whole exception if it's just an AttributeError (old slave)
4098 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
4099 so (e.g.) sub-commands can be run in the right directory.
4100 (ShellCommand.start): accept an optional errorMessage= argument
4101 to make life easier for SVN.start
4102 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
4104 (ShellCommand.start): move ['dir'] compatibility hack..
4105 (RemoteShellCommand.start): .. to here so everyone can use it
4107 * buildbot/process/step_twisted.py (Trial): use .workdir
4109 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
4110 text displayed when debuild fails completely
4111 (Trial): snarf _trial_temp/test.log from the slave and display it
4113 2004-09-11 Brian Warner <warner@lothar.com>
4115 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
4117 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
4118 set to 'twisted', so --recurse can find twisted/web/test/*, etc
4120 * buildbot/process/step.py (ShellCommand): call .createSummary
4121 before .evaluateCommand instead of the other way around. This
4122 makes it slightly easier to count warnings and then use that to
4123 set results=WARNINGS
4124 * buildbot/process/step_twisted.py: cosmetic, swap the methods
4126 * buildbot/process/base.py (Build.buildFinished): update status
4127 before doing progress. It's embarrassing for the build to be stuck
4128 in the "building" state when an exceptions occurs elsewhere..
4130 * buildbot/status/progress.py (Expectations.expectedBuildTime):
4131 python2.2 doesn't have 'sum'
4133 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
4134 to prevent clients from accidentally sorting it
4136 * buildbot/master.py (Manhole): add username/password
4137 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
4138 c['manholePort'], deprecate old usage
4139 * docs/config.xhtml: document c['manhole']
4140 * docs/examples/hello.cfg: show example of using a Manhole
4143 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
4144 pretend the slave is up to date
4146 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
4147 the module, overlaps with 'log', the local variable
4149 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
4151 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
4152 new method to let Steps find out the version of their
4153 corresponding SlaveCommand.
4154 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
4155 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
4156 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
4158 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
4159 (Arch.startVC): same
4160 (P4Sync.startVC): same
4162 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
4163 Deferred so we can catch errors in remote_startCommand
4164 (RemoteShellCommand.start): same
4166 * docs/examples/twisted_master.cfg: update sample config file
4168 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
4169 after connectionMade() is called, not before. Close stdin at that
4172 * buildbot/process/process_twisted.py: update to use Trial, clean
4173 up argument passing (move to argv arrays instead of string
4176 * buildbot/process/step_twisted.py (Trial): new step to replace
4177 RunUnitTests, usable by any trial-using project (not just
4178 Twisted). Arguments have changed, see the docstring for details.
4180 * buildbot/process/base.py (Build.startBuild): this now returns a
4181 Deferred. Exceptions that occur during setupBuild are now
4182 caught better and lead to fewer build_status weirdnesses, like
4183 finishing a build that was never started.
4184 (Build.buildFinished): fire the Deferred instead of calling
4185 builder.buildFinished directly. The callback argument is this
4186 Build, everything else can be extracted from it, including the
4187 new build.results attribute.
4188 * buildbot/process/builder.py (Builder.startBuild): same
4189 (Builder.buildFinished): same, extract results from build
4191 * buildbot/process/step.py (ShellCommands): remove dead code
4193 2004-09-08 Brian Warner <warner@lothar.com>
4195 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
4196 doesn't try to use the leftover patched workdir
4197 (SourceStamp): test source-stamp computation for CVS and SVN
4199 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
4200 patched workdir ('touch .buildbot-patched') so we don't try to
4202 (SourceBase.start): add ['revision'] for all Source steps
4203 (CVS): change args: use ['branch'] for -r, remove ['files']
4204 (CVS.buildVC): fix revision/branch stuff
4205 (SVN): add revision stuff
4207 * buildbot/process/step.py (BuildStep.__init__): reject unknown
4208 kwargs (except 'workdir') to avoid silent spelling errors
4209 (ShellCommand.__init__): same
4210 (Source): new base class for CVS/SVN/etc. Factor out everything
4211 common, add revision computation (perform the checkout with a -D
4212 DATE or -r REVISION that gets exactly the sources described by the
4213 last Change), overridable with step.alwaysUseLatest. Add patch
4214 handling (build.getSourceStamp can trigger the use of a base
4215 revision and a patch).
4216 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
4217 * docs/steps.xhtml: update docs
4218 * docs/source.xhtml: mention .checkoutDelay
4219 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
4221 * buildbot/process/base.py (Build.setSourceStamp): add a
4222 .sourceStamp attribute to each Build. If set, this indicates that
4223 the build should be done with something other than the most
4224 recent source tree. This will be used to implement "try" builds.
4225 (Build.allChanges): new support method
4226 (Build.lastChangeTime): remove, functionality moved to Source steps
4227 (Build.setupBuild): copy the Step args before adding ['workdir'],
4228 to avoid modifying the BuildFactory (and thus triggering spurious
4232 * buildbot/status/html.py: rename s/commits/changes/
4233 (StatusResourceChanges): same
4234 (CommitBox.getBox): same, update URL
4235 (WaterfallStatusResource): same
4236 (StatusResource.getChild): same
4238 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
4239 * contrib/debug.glade: add optional 'revision' to the fakeChange
4241 * buildbot/changes/changes.py (html_tmpl): display .revision
4242 (ChangeMaster.addChange): note .revision in log
4243 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
4244 accept a ['revision'] attribute
4246 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
4248 * buildbot/master.py (BotMaster.getPerspective): update the
4249 .connected flag in SlaveStatus when it connects
4250 (BotMaster.detach): and when it disconnects
4251 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
4252 (BuildMaster.loadConfig_Builders): walk old list correctly
4254 * buildbot/test/test_config.py: fix prefix= usage
4256 2004-09-06 Brian Warner <warner@lothar.com>
4260 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
4261 poll a P4 depot looking for recent changes. Thanks to Dave
4262 Peticolas for the contribution. Probably needs some testing after
4265 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
4266 requires manual client setup for each buildslave. Rather
4267 experimental. Thanks again to Dave Peticolas.
4268 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
4270 * buildbot/changes/changes.py (Change): add a .revision attribute,
4271 which will eventually be used to generate source-stamp values.
4273 * buildbot/process/step.py (RemoteCommand.start): use
4274 notifyOnDisconnect to notice when we lose the slave, then treat it
4275 like an exception. This allows LogFiles to be closed and the build
4276 to be wrapped up normally. Be sure to remove the disconnect
4277 notification when the step completes so we don't accumulate a
4278 bazillion such notifications which will fire weeks later (when the
4279 slave finally disconnects normally). Fixes SF#915807, thanks to
4280 spiv (Andrew Bennetts) for the report.
4281 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
4282 really isn't Logged- specific
4283 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
4284 header, since it's almost always going to be appended to an
4286 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
4287 update test to handle use of notifyOnDisconnect
4289 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
4290 don't clear .ETA and .currentBuild when going offline, let the
4291 current build clean up after itself
4293 * buildbot/process/builder.py (Builder.detached): wait a moment
4294 before doing things like stopping the current build, because the
4295 current step will probably notice the disconnect and cleanup the
4297 * buildbot/test/test_run.py (Status.tearDown): update test to
4298 handle asynchronous build-detachment
4300 * buildbot/process/base.py (Build.stopBuild): minor shuffles
4302 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
4303 hush a debug message
4305 2004-09-05 Brian Warner <warner@lothar.com>
4307 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
4308 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
4309 kernels do this: the fcntl module has the F_NOTIFY constant, but
4310 the kernel itself doesn't support the operation. Thanks to Olly
4311 Betts for spotting the problem.
4313 * buildbot/process/step.py (Darcs): new source-checkout command
4314 (Arch): new source-checkout command
4315 (todo_P4): fix constructor syntax, still just a placeholder
4316 * buildbot/test/test_vc.py (VC.testDarcs): test it
4317 (VC.testDarcsHTTP): same, via localhost HTTP
4319 (VC.testArchHTTP): same
4320 * NEWS: mention new features
4322 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
4323 which tells the step to stash stdout text locally (in .stdout).
4324 Slave-side Commands can use this to make decisions based upon the
4325 output of the the ShellCommand (not just the exit code).
4326 (Darcs): New source-checkout command
4327 (Arch): New source-checkout command, uses .keepStdout in one place
4328 where it needs to discover the archive's default name.
4330 * docs/steps.xhtml: Document options taken by Darcs and Arch.
4331 * docs/source.xhtml: add brief descriptions of Darcs and Arch
4332 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
4334 * buildbot/process/step.py (ShellCommand.describe): add an
4335 alternate .descriptionDone attribute which provides descriptive
4336 text when the step is complete. .description can be ["compiling"],
4337 for use while the step is running, then .descriptionDone can be
4338 ["compile"], used alone when the step succeeds or with "failed" when
4339 it does not. Updated other steps to use the new text.
4340 * buildbot/process/step_twisted.py: same
4341 * buildbot/test/test_run.py: update tests to match
4343 2004-08-30 Brian Warner <warner@lothar.com>
4345 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
4346 (CVS.__init__): send 'patch' argument to slave
4347 (CVS.start): don't create the LoggedRemoteCommand until start(),
4348 so we can catch a .patch added after __init__
4349 (SVN.__init__): add 'patch' to SVN too
4352 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
4353 argument, to let commands push data into the process' stdin pipe.
4354 Move usePTY to a per-instance attribute, and clear it if 'stdin'
4355 is in use, since closing a PTY doesn't really affect the process
4356 in the right way (in particular, I couldn't run /usr/bin/patch
4358 (SourceBase.doPatch): handle 'patch' argument
4360 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
4363 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
4364 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
4366 * buildbot/master.py (BotPerspective.got_commands): get command
4367 versions from slave, give to each builder
4368 * buildbot/process/builder.py (Builder.attached): stash slave
4369 command versions in .remoteCommands
4371 * docs/steps.xhtml: bring docs in-line with reality
4373 * buildbot/process/step.py (CVS.__init__): more brutal
4374 compatibility code removal
4375 (SVN.__init__): same
4377 * buildbot/slave/commands.py (SlaveShellCommand): update docs
4378 (SlaveShellCommand.start): require ['workdir'] argument, remove
4379 the ['dir'] fallback (compatibility will come later)
4380 (SourceBase): update docs
4381 (SourceBase.start): remove ['directory'] fallback
4384 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
4385 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4386 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
4388 * buildbot/process/step.py (RemoteShellCommand.__init__): add
4389 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
4390 code.. I will figure out 0.5.0-compatibility hooks later)
4392 2004-08-30 Brian Warner <warner@lothar.com>
4394 * buildbot/process/process_twisted.py: rewrite in terms of new
4395 BuildFactory base class. It got significantly shorter. Yay
4398 * buildbot/process/step_twisted.py (HLint.start): fix to make it
4399 work with the new "self.build isn't nailed down until we call
4400 step.start()" scheme: specifically, __init__ is called before the
4401 build has decided on which Changes are going in, so we don't scan
4402 build.allFiles() for .xhtml files until start()
4403 (HLint.commandComplete): use getText(), not getStdout()
4404 (RunUnitTests.start): same: don't use .build until start()
4405 (RunUnitTests.describe): oops, don't report (None) when using
4407 (RunUnitTests.commandComplete): use getText()
4408 (RunUnitTests.createSummary): same
4409 (BuildDebs.commandComplete): same
4411 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
4412 set args['command'] until start(), since our BuildStep is allowed
4413 to change their mind up until that point
4414 (TreeSize.commandComplete): use getText(), not getStdout()
4416 * docs/examples/twisted_master.cfg: update to current standards
4418 * docs/factories.xhtml: update
4419 * buildbot/process/factory.py: implement all the common factories
4420 described in the docs. The Trial factory doesn't work yet, and
4421 I've probably broken all the process_twisted.py factories in the
4422 process. There are compatibility classes left in for things like
4423 the old BasicBuildFactory, but subclasses of them are unlikely to
4425 * docs/examples/glib_master.cfg: use new BuildFactories
4426 * docs/examples/hello.cfg: same
4428 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
4429 explicit 'workdir' args
4431 * buildbot/process/base.py (BuildFactory): move factories to ..
4432 * buildbot/process/factory.py (BuildFactory): .. here
4433 * buildbot/process/process_twisted.py: handle move
4434 * buildbot/test/test_config.py: same
4435 * buildbot/test/test_run.py: same
4436 * buildbot/test/test_steps.py: same
4437 * buildbot/test/test_vc.py: same
4438 * docs/factories.xhtml: same
4440 * NEWS: mention config changes that require updating master.cfg
4442 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
4443 argument to all steps that weren't given one already, pointing at
4444 the "build/" directory.
4446 * docs/examples/hello.cfg: remove explicit 'workdir' args
4448 * docs/factories.xhtml: document standard BuildFactory clases,
4449 including a bunch which are have not yet been written
4451 2004-08-29 Brian Warner <warner@lothar.com>
4453 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
4454 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
4455 buildbot.status.builder so they aren't quite so internal
4456 * buildbot/process/base.py, buildbot/process/builder.py: same
4457 * buildbot/process/maxq.py, buildbot/process/step.py: same
4458 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
4459 * buildbot/status/mail.py, buildbot/test/test_run.py: same
4460 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
4462 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
4463 to handle new getLogs()-returns-list behavior
4464 (StatusResourceBuildStep.getChild): same
4465 (StepBox.getBox): same
4466 (WaterfallStatusResource.phase0): same
4468 * docs/source.xhtml: document how Buildbot uses version-control
4469 systems (output side: how we get source trees)
4470 * docs/changes.xhtml: rename from sources.xhtml, documents VC
4471 systems (input side: how we learn about Changes)
4473 * buildbot/master.py (Manhole): use ComparableMixin
4474 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
4475 * buildbot/changes/mail.py (MaildirSource): same
4476 * buildbot/status/client.py (PBListener): same
4477 * buildbot/status/html.py (Waterfall): same
4478 * buildbot/status/words.py (IRC): same
4480 * NEWS: start describing new features
4482 * buildbot/status/mail.py (MailNotifier): finish implementation.
4483 The message body is still a bit sparse.
4484 * buildbot/test/test_status.py (Mail): test it
4486 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
4487 and __hash__ methods I wind up adding everywhere. Specifically
4488 intended to support the buildbot config-file update scheme where
4489 we compare, say, the old list of IStatusTargets against the new
4490 one and don't touch something which shows up on both lists.
4491 * buildbot/test/test_util.py (Compare): test case for it
4493 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
4494 return a list instead of a dict
4495 (IBuildStepStatus.getLogs): same. The idea is that steps create
4496 logs with vaguely unique names (although their uniqueness is not
4497 guaranteed). Thus a compilation step should create its sole
4498 logfile with the name 'compile', and contribute it to the
4499 BuildStatus. If a step has two logfiles, try to create them with
4500 different names (like 'test.log' and 'test.summary'), and only
4501 contribute the important ones to the overall BuildStatus.
4502 * buildbot/status/builder.py (Event.getLogs): same
4503 (BuildStepStatus): fix default .text and .results
4504 (BuildStepStatus.addLog): switch to list-like .getLogs()
4505 (BuildStepStatus.stepFinished): same
4506 (BuildStatus.text): fix default .text
4507 (BuildStatus.getLogs): temporary hack to return all logs (from all
4508 child BuildStepStatus objects). Needs to be fixed to only report
4509 the significant ones (as contributed by the steps themselves)
4510 * buildbot/test/test_run.py: handle list-like .getLogs()
4511 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
4513 2004-08-28 Brian Warner <warner@lothar.com>
4515 * buildbot/process/builder.py (Builder.attached): serialize the
4516 attachment process, so the attach-watcher isn't called until the
4517 slave is really available. Add detached watchers too, which makes
4520 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
4522 * buildbot/test/test_swap.py: remove dead code
4524 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
4525 (ShellCommand.start): treat errors in _startCommand/spawnProcess
4526 sort of as if the command being run exited with a -1. There may
4527 still be some holes in this scheme.
4528 (CVSCommand): add 'revision' tag to the VC commands, make sure the
4529 -r option appears before the module list
4530 * buildbot/process/step.py (CVS): add 'revision' argument
4532 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
4533 when sending updates or stepComplete messages to the master, since
4534 we don't currently care whether they arrive or not. When we revamp
4535 the master/slave protocol to really resume interrupted builds,
4536 this will need revisiting.
4537 (lostRemote): remove spurious print
4539 * buildbot/master.py (BotPerspective.attached): serialize the
4540 new-builder interrogation process, to make testing easier
4541 (BotMaster.waitUntilBuilderDetached): convenience function
4543 * buildbot/status/builder.py (BuilderStatus): prune old builds
4544 (BuildStatus.pruneSteps): .. and steps
4545 (BuildStepStatus.pruneLogs): .. and logs
4546 (BuilderStatus.getBuild): handle missing builds
4547 * buildbot/status/html.py (StatusResourceBuild.body): display build
4548 status in the per-build page
4549 (BuildBox.getBox): color finished builds in the per-build box
4551 2004-08-27 Brian Warner <warner@lothar.com>
4553 * buildbot/status/mail.py (MailNotifier): new notification class,
4556 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
4557 variants of a common base class which handles all the mode= logic
4559 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
4561 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
4563 2004-08-26 Brian Warner <warner@lothar.com>
4565 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
4568 * buildbot/test/test_run.py: update to new Logfile interface, new
4569 buildbot.slave modules
4570 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
4572 * MANIFEST.in: new sample config file
4573 * docs/examples/hello.cfg: same
4575 * buildbot/process/step_twisted.py: remove dead import
4577 * buildbot/process/step.py (RemoteCommand.run): catch errors
4579 (RemoteCommand.remote_update): ignore updates that arrive after
4581 (RemoteCommand.remote_complete): ignore duplicate complete msgs
4582 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
4583 the responsibilities of the subclass's methods
4584 (BuildStep.failed): catch errors during failure processing
4585 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
4586 (CVS): move to a mode= argument (described in docstring), rather
4587 than the ungainly clobber=/export=/copydir= combination.
4588 (SVN): add mode= functionality to SVN too
4589 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
4591 * buildbot/process/base.py (Build.startNextStep): catch errors
4592 during s.startStep()
4594 * buildbot/clients/base.py: update to new PB client interface.
4595 gtkPanes is still broken
4597 * buildbot/bot.py, buildbot/slavecommand.py: move to..
4598 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
4599 * setup.py: add buildbot.slave module
4600 * buildbot/bb_tap.py: handle move
4601 * buildbot/slave/registry.py: place to register commands, w/versions
4602 * buildbot/slave/bot.py: major simplifications
4603 (SlaveBuilder.remote_startCommand): use registry for slave commands,
4604 instead of a fixed table. Eventually this will make the slave more
4605 extensible. Use 'start' method on the command, not .startCommand.
4606 Fix unsafeTracebacks handling (I think).
4607 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
4608 helper class with a .start method that returns a Deferred.
4609 SlaveShellCommand is the form reached by the buildmaster. Commands
4610 which use multiple ShellCommands can just chain them as Deferreds,
4611 with some helper methods in Command (_abandonOnFailure and
4612 _checkAbandoned) to bail on rc!=0.
4613 (CVSCommand): prefer new mode= argument
4614 (SVNFetch): add mode= argument
4616 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
4617 put a useful reason string on the build
4619 * buildbot/status/builder.py (LogFile): do LogFile right: move the
4620 core functionality into an IStatusLog object
4621 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
4622 * buildbot/status/html.py (TextLog): HTML-rendering goes here
4623 (StatusResourceBuild.body): use proper accessor methods
4624 * buildbot/status/client.py (RemoteLog): PB-access goes here
4625 (StatusClientPerspective.perspective_subscribe): add "full" mode,
4626 which delivers log contents too
4627 (PBListener.__cmp__): make PBListeners comparable, thus removeable
4628 * buildbot/status/event.py: remove old Logfile completely
4630 * buildbot/interfaces.py (IStatusLog.subscribe): make the
4631 subscription interface for IStatusLog subscriptions just like all
4632 other the status subscriptions
4633 (IStatusReceiver.logChunk): method called on subscribers
4635 2004-08-24 Brian Warner <warner@lothar.com>
4637 * buildbot/process/builder.py (Builder._pong): oops, ping response
4638 includes a result (the implicit None returned by remote_print).
4639 Accept it so the _pong method handles the response correctly.
4641 2004-08-06 Brian Warner <warner@lothar.com>
4643 * buildbot/test/test_config.py: update IRC, PBListener tests
4645 * buildbot/status/client.py (StatusClientPerspective): total
4646 rewrite to match new IStatus interfaces. New subscription scheme.
4647 There are still a few optimizations to make (sending down extra
4648 information with event messages so the client doesn't have to do a
4649 round trip). The logfile-retrieval code is probably still broken.
4650 Moved the PB service into its own port, you can no longer share a
4651 TCP socket between a PBListener and, say, the slaveport (this
4652 should be fixed eventually).
4653 * buildbot/clients/base.py (Client): revamp to match. still needs
4654 a lot of work, but basic event reporting works fine. gtkPanes is
4657 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
4658 instance talks to a single irc server. Threw out all the old
4659 multi-server handling code. Still need to add back in
4660 builder-control (i.e. "force build")
4662 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
4663 more random text to the as-yet-unreachable per-step page
4665 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
4666 rename to stepETAUpdate
4667 (BuildStatus.subscribe): add build-wide ETA updates
4668 (BuilderStatus.getState): remove more cruft
4669 (BuilderStatus.getCurrentBuild): remove more cruft
4670 (BuilderStatus.buildStarted): really handle tuple-subscription
4671 * buildbot/test/test_run.py (Status.testSlave): handle the
4672 stepETAUpdate rename
4674 * buildbot/master.py (BuildMaster): don't add a default
4675 StatusClientService. Don't add a default IrcStatusFactory. Both
4676 are now added through c['status'] in the config file. c['irc'] is
4677 accepted for backwards compatibility, the only quirk is you cannot
4678 use c['irc'] to specify IRC servers on ports other than 6667.
4680 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
4681 (IStatusReceiver.buildStarted): allow update-interval on subscribe
4682 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
4683 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
4686 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
4687 the buildmaster to re-read its config file
4690 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
4691 find out the port our server is running on
4692 (WebTest.test_webPathname_port): same
4694 * buildbot/test/test_config.py (testWebPortnum): test it
4695 (testWebPathname): ditto
4697 * docs/config.xhtml: document new c['status'] configuration option
4699 * buildbot/status/html.py (Waterfall): new top-level class which
4700 can be added to c['status']. This creates the Site as well as the
4701 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
4702 reachable as .parent, for everything.
4704 * buildbot/master.py (Manhole): make it a normal service Child
4705 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
4706 webPathname. It will eventually replace c['irc'] and the implicit
4707 PB listener as well. c['webPortnum'] and c['webPathname'] are left
4708 in as (deprecated) backward compatibility hooks for now.
4711 * buildbot/process/builder.py (Builder.buildFinished): don't
4712 inform out builder_status about a finished build, as it finds out
4713 through its child BuildStatus object
4715 * buildbot/status/html.py: extensive revamp. Use adapters to make
4716 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
4717 have both starting and finishing times and adjust the waterfall
4718 display accordingly, using spacers if necessary. Use SlaveStatus
4719 to get buildslave info.
4720 (StatusResourceBuildStep): new just-one-step resource, used to get
4721 logfiles. No actual href to it yet.
4723 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
4724 the time being, until I get the file-naming scheme right
4726 * buildbot/status/builder.py (Event): clean started/finished names
4727 (BuildStatus.isFinished): .finished is not None is the right test
4728 (BuildStatus.buildStarted): track started/finished times ourselves
4729 (BuilderStatus.getSlave): provide access to SlaveStatus object
4730 (BuilderStatus.getLastFinishedBuild): all builds are now in
4731 .builds, even the currently-running one. Accomodate this change.
4732 (BuilderStatus.eventGenerator): new per-builder event generator.
4733 Returns BuildStepStatus and BuildStatus objects, since they can
4734 both be adapted as necessary.
4735 (BuilderStatus.addEvent): clean up started/finished attributes
4736 (BuilderStatus.startBuild,finishBuild): remove dead code
4737 (SlaveStatus): new object to provide ISlaveStatus
4739 * buildbot/process/step.py (ShellCommand.getColor): actually
4740 return the color instead of setting it ourselves
4741 (CVS.__init__): pull .timeout and .workdir options out of
4742 **kwargs, since BuildStep will ignore them. Without this neither
4743 will be sent to the slave correctly.
4744 (SVN.__init__): same
4746 * buildbot/process/builder.py (Builder): move flags to class-level
4748 (Builder.attached): remove .remoteInfo, let the BotPerspective and
4749 SlaveStatus handle that
4751 * buildbot/process/base.py (Build.firstEvent): remove dead code
4752 (Build.stopBuild): bugfix
4754 * buildbot/changes/pb.py (PBChangeSource.describe): add method
4756 * buildbot/changes/changes.py (Change): add IStatusEvent methods
4757 (ChangeMaster.eventGenerator): yield Changes, since there are now
4758 Adapters to turn them into HTML boxes
4760 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
4761 (BotPerspective.attached): feed a SlaveStatus object
4762 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
4763 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
4765 * buildbot/interfaces.py: API additions
4766 (ISlaveStatus): place to get slave status
4768 2004-08-04 Brian Warner <warner@lothar.com>
4770 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
4771 the delay finishes, so the step is marked as SUCCESS
4773 * buildbot/test/test_run.py (Status.testSlave): cover more of
4774 IBuildStatus and IBuildStepStatus
4776 * buildbot/status/progress.py (StepProgress): move some flags to
4777 class-level attributes
4778 (StepProgress.remaining): if there are no other progress metrics
4779 to go by, fall back to elapsed time
4780 (StepProgress.setExpectations): take a dict of metrics instead of
4782 (BuildProgress.setExpectationsFrom): pull expectations from the
4783 Expectations, instead of having it push them to the BuildProgress
4784 (Expectations): move some flags to class-level attributes
4785 (Expectations.__init__): copy per-step times from the
4787 (Expectations.expectedBuildTime): new method for per-build ETA
4789 * buildbot/status/event.py (Logfile): move some flags to
4790 class-level attributes
4791 (Logfile.logProgressTo): better method name, let step set the
4792 progress axis name (instead of always being "output")
4794 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
4795 times directly, rather than depending upon the (possibly missing)
4796 .progress object. Use 'None' to indicate "not started/finished
4798 (BuildStepStatus.getExpectations): oops, return the full list of
4800 (BuilderStatus._buildFinished): append finished builds to .builds
4802 * buildbot/process/step.py (BuildStep): add separate .useProgress
4803 flag, since empty .progressMetrics[] still implies that time is a
4805 (CVS): set up the cmd in __init__, instead of waiting for start()
4807 * buildbot/process/base.py (Build.startBuild): disable the 'when'
4808 calculation, this will eventually turn into a proper sourceStamp
4809 (Build.setupBuild): tell the Progress to load from the Expectations,
4810 instead of having the Expectations stuff things into the Progress
4811 (Build.buildException): add a build-level errback to make sure the
4812 build's Deferred fires even in case of exceptions
4814 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
4816 * buildbot/process/builder.py (Builder.forceBuild): convey the
4817 reason instead of creating a fake Change
4819 * docs/examples/twisted_master.cfg: update to match reality
4821 * buildbot/test/test_config.py, buildbot/test/test_process.py:
4822 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
4823 fix or remove broken/breaking tests
4825 * buildbot/status/event.py (Logfile.__len__): remove evil method
4827 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
4828 missing .build, for test convenience
4830 * buildbot/process/step_twisted.py: import fixes
4832 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
4834 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
4835 .statusbag reference
4837 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
4838 connection at shutdown, and stop it from reconnecting
4840 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
4841 chase down remote-execution bugs
4843 * buildbot/process/step.py: more fixes, remove
4844 BuildStep.setStatus()
4845 * buildbot/status/builder.py: move setStatus() functionality into
4847 * buildbot/status/event.py: minor fixes
4849 2004-08-03 Brian Warner <warner@lothar.com>
4851 * buildbot/process/base.py, buildbot/process/builder.py
4852 * buildbot/process/step.py, buildbot/status/builder.py
4853 * buildbot/status/event.py, buildbot/test/test_run.py:
4854 fix status delivery, get a basic test case working
4855 * buildbot/master.py: finish implementing basic status delivery,
4856 temporarily disable HTML/IRC/PB status sources
4858 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
4860 * buildbot/status/progress.py (BuildProgress): remove dead code
4862 * buildbot/interfaces.py
4863 * buildbot/process/base.py, buildbot/process/builder.py
4864 * buildbot/process/step.py, buildbot/process/step_twisted.py
4865 * buildbot/status/builder.py: Complete overhaul of the all
4866 status-delivery code, unifying all types of status clients (HTML,
4867 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
4868 look like. This commit is a checkpointing of the work-in-progress:
4869 the input side is mostly done (Builders/Builds sending status
4870 to the BuilderStatus/BuildStatus objects), but the output side has
4871 not yet been started (HTML resources querying BuilderStatus
4872 objects). Things are probably very broken right now and may remain
4873 so for several weeks, I apologize for the disruption.
4875 * buildbot/status/event.py: add a setHTML method to use pre-rendered
4876 HTML as the log's contents. Currently used for exception tracebacks.
4877 * buildbot/status/progress.py: minor spelling changes
4879 2004-08-02 Brian Warner <warner@lothar.com>
4881 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
4882 in mozilla. Also added stylesheets copied from Twisted's docs.
4883 Remember that these files are meant to be run through Lore first.
4884 Thanks to Philipp Frauenfelder for the fixes.
4885 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
4886 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
4887 * docs/template.tpl: added a Lore template
4889 2004-07-29 Brian Warner <warner@lothar.com>
4891 * buildbot/interfaces.py: revamp status delivery. This is the
4892 preview: these are the Interfaces that will be provided by new
4893 Builder code, and to which the current HTML/IRC/PB status
4894 displayers will be adapted.
4896 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
4897 on the SlaveBuilder, not the Bot.
4898 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
4900 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
4901 set .usePTY on the FakeSlaveBuilder
4903 2004-07-25 Brian Warner <warner@lothar.com>
4905 * buildbot/changes/freshcvs.py: add some debug log messages
4906 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
4907 disabled 'setFilter' syntax
4908 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
4909 don't end with a slash
4911 * buildbot/process/base.py (Builder._pong_failed): add TODO note
4913 * setup.py: bump to 0.5.0+ while between releases
4915 2004-07-23 Brian Warner <warner@lothar.com>
4917 * setup.py (version): Releasing buildbot-0.5.0
4919 2004-07-23 Brian Warner <warner@lothar.com>
4921 * README: update for 0.5.0 release
4923 * NEWS: update for 0.5.0 release
4925 2004-07-22 Brian Warner <warner@lothar.com>
4927 * buildbot/slavecommand.py (ShellCommand): make usePTY a
4928 mktap-time configuration flag (--usepty=1, --usepty=0)
4929 * buildbot/bot.py: same
4931 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
4932 an 'info' directory being unwanted
4934 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
4935 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
4936 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
4937 and earlier), use a FreshCVSSourceOldcred instead.
4938 (test): simple test routine: connect to server, print changes
4940 * buildbot/changes/changes.py (Change.getTime): make it possible
4941 to print un-timestamped changes
4943 * buildbot/master.py (makeApp): delete ancient dead code
4944 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
4945 * buildbot/test/test_config.py (testFindConfigFile): test it
4947 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
4948 instead of win32 one
4951 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
4952 now takes a dictionary instead of a tuple. See docs/config.xhtml for
4955 * buildbot/process/base.py (Builder.__init__): change constructor
4956 to accept a dictionary of config data, rather than discrete
4957 name/slave/builddir/factory arguments
4959 * docs/examples/twisted_master.cfg: update to new syntax
4960 * docs/examples/glib_master.cfg: same
4961 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
4962 rough tests of the new syntax
4965 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
4966 to be an int, which means "run a web.distrib sub-server on a TCP
4967 port". This lets you publish the buildbot status page to a remote
4968 twisted.web server (using distrib.ResourceSubscription). Also
4969 rename the local attributes used to hold these web things so
4970 they're more in touch with reality.
4971 * buildbot/test/test_web.py: test webPortnum and webPathname
4972 * docs/config.xhtml: document this new use of webPathname
4974 * docs/config.xhtml: new document, slightly ahead of reality
4976 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
4977 'prefix' handling: treat it as a simple string to check with
4978 .startswith, instead of treating it as a directory. This allows
4979 sub-directories to be used. If you use prefix=, you should give it
4980 a string that starts just below the CVSROOT and ends with a slash.
4981 This prefix will be stripped from all filenames, and filenames
4982 which do not start with it will be ignored.
4984 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
4986 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
4987 and --exclude (inverse of --include). SVN post-commit hooks
4988 now have total control over which changes get sent to buildbot and which
4991 2004-07-10 Brian Warner <warner@lothar.com>
4993 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
4994 test case to match new API
4996 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
4997 which crashed HTML display when self.entries=[] (needed to
4998 distinguish between [], which means "no entries yet", and None,
4999 which means "the entries have been swapped out to disk, go fetch
5002 2004-07-04 Brian Warner <warner@lothar.com>
5004 * buildbot/process/step_twisted.py (countFailedTests): Count
5005 skips, expectedFailures, and unexpectedSuccesses. Start scanning
5006 10kb from the end because any import errors are wedged there and
5007 they would make us think the test log was unparseable.
5008 (RunUnitTests.finishStatus): add skip/todo counts to the event box
5010 2004-06-26 Brian Warner <warner@lothar.com>
5012 * buildbot/process/step_twisted.py (RemovePYCs): turn the
5013 delete-*.pyc command into an actual BuildStep, so we can label it
5015 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5016 (FullTwistedBuildFactory): same
5018 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
5020 * contrib/fakechange.py: Add an errback when sending the fake
5021 change, so we know it didn't work.
5023 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
5025 * buildbot/process/step_twisted.py: Delete *.pyc files before
5026 calling trial, so it doesn't catch any old .pyc files whose .py
5027 files have been moved or deleted.
5029 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
5030 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
5031 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
5032 instead of ["twisted.test"], so that the end result is "trial -R
5035 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
5036 regular expression to match filenames that should be ignored when
5037 changed. Also add a --revision parameter that specifies the
5038 revision to examine, which is useful for debugging.
5040 2004-06-25 Brian Warner <warner@lothar.com>
5042 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
5043 summary of warnings (like DeprecationWarnings), next to the
5046 2004-05-13 Brian Warner <warner@lothar.com>
5048 * docs/examples/twisted_master.cfg: enable the win32 builder, as
5049 we now have a w32 build slave courtesy of Mike Taylor.
5051 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
5052 so broken. Fixed a race condition that tripped up interlocked
5053 builds and caused the status to be stuck at "Interlocked" forever.
5054 The twisted buildbot's one interlocked build just so happened to
5055 never hit this case until recently (the feeding builds both pass
5056 before the interlocked build is attempted.. usually it has to wait
5058 (Builder._pong_failed): fix method signature
5060 * setup.py: bump to 0.4.3+ while between releases
5062 2004-04-30 Brian Warner <warner@lothar.com>
5064 * setup.py (version): Releasing buildbot-0.4.3
5066 2004-04-30 Brian Warner <warner@lothar.com>
5068 * MANIFEST.in: add the doc fragments in docs/*.xhtml
5070 * README: update for 0.4.3 release
5072 * NEWS: update for 0.4.3 release
5074 * buildbot/master.py (BuildMaster.__getstate__): make sure
5075 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
5077 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
5078 .trial as a class attribute, for upgrade from 0.4.2
5080 * buildbot/changes/changes.py (Change.links): add .links for
5083 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
5084 .textWatchers and .htmlWatchers at save time, since they are both
5085 volatile, should allow smooth 0.4.2 upgrade
5087 * buildbot/process/step.py (CVS.finishStatus): catch failed
5088 CVS/SVN commands so we can make the status box red
5090 2004-04-29 Brian Warner <warner@lothar.com>
5092 * buildbot/changes/freshcvs.py
5093 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
5094 code to do setFilter(), which tells the freshcvs daemon to not
5095 send us stuff that we're not interested in. I will uncomment it
5096 when a new version of CVSToys is available in which setFilter()
5097 actually works, and I get a chance to test it better.
5099 * docs/examples/twisted_master.cfg: start using a PBChangeSource
5101 * buildbot/master.py (Dispatcher): use a registration scheme
5102 instead of hardwired service names
5103 (BuildMaster): keep track of the Dispatcher to support
5106 * buildbot/changes/changes.py (ChangeMaster): create a distinct
5107 PBChangeSource class instead of having it be an undocumented
5108 internal feature of the ChangeMaster. Split out the code into a
5110 * buildbot/changes/pb.py (PBChangeSource): same
5111 * buildbot/test/test_changes.py: a few tests for PBChangeSource
5113 * docs/{factories|sources|steps}.xhtml: document some pieces
5115 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
5116 using FCMaildirSource
5117 (f23osx): update OS-X builder to use python2.3, since the slave
5118 was updated to Panther (10.3.3)
5120 2004-03-21 Brian Warner <warner@lothar.com>
5122 * buildbot/process/process_twisted.py: factor out doCheckout, change
5123 to use SVN instead of CVS
5125 * buildbot/process/base.py (BasicBuildFactory): refactor to make
5126 an SVN subclass easier
5127 (BasicSVN): subclass which uses Subversion instead of CVS
5129 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
5131 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
5133 (CVSCommand.cvsComplete): don't assume chdir worked on win32
5135 2004-02-25 Brian Warner <warner@lothar.com>
5137 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
5138 is now either a list (which is passed to spawnProcess directly) or
5139 a string (which gets passed to /bin/sh -c). This removes the useSH
5140 flag and the ArgslistCommand class. Also send status header at the
5141 start and end of each command, instead of having the master-side
5143 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
5144 -r'. Update to use list-based arguments.
5145 (SVNFetch): use list-based arguments, use ['dir'] argument to
5147 * buildbot/test/test_steps.py (Commands): match changes
5149 * buildbot/process/step.py (InternalShellCommand.words): handle
5151 (SVN): inherit from CVS, cleanup
5153 * buildbot/status/event.py (Logfile.content): render in HTML, with
5154 stderr in red and headers (like the name of the command we're
5155 about to run) in blue. Add link to a second URL (url + "?text=1")
5156 to get just stdout/stderr in text/plain without markup. There is
5157 still a problem with .entries=None causing a crash, it seems to occur
5158 when the logfile is read before it is finished.
5160 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
5161 timeout to the keepalives, and use it to explicitly do a
5162 loseConnection instead of waiting for TCP to notice the loss. This
5163 ought to clear up the silent-lossage problem.
5164 (unsafeTracebacks): pass exception tracebacks back to the master,
5165 makes it much easier to debug problems
5167 2004-02-23 Brian Warner <warner@lothar.com>
5169 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
5170 the whole command to /bin/sh instead of execve [Johan Dahlin]
5171 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
5172 '-r HEAD' [Johan Dahlin]
5173 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
5175 * buildbot/changes/changes.py (Change): add links= argument, add
5176 asHTML method [Johan Dahlin]. Modified to make a bit more
5177 XHTMLish. Still not sure how to best use links= .
5179 * buildbot/status/html.py (StatusResourceCommits.getChild): use
5180 Change.asHTML to display the change, not asText
5182 * buildbot/status/html.py (StatusResourceBuilder): web button to
5185 * buildbot/test/test_run.py: test to actually start a buildmaster
5188 * MANIFEST.in: bring back accidentally-dropped test helper files
5190 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
5191 that require cvstoys if it is not installed
5193 * buildbot/process/step_twisted.py (RunUnitTests): allow other
5194 values of "bin/trial" [Dave Peticolas]
5195 (RunUnitTests.finishStatus): say "no tests run" instead of "0
5196 tests passed" when we didn't happen to run any tests
5198 * buildbot/process/step.py (Compile): use haltOnFailure instead of
5199 flunkOnFailure [Johan Dahlin]
5201 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
5202 multiple instances of the same Step class by suffixing "_2", etc,
5203 to the name until it is unique. This name needs to be unique
5204 because it is used as a key in the dictionary that tracks build
5206 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
5209 * buildbot/process/base.py (Builder.ping): add "ping slave" command
5211 2004-01-14 Brian Warner <warner@lothar.com>
5213 * buildbot/status/words.py (IrcStatusBot): when we leave or get
5214 kicked from a channel, log it
5216 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
5217 something over whatever IRC channels the buildmaster is currently
5218 connected to. Added to try and track down a problem in which the
5219 master thinks it is still connected but the IRCd doesn't see it. I
5220 used a styles.Versioned this time, so hopefully users won't have
5221 to rebuild their .tap files this time.
5222 * contrib/debug.glade: add a "Poke IRC" button
5223 * contrib/debugclient.py: same
5225 * setup.py: bump to 0.4.2+ while between releases
5227 2004-01-08 Brian Warner <warner@lothar.com>
5229 * setup.py (version): Releasing buildbot-0.4.2
5231 2004-01-08 Brian Warner <warner@lothar.com>
5233 * NEWS: update for 0.4.2 release
5235 * README: document how to run the tests, now that they all pass
5237 * buildbot/changes/maildir.py (Maildir.poll): minor comment
5239 * buildbot/process/step.py (CVS): add a global_options= argument,
5240 which lets you set CVS global options for the command like "-r"
5241 for read-only checkout, or "-R" to avoid writing in the
5243 * buildbot/slavecommand.py (CVSCommand): same
5245 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
5246 testing easier (it is turned off when testing, to avoid the
5249 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
5250 to make it easier to test: break generateStepID() out to a
5251 separate function, only update statusbag if it exists.
5252 (ShellCommands): create useful text for dict-based commands too.
5254 * test/*, buildbot/test/*: move unit tests under the buildbot/
5256 * setup.py (packages): install buildbot.test too
5258 * buildbot/test/test_slavecommand.py: fix it, tests pass now
5259 * buildbot/test/test_steps.py: fix it, tests pass now
5261 2004-01-06 Brian Warner <warner@lothar.com>
5263 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
5264 freshcvs mail uses a slightly different syntax for new
5265 directories. Update parser to handle either.
5266 * test/test_mailparse.py (Test1.testMsg9): test for same
5268 2003-12-21 Brian Warner <warner@lothar.com>
5270 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
5271 'warnOnWarnings' so that lintian errors mark the build orange
5273 2003-12-17 Brian Warner <warner@lothar.com>
5275 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
5276 messages emitted by Bonsai, contributed by Stephen Davis.
5278 * test/*: moved all tests to use trial instead of unittest. Some
5279 still fail (test_steps, test_slavecommand, and test_process).
5281 * setup.py (version): bump to 0.4.1+ while between releases
5283 2003-12-09 Brian Warner <warner@lothar.com>
5285 * setup.py (version): Releasing buildbot-0.4.1
5287 2003-12-09 Brian Warner <warner@lothar.com>
5289 * NEWS: update for 0.4.1 release
5291 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
5292 freebsd builder code a little bit
5294 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
5295 don't try to compare attributes of different classes
5296 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5297 (MaildirSource.messageReceived): fix Change delivery
5299 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
5300 into the config file's namespace before loading it, like the
5301 documentation claims it does
5302 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
5303 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
5304 daemon comes back online
5306 2003-12-08 Brian Warner <warner@lothar.com>
5308 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
5309 so the example will work with online=0 as well
5311 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
5312 fix the __implements__ line
5314 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
5315 class a twisted.application.service.Service, use startService to
5318 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
5319 directory fd instead of simple open(). I'm sure this used to work,
5320 but the current version of python refuses to open directories with
5323 2003-12-05 Brian Warner <warner@lothar.com>
5325 * setup.py (version): bump to 0.4.0+ while between releases
5327 2003-12-05 Brian Warner <warner@lothar.com>
5329 * setup.py (version): Releasing buildbot-0.4.0
5331 2003-12-05 Brian Warner <warner@lothar.com>
5333 * docs/examples/glib_master.cfg: replace old sample scripts with
5334 new-style config files
5335 * MANIFEST.in: include .cfg files in distribution tarball
5337 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
5338 implement a dummy method to avoid the exception that occurs when
5339 freshcvs sends this to us.
5341 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
5342 removed the method, as it broke reconnection. Apparently
5343 stopFactory is called each time the connection attempt fails. Must
5345 (ReconnectingPBClientFactory.__getstate__): squash the _callID
5346 attribute before serialization, since without stopFactory the
5347 reconnect timer may still be active and they aren't serializable.
5349 * test/test_mailparse.py (ParseTest): test with 'self' argument
5351 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
5352 argument, as these "functions" are invoked like methods from class
5353 attributes and therefore always get an instance as the first
5356 * buildbot/changes/maildir.py (Maildir.start): fix error in error
5357 message: thanks to Stephen Davis for the catch
5359 2003-12-04 Brian Warner <warner@lothar.com>
5361 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
5362 twisted's standard ReconnectingClientFactory. Handles both oldcred
5363 and newcred connections. Also has a bug-workaround for
5364 ReconnectingClientFactory serializing its connector when it
5367 * buildbot/bot.py (BotFactory): rewrite connection layer with new
5368 pbutil. Replace makeApp stuff with proper newcred/mktap
5369 makeService(). Don't serialize Ephemerals on shutdown.
5371 * buildbot/changes/changes.py (ChangeMaster): make it a
5372 MultiService and add the sources as children, to get startService
5373 and stopService for free. This also gets rid of the .running flag.
5375 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
5376 new pbutil, turn into a TCPClient at the same time (to get
5377 startService for free). Two variants exist: FreshCVSSourceOldcred
5378 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
5379 yet, but when it does, we'll be ready).
5380 (FreshCVSSource.notify): handle paths which are empty after the
5381 prefix is stripped. This only happens when the top-level (prefix)
5382 directory is added, at the very beginning of a Repository's life.
5384 * buildbot/clients/base.py: use new pbutil, clean up startup code.
5385 Now the only reconnecting code is in the factory where it belongs.
5386 (Builder.unsubscribe): unregister the disconnect callback when we
5387 delete the builder on command from the master (i.e. when the
5388 buildmaster is reconfigured and that builder goes away). This
5389 fixes a multiple-delete exception when the status client is shut
5391 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
5394 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
5395 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
5397 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
5399 * contrib/run_maxq.py: Accept a testdir as an argument rather than
5400 a list of globs (ugh). The testdir will be searched for files
5401 named *.tests and run the tests in the order specified in each of
5402 those files. This allows for "dependancies" between tests to be
5405 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
5406 argument to pass to run_maxq.py, instead of a glob.
5408 2003-10-17 Brian Warner <warner@lothar.com>
5410 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
5411 files that live in the sandbox
5413 2003-10-15 Brian Warner <warner@lothar.com>
5415 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
5416 spelling error in "docs" count-warnings output
5417 (HLint.start): stupid thinko meant .xhtml files were ignored
5419 * docs/examples/twisted_master.cfg (reactors): disable cReactor
5420 tests now that cReactor is banished to the sandbox
5422 2003-10-10 Brian Warner <warner@lothar.com>
5424 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
5425 scheme: now .xhtml are sources and .html are generated
5427 2003-10-08 Brian Warner <warner@lothar.com>
5429 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
5430 we were ignoring the 'randomly' parameter.
5432 2003-10-01 Brian Warner <warner@lothar.com>
5434 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
5435 posix, to kill sub-children of aborted slavecommands.
5437 * buildbot/status/builder.py: rename Builder to BuilderStatus.
5438 Clean up initialization: lastBuildStatus remains None until the
5439 first build has been completed.
5441 * buildbot/status/html.py (WaterfallStatusResource.body): handle
5442 None as a lastBuildStatus
5443 * buildbot/clients/gtkPanes.py: same
5445 * buildbot/status/client.py (StatusClientService): keep
5446 BuilderStatus objects in self.statusbags . These objects now live
5447 here in the StatusClientService and are referenced by the Builder
5448 object, rather than the other way around.
5449 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
5450 * buildbot/process/base.py (Builder): same
5451 * test/test_config.py (ConfigTest.testBuilders): same
5453 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
5454 an existing builder, leave the statusbag alone. This will preserve the
5457 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
5458 hook. This will probably go away in favor of a class in upcoming
5461 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
5462 serviceName from newcred FreshCVSNotifiee setup
5464 2003-09-29 Brian Warner <warner@lothar.com>
5466 * buildbot/process/process_twisted.py: switch to new reactor
5468 * docs/examples/twisted_master.cfg: same
5470 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
5472 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
5473 botmaster reference instead of the oldapp service lookup
5475 * buildbot/master.py (BuildMaster.__init__): give the
5476 StatusClientService a reference to the botmaster to make it easier to
5479 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5481 * buildbot/status/html.py (Box.td): escape hreffy things so you
5482 can have spaces in things like builder names
5483 (StatusResourceBuilder.body)
5484 (WaterfallStatusResource.body)
5485 (WaterfallStatusResource.body0): same
5487 2003-09-25 Brian Warner <warner@lothar.com>
5489 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
5490 rearrange the builder list when adding or removing builders: keep
5491 them in the order the user requested.
5492 * test/test_config.py (ConfigTest.testBuilders): verify it
5494 * contrib/debug.glade: give the debug window a name
5496 * buildbot/process/base.py (Builder.buildTimerFired): builders can
5497 now wait on multiple interlocks. Fix code relating to that.
5498 (Builder.checkInterlocks): same
5499 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
5501 * buildbot/master.py (BuildMaster.loadConfig): move from
5502 deprecated pb.BrokerFactory to new pb.PBServerFactory
5503 * test/test_config.py (ConfigTest.testWebPathname): same
5505 * docs/examples/twisted_master.cfg: fix interlock declaration
5507 * buildbot/master.py (BotMaster.addInterlock): move code to attach
5508 Interlocks to their Builders into interlock.py .
5509 (BuildMaster.loadConfig_Interlocks): fix interlock handling
5511 * test/test_config.py (ConfigTest.testInterlocks): validate
5514 * buildbot/process/base.py (Builder.__init__): better comments
5515 * buildbot/process/interlock.py (Interlock.__repr__): same
5516 (Interlock.deactivate): add .active flag, move the code that
5517 attaches/detaches builders into the Interlock
5519 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
5521 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
5522 tests using the new run_maxq.py script, and reporting failures by
5525 * contrib/run_maxq.py: Hacky little script for running a set of maxq
5526 tests, reporting their success or failure in a buildbot-friendly
5529 2003-09-24 Brian Warner <warner@lothar.com>
5531 * docs/examples/twisted_master.cfg: example of a new-style config
5532 file. This lives in the buildmaster base directory as
5535 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
5536 button to make the master re-read its config file
5538 * buildbot/master.py (BuildMaster.loadConfig): new code to load
5539 buildmaster configuration from a file. This file can be re-read
5540 later, and the buildmaster will update itself to match the new
5541 desired configuration. Also use new Twisted Application class.
5542 * test/Makefile, test/test_config.py: unit tests for same
5544 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
5545 FreshCVSSources comparable, to support reload.
5546 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
5548 * buildbot/process/base.py (Builder): make them comparable, make
5549 Interlocks easier to attach, to support reload. Handle
5550 re-attachment of remote slaves.
5551 * buildbot/process/interlock.py (Interlock): same
5553 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
5554 Twisted's new Application class. Requires Twisted >= 1.0.8 .
5555 buildmaster taps are now constructed with mktap.
5556 * buildbot/status/client.py (StatusClientService): same
5558 * buildbot/status/words.py: move to new Services, add support to
5559 connect to multiple networks, add reload support, allow nickname
5560 to be configured on a per-network basis
5562 2003-09-20 Brian Warner <warner@lothar.com>
5564 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
5565 the freebsd builder, now that the machine has been upgraded and no
5566 longer has python2.2
5568 * setup.py (version): bump to 0.3.5+ while between releases
5570 2003-09-19 Brian Warner <warner@lothar.com>
5572 * setup.py (version): Releasing buildbot-0.3.5
5574 2003-09-19 Brian Warner <warner@lothar.com>
5576 * NEWS: add post-0.3.4 notes
5578 * README (REQUIREMENTS): note twisted-1.0.7 requirement
5580 * MANIFEST.in: add contrib/*
5582 * docs/examples/twisted_master.py (twisted_app): all build slaves must
5583 use a remote root now: cvs.twistedmatrix.com
5585 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
5587 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
5588 compatibility with old servers
5589 (FreshCVSSource.start): and provide a way to use it
5590 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
5592 * docs/examples/twisted_master.py (twisted_app): update to new
5594 (twisted_app): listen on new ~buildbot socket
5595 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
5597 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
5598 to reduce cvs bandwidth (update instead of full checkout)
5600 2003-09-11 Brian Warner <warner@lothar.com>
5602 * contrib/fakechange.py: demo how to connect to the changemaster
5603 port. You can use this technique to submit changes to the
5604 buildmaster from source control systems that offer a hook to run a
5605 script when changes are committed.
5607 * contrib/debugclient.py: tool to connect to the debug port. You
5608 can use it to force builds, submit fake changes, and wiggle the
5611 * buildbot/master.py: the Big NewCred Reorganization. Use a single
5612 'Dispatcher' realm to handle all the different kinds of
5613 connections and Perspectives: buildslaves, the changemaster port,
5614 the debug port, and the status client port. NewCredPerspectives
5615 now have .attached/.detached methods called with the remote 'mind'
5616 reference, much like old perspectives did. All the pb.Services
5617 turned into ordinary app.ApplicationServices .
5618 (DebugService): went away, DebugPerspectives are now created
5619 directly by the Dispatcher.
5620 (makeApp): changed interface a little bit
5622 * buildbot/changes/changes.py: newcred
5623 * buildbot/status/client.py: newcred
5625 * buildbot/clients/base.py: newcred client side changes
5626 * buildbot/bot.py: ditto
5628 * docs/examples/glib_master.py: handle new makeApp() interface
5629 * docs/examples/twisted_master.py: ditto
5631 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
5632 base newcred Perspectives on. This should go away once Twisted
5633 itself provides something sensible.
5636 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
5638 * contrib/svn_buildbot.py: A program that you can call from your
5639 SVNREPO/hooks/post-commit file that will notify a BuildBot master
5640 when a change in an SVN repository has happened. See the top of
5641 the file for some minimal usage info.
5643 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5645 * buildbot/slavecommand.py (ArglistCommand): Add new
5646 ArglistCommand that takes an argument list rather than a string as
5647 a parameter. Using a st.split() for argv is very bad.
5649 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
5650 update to a particular revision rather than always checking out
5651 (still not very smart about it, there may be cases where the
5652 checkout becomes inconsistent).
5654 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
5656 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
5657 SVN fetch support. It can checkout (not update!) a specified
5658 revision from a specified repository to a specified directory.
5660 * buildbot/status/progress.py (Expectations.update): Fix an
5661 obvious bug (apparently created by the change described in the
5662 previous ChangeLog message) by moving a check to *after* the
5663 variable it checks is defined.
5666 2003-09-08 Brian Warner <warner@lothar.com>
5668 * buildbot/status/progress.py (Expectations.update): hack to catch
5669 an exception TTimo sees: sometimes the update() method seems to
5670 get called before the step has actually finished, so the .stopTime
5671 is not set, so no totalTime() is available and we average None
5672 with the previous value. Catch this and just don't update the
5673 metrics, and emit a log message.
5675 2003-08-24 Brian Warner <warner@lothar.com>
5677 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
5678 parameter to set copydir='original' in CVS commands.
5680 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
5682 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
5683 which tells the command to maintain a separate original-source CVS
5684 workspace. For each build, this workspace will be updated, then
5685 the tree copied into a new workdir. This reduces CVS bandwidth
5686 (from a full checkout to a mere update) while doubling the local
5687 disk usage (to keep two copies of the tree).
5689 2003-08-21 Brian Warner <warner@lothar.com>
5691 * buildbot/status/event.py (Logfile.addEntry): if the master web
5692 server dies while we're serving a page, request.write raises
5693 pb.DeadReferenceError . Catch this and treat it like a
5694 notifyFinish event by dropping the request.
5696 2003-08-18 Brian Warner <warner@lothar.com>
5698 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
5699 (instead of blowing up) if a force-build command is given without
5702 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
5703 don't blow up if there aren't yet any Changes in the list
5705 2003-08-02 Brian Warner <warner@lothar.com>
5707 * buildbot/bot.py (updateApplication): don't set the .tap name,
5708 since we shouldn't assume we own the whole .tap file
5710 * buildbot/bb_tap.py (updateApplication): clean up code, detect
5711 'mktap buildbot' (without a subcommand) better
5713 2003-07-29 Brian Warner <warner@lothar.com>
5715 * buildbot/status/words.py
5716 (IrcStatusFactory.clientConnectionLost): when we lose the
5717 connection to the IRC server, schedule a reconnection attempt.
5719 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
5720 use shutil.rmtree instead of forking off an "rm -rf" command.
5721 rmtree may take a while and will block until it finishes, so we
5722 use "rm -rf" if available.
5724 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
5725 freebsd buildslave badly
5727 * setup.py (version): bump to 0.3.4+ while between releases
5729 2003-07-28 Brian Warner <warner@lothar.com>
5731 * setup.py (version): Releasing buildbot-0.3.4
5733 2003-07-28 Brian Warner <warner@lothar.com>
5735 * NEWS: update in preparation for release
5737 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
5738 process.signalProcess instead of os.kill, to improve w32
5741 * docs/examples/twisted_master.py (twisted_app): turn off
5742 win32eventreactor: the tests hang the buildslave badly
5744 * buildbot/process/base.py (Build.buildFinished): update ETA even on
5745 failed builds, since usually the failures are consistent
5747 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5748 add compileOpts/compileOpts2 to reactors build
5750 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
5751 (twisted_app): use both default and win32eventreactor on w32 build.
5752 Use both default and kqreactor on freebsd build.
5754 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5755 add compileOpts2, which is put after the build_ext argument. w32
5756 needs "-c mingw32" here.
5758 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
5759 touch .acqpath, it goes away in recent Twisted releases
5761 * docs/examples/twisted_master.py (twisted_app): use "python" for
5762 the w32 buildslave, not "python2.2"
5764 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
5765 the directory exists.. should hush an exception under w32
5767 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
5768 ProcessTerminated -provided values for signal and exitCode rather
5769 than parsing the unix status code directly. This should remove one
5770 more roadblock for a w32-hosted buildslave.
5772 * test/test_mailparse.py: add test cases for Syncmail parser
5774 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
5775 temporary compatibility import. Note! Start importing
5776 FCMaildirSource from changes.mail instead of changes.freshcvsmail
5778 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
5780 2003-07-27 Brian Warner <warner@lothar.com>
5782 * NEWS: started adding new features
5784 * buildbot/changes/mail.py: start work on Syncmail parser, move
5785 mail sources into their own file
5787 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
5788 as implementing IChangeSource
5789 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
5791 * buildbot/interfaces.py: define the IChangeSource interface
5793 2003-07-26 Brian Warner <warner@lothar.com>
5795 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
5797 2003-06-25 Brian Warner <warner@lothar.com>
5799 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
5802 2003-06-17 Brian Warner <warner@lothar.com>
5804 * buildbot/status/words.py: clean up method usage to avoid error
5805 in silly IRC command
5806 (IrcStatusBot.emit_status): round off seconds display
5808 * buildbot/process/base.py (Build): delete the timer when saving
5809 to the .tap file, and restore it (if it should still be running)
5810 upon restore. This should fix the "next build in -34 seconds"
5811 messages that result when the master is restarted while builds are
5812 sitting in the .waiting slot. If the time for the build has
5813 already passed, start it very soon (in 1 second).
5815 * buildbot/status/words.py: more silly commands
5817 * README (REQUIREMENTS): add URLs to all required software
5819 * buildbot/status/words.py ('last'): mention results of, and time
5822 2003-05-28 Brian Warner <warner@lothar.com>
5824 * buildbot/status/words.py: add 'last' command
5825 (IrcStatusBot.emit_status): add current-small text to 'status' output
5827 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
5828 (twisted_app): remove spaces from OS-X builder name
5830 * buildbot/master.py (makeApp): add knob to turn on IRC bot
5831 * buildbot/status/words.py: IRC bot should actually be useful now
5833 2003-05-23 Brian Warner <warner@lothar.com>
5835 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
5836 "slave information" from $(slavedir)/info/* . These files are
5837 maintained by the slave administrator, and describe the
5838 machine/environment that is hosting the slave. Information from
5839 them is put into the "Builder" HTML page. Still need to establish
5840 a set of well-known filenames and meanings for this data: at the
5841 moment, *all* info/* files are sent to the master, but only
5842 'admin' and 'host' are used on that end.
5843 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
5844 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
5845 * buildbot/master.py (BotPerspective.got_info): ditto
5847 2003-05-22 Brian Warner <warner@lothar.com>
5849 * setup.py (version): bump version to 0.3.3+ while between releases
5851 2003-05-21 Brian Warner <warner@lothar.com>
5853 * setup.py: Releasing buildbot-0.3.3
5855 2003-05-21 Brian Warner <warner@lothar.com>
5857 * NEWS: 0.3.3 news items
5859 * README: describe --keepalive and life behind a NAT box
5861 * buildbot/bot.py (Bot.connected): implement application-level
5862 keepalives to deal with NAT timeouts, turn them on with
5863 --keepalive option or when SO_KEEPALIVE doesn't work.
5865 * buildbot/master.py (BotPerspective): accept keepalives silently
5867 * buildbot/process/base.py (Build.buildException): CopiedFailures
5868 don't carry as much information as local ones, so don't try to
5869 create a big HTMLized version of them.
5871 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
5872 log file when step fails due to an exception, such as when the slave
5875 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
5876 --testmodule argument instead of grepping for test-case-name tags
5877 ourselves. Remove FindUnitTests code.
5878 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
5880 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
5882 2003-05-16 Brian Warner <warner@lothar.com>
5884 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
5885 argument to allow things like CFLAGS=-O0 to be passed without relying
5886 upon /bin/sh processing on the slave.
5888 * buildbot/process/step.py (InternalShellCommand.start): send
5890 * buildbot/slavecommand.py (ShellCommand.start): create argv with
5891 'split' instead of letting /bin/sh do it. This should also remove
5892 the need for /bin/sh on the buildslave, making it more likely to
5895 * buildbot/status/html.py: html-escape text in blamelist.
5896 Add "force build" button to the Builder page.
5898 * buildbot/process/step_twisted.py (countFailedTests): look at
5899 last 1000 characters for status line, as import errors can put it
5900 before the -200 point.
5902 2003-05-15 Brian Warner <warner@lothar.com>
5904 * docs/examples/twisted_master.py: use clobber=0 for remote builds
5906 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5907 make 'clobber' a parameter, so it is possible to have builds which
5908 do full tests but do a cvs update instead of hammering the CVS
5909 server with a full checkout each build
5911 * buildbot/process/step.py (InternalShellCommand): bump default
5912 timeout to 20 minutes
5914 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
5915 the master to trigger a build. Run it via manhole.
5917 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5918 allow slaves to trigger any build that they host, to make life
5919 easier for slave admins who are testing out new build processes
5921 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
5922 don't flunk cReactor or qtreactor on failure, since they fail alot
5923 these days. Do warnOnFailure instead.
5925 * buildbot/process/base.py: change Builder.buildable from a list
5926 into a single slot. When we don't have a slave, new builds (once
5927 they make it past the timeout) are now merged into an existing
5928 buildable one instead of being queued. With this change, a slave
5929 which has been away for a while doesn't get pounded with all the
5930 builds it missed, but instead just does a single build.
5932 2003-05-07 Brian Warner <warner@lothar.com>
5934 * setup.py (version): bump version to 0.3.2+ while between releases
5936 2003-05-07 Brian Warner <warner@lothar.com>
5938 * setup.py: Releasing buildbot-0.3.2
5940 2003-05-07 Brian Warner <warner@lothar.com>
5942 * setup.py: fix major packaging error: include subdirectories!
5944 * NEWS: add changes since last release
5946 * README (REQUIREMENTS): update twisted/python dependencies
5948 * buildbot/status/builder.py (Builder.startBuild): change
5949 BuildProcess API: now they should call startBuild/finishBuild
5950 instead of pushing firstEvent / setLastBuildStatus. Moving towards
5951 keeping a list of builds in the statusbag, to support other kinds of
5953 (Builder.addClient): send current-activity-small to new clients
5954 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
5957 * buildbot/status/client.py: drop RemoteReferences at shutdown
5959 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
5961 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
5962 more debug messages for remote status client
5964 * buildbot/process/step.py (InternalBuildStep.stepComplete)
5965 (.stepFailed): only fire the Deferred once, even if both
5966 stepComplete and stepFailed are called. I think this can happen if
5967 an exception occurs at a weird time.
5969 * buildbot/status/words.py: work-in-progress: IRC status delivery
5971 2003-05-05 Brian Warner <warner@lothar.com>
5973 * docs/examples/twisted_master.py (twisted_app): hush internal
5974 python2.3 distutils deprecation warnings
5975 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5976 add compileOpts= argument which inserts extra args before the
5977 "setup.py build_ext" command. This can be used to give -Wignore
5978 warnings, to hush some internal python-2.3 deprecation messages.
5980 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
5981 the ['twisted.test'] default test case to make it easier to change
5984 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
5985 * buildbot/clients/gtkPanes.py: ditto
5987 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
5988 arg to collapse RunUnitTestsRandomly into RunUnitTests
5989 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
5990 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
5992 * buildbot/status/html.py (StatusResource): shuffle Resources
5993 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
5994 would serve the waterfall display, but the internal links were
5995 only valid on the trailing-slash version. The correct behavior is
5996 for the non-slashed one to serve a Redirect to the slashed one.
5997 This only shows up when the buildbot page is hanging off another
5998 server, like a Twisted-Web distributed server.
6000 * buildbot/status/event.py (Event, RemoteEvent): make Events
6001 pb.Cacheable, with RemoteEvent as the cached version. This removes
6002 a lot of explicit send-an-update code.
6003 * buildbot/status/builder.py (Builder): remove send-update code
6004 * buildbot/status/client.py (ClientBuilder): remove send-update
6005 code, and log errors that occur during callRemote (mostly to catch
6006 InsecureJelly exceptions)
6008 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6009 run Lore with the same python used in the rest of the build
6011 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
6013 * buildbot/process/step_twisted.py (HLint): accept 'python'
6014 argument. Catch rc!=0 and mark the step as failed. This marks the
6015 build orange ("has warnings").
6016 (RunUnitTestsJelly): move out to step_twisted2.py
6018 * buildbot/util.py (ignoreStaleRefs): add utility function
6020 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
6021 don't fake ETA object, it's too hard to get right
6023 2003-05-02 Brian Warner <warner@lothar.com>
6025 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
6027 2003-05-01 Brian Warner <warner@lothar.com>
6029 * buildbot/status/html.py (StatusResource.body): oops, I was
6030 missing a <tr>, causing the waterfall page to be misrendered in
6031 everything except Galeon.
6033 2003-04-29 Brian Warner <warner@lothar.com>
6035 * docs/examples/twisted_master.py: make debuild use python-2.2
6036 explicitly, now that Twisted stopped supporting 2.1
6038 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
6039 handle tuple results too. I keep forgetting this, which suggests
6040 it needs to be rethought.
6042 * setup.py (setup): bump version to 0.3.1+ while between releases
6044 2003-04-29 Brian Warner <warner@lothar.com>
6046 * setup.py: Releasing buildbot-0.3.1
6048 2003-04-29 Brian Warner <warner@lothar.com>
6050 * README (SUPPORT): add plea to send questions to the mailing list
6052 * NEWS, MANIFEST.in: add description of recent changes
6054 * docs/examples/twisted_master.py: add the code used to create the
6055 Twisted buildmaster, with passwords and such removed out to a
6058 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
6059 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
6060 buildmasters to not require CVSToys be installed.
6061 * README, docs/examples/glib_master: update to match the change
6063 * buildbot/clients/base.py, buildbot/bot.py,
6064 buildbot/changes/changes.py, buildbot/pbutil.py: copy
6065 ReconnectingPB from CVSToys distribution to remove CVSToys
6066 dependency for build slaves and status clients. Buildmasters which
6067 use FreshCVSSources still require cvstoys be installed, of course.
6069 2003-04-25 Brian Warner <warner@lothar.com>
6071 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
6072 runTestsRandomly arg to turn on trial -z
6074 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
6075 experimental code to use trial's machine-parseable output to get
6076 more detailed test results. Still has some major issues.
6077 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
6080 * buildbot/status/builder.py (Builder.setCurrentBuild):
6081 anticipating moving build history into statusbag, not used yet
6083 * buildbot/status/tests.py: code to centralize test results,
6084 doesn't work quite yet
6086 * buildbot/status/event.py (Event): use hasattr("setName") instead
6087 of isinstance for now.. need better long-term solution
6089 * buildbot/status/html.py: Remove old imports
6091 2003-04-24 Brian Warner <warner@lothar.com>
6093 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
6094 ignore changes under doc/fun/ and sandbox/
6096 * buildbot/process/step_twisted.py: update pushEvent and friends.
6098 * buildbot/status/html.py (Box.td): replace event.buildername with
6099 event.parent.getSwappableName(). Needs more thought.
6101 * buildbot/status/builder.py (Builder): Replace pushEvent and
6102 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
6103 Tell events they are being pruned with event.delete().
6105 * buildbot/process/base.py (Build): Remove Builder status-handling
6106 methods. s/pushEvent/setCurrentActivity/.
6108 * buildbot/process/step.py (BuildStep): clean up status delivery.
6109 Gouse builder.statusbag methods instead of intermediate builder
6110 methods. s/updateLastEvent/updateCurrentActivity/.
6111 s/finalizeLastEvent/finishCurrentActivity/. Use
6112 addFileToCurrentActivity for summaryFunction.
6114 * buildbot/status/event.py (Logfile): put data in a Swappable when
6116 (Event): add more setter methods. Remove .buildername, use .parent
6117 and getSwappableName instead (needs more thought).
6119 * buildbot/util.py (Swappable):
6120 * test/test_swap.py: don't bother setting filename at __init__
6121 time, do it later. Change setFilename args to take parent first,
6122 since it provides the most significant part of the filename.
6124 2003-04-23 Brian Warner <warner@lothar.com>
6126 * buildbot/status/event.py (Logfile.addEntry): append to previous
6129 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
6130 anticipating Swappable
6131 (InternalShellCommand.remoteUpdate): split out various log-adding
6132 methods so subclasses can snarf stdout separately
6134 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
6135 in anticipation of Swappable build logs
6136 (Builder.testsFinished): anticipating TestResults, still disabled
6138 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
6141 * buildbot/status/event.py (Logfile): add (disabled) support for
6142 Swappable, not ready for use yet
6144 * buildbot/util.py (Swappable): object which is swapped out to
6145 disk after some period of no use.
6146 * test/test_swap.py: test buildbot.utils.Swappable
6148 2003-04-14 Brian Warner <warner@lothar.com>
6150 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
6151 periodic-build timer. Set the .periodicBuildTime on a builder
6152 instance to some number of seconds to activate it.
6154 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
6156 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
6157 a way that survives result tuples
6159 2003-04-12 Brian Warner <warner@lothar.com>
6161 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6162 return a dict instead of a tuple: allow summarizers to provide
6163 multiple summaries if they want
6164 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
6165 (debuildSummarizer): summarize lintian warnings/errors
6167 2003-04-10 Brian Warner <warner@lothar.com>
6169 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
6171 2003-04-09 Brian Warner <warner@lothar.com>
6173 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
6174 empty summaries: happens when the tests fail so hard they don't emit
6175 a parseable summary line.
6177 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
6178 Allow summaryFunction to return None to indicate no summary should
6181 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
6182 writing to stale HTTP requests: notice when they disconnect and
6183 remove the request from the list. Also add CacheToFile from
6184 moshez, will be used later.
6186 2003-04-08 Brian Warner <warner@lothar.com>
6188 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
6189 should be an int, not a list of strings
6191 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
6192 if we weren't actually connected
6194 * buildbot/process/step_twisted.py (trialTextSummarizer): function
6195 to show the tail end of the trial text output
6197 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
6198 hook to summarize the results of a ShellCommand
6200 2003-04-07 Brian Warner <warner@lothar.com>
6202 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
6203 twisted test suite code into a single class.
6204 * buildbot/process/process_twisted.py: same
6206 2003-04-04 Brian Warner <warner@lothar.com>
6208 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
6210 * README (SLAVE): document use of mktap to create slave .tap file
6211 (REQUIREMENTS): describe dependencies
6213 * buildbot/bb_tap.py, buildbot/plugins.tml:
6214 * buildbot/bot.py (updateApplication): Add mktap support for creating
6215 buildslave .tap files
6217 2003-03-28 Brian Warner <warner@lothar.com>
6219 * buildbot/process/step.py (InternalShellCommand.finished): handle
6220 new tuple result values (fix embarrasing bug that appeared during
6223 2003-03-27 Brian Warner <warner@lothar.com>
6225 * docs/examples/glib_master.py, README: add sample buildmaster.tap
6228 2003-03-25 Brian Warner <warner@lothar.com>
6230 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
6231 to overall build status
6232 * buildbot/clients/base.py (Builder): improve event printing
6233 * buildbot/process/base.py (BasicBuildFactory): use specific steps
6234 instead of generic ShellCommand
6235 (Build): Add .stopBuild, use it when slave is detached
6237 * buildbot/process/step.py (Configure,Test): give the steps their
6238 own names and status strings
6240 * buildbot/status/html.py (StatusResource): add "show" argument,
6241 lets you limit the set of Builders being displayed.
6243 2003-03-20 Brian Warner <warner@lothar.com>
6245 * buildbot/process/basic.py: removed
6247 2003-03-19 Brian Warner <warner@lothar.com>
6249 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
6250 turn off process-docs by default
6252 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
6253 when displaying build information without anything in allBuilds[]
6255 * buildbot/bot.py (makeApp): really take password from sys.argv
6257 2003-03-18 Brian Warner <warner@lothar.com>
6259 * buildbot/bot.py (buildApp): take password from sys.argv
6261 * README: replace with more useful text
6263 * setup.py: add a real one
6264 * MANIFEST.in, .cvsignore: more distutils packaging stuff
6266 * docs/PyCon-2003/: added sources for PyCon paper.
6268 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
6269 now Build objects control the process and Builder only handles
6270 slave stuff and distribution of changes/status. A new BuildFactory
6271 class creates Build objects on demand.
6273 Created ConfigurableBuild which takes a list of steps to run. This
6274 makes it a lot easier to set up a new kind of build and moves us
6275 closer to being able to configure a build from a web page.
6277 * buildbot/process/step_twisted.py, process_twisted.py: move to
6278 new model. A lot of code went away.
6280 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
6281 send lots of empty progress messages to the client.
6283 * buildbot/master.py (makeApp): enforce builder-name uniqueness
6285 2003-02-20 Brian Warner <warner@lothar.com>
6287 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
6289 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
6290 Twisted bug that prevented non-pty processes from working just got
6291 fixed, and the bug that leaks ptys is still being investigated.
6293 * buildbot/process/step.py (CVS): send timeout arg to slave
6295 * buildbot/clients/gtkPanes.py: add connection-status row, handle
6296 builders coming and going
6297 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
6298 from CVSToys, handle lost-buildmaster
6300 * buildbot/status/client.py (StatusClientService.removeBuilder):
6301 Clean up status client protocol: send builders (with references)
6302 as they are created, rather than sending a list and requiring the
6303 client to figure out which ones are new.
6304 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
6305 attempts to force a build on an unknown builder
6307 2003-02-19 Brian Warner <warner@lothar.com>
6309 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
6310 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
6311 Twisted stops leaking them.
6312 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
6313 builder goes to an idle state.
6315 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
6316 I figure out why CVS commands hang without them, and/or I fix the
6317 hung-command timeout
6319 2003-02-16 Brian Warner <warner@lothar.com>
6321 * buildbot/process/step_twisted.py: bin/hlint went away, replace
6322 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
6323 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
6324 GenerateDocs now that they are prefixed with WARNING:.
6326 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
6327 use manual href target instead of request.childLink
6329 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
6330 display every second, but update the ETA every 5 seconds (or
6331 whenever) as remote_progress messages arrive.
6334 2003-02-12 Brian Warner <warner@lothar.com>
6336 * *: import current sources from home CVS repository
6340 # add-log-time-format: add-log-iso8601-time-string